Calls, transcriptions and summaries for your HaRoshemet account.
Authenticate every request with your API key in the x-api-key header.
Getting call data: HaRoshemet pushes each call to your webhook URL as it progresses
(see the Webhooks section below), and GET /api/v1/call/{call_id} returns the
current state of any call whenever you ask.
Where the calls go
Customers already push HaRoshemet calls into monday.com, HubSpot, Arbox and Surense. Any other system connects either straight to this API or through Zapier or Make, which needs no code. See CRM integration.
Authentication
Send your API key in the x-api-key header on every request. Your key is in the app, under Settings, and you can rotate it there. All traffic is HTTPS.
Quickstart
# 1. Who am I?
curl https://api.haro.co.il/api/v1/me -H "x-api-key: $HARO_API_KEY"
# 2. Find or create a customer by phone number
curl -X POST https://api.haro.co.il/api/v1/customer \
-H "x-api-key: $HARO_API_KEY" -H "Content-Type: application/json" \
-d '{"phone": "+972501234567", "name": "Yossi Levi"}'
# 3. Fetch a call (id comes from the webhook)
curl https://api.haro.co.il/api/v1/call/{call_id} -H "x-api-key: $HARO_API_KEY"
Most integrations never poll: we set a webhook URL on your account (email dev@haro.co.il to have it enabled) and HaRoshemet pushes every call to you (see below).
Endpoints
GET /api/v1/me - Get authenticated user details
Returns a filtered public profile for the user identified by x-api-key.
200- Public user profile. ReturnsUser.401- Unauthorized -x-api-keyheader missing.404- No user found for the provided API key.500- Internal server error.
POST /api/v1/customer - Find or create a customer
Request body: ApiCustomer (see Schemas).
200- Customer found or created successfully. ReturnsCustomerIdResponse.401- Unauthorized - API key missing or invalid.500- Internal server error or failed to process customer.
GET /api/v1/call/{call_id} - Get call details by call ID
Retrieve a call by its call_id (GCP calls.id UUID).
Use the same call_id delivered in the user webhook ApiCall payload.
- Parameter
call_id(path, required): Call UUID from the webhook payload (ApiCall.call_id=calls.id). 200- Call details fetched successfully. ReturnsApiCall.400- Missing call_id path parameter.401- Unauthorized -x-api-keyheader missing.404- Call not found for this user and call_id (or unknown API key).500- Internal server error.
Webhook
callUpdate - Call update
HaRoshemet POSTs a JSON ApiCall snapshot to the webhook URL configured on your account,
once per event in a call's life. Every payload carries the full current state of the
call, so you never need to merge - the latest one wins. Read call_id from it and, if
you want the state later, GET /api/v1/call/{call_id}.
Events, in the order they happen:
| # | When | What is new in the payload |
|---|---|---|
| 1 | The call ends | status, duration, is_missed, the numbers and the time. No text yet. |
| 2 | The transcription is ready - usually within a minute | transcription |
| 3 | A summary is ready - a minute or two after the transcription | detailed_summary and/or summary (see below) |
A call always produces events 1 and 2 (a missed or unanswered call has no transcription and stops at 1). Event 3 arrives once per summary that gets produced, so a call can trigger it twice, once or not at all.
The two summaries:
detailed_summary- the auto summary: a narrative of what was said, produced automatically for every real conversation. Very short calls (roughly under 30 seconds of speech) and missed calls are not summarized. Also produced when the user asks for a summary of a call in the app.summary- task extraction: the action items from the call, produced when the user says their trigger word (by default "רשמתי") during the call, or asks for tasks in the app.
Delivery: one POST per event, Content-Type: application/json, no retries. Respond
with any 2xx quickly; do your processing after you have responded. Deliveries are logged
on our side with your response status, so a failing endpoint can be diagnosed.
Ordering: events are sent as they happen and normally arrive in order, but treat each payload as the whole truth rather than as a delta - a late event 2 must not overwrite a summary you already have from event 3; the payload of event 3 contains the transcription too.
Payload: ApiCall (see Schemas).
Schemas
User
| Field | Type | Description |
|---|---|---|
id |
string (uuid) | User UUID (users.id). |
name |
string | Display name. |
phone_number |
string | Primary phone number (E.164 when available). |
recorder_phone_number |
string | Recorder / secondary phone number, if configured. |
user_status |
string | Account status (e.g. active). |
ApiCustomer
| Field | Type | Description |
|---|---|---|
Name |
string | required. The customer's name. |
Phone |
string | required. The customer's phone number. |
Notes |
string | Optional notes about the customer. |
name_prefix |
string | Optional prefix for the customer's name. |
CustomerIdResponse
| Field | Type | Description |
|---|---|---|
customerId |
string | GCP Postgres customer UUID (found or created). |
ApiCall
| Field | Type | Description |
|---|---|---|
call_id |
string (uuid) | Unique call ID (calls.id). Use this to fetch call details via GET /api/v1/call/{call_id}. |
user_id |
string (uuid) | Owning user ID (users.id). |
transcription |
string | The transcription of the call. |
summary |
string | Task extraction - the action items from the call. Produced when the user says their trigger word (by default "רשמתי") during the call, or asks for tasks in the app. |
detailed_summary |
string | Auto summary - a narrative of what was said. Produced automatically for every real conversation, a minute or two after the transcription; very short and missed calls are not summarized. A call can carry either summary, both, or neither. See Webhooks. |
status |
string - Ringing / Ended / Answered |
The status of the call. |
number_from |
string | The calling phone number. |
number_to |
string | The receiving phone number. |
date |
string (date-time) | The date and time of the call. |
duration |
number | The duration of the call in seconds. |
is_missed |
boolean | Whether the call was missed. |
Interactive reference
The same specification as Swagger UI: https://api.haro.co.il/api/docs · raw OpenAPI: /api/openapi.json.
Getting a key
API access is included in every plan. Your API key is in the app, under Settings - copy it from there and you can start calling the API right away.
To receive webhooks, email dev@haro.co.il with the URL you want the calls pushed to, and we'll enable it on your account.