Skip to content

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.

  1. — Partner reads say what the page says

    Changed

    • GET /api/v1/builder: hey_status_label and hey_status_help are 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_status and status are 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's latest_meaningful_ship.title and latest_change.summary (as last_code_activity.summary has since 2026-10-16), /api/v1/scan's activity.last_ship_title and /api/token/{chainId}/{address}'s project.lastShip.title. A finished week keeps its range.
    • GET /api starts with the agent contract (/api/agent) and names one read by contract, the Partner Card (/api/v1/builder); /api/token and /api/v1/scan are described as the chat-line and Chit-card shapes of the same answer.

    Added

    • Every answer the per-minute bucket counted states it: ratelimit-limit and ratelimit-policy (120;w=60), and on a private (keyed) answer ratelimit-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/projects answers 405 method_not_allowed in the error envelope, with its CORS headers and allow (it was an empty body with no content type).
    • The error table names invalid_evidence_id, invalid_cursor, invalid_json, source_required and method_not_allowed, which the API already answered.
    • OpenAPI: 401, 403 and 503 on every operation; the Partner Card's 404 typed (PartnerNotFound, with scan_url) and its text/plain and text/markdown forms; the token lookup typed (TokenLookup); components.headers for the request id, the API version, the budget and the monthly allowance; /api/reports/monthly[/{month}], /api/agent/stats, /api/export/projects, /api/export/ships and /api/share/chain-day; a definition for every tab value; 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 temporary 429 by its retry-after, at most three times and never longer than 60 seconds (rateLimit: { wait: 'walks' | 'always' | 'never' }); a monthly quota is never waited for. HeyApiError carries the server's code (apiCode) and requestId. The types added on 2026-10-17 (below) are in the package.

    Fixed

    • A bad key sent as x-api-key is told to remove that header; the 401 named the authorization header whichever one was sent.
  2. — New builders means builders

    Changed

    • GET /api/projects?tab=new-builders lists 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 is tab=new-on-hey. A partner polling new-builders for every new page should switch to new-on-hey.

    Added

    • tab=new-on-hey: every project published on HEY in the last 7 days, builder or not, newest first — what new-builders listed 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; ignoredParameters names a parameter the ledger does not read. /api/projects reads query as q and names ignored parameters the same way.
    • The agent contract sets cache-busters and campaign tags aside (query.ignoredParameters) instead of answering 400; what_changed carries data.resume; an ambiguous name lists up to eight candidates with ticker, activity and catalog status, and error.candidatesTotal.
    • /api/chain/accelerating: judged, notMeasured and, for an empty list, reason.
    • underTheRadar (HELD, NOT_HELD or NOT_MEASURED with its reason) on the dossier's score and the snapshot's build.
  3. — Today's words beside the stored ones

    Changed

    • /api/changes without a cursor (or with before) is newest first by each event's first arrival, so a revised old event never leads; after and detectedSince keep ledger order.

    Added

    • Ships and timeline entries: displayTitle (a running code week in today's words; title is unchanged) and codeWeek.complete. Change upserts and evidence receipts: summaryCurrent.
    • Market detail: distribution.figuresWithheld, pools; marketStatusLabel, distribution.stale and tvlRead on the token market; tokenMarket.label on project cards.
    • Scores: cohortEvaluatedAt; the Still Building withheld reason no_tracked_high.