Skip to main content
Use POST /v1/calls to start a single outbound voice call. PAM accepts the request and places the call asynchronously.

Create a Call

Successful requests return 202 Accepted:
queued means PAM accepted the request and will place the call asynchronously. PAM creates a conversationId after the call is placed. Subsequent call lifecycle webhooks such as call.started, call.ended, and call.analyzed include conversationId. If PAM cannot place the call, PAM sends a call.failed webhook. Use data.dispatchRequestId, top-level externalReferenceId, the original Idempotency-Key, or your request metadata to reconcile the failed call attempt. If webhookUrl is provided, PAM uses it for call.failed even when no conversationId was created yet.

Request Fields

Your API key determines the client organization for attribution and billing. Do not send clientOrgId in the request body. Use externalReferenceId when your system needs to map webhooks back to one of your own objects, such as a touchpoint, campaign, or workflow run. PAM stores the value and echoes it on webhooks when provided. For PAM-managed agents, PAM generates internal prompt context blocks from the submitted dynamicVariables plus server-owned client configuration. Those generated context blocks are not returned by call GET or list responses.

Idempotency

An idempotency key is required. Send it in the Idempotency-Key header or as idempotencyKey in the JSON body. Use the same key when retrying a request after a network error or timeout. If PAM has already accepted a call request for the same key and client organization, the retry returns the current status. If the call has already been placed, the response may also include the resulting conversationId.

List Calls

Use GET /v1/calls to list voice call conversations for your organization.
You can filter by status, agentId, toNumber, fromNumber, createdAfter, and createdBefore. Results are cursor-paginated:
If hasMore is true, pass the returned cursor in the next request.

Get Call Status

Use GET /v1/calls/{id} to get the current status for one voice call conversation.
These read endpoints are useful when a webhook is delayed, retried, or missed by your system.

Status Meanings

Lifecycle Webhooks

Subscribe to these events to follow the call: Webhook payloads are canonical PAM payloads. Provider-specific Retell identifiers and raw provider payloads are not part of the external contract. Voice lifecycle webhook data includes dispatchRequestId and idempotencyKey when PAM can associate the event with the original create-call request. If you provided externalReferenceId, PAM includes it as a top-level field on every lifecycle webhook for the call, including pre-conversation call.failed events.

Close a Call

Use POST /v1/calls/{id}/close to close an open voice conversation. The {id} is the conversationId from call lifecycle webhooks or from an idempotent create-call retry after PAM has created the conversation. A pre-placement call.failed event may not have a conversationId; use dispatchRequestId, top-level externalReferenceId, the original Idempotency-Key, or your request metadata to reconcile that case.
If reason is omitted, PAM uses admin_closed.

Common Errors

  • 400 validation_error — missing idempotency key, invalid phone format, invalid or non-HTTPS webhookUrl, both agentId and agentSlug were provided, or neither was provided.
  • 400 validation_errorfromNumber is missing for a PAM-managed agent.
  • 400 validation_error — a managed agent request is missing required dynamicVariables.
  • 401 unauthorized — missing, expired, revoked, or invalid API key.
  • 404 not_found — the agent could not be resolved or the conversation does not belong to the authenticated client.