> For the complete documentation index, see [llms.txt](https://developer.ecall-messaging.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.ecall-messaging.com/api-references/rest-api/message-list.md).

# 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"}}}}}}
```
