# eCall Business Messaging Developer Platform

eCall Business Messaging API documentation for SMS, WhatsApp, Rest API, SMPP, SOAP WebService, and HTTPS Interface integrations

<button type="button" class="button primary" data-action="ask" data-icon="gitbook-assistant">Ask a question...</button>

<button type="button" class="button secondary" data-action="ask" data-query="How do I use the Rest API?" data-icon="terminal">Rest API</button><button type="button" class="button secondary" data-action="ask" data-query="How do I connect with SMPP?" data-icon="message">SMPP</button><button type="button" class="button secondary" data-action="ask" data-query="How do I integrate with the SOAP WebService?" data-icon="code">SOAP WebService</button><button type="button" class="button secondary" data-action="ask" data-query="How do I use the HTTPS Interface?" data-icon="globe">HTTPS Interface</button>

Build your eCall Business Messaging integration from one hub. Use Rest API, SMPP, SOAP WebService, or HTTPS Interface based on the stack you already run.

Reach more customers on the channels they already use worldwide. Connect SMS, WhatsApp, alerts, and business messaging workflows with infrastructure built for reliable delivery.

Developers do not need another forced rewrite. They need a messaging platform that fits real systems, ships fast, and stays clear under pressure.

<table data-view="cards"><thead><tr><th>Title</th><th>Description</th><th data-card-target data-type="content-ref">Target</th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td>Rest API</td><td>Build modern SMS and business messaging integrations with HTTP endpoints, authentication, and request examples.</td><td><a href="/spaces/XV2qPMxdz5aLVmrYopAH/pages/0jev36QRqmTTEyLsxqEE">/spaces/XV2qPMxdz5aLVmrYopAH/pages/0jev36QRqmTTEyLsxqEE</a></td><td><a href="/files/ebMoLMpZFyLqpzByuzrk">/files/ebMoLMpZFyLqpzByuzrk</a></td></tr><tr><td>SMPP</td><td>Connect through SMPP when your messaging stack depends on protocol-level control and established delivery pipelines.</td><td><a href="/spaces/XV2qPMxdz5aLVmrYopAH/pages/dfcd591e7e7c7cc4c0ea0d5e762e5c4f7fc99167">/spaces/XV2qPMxdz5aLVmrYopAH/pages/dfcd591e7e7c7cc4c0ea0d5e762e5c4f7fc99167</a></td><td><a href="/files/ebMoLMpZFyLqpzByuzrk">/files/ebMoLMpZFyLqpzByuzrk</a></td></tr><tr><td>SOAP WebService</td><td>Use SOAP WebService when your enterprise systems rely on SOAP operations and structured service contracts.</td><td><a href="/spaces/XV2qPMxdz5aLVmrYopAH/pages/614f33ef6cf5fd97320ca610605685e3c6c65089">/spaces/XV2qPMxdz5aLVmrYopAH/pages/614f33ef6cf5fd97320ca610605685e3c6c65089</a></td><td><a href="/files/ebMoLMpZFyLqpzByuzrk">/files/ebMoLMpZFyLqpzByuzrk</a></td></tr><tr><td>HTTPS Interface</td><td>Use HTTPS Interface for direct request-based messaging integrations with simple transport and fast implementation.</td><td><a href="/spaces/XV2qPMxdz5aLVmrYopAH/pages/9b4caef8f939063fe01d210ed1de6c4c1bea7732">/spaces/XV2qPMxdz5aLVmrYopAH/pages/9b4caef8f939063fe01d210ed1de6c4c1bea7732</a></td><td><a href="/files/ebMoLMpZFyLqpzByuzrk">/files/ebMoLMpZFyLqpzByuzrk</a></td></tr></tbody></table>

{% columns %}
{% column width="50%" %}

## Choose the path that fits your stack

Pick one interface and follow that documentation end to end. Each path gives developers a clear route from authentication to the first working request.

Why teams start here:

* Build new messaging flows without extra protocol baggage.
* Keep legacy systems moving without a full rebuild.
* Move from sandbox to production with less guesswork.

{% hint style="info" icon="sparkle" %}
**Not sure where to start?**

Use these rules of thumb:

* Start with **Rest API** for modern HTTP-based integrations.
* Use **SOAP WebService** if your system already depends on SOAP.
* Use **SMPP** or **HTTPS Interface** when your delivery flow is built around those protocols.

<button type="button" class="button primary" data-action="ask" data-icon="gitbook-assistant">Which interface should I use?</button>
{% endhint %}

{% hint style="warning" icon="life-ring" %}
**Before you send the first request**

Confirm these basics in the interface docs first:

* Required credentials
* Base URL or endpoint format
* Required headers, fields, or payload structure
* Expected success response or delivery status

<button type="button" class="button primary" data-action="ask" data-icon="gitbook-assistant">Help me pick a starting point</button>
{% endhint %}

Open the docs page that matches your integration, then use its sample requests, field definitions, and authentication rules as your source of truth. That keeps your first test predictable and your production rollout calmer.

<a href="/spaces/XV2qPMxdz5aLVmrYopAH/pages/0jev36QRqmTTEyLsxqEE" class="button primary" data-icon="terminal">Open Rest API</a> <a href="/spaces/XV2qPMxdz5aLVmrYopAH/pages/9b4caef8f939063fe01d210ed1de6c4c1bea7732" class="button secondary" data-icon="globe">Open HTTPS Interface</a>
{% endcolumn %}

{% column width="50%" %}

### Why developers choose eCall

eCall helps teams reach customers, stakeholders, and employees on trusted channels.

The platform is built for business messaging where delivery matters. That includes notifications, reminders, authentication, alerts, and operational communication.

{% hint style="success" icon="shield" %}
**Built for trust**

* Swiss-made platform with redundant data centers in Switzerland.
* ISO/IEC 27001 certified for information security.
* GDPR and Swiss DSG aligned for data protection.
* More than 99.9% system availability.
  {% endhint %}

{% stepper %}
{% step %}

#### Pick an interface

Choose the API or protocol documentation that matches your stack and transport.

* [Rest API](/api-references)
* [SMPP](/api-references/smpp)
* [SOAP WebService](/api-references/soap-webservice)
* [HTTPS Interface](/api-references/https-interface)
  {% endstep %}

{% step %}

#### Review the setup requirements

Check authentication, endpoints, request structure, and required fields on the page you chose. Do not mix examples from different interfaces.
{% endstep %}

{% step %}

#### Send a first test request

Use the sample request from that interface page. Then confirm the response or status matches the expected result in the docs.
{% endstep %}
{% endstepper %}
{% endcolumn %}
{% endcolumns %}

### Core docs

Use these API documentation pages as entry points for implementation, testing, and troubleshooting.

These pages cover Rest API endpoints, SMPP integration, SOAP WebService operations, and HTTPS Interface request flows for eCall Business Messaging.

* [Rest API](/api-references)
* [SMPP](/api-references/smpp)
* [SOAP WebService](/api-references/soap-webservice)
* [HTTPS Interface](/api-references/https-interface)

### Common messaging use cases

Build around the flows teams already run every day.

* Customer communication — reminders, confirmations, reservations, delivery status
* Security workflows — mTAN, OTP by SMS, two-factor authentication
* Internal operations — alerts, monitoring, employee communication, scheduling
* Mobile marketing — WhatsApp newsletters, SMS campaigns, info and subscription services

### Why this matters

Messaging infrastructure only feels invisible when it works.

When alerts must land now, when an OTP blocks login, or when a customer waits for a status update, developers need delivery they can trust and interfaces they can ship with. That is the story of this platform.

eCall brings nearly 30 years of Swiss market experience, direct support, and multiple integration options into one product. You keep the stack that works, then connect the channel your business needs next.

### Need help?

Ask a question above to get help with:

* Choosing the right integration path
* Understanding auth and request formats
* Debugging setup and test requests

When the pressure is on, start with one interface, get one request working, and build from there.


# REST API

Use the eCall REST API to send SMS, Whatsapp and RCS messages over HTTPS, track delivery status, upload media, and receive webhook events.

Use the eCall REST API to build SMS, Whatsapp and RCS messaging into your app.

Send messages over JSON and HTTPS.

Track delivery status.

Receive webhook events and inbound SMS.

### At a glance

* Base URL: `https://rest.ecall.ch`
* API style: REST over JSON and HTTPS
* Authentication: HTTP Basic Authentication
* Supports: SMS messaging, RCS messaging, status queries, media upload, and webhooks

{% hint style="info" %}
Enable the REST interface in the eCall portal under **Interfaces → Overview** before you start.
{% endhint %}

### Core features

* Send SMS, Whatsapp and RCS messages.
* Send to one recipient or many recipients in one request.
* Query delivery status for up to seven days.
* Receive webhook events for status changes and inbound SMS and Whatsapp.
* Upload media for rich RCS and Whatsapp messages.

### When to use this interface

* You need an SMS API for a backend, integration, or automation workflow.
* You need an RCS API with rich content and uploaded media.
* You want webhook-based delivery tracking and inbound SMS handling.

### What this REST API supports

The eCall REST API supports SMS messaging, Whatsapp messaging, RCS messaging, delivery status queries, media upload, and webhook-based event handling.

Use it for single-message sends, batch sends, and inbound SMS forwarding.

The API is provided by **F24 Schweiz AG**.

Use this base URL:

```
https://rest.ecall.ch
```

The connection uses **TLS 1.2** or **TLS 1.3**.

Plain HTTP is not supported.

### Authentication

Send every request with an `Authorization` header.

Use **HTTP Basic Authentication**.

```
Authorization: Basic <base64(username:password)>
```

Use either of these credential types:

* Your eCall account credentials
* A dedicated API sub-user from **Interfaces → Overview**

### API versioning

Two API versions are available.

Target a version in the URL path or request header.

If you omit the version, the default is `v1`.

This default can change in later updates.

| Version          | Released     | Changes vs. v1                                                                                           |
| ---------------- | ------------ | -------------------------------------------------------------------------------------------------------- |
| **v1** (default) | `2023-02-02` | –                                                                                                        |
| **v2**           | `2023-12-12` | `GET /api/message/{messageId}` and `POST /api/message` return timestamps in UTC using ISO 8601 with `Z`. |

#### Use the URL path

```
https://rest.ecall.ch/api/v2/message
```

#### Use the request header

```http
X-API-Version: 2
```

Accepted header values:

* `1` or `1.0` for v1
* `2` or `2.0` for v2

### General rules

* JSON field names are **case-insensitive**.
* Enum values are **case-sensitive**.
* Send all text as **UTF-8**.
* Account settings are cached. Changes can apply with a delay.
* Every response includes the `x-f24-request-id` header.

Include `x-f24-request-id` in support requests.

### Notification webhooks

Set `notification.addresses` in a send request to receive status updates.

eCall sends these notifications to your endpoint.

Allow inbound traffic from these source IPs:

* `193.93.208.200`
* `193.93.208.149`
* `193.93.208.153`

Your endpoint must return **HTTP 200 OK**.

### Incoming SMS forwarding

Incoming SMS on a rented eCall number can be forwarded.

eCall sends the message to your HTTP or HTTPS endpoint with `POST`.

Configure the target URL in the portal for the SMS number.

The request schema is documented under `ReceivedMessage`.

The inbound endpoint is `POST /api/webhooks/receivedmessage`.


# Message

Send a single text message (SMS, WhatsApp, or RCS) to one or more recipients, and query its delivery status. Status can be queried up to **seven days** after sending.

## Send a single message

> Sends a single message to one recipient (\`to\`) or a list of recipients (\`toList\`).\
> Supported channels: \*\*SMS\*\*, \*\*WhatsApp\*\*, \*\*RCS\*\*.\
> \
> \> \*\*Note:\*\* \`to\` and \`toList\` are mutually exclusive — passing both returns a\
> \> validation error.\
> \
> \### SMS character limits\
> \
> A single SMS page holds 160 characters (GSM) or 70 characters (UCS-2). Long messages\
> are split into pages (max. 10). Multi-part pages each lose 7 characters to sequencing\
> data, giving \*\*153 chars/page\*\* (GSM) or \*\*67 chars/page\*\* (UCS-2). The absolute\
> maximum is \*\*1530 characters\*\* (GSM) / \*\*670 characters\*\* (UCS-2).\
> \
> The maximum page count can also be configured per-message via \`content.options.pageLimit\`.\
> \
> \### WhatsApp\
> \
> Maximum message length is \*\*4096 characters\*\*. The sender must be the phone number of a\
> registered WhatsApp Business Account — contact eCall support to set it up. The \`Sticker\`\
> content type is not supported for WhatsApp.\
> \
> \### RCS\
> \
> Maximum message length is \*\*1000 characters\*\*. The RCS sender ID must be registered\
> with the RCS provider — contact eCall support to obtain it.<br>

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"tags":[{"name":"Message","description":"Send a single text message (SMS, WhatsApp, or RCS) to one or more recipients, and query its\ndelivery status. Status can be queried up to **seven days** after sending.\n"}],"servers":[{"url":"https://rest.ecall.ch","description":"eCall REST API (Production)"}],"security":[{"BasicAuth":[]}],"components":{"securitySchemes":{"BasicAuth":{"type":"http","scheme":"basic","description":"HTTP Basic Authentication. Encode `username:password` in Base64 and pass as:\n`Authorization: Basic <base64_encoded_credentials>`\n\nUse your eCall account credentials or a dedicated API sub-user created in the\neCall portal (**Interfaces → Overview**).\n"}},"schemas":{"MessageRequest":{"required":["channel","from","content"],"type":"object","description":"Request body for sending a single message. Use either `to` (single recipient)\nor `toList` (multiple recipients) — not both.\n","properties":{"channel":{"type":"string","description":"The messaging channel to use.\n\n| Value | Description |\n|-------|-------------|\n| `Sms` | SMS (also automatically routes to Pager or Voice for landline numbers if configured) |\n| `Whatsapp` | WhatsApp Business messaging |\n| `Rcs` | Rich Communication Services |\n","enum":["Sms","Whatsapp","Rcs"]},"from":{"type":"string","description":"Sender address.\n\n- **SMS:** Up to 16 numeric characters or up to 11 alphanumeric characters\n  (ASCII 32–126). Test sender values carefully — not all providers accept all\n  alphanumeric characters. Free accounts may only use the registered mobile number.\n- **WhatsApp:** Phone number of the registered WhatsApp Business Account in\n  international format (e.g. `0041769999999`). Contact eCall support to set up.\n- **RCS:** Your RCS sender ID as assigned by the provider. Contact eCall support\n  to register and obtain the sender ID.\n"},"to":{"type":["string","null"],"description":"Single recipient address in international format (e.g. `0041781234567` or\n`+41781234567`). Mutually exclusive with `toList`.\n"},"toList":{"type":["array","null"],"description":"List of recipients. Mutually exclusive with `to`. Returns a `messageIdList`\nin the response.\n","items":{"oneOf":[{"$ref":"#/components/schemas/ToAddressNumber"},{"$ref":"#/components/schemas/ToAddressPerson"},{"$ref":"#/components/schemas/ToAddressGroup"}]}},"sendDate":{"type":["string","null"],"description":"Scheduled send time in ISO 8601 format. If omitted, the message is sent immediately.\n"},"content":{"description":"Message content. For SMS, WhatsApp, and RCS, use `TextContent`.","oneOf":[{"$ref":"#/components/schemas/TextContent"},{"$ref":"#/components/schemas/ImageContent"},{"$ref":"#/components/schemas/DocumentContent"},{"$ref":"#/components/schemas/AudioContent"},{"$ref":"#/components/schemas/VideoContent"},{"$ref":"#/components/schemas/LocationContent"},{"$ref":"#/components/schemas/ContactContent"},{"$ref":"#/components/schemas/InteractiveContent"},{"$ref":"#/components/schemas/InteractiveReplyContent"},{"$ref":"#/components/schemas/TemplateContent"},{"$ref":"#/components/schemas/StickerContent"},{"$ref":"#/components/schemas/MediaContent"}]},"notification":{"$ref":"#/components/schemas/Notification"}},"additionalProperties":false},"ToAddressNumber":{"required":["address"],"type":"object","description":"A recipient identified by mobile number in international format.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format, e.g. `0041781234567` or `+41781234567`."}},"additionalProperties":false},"ToAddress":{"required":["type"],"type":"object","description":"Base type for a recipient address in a `toList`.","properties":{"type":{"$ref":"#/components/schemas/ToAddressType"}},"additionalProperties":false},"ToAddressType":{"type":"string","description":"Type of recipient address entry.","enum":["Number","Person","Group"]},"ToAddressPerson":{"required":["address"],"type":"object","description":"A recipient identified by name as stored in the eCall address book.\nFormat: `[Lastname] [Firstname]` (without brackets).\n","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Name from eCall address book. Format: Lastname Firstname."}},"additionalProperties":false},"ToAddressGroup":{"required":["address"],"type":"object","description":"A recipient group defined in the eCall address book.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Group name as defined in the eCall address book."}},"additionalProperties":false},"TextContent":{"required":["text"],"type":"object","description":"Plain text content. The primary content type for SMS and RCS.\n\nFor SMS, the maximum length is determined by account settings (max. 10 pages / 1530 chars\nGSM). Text exceeding the limit is truncated. Use `options.pageLimit` to restrict to fewer\npages, or `options.smsType: Flash` to send a flash SMS.\n","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"text":{"type":"string","minLength":1,"description":"The message text. UTF-8 encoded."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]},"ImageContent":{"type":"object","description":"Image message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional image caption."}},"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"DocumentContent":{"type":"object","description":"Document/file message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Currently not supported."},"filename":{"type":["string","null"],"description":"Display filename for the document."}},"additionalProperties":false},"AudioContent":{"type":"object","description":"Audio message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"VideoContent":{"type":"object","description":"Video message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional video caption."}},"additionalProperties":false},"LocationContent":{"type":"object","description":"Geographic location message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"longitude":{"type":"number","format":"double","description":"Longitude coordinate."},"latitude":{"type":"number","format":"double","description":"Latitude coordinate."},"name":{"type":["string","null"],"description":"Optional location name."},"address":{"type":["string","null"],"description":"Optional address text."}},"additionalProperties":false},"ContactContent":{"type":"object","description":"vCard contact message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"contacts":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ContactData"}}},"additionalProperties":false},"ContactData":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/NameData"},"birthDay":{"type":["string","null"],"description":"Birthday in `YYYY-MM-DD` format."},"organization":{"$ref":"#/components/schemas/OrganizationData"},"addresses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AddressData"}},"phones":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PhoneData"}},"urls":{"type":["array","null"],"items":{"$ref":"#/components/schemas/UrlData"}}},"additionalProperties":false},"NameData":{"required":["formattedName"],"type":"object","properties":{"formattedName":{"type":"string","minLength":1},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"middleName":{"type":["string","null"]},"suffix":{"type":["string","null"]},"prefix":{"type":["string","null"]}},"additionalProperties":false},"OrganizationData":{"type":"object","properties":{"company":{"type":["string","null"]},"department":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"AddressData":{"type":"object","properties":{"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"country":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"PhoneData":{"type":"object","properties":{"phone":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"UrlData":{"type":"object","properties":{"url":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"InteractiveContent":{"required":["action"],"type":"object","description":"Interactive message with buttons or a list (e.g. for WhatsApp/RCS).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"header":{"oneOf":[{"$ref":"#/components/schemas/InteractiveTextHeader"},{"$ref":"#/components/schemas/InteractiveImageHeader"},{"$ref":"#/components/schemas/InteractiveVideoHeader"},{"$ref":"#/components/schemas/InteractiveDocumentHeader"},{"type":"null"}]},"body":{"$ref":"#/components/schemas/InteractiveBody"},"footer":{"$ref":"#/components/schemas/InteractiveFooter"},"action":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonAction"},{"$ref":"#/components/schemas/InteractiveListAction"}]}},"additionalProperties":false},"InteractiveTextHeader":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Header text. Supports emojis but not markdown."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]},"InteractiveImageHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveVideoHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveDocumentHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveBody":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":1024,"description":"Body text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveFooter":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Footer text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveButtonAction":{"required":["buttons"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"buttons":{"type":"array","minItems":1,"maxItems":3,"items":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonActionReplyButton"}]}}},"additionalProperties":false},"InteractiveAction":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveActionType"}},"additionalProperties":false},"InteractiveActionType":{"type":"string","enum":["Button","List"]},"InteractiveButtonActionReplyButton":{"required":["id","title"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveButtonActionButton"}],"properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Unique button ID returned in the webhook when clicked."},"title":{"type":"string","minLength":1,"maxLength":20,"description":"Button label text. No emojis or markdown."}},"additionalProperties":false},"InteractiveButtonActionButton":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveButtonActionButtonType"}},"additionalProperties":false},"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]},"InteractiveListAction":{"required":["button","sections"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"button":{"type":"string","minLength":1,"maxLength":20,"description":"Button label. No emojis or markdown."},"sections":{"type":"array","minItems":1,"maxItems":10,"description":"Max. 10 rows across all sections.","items":{"$ref":"#/components/schemas/InteractiveListActionSection"}}},"additionalProperties":false},"InteractiveListActionSection":{"required":["rows"],"type":"object","properties":{"title":{"type":["string","null"],"minLength":1,"maxLength":24,"description":"Required if the message has more than one section."},"rows":{"type":"array","minItems":1,"maxItems":10,"items":{"$ref":"#/components/schemas/InteractiveListActionRow"}}},"additionalProperties":false},"InteractiveListActionRow":{"required":["id","title"],"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":["string","null"],"minLength":1,"maxLength":72}},"additionalProperties":false},"InteractiveReplyContent":{"type":"object","description":"Content received when a user interacts with an interactive message.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"reply":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonReply"},{"$ref":"#/components/schemas/InteractiveListReply"},{"type":"null"}]}},"additionalProperties":false},"InteractiveButtonReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"InteractiveReplyContentReply":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveReplyType"}},"additionalProperties":false},"InteractiveReplyType":{"type":"string","enum":["Button","List"]},"InteractiveListReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]}},"additionalProperties":false},"TemplateContent":{"required":["namespace","name","language"],"type":"object","description":"Pre-approved message template (e.g. for WhatsApp Business).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"namespace":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"language":{"$ref":"#/components/schemas/TemplateLanguage"},"components":{"type":["array","null"],"items":{"oneOf":[{"$ref":"#/components/schemas/TemplateBodyComponent"},{"$ref":"#/components/schemas/TemplateButtonComponent"},{"$ref":"#/components/schemas/TemplateHeaderComponent"},{"$ref":"#/components/schemas/TemplateQuickReplyButtonComponent"},{"$ref":"#/components/schemas/TemplateUrlButtonComponent"}]}}},"additionalProperties":false},"TemplateLanguage":{"required":["code"],"type":"object","properties":{"policy":{"$ref":"#/components/schemas/TemplateLanguagePolicy"},"code":{"$ref":"#/components/schemas/TemplateLanguageCode"}},"additionalProperties":false},"TemplateLanguagePolicy":{"type":"string","enum":["Deterministic"]},"TemplateLanguageCode":{"type":"string","description":"BCP 47 language code for the template.","enum":["af","sq","ar","az","bn","bg","ca","zh_CN","zh_HK","zh_TW","hr","cs","da","nl","en","en_GB","en_US","et","fil","fi","fr","ka","de","el","gu","ha","he","hi","hu","id","ga","it","ja","kn","kk","rw_RW","ko","ky_KG","lo","lv","lt","mk","ms","ml","mr","nb","fa","pl","pt_BR","pt_PT","pa","ro","ru","sr","sk","sl","es","es_AR","es_ES","es_MX","sw","sv","ta","te","th","tr","uk","ur","uz","vi","zu"]},"TemplateBodyComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateButtonComponent":{"required":["index"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"properties":{"index":{"type":"integer","format":"int32"}},"additionalProperties":false},"TemplateHeaderComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateQuickReplyButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"TemplateUrlButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"StickerContent":{"type":"object","description":"Sticker message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"Notification":{"required":["addresses"],"type":"object","description":"Configures push notifications for delivery status updates. eCall will call the\nspecified addresses when the `forEvent` condition is met.\n","properties":{"forEvent":{"type":["string","null"],"description":"Specifies which events trigger a notification.\n\n| Value | Description |\n|-------|-------------|\n| `SuccessOnly` | **(Default)** Only when delivery is confirmed by the device. |\n| `FinalOnly` | When delivery is confirmed **or** failed (any final status). |\n| `All` | Same as `FinalOnly`, plus when the job is delayed by the provider. |\n| `ErrorOnly` | Only when sending failed. |\n","enum":["SuccessOnly","FinalOnly","All","ErrorOnly"],"default":"SuccessOnly"},"addresses":{"type":"array","minItems":1,"description":"List of notification addresses. Max. total combined length: **200 characters**.\nValidation fails at the first invalid address.\n","items":{"oneOf":[{"$ref":"#/components/schemas/EmailNotificationAddress"},{"$ref":"#/components/schemas/SmsNotificationAddress"},{"$ref":"#/components/schemas/UrlNotificationAddress"}]}}},"additionalProperties":false},"EmailNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by email.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Email address."}},"additionalProperties":false},"NotificationAddress":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationAddressType"}},"additionalProperties":false},"NotificationAddressType":{"type":"string","description":"Type of notification address:\n- `Email` – eCall sends an email to the address.\n- `Sms` – eCall sends an SMS to the number.\n- `Url` – eCall makes an HTTP GET request to the URL with status data in the query string.\n- `UrlPost` – eCall makes an HTTP POST request to the URL with status data as JSON.\n","enum":["Sms","Email","Url","UrlPost"]},"SmsNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by SMS.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format."}},"additionalProperties":false},"UrlNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered via HTTP. Use type `Url` for GET requests or `UrlPost`\nfor POST requests (JSON body).\n","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"The URL eCall will call."}},"additionalProperties":false},"MessageResult":{"type":"object","description":"Response from a successful single message send request.\n\n- When `to` was used: only `messageId` is set.\n- When `toList` was used: `messageIdList` is set; `messageId` is empty.\n","properties":{"messageId":{"type":["string","null"],"description":"Unique identifier of the sent message. Use this for status queries."},"messageIdList":{"type":["array","null"],"description":"List of message IDs per recipient (only set when `toList` was used).","items":{"$ref":"#/components/schemas/MessageIdAddressPair"}},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp when the response was returned."}},"additionalProperties":false},"MessageIdAddressPair":{"type":"object","description":"Mapping of a message ID to its recipient address.","properties":{"messageId":{"type":["string","null"]},"address":{"type":["string","null"]}},"additionalProperties":false},"Error":{"type":"object","description":"Error response returned for `4xx` and `5xx` HTTP status codes.","properties":{"errorCode":{"$ref":"#/components/schemas/ErrorCode"},"errorMessage":{"type":["string","null"],"description":"High-level human-readable description of the error."},"errorDetails":{"description":"Detailed breakdown of validation errors, if applicable.","oneOf":[{"$ref":"#/components/schemas/ParameterErrorDetails"},{"type":"null"}]}},"additionalProperties":false},"ErrorCode":{"type":"string","description":"Machine-readable error code indicating why the request failed.\n\n| Code | Description |\n|------|-------------|\n| `InvalidContent` | JSON validation failed — bad parameter value. Check `errorDetails`. |\n| `InsufficientPoints` | Account has insufficient points/credits to send this message. |\n| `TooManyMessagesSameReceiver` | Too many messages sent to the same recipient (anti-spam). |\n| `TooManyMessagesSameReceiverAndContent` | Too many identical messages to the same recipient. |\n| `RequestMissing` | Request body is missing or empty. |\n| `UnknownContentType` | The specified `content.type` is not recognised. |\n| `InvalidSenderAccount` | The sender address is not valid for this account. |\n| `CannotConvertMediaBody` | Media file could not be processed. |\n| `PointSubstractionError` | Error deducting points from account balance. |\n| `AdrCountryNotWhitelisted` | Recipient country is not whitelisted for this account. |\n| `AdrCountryWhitelistLimitExceeded` | Country whitelist limit exceeded. |\n","enum":["Error1","Error2","RequestMissing","CannotConvertMediaBody","UnknownContentType","InvalidSenderAccount","InvalidContent","InsufficientPoints","PointSubstractionError","TooManyMessagesSameReceiver","TooManyMessagesSameReceiverAndContent","AdrCountryNotWhitelisted","AdrCountryWhitelistLimitExceeded","AdrCountryWhitelistLimitReachedButNotBlockedCountries"]},"ParameterErrorDetails":{"type":"object","description":"Detailed error information for parameter validation failures.","allOf":[{"$ref":"#/components/schemas/ErrorDetails"}],"properties":{"errors":{"type":["array","null"],"description":"List of individual field validation errors.","items":{"$ref":"#/components/schemas/ParameterErrorDetailsEntry"}}},"additionalProperties":false},"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]},"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}},"responses":{"BadRequest":{"description":"The request is invalid. This may be caused by a missing required parameter,\nan invalid value, or a constraint violation. Check the `errorCode` and\n`errorDetails` in the response body for specifics.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The `Authorization` header is missing or the credentials are invalid.\nVerify your username, password, and Base64 encoding.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalServerError":{"description":"An unexpected error occurred on the eCall server. Retry after a short delay.\nIf the problem persists, contact eCall support and include the `x-f24-request-id`\nheader value from the response.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v2/message":{"post":{"tags":["Message"],"summary":"Send a single message","operationId":"sendMessage","description":"Sends a single message to one recipient (`to`) or a list of recipients (`toList`).\nSupported channels: **SMS**, **WhatsApp**, **RCS**.\n\n> **Note:** `to` and `toList` are mutually exclusive — passing both returns a\n> validation error.\n\n### SMS character limits\n\nA single SMS page holds 160 characters (GSM) or 70 characters (UCS-2). Long messages\nare split into pages (max. 10). Multi-part pages each lose 7 characters to sequencing\ndata, giving **153 chars/page** (GSM) or **67 chars/page** (UCS-2). The absolute\nmaximum is **1530 characters** (GSM) / **670 characters** (UCS-2).\n\nThe maximum page count can also be configured per-message via `content.options.pageLimit`.\n\n### WhatsApp\n\nMaximum message length is **4096 characters**. The sender must be the phone number of a\nregistered WhatsApp Business Account — contact eCall support to set it up. The `Sticker`\ncontent type is not supported for WhatsApp.\n\n### RCS\n\nMaximum message length is **1000 characters**. The RCS sender ID must be registered\nwith the RCS provider — contact eCall support to obtain it.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageRequest"}}}},"responses":{"200":{"description":"Message accepted successfully.","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Get message status

> Retrieves the current delivery status of a previously sent message.\
> The \`messageId\` is obtained from the send response.\
> \
> \> Status can be queried up to \*\*seven days\*\* after sending.\
> \
> \### Voice channel note\
> \
> Voice messages cannot be sent directly via the REST API. However, if the\
> \*\*"Convert SMS to voice for landline numbers"\*\* option is enabled in the eCall portal\
> (Account Settings → SMS), SMS sent to Swiss or German landline numbers are automatically\
> converted to voice calls. A status query on such a message returns \`channel: Voice\` with\
> voice-specific status codes.<br>

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"tags":[{"name":"Message","description":"Send a single text message (SMS, WhatsApp, or RCS) to one or more recipients, and query its\ndelivery status. Status can be queried up to **seven days** after sending.\n"}],"servers":[{"url":"https://rest.ecall.ch","description":"eCall REST API (Production)"}],"security":[{"BasicAuth":[]}],"components":{"securitySchemes":{"BasicAuth":{"type":"http","scheme":"basic","description":"HTTP Basic Authentication. Encode `username:password` in Base64 and pass as:\n`Authorization: Basic <base64_encoded_credentials>`\n\nUse your eCall account credentials or a dedicated API sub-user created in the\neCall portal (**Interfaces → Overview**).\n"}},"schemas":{"MessageStatusData":{"type":"object","description":"Delivery status of a single message.","properties":{"channel":{"type":["string","null"],"description":"Channel over which the message was sent (`Sms`, `Whatsapp`, `Rcs`, `Voice`, `Pager`)."},"messageId":{"type":["string","null"],"description":"Unique identifier of the message."},"status":{"$ref":"#/components/schemas/MessageStatus"},"reasonCode":{"type":"integer","format":"int32","description":"Provider-level result code. `0` indicates success. See the table below for error codes.\n\n| Code | Description |\n|------|-------------|\n| `3020` | Timeout connecting to provider (pager) |\n| `5111` | Text too long (pager) |\n| `5112` | Invalid receiver number (pager) |\n| `5120` | Not a pager number |\n| `5121` | Invalid characters in receiver number (pager) |\n| `5155` | Too much traffic (pager) |\n| `5502` | Syntax error |\n| `5504` | Maximum messages for this address exceeded |\n| `5506` | Analog-to-digital converter invalid |\n| `5509` | Invalid receiver number |\n| `5510` | Too many messages for same receiver |\n| `5511` | Too many messages with same content for same receiver |\n| `5513` | Blacklisted (callback, address, or content) |\n| `5514` | Blocked by outbound filter rule |\n"},"reason":{"type":["string","null"],"description":"Human-readable provider result text."},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp of the latest status update."},"from":{"type":["string","null"],"description":"Sender address."},"to":{"type":["string","null"],"description":"Recipient address in international format."},"pageTotal":{"type":["integer","null"],"format":"int32","description":"SMS only: Total number of pages the message was split into."}},"additionalProperties":false},"MessageStatus":{"type":"string","description":"Delivery status of a message. Whether a status is **final** (no further updates expected)\ndepends on the channel:\n\n### SMS\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted to provider. |\n| `Sent` | ☐/☒ | Sent by provider. May become final after 4 days without a delivery report. |\n| `Delivered` | ☒ | Confirmed received by recipient device. |\n| `DeliveryFailed` | ☒ | Could not be delivered. |\n| `Failed` | ☒ | Sending failed. See `reason` for details. |\n\n### Pager\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☒ | Sent successfully. |\n| `Failed` | ☒ | Sending failed. |\n\n### Voice (auto-converted SMS to landline)\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☐ | Handed off to voice system. |\n| `Played` | ☐/☒ | Played on device. Final only if recipient hung up without acknowledging. |\n| `Played_with_receipt` | ☒ | Played and recipient confirmed. |\n| `Next_try_pending` | ☐ | No connection yet; retrying in 15 min. |\n| `Failed` | ☒ | Sending failed. |\n\n### WhatsApp\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted to provider. |\n| `Sent` | ☐ | Sent by provider. |\n| `Delivered` | ☐ | Received by device. |\n| `Read` | ☒ | Read by recipient. |\n| `Failed` | ☒ | Sending failed. |\n\n### RCS\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☐ | Sent by provider. |\n| `Delivered` | ☐ | Received by device. |\n| `Displayed` | ☒ | Displayed on device. |\n| `Rejected` | ☒ | Rejected by provider. |\n| `Expired` | ☒ | Validity period exceeded. |\n","enum":["Pending","Sent","Delivered","Read","Failed","Deleted","Transmitted","DeliveryFailed","Played","Played_with_feedback","Played_with_receipt","Next_try_pending","Displayed","Rejected","Expired"]},"Error":{"type":"object","description":"Error response returned for `4xx` and `5xx` HTTP status codes.","properties":{"errorCode":{"$ref":"#/components/schemas/ErrorCode"},"errorMessage":{"type":["string","null"],"description":"High-level human-readable description of the error."},"errorDetails":{"description":"Detailed breakdown of validation errors, if applicable.","oneOf":[{"$ref":"#/components/schemas/ParameterErrorDetails"},{"type":"null"}]}},"additionalProperties":false},"ErrorCode":{"type":"string","description":"Machine-readable error code indicating why the request failed.\n\n| Code | Description |\n|------|-------------|\n| `InvalidContent` | JSON validation failed — bad parameter value. Check `errorDetails`. |\n| `InsufficientPoints` | Account has insufficient points/credits to send this message. |\n| `TooManyMessagesSameReceiver` | Too many messages sent to the same recipient (anti-spam). |\n| `TooManyMessagesSameReceiverAndContent` | Too many identical messages to the same recipient. |\n| `RequestMissing` | Request body is missing or empty. |\n| `UnknownContentType` | The specified `content.type` is not recognised. |\n| `InvalidSenderAccount` | The sender address is not valid for this account. |\n| `CannotConvertMediaBody` | Media file could not be processed. |\n| `PointSubstractionError` | Error deducting points from account balance. |\n| `AdrCountryNotWhitelisted` | Recipient country is not whitelisted for this account. |\n| `AdrCountryWhitelistLimitExceeded` | Country whitelist limit exceeded. |\n","enum":["Error1","Error2","RequestMissing","CannotConvertMediaBody","UnknownContentType","InvalidSenderAccount","InvalidContent","InsufficientPoints","PointSubstractionError","TooManyMessagesSameReceiver","TooManyMessagesSameReceiverAndContent","AdrCountryNotWhitelisted","AdrCountryWhitelistLimitExceeded","AdrCountryWhitelistLimitReachedButNotBlockedCountries"]},"ParameterErrorDetails":{"type":"object","description":"Detailed error information for parameter validation failures.","allOf":[{"$ref":"#/components/schemas/ErrorDetails"}],"properties":{"errors":{"type":["array","null"],"description":"List of individual field validation errors.","items":{"$ref":"#/components/schemas/ParameterErrorDetailsEntry"}}},"additionalProperties":false},"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]},"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}},"responses":{"BadRequest":{"description":"The request is invalid. This may be caused by a missing required parameter,\nan invalid value, or a constraint violation. Check the `errorCode` and\n`errorDetails` in the response body for specifics.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The `Authorization` header is missing or the credentials are invalid.\nVerify your username, password, and Base64 encoding.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The requested resource (message ID, media ID, etc.) was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalServerError":{"description":"An unexpected error occurred on the eCall server. Retry after a short delay.\nIf the problem persists, contact eCall support and include the `x-f24-request-id`\nheader value from the response.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v2/message/{messageId}":{"get":{"tags":["Message"],"summary":"Get message status","operationId":"getMessageStatus","description":"Retrieves the current delivery status of a previously sent message.\nThe `messageId` is obtained from the send response.\n\n> Status can be queried up to **seven days** after sending.\n\n### Voice channel note\n\nVoice messages cannot be sent directly via the REST API. However, if the\n**\"Convert SMS to voice for landline numbers\"** option is enabled in the eCall portal\n(Account Settings → SMS), SMS sent to Swiss or German landline numbers are automatically\nconverted to voice calls. A status query on such a message returns `channel: Voice` with\nvoice-specific status codes.\n","parameters":[{"name":"messageId","in":"path","required":true,"description":"Unique message identifier as returned in the send response.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Status retrieved successfully.","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageStatusData"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```


# Message List

Send multiple messages in a single request and query their statuses collectively using the returned `messageListId`. Status can be queried up to **seven days** after sending.

## Send multiple messages

> Sends multiple messages in a single request. Each message object in the \`messages\`\
> array follows the same structure as a single \`POST /api/v2/message\` request body\
> (without the top-level \`notification\` field, which is specified once at the list level).\
> \
> The response includes individual results per message — messages that fail validation\
> are reported with an \`error\` object, while valid messages receive a \`messageId\`.\
> The overall \`messageListId\` can be used to query the combined status later.<br>

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"tags":[{"name":"MessageList","description":"Send multiple messages in a single request and query their statuses collectively using\nthe returned `messageListId`. Status can be queried up to **seven days** after sending.\n"}],"servers":[{"url":"https://rest.ecall.ch","description":"eCall REST API (Production)"}],"security":[{"BasicAuth":[]}],"components":{"securitySchemes":{"BasicAuth":{"type":"http","scheme":"basic","description":"HTTP Basic Authentication. Encode `username:password` in Base64 and pass as:\n`Authorization: Basic <base64_encoded_credentials>`\n\nUse your eCall account credentials or a dedicated API sub-user created in the\neCall portal (**Interfaces → Overview**).\n"}},"schemas":{"MessageListRequest":{"required":["messages"],"type":"object","description":"Request body for sending multiple messages in a single call.","properties":{"messages":{"type":"array","description":"List of message objects. Each uses the same fields as a single `MessageRequest`\n(`channel`, `from`, `to`/`toList`, `content`). The `notification` field is\nspecified once at the list level instead.\n","items":{"$ref":"#/components/schemas/Message"}},"notification":{"$ref":"#/components/schemas/Notification"}},"additionalProperties":false},"Message":{"required":["channel","from","content"],"type":"object","description":"A single message object within a message list request.","properties":{"channel":{"type":"string","description":"Messaging channel (`Sms`, `Whatsapp`, `Rcs`).","enum":["Sms","Whatsapp","Rcs"]},"from":{"type":"string","description":"Sender address (see `MessageRequest.from`)."},"to":{"type":["string","null"],"description":"Single recipient in international format."},"toList":{"type":["array","null"],"description":"List of recipients. Mutually exclusive with `to`.","items":{"oneOf":[{"$ref":"#/components/schemas/ToAddressGroup"},{"$ref":"#/components/schemas/ToAddressNumber"},{"$ref":"#/components/schemas/ToAddressPerson"}]}},"sendDate":{"type":["string","null"],"description":"Scheduled send time (ISO 8601)."},"content":{"description":"Message content.","oneOf":[{"$ref":"#/components/schemas/TextContent"},{"$ref":"#/components/schemas/ImageContent"},{"$ref":"#/components/schemas/DocumentContent"},{"$ref":"#/components/schemas/AudioContent"},{"$ref":"#/components/schemas/VideoContent"},{"$ref":"#/components/schemas/LocationContent"},{"$ref":"#/components/schemas/ContactContent"},{"$ref":"#/components/schemas/InteractiveContent"},{"$ref":"#/components/schemas/InteractiveReplyContent"},{"$ref":"#/components/schemas/TemplateContent"},{"$ref":"#/components/schemas/StickerContent"},{"$ref":"#/components/schemas/MediaContent"}]}},"additionalProperties":false},"ToAddressGroup":{"required":["address"],"type":"object","description":"A recipient group defined in the eCall address book.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Group name as defined in the eCall address book."}},"additionalProperties":false},"ToAddress":{"required":["type"],"type":"object","description":"Base type for a recipient address in a `toList`.","properties":{"type":{"$ref":"#/components/schemas/ToAddressType"}},"additionalProperties":false},"ToAddressType":{"type":"string","description":"Type of recipient address entry.","enum":["Number","Person","Group"]},"ToAddressNumber":{"required":["address"],"type":"object","description":"A recipient identified by mobile number in international format.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format, e.g. `0041781234567` or `+41781234567`."}},"additionalProperties":false},"ToAddressPerson":{"required":["address"],"type":"object","description":"A recipient identified by name as stored in the eCall address book.\nFormat: `[Lastname] [Firstname]` (without brackets).\n","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Name from eCall address book. Format: Lastname Firstname."}},"additionalProperties":false},"TextContent":{"required":["text"],"type":"object","description":"Plain text content. The primary content type for SMS and RCS.\n\nFor SMS, the maximum length is determined by account settings (max. 10 pages / 1530 chars\nGSM). Text exceeding the limit is truncated. Use `options.pageLimit` to restrict to fewer\npages, or `options.smsType: Flash` to send a flash SMS.\n","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"text":{"type":"string","minLength":1,"description":"The message text. UTF-8 encoded."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]},"ImageContent":{"type":"object","description":"Image message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional image caption."}},"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"DocumentContent":{"type":"object","description":"Document/file message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Currently not supported."},"filename":{"type":["string","null"],"description":"Display filename for the document."}},"additionalProperties":false},"AudioContent":{"type":"object","description":"Audio message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"VideoContent":{"type":"object","description":"Video message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional video caption."}},"additionalProperties":false},"LocationContent":{"type":"object","description":"Geographic location message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"longitude":{"type":"number","format":"double","description":"Longitude coordinate."},"latitude":{"type":"number","format":"double","description":"Latitude coordinate."},"name":{"type":["string","null"],"description":"Optional location name."},"address":{"type":["string","null"],"description":"Optional address text."}},"additionalProperties":false},"ContactContent":{"type":"object","description":"vCard contact message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"contacts":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ContactData"}}},"additionalProperties":false},"ContactData":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/NameData"},"birthDay":{"type":["string","null"],"description":"Birthday in `YYYY-MM-DD` format."},"organization":{"$ref":"#/components/schemas/OrganizationData"},"addresses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AddressData"}},"phones":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PhoneData"}},"urls":{"type":["array","null"],"items":{"$ref":"#/components/schemas/UrlData"}}},"additionalProperties":false},"NameData":{"required":["formattedName"],"type":"object","properties":{"formattedName":{"type":"string","minLength":1},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"middleName":{"type":["string","null"]},"suffix":{"type":["string","null"]},"prefix":{"type":["string","null"]}},"additionalProperties":false},"OrganizationData":{"type":"object","properties":{"company":{"type":["string","null"]},"department":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"AddressData":{"type":"object","properties":{"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"country":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"PhoneData":{"type":"object","properties":{"phone":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"UrlData":{"type":"object","properties":{"url":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"InteractiveContent":{"required":["action"],"type":"object","description":"Interactive message with buttons or a list (e.g. for WhatsApp/RCS).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"header":{"oneOf":[{"$ref":"#/components/schemas/InteractiveTextHeader"},{"$ref":"#/components/schemas/InteractiveImageHeader"},{"$ref":"#/components/schemas/InteractiveVideoHeader"},{"$ref":"#/components/schemas/InteractiveDocumentHeader"},{"type":"null"}]},"body":{"$ref":"#/components/schemas/InteractiveBody"},"footer":{"$ref":"#/components/schemas/InteractiveFooter"},"action":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonAction"},{"$ref":"#/components/schemas/InteractiveListAction"}]}},"additionalProperties":false},"InteractiveTextHeader":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Header text. Supports emojis but not markdown."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]},"InteractiveImageHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveVideoHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveDocumentHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveBody":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":1024,"description":"Body text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveFooter":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Footer text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveButtonAction":{"required":["buttons"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"buttons":{"type":"array","minItems":1,"maxItems":3,"items":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonActionReplyButton"}]}}},"additionalProperties":false},"InteractiveAction":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveActionType"}},"additionalProperties":false},"InteractiveActionType":{"type":"string","enum":["Button","List"]},"InteractiveButtonActionReplyButton":{"required":["id","title"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveButtonActionButton"}],"properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Unique button ID returned in the webhook when clicked."},"title":{"type":"string","minLength":1,"maxLength":20,"description":"Button label text. No emojis or markdown."}},"additionalProperties":false},"InteractiveButtonActionButton":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveButtonActionButtonType"}},"additionalProperties":false},"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]},"InteractiveListAction":{"required":["button","sections"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"button":{"type":"string","minLength":1,"maxLength":20,"description":"Button label. No emojis or markdown."},"sections":{"type":"array","minItems":1,"maxItems":10,"description":"Max. 10 rows across all sections.","items":{"$ref":"#/components/schemas/InteractiveListActionSection"}}},"additionalProperties":false},"InteractiveListActionSection":{"required":["rows"],"type":"object","properties":{"title":{"type":["string","null"],"minLength":1,"maxLength":24,"description":"Required if the message has more than one section."},"rows":{"type":"array","minItems":1,"maxItems":10,"items":{"$ref":"#/components/schemas/InteractiveListActionRow"}}},"additionalProperties":false},"InteractiveListActionRow":{"required":["id","title"],"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":["string","null"],"minLength":1,"maxLength":72}},"additionalProperties":false},"InteractiveReplyContent":{"type":"object","description":"Content received when a user interacts with an interactive message.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"reply":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonReply"},{"$ref":"#/components/schemas/InteractiveListReply"},{"type":"null"}]}},"additionalProperties":false},"InteractiveButtonReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"InteractiveReplyContentReply":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveReplyType"}},"additionalProperties":false},"InteractiveReplyType":{"type":"string","enum":["Button","List"]},"InteractiveListReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]}},"additionalProperties":false},"TemplateContent":{"required":["namespace","name","language"],"type":"object","description":"Pre-approved message template (e.g. for WhatsApp Business).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"namespace":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"language":{"$ref":"#/components/schemas/TemplateLanguage"},"components":{"type":["array","null"],"items":{"oneOf":[{"$ref":"#/components/schemas/TemplateBodyComponent"},{"$ref":"#/components/schemas/TemplateButtonComponent"},{"$ref":"#/components/schemas/TemplateHeaderComponent"},{"$ref":"#/components/schemas/TemplateQuickReplyButtonComponent"},{"$ref":"#/components/schemas/TemplateUrlButtonComponent"}]}}},"additionalProperties":false},"TemplateLanguage":{"required":["code"],"type":"object","properties":{"policy":{"$ref":"#/components/schemas/TemplateLanguagePolicy"},"code":{"$ref":"#/components/schemas/TemplateLanguageCode"}},"additionalProperties":false},"TemplateLanguagePolicy":{"type":"string","enum":["Deterministic"]},"TemplateLanguageCode":{"type":"string","description":"BCP 47 language code for the template.","enum":["af","sq","ar","az","bn","bg","ca","zh_CN","zh_HK","zh_TW","hr","cs","da","nl","en","en_GB","en_US","et","fil","fi","fr","ka","de","el","gu","ha","he","hi","hu","id","ga","it","ja","kn","kk","rw_RW","ko","ky_KG","lo","lv","lt","mk","ms","ml","mr","nb","fa","pl","pt_BR","pt_PT","pa","ro","ru","sr","sk","sl","es","es_AR","es_ES","es_MX","sw","sv","ta","te","th","tr","uk","ur","uz","vi","zu"]},"TemplateBodyComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateButtonComponent":{"required":["index"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"properties":{"index":{"type":"integer","format":"int32"}},"additionalProperties":false},"TemplateHeaderComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateQuickReplyButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"TemplateUrlButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"StickerContent":{"type":"object","description":"Sticker message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"Notification":{"required":["addresses"],"type":"object","description":"Configures push notifications for delivery status updates. eCall will call the\nspecified addresses when the `forEvent` condition is met.\n","properties":{"forEvent":{"type":["string","null"],"description":"Specifies which events trigger a notification.\n\n| Value | Description |\n|-------|-------------|\n| `SuccessOnly` | **(Default)** Only when delivery is confirmed by the device. |\n| `FinalOnly` | When delivery is confirmed **or** failed (any final status). |\n| `All` | Same as `FinalOnly`, plus when the job is delayed by the provider. |\n| `ErrorOnly` | Only when sending failed. |\n","enum":["SuccessOnly","FinalOnly","All","ErrorOnly"],"default":"SuccessOnly"},"addresses":{"type":"array","minItems":1,"description":"List of notification addresses. Max. total combined length: **200 characters**.\nValidation fails at the first invalid address.\n","items":{"oneOf":[{"$ref":"#/components/schemas/EmailNotificationAddress"},{"$ref":"#/components/schemas/SmsNotificationAddress"},{"$ref":"#/components/schemas/UrlNotificationAddress"}]}}},"additionalProperties":false},"EmailNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by email.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Email address."}},"additionalProperties":false},"NotificationAddress":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationAddressType"}},"additionalProperties":false},"NotificationAddressType":{"type":"string","description":"Type of notification address:\n- `Email` – eCall sends an email to the address.\n- `Sms` – eCall sends an SMS to the number.\n- `Url` – eCall makes an HTTP GET request to the URL with status data in the query string.\n- `UrlPost` – eCall makes an HTTP POST request to the URL with status data as JSON.\n","enum":["Sms","Email","Url","UrlPost"]},"SmsNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by SMS.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format."}},"additionalProperties":false},"UrlNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered via HTTP. Use type `Url` for GET requests or `UrlPost`\nfor POST requests (JSON body).\n","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"The URL eCall will call."}},"additionalProperties":false},"MessageListResult":{"type":"object","description":"Response from a successful message list send request.","properties":{"results":{"type":["array","null"],"description":"One result object per message in the request. Accepted messages have a `messageId`;\nrejected messages have an `error` instead.\n","items":{"$ref":"#/components/schemas/MessageListResultSingle"}},"messageListId":{"type":["string","null"],"description":"Unique identifier of the message list. Use this for list status queries."},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp when the response was returned."}},"additionalProperties":false},"MessageListResultSingle":{"type":"object","description":"Individual result for one message within a list send request.","properties":{"messageId":{"type":["string","null"],"description":"Message ID assigned to this message. Only present if the message passed validation\nand was accepted.\n"},"address":{"type":["string","null"],"description":"Recipient address for this message."},"error":{"$ref":"#/components/schemas/Error"}},"additionalProperties":false},"Error":{"type":"object","description":"Error response returned for `4xx` and `5xx` HTTP status codes.","properties":{"errorCode":{"$ref":"#/components/schemas/ErrorCode"},"errorMessage":{"type":["string","null"],"description":"High-level human-readable description of the error."},"errorDetails":{"description":"Detailed breakdown of validation errors, if applicable.","oneOf":[{"$ref":"#/components/schemas/ParameterErrorDetails"},{"type":"null"}]}},"additionalProperties":false},"ErrorCode":{"type":"string","description":"Machine-readable error code indicating why the request failed.\n\n| Code | Description |\n|------|-------------|\n| `InvalidContent` | JSON validation failed — bad parameter value. Check `errorDetails`. |\n| `InsufficientPoints` | Account has insufficient points/credits to send this message. |\n| `TooManyMessagesSameReceiver` | Too many messages sent to the same recipient (anti-spam). |\n| `TooManyMessagesSameReceiverAndContent` | Too many identical messages to the same recipient. |\n| `RequestMissing` | Request body is missing or empty. |\n| `UnknownContentType` | The specified `content.type` is not recognised. |\n| `InvalidSenderAccount` | The sender address is not valid for this account. |\n| `CannotConvertMediaBody` | Media file could not be processed. |\n| `PointSubstractionError` | Error deducting points from account balance. |\n| `AdrCountryNotWhitelisted` | Recipient country is not whitelisted for this account. |\n| `AdrCountryWhitelistLimitExceeded` | Country whitelist limit exceeded. |\n","enum":["Error1","Error2","RequestMissing","CannotConvertMediaBody","UnknownContentType","InvalidSenderAccount","InvalidContent","InsufficientPoints","PointSubstractionError","TooManyMessagesSameReceiver","TooManyMessagesSameReceiverAndContent","AdrCountryNotWhitelisted","AdrCountryWhitelistLimitExceeded","AdrCountryWhitelistLimitReachedButNotBlockedCountries"]},"ParameterErrorDetails":{"type":"object","description":"Detailed error information for parameter validation failures.","allOf":[{"$ref":"#/components/schemas/ErrorDetails"}],"properties":{"errors":{"type":["array","null"],"description":"List of individual field validation errors.","items":{"$ref":"#/components/schemas/ParameterErrorDetailsEntry"}}},"additionalProperties":false},"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]},"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}},"responses":{"BadRequest":{"description":"The request is invalid. This may be caused by a missing required parameter,\nan invalid value, or a constraint violation. Check the `errorCode` and\n`errorDetails` in the response body for specifics.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The `Authorization` header is missing or the credentials are invalid.\nVerify your username, password, and Base64 encoding.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalServerError":{"description":"An unexpected error occurred on the eCall server. Retry after a short delay.\nIf the problem persists, contact eCall support and include the `x-f24-request-id`\nheader value from the response.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v2/messagelist":{"post":{"tags":["MessageList"],"summary":"Send multiple messages","operationId":"sendMessageList","description":"Sends multiple messages in a single request. Each message object in the `messages`\narray follows the same structure as a single `POST /api/v2/message` request body\n(without the top-level `notification` field, which is specified once at the list level).\n\nThe response includes individual results per message — messages that fail validation\nare reported with an `error` object, while valid messages receive a `messageId`.\nThe overall `messageListId` can be used to query the combined status later.\n","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageListRequest"}}}},"responses":{"200":{"description":"Request processed. Individual messages may still have been rejected —\ncheck each entry in `results` for an `error` object.\n","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageListResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Get status of a message list

> Retrieves the delivery status of all messages that were accepted in a\
> \`POST /api/v2/messagelist\` request.\
> \
> \> Status can be queried up to \*\*seven days\*\* after sending.<br>

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"tags":[{"name":"MessageList","description":"Send multiple messages in a single request and query their statuses collectively using\nthe returned `messageListId`. Status can be queried up to **seven days** after sending.\n"}],"servers":[{"url":"https://rest.ecall.ch","description":"eCall REST API (Production)"}],"security":[{"BasicAuth":[]}],"components":{"securitySchemes":{"BasicAuth":{"type":"http","scheme":"basic","description":"HTTP Basic Authentication. Encode `username:password` in Base64 and pass as:\n`Authorization: Basic <base64_encoded_credentials>`\n\nUse your eCall account credentials or a dedicated API sub-user created in the\neCall portal (**Interfaces → Overview**).\n"}},"schemas":{"MessageListStatusData":{"type":"object","description":"Delivery statuses for a list of messages.","properties":{"states":{"type":["array","null"],"description":"List of status objects, one per accepted message.","items":{"$ref":"#/components/schemas/MessageStatusData"}},"messageListId":{"type":["string","null"],"description":"Unique identifier of the message list."},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp when the response was returned."}},"additionalProperties":false},"MessageStatusData":{"type":"object","description":"Delivery status of a single message.","properties":{"channel":{"type":["string","null"],"description":"Channel over which the message was sent (`Sms`, `Whatsapp`, `Rcs`, `Voice`, `Pager`)."},"messageId":{"type":["string","null"],"description":"Unique identifier of the message."},"status":{"$ref":"#/components/schemas/MessageStatus"},"reasonCode":{"type":"integer","format":"int32","description":"Provider-level result code. `0` indicates success. See the table below for error codes.\n\n| Code | Description |\n|------|-------------|\n| `3020` | Timeout connecting to provider (pager) |\n| `5111` | Text too long (pager) |\n| `5112` | Invalid receiver number (pager) |\n| `5120` | Not a pager number |\n| `5121` | Invalid characters in receiver number (pager) |\n| `5155` | Too much traffic (pager) |\n| `5502` | Syntax error |\n| `5504` | Maximum messages for this address exceeded |\n| `5506` | Analog-to-digital converter invalid |\n| `5509` | Invalid receiver number |\n| `5510` | Too many messages for same receiver |\n| `5511` | Too many messages with same content for same receiver |\n| `5513` | Blacklisted (callback, address, or content) |\n| `5514` | Blocked by outbound filter rule |\n"},"reason":{"type":["string","null"],"description":"Human-readable provider result text."},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp of the latest status update."},"from":{"type":["string","null"],"description":"Sender address."},"to":{"type":["string","null"],"description":"Recipient address in international format."},"pageTotal":{"type":["integer","null"],"format":"int32","description":"SMS only: Total number of pages the message was split into."}},"additionalProperties":false},"MessageStatus":{"type":"string","description":"Delivery status of a message. Whether a status is **final** (no further updates expected)\ndepends on the channel:\n\n### SMS\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted to provider. |\n| `Sent` | ☐/☒ | Sent by provider. May become final after 4 days without a delivery report. |\n| `Delivered` | ☒ | Confirmed received by recipient device. |\n| `DeliveryFailed` | ☒ | Could not be delivered. |\n| `Failed` | ☒ | Sending failed. See `reason` for details. |\n\n### Pager\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☒ | Sent successfully. |\n| `Failed` | ☒ | Sending failed. |\n\n### Voice (auto-converted SMS to landline)\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☐ | Handed off to voice system. |\n| `Played` | ☐/☒ | Played on device. Final only if recipient hung up without acknowledging. |\n| `Played_with_receipt` | ☒ | Played and recipient confirmed. |\n| `Next_try_pending` | ☐ | No connection yet; retrying in 15 min. |\n| `Failed` | ☒ | Sending failed. |\n\n### WhatsApp\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted to provider. |\n| `Sent` | ☐ | Sent by provider. |\n| `Delivered` | ☐ | Received by device. |\n| `Read` | ☒ | Read by recipient. |\n| `Failed` | ☒ | Sending failed. |\n\n### RCS\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☐ | Sent by provider. |\n| `Delivered` | ☐ | Received by device. |\n| `Displayed` | ☒ | Displayed on device. |\n| `Rejected` | ☒ | Rejected by provider. |\n| `Expired` | ☒ | Validity period exceeded. |\n","enum":["Pending","Sent","Delivered","Read","Failed","Deleted","Transmitted","DeliveryFailed","Played","Played_with_feedback","Played_with_receipt","Next_try_pending","Displayed","Rejected","Expired"]},"Error":{"type":"object","description":"Error response returned for `4xx` and `5xx` HTTP status codes.","properties":{"errorCode":{"$ref":"#/components/schemas/ErrorCode"},"errorMessage":{"type":["string","null"],"description":"High-level human-readable description of the error."},"errorDetails":{"description":"Detailed breakdown of validation errors, if applicable.","oneOf":[{"$ref":"#/components/schemas/ParameterErrorDetails"},{"type":"null"}]}},"additionalProperties":false},"ErrorCode":{"type":"string","description":"Machine-readable error code indicating why the request failed.\n\n| Code | Description |\n|------|-------------|\n| `InvalidContent` | JSON validation failed — bad parameter value. Check `errorDetails`. |\n| `InsufficientPoints` | Account has insufficient points/credits to send this message. |\n| `TooManyMessagesSameReceiver` | Too many messages sent to the same recipient (anti-spam). |\n| `TooManyMessagesSameReceiverAndContent` | Too many identical messages to the same recipient. |\n| `RequestMissing` | Request body is missing or empty. |\n| `UnknownContentType` | The specified `content.type` is not recognised. |\n| `InvalidSenderAccount` | The sender address is not valid for this account. |\n| `CannotConvertMediaBody` | Media file could not be processed. |\n| `PointSubstractionError` | Error deducting points from account balance. |\n| `AdrCountryNotWhitelisted` | Recipient country is not whitelisted for this account. |\n| `AdrCountryWhitelistLimitExceeded` | Country whitelist limit exceeded. |\n","enum":["Error1","Error2","RequestMissing","CannotConvertMediaBody","UnknownContentType","InvalidSenderAccount","InvalidContent","InsufficientPoints","PointSubstractionError","TooManyMessagesSameReceiver","TooManyMessagesSameReceiverAndContent","AdrCountryNotWhitelisted","AdrCountryWhitelistLimitExceeded","AdrCountryWhitelistLimitReachedButNotBlockedCountries"]},"ParameterErrorDetails":{"type":"object","description":"Detailed error information for parameter validation failures.","allOf":[{"$ref":"#/components/schemas/ErrorDetails"}],"properties":{"errors":{"type":["array","null"],"description":"List of individual field validation errors.","items":{"$ref":"#/components/schemas/ParameterErrorDetailsEntry"}}},"additionalProperties":false},"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]},"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}},"responses":{"BadRequest":{"description":"The request is invalid. This may be caused by a missing required parameter,\nan invalid value, or a constraint violation. Check the `errorCode` and\n`errorDetails` in the response body for specifics.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The `Authorization` header is missing or the credentials are invalid.\nVerify your username, password, and Base64 encoding.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The requested resource (message ID, media ID, etc.) was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalServerError":{"description":"An unexpected error occurred on the eCall server. Retry after a short delay.\nIf the problem persists, contact eCall support and include the `x-f24-request-id`\nheader value from the response.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v2/messagelist/{messageListId}":{"get":{"tags":["MessageList"],"summary":"Get status of a message list","operationId":"getMessageListStatus","description":"Retrieves the delivery status of all messages that were accepted in a\n`POST /api/v2/messagelist` request.\n\n> Status can be queried up to **seven days** after sending.\n","parameters":[{"name":"messageListId","in":"path","required":true,"description":"Unique identifier of the message list, as returned in the send response.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Status retrieved successfully.","headers":{},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageListStatusData"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```


# Media

Upload and retrieve binary media files (images, documents, audio, video) for use in rich message content types such as RCS or WhatsApp.

## Upload a media file

> Uploads a binary media file (image, document, audio, or video) and returns a\
> \`mediaId\` that can be referenced in rich message content fields such as\
> \`ImageContent.mediaId\`, \`DocumentContent.mediaId\`, etc.<br>

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"tags":[{"name":"Media","description":"Upload and retrieve binary media files (images, documents, audio, video) for use in\nrich message content types such as RCS or WhatsApp.\n"}],"servers":[{"url":"https://rest.ecall.ch","description":"eCall REST API (Production)"}],"security":[{"BasicAuth":[]}],"components":{"securitySchemes":{"BasicAuth":{"type":"http","scheme":"basic","description":"HTTP Basic Authentication. Encode `username:password` in Base64 and pass as:\n`Authorization: Basic <base64_encoded_credentials>`\n\nUse your eCall account credentials or a dedicated API sub-user created in the\neCall portal (**Interfaces → Overview**).\n"}},"schemas":{"MediaUploadResult":{"type":"object","description":"Result of a successful media upload.","properties":{"mediaId":{"type":["string","null"],"description":"Unique identifier of the uploaded media file. Use this in message content."}},"additionalProperties":false},"Error":{"type":"object","description":"Error response returned for `4xx` and `5xx` HTTP status codes.","properties":{"errorCode":{"$ref":"#/components/schemas/ErrorCode"},"errorMessage":{"type":["string","null"],"description":"High-level human-readable description of the error."},"errorDetails":{"description":"Detailed breakdown of validation errors, if applicable.","oneOf":[{"$ref":"#/components/schemas/ParameterErrorDetails"},{"type":"null"}]}},"additionalProperties":false},"ErrorCode":{"type":"string","description":"Machine-readable error code indicating why the request failed.\n\n| Code | Description |\n|------|-------------|\n| `InvalidContent` | JSON validation failed — bad parameter value. Check `errorDetails`. |\n| `InsufficientPoints` | Account has insufficient points/credits to send this message. |\n| `TooManyMessagesSameReceiver` | Too many messages sent to the same recipient (anti-spam). |\n| `TooManyMessagesSameReceiverAndContent` | Too many identical messages to the same recipient. |\n| `RequestMissing` | Request body is missing or empty. |\n| `UnknownContentType` | The specified `content.type` is not recognised. |\n| `InvalidSenderAccount` | The sender address is not valid for this account. |\n| `CannotConvertMediaBody` | Media file could not be processed. |\n| `PointSubstractionError` | Error deducting points from account balance. |\n| `AdrCountryNotWhitelisted` | Recipient country is not whitelisted for this account. |\n| `AdrCountryWhitelistLimitExceeded` | Country whitelist limit exceeded. |\n","enum":["Error1","Error2","RequestMissing","CannotConvertMediaBody","UnknownContentType","InvalidSenderAccount","InvalidContent","InsufficientPoints","PointSubstractionError","TooManyMessagesSameReceiver","TooManyMessagesSameReceiverAndContent","AdrCountryNotWhitelisted","AdrCountryWhitelistLimitExceeded","AdrCountryWhitelistLimitReachedButNotBlockedCountries"]},"ParameterErrorDetails":{"type":"object","description":"Detailed error information for parameter validation failures.","allOf":[{"$ref":"#/components/schemas/ErrorDetails"}],"properties":{"errors":{"type":["array","null"],"description":"List of individual field validation errors.","items":{"$ref":"#/components/schemas/ParameterErrorDetailsEntry"}}},"additionalProperties":false},"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]},"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}},"responses":{"BadRequest":{"description":"The request is invalid. This may be caused by a missing required parameter,\nan invalid value, or a constraint violation. Check the `errorCode` and\n`errorDetails` in the response body for specifics.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The `Authorization` header is missing or the credentials are invalid.\nVerify your username, password, and Base64 encoding.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalServerError":{"description":"An unexpected error occurred on the eCall server. Retry after a short delay.\nIf the problem persists, contact eCall support and include the `x-f24-request-id`\nheader value from the response.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"paths":{"/api/v2/media":{"post":{"tags":["Media"],"summary":"Upload a media file","operationId":"uploadMedia","description":"Uploads a binary media file (image, document, audio, or video) and returns a\n`mediaId` that can be referenced in rich message content fields such as\n`ImageContent.mediaId`, `DocumentContent.mediaId`, etc.\n","requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"string","format":"binary","description":"The file to upload."}}}}}},"responses":{"201":{"description":"File uploaded successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MediaUploadResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```

## Retrieve a media file

> Downloads a previously uploaded media file by its \`mediaId\`.

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"tags":[{"name":"Media","description":"Upload and retrieve binary media files (images, documents, audio, video) for use in\nrich message content types such as RCS or WhatsApp.\n"}],"servers":[{"url":"https://rest.ecall.ch","description":"eCall REST API (Production)"}],"security":[{"BasicAuth":[]}],"components":{"securitySchemes":{"BasicAuth":{"type":"http","scheme":"basic","description":"HTTP Basic Authentication. Encode `username:password` in Base64 and pass as:\n`Authorization: Basic <base64_encoded_credentials>`\n\nUse your eCall account credentials or a dedicated API sub-user created in the\neCall portal (**Interfaces → Overview**).\n"}},"responses":{"BadRequest":{"description":"The request is invalid. This may be caused by a missing required parameter,\nan invalid value, or a constraint violation. Check the `errorCode` and\n`errorDetails` in the response body for specifics.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"Unauthorized":{"description":"The `Authorization` header is missing or the credentials are invalid.\nVerify your username, password, and Base64 encoding.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"NotFound":{"description":"The requested resource (message ID, media ID, etc.) was not found.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"InternalServerError":{"description":"An unexpected error occurred on the eCall server. Retry after a short delay.\nIf the problem persists, contact eCall support and include the `x-f24-request-id`\nheader value from the response.\n","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","description":"Error response returned for `4xx` and `5xx` HTTP status codes.","properties":{"errorCode":{"$ref":"#/components/schemas/ErrorCode"},"errorMessage":{"type":["string","null"],"description":"High-level human-readable description of the error."},"errorDetails":{"description":"Detailed breakdown of validation errors, if applicable.","oneOf":[{"$ref":"#/components/schemas/ParameterErrorDetails"},{"type":"null"}]}},"additionalProperties":false},"ErrorCode":{"type":"string","description":"Machine-readable error code indicating why the request failed.\n\n| Code | Description |\n|------|-------------|\n| `InvalidContent` | JSON validation failed — bad parameter value. Check `errorDetails`. |\n| `InsufficientPoints` | Account has insufficient points/credits to send this message. |\n| `TooManyMessagesSameReceiver` | Too many messages sent to the same recipient (anti-spam). |\n| `TooManyMessagesSameReceiverAndContent` | Too many identical messages to the same recipient. |\n| `RequestMissing` | Request body is missing or empty. |\n| `UnknownContentType` | The specified `content.type` is not recognised. |\n| `InvalidSenderAccount` | The sender address is not valid for this account. |\n| `CannotConvertMediaBody` | Media file could not be processed. |\n| `PointSubstractionError` | Error deducting points from account balance. |\n| `AdrCountryNotWhitelisted` | Recipient country is not whitelisted for this account. |\n| `AdrCountryWhitelistLimitExceeded` | Country whitelist limit exceeded. |\n","enum":["Error1","Error2","RequestMissing","CannotConvertMediaBody","UnknownContentType","InvalidSenderAccount","InvalidContent","InsufficientPoints","PointSubstractionError","TooManyMessagesSameReceiver","TooManyMessagesSameReceiverAndContent","AdrCountryNotWhitelisted","AdrCountryWhitelistLimitExceeded","AdrCountryWhitelistLimitReachedButNotBlockedCountries"]},"ParameterErrorDetails":{"type":"object","description":"Detailed error information for parameter validation failures.","allOf":[{"$ref":"#/components/schemas/ErrorDetails"}],"properties":{"errors":{"type":["array","null"],"description":"List of individual field validation errors.","items":{"$ref":"#/components/schemas/ParameterErrorDetailsEntry"}}},"additionalProperties":false},"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]},"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}}},"paths":{"/api/v2/media/{mediaId}":{"get":{"tags":["Media"],"summary":"Retrieve a media file","operationId":"getMedia","description":"Downloads a previously uploaded media file by its `mediaId`.","parameters":[{"name":"mediaId","in":"path","required":true,"description":"Unique identifier of the media file, as returned by the upload endpoint.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Media file returned as binary.","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/Unauthorized"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/InternalServerError"}}}}}}
```


# System

Health check endpoint to verify that the eCall REST API is reachable.

## API health check

> Returns HTTP 200 if the eCall REST API is operational. Use this endpoint to\
> verify connectivity before sending messages.<br>

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"tags":[{"name":"System","description":"Health check endpoint to verify that the eCall REST API is reachable."}],"servers":[{"url":"https://rest.ecall.ch","description":"eCall REST API (Production)"}],"security":[],"paths":{"/api/v2/system/status":{"get":{"tags":["System"],"summary":"API health check","operationId":"getSystemStatus","description":"Returns HTTP 200 if the eCall REST API is operational. Use this endpoint to\nverify connectivity before sending messages.\n","responses":{"200":{"description":"API is operational."},"500":{"description":"API is experiencing issues."}}}}}}
```


# Webhooks

Endpoints you implement on your server to receive event notifications from eCall.

{% openapi-webhook spec="f24-schweiz-ag-api" name="statusReport" method="post" %}
[f24-schweiz-ag-api](https://4401d86825a13bf607936cc3a9f3897a.r2.cloudflarestorage.com/gitbook-x-prod-openapi/raw/75712906d1985b9928471f05cddae237971d85956061eef3bbe03e0294d2031a.yaml?X-Amz-Algorithm=AWS4-HMAC-SHA256\&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD\&X-Amz-Credential=dce48141f43c0191a2ad043a6888781c%2F20260809%2Fauto%2Fs3%2Faws4_request\&X-Amz-Date=20260809T121416Z\&X-Amz-Expires=172800\&X-Amz-Signature=2e84808916efb7031f697c5d5e712d20f00c238dc08b7b64e061e5f3c1e76e13\&X-Amz-SignedHeaders=host\&x-amz-checksum-mode=ENABLED\&x-id=GetObject)
{% endopenapi-webhook %}

{% openapi-webhook spec="f24-schweiz-ag-api" name="receivedMessage" method="post" %}
[f24-schweiz-ag-api](https://4401d86825a13bf607936cc3a9f3897a.r2.cloudflarestorage.com/gitbook-x-prod-openapi/raw/75712906d1985b9928471f05cddae237971d85956061eef3bbe03e0294d2031a.yaml?X-Amz-Algorithm=AWS4-HMAC-SHA256\&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD\&X-Amz-Credential=dce48141f43c0191a2ad043a6888781c%2F20260809%2Fauto%2Fs3%2Faws4_request\&X-Amz-Date=20260809T121419Z\&X-Amz-Expires=172800\&X-Amz-Signature=550b6435ef2a805641c73ff0b19cb4a70f99ea516140c1405f3bb8ae25f32a17\&X-Amz-SignedHeaders=host\&x-amz-checksum-mode=ENABLED\&x-id=GetObject)
{% endopenapi-webhook %}


# Models

## The MessageRequest object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageRequest":{"required":["channel","from","content"],"type":"object","description":"Request body for sending a single message. Use either `to` (single recipient)\nor `toList` (multiple recipients) — not both.\n","properties":{"channel":{"type":"string","description":"The messaging channel to use.\n\n| Value | Description |\n|-------|-------------|\n| `Sms` | SMS (also automatically routes to Pager or Voice for landline numbers if configured) |\n| `Whatsapp` | WhatsApp Business messaging |\n| `Rcs` | Rich Communication Services |\n","enum":["Sms","Whatsapp","Rcs"]},"from":{"type":"string","description":"Sender address.\n\n- **SMS:** Up to 16 numeric characters or up to 11 alphanumeric characters\n  (ASCII 32–126). Test sender values carefully — not all providers accept all\n  alphanumeric characters. Free accounts may only use the registered mobile number.\n- **WhatsApp:** Phone number of the registered WhatsApp Business Account in\n  international format (e.g. `0041769999999`). Contact eCall support to set up.\n- **RCS:** Your RCS sender ID as assigned by the provider. Contact eCall support\n  to register and obtain the sender ID.\n"},"to":{"type":["string","null"],"description":"Single recipient address in international format (e.g. `0041781234567` or\n`+41781234567`). Mutually exclusive with `toList`.\n"},"toList":{"type":["array","null"],"description":"List of recipients. Mutually exclusive with `to`. Returns a `messageIdList`\nin the response.\n","items":{"oneOf":[{"$ref":"#/components/schemas/ToAddressNumber"},{"$ref":"#/components/schemas/ToAddressPerson"},{"$ref":"#/components/schemas/ToAddressGroup"}]}},"sendDate":{"type":["string","null"],"description":"Scheduled send time in ISO 8601 format. If omitted, the message is sent immediately.\n"},"content":{"description":"Message content. For SMS, WhatsApp, and RCS, use `TextContent`.","oneOf":[{"$ref":"#/components/schemas/TextContent"},{"$ref":"#/components/schemas/ImageContent"},{"$ref":"#/components/schemas/DocumentContent"},{"$ref":"#/components/schemas/AudioContent"},{"$ref":"#/components/schemas/VideoContent"},{"$ref":"#/components/schemas/LocationContent"},{"$ref":"#/components/schemas/ContactContent"},{"$ref":"#/components/schemas/InteractiveContent"},{"$ref":"#/components/schemas/InteractiveReplyContent"},{"$ref":"#/components/schemas/TemplateContent"},{"$ref":"#/components/schemas/StickerContent"},{"$ref":"#/components/schemas/MediaContent"}]},"notification":{"$ref":"#/components/schemas/Notification"}},"additionalProperties":false},"ToAddressNumber":{"required":["address"],"type":"object","description":"A recipient identified by mobile number in international format.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format, e.g. `0041781234567` or `+41781234567`."}},"additionalProperties":false},"ToAddress":{"required":["type"],"type":"object","description":"Base type for a recipient address in a `toList`.","properties":{"type":{"$ref":"#/components/schemas/ToAddressType"}},"additionalProperties":false},"ToAddressType":{"type":"string","description":"Type of recipient address entry.","enum":["Number","Person","Group"]},"ToAddressPerson":{"required":["address"],"type":"object","description":"A recipient identified by name as stored in the eCall address book.\nFormat: `[Lastname] [Firstname]` (without brackets).\n","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Name from eCall address book. Format: Lastname Firstname."}},"additionalProperties":false},"ToAddressGroup":{"required":["address"],"type":"object","description":"A recipient group defined in the eCall address book.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Group name as defined in the eCall address book."}},"additionalProperties":false},"TextContent":{"required":["text"],"type":"object","description":"Plain text content. The primary content type for SMS and RCS.\n\nFor SMS, the maximum length is determined by account settings (max. 10 pages / 1530 chars\nGSM). Text exceeding the limit is truncated. Use `options.pageLimit` to restrict to fewer\npages, or `options.smsType: Flash` to send a flash SMS.\n","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"text":{"type":"string","minLength":1,"description":"The message text. UTF-8 encoded."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]},"ImageContent":{"type":"object","description":"Image message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional image caption."}},"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"DocumentContent":{"type":"object","description":"Document/file message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Currently not supported."},"filename":{"type":["string","null"],"description":"Display filename for the document."}},"additionalProperties":false},"AudioContent":{"type":"object","description":"Audio message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"VideoContent":{"type":"object","description":"Video message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional video caption."}},"additionalProperties":false},"LocationContent":{"type":"object","description":"Geographic location message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"longitude":{"type":"number","format":"double","description":"Longitude coordinate."},"latitude":{"type":"number","format":"double","description":"Latitude coordinate."},"name":{"type":["string","null"],"description":"Optional location name."},"address":{"type":["string","null"],"description":"Optional address text."}},"additionalProperties":false},"ContactContent":{"type":"object","description":"vCard contact message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"contacts":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ContactData"}}},"additionalProperties":false},"ContactData":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/NameData"},"birthDay":{"type":["string","null"],"description":"Birthday in `YYYY-MM-DD` format."},"organization":{"$ref":"#/components/schemas/OrganizationData"},"addresses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AddressData"}},"phones":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PhoneData"}},"urls":{"type":["array","null"],"items":{"$ref":"#/components/schemas/UrlData"}}},"additionalProperties":false},"NameData":{"required":["formattedName"],"type":"object","properties":{"formattedName":{"type":"string","minLength":1},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"middleName":{"type":["string","null"]},"suffix":{"type":["string","null"]},"prefix":{"type":["string","null"]}},"additionalProperties":false},"OrganizationData":{"type":"object","properties":{"company":{"type":["string","null"]},"department":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"AddressData":{"type":"object","properties":{"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"country":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"PhoneData":{"type":"object","properties":{"phone":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"UrlData":{"type":"object","properties":{"url":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"InteractiveContent":{"required":["action"],"type":"object","description":"Interactive message with buttons or a list (e.g. for WhatsApp/RCS).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"header":{"oneOf":[{"$ref":"#/components/schemas/InteractiveTextHeader"},{"$ref":"#/components/schemas/InteractiveImageHeader"},{"$ref":"#/components/schemas/InteractiveVideoHeader"},{"$ref":"#/components/schemas/InteractiveDocumentHeader"},{"type":"null"}]},"body":{"$ref":"#/components/schemas/InteractiveBody"},"footer":{"$ref":"#/components/schemas/InteractiveFooter"},"action":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonAction"},{"$ref":"#/components/schemas/InteractiveListAction"}]}},"additionalProperties":false},"InteractiveTextHeader":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Header text. Supports emojis but not markdown."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]},"InteractiveImageHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveVideoHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveDocumentHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveBody":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":1024,"description":"Body text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveFooter":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Footer text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveButtonAction":{"required":["buttons"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"buttons":{"type":"array","minItems":1,"maxItems":3,"items":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonActionReplyButton"}]}}},"additionalProperties":false},"InteractiveAction":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveActionType"}},"additionalProperties":false},"InteractiveActionType":{"type":"string","enum":["Button","List"]},"InteractiveButtonActionReplyButton":{"required":["id","title"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveButtonActionButton"}],"properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Unique button ID returned in the webhook when clicked."},"title":{"type":"string","minLength":1,"maxLength":20,"description":"Button label text. No emojis or markdown."}},"additionalProperties":false},"InteractiveButtonActionButton":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveButtonActionButtonType"}},"additionalProperties":false},"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]},"InteractiveListAction":{"required":["button","sections"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"button":{"type":"string","minLength":1,"maxLength":20,"description":"Button label. No emojis or markdown."},"sections":{"type":"array","minItems":1,"maxItems":10,"description":"Max. 10 rows across all sections.","items":{"$ref":"#/components/schemas/InteractiveListActionSection"}}},"additionalProperties":false},"InteractiveListActionSection":{"required":["rows"],"type":"object","properties":{"title":{"type":["string","null"],"minLength":1,"maxLength":24,"description":"Required if the message has more than one section."},"rows":{"type":"array","minItems":1,"maxItems":10,"items":{"$ref":"#/components/schemas/InteractiveListActionRow"}}},"additionalProperties":false},"InteractiveListActionRow":{"required":["id","title"],"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":["string","null"],"minLength":1,"maxLength":72}},"additionalProperties":false},"InteractiveReplyContent":{"type":"object","description":"Content received when a user interacts with an interactive message.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"reply":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonReply"},{"$ref":"#/components/schemas/InteractiveListReply"},{"type":"null"}]}},"additionalProperties":false},"InteractiveButtonReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"InteractiveReplyContentReply":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveReplyType"}},"additionalProperties":false},"InteractiveReplyType":{"type":"string","enum":["Button","List"]},"InteractiveListReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]}},"additionalProperties":false},"TemplateContent":{"required":["namespace","name","language"],"type":"object","description":"Pre-approved message template (e.g. for WhatsApp Business).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"namespace":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"language":{"$ref":"#/components/schemas/TemplateLanguage"},"components":{"type":["array","null"],"items":{"oneOf":[{"$ref":"#/components/schemas/TemplateBodyComponent"},{"$ref":"#/components/schemas/TemplateButtonComponent"},{"$ref":"#/components/schemas/TemplateHeaderComponent"},{"$ref":"#/components/schemas/TemplateQuickReplyButtonComponent"},{"$ref":"#/components/schemas/TemplateUrlButtonComponent"}]}}},"additionalProperties":false},"TemplateLanguage":{"required":["code"],"type":"object","properties":{"policy":{"$ref":"#/components/schemas/TemplateLanguagePolicy"},"code":{"$ref":"#/components/schemas/TemplateLanguageCode"}},"additionalProperties":false},"TemplateLanguagePolicy":{"type":"string","enum":["Deterministic"]},"TemplateLanguageCode":{"type":"string","description":"BCP 47 language code for the template.","enum":["af","sq","ar","az","bn","bg","ca","zh_CN","zh_HK","zh_TW","hr","cs","da","nl","en","en_GB","en_US","et","fil","fi","fr","ka","de","el","gu","ha","he","hi","hu","id","ga","it","ja","kn","kk","rw_RW","ko","ky_KG","lo","lv","lt","mk","ms","ml","mr","nb","fa","pl","pt_BR","pt_PT","pa","ro","ru","sr","sk","sl","es","es_AR","es_ES","es_MX","sw","sv","ta","te","th","tr","uk","ur","uz","vi","zu"]},"TemplateBodyComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateButtonComponent":{"required":["index"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"properties":{"index":{"type":"integer","format":"int32"}},"additionalProperties":false},"TemplateHeaderComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateQuickReplyButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"TemplateUrlButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"StickerContent":{"type":"object","description":"Sticker message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"Notification":{"required":["addresses"],"type":"object","description":"Configures push notifications for delivery status updates. eCall will call the\nspecified addresses when the `forEvent` condition is met.\n","properties":{"forEvent":{"type":["string","null"],"description":"Specifies which events trigger a notification.\n\n| Value | Description |\n|-------|-------------|\n| `SuccessOnly` | **(Default)** Only when delivery is confirmed by the device. |\n| `FinalOnly` | When delivery is confirmed **or** failed (any final status). |\n| `All` | Same as `FinalOnly`, plus when the job is delayed by the provider. |\n| `ErrorOnly` | Only when sending failed. |\n","enum":["SuccessOnly","FinalOnly","All","ErrorOnly"],"default":"SuccessOnly"},"addresses":{"type":"array","minItems":1,"description":"List of notification addresses. Max. total combined length: **200 characters**.\nValidation fails at the first invalid address.\n","items":{"oneOf":[{"$ref":"#/components/schemas/EmailNotificationAddress"},{"$ref":"#/components/schemas/SmsNotificationAddress"},{"$ref":"#/components/schemas/UrlNotificationAddress"}]}}},"additionalProperties":false},"EmailNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by email.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Email address."}},"additionalProperties":false},"NotificationAddress":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationAddressType"}},"additionalProperties":false},"NotificationAddressType":{"type":"string","description":"Type of notification address:\n- `Email` – eCall sends an email to the address.\n- `Sms` – eCall sends an SMS to the number.\n- `Url` – eCall makes an HTTP GET request to the URL with status data in the query string.\n- `UrlPost` – eCall makes an HTTP POST request to the URL with status data as JSON.\n","enum":["Sms","Email","Url","UrlPost"]},"SmsNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by SMS.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format."}},"additionalProperties":false},"UrlNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered via HTTP. Use type `Url` for GET requests or `UrlPost`\nfor POST requests (JSON body).\n","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"The URL eCall will call."}},"additionalProperties":false}}}}
```

## The MessageListRequest object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageListRequest":{"required":["messages"],"type":"object","description":"Request body for sending multiple messages in a single call.","properties":{"messages":{"type":"array","description":"List of message objects. Each uses the same fields as a single `MessageRequest`\n(`channel`, `from`, `to`/`toList`, `content`). The `notification` field is\nspecified once at the list level instead.\n","items":{"$ref":"#/components/schemas/Message"}},"notification":{"$ref":"#/components/schemas/Notification"}},"additionalProperties":false},"Message":{"required":["channel","from","content"],"type":"object","description":"A single message object within a message list request.","properties":{"channel":{"type":"string","description":"Messaging channel (`Sms`, `Whatsapp`, `Rcs`).","enum":["Sms","Whatsapp","Rcs"]},"from":{"type":"string","description":"Sender address (see `MessageRequest.from`)."},"to":{"type":["string","null"],"description":"Single recipient in international format."},"toList":{"type":["array","null"],"description":"List of recipients. Mutually exclusive with `to`.","items":{"oneOf":[{"$ref":"#/components/schemas/ToAddressGroup"},{"$ref":"#/components/schemas/ToAddressNumber"},{"$ref":"#/components/schemas/ToAddressPerson"}]}},"sendDate":{"type":["string","null"],"description":"Scheduled send time (ISO 8601)."},"content":{"description":"Message content.","oneOf":[{"$ref":"#/components/schemas/TextContent"},{"$ref":"#/components/schemas/ImageContent"},{"$ref":"#/components/schemas/DocumentContent"},{"$ref":"#/components/schemas/AudioContent"},{"$ref":"#/components/schemas/VideoContent"},{"$ref":"#/components/schemas/LocationContent"},{"$ref":"#/components/schemas/ContactContent"},{"$ref":"#/components/schemas/InteractiveContent"},{"$ref":"#/components/schemas/InteractiveReplyContent"},{"$ref":"#/components/schemas/TemplateContent"},{"$ref":"#/components/schemas/StickerContent"},{"$ref":"#/components/schemas/MediaContent"}]}},"additionalProperties":false},"ToAddressGroup":{"required":["address"],"type":"object","description":"A recipient group defined in the eCall address book.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Group name as defined in the eCall address book."}},"additionalProperties":false},"ToAddress":{"required":["type"],"type":"object","description":"Base type for a recipient address in a `toList`.","properties":{"type":{"$ref":"#/components/schemas/ToAddressType"}},"additionalProperties":false},"ToAddressType":{"type":"string","description":"Type of recipient address entry.","enum":["Number","Person","Group"]},"ToAddressNumber":{"required":["address"],"type":"object","description":"A recipient identified by mobile number in international format.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format, e.g. `0041781234567` or `+41781234567`."}},"additionalProperties":false},"ToAddressPerson":{"required":["address"],"type":"object","description":"A recipient identified by name as stored in the eCall address book.\nFormat: `[Lastname] [Firstname]` (without brackets).\n","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Name from eCall address book. Format: Lastname Firstname."}},"additionalProperties":false},"TextContent":{"required":["text"],"type":"object","description":"Plain text content. The primary content type for SMS and RCS.\n\nFor SMS, the maximum length is determined by account settings (max. 10 pages / 1530 chars\nGSM). Text exceeding the limit is truncated. Use `options.pageLimit` to restrict to fewer\npages, or `options.smsType: Flash` to send a flash SMS.\n","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"text":{"type":"string","minLength":1,"description":"The message text. UTF-8 encoded."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]},"ImageContent":{"type":"object","description":"Image message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional image caption."}},"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"DocumentContent":{"type":"object","description":"Document/file message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Currently not supported."},"filename":{"type":["string","null"],"description":"Display filename for the document."}},"additionalProperties":false},"AudioContent":{"type":"object","description":"Audio message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"VideoContent":{"type":"object","description":"Video message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional video caption."}},"additionalProperties":false},"LocationContent":{"type":"object","description":"Geographic location message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"longitude":{"type":"number","format":"double","description":"Longitude coordinate."},"latitude":{"type":"number","format":"double","description":"Latitude coordinate."},"name":{"type":["string","null"],"description":"Optional location name."},"address":{"type":["string","null"],"description":"Optional address text."}},"additionalProperties":false},"ContactContent":{"type":"object","description":"vCard contact message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"contacts":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ContactData"}}},"additionalProperties":false},"ContactData":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/NameData"},"birthDay":{"type":["string","null"],"description":"Birthday in `YYYY-MM-DD` format."},"organization":{"$ref":"#/components/schemas/OrganizationData"},"addresses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AddressData"}},"phones":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PhoneData"}},"urls":{"type":["array","null"],"items":{"$ref":"#/components/schemas/UrlData"}}},"additionalProperties":false},"NameData":{"required":["formattedName"],"type":"object","properties":{"formattedName":{"type":"string","minLength":1},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"middleName":{"type":["string","null"]},"suffix":{"type":["string","null"]},"prefix":{"type":["string","null"]}},"additionalProperties":false},"OrganizationData":{"type":"object","properties":{"company":{"type":["string","null"]},"department":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"AddressData":{"type":"object","properties":{"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"country":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"PhoneData":{"type":"object","properties":{"phone":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"UrlData":{"type":"object","properties":{"url":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"InteractiveContent":{"required":["action"],"type":"object","description":"Interactive message with buttons or a list (e.g. for WhatsApp/RCS).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"header":{"oneOf":[{"$ref":"#/components/schemas/InteractiveTextHeader"},{"$ref":"#/components/schemas/InteractiveImageHeader"},{"$ref":"#/components/schemas/InteractiveVideoHeader"},{"$ref":"#/components/schemas/InteractiveDocumentHeader"},{"type":"null"}]},"body":{"$ref":"#/components/schemas/InteractiveBody"},"footer":{"$ref":"#/components/schemas/InteractiveFooter"},"action":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonAction"},{"$ref":"#/components/schemas/InteractiveListAction"}]}},"additionalProperties":false},"InteractiveTextHeader":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Header text. Supports emojis but not markdown."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]},"InteractiveImageHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveVideoHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveDocumentHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveBody":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":1024,"description":"Body text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveFooter":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Footer text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveButtonAction":{"required":["buttons"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"buttons":{"type":"array","minItems":1,"maxItems":3,"items":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonActionReplyButton"}]}}},"additionalProperties":false},"InteractiveAction":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveActionType"}},"additionalProperties":false},"InteractiveActionType":{"type":"string","enum":["Button","List"]},"InteractiveButtonActionReplyButton":{"required":["id","title"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveButtonActionButton"}],"properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Unique button ID returned in the webhook when clicked."},"title":{"type":"string","minLength":1,"maxLength":20,"description":"Button label text. No emojis or markdown."}},"additionalProperties":false},"InteractiveButtonActionButton":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveButtonActionButtonType"}},"additionalProperties":false},"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]},"InteractiveListAction":{"required":["button","sections"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"button":{"type":"string","minLength":1,"maxLength":20,"description":"Button label. No emojis or markdown."},"sections":{"type":"array","minItems":1,"maxItems":10,"description":"Max. 10 rows across all sections.","items":{"$ref":"#/components/schemas/InteractiveListActionSection"}}},"additionalProperties":false},"InteractiveListActionSection":{"required":["rows"],"type":"object","properties":{"title":{"type":["string","null"],"minLength":1,"maxLength":24,"description":"Required if the message has more than one section."},"rows":{"type":"array","minItems":1,"maxItems":10,"items":{"$ref":"#/components/schemas/InteractiveListActionRow"}}},"additionalProperties":false},"InteractiveListActionRow":{"required":["id","title"],"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":["string","null"],"minLength":1,"maxLength":72}},"additionalProperties":false},"InteractiveReplyContent":{"type":"object","description":"Content received when a user interacts with an interactive message.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"reply":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonReply"},{"$ref":"#/components/schemas/InteractiveListReply"},{"type":"null"}]}},"additionalProperties":false},"InteractiveButtonReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"InteractiveReplyContentReply":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveReplyType"}},"additionalProperties":false},"InteractiveReplyType":{"type":"string","enum":["Button","List"]},"InteractiveListReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]}},"additionalProperties":false},"TemplateContent":{"required":["namespace","name","language"],"type":"object","description":"Pre-approved message template (e.g. for WhatsApp Business).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"namespace":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"language":{"$ref":"#/components/schemas/TemplateLanguage"},"components":{"type":["array","null"],"items":{"oneOf":[{"$ref":"#/components/schemas/TemplateBodyComponent"},{"$ref":"#/components/schemas/TemplateButtonComponent"},{"$ref":"#/components/schemas/TemplateHeaderComponent"},{"$ref":"#/components/schemas/TemplateQuickReplyButtonComponent"},{"$ref":"#/components/schemas/TemplateUrlButtonComponent"}]}}},"additionalProperties":false},"TemplateLanguage":{"required":["code"],"type":"object","properties":{"policy":{"$ref":"#/components/schemas/TemplateLanguagePolicy"},"code":{"$ref":"#/components/schemas/TemplateLanguageCode"}},"additionalProperties":false},"TemplateLanguagePolicy":{"type":"string","enum":["Deterministic"]},"TemplateLanguageCode":{"type":"string","description":"BCP 47 language code for the template.","enum":["af","sq","ar","az","bn","bg","ca","zh_CN","zh_HK","zh_TW","hr","cs","da","nl","en","en_GB","en_US","et","fil","fi","fr","ka","de","el","gu","ha","he","hi","hu","id","ga","it","ja","kn","kk","rw_RW","ko","ky_KG","lo","lv","lt","mk","ms","ml","mr","nb","fa","pl","pt_BR","pt_PT","pa","ro","ru","sr","sk","sl","es","es_AR","es_ES","es_MX","sw","sv","ta","te","th","tr","uk","ur","uz","vi","zu"]},"TemplateBodyComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateButtonComponent":{"required":["index"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"properties":{"index":{"type":"integer","format":"int32"}},"additionalProperties":false},"TemplateHeaderComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateQuickReplyButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"TemplateUrlButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"StickerContent":{"type":"object","description":"Sticker message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"Notification":{"required":["addresses"],"type":"object","description":"Configures push notifications for delivery status updates. eCall will call the\nspecified addresses when the `forEvent` condition is met.\n","properties":{"forEvent":{"type":["string","null"],"description":"Specifies which events trigger a notification.\n\n| Value | Description |\n|-------|-------------|\n| `SuccessOnly` | **(Default)** Only when delivery is confirmed by the device. |\n| `FinalOnly` | When delivery is confirmed **or** failed (any final status). |\n| `All` | Same as `FinalOnly`, plus when the job is delayed by the provider. |\n| `ErrorOnly` | Only when sending failed. |\n","enum":["SuccessOnly","FinalOnly","All","ErrorOnly"],"default":"SuccessOnly"},"addresses":{"type":"array","minItems":1,"description":"List of notification addresses. Max. total combined length: **200 characters**.\nValidation fails at the first invalid address.\n","items":{"oneOf":[{"$ref":"#/components/schemas/EmailNotificationAddress"},{"$ref":"#/components/schemas/SmsNotificationAddress"},{"$ref":"#/components/schemas/UrlNotificationAddress"}]}}},"additionalProperties":false},"EmailNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by email.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Email address."}},"additionalProperties":false},"NotificationAddress":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationAddressType"}},"additionalProperties":false},"NotificationAddressType":{"type":"string","description":"Type of notification address:\n- `Email` – eCall sends an email to the address.\n- `Sms` – eCall sends an SMS to the number.\n- `Url` – eCall makes an HTTP GET request to the URL with status data in the query string.\n- `UrlPost` – eCall makes an HTTP POST request to the URL with status data as JSON.\n","enum":["Sms","Email","Url","UrlPost"]},"SmsNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by SMS.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format."}},"additionalProperties":false},"UrlNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered via HTTP. Use type `Url` for GET requests or `UrlPost`\nfor POST requests (JSON body).\n","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"The URL eCall will call."}},"additionalProperties":false}}}}
```

## The Message object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"Message":{"required":["channel","from","content"],"type":"object","description":"A single message object within a message list request.","properties":{"channel":{"type":"string","description":"Messaging channel (`Sms`, `Whatsapp`, `Rcs`).","enum":["Sms","Whatsapp","Rcs"]},"from":{"type":"string","description":"Sender address (see `MessageRequest.from`)."},"to":{"type":["string","null"],"description":"Single recipient in international format."},"toList":{"type":["array","null"],"description":"List of recipients. Mutually exclusive with `to`.","items":{"oneOf":[{"$ref":"#/components/schemas/ToAddressGroup"},{"$ref":"#/components/schemas/ToAddressNumber"},{"$ref":"#/components/schemas/ToAddressPerson"}]}},"sendDate":{"type":["string","null"],"description":"Scheduled send time (ISO 8601)."},"content":{"description":"Message content.","oneOf":[{"$ref":"#/components/schemas/TextContent"},{"$ref":"#/components/schemas/ImageContent"},{"$ref":"#/components/schemas/DocumentContent"},{"$ref":"#/components/schemas/AudioContent"},{"$ref":"#/components/schemas/VideoContent"},{"$ref":"#/components/schemas/LocationContent"},{"$ref":"#/components/schemas/ContactContent"},{"$ref":"#/components/schemas/InteractiveContent"},{"$ref":"#/components/schemas/InteractiveReplyContent"},{"$ref":"#/components/schemas/TemplateContent"},{"$ref":"#/components/schemas/StickerContent"},{"$ref":"#/components/schemas/MediaContent"}]}},"additionalProperties":false},"ToAddressGroup":{"required":["address"],"type":"object","description":"A recipient group defined in the eCall address book.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Group name as defined in the eCall address book."}},"additionalProperties":false},"ToAddress":{"required":["type"],"type":"object","description":"Base type for a recipient address in a `toList`.","properties":{"type":{"$ref":"#/components/schemas/ToAddressType"}},"additionalProperties":false},"ToAddressType":{"type":"string","description":"Type of recipient address entry.","enum":["Number","Person","Group"]},"ToAddressNumber":{"required":["address"],"type":"object","description":"A recipient identified by mobile number in international format.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format, e.g. `0041781234567` or `+41781234567`."}},"additionalProperties":false},"ToAddressPerson":{"required":["address"],"type":"object","description":"A recipient identified by name as stored in the eCall address book.\nFormat: `[Lastname] [Firstname]` (without brackets).\n","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Name from eCall address book. Format: Lastname Firstname."}},"additionalProperties":false},"TextContent":{"required":["text"],"type":"object","description":"Plain text content. The primary content type for SMS and RCS.\n\nFor SMS, the maximum length is determined by account settings (max. 10 pages / 1530 chars\nGSM). Text exceeding the limit is truncated. Use `options.pageLimit` to restrict to fewer\npages, or `options.smsType: Flash` to send a flash SMS.\n","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"text":{"type":"string","minLength":1,"description":"The message text. UTF-8 encoded."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]},"ImageContent":{"type":"object","description":"Image message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional image caption."}},"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"DocumentContent":{"type":"object","description":"Document/file message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Currently not supported."},"filename":{"type":["string","null"],"description":"Display filename for the document."}},"additionalProperties":false},"AudioContent":{"type":"object","description":"Audio message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"VideoContent":{"type":"object","description":"Video message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional video caption."}},"additionalProperties":false},"LocationContent":{"type":"object","description":"Geographic location message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"longitude":{"type":"number","format":"double","description":"Longitude coordinate."},"latitude":{"type":"number","format":"double","description":"Latitude coordinate."},"name":{"type":["string","null"],"description":"Optional location name."},"address":{"type":["string","null"],"description":"Optional address text."}},"additionalProperties":false},"ContactContent":{"type":"object","description":"vCard contact message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"contacts":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ContactData"}}},"additionalProperties":false},"ContactData":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/NameData"},"birthDay":{"type":["string","null"],"description":"Birthday in `YYYY-MM-DD` format."},"organization":{"$ref":"#/components/schemas/OrganizationData"},"addresses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AddressData"}},"phones":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PhoneData"}},"urls":{"type":["array","null"],"items":{"$ref":"#/components/schemas/UrlData"}}},"additionalProperties":false},"NameData":{"required":["formattedName"],"type":"object","properties":{"formattedName":{"type":"string","minLength":1},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"middleName":{"type":["string","null"]},"suffix":{"type":["string","null"]},"prefix":{"type":["string","null"]}},"additionalProperties":false},"OrganizationData":{"type":"object","properties":{"company":{"type":["string","null"]},"department":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"AddressData":{"type":"object","properties":{"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"country":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"PhoneData":{"type":"object","properties":{"phone":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"UrlData":{"type":"object","properties":{"url":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"InteractiveContent":{"required":["action"],"type":"object","description":"Interactive message with buttons or a list (e.g. for WhatsApp/RCS).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"header":{"oneOf":[{"$ref":"#/components/schemas/InteractiveTextHeader"},{"$ref":"#/components/schemas/InteractiveImageHeader"},{"$ref":"#/components/schemas/InteractiveVideoHeader"},{"$ref":"#/components/schemas/InteractiveDocumentHeader"},{"type":"null"}]},"body":{"$ref":"#/components/schemas/InteractiveBody"},"footer":{"$ref":"#/components/schemas/InteractiveFooter"},"action":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonAction"},{"$ref":"#/components/schemas/InteractiveListAction"}]}},"additionalProperties":false},"InteractiveTextHeader":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Header text. Supports emojis but not markdown."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]},"InteractiveImageHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveVideoHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveDocumentHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveBody":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":1024,"description":"Body text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveFooter":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Footer text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveButtonAction":{"required":["buttons"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"buttons":{"type":"array","minItems":1,"maxItems":3,"items":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonActionReplyButton"}]}}},"additionalProperties":false},"InteractiveAction":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveActionType"}},"additionalProperties":false},"InteractiveActionType":{"type":"string","enum":["Button","List"]},"InteractiveButtonActionReplyButton":{"required":["id","title"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveButtonActionButton"}],"properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Unique button ID returned in the webhook when clicked."},"title":{"type":"string","minLength":1,"maxLength":20,"description":"Button label text. No emojis or markdown."}},"additionalProperties":false},"InteractiveButtonActionButton":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveButtonActionButtonType"}},"additionalProperties":false},"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]},"InteractiveListAction":{"required":["button","sections"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"button":{"type":"string","minLength":1,"maxLength":20,"description":"Button label. No emojis or markdown."},"sections":{"type":"array","minItems":1,"maxItems":10,"description":"Max. 10 rows across all sections.","items":{"$ref":"#/components/schemas/InteractiveListActionSection"}}},"additionalProperties":false},"InteractiveListActionSection":{"required":["rows"],"type":"object","properties":{"title":{"type":["string","null"],"minLength":1,"maxLength":24,"description":"Required if the message has more than one section."},"rows":{"type":"array","minItems":1,"maxItems":10,"items":{"$ref":"#/components/schemas/InteractiveListActionRow"}}},"additionalProperties":false},"InteractiveListActionRow":{"required":["id","title"],"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":["string","null"],"minLength":1,"maxLength":72}},"additionalProperties":false},"InteractiveReplyContent":{"type":"object","description":"Content received when a user interacts with an interactive message.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"reply":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonReply"},{"$ref":"#/components/schemas/InteractiveListReply"},{"type":"null"}]}},"additionalProperties":false},"InteractiveButtonReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"InteractiveReplyContentReply":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveReplyType"}},"additionalProperties":false},"InteractiveReplyType":{"type":"string","enum":["Button","List"]},"InteractiveListReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]}},"additionalProperties":false},"TemplateContent":{"required":["namespace","name","language"],"type":"object","description":"Pre-approved message template (e.g. for WhatsApp Business).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"namespace":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"language":{"$ref":"#/components/schemas/TemplateLanguage"},"components":{"type":["array","null"],"items":{"oneOf":[{"$ref":"#/components/schemas/TemplateBodyComponent"},{"$ref":"#/components/schemas/TemplateButtonComponent"},{"$ref":"#/components/schemas/TemplateHeaderComponent"},{"$ref":"#/components/schemas/TemplateQuickReplyButtonComponent"},{"$ref":"#/components/schemas/TemplateUrlButtonComponent"}]}}},"additionalProperties":false},"TemplateLanguage":{"required":["code"],"type":"object","properties":{"policy":{"$ref":"#/components/schemas/TemplateLanguagePolicy"},"code":{"$ref":"#/components/schemas/TemplateLanguageCode"}},"additionalProperties":false},"TemplateLanguagePolicy":{"type":"string","enum":["Deterministic"]},"TemplateLanguageCode":{"type":"string","description":"BCP 47 language code for the template.","enum":["af","sq","ar","az","bn","bg","ca","zh_CN","zh_HK","zh_TW","hr","cs","da","nl","en","en_GB","en_US","et","fil","fi","fr","ka","de","el","gu","ha","he","hi","hu","id","ga","it","ja","kn","kk","rw_RW","ko","ky_KG","lo","lv","lt","mk","ms","ml","mr","nb","fa","pl","pt_BR","pt_PT","pa","ro","ru","sr","sk","sl","es","es_AR","es_ES","es_MX","sw","sv","ta","te","th","tr","uk","ur","uz","vi","zu"]},"TemplateBodyComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateButtonComponent":{"required":["index"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"properties":{"index":{"type":"integer","format":"int32"}},"additionalProperties":false},"TemplateHeaderComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateQuickReplyButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"TemplateUrlButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"StickerContent":{"type":"object","description":"Sticker message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false}}}}
```

## The MessageResult object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageResult":{"type":"object","description":"Response from a successful single message send request.\n\n- When `to` was used: only `messageId` is set.\n- When `toList` was used: `messageIdList` is set; `messageId` is empty.\n","properties":{"messageId":{"type":["string","null"],"description":"Unique identifier of the sent message. Use this for status queries."},"messageIdList":{"type":["array","null"],"description":"List of message IDs per recipient (only set when `toList` was used).","items":{"$ref":"#/components/schemas/MessageIdAddressPair"}},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp when the response was returned."}},"additionalProperties":false},"MessageIdAddressPair":{"type":"object","description":"Mapping of a message ID to its recipient address.","properties":{"messageId":{"type":["string","null"]},"address":{"type":["string","null"]}},"additionalProperties":false}}}}
```

## The MessageListResult object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageListResult":{"type":"object","description":"Response from a successful message list send request.","properties":{"results":{"type":["array","null"],"description":"One result object per message in the request. Accepted messages have a `messageId`;\nrejected messages have an `error` instead.\n","items":{"$ref":"#/components/schemas/MessageListResultSingle"}},"messageListId":{"type":["string","null"],"description":"Unique identifier of the message list. Use this for list status queries."},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp when the response was returned."}},"additionalProperties":false},"MessageListResultSingle":{"type":"object","description":"Individual result for one message within a list send request.","properties":{"messageId":{"type":["string","null"],"description":"Message ID assigned to this message. Only present if the message passed validation\nand was accepted.\n"},"address":{"type":["string","null"],"description":"Recipient address for this message."},"error":{"$ref":"#/components/schemas/Error"}},"additionalProperties":false},"Error":{"type":"object","description":"Error response returned for `4xx` and `5xx` HTTP status codes.","properties":{"errorCode":{"$ref":"#/components/schemas/ErrorCode"},"errorMessage":{"type":["string","null"],"description":"High-level human-readable description of the error."},"errorDetails":{"description":"Detailed breakdown of validation errors, if applicable.","oneOf":[{"$ref":"#/components/schemas/ParameterErrorDetails"},{"type":"null"}]}},"additionalProperties":false},"ErrorCode":{"type":"string","description":"Machine-readable error code indicating why the request failed.\n\n| Code | Description |\n|------|-------------|\n| `InvalidContent` | JSON validation failed — bad parameter value. Check `errorDetails`. |\n| `InsufficientPoints` | Account has insufficient points/credits to send this message. |\n| `TooManyMessagesSameReceiver` | Too many messages sent to the same recipient (anti-spam). |\n| `TooManyMessagesSameReceiverAndContent` | Too many identical messages to the same recipient. |\n| `RequestMissing` | Request body is missing or empty. |\n| `UnknownContentType` | The specified `content.type` is not recognised. |\n| `InvalidSenderAccount` | The sender address is not valid for this account. |\n| `CannotConvertMediaBody` | Media file could not be processed. |\n| `PointSubstractionError` | Error deducting points from account balance. |\n| `AdrCountryNotWhitelisted` | Recipient country is not whitelisted for this account. |\n| `AdrCountryWhitelistLimitExceeded` | Country whitelist limit exceeded. |\n","enum":["Error1","Error2","RequestMissing","CannotConvertMediaBody","UnknownContentType","InvalidSenderAccount","InvalidContent","InsufficientPoints","PointSubstractionError","TooManyMessagesSameReceiver","TooManyMessagesSameReceiverAndContent","AdrCountryNotWhitelisted","AdrCountryWhitelistLimitExceeded","AdrCountryWhitelistLimitReachedButNotBlockedCountries"]},"ParameterErrorDetails":{"type":"object","description":"Detailed error information for parameter validation failures.","allOf":[{"$ref":"#/components/schemas/ErrorDetails"}],"properties":{"errors":{"type":["array","null"],"description":"List of individual field validation errors.","items":{"$ref":"#/components/schemas/ParameterErrorDetailsEntry"}}},"additionalProperties":false},"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]},"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}}}}
```

## The MessageListResultSingle object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageListResultSingle":{"type":"object","description":"Individual result for one message within a list send request.","properties":{"messageId":{"type":["string","null"],"description":"Message ID assigned to this message. Only present if the message passed validation\nand was accepted.\n"},"address":{"type":["string","null"],"description":"Recipient address for this message."},"error":{"$ref":"#/components/schemas/Error"}},"additionalProperties":false},"Error":{"type":"object","description":"Error response returned for `4xx` and `5xx` HTTP status codes.","properties":{"errorCode":{"$ref":"#/components/schemas/ErrorCode"},"errorMessage":{"type":["string","null"],"description":"High-level human-readable description of the error."},"errorDetails":{"description":"Detailed breakdown of validation errors, if applicable.","oneOf":[{"$ref":"#/components/schemas/ParameterErrorDetails"},{"type":"null"}]}},"additionalProperties":false},"ErrorCode":{"type":"string","description":"Machine-readable error code indicating why the request failed.\n\n| Code | Description |\n|------|-------------|\n| `InvalidContent` | JSON validation failed — bad parameter value. Check `errorDetails`. |\n| `InsufficientPoints` | Account has insufficient points/credits to send this message. |\n| `TooManyMessagesSameReceiver` | Too many messages sent to the same recipient (anti-spam). |\n| `TooManyMessagesSameReceiverAndContent` | Too many identical messages to the same recipient. |\n| `RequestMissing` | Request body is missing or empty. |\n| `UnknownContentType` | The specified `content.type` is not recognised. |\n| `InvalidSenderAccount` | The sender address is not valid for this account. |\n| `CannotConvertMediaBody` | Media file could not be processed. |\n| `PointSubstractionError` | Error deducting points from account balance. |\n| `AdrCountryNotWhitelisted` | Recipient country is not whitelisted for this account. |\n| `AdrCountryWhitelistLimitExceeded` | Country whitelist limit exceeded. |\n","enum":["Error1","Error2","RequestMissing","CannotConvertMediaBody","UnknownContentType","InvalidSenderAccount","InvalidContent","InsufficientPoints","PointSubstractionError","TooManyMessagesSameReceiver","TooManyMessagesSameReceiverAndContent","AdrCountryNotWhitelisted","AdrCountryWhitelistLimitExceeded","AdrCountryWhitelistLimitReachedButNotBlockedCountries"]},"ParameterErrorDetails":{"type":"object","description":"Detailed error information for parameter validation failures.","allOf":[{"$ref":"#/components/schemas/ErrorDetails"}],"properties":{"errors":{"type":["array","null"],"description":"List of individual field validation errors.","items":{"$ref":"#/components/schemas/ParameterErrorDetailsEntry"}}},"additionalProperties":false},"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]},"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}}}}
```

## The MessageIdAddressPair object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageIdAddressPair":{"type":"object","description":"Mapping of a message ID to its recipient address.","properties":{"messageId":{"type":["string","null"]},"address":{"type":["string","null"]}},"additionalProperties":false}}}}
```

## The MessageStatusData object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageStatusData":{"type":"object","description":"Delivery status of a single message.","properties":{"channel":{"type":["string","null"],"description":"Channel over which the message was sent (`Sms`, `Whatsapp`, `Rcs`, `Voice`, `Pager`)."},"messageId":{"type":["string","null"],"description":"Unique identifier of the message."},"status":{"$ref":"#/components/schemas/MessageStatus"},"reasonCode":{"type":"integer","format":"int32","description":"Provider-level result code. `0` indicates success. See the table below for error codes.\n\n| Code | Description |\n|------|-------------|\n| `3020` | Timeout connecting to provider (pager) |\n| `5111` | Text too long (pager) |\n| `5112` | Invalid receiver number (pager) |\n| `5120` | Not a pager number |\n| `5121` | Invalid characters in receiver number (pager) |\n| `5155` | Too much traffic (pager) |\n| `5502` | Syntax error |\n| `5504` | Maximum messages for this address exceeded |\n| `5506` | Analog-to-digital converter invalid |\n| `5509` | Invalid receiver number |\n| `5510` | Too many messages for same receiver |\n| `5511` | Too many messages with same content for same receiver |\n| `5513` | Blacklisted (callback, address, or content) |\n| `5514` | Blocked by outbound filter rule |\n"},"reason":{"type":["string","null"],"description":"Human-readable provider result text."},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp of the latest status update."},"from":{"type":["string","null"],"description":"Sender address."},"to":{"type":["string","null"],"description":"Recipient address in international format."},"pageTotal":{"type":["integer","null"],"format":"int32","description":"SMS only: Total number of pages the message was split into."}},"additionalProperties":false},"MessageStatus":{"type":"string","description":"Delivery status of a message. Whether a status is **final** (no further updates expected)\ndepends on the channel:\n\n### SMS\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted to provider. |\n| `Sent` | ☐/☒ | Sent by provider. May become final after 4 days without a delivery report. |\n| `Delivered` | ☒ | Confirmed received by recipient device. |\n| `DeliveryFailed` | ☒ | Could not be delivered. |\n| `Failed` | ☒ | Sending failed. See `reason` for details. |\n\n### Pager\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☒ | Sent successfully. |\n| `Failed` | ☒ | Sending failed. |\n\n### Voice (auto-converted SMS to landline)\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☐ | Handed off to voice system. |\n| `Played` | ☐/☒ | Played on device. Final only if recipient hung up without acknowledging. |\n| `Played_with_receipt` | ☒ | Played and recipient confirmed. |\n| `Next_try_pending` | ☐ | No connection yet; retrying in 15 min. |\n| `Failed` | ☒ | Sending failed. |\n\n### WhatsApp\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted to provider. |\n| `Sent` | ☐ | Sent by provider. |\n| `Delivered` | ☐ | Received by device. |\n| `Read` | ☒ | Read by recipient. |\n| `Failed` | ☒ | Sending failed. |\n\n### RCS\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☐ | Sent by provider. |\n| `Delivered` | ☐ | Received by device. |\n| `Displayed` | ☒ | Displayed on device. |\n| `Rejected` | ☒ | Rejected by provider. |\n| `Expired` | ☒ | Validity period exceeded. |\n","enum":["Pending","Sent","Delivered","Read","Failed","Deleted","Transmitted","DeliveryFailed","Played","Played_with_feedback","Played_with_receipt","Next_try_pending","Displayed","Rejected","Expired"]}}}}
```

## The MessageListStatusData object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageListStatusData":{"type":"object","description":"Delivery statuses for a list of messages.","properties":{"states":{"type":["array","null"],"description":"List of status objects, one per accepted message.","items":{"$ref":"#/components/schemas/MessageStatusData"}},"messageListId":{"type":["string","null"],"description":"Unique identifier of the message list."},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp when the response was returned."}},"additionalProperties":false},"MessageStatusData":{"type":"object","description":"Delivery status of a single message.","properties":{"channel":{"type":["string","null"],"description":"Channel over which the message was sent (`Sms`, `Whatsapp`, `Rcs`, `Voice`, `Pager`)."},"messageId":{"type":["string","null"],"description":"Unique identifier of the message."},"status":{"$ref":"#/components/schemas/MessageStatus"},"reasonCode":{"type":"integer","format":"int32","description":"Provider-level result code. `0` indicates success. See the table below for error codes.\n\n| Code | Description |\n|------|-------------|\n| `3020` | Timeout connecting to provider (pager) |\n| `5111` | Text too long (pager) |\n| `5112` | Invalid receiver number (pager) |\n| `5120` | Not a pager number |\n| `5121` | Invalid characters in receiver number (pager) |\n| `5155` | Too much traffic (pager) |\n| `5502` | Syntax error |\n| `5504` | Maximum messages for this address exceeded |\n| `5506` | Analog-to-digital converter invalid |\n| `5509` | Invalid receiver number |\n| `5510` | Too many messages for same receiver |\n| `5511` | Too many messages with same content for same receiver |\n| `5513` | Blacklisted (callback, address, or content) |\n| `5514` | Blocked by outbound filter rule |\n"},"reason":{"type":["string","null"],"description":"Human-readable provider result text."},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp of the latest status update."},"from":{"type":["string","null"],"description":"Sender address."},"to":{"type":["string","null"],"description":"Recipient address in international format."},"pageTotal":{"type":["integer","null"],"format":"int32","description":"SMS only: Total number of pages the message was split into."}},"additionalProperties":false},"MessageStatus":{"type":"string","description":"Delivery status of a message. Whether a status is **final** (no further updates expected)\ndepends on the channel:\n\n### SMS\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted to provider. |\n| `Sent` | ☐/☒ | Sent by provider. May become final after 4 days without a delivery report. |\n| `Delivered` | ☒ | Confirmed received by recipient device. |\n| `DeliveryFailed` | ☒ | Could not be delivered. |\n| `Failed` | ☒ | Sending failed. See `reason` for details. |\n\n### Pager\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☒ | Sent successfully. |\n| `Failed` | ☒ | Sending failed. |\n\n### Voice (auto-converted SMS to landline)\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☐ | Handed off to voice system. |\n| `Played` | ☐/☒ | Played on device. Final only if recipient hung up without acknowledging. |\n| `Played_with_receipt` | ☒ | Played and recipient confirmed. |\n| `Next_try_pending` | ☐ | No connection yet; retrying in 15 min. |\n| `Failed` | ☒ | Sending failed. |\n\n### WhatsApp\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted to provider. |\n| `Sent` | ☐ | Sent by provider. |\n| `Delivered` | ☐ | Received by device. |\n| `Read` | ☒ | Read by recipient. |\n| `Failed` | ☒ | Sending failed. |\n\n### RCS\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☐ | Sent by provider. |\n| `Delivered` | ☐ | Received by device. |\n| `Displayed` | ☒ | Displayed on device. |\n| `Rejected` | ☒ | Rejected by provider. |\n| `Expired` | ☒ | Validity period exceeded. |\n","enum":["Pending","Sent","Delivered","Read","Failed","Deleted","Transmitted","DeliveryFailed","Played","Played_with_feedback","Played_with_receipt","Next_try_pending","Displayed","Rejected","Expired"]}}}}
```

## The MessageStatus object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageStatus":{"type":"string","description":"Delivery status of a message. Whether a status is **final** (no further updates expected)\ndepends on the channel:\n\n### SMS\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted to provider. |\n| `Sent` | ☐/☒ | Sent by provider. May become final after 4 days without a delivery report. |\n| `Delivered` | ☒ | Confirmed received by recipient device. |\n| `DeliveryFailed` | ☒ | Could not be delivered. |\n| `Failed` | ☒ | Sending failed. See `reason` for details. |\n\n### Pager\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☒ | Sent successfully. |\n| `Failed` | ☒ | Sending failed. |\n\n### Voice (auto-converted SMS to landline)\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☐ | Handed off to voice system. |\n| `Played` | ☐/☒ | Played on device. Final only if recipient hung up without acknowledging. |\n| `Played_with_receipt` | ☒ | Played and recipient confirmed. |\n| `Next_try_pending` | ☐ | No connection yet; retrying in 15 min. |\n| `Failed` | ☒ | Sending failed. |\n\n### WhatsApp\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted to provider. |\n| `Sent` | ☐ | Sent by provider. |\n| `Delivered` | ☐ | Received by device. |\n| `Read` | ☒ | Read by recipient. |\n| `Failed` | ☒ | Sending failed. |\n\n### RCS\n| Status | Final | Description |\n|--------|:-----:|-------------|\n| `Pending` | ☐ | Being transmitted. |\n| `Sent` | ☐ | Sent by provider. |\n| `Delivered` | ☐ | Received by device. |\n| `Displayed` | ☒ | Displayed on device. |\n| `Rejected` | ☒ | Rejected by provider. |\n| `Expired` | ☒ | Validity period exceeded. |\n","enum":["Pending","Sent","Delivered","Read","Failed","Deleted","Transmitted","DeliveryFailed","Played","Played_with_feedback","Played_with_receipt","Next_try_pending","Displayed","Rejected","Expired"]}}}}
```

## The ToAddress object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ToAddress":{"required":["type"],"type":"object","description":"Base type for a recipient address in a `toList`.","properties":{"type":{"$ref":"#/components/schemas/ToAddressType"}},"additionalProperties":false},"ToAddressType":{"type":"string","description":"Type of recipient address entry.","enum":["Number","Person","Group"]}}}}
```

## The ToAddressNumber object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ToAddressNumber":{"required":["address"],"type":"object","description":"A recipient identified by mobile number in international format.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format, e.g. `0041781234567` or `+41781234567`."}},"additionalProperties":false},"ToAddress":{"required":["type"],"type":"object","description":"Base type for a recipient address in a `toList`.","properties":{"type":{"$ref":"#/components/schemas/ToAddressType"}},"additionalProperties":false},"ToAddressType":{"type":"string","description":"Type of recipient address entry.","enum":["Number","Person","Group"]}}}}
```

## The ToAddressPerson object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ToAddressPerson":{"required":["address"],"type":"object","description":"A recipient identified by name as stored in the eCall address book.\nFormat: `[Lastname] [Firstname]` (without brackets).\n","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Name from eCall address book. Format: Lastname Firstname."}},"additionalProperties":false},"ToAddress":{"required":["type"],"type":"object","description":"Base type for a recipient address in a `toList`.","properties":{"type":{"$ref":"#/components/schemas/ToAddressType"}},"additionalProperties":false},"ToAddressType":{"type":"string","description":"Type of recipient address entry.","enum":["Number","Person","Group"]}}}}
```

## The ToAddressGroup object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ToAddressGroup":{"required":["address"],"type":"object","description":"A recipient group defined in the eCall address book.","allOf":[{"$ref":"#/components/schemas/ToAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Group name as defined in the eCall address book."}},"additionalProperties":false},"ToAddress":{"required":["type"],"type":"object","description":"Base type for a recipient address in a `toList`.","properties":{"type":{"$ref":"#/components/schemas/ToAddressType"}},"additionalProperties":false},"ToAddressType":{"type":"string","description":"Type of recipient address entry.","enum":["Number","Person","Group"]}}}}
```

## The ToAddressType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ToAddressType":{"type":"string","description":"Type of recipient address entry.","enum":["Number","Person","Group"]}}}}
```

## The Notification object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"Notification":{"required":["addresses"],"type":"object","description":"Configures push notifications for delivery status updates. eCall will call the\nspecified addresses when the `forEvent` condition is met.\n","properties":{"forEvent":{"type":["string","null"],"description":"Specifies which events trigger a notification.\n\n| Value | Description |\n|-------|-------------|\n| `SuccessOnly` | **(Default)** Only when delivery is confirmed by the device. |\n| `FinalOnly` | When delivery is confirmed **or** failed (any final status). |\n| `All` | Same as `FinalOnly`, plus when the job is delayed by the provider. |\n| `ErrorOnly` | Only when sending failed. |\n","enum":["SuccessOnly","FinalOnly","All","ErrorOnly"],"default":"SuccessOnly"},"addresses":{"type":"array","minItems":1,"description":"List of notification addresses. Max. total combined length: **200 characters**.\nValidation fails at the first invalid address.\n","items":{"oneOf":[{"$ref":"#/components/schemas/EmailNotificationAddress"},{"$ref":"#/components/schemas/SmsNotificationAddress"},{"$ref":"#/components/schemas/UrlNotificationAddress"}]}}},"additionalProperties":false},"EmailNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by email.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Email address."}},"additionalProperties":false},"NotificationAddress":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationAddressType"}},"additionalProperties":false},"NotificationAddressType":{"type":"string","description":"Type of notification address:\n- `Email` – eCall sends an email to the address.\n- `Sms` – eCall sends an SMS to the number.\n- `Url` – eCall makes an HTTP GET request to the URL with status data in the query string.\n- `UrlPost` – eCall makes an HTTP POST request to the URL with status data as JSON.\n","enum":["Sms","Email","Url","UrlPost"]},"SmsNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by SMS.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format."}},"additionalProperties":false},"UrlNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered via HTTP. Use type `Url` for GET requests or `UrlPost`\nfor POST requests (JSON body).\n","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"The URL eCall will call."}},"additionalProperties":false}}}}
```

## The NotificationAddress object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"NotificationAddress":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationAddressType"}},"additionalProperties":false},"NotificationAddressType":{"type":"string","description":"Type of notification address:\n- `Email` – eCall sends an email to the address.\n- `Sms` – eCall sends an SMS to the number.\n- `Url` – eCall makes an HTTP GET request to the URL with status data in the query string.\n- `UrlPost` – eCall makes an HTTP POST request to the URL with status data as JSON.\n","enum":["Sms","Email","Url","UrlPost"]}}}}
```

## The NotificationAddressType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"NotificationAddressType":{"type":"string","description":"Type of notification address:\n- `Email` – eCall sends an email to the address.\n- `Sms` – eCall sends an SMS to the number.\n- `Url` – eCall makes an HTTP GET request to the URL with status data in the query string.\n- `UrlPost` – eCall makes an HTTP POST request to the URL with status data as JSON.\n","enum":["Sms","Email","Url","UrlPost"]}}}}
```

## The EmailNotificationAddress object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"EmailNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by email.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Email address."}},"additionalProperties":false},"NotificationAddress":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationAddressType"}},"additionalProperties":false},"NotificationAddressType":{"type":"string","description":"Type of notification address:\n- `Email` – eCall sends an email to the address.\n- `Sms` – eCall sends an SMS to the number.\n- `Url` – eCall makes an HTTP GET request to the URL with status data in the query string.\n- `UrlPost` – eCall makes an HTTP POST request to the URL with status data as JSON.\n","enum":["Sms","Email","Url","UrlPost"]}}}}
```

## The SmsNotificationAddress object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"SmsNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered by SMS.","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"Mobile number in international format."}},"additionalProperties":false},"NotificationAddress":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationAddressType"}},"additionalProperties":false},"NotificationAddressType":{"type":"string","description":"Type of notification address:\n- `Email` – eCall sends an email to the address.\n- `Sms` – eCall sends an SMS to the number.\n- `Url` – eCall makes an HTTP GET request to the URL with status data in the query string.\n- `UrlPost` – eCall makes an HTTP POST request to the URL with status data as JSON.\n","enum":["Sms","Email","Url","UrlPost"]}}}}
```

## The UrlNotificationAddress object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"UrlNotificationAddress":{"required":["address"],"type":"object","description":"Notification delivered via HTTP. Use type `Url` for GET requests or `UrlPost`\nfor POST requests (JSON body).\n","allOf":[{"$ref":"#/components/schemas/NotificationAddress"}],"properties":{"address":{"type":"string","minLength":1,"description":"The URL eCall will call."}},"additionalProperties":false},"NotificationAddress":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/NotificationAddressType"}},"additionalProperties":false},"NotificationAddressType":{"type":"string","description":"Type of notification address:\n- `Email` – eCall sends an email to the address.\n- `Sms` – eCall sends an SMS to the number.\n- `Url` – eCall makes an HTTP GET request to the URL with status data in the query string.\n- `UrlPost` – eCall makes an HTTP POST request to the URL with status data as JSON.\n","enum":["Sms","Email","Url","UrlPost"]}}}}
```

## The MessageContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The ContentType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]}}}}
```

## The TextContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TextContent":{"required":["text"],"type":"object","description":"Plain text content. The primary content type for SMS and RCS.\n\nFor SMS, the maximum length is determined by account settings (max. 10 pages / 1530 chars\nGSM). Text exceeding the limit is truncated. Use `options.pageLimit` to restrict to fewer\npages, or `options.smsType: Flash` to send a flash SMS.\n","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"text":{"type":"string","minLength":1,"description":"The message text. UTF-8 encoded."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The SmsContentOptions object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The MessageType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The Options object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]}}}}
```

## The OptionType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"OptionType":{"type":"string","enum":["SmsContentOptions"]}}}}
```

## The MediaContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The ImageContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ImageContent":{"type":"object","description":"Image message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional image caption."}},"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The VideoContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"VideoContent":{"type":"object","description":"Video message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional video caption."}},"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The DocumentContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"DocumentContent":{"type":"object","description":"Document/file message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Currently not supported."},"filename":{"type":["string","null"],"description":"Display filename for the document."}},"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The AudioContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"AudioContent":{"type":"object","description":"Audio message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The StickerContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"StickerContent":{"type":"object","description":"Sticker message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The LocationContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"LocationContent":{"type":"object","description":"Geographic location message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"longitude":{"type":"number","format":"double","description":"Longitude coordinate."},"latitude":{"type":"number","format":"double","description":"Latitude coordinate."},"name":{"type":["string","null"],"description":"Optional location name."},"address":{"type":["string","null"],"description":"Optional address text."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]}}}}
```

## The ContactContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ContactContent":{"type":"object","description":"vCard contact message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"contacts":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ContactData"}}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]},"ContactData":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/NameData"},"birthDay":{"type":["string","null"],"description":"Birthday in `YYYY-MM-DD` format."},"organization":{"$ref":"#/components/schemas/OrganizationData"},"addresses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AddressData"}},"phones":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PhoneData"}},"urls":{"type":["array","null"],"items":{"$ref":"#/components/schemas/UrlData"}}},"additionalProperties":false},"NameData":{"required":["formattedName"],"type":"object","properties":{"formattedName":{"type":"string","minLength":1},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"middleName":{"type":["string","null"]},"suffix":{"type":["string","null"]},"prefix":{"type":["string","null"]}},"additionalProperties":false},"OrganizationData":{"type":"object","properties":{"company":{"type":["string","null"]},"department":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"AddressData":{"type":"object","properties":{"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"country":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"PhoneData":{"type":"object","properties":{"phone":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"UrlData":{"type":"object","properties":{"url":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false}}}}
```

## The ContactData object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ContactData":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/NameData"},"birthDay":{"type":["string","null"],"description":"Birthday in `YYYY-MM-DD` format."},"organization":{"$ref":"#/components/schemas/OrganizationData"},"addresses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AddressData"}},"phones":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PhoneData"}},"urls":{"type":["array","null"],"items":{"$ref":"#/components/schemas/UrlData"}}},"additionalProperties":false},"NameData":{"required":["formattedName"],"type":"object","properties":{"formattedName":{"type":"string","minLength":1},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"middleName":{"type":["string","null"]},"suffix":{"type":["string","null"]},"prefix":{"type":["string","null"]}},"additionalProperties":false},"OrganizationData":{"type":"object","properties":{"company":{"type":["string","null"]},"department":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"AddressData":{"type":"object","properties":{"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"country":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"PhoneData":{"type":"object","properties":{"phone":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"UrlData":{"type":"object","properties":{"url":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false}}}}
```

## The NameData object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"NameData":{"required":["formattedName"],"type":"object","properties":{"formattedName":{"type":"string","minLength":1},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"middleName":{"type":["string","null"]},"suffix":{"type":["string","null"]},"prefix":{"type":["string","null"]}},"additionalProperties":false}}}}
```

## The OrganizationData object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"OrganizationData":{"type":"object","properties":{"company":{"type":["string","null"]},"department":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false}}}}
```

## The AddressData object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"AddressData":{"type":"object","properties":{"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"country":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false}}}}
```

## The PhoneData object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"PhoneData":{"type":"object","properties":{"phone":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false}}}}
```

## The UrlData object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"UrlData":{"type":"object","properties":{"url":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false}}}}
```

## The InteractiveContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveContent":{"required":["action"],"type":"object","description":"Interactive message with buttons or a list (e.g. for WhatsApp/RCS).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"header":{"oneOf":[{"$ref":"#/components/schemas/InteractiveTextHeader"},{"$ref":"#/components/schemas/InteractiveImageHeader"},{"$ref":"#/components/schemas/InteractiveVideoHeader"},{"$ref":"#/components/schemas/InteractiveDocumentHeader"},{"type":"null"}]},"body":{"$ref":"#/components/schemas/InteractiveBody"},"footer":{"$ref":"#/components/schemas/InteractiveFooter"},"action":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonAction"},{"$ref":"#/components/schemas/InteractiveListAction"}]}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]},"InteractiveTextHeader":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Header text. Supports emojis but not markdown."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]},"InteractiveImageHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveVideoHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveDocumentHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveBody":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":1024,"description":"Body text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveFooter":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Footer text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveButtonAction":{"required":["buttons"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"buttons":{"type":"array","minItems":1,"maxItems":3,"items":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonActionReplyButton"}]}}},"additionalProperties":false},"InteractiveAction":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveActionType"}},"additionalProperties":false},"InteractiveActionType":{"type":"string","enum":["Button","List"]},"InteractiveButtonActionReplyButton":{"required":["id","title"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveButtonActionButton"}],"properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Unique button ID returned in the webhook when clicked."},"title":{"type":"string","minLength":1,"maxLength":20,"description":"Button label text. No emojis or markdown."}},"additionalProperties":false},"InteractiveButtonActionButton":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveButtonActionButtonType"}},"additionalProperties":false},"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]},"InteractiveListAction":{"required":["button","sections"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"button":{"type":"string","minLength":1,"maxLength":20,"description":"Button label. No emojis or markdown."},"sections":{"type":"array","minItems":1,"maxItems":10,"description":"Max. 10 rows across all sections.","items":{"$ref":"#/components/schemas/InteractiveListActionSection"}}},"additionalProperties":false},"InteractiveListActionSection":{"required":["rows"],"type":"object","properties":{"title":{"type":["string","null"],"minLength":1,"maxLength":24,"description":"Required if the message has more than one section."},"rows":{"type":"array","minItems":1,"maxItems":10,"items":{"$ref":"#/components/schemas/InteractiveListActionRow"}}},"additionalProperties":false},"InteractiveListActionRow":{"required":["id","title"],"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":["string","null"],"minLength":1,"maxLength":72}},"additionalProperties":false}}}}
```

## The InteractiveBody object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveBody":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":1024,"description":"Body text. Supports emojis, markdown, and links."}},"additionalProperties":false}}}}
```

## The InteractiveFooter object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveFooter":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Footer text. Supports emojis, markdown, and links."}},"additionalProperties":false}}}}
```

## The InteractiveHeader object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]}}}}
```

## The InteractiveHeaderType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]}}}}
```

## The InteractiveTextHeader object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveTextHeader":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Header text. Supports emojis but not markdown."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]}}}}
```

## The InteractiveMediaHeader object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]}}}}
```

## The InteractiveImageHeader object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveImageHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]}}}}
```

## The InteractiveVideoHeader object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveVideoHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]}}}}
```

## The InteractiveDocumentHeader object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveDocumentHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]}}}}
```

## The InteractiveAction object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveAction":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveActionType"}},"additionalProperties":false},"InteractiveActionType":{"type":"string","enum":["Button","List"]}}}}
```

## The InteractiveActionType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveActionType":{"type":"string","enum":["Button","List"]}}}}
```

## The InteractiveButtonAction object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveButtonAction":{"required":["buttons"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"buttons":{"type":"array","minItems":1,"maxItems":3,"items":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonActionReplyButton"}]}}},"additionalProperties":false},"InteractiveAction":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveActionType"}},"additionalProperties":false},"InteractiveActionType":{"type":"string","enum":["Button","List"]},"InteractiveButtonActionReplyButton":{"required":["id","title"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveButtonActionButton"}],"properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Unique button ID returned in the webhook when clicked."},"title":{"type":"string","minLength":1,"maxLength":20,"description":"Button label text. No emojis or markdown."}},"additionalProperties":false},"InteractiveButtonActionButton":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveButtonActionButtonType"}},"additionalProperties":false},"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]}}}}
```

## The InteractiveButtonActionButton object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveButtonActionButton":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveButtonActionButtonType"}},"additionalProperties":false},"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]}}}}
```

## The InteractiveButtonActionButtonType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]}}}}
```

## The InteractiveButtonActionReplyButton object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveButtonActionReplyButton":{"required":["id","title"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveButtonActionButton"}],"properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Unique button ID returned in the webhook when clicked."},"title":{"type":"string","minLength":1,"maxLength":20,"description":"Button label text. No emojis or markdown."}},"additionalProperties":false},"InteractiveButtonActionButton":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveButtonActionButtonType"}},"additionalProperties":false},"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]}}}}
```

## The InteractiveListAction object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveListAction":{"required":["button","sections"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"button":{"type":"string","minLength":1,"maxLength":20,"description":"Button label. No emojis or markdown."},"sections":{"type":"array","minItems":1,"maxItems":10,"description":"Max. 10 rows across all sections.","items":{"$ref":"#/components/schemas/InteractiveListActionSection"}}},"additionalProperties":false},"InteractiveAction":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveActionType"}},"additionalProperties":false},"InteractiveActionType":{"type":"string","enum":["Button","List"]},"InteractiveListActionSection":{"required":["rows"],"type":"object","properties":{"title":{"type":["string","null"],"minLength":1,"maxLength":24,"description":"Required if the message has more than one section."},"rows":{"type":"array","minItems":1,"maxItems":10,"items":{"$ref":"#/components/schemas/InteractiveListActionRow"}}},"additionalProperties":false},"InteractiveListActionRow":{"required":["id","title"],"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":["string","null"],"minLength":1,"maxLength":72}},"additionalProperties":false}}}}
```

## The InteractiveListActionSection object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveListActionSection":{"required":["rows"],"type":"object","properties":{"title":{"type":["string","null"],"minLength":1,"maxLength":24,"description":"Required if the message has more than one section."},"rows":{"type":"array","minItems":1,"maxItems":10,"items":{"$ref":"#/components/schemas/InteractiveListActionRow"}}},"additionalProperties":false},"InteractiveListActionRow":{"required":["id","title"],"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":["string","null"],"minLength":1,"maxLength":72}},"additionalProperties":false}}}}
```

## The InteractiveListActionRow object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveListActionRow":{"required":["id","title"],"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":["string","null"],"minLength":1,"maxLength":72}},"additionalProperties":false}}}}
```

## The InteractiveReplyContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveReplyContent":{"type":"object","description":"Content received when a user interacts with an interactive message.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"reply":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonReply"},{"$ref":"#/components/schemas/InteractiveListReply"},{"type":"null"}]}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]},"InteractiveButtonReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"InteractiveReplyContentReply":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveReplyType"}},"additionalProperties":false},"InteractiveReplyType":{"type":"string","enum":["Button","List"]},"InteractiveListReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]}},"additionalProperties":false}}}}
```

## The InteractiveReplyContentReply object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveReplyContentReply":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveReplyType"}},"additionalProperties":false},"InteractiveReplyType":{"type":"string","enum":["Button","List"]}}}}
```

## The InteractiveReplyType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveReplyType":{"type":"string","enum":["Button","List"]}}}}
```

## The InteractiveButtonReply object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveButtonReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"InteractiveReplyContentReply":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveReplyType"}},"additionalProperties":false},"InteractiveReplyType":{"type":"string","enum":["Button","List"]}}}}
```

## The InteractiveListReply object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"InteractiveListReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]}},"additionalProperties":false},"InteractiveReplyContentReply":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveReplyType"}},"additionalProperties":false},"InteractiveReplyType":{"type":"string","enum":["Button","List"]}}}}
```

## The TemplateContent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateContent":{"required":["namespace","name","language"],"type":"object","description":"Pre-approved message template (e.g. for WhatsApp Business).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"namespace":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"language":{"$ref":"#/components/schemas/TemplateLanguage"},"components":{"type":["array","null"],"items":{"oneOf":[{"$ref":"#/components/schemas/TemplateBodyComponent"},{"$ref":"#/components/schemas/TemplateButtonComponent"},{"$ref":"#/components/schemas/TemplateHeaderComponent"},{"$ref":"#/components/schemas/TemplateQuickReplyButtonComponent"},{"$ref":"#/components/schemas/TemplateUrlButtonComponent"}]}}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]},"TemplateLanguage":{"required":["code"],"type":"object","properties":{"policy":{"$ref":"#/components/schemas/TemplateLanguagePolicy"},"code":{"$ref":"#/components/schemas/TemplateLanguageCode"}},"additionalProperties":false},"TemplateLanguagePolicy":{"type":"string","enum":["Deterministic"]},"TemplateLanguageCode":{"type":"string","description":"BCP 47 language code for the template.","enum":["af","sq","ar","az","bn","bg","ca","zh_CN","zh_HK","zh_TW","hr","cs","da","nl","en","en_GB","en_US","et","fil","fi","fr","ka","de","el","gu","ha","he","hi","hu","id","ga","it","ja","kn","kk","rw_RW","ko","ky_KG","lo","lv","lt","mk","ms","ml","mr","nb","fa","pl","pt_BR","pt_PT","pa","ro","ru","sr","sk","sl","es","es_AR","es_ES","es_MX","sw","sv","ta","te","th","tr","uk","ur","uz","vi","zu"]},"TemplateBodyComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateButtonComponent":{"required":["index"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"properties":{"index":{"type":"integer","format":"int32"}},"additionalProperties":false},"TemplateHeaderComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateQuickReplyButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"TemplateUrlButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false}}}}
```

## The TemplateLanguage object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateLanguage":{"required":["code"],"type":"object","properties":{"policy":{"$ref":"#/components/schemas/TemplateLanguagePolicy"},"code":{"$ref":"#/components/schemas/TemplateLanguageCode"}},"additionalProperties":false},"TemplateLanguagePolicy":{"type":"string","enum":["Deterministic"]},"TemplateLanguageCode":{"type":"string","description":"BCP 47 language code for the template.","enum":["af","sq","ar","az","bn","bg","ca","zh_CN","zh_HK","zh_TW","hr","cs","da","nl","en","en_GB","en_US","et","fil","fi","fr","ka","de","el","gu","ha","he","hi","hu","id","ga","it","ja","kn","kk","rw_RW","ko","ky_KG","lo","lv","lt","mk","ms","ml","mr","nb","fa","pl","pt_BR","pt_PT","pa","ro","ru","sr","sk","sl","es","es_AR","es_ES","es_MX","sw","sv","ta","te","th","tr","uk","ur","uz","vi","zu"]}}}}
```

## The TemplateLanguagePolicy object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateLanguagePolicy":{"type":"string","enum":["Deterministic"]}}}}
```

## The TemplateLanguageCode object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateLanguageCode":{"type":"string","description":"BCP 47 language code for the template.","enum":["af","sq","ar","az","bn","bg","ca","zh_CN","zh_HK","zh_TW","hr","cs","da","nl","en","en_GB","en_US","et","fil","fi","fr","ka","de","el","gu","ha","he","hi","hu","id","ga","it","ja","kn","kk","rw_RW","ko","ky_KG","lo","lv","lt","mk","ms","ml","mr","nb","fa","pl","pt_BR","pt_PT","pa","ro","ru","sr","sk","sl","es","es_AR","es_ES","es_MX","sw","sv","ta","te","th","tr","uk","ur","uz","vi","zu"]}}}}
```

## The TemplateComponent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false}}}}
```

## The TemplateComponentType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]}}}}
```

## The TemplateBodyComponent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateBodyComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false}}}}
```

## The TemplateHeaderComponent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateHeaderComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false}}}}
```

## The TemplateButtonComponent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateButtonComponent":{"required":["index"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"properties":{"index":{"type":"integer","format":"int32"}},"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false}}}}
```

## The TemplateQuickReplyButtonComponent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateQuickReplyButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"TemplateButtonComponent":{"required":["index"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"properties":{"index":{"type":"integer","format":"int32"}},"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false}}}}
```

## The TemplateUrlButtonComponent object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateUrlButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"TemplateButtonComponent":{"required":["index"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"properties":{"index":{"type":"integer","format":"int32"}},"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false}}}}
```

## The TemplateParameter object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]}}}}
```

## The TemplateParameterType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]}}}}
```

## The TemplateTextParameter object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]}}}}
```

## The TemplateMediaParameter object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]}}}}
```

## The TemplateImageParameter object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]}}}}
```

## The TemplateVideoParameter object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]}}}}
```

## The TemplateDocumentParameter object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]}}}}
```

## The TemplateDateTimeParameter object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]}}}}
```

## The TemplateCurrencyParameter object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]}}}}
```

## The TemplatePayloadParameter object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]}}}}
```

## The ReceivedMessage object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ReceivedMessage":{"type":"object","description":"Payload sent by eCall to your webhook URL when an incoming SMS or WhatsApp message\nis received.\n","properties":{"messageId":{"type":["string","null"],"description":"Unique identifier of the incoming message."},"channel":{"type":["string","null"],"description":"Channel of the incoming message (`Sms` or `Whatsapp`)."},"to":{"type":["string","null"],"description":"The eCall number that received the SMS."},"from":{"type":["string","null"],"description":"Sender's number."},"content":{"description":"Message content (always `TextContent` for incoming SMS).","oneOf":[{"$ref":"#/components/schemas/TextContent"},{"$ref":"#/components/schemas/AudioContent"},{"$ref":"#/components/schemas/ContactContent"},{"$ref":"#/components/schemas/DocumentContent"},{"$ref":"#/components/schemas/ImageContent"},{"$ref":"#/components/schemas/InteractiveContent"},{"$ref":"#/components/schemas/InteractiveReplyContent"},{"$ref":"#/components/schemas/LocationContent"},{"$ref":"#/components/schemas/MediaContent"},{"$ref":"#/components/schemas/StickerContent"},{"$ref":"#/components/schemas/TemplateContent"},{"$ref":"#/components/schemas/VideoContent"},{"type":"null"}]},"timestamp":{"type":"string","format":"date-time","description":"Time of receipt in the eCall system (UTC, ISO 8601)."}},"additionalProperties":false},"TextContent":{"required":["text"],"type":"object","description":"Plain text content. The primary content type for SMS and RCS.\n\nFor SMS, the maximum length is determined by account settings (max. 10 pages / 1530 chars\nGSM). Text exceeding the limit is truncated. Use `options.pageLimit` to restrict to fewer\npages, or `options.smsType: Flash` to send a flash SMS.\n","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"text":{"type":"string","minLength":1,"description":"The message text. UTF-8 encoded."}},"additionalProperties":false},"MessageContent":{"required":["type"],"type":"object","description":"Base type for all message content objects. Use `type` to identify the subtype.","properties":{"type":{"$ref":"#/components/schemas/ContentType"},"options":{"description":"Channel-specific content options (currently only `SmsContentOptions`).","oneOf":[{"$ref":"#/components/schemas/SmsContentOptions"},{"type":"null"}]}},"additionalProperties":false},"ContentType":{"type":"string","description":"Discriminator for message content type.","enum":["Text","Template","Image","Video","Document","Location","Audio","Sticker","Contacts","Interactive","InteractiveReply"]},"SmsContentOptions":{"type":"object","description":"SMS-specific options that override account-level settings for this message.","allOf":[{"$ref":"#/components/schemas/Options"}],"properties":{"forceGsm":{"type":["boolean","null"],"description":"If `true`, characters outside the GSM-7 character set are not allowed\n(they would otherwise cause UCS-2 encoding, reducing capacity per page).\n"},"pageLimit":{"type":["integer","null"],"format":"int32","description":"Maximum number of SMS pages. Maximum value is 10."},"smsType":{"$ref":"#/components/schemas/MessageType"}},"additionalProperties":false},"Options":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/OptionType"}},"additionalProperties":false},"OptionType":{"type":"string","enum":["SmsContentOptions"]},"MessageType":{"type":"string","description":"SMS delivery type:\n- `Standard` – Normal SMS (default).\n- `Flash` – Flash SMS, displayed directly on the recipient's screen without being stored.\n- `PrioPlus` – Priority delivery (if supported by account).\n","enum":["Standard","Flash","PrioPlus"]},"AudioContent":{"type":"object","description":"Audio message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"MediaContent":{"type":"object","description":"Base type for media content (images, audio, video, documents, stickers).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of a previously uploaded media file (from `POST /api/v2/media`)."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media file. Use `mediaId` or `url`, not both."}},"additionalProperties":false},"ContactContent":{"type":"object","description":"vCard contact message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"contacts":{"type":["array","null"],"items":{"$ref":"#/components/schemas/ContactData"}}},"additionalProperties":false},"ContactData":{"required":["name"],"type":"object","properties":{"name":{"$ref":"#/components/schemas/NameData"},"birthDay":{"type":["string","null"],"description":"Birthday in `YYYY-MM-DD` format."},"organization":{"$ref":"#/components/schemas/OrganizationData"},"addresses":{"type":["array","null"],"items":{"$ref":"#/components/schemas/AddressData"}},"phones":{"type":["array","null"],"items":{"$ref":"#/components/schemas/PhoneData"}},"urls":{"type":["array","null"],"items":{"$ref":"#/components/schemas/UrlData"}}},"additionalProperties":false},"NameData":{"required":["formattedName"],"type":"object","properties":{"formattedName":{"type":"string","minLength":1},"firstName":{"type":["string","null"]},"lastName":{"type":["string","null"]},"middleName":{"type":["string","null"]},"suffix":{"type":["string","null"]},"prefix":{"type":["string","null"]}},"additionalProperties":false},"OrganizationData":{"type":"object","properties":{"company":{"type":["string","null"]},"department":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"AddressData":{"type":"object","properties":{"street":{"type":["string","null"]},"city":{"type":["string","null"]},"state":{"type":["string","null"]},"zip":{"type":["string","null"]},"country":{"type":["string","null"]},"countryCode":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"PhoneData":{"type":"object","properties":{"phone":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"UrlData":{"type":"object","properties":{"url":{"type":["string","null"]},"type":{"type":["string","null"]}},"additionalProperties":false},"DocumentContent":{"type":"object","description":"Document/file message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Currently not supported."},"filename":{"type":["string","null"],"description":"Display filename for the document."}},"additionalProperties":false},"ImageContent":{"type":"object","description":"Image message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional image caption."}},"additionalProperties":false},"InteractiveContent":{"required":["action"],"type":"object","description":"Interactive message with buttons or a list (e.g. for WhatsApp/RCS).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"header":{"oneOf":[{"$ref":"#/components/schemas/InteractiveTextHeader"},{"$ref":"#/components/schemas/InteractiveImageHeader"},{"$ref":"#/components/schemas/InteractiveVideoHeader"},{"$ref":"#/components/schemas/InteractiveDocumentHeader"},{"type":"null"}]},"body":{"$ref":"#/components/schemas/InteractiveBody"},"footer":{"$ref":"#/components/schemas/InteractiveFooter"},"action":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonAction"},{"$ref":"#/components/schemas/InteractiveListAction"}]}},"additionalProperties":false},"InteractiveTextHeader":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Header text. Supports emojis but not markdown."}},"additionalProperties":false},"InteractiveHeader":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveHeaderType"}},"additionalProperties":false},"InteractiveHeaderType":{"type":"string","enum":["Text","Video","Image","Document"]},"InteractiveImageHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveMediaHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveHeader"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL of the media. Required if `mediaId` is not set."}},"additionalProperties":false},"InteractiveVideoHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveDocumentHeader":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveMediaHeader"}],"additionalProperties":false},"InteractiveBody":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":1024,"description":"Body text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveFooter":{"required":["text"],"type":"object","properties":{"text":{"type":"string","minLength":1,"maxLength":60,"description":"Footer text. Supports emojis, markdown, and links."}},"additionalProperties":false},"InteractiveButtonAction":{"required":["buttons"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"buttons":{"type":"array","minItems":1,"maxItems":3,"items":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonActionReplyButton"}]}}},"additionalProperties":false},"InteractiveAction":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveActionType"}},"additionalProperties":false},"InteractiveActionType":{"type":"string","enum":["Button","List"]},"InteractiveButtonActionReplyButton":{"required":["id","title"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveButtonActionButton"}],"properties":{"id":{"type":"string","minLength":1,"maxLength":256,"description":"Unique button ID returned in the webhook when clicked."},"title":{"type":"string","minLength":1,"maxLength":20,"description":"Button label text. No emojis or markdown."}},"additionalProperties":false},"InteractiveButtonActionButton":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveButtonActionButtonType"}},"additionalProperties":false},"InteractiveButtonActionButtonType":{"type":"string","enum":["Reply"]},"InteractiveListAction":{"required":["button","sections"],"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveAction"}],"properties":{"button":{"type":"string","minLength":1,"maxLength":20,"description":"Button label. No emojis or markdown."},"sections":{"type":"array","minItems":1,"maxItems":10,"description":"Max. 10 rows across all sections.","items":{"$ref":"#/components/schemas/InteractiveListActionSection"}}},"additionalProperties":false},"InteractiveListActionSection":{"required":["rows"],"type":"object","properties":{"title":{"type":["string","null"],"minLength":1,"maxLength":24,"description":"Required if the message has more than one section."},"rows":{"type":"array","minItems":1,"maxItems":10,"items":{"$ref":"#/components/schemas/InteractiveListActionRow"}}},"additionalProperties":false},"InteractiveListActionRow":{"required":["id","title"],"type":"object","properties":{"id":{"type":"string","minLength":1,"maxLength":200},"title":{"type":"string","minLength":1,"maxLength":24},"description":{"type":["string","null"],"minLength":1,"maxLength":72}},"additionalProperties":false},"InteractiveReplyContent":{"type":"object","description":"Content received when a user interacts with an interactive message.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"reply":{"oneOf":[{"$ref":"#/components/schemas/InteractiveButtonReply"},{"$ref":"#/components/schemas/InteractiveListReply"},{"type":"null"}]}},"additionalProperties":false},"InteractiveButtonReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]}},"additionalProperties":false},"InteractiveReplyContentReply":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/InteractiveReplyType"}},"additionalProperties":false},"InteractiveReplyType":{"type":"string","enum":["Button","List"]},"InteractiveListReply":{"type":"object","allOf":[{"$ref":"#/components/schemas/InteractiveReplyContentReply"}],"properties":{"id":{"type":["string","null"]},"title":{"type":["string","null"]},"description":{"type":["string","null"]}},"additionalProperties":false},"LocationContent":{"type":"object","description":"Geographic location message content.","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"longitude":{"type":"number","format":"double","description":"Longitude coordinate."},"latitude":{"type":"number","format":"double","description":"Latitude coordinate."},"name":{"type":["string","null"],"description":"Optional location name."},"address":{"type":["string","null"],"description":"Optional address text."}},"additionalProperties":false},"StickerContent":{"type":"object","description":"Sticker message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"additionalProperties":false},"TemplateContent":{"required":["namespace","name","language"],"type":"object","description":"Pre-approved message template (e.g. for WhatsApp Business).","allOf":[{"$ref":"#/components/schemas/MessageContent"}],"properties":{"namespace":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"language":{"$ref":"#/components/schemas/TemplateLanguage"},"components":{"type":["array","null"],"items":{"oneOf":[{"$ref":"#/components/schemas/TemplateBodyComponent"},{"$ref":"#/components/schemas/TemplateButtonComponent"},{"$ref":"#/components/schemas/TemplateHeaderComponent"},{"$ref":"#/components/schemas/TemplateQuickReplyButtonComponent"},{"$ref":"#/components/schemas/TemplateUrlButtonComponent"}]}}},"additionalProperties":false},"TemplateLanguage":{"required":["code"],"type":"object","properties":{"policy":{"$ref":"#/components/schemas/TemplateLanguagePolicy"},"code":{"$ref":"#/components/schemas/TemplateLanguageCode"}},"additionalProperties":false},"TemplateLanguagePolicy":{"type":"string","enum":["Deterministic"]},"TemplateLanguageCode":{"type":"string","description":"BCP 47 language code for the template.","enum":["af","sq","ar","az","bn","bg","ca","zh_CN","zh_HK","zh_TW","hr","cs","da","nl","en","en_GB","en_US","et","fil","fi","fr","ka","de","el","gu","ha","he","hi","hu","id","ga","it","ja","kn","kk","rw_RW","ko","ky_KG","lo","lv","lt","mk","ms","ml","mr","nb","fa","pl","pt_BR","pt_PT","pa","ro","ru","sr","sk","sl","es","es_AR","es_ES","es_MX","sw","sv","ta","te","th","tr","uk","ur","uz","vi","zu"]},"TemplateBodyComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateComponent":{"required":["type","parameters"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateComponentType"},"parameters":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/TemplateTextParameter"},{"$ref":"#/components/schemas/TemplateImageParameter"},{"$ref":"#/components/schemas/TemplateVideoParameter"},{"$ref":"#/components/schemas/TemplateDocumentParameter"},{"$ref":"#/components/schemas/TemplateDateTimeParameter"},{"$ref":"#/components/schemas/TemplateCurrencyParameter"},{"$ref":"#/components/schemas/TemplatePayloadParameter"},{"$ref":"#/components/schemas/TemplateMediaParameter"}]}}},"additionalProperties":false},"TemplateComponentType":{"type":"string","enum":["Header","Body","QuickReplyButton","UrlButton"]},"TemplateTextParameter":{"required":["text"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"text":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateParameter":{"required":["type"],"type":"object","properties":{"type":{"$ref":"#/components/schemas/TemplateParameterType"}},"additionalProperties":false},"TemplateParameterType":{"type":"string","enum":["Text","Image","Video","Document","DateTime","Currency","Payload"]},"TemplateImageParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateMediaParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"mediaId":{"type":["string","null"],"description":"ID of an uploaded media file. Required if `url` is not set."},"url":{"type":["string","null"],"description":"Public HTTP/HTTPS URL. Required if `mediaId` is not set."}},"additionalProperties":false},"TemplateVideoParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"additionalProperties":false},"TemplateDocumentParameter":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateMediaParameter"}],"properties":{"filename":{"type":["string","null"]}},"additionalProperties":false},"TemplateDateTimeParameter":{"required":["dateTime"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"dateTime":{"type":"string","format":"date-time","description":"RFC 3339 date-time string."}},"additionalProperties":false},"TemplateCurrencyParameter":{"required":["code","amount","fallbackValue"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"code":{"type":"string","minLength":3,"maxLength":3,"description":"ISO 4217 currency code."},"amount":{"type":"integer","format":"int32","description":"Amount in cents × 1000. E.g. CHF 100.99 → 100990."},"fallbackValue":{"type":"string","minLength":1,"description":"Displayed if localization fails."}},"additionalProperties":false},"TemplatePayloadParameter":{"required":["payload"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateParameter"}],"properties":{"payload":{"type":"string","minLength":1}},"additionalProperties":false},"TemplateButtonComponent":{"required":["index"],"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"properties":{"index":{"type":"integer","format":"int32"}},"additionalProperties":false},"TemplateHeaderComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateComponent"}],"additionalProperties":false},"TemplateQuickReplyButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"TemplateUrlButtonComponent":{"type":"object","allOf":[{"$ref":"#/components/schemas/TemplateButtonComponent"}],"additionalProperties":false},"VideoContent":{"type":"object","description":"Video message content.","allOf":[{"$ref":"#/components/schemas/MediaContent"}],"properties":{"caption":{"type":["string","null"],"description":"Optional video caption."}},"additionalProperties":false}}}}
```

## The MediaUploadResult object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"MediaUploadResult":{"type":"object","description":"Result of a successful media upload.","properties":{"mediaId":{"type":["string","null"],"description":"Unique identifier of the uploaded media file. Use this in message content."}},"additionalProperties":false}}}}
```

## The Error object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"Error":{"type":"object","description":"Error response returned for `4xx` and `5xx` HTTP status codes.","properties":{"errorCode":{"$ref":"#/components/schemas/ErrorCode"},"errorMessage":{"type":["string","null"],"description":"High-level human-readable description of the error."},"errorDetails":{"description":"Detailed breakdown of validation errors, if applicable.","oneOf":[{"$ref":"#/components/schemas/ParameterErrorDetails"},{"type":"null"}]}},"additionalProperties":false},"ErrorCode":{"type":"string","description":"Machine-readable error code indicating why the request failed.\n\n| Code | Description |\n|------|-------------|\n| `InvalidContent` | JSON validation failed — bad parameter value. Check `errorDetails`. |\n| `InsufficientPoints` | Account has insufficient points/credits to send this message. |\n| `TooManyMessagesSameReceiver` | Too many messages sent to the same recipient (anti-spam). |\n| `TooManyMessagesSameReceiverAndContent` | Too many identical messages to the same recipient. |\n| `RequestMissing` | Request body is missing or empty. |\n| `UnknownContentType` | The specified `content.type` is not recognised. |\n| `InvalidSenderAccount` | The sender address is not valid for this account. |\n| `CannotConvertMediaBody` | Media file could not be processed. |\n| `PointSubstractionError` | Error deducting points from account balance. |\n| `AdrCountryNotWhitelisted` | Recipient country is not whitelisted for this account. |\n| `AdrCountryWhitelistLimitExceeded` | Country whitelist limit exceeded. |\n","enum":["Error1","Error2","RequestMissing","CannotConvertMediaBody","UnknownContentType","InvalidSenderAccount","InvalidContent","InsufficientPoints","PointSubstractionError","TooManyMessagesSameReceiver","TooManyMessagesSameReceiverAndContent","AdrCountryNotWhitelisted","AdrCountryWhitelistLimitExceeded","AdrCountryWhitelistLimitReachedButNotBlockedCountries"]},"ParameterErrorDetails":{"type":"object","description":"Detailed error information for parameter validation failures.","allOf":[{"$ref":"#/components/schemas/ErrorDetails"}],"properties":{"errors":{"type":["array","null"],"description":"List of individual field validation errors.","items":{"$ref":"#/components/schemas/ParameterErrorDetailsEntry"}}},"additionalProperties":false},"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]},"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}}}}
```

## The ErrorCode object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ErrorCode":{"type":"string","description":"Machine-readable error code indicating why the request failed.\n\n| Code | Description |\n|------|-------------|\n| `InvalidContent` | JSON validation failed — bad parameter value. Check `errorDetails`. |\n| `InsufficientPoints` | Account has insufficient points/credits to send this message. |\n| `TooManyMessagesSameReceiver` | Too many messages sent to the same recipient (anti-spam). |\n| `TooManyMessagesSameReceiverAndContent` | Too many identical messages to the same recipient. |\n| `RequestMissing` | Request body is missing or empty. |\n| `UnknownContentType` | The specified `content.type` is not recognised. |\n| `InvalidSenderAccount` | The sender address is not valid for this account. |\n| `CannotConvertMediaBody` | Media file could not be processed. |\n| `PointSubstractionError` | Error deducting points from account balance. |\n| `AdrCountryNotWhitelisted` | Recipient country is not whitelisted for this account. |\n| `AdrCountryWhitelistLimitExceeded` | Country whitelist limit exceeded. |\n","enum":["Error1","Error2","RequestMissing","CannotConvertMediaBody","UnknownContentType","InvalidSenderAccount","InvalidContent","InsufficientPoints","PointSubstractionError","TooManyMessagesSameReceiver","TooManyMessagesSameReceiverAndContent","AdrCountryNotWhitelisted","AdrCountryWhitelistLimitExceeded","AdrCountryWhitelistLimitReachedButNotBlockedCountries"]}}}}
```

## The ErrorDetails object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]}}}}
```

## The ErrorDetailsType object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ErrorDetailsType":{"type":"string","enum":["Parameter"]}}}}
```

## The ParameterErrorDetails object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ParameterErrorDetails":{"type":"object","description":"Detailed error information for parameter validation failures.","allOf":[{"$ref":"#/components/schemas/ErrorDetails"}],"properties":{"errors":{"type":["array","null"],"description":"List of individual field validation errors.","items":{"$ref":"#/components/schemas/ParameterErrorDetailsEntry"}}},"additionalProperties":false},"ErrorDetails":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/ErrorDetailsType"}},"additionalProperties":false},"ErrorDetailsType":{"type":"string","enum":["Parameter"]},"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}}}}
```

## The ParameterErrorDetailsEntry object

```json
{"openapi":"3.1.0","info":{"title":"eCall REST API","version":"2.0"},"components":{"schemas":{"ParameterErrorDetailsEntry":{"type":"object","description":"A single field-level validation error.","properties":{"parameter":{"type":["string","null"],"description":"Name of the field that caused the error."},"messages":{"type":["array","null"],"description":"Human-readable error messages for this field.","items":{"type":"string"}}},"additionalProperties":false}}}}
```


# SMPP

Send SMS messages through the eCall SMPP interface and receive delivery receipts or inbound SMS.

## SMPP

Use the eCall SMPP interface to send SMS messages and receive callbacks.

### At a glance

* Host: `smpp.ecall.ch`
* Port: `2776`
* Transport: **TLS 1.2** or **TLS 1.3**
* Protocol: **SMPP v3.4**

### Navigate this section

* [Getting started](/api-references/smpp/getting-started) — prerequisites, protocol version, and connection details
* [Session management](/api-references/smpp/session-management) — supported commands, bind flow, and keep-alive behavior
* [Sending SMS](/api-references/smpp/sending-sms) — `submit_sm` and supported parameter values
* [Receiving messages](/api-references/smpp/receiving-messages) — delivery receipts and inbound SMS
* [Error codes](/api-references/smpp/error-codes) — custom eCall SMPP errors
* [Code examples](/api-references/smpp/code-examples) — Python, Java, and C# examples

### Core features

* Send single-part and multi-part SMS messages.&#x20;
* Receive delivery receipts.
* Forward inbound SMS to your client.

{% hint style="info" %}
Use `bind_transceiver` for most integrations.
{% endhint %}


# Getting started

Prerequisites, core features, protocol details, and connection settings for SMPP.

### Core features

* Send single-part and multi-part SMS messages.
* Receive delivery receipts.
* Forward inbound SMS to your client.

### Prerequisites

* You need an active eCall account.
* SMPP access must be enabled on your account.
* Your client must support **SMPP v3.4**.
* Your client must support **TLS 1.2** or **TLS 1.3**.

### Single-user or multi-user setup

You can use the SMPP interface for one user or many users.

Contact support when you need a multi-user setup.

### Protocol specification

This interface follows **Short Message Peer to Peer Protocol Specification v3.4**.

Use the version dated **12 October 1999**.

### Connection details

| Parameter | Value            |
| --------- | ---------------- |
| **Host**  | `smpp.ecall.ch`  |
| **IP**    | `193.93.208.139` |
| **Port**  | `2776`           |
| **TLS**   | `1.2` or `1.3`   |

{% hint style="warning" %}
Plain TCP is not supported. Use TLS for every connection.
{% endhint %}


# Session management

Supported commands, bind flow, keep-alive behavior, and session closing.

### Supported commands

| Command            | Description                                   |
| ------------------ | --------------------------------------------- |
| `bind_receiver`    | Open a session to receive messages from eCall |
| `bind_transmitter` | Open a session to send messages to eCall      |
| `bind_transceiver` | Open a combined send and receive session      |
| `submit_sm`        | Submit an SMS message                         |
| `unbind`           | Close the session                             |
| `enquire_link`     | Keep the session alive                        |
| `deliver_sm`       | Receive delivery receipts or inbound SMS      |

### Unsupported commands

These commands are not supported:

| Command        |
| -------------- |
| `replace_sm`   |
| `cancel_sm`    |
| `submit_multi` |
| `data_sm`      |
| `query_sm`     |

If you send one of them, eCall returns `ESME_RINVCMDID` (`0x00000003`).

### Open a session

Open a session before you send or receive SMS data.

Use one of these `bind` commands:

| Command            | Description                                                                     |
| ------------------ | ------------------------------------------------------------------------------- |
| `bind_transmitter` | Send messages only. You only receive command responses.                         |
| `bind_receiver`    | Receive messages only. eCall currently sends delivery receipts on this session. |
| `bind_transceiver` | Send and receive on one session. This is the recommended mode for most clients. |

### Bind parameters

| Parameter           | Value                 |
| ------------------- | --------------------- |
| `system_id`         | Your eCall username   |
| `password`          | Your eCall password   |
| `system_type`       | `NULL`                |
| `interface_version` | `0x34` (decimal `52`) |
| `addr_ton`          | `NULL`                |
| `addr_npi`          | `NULL`                |
| `address_range`     | `NULL`                |

{% hint style="info" %}
eCall responds to each `bind` request with `eCallSmpp` in the `system_id` field.
{% endhint %}

### Keep the session alive

Use `enquire_link` when the session is idle.

The server closes the connection after **60 seconds** without traffic.

### Close the session

Use `unbind` to close the session explicitly.

This step is optional. eCall also closes the session when the TCP connection drops.


# Sending SMS

Submit SMS messages with submit\_sm and use the supported parameter values.

### `submit_sm`

Use `submit_sm` to send SMS messages.

Only mandatory parameters are supported.

Optional parameters are ignored.

### Supported mandatory parameters

| Parameter             | Allowed values                                                                                         |
| --------------------- | ------------------------------------------------------------------------------------------------------ |
| `service_type`        | `""`, `"CMT"`, `"CPT"`                                                                                 |
| `source_addr_ton`     | `0`, `1`, `2`, `5`                                                                                     |
| `source_addr_npi`     | `0`, `1`                                                                                               |
| `source_addr`         | Up to `16` characters, or empty to use the default eCall sender                                        |
| `dest_addr_ton`       | `0`, `1`, `2`                                                                                          |
| `dest_addr_npi`       | `0`, `1`                                                                                               |
| `dest_addr`           | Up to `16` characters                                                                                  |
| `esm_class`           | GSM features: `00XXXXXX`, `01XXXXXX`; message type: `XX0000XX`; messaging mode: `XXXXXX00`, `XXXXXX11` |
| `registered_delivery` | SMSC delivery receipt: `XXXXXX00`, `XXXXXX01`, `XXXXXX10`                                              |
| `data_coding`         | `XXXXX0000`                                                                                            |

### Ignored mandatory parameters

| Parameter                 | Note                                                 |
| ------------------------- | ---------------------------------------------------- |
| `protocol_id`             | Ignored                                              |
| `priority_flag`           | Ignored. Contact support if you need prioritization. |
| `replace_if_present_flag` | Ignored                                              |
| `sm_default_msg_id`       | Ignored                                              |

{% hint style="info" %}
Use an empty `source_addr` when you want the default eCall sender.
{% endhint %}


# Receiving messages

Receive delivery receipts and inbound SMS through deliver\_sm.

### `deliver_sm`

Use `deliver_sm` to receive delivery receipts and inbound SMS.

### Delivery receipts

If you request delivery receipts in `submit_sm`, eCall forwards them through `deliver_sm`.

For delivery receipts, `esm_class` is `0x04`.

### Inbound SMS

If you configure inbound SMS forwarding in the eCall portal, eCall forwards received messages through `deliver_sm`.

This applies to leased receive numbers.

For inbound SMS, `esm_class` is `0x00` or `0x40`.

{% hint style="info" %}
Use `bind_transceiver` when you want to send messages and receive callbacks on one session.
{% endhint %}


# Error codes

Standard SMPP statuses and the custom eCall billing error.

In addition to the standard SMPP `command_status` values, eCall defines this custom error:

| Code                  | Value        | Description                                                      |
| --------------------- | ------------ | ---------------------------------------------------------------- |
| `ESME_RBILLINGFAILED` | `0x00000401` | SMS billing failed because the account has insufficient credits. |

{% hint style="warning" %}
Check account credits when you receive `ESME_RBILLINGFAILED`.
{% endhint %}


# Code examples

Example clients for connecting, sending SMS, receiving callbacks, and keeping the session alive.

### Setup and dependencies

{% tabs %}
{% tab title="Python" %}

```bash
pip install smpplib
```

{% endtab %}

{% tab title="Java" %}

```xml
<dependency>
    <groupId>com.cloudhopper</groupId>
    <artifactId>ch-smpp</artifactId>
    <version>5.0.8</version>
</dependency>
```

{% endtab %}

{% tab title="C# (.NET)" %}

```bash
dotnet add package ArdaXi.SmppSharp
```

{% endtab %}
{% endtabs %}

### Connect and send SMS

{% tabs %}
{% tab title="Python" %}

```python
import smpplib
import smpplib.client
import smpplib.consts

client = smpplib.client.Client("smpp.ecall.ch", 2776, allow_unknown_opt_params=True)

client.connect()
client.bind_transceiver(system_id="your_username", password="your_password")

pdu = client.send_message(
    source_addr_ton=smpplib.consts.SMPP_TON_INTL,
    source_addr_npi=smpplib.consts.SMPP_NPI_ISDN,
    source_addr="eCall",
    dest_addr_ton=smpplib.consts.SMPP_TON_INTL,
    dest_addr_npi=smpplib.consts.SMPP_NPI_ISDN,
    destination_addr="0041791234567",
    short_message="Hello from eCall SMPP!".encode("utf-8"),
    registered_delivery=1,
)

print(f"Message ID: {pdu.message_id}")

client.unbind()
client.disconnect()
```

{% endtab %}

{% tab title="Java" %}

```java
import com.cloudhopper.smpp.*;
import com.cloudhopper.smpp.pdu.*;
import com.cloudhopper.smpp.type.*;

SmppSessionConfiguration config = new SmppSessionConfiguration();
config.setHost("smpp.ecall.ch");
config.setPort(2776);
config.setSystemId("your_username");
config.setPassword("your_password");
config.setType(SmppBindType.TRANSCEIVER);
config.setUseSsl(true);

DefaultSmppClient smppClient = new DefaultSmppClient();
SmppSession session = smppClient.bind(config);

SubmitSm request = new SubmitSm();
request.setSourceAddress(new Address((byte) 0x05, (byte) 0x00, "eCall"));
request.setDestAddress(new Address((byte) 0x01, (byte) 0x01, "0041791234567"));
request.setShortMessage("Hello from eCall SMPP!".getBytes("UTF-8"));
request.setRegisteredDelivery((byte) 0x01);

SubmitSmResp response = session.submit(request, 10000);
System.out.println("Message ID: " + response.getMessageId());

session.unbind(5000);
session.destroy();
```

{% endtab %}

{% tab title="C# (.NET)" %}

```csharp
using JamaaTech.Smpp.Net.Client;
using JamaaTech.Smpp.Net.Lib;

var settings = new SmppConnectionSettings
{
    Host = "smpp.ecall.ch",
    Port = 2776,
    SystemID = "your_username",
    Password = "your_password",
    SystemType = "",
    InterfaceVersion = 0x34,
    UseSsl = true
};

using var client = new SmppClient();
client.Properties = settings;
client.Connect();

var msg = new TextMessage
{
    SourceAddress = "eCall",
    DestinationAddress = "0041791234567",
    Text = "Hello from eCall SMPP!",
    RegisterDeliveryNotification = true
};

client.SendMessage(msg);
client.Disconnect();
```

{% endtab %}
{% endtabs %}

### Receive delivery receipts

{% tabs %}
{% tab title="Python" %}

```python
import smpplib
import smpplib.client

def message_received(pdu):
    if hasattr(pdu, "esm_class") and pdu.esm_class == 0x04:
        print(f"Delivery receipt: {pdu.short_message}")
    else:
        print(f"Inbound SMS from {pdu.source_addr}: {pdu.short_message}")

client = smpplib.client.Client("smpp.ecall.ch", 2776)
client.connect()
client.bind_transceiver(system_id="your_username", password="your_password")

client.set_message_received_handler(message_received)
client.listen()
```

{% endtab %}

{% tab title="Java" %}

```java
import com.cloudhopper.smpp.*;
import com.cloudhopper.smpp.pdu.*;

public class ECallSmppHandler extends DefaultSmppSessionHandler {

    @Override
    public PduResponse firePduRequestReceived(PduRequest pduRequest) {
        if (pduRequest instanceof DeliverSm) {
            DeliverSm deliver = (DeliverSm) pduRequest;
            byte esmClass = deliver.getEsmClass();

            if (esmClass == 0x04) {
                System.out.println("Delivery receipt: " +
                    new String(deliver.getShortMessage()));
            } else {
                System.out.println("Inbound SMS from " +
                    deliver.getSourceAddress().getAddress() + ": " +
                    new String(deliver.getShortMessage()));
            }
        }
        return pduRequest.createResponse();
    }
}
```

{% endtab %}
{% endtabs %}

### Keep-alive

{% tabs %}
{% tab title="Python" %}

```python
import threading
import time

def keep_alive(client, interval=30):
    while True:
        time.sleep(interval)
        try:
            client.enquire_link()
        except Exception:
            break

thread = threading.Thread(target=keep_alive, args=(client,), daemon=True)
thread.start()
```

{% endtab %}

{% tab title="Java" %}

```java
config.setRequestExpiryTimeout(30000);
config.setWindowMonitorInterval(15000);
```

{% endtab %}
{% endtabs %}


# SOAP WebService

The eCall webservice interface allows you to send messages to various alerting systems — SMS, fax, and voice — using standardized SOAP web methods.

## SOAP WebService

Use the eCall SOAP webservice to send SMS, fax, and voice messages.

### At a glance

* Endpoint: `https://soap.ecall.ch/eCall.asmx`
* Transport: **TLS 1.2**
* Preferred protocol: **SOAP 1.2**

{% hint style="warning" %}
Parameters are case-sensitive. Use the exact capitalization.
{% endhint %}

{% hint style="info" %}
Send a `JobID` when you need to query delivery state later.
{% endhint %}

### Navigate this section

* [Getting started](/api-references/soap-webservice/getting-started) — prerequisites, message flow, endpoint, and SOAP versions
* [Send methods](/api-references/soap-webservice/send-methods) — `SendSMSBasic`, `SendFaxBasic`, `SendFax`, and `SendVoiceBasic`
* [Parameter reference](/api-references/soap-webservice/parameter-reference) — required fields, optional fields, and `TokenFields`
* [Status queries](/api-references/soap-webservice/status-queries) — `GetStateBasic`, response structure, and request IDs
* [Response codes and statuses](/api-references/soap-webservice/response-codes-and-statuses) — response codes, `SendState`, and `ErrorState`
* [Code examples](/api-references/soap-webservice/code-examples) — C#, Python, and Java examples

### Available methods

| Method           | Description                                    |
| ---------------- | ---------------------------------------------- |
| `SendSMSBasic`   | Send a text message to a mobile phone or pager |
| `SendFaxBasic`   | Send a fax without attachments                 |
| `SendFax`        | Send a fax with attachments                    |
| `SendVoiceBasic` | Send a voice message                           |
| `GetStateBasic`  | Query the status of a sent message             |

All methods are part of the **`eCall`** class.


# Getting started

Connect to the SOAP endpoint, understand the message flow, and choose the right method.

Use the eCall SOAP webservice to send SMS, fax, and voice messages.

### Prerequisites

* You need an active **business account** with eCall.
* Webservice access must be enabled on your account.

### Message flow

Sending a message involves up to four steps:

1. Send the job to eCall.
2. Receive the result message.
3. Optionally receive a notification by SMS, pager, or email.
4. Optionally receive a recipient reply.

### Available methods

| Method           | Description                                    |
| ---------------- | ---------------------------------------------- |
| `SendSMSBasic`   | Send a text message to a mobile phone or pager |
| `SendFaxBasic`   | Send a fax without attachments                 |
| `SendFax`        | Send a fax with attachments                    |
| `SendVoiceBasic` | Send a voice message                           |
| `GetStateBasic`  | Query the status of a sent message             |

All methods are part of the **`eCall`** class.

### Endpoint

Use the following WSDL endpoint:

```
https://soap.ecall.ch/eCall.asmx
```

The endpoint exposes the WSDL and all available SOAP methods.

{% hint style="warning" %}
Parameters are case-sensitive. Use the exact capitalization.
{% endhint %}

### Transport and SOAP versions

The service is only available over **TLS 1.2**.

| Version  | Status               |
| -------- | -------------------- |
| SOAP 1.2 | Recommended          |
| SOAP 1.1 | Will be discontinued |

{% hint style="info" %}
Use SOAP 1.2 for all new integrations.
{% endhint %}

### .NET integration

In Visual Studio, add a web reference or connected service that points to:

```
https://soap.ecall.ch/eCall.asmx
```


# Send methods

Required and optional fields for SMS, fax, and voice message methods.

### Send SMS — `SendSMSBasic`

**Required:** `Address`, `Message`, `AccountName`, `AccountPassword`

**Optional:** `JobID`

**Extended features:** `SMSCallback`, `Notification`, `AlwaysNotification`, `Answer`, `SendDate`, `MsgType`, `NoLog`

{% hint style="info" %}
The `Address` parameter supports pager messages with an authorization code. Append the code with a colon.

```
Address=0041740000000:1234
```

{% endhint %}

### Send fax without attachments — `SendFaxBasic`

**Required:** `Address`, `Message`, `AccountName`, `AccountPassword`

**Optional:** `JobID`, `FromText`, `Subject`, `SendDate`

### Send fax with attachments — `SendFax`

**Required:** `Address`, `Message`, `AccountName`, `AccountPassword`

**Optional:** `JobID`

**Extended features:** `FaxHeaderID`, `FaxHeaderInfo`, `Subject`, `SendDate`, `CallingNumber`, `MaxRetries`, `RetriesTimeIntervallInMin`, `NoCoversheet`, `Notification`, `Attachments`

The `Attachments` array supports up to 10 entries.

| Field         | Description                  |
| ------------- | ---------------------------- |
| `FileName`    | File name without path       |
| `FileContent` | File content, Base64-encoded |

{% hint style="info" %}
Some fax control values are passed through `TokenFields`.
{% endhint %}

### Send voice message — `SendVoiceBasic`

**Required:** `Address`, `Message`, `AccountName`, `AccountPassword`

**Optional:** `JobID`

**Extended features:** `MessageLanguage`, `FromText`, `SendDate`


# Parameter reference

Field-level reference for request parameters and fax token fields.

### Required fields

| Parameter         | Description                                                                                                                                                                                    |
| ----------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `AccountName`     | Name of the eCall account, for example `johnsmith`                                                                                                                                             |
| `AccountPassword` | Password of the eCall account                                                                                                                                                                  |
| `Address`         | Full phone number, for example `0041791112233`. Separate multiple numbers with `;`, or use a person or group name from the eCall address book. Pager with authorization code: `074123456:1234` |
| `Message`         | Message text                                                                                                                                                                                   |

### Optional fields

| Parameter            | Description                                                                                                                                                                                                                                      |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `JobID`              | Unique identifier for the message, for example `123AB`. Required for later status queries.                                                                                                                                                       |
| `SendDate`           | Scheduled send time, for example `2004-12-20 20:31:50`                                                                                                                                                                                           |
| `Subject`            | Title of the message                                                                                                                                                                                                                             |
| `NoLog`              | Do not write to the log. Values: `""`, `"true"`, `"false"`. Default: `false`                                                                                                                                                                     |
| `MsgType`            | Message type. Supported value: `Flash`                                                                                                                                                                                                           |
| `SMSCallback`        | Callback number for SMS or mobile only. Up to 16 numeric or 11 alphanumeric characters. Business numbers are not allowed. Ignored if `Answer` is set.                                                                                            |
| `Answer`             | Reply destination for mobile only. Use a mobile or pager number, an email address, or `""` for log entry only. Max. 100 characters. Overrides `SMSCallback`.                                                                                     |
| `FromText`           | Sender identification text or number, for example `0791234567`                                                                                                                                                                                   |
| `Notification`       | Recipient addresses for delivery status forwarding. Supported values: mobile number, email address, HTTP(S) URL, or `""` for log only. Separate multiple values with `;`. Max. 100 characters. Replaced by `AlwaysNotification` if both are set. |
| `AlwaysNotification` | Recipient address for notification on every status change. Supports SMS, pager, or email. Overrides `Notification` if set.                                                                                                                       |
| `MessageLanguage`    | `SendVoiceBasic` only. Text-to-speech language. Values: `DE`, `FR`, `IT`, `EN`. Default: auto-detect.                                                                                                                                            |
| `FaxHeaderID`        | Fax only. Sender number in the fax header, for example `+41 44 123 45 67`                                                                                                                                                                        |
| `FaxHeaderInfo`      | Fax only. Additional text in the fax header, for example `F24 Schweiz AG`                                                                                                                                                                        |
| `Attachments`        | `SendFax` only. Documents to attach. Maximum: 10 files. Each entry contains `FileName` and `FileContent`.                                                                                                                                        |
| `TokenFields`        | Fax only. Additional control fields. Format: `<Name1>;=<Value1>;:<Name2>;=<Value2>`                                                                                                                                                              |

### TokenFields

Use `TokenFields` for fax-specific control values.

| Token                       | Description                                |
| --------------------------- | ------------------------------------------ |
| `CallingNumber`             | Sender number for fax transmission         |
| `MaxRetries`                | Maximum number of retry attempts           |
| `RetriesTimeIntervallInMin` | Wait time between retries in minutes       |
| `NoCoversheet`              | Do not use a cover sheet. Default: `false` |

Example:

```
MaxRetries;=6;:RetriesTimeIntervallInMin;=20
```

This retries the fax up to 6 times with a 20-minute interval.


# Status queries

Use GetStateBasic to check delivery state and read the job response.

### GetStateBasic

Use this method to query the status of a sent message.

To use it, send the original message with a `JobID`.

**Required:** `AccountName`, `AccountPassword`, `JobID`

**Optional:** `Address`

{% hint style="info" %}
For jobs sent to multiple recipients, specify `Address`. Use international format with leading zeros and no spaces, for example `0041791234567`.

If you omit `Address`, the response returns the last job within the `JobID`.
{% endhint %}

### Response structure

```
ServiceResponse
├── ResponseCode     Response code per response table (0 = OK)
└── ResponseText     Response text per response table

JobResponse          (only populated when ResponseCode = 0)
├── JobID            JobID of the sent message
├── Address          Recipient number
├── JobType          Job type
├── SendState        Send status
├── ErrorState       Error status for fax. For other types, use SendState.
├── PointsUsed       Number of credits consumed
└── FinishDate       Date and time when the job was completed
```

{% hint style="info" %}
If `ResponseCode` is not `0`, `JobResponse` is empty.
{% endhint %}

### Standard webservice response

All web methods return this structure:

| Parameter      | Description                                                              |
| -------------- | ------------------------------------------------------------------------ |
| `ResponseCode` | `0` means the job was accepted. Any other value means an error occurred. |
| `ResponseText` | Description of the response code                                         |

{% hint style="warning" %}
An accepted job is not the same as a delivered job. Use status queries, logs, or notifications to confirm delivery.
{% endhint %}

### HTTP headers

#### Client request ID

Set this request header to correlate responses with your own request IDs:

```
x-f24-client-request-id
```

Maximum length: 100 characters.

If you send it, the service echoes the same value in the response.

#### Server request ID

Every response includes this header:

```
x-f24-request-id
```

Provide this ID to support together with the request time, account name, and operation type.


# Response codes and statuses

Reference for response codes, job types, send states, and error states.

### Response codes

| Code    | ResponseText                                          | Description                                                                                                            |
| ------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `0`     | OK                                                    | Message submitted successfully.                                                                                        |
| `11000` | SyntaxError                                           | Syntax error.                                                                                                          |
| `11001` | PermissionDenied                                      | Access denied.                                                                                                         |
| `11100` | AdrAdCInvalid                                         | Invalid or incorrect recipient address.                                                                                |
| `11101` | AdrNAdInvalid                                         | Invalid or incorrect confirmation address.                                                                             |
| `11102` | AdrAdCMissing                                         | No recipient address provided.                                                                                         |
| `11103` | AdrNAdMissing                                         | No notification address provided.                                                                                      |
| `11104` | AdrAdCTooMany                                         | Too many recipient addresses submitted.                                                                                |
| `11105` | AdrAdCNotAllowed                                      | Recipient address is outside the defined range.                                                                        |
| `11106` | AdrCountryNotWhitelisted                              | Destination country not whitelisted for this account                                                                   |
| `11107` | AdrCountryWhitelistLimitExceeded                      | Daily limit for destination country exceeded (country is blocked)                                                      |
| `11108` | AdrCountryWhitelistLimitReachedButNotBlockedCountries | More than one receiver: Daily limit for at least one destination country would be exceeded (countries are not blocked) |
| `11200` | MsgNoCharacters                                       | No message content provided.                                                                                           |
| `11201` | MsgInvalidCharacters                                  | Invalid characters in the message.                                                                                     |
| `11202` | MsgSendTimeInvalid                                    | Invalid send time specified.                                                                                           |
| `11203` | MsgSendTimeNotAllowed                                 | Send time is outside the allowed time window.                                                                          |
| `11204` | MsgTooLong                                            | SMS or pager only. Message is too long.                                                                                |
| `11300` | AccNoUser                                             | Unknown user.                                                                                                          |
| `11301` | AccNoUnits                                            | Insufficient credits.                                                                                                  |
| `11303` | AccNoFreeUnits                                        | Insufficient free credits.                                                                                             |
| `11400` | CallSystemInvalid                                     | Invalid alerting system.                                                                                               |
| `11401` | CallSystemInvalidForUser                              | Invalid alerting system for this user.                                                                                 |
| `11402` | CallSystemNotSupported                                | Alerting system not supported.                                                                                         |
| `11403` | CallSystemConfused                                    | Alerting system temporarily unavailable.                                                                               |
| `11500` | IDMissing                                             | No ID provided.                                                                                                        |
| `11501` | IDInvalid                                             | ID could not be found.                                                                                                 |
| `11502` | IDDoesNotExist                                        | ID does not exist in the system.                                                                                       |
| `11600` | StateAlreadyTransmitted                               | Message has already been sent.                                                                                         |
| `11700` | DataReadError                                         | Data content could not be read.                                                                                        |
| `11800` | CBMsgError                                            | Callback contains a forbidden number or text.                                                                          |
| `11810` | AnswerInvalid                                         | Answer contains an invalid address.                                                                                    |
| `11904` | Too many attachments                                  | Too many attachments. Maximum: 10.                                                                                     |
| `11905` | Attachment(s) too large                               | At least one attachment exceeds the size limit. Maximum: 5 MB.                                                         |
| `11906` | File type not supported                               | Unsupported file type.                                                                                                 |
| `11907` | Error while processing the attachments                | Unexpected error while processing attachments.                                                                         |
| `11908` | Error while saving the attachments                    | Unexpected error while saving attachments.                                                                             |
| `11910` | Job not found in Log                                  | Job could not be found in the log.                                                                                     |
| `11911` | JobID required                                        | A `JobID` is required for status queries.                                                                              |
| `11912` | Job is scheduled                                      | Job is scheduled for a future time.                                                                                    |
| `11913` | Job in progress                                       | Job is currently being processed.                                                                                      |
| `11914` | Attachment name exceedes char limit                   | Attachment name exceeds the character limit.                                                                           |
| `11999` | Unknown error                                         | Unknown error.                                                                                                         |

Supported attachment file types for `11906` checks:

```
bmp, pdf, doc, docx, rtf, ppt, pptx, dok, snp, gif, tif, tiff,
html, txt, jpg, wir, jpeg, xls, xlsx, zip
```

### Job types

| Number | Description          |
| ------ | -------------------- |
| `1`    | SMS or pager message |
| `2`    | Email message        |
| `4`    | Delete request       |
| `5`    | Voice message        |
| `6`    | Fax message          |

### SendState

#### SMS and pager

| Code | Description                                             |
| ---- | ------------------------------------------------------- |
| `0`  | Sending in progress                                     |
| `1`  | Sent successfully                                       |
| `2`  | Send error. Check `ErrorState`.                         |
| `3`  | Sending and waiting for status confirmation             |
| `8`  | Sent successfully and delivery confirmed                |
| `9`  | Sent successfully and waiting for delivery confirmation |
| `10` | Sent successfully without delivery confirmation         |

#### Voice

| Code | Description                                                    |
| ---- | -------------------------------------------------------------- |
| `30` | Voice message is being transferred to the voice system         |
| `31` | Voice message was transferred successfully                     |
| `32` | Error while transferring to the voice system                   |
| `33` | Voice message was played successfully                          |
| `34` | Voice message was played successfully and a reply was received |
| `35` | Voice message has an invalid phone number                      |
| `36` | Voice message was played successfully with confirmation        |
| `37` | No connection within the defined time period                   |
| `38` | Recipient is being called                                      |
| `39` | Recipient could not be reached                                 |

#### Fax

| Code  | Description                                           |
| ----- | ----------------------------------------------------- |
| `41`  | Fax message was transmitted successfully              |
| `42`  | Transmission ended with an error. Check `ErrorState`. |
| `43`  | Transmission is waiting                               |
| `44`  | Job created                                           |
| `101` | Job group submitted to the gateway                    |
| `201` | Document conversion started                           |
| `202` | Individual file converted                             |
| `301` | Document merge started                                |
| `401` | Transmission started                                  |
| `402` | Individual job completed                              |
| `501` | Entire job group completed                            |

### ErrorState

#### SMS and pager

| Code   | Description                                                 |
| ------ | ----------------------------------------------------------- |
| `71`   | No job accepted message from the gateway                    |
| `1000` | Connection dropped                                          |
| `1001` | Timeout. Page could not be sent successfully.               |
| `5111` | Text too long                                               |
| `5112` | Invalid phone number                                        |
| `5120` | Destination number is tone-only. Message not permitted.     |
| `5121` | Destination number is numeric. Invalid character.           |
| `5155` | Network congestion                                          |
| `5164` | All paging zones are disrupted or overloaded                |
| `5502` | Provider message: syntax error                              |
| `5504` | Provider message: maximum messages for the address exceeded |
| `5506` | Provider message: ADC invalid                               |
| `5509` | Invalid phone number                                        |
| `5510` | Too many messages to the same recipient                     |
| `5511` | Too many messages to the same recipient with the same text  |
| `5512` | This `JobID` has already been used by this sender           |
| `5513` | Callback, address, or message content is on the blocklist   |
| `5514` | Blocked by outgoing filter rules                            |
| `9020` | Destination country not whitelisted                         |
| `9021` | Too many messages to this country                           |

#### Fax

| Code   | Description                                                               |
| ------ | ------------------------------------------------------------------------- |
| `6000` | Unknown error                                                             |
| `6002` | Error converting documents                                                |
| `6004` | Aborted. No answer.                                                       |
| `6005` | Nothing to send in this job. Cannot create `JobID`.                       |
| `6006` | Busy                                                                      |
| `6007` | Rejected                                                                  |
| `6009` | Unknown number                                                            |
| `6010` | Invalid number                                                            |
| `6011` | Number changed                                                            |
| `6013` | Remote party is not a fax machine                                         |
| `6014` | Connection dropped by sender                                              |
| `6015` | Connection dropped by recipient                                           |
| `6016` | File format not supported                                                 |
| `6017` | No file access                                                            |
| `6900` | Fax sent, but the connection was not terminated properly by the recipient |


# Code examples

SOAP client setup and working examples for C#, Python, and Java.

### Setup and dependencies

{% tabs %}
{% tab title="C# (.NET)" %}
Add a WSDL reference in Visual Studio:

1. Right-click the project.
2. Select **Add Connected Service** or **Add Web Reference**.
3. Enter `https://soap.ecall.ch/eCall.asmx`.
4. Set a namespace, for example `eCallService`.

You can also use `dotnet-svcutil`:

```bash
dotnet tool install --global dotnet-svcutil
dotnet-svcutil https://soap.ecall.ch/eCall.asmx?WSDL
```

{% endtab %}

{% tab title="Python" %}

```bash
pip install zeep
```

{% endtab %}

{% tab title="Java" %}
Generate JAX-WS client code:

```bash
wsimport -keep -p com.ecall.soap https://soap.ecall.ch/eCall.asmx?WSDL
```

Or add the runtime dependency:

```xml
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>4.0.0</version>
</dependency>
```

{% endtab %}
{% endtabs %}

### Send SMS — `SendSMSBasic`

{% tabs %}
{% tab title="C# (.NET)" %}

```csharp
using eCallService;

var client = new eCallSoapClient(
    eCallSoapClient.EndpointConfiguration.eCallSoap12
);

var request = new SendSMSBasicRequest
{
    AccountName     = "johnsmith",
    AccountPassword = "secretpassword",
    Address         = "0041791234567",
    Message         = "Hello from eCall!",
    JobID           = "SMS-001"
};

var response = await client.SendSMSBasicAsync(request);

if (response.ResponseCode == 0)
{
    Console.WriteLine("SMS successfully submitted.");
}
else
{
    Console.WriteLine($"Error {response.ResponseCode}: {response.ResponseText}");
}
```

{% endtab %}

{% tab title="Python" %}

```python
from zeep import Client
from zeep.transports import Transport
import requests

session = requests.Session()
transport = Transport(session=session, timeout=30)

client = Client(
    wsdl="https://soap.ecall.ch/eCall.asmx?WSDL",
    transport=transport
)

service = client.bind("eCall", "eCallSoap12")

response = service.SendSMSBasic(
    AccountName="johnsmith",
    AccountPassword="secretpassword",
    Address="0041791234567",
    Message="Hello from eCall!",
    JobID="SMS-001"
)

if response.ResponseCode == 0:
    print("SMS successfully submitted.")
else:
    print(f"Error {response.ResponseCode}: {response.ResponseText}")
```

{% endtab %}

{% tab title="Java" %}

```java
import com.ecall.soap.*;

ECall service = new ECall();
ECallSoap port = service.getECallSoap12();

SendSMSBasicRequest request = new SendSMSBasicRequest();
request.setAccountName("johnsmith");
request.setAccountPassword("secretpassword");
request.setAddress("0041791234567");
request.setMessage("Hello from eCall!");
request.setJobID("SMS-001");

SendSMSBasicResponse response = port.sendSMSBasic(request);

if (response.getResponseCode() == 0) {
    System.out.println("SMS successfully submitted.");
} else {
    System.out.printf("Error %d: %s%n",
        response.getResponseCode(),
        response.getResponseText());
}
```

{% endtab %}
{% endtabs %}

### Send fax with attachment — `SendFax`

{% tabs %}
{% tab title="C# (.NET)" %}

```csharp
using System.IO;
using eCallService;

var client = new eCallSoapClient(
    eCallSoapClient.EndpointConfiguration.eCallSoap12
);

byte[] pdfBytes  = File.ReadAllBytes("document.pdf");
string pdfBase64 = Convert.ToBase64String(pdfBytes);

var request = new SendFaxRequest
{
    AccountName     = "johnsmith",
    AccountPassword = "secretpassword",
    Address         = "0041441234567",
    Message         = "Please find the document attached.",
    Subject         = "Test fax",
    JobID           = "FAX-001",
    FaxHeaderID     = "+41 44 123 45 67",
    FaxHeaderInfo   = "F24 Schweiz AG",
    TokenFields     = "MaxRetries;=3;:RetriesTimeIntervallInMin;=10",
    Attachments     = new[]
    {
        new Attachment { FileName = "document.pdf", FileContent = pdfBase64 }
    }
};

var response = await client.SendFaxAsync(request);
Console.WriteLine(response.ResponseCode == 0 ? "Fax submitted." : $"Error: {response.ResponseText}");
```

{% endtab %}

{% tab title="Python" %}

```python
import base64
from zeep import Client
from zeep.transports import Transport
import requests

session = requests.Session()
client = Client(
    wsdl="https://soap.ecall.ch/eCall.asmx?WSDL",
    transport=Transport(session=session, timeout=30)
)
service = client.bind("eCall", "eCallSoap12")

with open("document.pdf", "rb") as f:
    pdf_base64 = base64.b64encode(f.read()).decode("utf-8")

Attachment = client.get_type("ns0:Attachment")
attachment = Attachment(FileName="document.pdf", FileContent=pdf_base64)

response = service.SendFax(
    AccountName="johnsmith",
    AccountPassword="secretpassword",
    Address="0041441234567",
    Message="Please find the document attached.",
    Subject="Test fax",
    JobID="FAX-001",
    FaxHeaderID="+41 44 123 45 67",
    FaxHeaderInfo="F24 Schweiz AG",
    TokenFields="MaxRetries;=3;:RetriesTimeIntervallInMin;=10",
    Attachments=[attachment]
)

print("OK" if response.ResponseCode == 0 else f"Error: {response.ResponseText}")
```

{% endtab %}

{% tab title="Java" %}

```java
import java.nio.file.*;
import java.util.Base64;
import com.ecall.soap.*;

ECall service = new ECall();
ECallSoap port = service.getECallSoap12();

byte[] pdfBytes = Files.readAllBytes(Path.of("document.pdf"));
String pdfBase64 = Base64.getEncoder().encodeToString(pdfBytes);

Attachment attachment = new Attachment();
attachment.setFileName("document.pdf");
attachment.setFileContent(pdfBase64);

SendFaxRequest request = new SendFaxRequest();
request.setAccountName("johnsmith");
request.setAccountPassword("secretpassword");
request.setAddress("0041441234567");
request.setMessage("Please find the document attached.");
request.setSubject("Test fax");
request.setJobID("FAX-001");
request.setFaxHeaderID("+41 44 123 45 67");
request.setFaxHeaderInfo("F24 Schweiz AG");
request.setTokenFields("MaxRetries;=3;:RetriesTimeIntervallInMin;=10");
request.getAttachments().add(attachment);

SendFaxResponse response = port.sendFax(request);
System.out.println(response.getResponseCode() == 0 ? "Fax submitted." : "Error: " + response.getResponseText());
```

{% endtab %}
{% endtabs %}

### Send voice message — `SendVoiceBasic`

{% tabs %}
{% tab title="C# (.NET)" %}

```csharp
var request = new SendVoiceBasicRequest
{
    AccountName      = "johnsmith",
    AccountPassword  = "secretpassword",
    Address          = "0041791234567",
    Message          = "Attention! This is a test message from eCall.",
    MessageLanguage  = "EN",
    JobID            = "VOICE-001"
};

var response = await client.SendVoiceBasicAsync(request);
```

{% endtab %}

{% tab title="Python" %}

```python
response = service.SendVoiceBasic(
    AccountName="johnsmith",
    AccountPassword="secretpassword",
    Address="0041791234567",
    Message="Attention! This is a test message from eCall.",
    MessageLanguage="EN",
    JobID="VOICE-001"
)
```

{% endtab %}

{% tab title="Java" %}

```java
SendVoiceBasicRequest request = new SendVoiceBasicRequest();
request.setAccountName("johnsmith");
request.setAccountPassword("secretpassword");
request.setAddress("0041791234567");
request.setMessage("Attention! This is a test message from eCall.");
request.setMessageLanguage("EN");
request.setJobID("VOICE-001");

SendVoiceBasicResponse response = port.sendVoiceBasic(request);
```

{% endtab %}
{% endtabs %}

### Query send status — `GetStateBasic`

{% tabs %}
{% tab title="C# (.NET)" %}

```csharp
var request = new GetStateBasicRequest
{
    AccountName     = "johnsmith",
    AccountPassword = "secretpassword",
    JobID           = "SMS-001",
    Address         = "0041791234567"
};

var response = await client.GetStateBasicAsync(request);

if (response.ResponseCode == 0)
{
    var job = response.JobResponse;
    Console.WriteLine($"Status:    {job.SendState}");
    Console.WriteLine($"Completed: {job.FinishDate}");
    Console.WriteLine($"Credits:   {job.PointsUsed}");
}
```

{% endtab %}

{% tab title="Python" %}

```python
response = service.GetStateBasic(
    AccountName="johnsmith",
    AccountPassword="secretpassword",
    JobID="SMS-001",
    Address="0041791234567"
)

if response.ResponseCode == 0:
    job = response.JobResponse
    print(f"Status:    {job.SendState}")
    print(f"Completed: {job.FinishDate}")
    print(f"Credits:   {job.PointsUsed}")
else:
    print(f"Error {response.ResponseCode}: {response.ResponseText}")
```

{% endtab %}

{% tab title="Java" %}

```java
GetStateBasicRequest request = new GetStateBasicRequest();
request.setAccountName("johnsmith");
request.setAccountPassword("secretpassword");
request.setJobID("SMS-001");
request.setAddress("0041791234567");

GetStateBasicResponse response = port.getStateBasic(request);

if (response.getResponseCode() == 0) {
    JobResponse job = response.getJobResponse();
    System.out.println("Status:    " + job.getSendState());
    System.out.println("Completed: " + job.getFinishDate());
    System.out.println("Credits:   " + job.getPointsUsed());
}
```

{% endtab %}
{% endtabs %}


# HTTPS Interface

Send SMS, fax, and voice messages through the eCall HTTP(S) interface, query delivery status, and receive callbacks.

Use the eCall HTTP(S) interface to send messages by calling URL endpoints directly.

### At a glance

* Base URL: `https://url.ecall.ch/`
* Request style: URL parameters with **GET** or **POST**
* Supports: SMS, fax, voice, status queries, callbacks, and inbound SMS forwarding

{% hint style="info" %}
Parameter names are case-insensitive. Send all content as UTF-8.
{% endhint %}

### Core features

* Send SMS, fax, and voice messages.
* Query delivery status with `Api/State`.
* Receive replies, notifications, and inbound SMS events.

### In this section

* [Getting started](/api-references/https-interface/getting-started) — prerequisites, request format, endpoint details, and browser testing
* [Send methods](/api-references/https-interface/send-methods) — SMS, fax, and voice endpoints, parameters, and examples
* [Status queries](/api-references/https-interface/status-queries) — query message status and interpret response codes
* [Message cache](/api-references/https-interface/message-cache) — read and delete cached inbound SMS messages
* [Callbacks and inbound SMS](/api-references/https-interface/callbacks-and-inbound-sms) — replies, delivery notifications, and inbound forwarding
* [Response codes and headers](/api-references/https-interface/response-codes-and-headers) — HTTP statuses, eCall result codes, request IDs, and source IPs


# Getting started

Prerequisites, request format, endpoint details, and a quick browser test.

### Core features

* Send SMS, fax, and voice messages.
* Query message status with `JobID` or a time range.
* Receive callbacks and forward inbound SMS.

### Prerequisites

* You need an eCall business account.
* A standard account is enough for a 30-day test.
* The HTTP interface must be enabled on your account.
* Your software must be able to call a URL.

### Request format

Messages can be submitted with **GET** or **POST**.

The interface uses these rules:

* Parameters use `key=value` pairs.
* Parameters are separated by `&`.
* IDs are case-insensitive.
* Send all characters as UTF-8.
* URL-encode reserved characters when needed.

For `POST`, keep `&` separators when the content type is `application/x-www-form-urlencoded`.

**Example:**

```
https://url.ecall.ch/api/sms?username=johnsmith&password=s3cr3t&address=0041791234567&message=This%20is%20a%20test
```

{% hint style="info" %}
Account settings are cached for performance. Changes can take some time to apply.
{% endhint %}

### Endpoint

Use this base URL for send jobs:

```
https://url.ecall.ch/
```

### Testing the interface

You can test the interface directly in a browser.

{% stepper %}
{% step %}

### Open your browser

{% endstep %}

{% step %}

### Enter a test URL

Replace `username`, `password`, and `address` with your values.

```
https://url.ecall.ch/api/sms?username=johnsmith&password=s3cr3t&address=0041791234567&message=This%20is%20a%20test
```

```
https://url.ecall.ch/Api/Sms?Address=%2B41791112233&Message=Test&Username=foo&Password=bar
```

{% endstep %}

{% step %}

### Check the response

The service returns HTTP status codes and eCall result codes.
{% endstep %}
{% endstepper %}

### Reference document

* Specification version: `2.22`
* Source document date: `2025-03-17`
* Owner: `F24 Schweiz AG, Wollerau, Switzerland`
* Classification: `public`


# Send methods

Endpoints, parameters, and examples for SMS, fax, and voice messages.

### Send SMS — `Api/Sms`

#### Required parameters

| Parameter  | Description                                                                                                                               |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------------------- |
| `UserName` | Account username or the username of custom interface credentials under **Interfaces**                                                     |
| `Password` | User password                                                                                                                             |
| `Address`  | Full pager or mobile number in international format, multiple numbers separated by semicolons, or a person or group from the address book |
| `Message`  | Message text to send                                                                                                                      |

{% hint style="info" %}
Validation stops at the first invalid address.
{% endhint %}

#### Optional parameters

| Parameter  | Description                                                   |
| ---------- | ------------------------------------------------------------- |
| `JobID`    | Unique client-defined message identifier, up to 50 characters |
| `SendDate` | Scheduled date and time in ISO 8601 format                    |

#### Extended features

| Parameter             | Description                                                                                                                     |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `NotificationAddress` | Delivery notification target. Supports mobile numbers, email addresses, or URLs. Separate multiple values with `;`              |
| `NotificationLevel`   | `0` for status when available, `1` for the last possible tracking point, `2` for level 1 plus delayed send, `3` only on failure |
| `CallBack`            | Sender ID, up to 16 numeric or 11 alphanumeric characters                                                                       |
| `Answer`              | Reply forwarding address. If set, `CallBack` is ignored                                                                         |
| `MsgType`             | `Normal` or `Flash`                                                                                                             |
| `NoLog`               | Set to `1` to exclude the message from the log                                                                                  |

#### Examples

**Minimal request:**

```
/Api/Sms?UserName=xxx&Password=yyy&Address=%2B41791112233&Message=Test%20message
```

**With a sender ID:**

```
/Api/Sms?UserName=xxx&Password=yyy&Address=%2B41791112233&Message=Test%20message&CallBack=%2B41791234567
```

**As a flash SMS without logging:**

```
/Api/Sms?UserName=xxx&Password=yyy&Address=%2B41791112233&Message=Test%20message&MsgType=Flash&NoLog=1
```

{% hint style="info" %}
SMS messages support up to 1530 characters with GSM encoding or 1570 with UCS-2. Longer content is split into up to 10 pages.
{% endhint %}

### Send fax — `Api/Fax`

#### Required parameters

| Parameter  | Description                                                                                                                   |
| ---------- | ----------------------------------------------------------------------------------------------------------------------------- |
| `UserName` | Account username or custom interface credentials username                                                                     |
| `Password` | User password                                                                                                                 |
| `Address`  | Full fax number in international format, multiple numbers separated by semicolons, or a person or group from the address book |
| `Message`  | Fax message text                                                                                                              |

#### Optional parameters

| Parameter  | Description                                                   |
| ---------- | ------------------------------------------------------------- |
| `JobID`    | Unique client-defined message identifier, up to 50 characters |
| `SendDate` | Scheduled date and time in ISO 8601 format                    |

#### Extended features

| Parameter                | Description                                        |
| ------------------------ | -------------------------------------------------- |
| `CallingNumber`          | Sender number in international format              |
| `Subject`                | Message title shown on the cover sheet             |
| `HeaderId`               | Sender header line printed at the top of each page |
| `HeaderInfo`             | Additional header text printed next to `HeaderId`  |
| `NumberOfRetries`        | Maximum retry attempts. Default: `0`               |
| `RetryIntervalInMinutes` | Time between retry attempts in minutes             |

#### Examples

**Minimal request:**

```
/Api/Fax?UserName=xxx&Password=yyy&Address=%2B41447873071&Message=Test%20message
```

**With a subject, calling number, and scheduled send:**

```
/Api/Fax?UserName=xxx&Password=yyy&Address=%2B41447873071&Message=Test%20message&Subject=Test&CallingNumber=%2B41431234576&SendDate=2026-06-15T14:30:00&JobID=123AB
```

### Send voice message — `Api/Voice`

#### Required parameters

| Parameter  | Description                                               |
| ---------- | --------------------------------------------------------- |
| `UserName` | Account username or custom interface credentials username |
| `Password` | User password                                             |
| `Address`  | Full recipient phone number in international format       |
| `Message`  | Voice message text converted to speech                    |

#### Optional parameters

| Parameter  | Description                                                   |
| ---------- | ------------------------------------------------------------- |
| `JobID`    | Unique client-defined message identifier, up to 50 characters |
| `SendDate` | Scheduled date and time in ISO 8601 format                    |

#### Extended features

| Parameter  | Description                                     |
| ---------- | ----------------------------------------------- |
| `Language` | `DE`, `FR`, `IT`, or `EN`. Default: auto-detect |
| `FromText` | Sender name read after the message              |

#### Examples

**Minimal request:**

```
/Api/Voice?UserName=xxx&Password=yyy&Address=%2B41447873070&Message=Test%20message
```

**With a sender name, language, and scheduled send:**

```
/Api/Voice?UserName=xxx&Password=yyy&Address=%2B41447873070&Message=Test%20message&FromText=John%20Smith&Language=EN&SendDate=2026-06-15T14:30:00&JobID=123AB
```


# Status queries

Query message status by JobID or time range and interpret status codes.

Use `Api/State` to query the current status of a specific message or a time range.

### Query a specific message

Send the original job with a `JobID`.

**Endpoint:** `Api/State`

| Parameter  | Description                             |
| ---------- | --------------------------------------- |
| `UserName` | Username                                |
| `Password` | Password                                |
| `JobID`    | Unique identifier from the original job |

**Example:**

```
/Api/State?Username=xxx&Password=yyy&JobID=1234ABCD
```

### Query a time range

**Endpoint:** `Api/State`

| Parameter   | Description                                                 |
| ----------- | ----------------------------------------------------------- |
| `UserName`  | Username                                                    |
| `Password`  | Password                                                    |
| `StartDate` | Start date and time of the original jobs in ISO 8601 format |
| `EndDate`   | End date and time of the original jobs in ISO 8601 format   |

{% hint style="info" %}
Without a timezone, the interface uses the local eCall timezone.
{% endhint %}

{% hint style="warning" %}
If the result contains more than 1000 status objects, the service returns HTTP `400 Bad Request` with eCall result code `11701`.
{% endhint %}

**Example:**

```
/Api/State?Username=xxx&Password=yyy&StartDate=2019-12-01T10:00:00&EndDate=2019-12-01T13:00:00
```

### Response structure

The response is XML. Multiple statuses are wrapped in `<Statuses>`.

```xml
<Statuses>
  <Status>
    <StatusCode></StatusCode>
    <StatusText></StatusText>
    <TimeStamp></TimeStamp>
    <Address></Address>
    <JobID></JobID>
    <UsedUnits></UsedUnits>
  </Status>
  <Status>
    ...
  </Status>
</Statuses>
```

### Status codes — SMS and pager

| Status Code | Status Text                                           | Description                                                                                                      |
| ----------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------- |
| `-1`        | Unknown                                               | Status is unknown                                                                                                |
| `99`        | Scheduled                                             | Scheduled message                                                                                                |
| `0`         | Transmitting                                          | Sending in progress                                                                                              |
| `1`         | Ok                                                    | Sent successfully                                                                                                |
| `3`         | Waiting for result                                    | Sending and waiting for status confirmation                                                                      |
| `8`         | Ok (confirmed)                                        | Sent successfully with delivery confirmation                                                                     |
| `9`         | Ok (waiting for confirmation)                         | Sent successfully and awaiting confirmation                                                                      |
| `10`        | Ok (not confirmed)                                    | Sent successfully without confirmation                                                                           |
| `71`        | Not accepted by gateway                               | No job accepted message from the gateway                                                                         |
| `1000`      | Disconnected                                          | Connection dropped                                                                                               |
| `1001`      | Timeout                                               | Message could not be sent successfully                                                                           |
| `3020`      | Connection refused                                    | Remote host refused the connection                                                                               |
| `5111`      | Text too long                                         | Message text is too long                                                                                         |
| `5112`      | Invalid number                                        | Invalid phone number                                                                                             |
| `5120`      | Message invalid                                       | Destination is tone-only and does not accept messages                                                            |
| `5121`      | Invalid char in number                                | Destination number contains an invalid character                                                                 |
| `5155`      | Too much traffic                                      | Network congestion                                                                                               |
| `5164`      | Call system troubled                                  | All paging zones are disrupted or overloaded                                                                     |
| `5502`      | Syntax error                                          | Provider returned a syntax error                                                                                 |
| `5504`      | Too many messages                                     | Maximum message count for the address was exceeded                                                               |
| `5506`      | ADC invalid                                           | Analog-to-digital converter invalid                                                                              |
| `5509`      | Invalid number                                        | Invalid phone number                                                                                             |
| `5510`      | Too many messages for same receiver                   | Too many messages to the same recipient                                                                          |
| `5511`      | Too many messages with same content for same receiver | Duplicate high-volume content to the same recipient                                                              |
| `5512`      | Duplicate job id                                      | The sender already used this `JobID`                                                                             |
| `5513`      | Exists in the blacklist                               | Callback, address, or message content is blocked                                                                 |
| `5514`      | Blocked by out-bound filter rule                      | Outgoing filter rules blocked the message                                                                        |
| `9020`      | Destination country not whitelisted                   | The destination country is not whitelisted for this account.                                                     |
| `9021`      | Too many messages to this country                     | The daily limit for the destination country in the account’s settings has been exceeded. The country is blocked. |

### Status codes — voice

| Status Code | Status Text          | Description                                   |
| ----------- | -------------------- | --------------------------------------------- |
| `30`        | Transmitting         | Voice message is being transferred            |
| `31`        | Ok                   | Voice message transferred successfully        |
| `32`        | Failed               | Error while transferring the voice message    |
| `33`        | Played               | Voice message played successfully             |
| `34`        | Played with feedback | Voice message played and a reply was received |
| `35`        | Invalid number       | Invalid phone number                          |
| `36`        | Played with receipt  | Voice message played with confirmation        |
| `37`        | Connection timed out | No connection within the defined time period  |
| `38`        | In progress          | Recipient is being called                     |
| `39`        | Next try in 15 min   | Recipient could not be reached                |

### Status codes — fax

| Status Code | Status Text                   | Description                                        |
| ----------- | ----------------------------- | -------------------------------------------------- |
| `41`        | Ok                            | Fax transmitted successfully                       |
| `43`        | Waiting                       | Transmission is waiting                            |
| `44`        | New job                       | Job was created                                    |
| `101`       | Applied                       | Job group submitted to the gateway                 |
| `201`       | Started converting            | Document conversion started                        |
| `202`       | Finished converting           | Individual file converted                          |
| `301`       | Started merging               | Document merge started                             |
| `401`       | Processing                    | Transmission started                               |
| `402`       | Finished processing job       | Individual job completed                           |
| `501`       | Finished processing job group | Entire job group completed                         |
| `5513`      | Exists in the blacklist       | Callback, address, or message content is blocked   |
| `6000`      | Unknown error                 | Unknown error                                      |
| `6002`      | Conversion error              | Error while converting documents                   |
| `6004`      | No response                   | Aborted because there was no answer                |
| `6005`      | Empty job                     | Nothing to send. No `JobID` was created            |
| `6006`      | Line busy                     | Busy                                               |
| `6007`      | Rejected                      | Rejected                                           |
| `6009`      | Unknown number                | Unknown number                                     |
| `6010`      | Invalid number                | Invalid number                                     |
| `6011`      | Number changed                | Number changed                                     |
| `6013`      | No fax device                 | Remote side is not a fax machine                   |
| `6014`      | Disconnected by sender        | Connection dropped by sender                       |
| `6015`      | Disconnected by receiver      | Connection dropped by recipient                    |
| `6016`      | File format not supported     | File format is not supported                       |
| `6017`      | File access failed            | File access failed                                 |
| `6900`      | Ok (not confirmed)            | Fax sent, but the connection did not close cleanly |


# Message cache

Read and delete cached inbound SMS messages from leased numbers.

The cache stores inbound SMS messages for leased numbers when caching is enabled.

{% hint style="info" %}
Only messages received after the cache was enabled are stored.
{% endhint %}

Configure the cache in the portal under **Numbers / SMS Numbers** → **3. Forward received SMS (optional)**.

### Fetch the next message

Use `Api/Cache/GetNextMessage` to read the oldest cached message.

If you omit `MobileNumber`, the service returns the oldest message across all leased numbers on the account.

| Parameter      | Type     | Description                                           |
| -------------- | -------- | ----------------------------------------------------- |
| `UserName`     | Required | Username                                              |
| `Password`     | Required | Password                                              |
| `MobileNumber` | Optional | Leased SMS number in international or national format |

**Examples:**

```
/Api/Cache/GetNextMessage?Username=xxx&Password=yyy
/Api/Cache/GetNextMessage?Username=xxx&Password=yyy&MobileNumber=+41763331111
```

### Response structure

```xml
<IncomingSMS>
  <Result>
    <ResultCode></ResultCode>
    <ResultText></ResultText>
  </Result>
  <MessageID></MessageID>
  <SMS>
    <Message></Message>
    <AddressTo></AddressTo>
    <AddressFrom></AddressFrom>
    <TimeStamp></TimeStamp>
  </SMS>
</IncomingSMS>
```

{% hint style="info" %}
If the cache is empty, the service returns result code `11204`. The `<SMS>` and `<MessageID>` nodes are omitted.
{% endhint %}

### Delete a cached message

Use `Api/Cache/DeleteMessage` to remove a cached message after processing it.

This only deletes the cached copy. The message stays visible under **Received Messages**.

| Parameter   | Type     | Description                             |
| ----------- | -------- | --------------------------------------- |
| `UserName`  | Required | Username                                |
| `Password`  | Required | Password                                |
| `MessageID` | Required | Message ID returned by `GetNextMessage` |

**Example:**

```
/Api/Cache/DeleteMessage?UserName=xxx&Password=yyy&MessageID=123abc
```

### Delete response

```xml
<DeleteMsg>
  <Result>
    <ResultCode></ResultCode>
    <ResultText></ResultText>
  </Result>
</DeleteMsg>
```


# Callbacks and inbound SMS

Handle replies, delivery notifications, and inbound SMS forwarding.

### SMS reply callback

Use the `Answer` function to receive SMS replies.

{% hint style="warning" %}
This callback uses Windows-1252 character encoding.
{% endhint %}

| Parameter     | Type     | Description                                  |
| ------------- | -------- | -------------------------------------------- |
| `AddressTo`   | Required | Recipient number                             |
| `AddressFrom` | Required | Sender number                                |
| `Message`     | Required | Reply content                                |
| `TimeStamp`   | Required | Receipt time in `dd.mm.yyyy hh:mm:ss` format |
| `JobID`       | Optional | Original message identifier                  |

Acknowledge the callback with HTTP `200 OK`.

**Example:**

```
http://www.mycompany.com/answers?Function=Answer&AddressTo=0041766012999&AddressFrom=0041791234567&Message=My+reply&TimeStamp=11%2E12%2E2015+10%3A37%3A00
```

### Delivery notification callback

Use the `Notification` function to receive delivery notifications.

| Parameter    | Type     | Description                                          |
| ------------ | -------- | ---------------------------------------------------- |
| `ResultCode` | Required | Message status code                                  |
| `ResultText` | Required | Message status text                                  |
| `Number`     | Required | Recipient number                                     |
| `TimeStamp`  | Required | Message receipt time in `dd.mm.yyyy hh:mm:ss` format |
| `JobID`      | Optional | Original message identifier                          |

Acknowledge the callback with HTTP `200 OK`.

**Example:**

```
http://www.mycompany.com/notifications?Function=Notification&ResultCode=0&ResultText=Message+has+been+delivered&TimeStamp=17%2E07%2E2014+12%3A55%3A15&Number=0041787557539&JobID=FB551638-A320-476F-A47D-F2EE68
```

#### Notification result codes

| ResultCode | ResultText                     | Description                                       |
| ---------- | ------------------------------ | ------------------------------------------------- |
| `0`        | Message has been delivered     | Delivery confirmed by the recipient               |
| `1`        | Message has been buffered      | Delivery could not yet be confirmed               |
| `2`        | Message has not been delivered | Delivery could not be confirmed                   |
| `3`        | Error Code / Error Message     | Error while handing off to the destination center |
| `4`        | Transmission OK                | Job was forwarded to the destination center       |

### Inbound SMS forwarding

Incoming SMS can be forwarded to an HTTP or HTTPS URL.

Configure the target URL per leased SMS number in the portal.

#### GET forwarding

eCall appends these parameters to the configured URL:

| Parameter     | Description                                  |
| ------------- | -------------------------------------------- |
| `Function`    | Always `IncomingSMS`                         |
| `AddressTo`   | eCall receive number                         |
| `AddressFrom` | Sender number                                |
| `Message`     | SMS content                                  |
| `TimeStamp`   | Receipt time in `DD.MM.YYYY HH:MM:SS` format |

**Example:**

```
...?AddressFrom=0041799999999&AddressTo=0041766666666&Function=IncomingSMS&Message=Yes%2C%20noon%20is%20ok.&TimeStamp=01.01.2020%2012%3A00%3A00
```

Decoded values:

| Parameter     | Value                 |
| ------------- | --------------------- |
| `Function`    | `IncomingSMS`         |
| `AddressTo`   | `0041766666666`       |
| `AddressFrom` | `0041799999999`       |
| `Message`     | `Yes, noon is ok.`    |
| `TimeStamp`   | `01.01.2020 12:00:00` |

#### POST forwarding

POST forwarding sends JSON.

```json
{
  "messageId": "string",
  "channel": "Sms",
  "to": "string",
  "from": "string",
  "content": {
    "text": "string",
    "type": "Text"
  },
  "timestamp": "2024-03-13T11:44:40Z"
}
```

| Field          | Description                               |
| -------------- | ----------------------------------------- |
| `messageId`    | GUID that uniquely identifies the message |
| `channel`      | Always `Sms`                              |
| `to`           | eCall receive number                      |
| `from`         | Sender number                             |
| `content.type` | Always `Text`                             |
| `content.text` | SMS content                               |
| `timestamp`    | Receipt time in UTC using ISO 8601        |

**Example:**

```json
{
  "messageId": "6815c501-2fe1-ee11-812a-00155dfb061c",
  "channel": "Sms",
  "to": "0041766666666",
  "from": "0041777777777",
  "content": {
    "text": "Hello eCall!",
    "type": "Text"
  },
  "timestamp": "2024-03-13T11:44:40Z"
}
```


# Response codes and headers

HTTP statuses, eCall result codes, request IDs, and source IPs.

### Response types

The interface returns two response types:

* Send methods return HTTP status codes and eCall result codes.
* Cache operations return eCall result codes in the response body.

### HTTP status codes

| Status Code | Status Text         | Description                                 |
| ----------- | ------------------- | ------------------------------------------- |
| `200`       | OK                  | Job was accepted successfully               |
| `400`       | BadRequest          | Request failed. Check the eCall result code |
| `401`       | Unauthorized        | Credentials are missing or invalid          |
| `403`       | Forbidden           | The account has insufficient credits        |
| `500`       | InternalServerError | General processing error                    |

{% hint style="info" %}
Cache queries return HTTP `200 OK`. Check the XML body for the actual result code.
{% endhint %}

### eCall result codes

| Code    | ResponseText                                          | Description                                                                                                            |
| ------- | ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `0`     | OK                                                    | Message submitted successfully                                                                                         |
| `11000` | SyntaxError                                           | Syntax error                                                                                                           |
| `11001` | PermissionDenied                                      | Access denied                                                                                                          |
| `11100` | AdrAdCInvalid                                         | Invalid recipient address                                                                                              |
| `11101` | AdrNAdInvalid                                         | Invalid notification address                                                                                           |
| `11102` | AdrAdCMissing                                         | Missing recipient address                                                                                              |
| `11103` | AdrNAdMissing                                         | Missing notification address                                                                                           |
| `11104` | AdrAdCTooMany                                         | Too many recipient addresses                                                                                           |
| `11105` | AdrAdCNotAllowed                                      | Recipient address is outside the allowed range                                                                         |
| `11106` | AdrCountryNotWhitelisted                              | Destination country not whitelisted for this account                                                                   |
| `11107` | AdrCountryWhitelistLimitExceeded                      | Daily limit for destination country exceeded (country is blocked)                                                      |
| `11108` | AdrCountryWhitelistLimitReachedButNotBlockedCountries | More than one receiver: Daily limit for at least one destination country would be exceeded (countries are not blocked) |
| `11200` | MsgNoCharacters                                       | Missing message content                                                                                                |
| `11201` | MsgInvalidCharacters                                  | Invalid characters in the message                                                                                      |
| `11202` | MsgSendTimeInvalid                                    | Invalid send time                                                                                                      |
| `11203` | MsgSendTimeNotAllowed                                 | Send time is outside the allowed time window                                                                           |
| `11204` | MsgTooLong                                            | SMS or pager message is too long                                                                                       |
| `11300` | AccNoUser                                             | Unknown user                                                                                                           |
| `11301` | AccNoUnits                                            | Insufficient credits                                                                                                   |
| `11303` | AccNoFreeUnits                                        | Insufficient free credits                                                                                              |
| `11400` | CallSystemInvalid                                     | Invalid alerting system                                                                                                |
| `11401` | CallSystemInvalidForUser                              | Invalid alerting system for this user                                                                                  |
| `11402` | CallSystemNotSupported                                | Alerting system is not supported                                                                                       |
| `11403` | CallSystemConfused                                    | Alerting system is temporarily unavailable                                                                             |
| `11500` | IDMissing                                             | Missing ID                                                                                                             |
| `11501` | IDInvalid                                             | ID could not be found                                                                                                  |
| `11502` | IDDoesNotExist                                        | ID does not exist                                                                                                      |
| `11600` | StateAlreadyTransmitted                               | Message was already sent                                                                                               |
| `11700` | DataReadError                                         | Data content could not be read                                                                                         |
| `11800` | CBMsgError                                            | Callback contains a forbidden number or text                                                                           |
| `11810` | AnswerInvalid                                         | Answer contains an invalid address                                                                                     |
| `11904` | Too many attachments                                  | More than 10 attachments were sent                                                                                     |
| `11905` | Attachment(s) too large                               | At least one attachment exceeds 5 MB                                                                                   |
| `11906` | File type not supported                               | Unsupported file type                                                                                                  |
| `11907` | Error while processing the attachments                | Unexpected attachment processing error                                                                                 |
| `11908` | Error while saving the attachments                    | Unexpected attachment save error                                                                                       |
| `11910` | Job not found in Log                                  | Job could not be found in the log                                                                                      |
| `11911` | JobID required                                        | A `JobID` is required for status queries                                                                               |
| `11912` | Job is scheduled                                      | Job is scheduled for a future time                                                                                     |
| `11913` | Job in progress                                       | Job is still being processed                                                                                           |
| `11914` | Attachment name exceedes char limit                   | Attachment name exceeds the character limit                                                                            |
| `11999` | Unknown error                                         | Unknown error                                                                                                          |

### Client request ID

Set this request header to correlate responses with your own request IDs:

```
x-f24-client-request-id
```

Maximum length: 100 characters.

If you set it, the service echoes the same value in the response.

### Server request ID

Every response includes this header:

```
x-f24-request-id
```

Provide this value to support together with:

* The request time
* The eCall account name or interface username
* The operation type

### Source IP addresses

Use these source IPs to allow inbound traffic from eCall to your service:

* `193.93.208.200`
* `193.93.208.149`
* `193.93.208.153`

Source ports are dynamic and can use the full range `0–65535`.


