Read your recaps, commitments, tasks and contacts from your own tools, and get a signed notification every time a recap is ready. Read-only. Available on the MAX plan.
The CallRecap API lets your own systems read what CallRecap already produced from your calls. Every endpoint is a GET that returns JSON, and a webhook tells you when a new recap exists.
Base URL
URL
https://api.callrecap.app/v1
Read-only
All endpoints are GET.
Plan
Available on the MAX plan.
Auth
Bearer token starting with crk_.
Webhook
recap.ready, signed with HMAC-SHA256.
Quick start
Create a token
In the app: Settings → API & webhooks → Create token. It starts with crk_ and is shown once, so copy it right away.
Make your first request
/me must answer 200 with your plan. 401 means a wrong token, 403 means the account is not on MAX.
List three recaps, then open one with /recaps/{id}. Compare the summary and the transcript with the app: it is the same data from the same tables, nothing is regenerated on the way.
In the app: Settings → API & webhooks → Create token. The token starts with crk_ and is shown once. Store it like a password. You can keep up to 5 tokens and revoke any of them at any time.
Every request carries it as a bearer token:
HTTP header
Authorization: Bearer crk_...
🔑
Keep tokens safe. Store them in a secrets manager or a password vault, never in shared documents, chats or client-side code. Use one token per system so you can revoke one without touching the others.
Endpoints
All endpoints are GET and return JSON. since and until are ISO 8601 timestamps; limit is 1 to 50 (default 20).
Calls that have a recap, newest first: call metadata, linked contact and the recap (summary, topics, decisions, open questions, next call, coaching, sentiment, participants).
5,000 per token (the daily counter resets at 00:00 UTC)
Page size
limit 1 to 50, default 20
Tokens
Up to 5 per account
A 429 answer includes Retry-After and the error code rate_limited or daily_limit_reached.
⏱
For most integrations that is 50 to 500 times the normal usage: poll every few minutes, not every few seconds, and rely on the webhook to know when a new recap exists.
Webhook: recap.ready
Set it up
In the app: Settings → API & webhooks → Webhook. Enter an https:// URL. You get a secret (whsec_...) once.
Payload
Each time a recap is ready we POST a small JSON to your URL. The body carries ids and dates only; fetch the content with api_url and your token.
Answer with any 2xx within 10 seconds. Otherwise we retry after 5 and 30 minutes, then 2 and 12 hours, for five attempts in total.
After 20 consecutive failures the webhook is paused; enable it again from the app once your endpoint is fixed. The app shows the last 20 deliveries with their status.
Your data, in your hands
The API hands your recaps, transcripts and contacts to your own tools. From that moment they are under your care: store them safely, respect the people who appear in your calls and follow the law that applies to you. Treat the token like a password. The first time you create a token or a webhook, the app asks you to accept the API terms; this is the short version.
Good to know
If your plan stops being MAX, tokens and webhooks stop working (they are not deleted). They work again when you return.
Revoking a token or deleting the webhook is immediate.
The token is shown only once when you create it. Treat it like a password: store it in a secrets manager or a password vault, never in shared documents, chats or client-side code. Use one token per system so you can revoke one without touching the others.
Tokens do not expire on their own. Revoke the ones you stop using.
Data you read through the API leaves CallRecap and lands in your own systems: from then on, keeping it safe is your responsibility.
We never show the token or the secret again after creation. Rotate the webhook secret from the app if needed.
Test it in five minutes
Token
Settings → API & webhooks → Create token. Copy it once.
First call
curl -H "Authorization: Bearer crk_..." "<base>/me" must answer 200 with your plan. 401 = wrong token, 403 = not MAX.
Your latest recaps
/recaps?limit=3, then one /recaps/{id}. Compare the summary and the transcript with the app: it is the same data from the same tables, nothing is regenerated on the way.
Webhook
Create a free inbox at webhook.site, paste its URL in Settings → API & webhooks → Webhook, keep the secret, press "Send test". A ping arrives within a minute with the three X-CallRecap-* headers. Verify the signature with the snippet above.
Real event
Record a call. When the recap is ready a recap.ready arrives; fetch api_url with your token. The app lists the last 20 deliveries with status and attempts.
What works with it
Anything that can call an HTTPS API with a bearer token or receive a webhook:
ZapierMaken8nPipedreamGoogle Sheets via Apps ScriptA CRM with a custom importerYour own backend
The webhook carries ids only; the content always comes through the API, so nothing sensitive travels to an intermediary that only relays events.