ErzyCall API
    ErzyCall API

    Getting Started

    Quick StartAuthentication

    Guides

    Rate LimitingError HandlingWebhooks

    MCP

    OverviewChat assistantsCoding toolsAutomation platformsTools & permissionsTroubleshooting

    API Reference

    CallsContactsCasesAssistantsPhone NumbersContact GroupsUsageWebhook EndpointsWhatsApp

    Assistants

    List and manage inbound and outbound AI voice assistants.

    Assistants are the AI agents that handle calls. ErzyCall has two types:

    • Inbound — handle incoming calls to your phone numbers
    • Outbound — used for outgoing calls initiated via the API or dashboard

    List Inbound Assistants

    GET /api/v1/assistants/inbound

    Required scope: assistants:read

    Example Request

    curl -X GET "https://app.erzycall.com/api/v1/assistants/inbound" \
      -H "X-API-Key: ek_live_abc123"

    Example Response

    {
      "data": [
        {
          "id": "asst_001",
          "name": "Customer Support Agent",
          "systemPromptId": "prompt_abc",
          "createdAt": "2025-01-05T12:00:00Z"
        }
      ]
    }

    Get Inbound Assistant

    GET /api/v1/assistants/inbound/{id}

    Required scope: assistants:read

    Example Request

    curl -X GET "https://app.erzycall.com/api/v1/assistants/inbound/asst_001" \
      -H "X-API-Key: ek_live_abc123"

    Example Response

    {
      "data": {
        "id": "asst_001",
        "name": "Customer Support Agent",
        "systemPromptId": "prompt_abc",
        "createdAt": "2025-01-05T12:00:00Z"
      }
    }

    Update Inbound Assistant

    Update the name or system prompt of an inbound assistant.

    PATCH /api/v1/assistants/inbound/{id}

    Required scope: assistants:write

    Request Body

    FieldTypeRequiredDescription
    namestringNoAssistant name (1–200 chars)
    systemPromptIdstringNoID of the system prompt to use

    Example Request

    curl -X PATCH "https://app.erzycall.com/api/v1/assistants/inbound/asst_001" \
      -H "X-API-Key: ek_live_abc123" \
      -H "Content-Type: application/json" \
      -d '{"name": "Updated Support Agent"}'

    Example Response

    {
      "data": {
        "id": "asst_001",
        "name": "Updated Support Agent",
        "systemPromptId": "prompt_abc",
        "createdAt": "2025-01-05T12:00:00Z"
      }
    }

    The Outbound Assistant Object

    An outbound assistant is a reusable voice configuration: which voice speaks, which LLM thinks, which transcriber listens. Pass its id as assistantConfigId when you create a call.

    FieldTypeDescription
    idstringUse it as assistantConfigId on POST /calls
    namestringDisplay name
    descriptionstring | nullFree-text note
    isDefaultbooleanMarks the dashboard's preferred assistant. Only one per organization. Note this is not consulted by POST /calls — a call without assistantConfigId uses the platform defaults.
    voiceobjectprovider, voiceId, and optional model, language, stability, similarityBoost, speed
    modelobjectprovider, model, temperature
    transcriberobjectprovider, model, language
    firstMessagestring | nullOpening line, used only when neither the request nor the case supplies one
    systemPromptstring | nullInstructions, used only when neither the request nor the case supplies one
    dialKeypadFunctionEnabledbooleanLets the assistant press DTMF keys
    backchannelingEnabledbooleanEmits "mm-hmm"-style acknowledgements
    backgroundDenoisingEnabledbooleanFilters background noise
    createdAt, updatedAtstringISO 8601 timestamps

    The list endpoint returns a summary — id, name, description, isDefault, voice.provider/voice.voiceId, model.provider/model.model, and timestamps. Fetch a single assistant for the full object.

    List Outbound Assistants

    GET /api/v1/assistants/outbound

    Required scope: assistants:read

    Example Request

    curl -X GET "https://app.erzycall.com/api/v1/assistants/outbound" \
      -H "X-API-Key: ek_live_abc123"

    Example Response

    {
      "data": [
        {
          "id": "asst_002",
          "name": "Sales Outreach Agent",
          "description": null,
          "isDefault": true,
          "voice": { "provider": "cartesia", "voiceId": "694f9389-aac1-45b6-b726-9d9369183238" },
          "model": { "provider": "openai", "model": "gpt-5.1-chat-latest" },
          "createdAt": "2025-01-08T14:00:00.000Z",
          "updatedAt": "2025-01-08T14:00:00.000Z"
        }
      ]
    }

    Get Outbound Assistant

    GET /api/v1/assistants/outbound/{id}

    Required scope: assistants:read

    Example Request

    curl -X GET "https://app.erzycall.com/api/v1/assistants/outbound/asst_002" \
      -H "X-API-Key: ek_live_abc123"

    Example Response

    {
      "data": {
        "id": "asst_002",
        "name": "Sales Outreach Agent",
        "description": null,
        "isDefault": true,
        "voice": {
          "provider": "cartesia",
          "voiceId": "694f9389-aac1-45b6-b726-9d9369183238",
          "model": "sonic-3"
        },
        "model": { "provider": "openai", "model": "gpt-5.1-chat-latest", "temperature": 0.7 },
        "transcriber": { "provider": "openai", "model": "gpt-4o-transcribe", "language": "en" },
        "firstMessage": "Hi, this is Aisyah from TechCorp.",
        "systemPrompt": "You are a friendly sales assistant...",
        "dialKeypadFunctionEnabled": false,
        "backchannelingEnabled": true,
        "backgroundDenoisingEnabled": true,
        "createdAt": "2025-01-08T14:00:00.000Z",
        "updatedAt": "2025-01-08T14:00:00.000Z"
      }
    }

    Errors

    StatusCodeDescription
    404NOT_FOUNDOutbound assistant not found

    Create Outbound Assistant

    POST /api/v1/assistants/outbound

    Required scope: assistants:write

    Request Body

    FieldTypeRequiredDescription
    namestringYesDisplay name (1–200 chars)
    voiceobjectYesprovider and voiceId required; model, language, stability, similarityBoost, speed optional
    modelobjectYesprovider and model required; temperature (0–2) defaults to 0.7
    transcriberobjectNoDefaults to {"provider": "openai", "model": "gpt-4o-transcribe", "language": "en"}
    descriptionstringNoFree-text note (max 1,000 chars)
    isDefaultbooleanNoMarks this as the dashboard's preferred assistant, unsetting the previous one
    firstMessagestringNoOpening line (max 1,000 chars)
    systemPromptstringNoInstructions for the assistant
    dialKeypadFunctionEnabledbooleanNoDefaults to false
    backchannelingEnabledbooleanNoDefaults to true
    backgroundDenoisingEnabledbooleanNoDefaults to true

    Example Request

    curl -X POST "https://app.erzycall.com/api/v1/assistants/outbound" \
      -H "X-API-Key: ek_live_abc123" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Sales Outreach Agent",
        "voice": {
          "provider": "cartesia",
          "voiceId": "694f9389-aac1-45b6-b726-9d9369183238"
        },
        "model": {
          "provider": "openai",
          "model": "gpt-5.1-chat-latest"
        }
      }'

    Returns 201 Created with the full assistant object.


    Update Outbound Assistant

    PATCH /api/v1/assistants/outbound/{id}

    Required scope: assistants:write

    Accepts the same fields as create, all optional. Omitted fields are left alone.

    voice, model, and transcriber are stored as whole objects — sending one replaces it rather than merging field by field. To change just the voice speed, send the complete voice object with the new speed.

    Example Request

    curl -X PATCH "https://app.erzycall.com/api/v1/assistants/outbound/asst_002" \
      -H "X-API-Key: ek_live_abc123" \
      -H "Content-Type: application/json" \
      -d '{
        "name": "Sales Outreach Agent v2",
        "firstMessage": "Hi, this is Aisyah calling from TechCorp."
      }'

    Returns 200 OK with the updated assistant object.

    Errors

    StatusCodeDescription
    404NOT_FOUNDOutbound assistant not found

    Delete Outbound Assistant

    DELETE /api/v1/assistants/outbound/{id}

    Required scope: assistants:write

    Example Request

    curl -X DELETE "https://app.erzycall.com/api/v1/assistants/outbound/asst_002" \
      -H "X-API-Key: ek_live_abc123"

    Response

    Returns 204 No Content on success.

    An assistant that is still in use cannot be deleted — the request returns 409 and the assistant is left untouched. "In use" means any of:

    • a call not yet dispatched (new, scheduled, or lock-processing)
    • a recurring schedule pointing at it, active or paused
    • an AutoFollow campaign pointing at it

    Cancel those calls with DELETE /calls/{id}, or re-point the schedules and campaigns, then retry. The error message names what is blocking.

    This is deliberate: a recurring schedule stores its assistant as a required reference that cannot be cleared, both generators stamp their stored assistant onto every call they create, and a queued call whose assistant vanishes either falls back to unrelated platform defaults or fails to dial outright. Refusing is safer than silently changing how a call sounds.

    Errors

    StatusCodeDescription
    404NOT_FOUNDOutbound assistant not found
    409CONFLICTAssistant is still referenced by queued calls, recurring schedules, or AutoFollow campaigns

    Cases

    Create, read, update, and delete case records — reusable call scripts with AI instructions.

    Phone Numbers

    List phone numbers assigned to your organization.

    On this page

    List Inbound AssistantsExample RequestExample ResponseGet Inbound AssistantExample RequestExample ResponseUpdate Inbound AssistantRequest BodyExample RequestExample ResponseThe Outbound Assistant ObjectList Outbound AssistantsExample RequestExample ResponseGet Outbound AssistantExample RequestExample ResponseErrorsCreate Outbound AssistantRequest BodyExample RequestUpdate Outbound AssistantExample RequestErrorsDelete Outbound AssistantExample RequestResponseErrors