Developer API
HaleAI HTTP API v1.
Read-only programmatic access to your team's contacts, leads, and deals. Bearer-authenticated, tenant-scoped, paginated. Available on the Team Max tier and above.
Authentication
Every request must include an Authorization: Bearer hk_... header. Mint a token in Settings to API keys. The plaintext token is shown to you once at creation, so copy it to a password manager immediately.
Rate limits: 60 requests in a short burst, 600 per minute sustained, per key. Over-limit requests get a 429 with a Retry-After header.
Response envelopes
List endpoints return { data: [...], pagination: { limit, cursor, nextCursor } }. When nextCursor is non-null, pass it as the next request's cursor to continue paging. Detail endpoints return { data: { ... } }. Errors return { error: { code, message } } with an appropriate HTTP status (400, 401, 404, 429, 500).
Endpoints
GET/api/v1/contacts
Paginated list of contacts in the calling tenant.
Query parameters
limit(1..200): Default 50.cursor(string): From the prior page's nextCursor.source(string): Exact match on contact.source.updatedSince(ISO 8601): Only rows with updatedAt strictly greater than this.
curl "https://app.alohahale.ai/api/v1/contacts?source=zillow&updatedSince=2026-05-01T00:00:00Z" \ -H "Authorization: Bearer hk_..."GET/api/v1/contacts/:contactId
Single contact by id. 404 if not owned by your tenant.
curl https://app.alohahale.ai/api/v1/contacts/ctk_AbCd \ -H "Authorization: Bearer hk_..."GET/api/v1/leads/:leadId
Single lead by id. 404 if not owned by your tenant.
curl https://app.alohahale.ai/api/v1/leads/ld_AbCd \ -H "Authorization: Bearer hk_..."GET/api/v1/deals/:dealId
Single deal by id. 404 if not owned by your tenant.
curl https://app.alohahale.ai/api/v1/deals/dl_AbCd \ -H "Authorization: Bearer hk_..."GET/api/v1/leads
Paginated list of leads. Optional stage filter.
Query parameters
limit(1..200): Default 50.cursor(string): From the prior page's nextCursor.stage(string): new | qualified | nurture | working | won | lost.source(string): Exact match on lead.source.updatedSince(ISO 8601): Only rows with updatedAt strictly greater than this.
curl "https://app.alohahale.ai/api/v1/leads?stage=working&updatedSince=2026-05-01T00:00:00Z" \ -H "Authorization: Bearer hk_..."GET/api/v1/deals
Paginated list of deals. Optional stage filter.
Query parameters
limit(1..200): Default 50.cursor(string): From the prior page's nextCursor.stage(string): opportunity | listing | under_contract | closed | dead.updatedSince(ISO 8601): Only rows with updatedAt strictly greater than this. Deals do not support ?source=.
curl "https://app.alohahale.ai/api/v1/deals?stage=closed" \ -H "Authorization: Bearer hk_..."