DevelopersChangelog
Public API changelog
Last changed 2026-10-18: Partner reads say what the page says. Subscribe by RSS.
Every change to HEY's public API that a partner or an agent can see, dated, newest first: what was added, what changed meaning, what is deprecated. The site renders this file at /developers/changelog, with an RSS feed at /developers/changelog/feed.xml, and the OpenAPI document links it.
/api/* changes additively: a field is added, never renamed, removed or given a new meaning, and a
change of meaning needs /api/v2 with at least 90 days of overlap. When HEY narrows what a value
returns because the old answer was not true — a truth repair — the change is dated here and in the
public API reference the day it ships, and the old population keeps a name of its
own. Changes before 2026-10-16 are dated where they happened, in the reference.
The TypeScript SDK keeps its own changelog in its package; its entries are summarised here.
— Partner reads say what the page says
Changed
GET /api/v1/builder:hey_status_labelandhey_status_helpare the project page's own words for the status. An UNKNOWN status read "Activity unknown" here while the page,/api/v1/scan(status_label) and/api/token/{chainId}/{address}(activityLabel) said "No builder source linked" or "Activity not measurable"; the three by-contract reads now print the same words for every state.hey_statusandstatusare unchanged.- A code week still running reads by absolute days in every partner field — "Code changes, week starting 2026-10-12 (to 2026-10-17)", never a range ending in days that have not happened:
/api/v1/builder'slatest_meaningful_ship.titleandlatest_change.summary(aslast_code_activity.summaryhas since 2026-10-16),/api/v1/scan'sactivity.last_ship_titleand/api/token/{chainId}/{address}'sproject.lastShip.title. A finished week keeps its range. GET /apistarts with the agent contract (/api/agent) and names one read by contract, the Partner Card (/api/v1/builder);/api/tokenand/api/v1/scanare described as the chat-line and Chit-card shapes of the same answer.
Added
- Every answer the per-minute bucket counted states it:
ratelimit-limitandratelimit-policy(120;w=60), and on a private (keyed) answerratelimit-remaining. An anonymous answer is cached at the edge and served to other callers, so it never carries one caller's remainder. All three are readable from a browser. - A write method sent to
/api/v1/builder,/api/v1/scan,/api/token/...or/api/projectsanswers405 method_not_allowedin the error envelope, with its CORS headers andallow(it was an empty body with no content type). - The error table names
invalid_evidence_id,invalid_cursor,invalid_json,source_requiredandmethod_not_allowed, which the API already answered. - OpenAPI:
401,403and503on every operation; the Partner Card's404typed (PartnerNotFound, withscan_url) and itstext/plainandtext/markdownforms; the token lookup typed (TokenLookup);components.headersfor the request id, the API version, the budget and the monthly allowance;/api/reports/monthly[/{month}],/api/agent/stats,/api/export/projects,/api/export/shipsand/api/share/chain-day; a definition for everytabvalue; and links to this changelog. /.well-known/security.txt: where to report a vulnerability in HEY itself.- This changelog and its feed.
- SDK 0.3.3: the walks (
pages(),items(),sync()) pace their pages by the stated budget and wait out a temporary429by itsretry-after, at most three times and never longer than 60 seconds (rateLimit: { wait: 'walks' | 'always' | 'never' }); a monthlyquotais never waited for.HeyApiErrorcarries the server's code (apiCode) andrequestId. The types added on 2026-10-17 (below) are in the package.
Fixed
- A bad key sent as
x-api-keyis told to remove that header; the401named theauthorizationheader whichever one was sent.
— New builders means builders
Changed
GET /api/projects?tab=new-builderslists projects published on HEY in the last 7 days with a builder source HEY reads and at least one counted ship, the most recent first ship first. Before, it listed every page published in the window: of 192 rows, 171 read "Activity unknown" with no builder source, under a name that promised builders. On 2026-10-18 the tab held 47 projects where the old population held 379. This is a truth repair, kept under its name by the founder's ruling; the old population istab=new-on-hey. A partner pollingnew-buildersfor every new page should switch tonew-on-hey.
Added
tab=new-on-hey: every project published on HEY in the last 7 days, builder or not, newest first — whatnew-builderslisted before.GET /api/projects/{slug}/built-on: which builders a project builds on and which build on it, named in code or running on a hook, each link with its evidence. Never a partnership, never an on-chain interaction./api/changes:cursor=continues any page in the mode that issued it;ignoredParametersnames a parameter the ledger does not read./api/projectsreadsqueryasqand names ignored parameters the same way.- The agent contract sets cache-busters and campaign tags aside (
query.ignoredParameters) instead of answering 400;what_changedcarriesdata.resume; an ambiguous name lists up to eight candidates with ticker, activity and catalog status, anderror.candidatesTotal. /api/chain/accelerating:judged,notMeasuredand, for an empty list,reason.underTheRadar(HELD,NOT_HELDorNOT_MEASUREDwith its reason) on the dossier'sscoreand the snapshot'sbuild.
— Today's words beside the stored ones
Changed
/api/changeswithout a cursor (or withbefore) is newest first by each event's first arrival, so a revised old event never leads;afteranddetectedSincekeep ledger order.
Added
- Ships and timeline entries:
displayTitle(a running code week in today's words;titleis unchanged) andcodeWeek.complete. Change upserts and evidence receipts:summaryCurrent. - Market detail:
distribution.figuresWithheld,pools;marketStatusLabel,distribution.staleandtvlReadon the token market;tokenMarket.labelon project cards. - Scores:
cohortEvaluatedAt; the Still Building withheld reasonno_tracked_high.