https://api.heyy.io/v3.
Things that shape the calls:
- Search replaces the old list calls. v2’s
GETlists becamePOST .../searchwith a body in v3, and v2 was sunset on 1 November 2026. Every read here is a search. queryis a filter expression, not keywords. Useequals(...),contains(...),and(...),or(...),not(...)on the fields each search lists in itsquerydescription; contacts filter onfirstName,lastName,emailand the like, notname. For free-text matching use the separatesearchfield. The two can be sent together and each narrows the rows.- Sorting uses function syntax.
sortByisdesc(createdAt)orasc(name), optionally with'nulls last'. - Paging is zero-based.
pagination.pagestarts at 0,limitis 1 to 100, and the default is 10. Replies carrypagination.totalso a caller knows how many rows matched. - Deletes report partial success. The label and webhook deletes answer 200 with
deletedIdsandnotFoundIds; an id that did not exist is not an error there, so checknotFoundIds.attributes.removeis the exception: an unknown attribute id fails with 404attribute_not_found. - Ids are UUIDs, and a malformed one is a 500. Heyy answers 500
internal_error, not 400, to a path id that is not a UUID and to aquerythat compares an id field with a non-UUID or an enum field with a value outside its list (templatestatusisin_review,active,rejectedorunavailable). This plugin refuses a malformed path id before sending; insidequery, use real ids and values. - Select attributes need options. A
single_selectormulti_selectattribute without options is rejected, and options on a text attribute are rejected too. - Webhook URLs must be https. Heyy only delivers to
https://, so a plain http URL is refused before the request. - Rate limits are per minute per tenant: 100 on Hobby, 500 on Pro, 1,000 on Ultra. A 429 carries
X-RateLimit-Reset, which this plugin turns into a delay, and retries are capped at three.
- 15 typed API operations
Setup
1
Install
2
Add the plugin
corsair.ts
multiTenancy: true, scope calls with corsair.withTenant(id). See Quick start for KEK + Hub keys, and Multi-tenancy for account isolation.3
Choose authentication
- API Key (Recommended)
No setup required yet. When you make your first request as a tenant, Corsair prompts for the API key.More: API Key
4
Connect a tenant
Mint a connect link and send the tenant to it. Hub hosts the page and delivers the result to your app — see Connect / OAuth.
Example API calls
Find a contact by emailWhat’s next
API reference
Every
heyy.api.* operation with input and output types.Connect / OAuth
createLink, Hub delivery, and tenant connect flows.
Use with agents
Expose this plugin’s operations as MCP tools.