GetOTP Documentation
Senders
The Senders API provides a way to get your custom Sender IDs.
Request for Senders API
To get your Senders, make a GET request to our Senders endpoint.
https://api.otp.dev/v1/sendersWith the following Basic HTTP verification method:
| Description | Required | Data Type | Example |
|---|---|---|---|
| Your API Key | Yes | String | mtbi2w4hlendfpxa1igthcu5p6mzxf7k |
Note
- Grab your API key from this page
With the following parameters:
| Name | Description | Required | Data Type | Example |
|---|---|---|---|---|
| filter[status] | Status of the sender | No | String | Available |
| page_size | The number of senders to return | No | String | 10 |
| page_token | Found in pagination links and can be used to get 'previous' or 'next' items | No | String |
Note
Notes on the filter[status] parameter:
Notes on the page_size parameter:
Examples
Below is an example request using cURL:
curl --request GET \
--url 'https://api.otp.dev/v1/senders?page_size=10&filter[status]=Available' \
--header 'X-OTP-Key: {YOUR_API_KEY}' \
--header 'accept: application/json'The response would be a JSON structure, returned with HTTP 200 Codestatus code:
{
"data": [
{
"id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"account_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"name": "My Sender",
"code": "MySender",
"channel": "SMS",
"type": "Alphanumeric",
"status": "Available",
"country": "de",
"countries": [
"de"
],
"monthly_cost": "2",
"setup_cost": "2",
"create_date": "2025-09-24 07:09:20",
"update_date": "2025-09-24 07:09:20"
}
],
"pagination": {
"number": 1,
"size": 10,
"total": 11,
"links": {
"first": "string",
"current": "string",
"previous": "string",
"next": "string"
}
}
}
Response data details:
| Name | Description | Data Type | Example |
|---|---|---|---|
| data[].id | The unique identifier of the sender | String (UUID) | 3fa85f64-5717-4562-b3fc-2c963f66afa6 |
| data[].account_id | The unique identifier of the account | String (UUID) | 3fa85f64-5717-4562-b3fc-2c963f66afa6 |
| data[].name | Human-friendly sender name | String | My Sender |
| data[].code | Sender ID/code used for messaging | String | MySender |
| data[].channel | Messaging channel | String | SMS |
| data[].type | Sender type | String | Alphanumeric |
| data[].status | Approval/availability status | String | Available |
| data[].country | Primary country (ISO 3166-1 alpha-2) | String | de |
| data[].countries | Supported countries (ISO 3166-1 alpha-2) | Array<String> | ["de"] |
| data[].monthly_cost | Monthly cost for the sender | String | 2 |
| data[].setup_cost | One-time setup cost for the sender | String | 2 |
| data[].create_date | Creation date of the sender in UTC, formatted as yyyy-mm-dd hh:mm:ss | String (datetime) | 2025-09-24 07:09:20 |
| data[].update_date | Updated date of the sender in UTC, formatted as yyyy-mm-dd hh:mm:ss | String (datetime) | 2025-09-24 07:09:20 |
| pagination.number | Current page number | Integer | 1 |
| pagination.size | Requested page size | Integer | 10 |
| pagination.total | Total items available | Integer | 11 |
| pagination.links.first | URL of the first page | String (URL) | string |
| pagination.links.current | URL of the current page | String (URL) | string |
| pagination.links.previous | URL of the previous page | String (URL) | string |
| pagination.links.next | URL of the next page | String (URL) | string |
If there is an error with the API call, you will receive a JSON response with 400+ status code, error code and message.
{
"errors": [{
"timestamp": "2025-08-18 00:00:00",
"path": "/v1/senders",
"method": "GET",
"status": 400,
"message": "Invalid status",
"code": "1439"
}]
}Please refer to this table for details:
| Error Code | Description | HTTP Code |
|---|---|---|
| 1439 | Invalid status | 400 |