Skip to main content
Use this when your CRM isn’t one of our ready-made integrations. Your CRM keeps Sales Ask’s calendar up to date, and Sales Ask returns the outcome of every recorded conversation to your CRM.
Before you build, make sure you have:
  • your organization API key
  • the custom CRM integration turned on for your organization: email support@salesask.com, and tell us whether to match recordings by time or by location
  • every rep added to Sales Ask with the same email address they use in your CRM

Send appointments

Call the API from each place your CRM creates, edits, or deletes an appointment, so Sales Ask always has the same schedule as your CRM. POST creates the appointment, or updates it when Sales Ask already has that event_id. You can send the full appointment every time it changes.

Appointment fields

string
required
Your CRM’s ID for the appointment. Send it as a string. You use it to update or delete the appointment, and it comes back in every webhook.
string
required
Email of the rep who owns the appointment. It must match a member of your Sales Ask organization.
string
required
Start time in UTC, ending in Z or +00:00, for example 2026-03-01T14:00:00.000Z. Other offsets and Unix timestamps are rejected.
string
End time in UTC.
string
Appointment title, shown to the rep.
object
The customer the appointment is with.
Any other fields, such as phone numbers or notes, are ignored.

Examples

Sales Ask returns 201 with the saved appointment, whether it was new or updated:

If a request fails

How Sales Ask uses your appointments

The link between a recording and an appointment is how your event_id gets back to you, so keep appointments current when they move. When two appointments are equally close, Sales Ask lets the rep choose. Reps can also pick or change the appointment themselves. The app shows each rep’s appointments from the past 30 days and the next 7.

Get results back

Sales Ask doesn’t write into your CRM. It posts each result to a URL you choose, and your CRM saves it.

Add a webhook

1

Create it

In Sales Ask, go to Settings → Webhooks, add a webhook, and enter your endpoint URL. Set Trigger to All Sources.
2

Pick events

Under Events, select the events below. Most integrations select all three.
3

Choose extracted fields (optional)

Under Custom Payloads, add what Sales Ask should pull from each conversation, such as budget, design preferences, or reason to buy.
4

Turn it on

Make sure the webhook is Active, and save.
For a recording with a client the rep created in Sales Ask, you get client.created instead of recording.processed. Subscribe to both to hear about every recording.

What you receive

string
The event_id you sent. Use it to find the appointment in your CRM. If data.integration is null, the recording wasn’t linked to an appointment.
object
The customer you sent with the appointment. For client.created, entity holds what the rep entered instead, such as name, email, design, and community.
string
AI notes and action items, as plain text.
object
Your sales process questions, the rep’s answers, and a summary. processFollowed, processMissed, and processTotal count them. critical_step holds the answer to your critical step question, if you have one.
object
Each group you set up under Custom Payloads has its own key, such as buyerProfile above.
string
Link to the recording in Sales Ask. For the transcript and audio, call GET /v1/recordings/{id} and GET /v1/recordings/{id}/transcript.

Handling deliveries

  • Verify the sender: every webhook carries your organization API key in the x-api-key header. Reject requests where it doesn’t match.
  • Reply within 10 seconds with any 2xx status, and do slow work afterwards. Don’t redirect.
  • No retries: a missed delivery isn’t sent again. Fetch the recording with GET /v1/recordings/{id} to catch up.
  • Automatic shut-off: a 410 response turns the webhook off at once, and repeated 404s over three days do too. Turn it back on in Settings → Webhooks.

Go-live checklist

1

Send a test appointment

Create an appointment for a rep about 20 minutes from now. Check that it shows in their app and the reminder arrives.
2

Record against it

Have the rep record a short conversation at the appointment time.
3

Check the webhook

When processing finishes, confirm your endpoint got recording.processed with your event_id in data.integration.entity.eventId.
4

Clean up

Delete the test appointment with DELETE /v1/scheduled-tasks/{event_id}.
To test your endpoint without recording, click the test button on the webhook in Settings → Webhooks. You can also call POST /v1/webhooks/test with url and a processed recording object from GET /v1/recordings/{id}. GET /v1/webhooks lists your organization-wide webhooks, but not team webhooks or their events.

Troubleshooting

Check that the rep’s Sales Ask email matches the user_email you sent, that the recording started within an hour of the appointment, and that you send customer.id. If you match by location, check customer.location is a full street address.
Check the webhook is Active and subscribed to the event, and that Trigger is All Sources. If the rep created the client in Sales Ask, you get client.created, not recording.processed.
The rep must be signed in to the mobile app with notifications on, and the appointment must start in the future when you send it.
Email support@salesask.com with your organization name, the request you sent (without your API key), the response, and the event_id or recording id.