Skip to content

Ahoy REST API v1

The Ahoy REST API lets you read and write CRM records from your own systems. It is a small, deliberately regular surface: 20 operations over every object type your credential can reach, rather than a bespoke endpoint per entity.

https://api.ahoy.ai/rest/v1/

There is no organisation id in the path. Your credential already belongs to one org, and the server resolves it from the token — so a key can never accidentally read another org’s data by changing a path segment.

Terminal window
curl https://api.ahoy.ai/rest/v1/self/ \
-H "Authorization: Bearer $AHOY_API_KEY"
{
"data": {
"org_id": 42,
"principal_id": "prn_01J8Z2K9QW3X4Y5Z6A7B8C9D",
"reach": "user"
}
}

GET /rest/v1/self/ is the fastest way to confirm a key works, see which org it belongs to, and check its reach.

Every part of the API follows the same rules, so you only have to learn them once.

Success envelopePayloads are wrapped: {"data": ...}
ErrorsRFC 9457 application/problem+json with a closed code enum
PaginationCursor-based — follow pagination.next_cursor
Rate limitsPer org, reported on every response
Tracingrequest_id in every body, Ahoy-Request-Id on every response
CachingCache-Control: no-store — responses are never cached

Two endpoints need no authentication:

EndpointReturns
GET /rest/v1/Version, OpenAPI URL, and docs URL
GET /rest/v1/openapi.jsonThe full OpenAPI 3.1 document

The OpenAPI document is the same artifact this documentation is generated from, so the two can never disagree.

v1 is the major version. Additive changes ship without a version bump — new endpoints, new fields on existing responses, and new reason sub-codes can appear at any time.

While v1 is in beta, breaking changes remain possible; we will announce them before they ship. Once v1 reaches GA, only additive changes will be made to it.

Write clients that tolerate unknown fields and unknown reason values. If v1 is ever deprecated, responses will carry Deprecation and Sunset headers well in advance.