Y-m-d\TH:i:sP. Must be a date before or equal to before.'
required: false
schema:
type:
- string
- 'null'
description: 'Filter by campaigns at or after this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date before or equal to before.'
examples:
- '2026-06-16T00:00:00+05:30'
-
in: query
name: before
description: 'Filter by campaigns at or before this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date after or equal to after.'
required: false
schema:
type:
- string
- 'null'
description: 'Filter by campaigns at or before this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date after or equal to after.'
examples:
- '2026-06-16T00:00:00+05:30'
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 51
name:
type: string
examples:
- 'Cullen Roberts'
scheduled_at:
type:
- string
- 'null'
examples:
- null
timezone:
type: string
examples:
- UTC
recurring:
type: boolean
examples:
- false
frequency:
type:
- string
- 'null'
examples:
- null
frequency_unit:
type:
- string
- 'null'
examples:
- null
ends_at:
type:
- string
- 'null'
examples:
- null
repeat_at:
type:
- string
- 'null'
examples:
- null
active_hours:
type: string
examples:
- '00:00-23:59'
days_of_week:
type: array
items:
type: integer
examples:
-
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status:
type: string
examples:
- Processed
type:
type: string
examples:
- SMS
options:
type: object
properties:
delay:
type: string
examples:
- '0'
prioritize:
type: boolean
examples:
- false
delivery_report:
type: boolean
examples:
- false
created_at:
type: string
examples:
- '2026-10-03T13:19:53.000000Z'
updated_at:
type: string
examples:
- '2026-10-03T13:19:53.000000Z'
required:
- id
- name
- scheduled_at
- timezone
- recurring
- frequency
- frequency_unit
- ends_at
- repeat_at
- active_hours
- days_of_week
- status
- type
- options
- created_at
- updated_at
examples:
-
-
id: 51
name: 'Cullen Roberts'
scheduled_at: null
timezone: UTC
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '00:00-23:59'
days_of_week:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status: Processed
type: SMS
options:
delay: '0'
prioritize: false
delivery_report: false
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
-
id: 52
name: 'Catalina Mills'
scheduled_at: null
timezone: UTC
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '00:00-23:59'
days_of_week:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status: Processed
type: SMS
options:
delay: '0'
prioritize: false
delivery_report: false
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 100
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
examples:
-
data:
-
id: 51
name: 'Cullen Roberts'
scheduled_at: null
timezone: UTC
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '00:00-23:59'
days_of_week:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status: Processed
type: SMS
options:
delay: '0'
prioritize: false
delivery_report: false
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
-
id: 52
name: 'Catalina Mills'
scheduled_at: null
timezone: UTC
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '00:00-23:59'
days_of_week:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status: Processed
type: SMS
options:
delay: '0'
prioritize: false
delivery_report: false
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 100
to: 2
total: 2
tags:
- Campaigns
'/api/v1/campaigns/{id}':
get:
summary: 'Retrieve a campaign'
operationId: retrieveACampaign
description: 'Retrieves a Campaign object.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the campaign.'
examples:
- 53
name:
type:
- string
- 'null'
description: 'The name of the campaign.'
examples:
- 'Gideon Boyer'
scheduled_at:
type:
- string
- 'null'
description: 'The date and time when the campaign is scheduled to run.'
examples:
- null
timezone:
type: string
description: 'The timezone of the campaign.'
examples:
- UTC
recurring:
type: boolean
description: 'Whether the campaign is recurring.'
examples:
- false
frequency:
type:
- string
- 'null'
description: 'The frequency of the campaign.'
examples:
- null
frequency_unit:
type:
- string
- 'null'
description: 'The unit of the frequency.'
examples:
- null
ends_at:
type:
- string
- 'null'
description: 'The date and time when the recurring campaign ends.'
examples:
- null
repeat_at:
type:
- string
- 'null'
description: 'The date and time when the campaign is scheduled to repeat.'
examples:
- null
active_hours:
type: string
description: 'The timespan of a day when the campaign is active.'
examples:
- '00:00-23:59'
days_of_week:
type: array
description: 'The days of the week when the campaign is active.'
items:
type: integer
examples:
-
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status:
type: string
description: 'The status of the campaign.'
examples:
- Processed
type:
type: string
description: 'The type of the campaign.'
examples:
- SMS
options:
type: object
properties:
delay:
type: string
description: 'The delay between each item before sending the next one.'
examples:
- '0'
prioritize:
type: boolean
description: 'Whether to prioritize the campaign.'
examples:
- false
delivery_report:
type: boolean
description: 'Whether to request delivery report for SMS.'
examples:
- false
description: 'The options of the campaign.'
created_at:
type: string
description: 'The date and time the campaign was created.'
examples:
- '2026-10-03T13:19:53.000000Z'
updated_at:
type: string
description: 'The date and time the campaign was last updated.'
examples:
- '2026-10-03T13:19:53.000000Z'
required:
- id
- name
- scheduled_at
- timezone
- recurring
- frequency
- frequency_unit
- ends_at
- repeat_at
- active_hours
- days_of_week
- status
- type
- options
- created_at
- updated_at
examples:
-
id: 53
name: 'Gideon Boyer'
scheduled_at: null
timezone: UTC
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '00:00-23:59'
days_of_week:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status: Processed
type: SMS
options:
delay: '0'
prioritize: false
delivery_report: false
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
tags:
- Campaigns
put:
summary: 'Update a campaign'
operationId: updateACampaign
description: 'Updates the specific campaign by setting the values of the parameters passed.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- Campaigns
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the campaign. Must be at least 3 characters.'
examples:
- 'New Campaign'
required:
- name
delete:
summary: 'Delete a campaign'
operationId: deleteACampaign
description: 'Permanently deletes a campaign. Also deletes all messages or USSD pulls associated with it. It cannot be undone.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- Campaigns
parameters:
-
in: path
name: id
description: 'The ID of the campaign.'
required: true
schema:
type: integer
examples:
- 1
'/api/v1/campaigns/{campaign_id}/devices':
get:
summary: 'List all devices used in a campaign'
operationId: listAllDevicesUsedInACampaign
description: 'Returns a list of devices used in a campaign. The devices are returned with sims used in the campaign and status of the campaign on the device.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 65
name:
type:
- string
- 'null'
examples:
- null
model:
type: string
examples:
- 'Nokia X20'
android_version:
type: string
examples:
- '7'
app_version:
type: string
examples:
- 0.20.34
battery:
type: integer
examples:
- 46
is_charging:
type: boolean
examples:
- false
enabled:
type: boolean
examples:
- true
sims:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 69
name:
type: string
examples:
- 'Koelpin, Nolan and Bailey'
label:
type:
- string
- 'null'
examples:
- null
number:
type: string
examples:
- '+15202822732'
country:
type: string
examples:
- SZ
carrier:
type: string
examples:
- 'Miller Ltd'
slot:
type: integer
examples:
- 0
data_roaming:
type: boolean
examples:
- false
signal_strength:
type: integer
examples:
- 4
active:
type: boolean
examples:
- true
required:
- id
- name
examples:
-
-
id: 69
name: 'Koelpin, Nolan and Bailey'
label: null
number: '+15202822732'
country: SZ
carrier: 'Miller Ltd'
slot: 0
data_roaming: false
signal_strength: 4
active: true
required:
- id
- name
- model
- android_version
- app_version
- battery
- is_charging
- enabled
- sims
examples:
-
-
id: 65
name: null
model: 'Nokia X20'
android_version: '7'
app_version: 0.20.34
battery: 46
is_charging: false
enabled: true
sims:
-
id: 69
name: 'Koelpin, Nolan and Bailey'
label: null
number: '+15202822732'
country: SZ
carrier: 'Miller Ltd'
slot: 0
data_roaming: false
signal_strength: 4
active: true
-
id: 66
name: null
model: 'Xiaomi Mi 11'
android_version: '9'
app_version: 3.73.98
battery: 71
is_charging: false
enabled: true
sims:
-
id: 70
name: 'Hermiston, Parker and Marvin'
label: null
number: '+13648507362'
country: GE
carrier: 'Littel Ltd'
slot: 0
data_roaming: false
signal_strength: 4
active: true
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 10
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
examples:
-
data:
-
id: 65
name: null
model: 'Nokia X20'
android_version: '7'
app_version: 0.20.34
battery: 46
is_charging: false
enabled: true
sims:
-
id: 69
name: 'Koelpin, Nolan and Bailey'
label: null
number: '+15202822732'
country: SZ
carrier: 'Miller Ltd'
slot: 0
data_roaming: false
signal_strength: 4
active: true
-
id: 66
name: null
model: 'Xiaomi Mi 11'
android_version: '9'
app_version: 3.73.98
battery: 71
is_charging: false
enabled: true
sims:
-
id: 70
name: 'Hermiston, Parker and Marvin'
label: null
number: '+13648507362'
country: GE
carrier: 'Littel Ltd'
slot: 0
data_roaming: false
signal_strength: 4
active: true
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 10
to: 2
total: 2
tags:
- Campaigns
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
required: true
schema:
type: integer
examples:
- 1
'/api/v1/campaigns/{campaign_id}/sending-servers':
get:
summary: 'List all sending servers used in a campaign'
operationId: listAllSendingServersUsedInACampaign
description: 'Returns a list of sending servers used in a campaign. The sending servers are returned with sender ids used in the campaign and status of the campaign on the sending server.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 43
name:
type: string
examples:
- 'Gideon Boyer'
enabled:
type: boolean
examples:
- true
sender_ids:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 45
value:
type: string
examples:
- '511682'
required:
- id
examples:
-
-
id: 45
value: '511682'
required:
- id
- name
- sender_ids
examples:
-
-
id: 43
name: 'Gideon Boyer'
enabled: true
sender_ids:
-
id: 45
value: '511682'
-
id: 44
name: 'Camylle Zieme'
enabled: true
sender_ids:
-
id: 46
value: '795647'
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 10
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
examples:
-
data:
-
id: 43
name: 'Gideon Boyer'
enabled: true
sender_ids:
-
id: 45
value: '511682'
-
id: 44
name: 'Camylle Zieme'
enabled: true
sender_ids:
-
id: 46
value: '795647'
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 10
to: 2
total: 2
tags:
- Campaigns
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
required: true
schema:
type: integer
examples:
- 1
/api/v1/contact-lists:
get:
summary: 'List all contact lists'
operationId: listAllContactLists
description: 'Returns a list of contact lists. The contact lists are returned sorted by creation date, with the most recently created contact list appearing first.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 63
name:
type: string
examples:
- deborah.mayert
required:
- id
- name
examples:
-
-
id: 63
name: deborah.mayert
-
id: 64
name: tyrique.damore
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 10
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
examples:
-
data:
-
id: 63
name: deborah.mayert
-
id: 64
name: tyrique.damore
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 10
to: 2
total: 2
tags:
- 'Contact Lists'
post:
summary: 'Create a contact list'
operationId: createAContactList
description: ''
parameters: []
responses:
201:
description: Created
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the contact list.'
examples:
- 66
name:
type: string
description: 'The name of the contact list.'
examples:
- brown.maggie
required:
- id
- name
examples:
-
id: 66
name: brown.maggie
tags:
- 'Contact Lists'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the contact list. Must be unique. Must be at least 3 characters.'
examples:
- 'My List'
required:
- name
'/api/v1/contact-lists/{id}':
get:
summary: 'Retrieve a contact list'
operationId: retrieveAContactList
description: 'Retrieves a Contact List object.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the contact list.'
examples:
- 65
name:
type: string
description: 'The name of the contact list.'
examples:
- deborah.mayert
required:
- id
- name
examples:
-
id: 65
name: deborah.mayert
tags:
- 'Contact Lists'
put:
summary: 'Update a contact list'
operationId: updateAContactList
description: 'Updates the specific contact list by setting the values of the parameters passed.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- 'Contact Lists'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the contact list. Must be unique. Must be at least 3 characters.'
examples:
- 'My List'
required:
- name
delete:
summary: 'Delete a contact list'
operationId: deleteAContactList
description: 'Permanently deletes the specific contact list. Also deletes all contacts and fields associated with it. It cannot be undone.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- 'Contact Lists'
parameters:
-
in: path
name: id
description: 'The ID of the contact list.'
required: true
schema:
type: integer
examples:
- 1
'/api/v1/contact-lists/{contact_list_id}/duplicate':
post:
summary: 'Duplicate a contact list'
operationId: duplicateAContactList
description: 'Duplicates the specified contact list along with its fields. Contacts are not duplicated.'
parameters: []
responses:
201:
description: Created
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the contact list.'
examples:
- 67
name:
type: string
description: 'The name of the contact list.'
examples:
- brown.maggie
required:
- id
- name
examples:
-
id: 67
name: brown.maggie
tags:
- 'Contact Lists'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the contact list. Must be unique. Must be at least 3 characters.'
examples:
- 'My List'
required:
- name
parameters:
-
in: path
name: contact_list_id
description: 'The ID of the contact list.'
required: true
schema:
type: integer
examples:
- 1
'/api/v1/contact-lists/{contact_list_id}/fields':
get:
summary: 'List all fields for a contact list'
operationId: listAllFieldsForAContactList
description: 'Returns a list of fields for a contact list. The fields are returned sorted by creation date, with the most recently created field appearing first.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 49
label:
type: string
examples:
- Exercitationem
tag:
type: string
examples:
- exercitationem
type:
type: string
examples:
- text
options:
type:
- string
- 'null'
examples:
- null
default_value:
type:
- string
- 'null'
examples:
- null
required:
type: boolean
examples:
- false
required:
- id
- label
- tag
- type
- options
- default_value
- required
examples:
-
-
id: 49
label: Exercitationem
tag: exercitationem
type: text
options: null
default_value: null
required: false
-
id: 50
label: Enim
tag: enim
type: text
options: null
default_value: null
required: false
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
required:
- label
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 50
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
examples:
-
data:
-
id: 49
label: Exercitationem
tag: exercitationem
type: text
options: null
default_value: null
required: false
-
id: 50
label: Enim
tag: enim
type: text
options: null
default_value: null
required: false
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 50
to: 2
total: 2
tags:
- 'Contact Lists'
post:
summary: 'Create a field for a contact list'
operationId: createAFieldForAContactList
description: ''
parameters: []
responses:
201:
description: Created
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the field.'
examples:
- 52
label:
type: string
description: 'The label of the field.'
examples:
- Veritatis
tag:
type: string
description: 'The tag of the field.'
examples:
- veritatis
type:
type: string
description: 'The type of the field.'
enum:
- text
- number
- email
- dropdown
- multiselect
- checkbox
- radio
- date
- datetime-local
- time
- textarea
examples:
- text
options:
type: string
description: 'List of all possible options for the field.'
examples:
- null
default_value:
type: string
description: 'The default value of the field.'
examples:
- null
required:
type: boolean
description: 'Whether the field is required or not.'
examples:
- false
required:
- id
- label
- tag
- type
- options
- default_value
- required
examples:
-
id: 52
label: Veritatis
tag: veritatis
type: text
options: null
default_value: null
required: false
tags:
- 'Contact Lists'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
label:
type: string
description: 'The label of the field. Must be at least 3 characters. Must not be greater than 50 characters.'
examples:
- 'First Name'
tag:
type: string
description: 'The tag of the field. Must contain only letters, numbers, dashes and underscores. Must not be one of mobile_number or subscribed Must be at least 3 characters. Must not be greater than 50 characters.'
examples:
- first_name
type:
type: string
description: 'The type of the field.'
enum:
- text
- number
- email
- dropdown
- multiselect
- checkbox
- radio
- date
- datetime-local
- time
- textarea
examples:
- text
options:
type: array
description: 'List of all possible options for the field. This field is required when type is checkbox, dropdown, multiselect, or radio.'
items:
type: object
properties:
label:
type: string
description: 'The label of the option. Must be at least 3 characters.'
examples:
- 'Option 1'
value:
type: string
description: 'The value of the option. Must contain only letters, numbers, dashes and underscores.'
examples:
- option_1
required:
- label
- value
examples:
- null
default_value:
type:
- string
- 'null'
description: 'The default value of the field.'
examples:
- John
required:
type: boolean
description: 'Whether the field is required or not.'
examples:
- true
required:
- label
- tag
- type
- required
parameters:
-
in: path
name: contact_list_id
description: 'The ID of the contact list.'
required: true
schema:
type: integer
examples:
- 1
'/api/v1/fields/{id}':
get:
summary: 'Retrieve a field'
operationId: retrieveAField
description: 'Retrieves a Field object.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the field.'
examples:
- 51
label:
type: string
description: 'The label of the field.'
examples:
- Itaque
tag:
type: string
description: 'The tag of the field.'
examples:
- itaque
type:
type: string
description: 'The type of the field.'
enum:
- text
- number
- email
- dropdown
- multiselect
- checkbox
- radio
- date
- datetime-local
- time
- textarea
examples:
- text
options:
type: string
description: 'List of all possible options for the field.'
examples:
- null
default_value:
type: string
description: 'The default value of the field.'
examples:
- null
required:
type: boolean
description: 'Whether the field is required or not.'
examples:
- false
required:
- id
- label
- tag
- type
- options
- default_value
- required
examples:
-
id: 51
label: Itaque
tag: itaque
type: text
options: null
default_value: null
required: false
tags:
- 'Contact Lists'
put:
summary: 'Update a field'
operationId: updateAField
description: "Updates the specific field by setting the values of the parameters passed. It is recommended to retrieve the field first to get the field's current state because partial updates are not supported."
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- 'Contact Lists'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
label:
type: string
description: 'The label of the field. Must be at least 3 characters. Must not be greater than 50 characters.'
examples:
- 'First Name'
tag:
type: string
description: 'The tag of the field. Must contain only letters, numbers, dashes and underscores. Must not be one of mobile_number or subscribed Must be at least 3 characters. Must not be greater than 50 characters.'
examples:
- first_name
type:
type: string
description: 'The type of the field.'
enum:
- text
- number
- email
- dropdown
- multiselect
- checkbox
- radio
- date
- datetime-local
- time
- textarea
examples:
- text
options:
type: array
description: 'List of all possible options for the field. This field is required when type is checkbox, dropdown, multiselect, or radio.'
items:
type: object
properties:
label:
type: string
description: 'The label of the option. Must be at least 3 characters.'
examples:
- 'Option 1'
value:
type: string
description: 'The value of the option. Must contain only letters, numbers, dashes and underscores.'
examples:
- option_1
required:
- label
- value
examples:
- null
default_value:
type:
- string
- 'null'
description: 'The default value of the field.'
examples:
- John
required:
type: boolean
description: 'Whether the field is required or not.'
examples:
- true
required:
- label
- tag
- type
- required
delete:
summary: 'Delete a field'
operationId: deleteAField
description: 'Permanently deletes a field. Also deletes all associated field values of contacts. It cannot be undone.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- 'Contact Lists'
parameters:
-
in: path
name: id
description: 'The ID of the field.'
required: true
schema:
type: integer
examples:
- 1
'/api/v1/contact-lists/{contact_list_id}/contacts':
get:
summary: 'List all contacts for a contact list'
operationId: listAllContactsForAContactList
description: 'Returns a list of contacts for a contact list. The contacts are returned sorted by creation date, with the most recently created contact appearing first.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 2017
mobile_number:
type: string
examples:
- '+19475350806'
eveniet:
type: string
examples:
- qui
subscribed:
type: boolean
examples:
- true
created_at:
type: string
examples:
- '2026-10-03T13:19:53.000000Z'
updated_at:
type: string
examples:
- '2026-10-03T13:19:53.000000Z'
required:
- id
- mobile_number
- subscribed
- created_at
- updated_at
examples:
-
-
id: 2017
mobile_number: '+19475350806'
eveniet: qui
subscribed: true
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
-
id: 2018
mobile_number: '+14586288218'
et: qui
subscribed: true
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 100
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
examples:
-
data:
-
id: 2017
mobile_number: '+19475350806'
eveniet: qui
subscribed: true
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
-
id: 2018
mobile_number: '+14586288218'
et: qui
subscribed: true
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 100
to: 2
total: 2
tags:
- Contacts
post:
summary: 'Create a contact in a contact list'
operationId: createAContactInAContactList
description: ''
parameters: []
responses:
201:
description: Created
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the contact.'
examples:
- 2020
mobile_number:
type: string
description: 'The mobile number of the contact.'
examples:
- '+19852822732'
subscribed:
type: boolean
description: 'Whether the contact is subscribed or not.'
examples:
- true
created_at:
type: string
description: 'The date and time when the contact was created.'
examples:
- '2026-10-03T13:19:53.000000Z'
updated_at:
type: string
description: 'The date and time when the contact was last updated.'
examples:
- '2026-10-03T13:19:53.000000Z'
required:
- id
- mobile_number
- subscribed
- created_at
- updated_at
examples:
-
id: 2020
mobile_number: '+19852822732'
subscribed: true
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
tags:
- Contacts
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
mobile_number:
type: string
description: 'The mobile number of the contact.'
examples:
- '+12025886500'
subscribed:
type: boolean
description: 'Whether the contact is subscribed to the contact list.'
examples:
- true
first_name:
type: string
description: "The first name of the contact. This is a custom field so if you didn't set it up, it won't be available."
examples:
- John
last_name:
type:
- string
- 'null'
description: "The last name of the contact. This is a custom field so if you didn't set it up, it won't be available."
examples:
- Doe
required:
- mobile_number
- subscribed
- first_name
parameters:
-
in: path
name: contact_list_id
description: 'The ID of the contact list.'
required: true
schema:
type: integer
examples:
- 1
'/api/v1/contacts/{id}':
get:
summary: 'Retrieve a contact'
operationId: retrieveAContact
description: 'Retrieves a Contact object.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the contact.'
examples:
- 2019
mobile_number:
type: string
description: 'The mobile number of the contact.'
examples:
- '+13807084142'
quam:
type: string
examples:
- rerum
subscribed:
type: boolean
description: 'Whether the contact is subscribed or not.'
examples:
- true
created_at:
type: string
description: 'The date and time when the contact was created.'
examples:
- '2026-10-03T13:19:53.000000Z'
updated_at:
type: string
description: 'The date and time when the contact was last updated.'
examples:
- '2026-10-03T13:19:53.000000Z'
required:
- id
- mobile_number
- subscribed
- created_at
- updated_at
examples:
-
id: 2019
mobile_number: '+13807084142'
quam: rerum
subscribed: true
created_at: '2026-10-03T13:19:53.000000Z'
updated_at: '2026-10-03T13:19:53.000000Z'
tags:
- Contacts
put:
summary: 'Update a contact'
operationId: updateAContact
description: "Update a contact in a contact list with the given data. It is recommended to retrieve the contact first to get the contact's current state because partial updates are not supported."
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- Contacts
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
mobile_number:
type: string
description: 'The mobile number of the contact.'
examples:
- '+12025886500'
subscribed:
type: boolean
description: 'Whether the contact is subscribed to the contact list.'
examples:
- true
first_name:
type: string
description: "The first name of the contact. This is a custom field so if you didn't set it up, it won't be available."
examples:
- John
last_name:
type:
- string
- 'null'
description: "The last name of the contact. This is a custom field so if you didn't set it up, it won't be available."
examples:
- Doe
required:
- mobile_number
- subscribed
- first_name
delete:
summary: 'Delete a contact'
operationId: deleteAContact
description: 'Permanently deletes a contact. It cannot be undone.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- Contacts
parameters:
-
in: path
name: id
description: 'The ID of the contact.'
required: true
schema:
type: integer
examples:
- 1
/api/v1/devices:
get:
summary: 'List all devices'
operationId: listAllDevices
description: 'Returns a list of devices. The devices are returned sorted by creation date, with the most recently created device appearing first.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 67
name:
type:
- string
- 'null'
examples:
- null
model:
type: string
examples:
- 'Nokia X20'
enabled:
type: boolean
examples:
- true
android_version:
type: string
examples:
- '7'
app_version:
type: string
examples:
- 0.20.34
battery:
type: integer
examples:
- 46
is_charging:
type: boolean
examples:
- false
updated_at:
type: string
examples:
- '2026-10-03T13:19:53.000000Z'
sims:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 71
name:
type: string
examples:
- 'Carter, Zieme and Oberbrunner'
label:
type:
- string
- 'null'
examples:
- null
number:
type: string
examples:
- '+16819707512'
country:
type: string
examples:
- KM
carrier:
type: string
examples:
- Kassulke-Ankunding
slot:
type: integer
examples:
- 0
data_roaming:
type: boolean
examples:
- true
signal_strength:
type: integer
examples:
- 3
active:
type: boolean
examples:
- true
required:
- id
- name
examples:
-
-
id: 71
name: 'Carter, Zieme and Oberbrunner'
label: null
number: '+16819707512'
country: KM
carrier: Kassulke-Ankunding
slot: 0
data_roaming: true
signal_strength: 3
active: true
required:
- id
- name
- model
- enabled
- android_version
- app_version
- battery
- is_charging
- updated_at
- sims
examples:
-
-
id: 67
name: null
model: 'Nokia X20'
enabled: true
android_version: '7'
app_version: 0.20.34
battery: 46
is_charging: false
updated_at: '2026-10-03T13:19:53.000000Z'
sims:
-
id: 71
name: 'Carter, Zieme and Oberbrunner'
label: null
number: '+16819707512'
country: KM
carrier: Kassulke-Ankunding
slot: 0
data_roaming: true
signal_strength: 3
active: true
-
id: 68
name: null
model: 'Oppo Reno 6 Pro 5G'
enabled: true
android_version: '13'
app_version: 0.8.34
battery: 81
is_charging: false
updated_at: '2026-10-03T13:19:53.000000Z'
sims:
-
id: 72
name: 'Dooley, Little and West'
label: null
number: '+13107965540'
country: AW
carrier: Kohler-Mitchell
slot: 0
data_roaming: false
signal_strength: 3
active: true
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 100
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
examples:
-
data:
-
id: 67
name: null
model: 'Nokia X20'
enabled: true
android_version: '7'
app_version: 0.20.34
battery: 46
is_charging: false
updated_at: '2026-10-03T13:19:53.000000Z'
sims:
-
id: 71
name: 'Carter, Zieme and Oberbrunner'
label: null
number: '+16819707512'
country: KM
carrier: Kassulke-Ankunding
slot: 0
data_roaming: true
signal_strength: 3
active: true
-
id: 68
name: null
model: 'Oppo Reno 6 Pro 5G'
enabled: true
android_version: '13'
app_version: 0.8.34
battery: 81
is_charging: false
updated_at: '2026-10-03T13:19:53.000000Z'
sims:
-
id: 72
name: 'Dooley, Little and West'
label: null
number: '+13107965540'
country: AW
carrier: Kohler-Mitchell
slot: 0
data_roaming: false
signal_strength: 3
active: true
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 100
to: 2
total: 2
tags:
- Devices
'/api/v1/devices/{id}':
get:
summary: 'Retrieve a device'
operationId: retrieveADevice
description: 'Retrieves a Device object.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the device.'
examples:
- 69
name:
type:
- string
- 'null'
description: 'The name of the device.'
examples:
- null
model:
type: string
description: 'The model of the device.'
examples:
- 'Nokia X20'
enabled:
type: boolean
description: 'Whether the user has logged in to the app on the device.'
examples:
- true
android_version:
type: string
description: 'The android version of the device.'
examples:
- '7'
app_version:
type: string
description: 'The app version installed on the device.'
examples:
- 0.20.34
battery:
type: integer
description: 'The percentage of battery remaining on the device.'
examples:
- 46
is_charging:
type: boolean
description: 'Whether the device is charging or not.'
examples:
- false
updated_at:
type: string
description: 'The last time the device was updated.'
examples:
- '2026-10-03T13:19:54.000000Z'
sims:
type: array
description: 'List of all sims on the device.'
items:
type: object
properties:
id:
type: integer
examples:
- 73
name:
type: string
examples:
- 'Miller Ltd'
label:
type:
- string
- 'null'
examples:
- null
number:
type: string
examples:
- '+13604961855'
country:
type: string
examples:
- AI
carrier:
type: string
examples:
- 'Hessel and Sons'
slot:
type: integer
examples:
- 0
data_roaming:
type: boolean
examples:
- true
signal_strength:
type: integer
examples:
- 2
active:
type: boolean
examples:
- true
required:
- id
- name
examples:
-
-
id: 73
name: 'Miller Ltd'
label: null
number: '+13604961855'
country: AI
carrier: 'Hessel and Sons'
slot: 0
data_roaming: true
signal_strength: 2
active: true
required:
- id
- name
- model
- enabled
- android_version
- app_version
- battery
- is_charging
- updated_at
- sims
examples:
-
id: 69
name: null
model: 'Nokia X20'
enabled: true
android_version: '7'
app_version: 0.20.34
battery: 46
is_charging: false
updated_at: '2026-10-03T13:19:54.000000Z'
sims:
-
id: 73
name: 'Miller Ltd'
label: null
number: '+13604961855'
country: AI
carrier: 'Hessel and Sons'
slot: 0
data_roaming: true
signal_strength: 2
active: true
tags:
- Devices
put:
summary: 'Update a device'
operationId: updateADevice
description: 'Update the specific device by setting the values of the parameters passed.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- Devices
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type:
- string
- 'null'
description: 'The name of the device. Must be at least 3 characters. Must not be greater than 255 characters.'
examples:
- 'My Device'
delete:
summary: 'Delete a device'
operationId: deleteADevice
description: 'Permanently deletes a device. Also removes the SIMs associated with the device and any messages, USSD Pulls and call logs associated with those SIMs. It cannot be undone.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- Devices
parameters:
-
in: path
name: id
description: 'The ID of the device.'
required: true
schema:
type: integer
examples:
- 1
/api/v1/messages/send:
get:
summary: 'Send messages'
operationId: sendMessages
description: 'Send an SMS or MMS campaign.'
parameters: []
responses:
201:
description: Created
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the campaign.'
examples:
- 54
name:
type:
- string
- 'null'
description: 'The name of the campaign.'
examples:
- 'Merl Champlin'
scheduled_at:
type:
- string
- 'null'
description: 'The date and time when the campaign is scheduled to run.'
examples:
- null
timezone:
type: string
description: 'The timezone of the campaign.'
examples:
- UTC
recurring:
type: boolean
description: 'Whether the campaign is recurring.'
examples:
- false
frequency:
type:
- string
- 'null'
description: 'The frequency of the campaign.'
examples:
- null
frequency_unit:
type:
- string
- 'null'
description: 'The unit of the frequency.'
examples:
- null
ends_at:
type:
- string
- 'null'
description: 'The date and time when the recurring campaign ends.'
examples:
- null
repeat_at:
type:
- string
- 'null'
description: 'The date and time when the campaign is scheduled to repeat.'
examples:
- null
active_hours:
type: string
description: 'The timespan of a day when the campaign is active.'
examples:
- '00:00-23:59'
days_of_week:
type: array
description: 'The days of the week when the campaign is active.'
items:
type: integer
examples:
-
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status:
type: string
description: 'The status of the campaign.'
examples:
- Processed
type:
type: string
description: 'The type of the campaign.'
examples:
- SMS
options:
type: object
properties:
delay:
type: string
description: 'The delay between each item before sending the next one.'
examples:
- '0'
prioritize:
type: boolean
description: 'Whether to prioritize the campaign.'
examples:
- false
delivery_report:
type: boolean
description: 'Whether to request delivery report for SMS.'
examples:
- false
description: 'The options of the campaign.'
created_at:
type: string
description: 'The date and time the campaign was created.'
examples:
- '2026-10-03T13:19:54.000000Z'
updated_at:
type: string
description: 'The date and time the campaign was last updated.'
examples:
- '2026-10-03T13:19:54.000000Z'
required:
- id
- name
- scheduled_at
- timezone
- recurring
- frequency
- frequency_unit
- ends_at
- repeat_at
- active_hours
- days_of_week
- status
- type
- options
- created_at
- updated_at
examples:
-
id: 54
name: 'Merl Champlin'
scheduled_at: null
timezone: UTC
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '00:00-23:59'
days_of_week:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status: Processed
type: SMS
options:
delay: '0'
prioritize: false
delivery_report: false
created_at: '2026-10-03T13:19:54.000000Z'
updated_at: '2026-10-03T13:19:54.000000Z'
tags:
- Messages
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
sims:
type: array
description: 'The ids of the sims to use for sending the messages. It can be an array or comma-separated string. You can also set it to only * to use all available sims. This field is required when sender_ids is not present.'
items:
type: string
examples:
-
- 1
sender_ids:
type: array
description: 'The ids of the sender ids to use for sending the messages. It can be an array or comma-separated string. You can also set it to only * to use all available sender ids. This field is required when sims is not present.'
items:
type: string
examples:
-
- 1
random_sender:
type: boolean
description: 'Whether to use a random sim or sender id from selected sims or sender_ids for entire campaign.'
examples:
- true
contact_lists:
type: array
description: 'The ids of the contact lists to send the messages. It can be an array or comma-separated string. You can also set it to only * to use all available contact lists. This field is required when mobile_numbers is not present. This field is prohibited when mobile_numbers is present.'
items:
type: integer
examples:
-
- 1
mobile_numbers:
type: array
description: 'The mobile numbers to send the messages. This field is required when contact_lists is not present. This field is prohibited when contact_lists is present.'
items:
type: string
examples:
-
- '+12345678901'
type:
type: string
description: 'The type of the message.'
enum:
- SMS
- MMS
- WhatsApp
examples:
- SMS
message:
type:
- string
- 'null'
description: 'The message to send. This field is required when type is SMS. This field is required when attachments is not present.'
examples:
- 'Hello, World!'
attachments:
type: array
description: 'The file URLs you want to send as attachments with the message. It can be an array or comma-separated string. This field is prohibited when type is not MMS. Must be a valid URL.'
items:
type: string
examples:
-
- 'https://example.com/image.jpg'
delivery_report:
type: boolean
description: 'Whether to request a delivery report for the message. This field is prohibited when type is not SMS.'
examples:
- true
delay:
type: string
description: 'The delay between messages in seconds. This field is prohibited when sims is not present.'
examples:
- 60
prioritize:
type: boolean
description: 'Whether to prioritize the campaign. This field is prohibited when sims is not present.'
examples:
- true
name:
type: string
description: 'The name of the campaign. Must not be greater than 255 characters.'
examples:
- 'My Campaign'
scheduled_at:
type: string
description: 'The date and time the campaign is scheduled to run. Must be a valid date.'
examples:
- '2021-01-01T12:00:00Z'
recurring:
type: boolean
description: 'Whether the campaign is recurring.'
examples:
- true
frequency:
type: integer
description: 'The frequency of the campaign. This field is required when recurring is true. Must be at least 1.'
examples:
- 1
frequency_unit:
type: string
description: 'The unit of the frequency. This field is required when recurring is true.'
enum:
- Minute
- Hour
- Day
- Week
- Month
- Year
examples:
- day
ends_at:
type: string
description: 'The date and time when the recurring campaign ends. Must be a valid date.'
examples:
- '2021-01-01T12:00:00Z'
timezone:
type: string
description: 'The timezone of the campaign. This is used for scheduled_at, ends_at, days_of_week, and active_hours. This field is required when active_hours, days_of_week, scheduled_at, or ends_at is present. Must be a valid time zone, such as Africa/Accra.'
examples:
- UTC
days_of_week:
type: array
description: 'The days of the week when the campaign is active. It can be an array or comma-separated string.'
items:
type: string
enum:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
examples:
-
- 1
active_hours:
type: object
description: 'Must contain 2 items.'
properties:
start:
type: string
description: 'The start time of the active hours. This field is required when active_hours.end is present. Must be a valid date in the format H:i. Must be a date before active_hours.end.'
examples:
- '08:00'
end:
type: string
description: 'The end time of the active hours. This field is required when active_hours.start is present. Must be a valid date in the format H:i. Must be a date after active_hours.start.'
examples:
- '17:00'
examples:
- null
/api/v1/messages:
get:
summary: 'List all messages'
operationId: listAllMessages
description: 'Returns a list of messages. The messages are returned sorted by sent date, with the most recently sent message appearing first.'
parameters:
-
in: query
name: user
description: 'Filter by user id. Only available for admin. Must be at least 1.'
required: false
schema:
type:
- number
- 'null'
description: 'Filter by user id. Only available for admin. Must be at least 1.'
examples:
- 1.0
-
in: query
name: campaign
description: 'Filter by campaign id. Must be at least 1.'
required: false
schema:
type:
- number
- 'null'
description: 'Filter by campaign id. Must be at least 1.'
examples:
- 1.0
-
in: query
name: sim
description: 'Filter by sim id. This field is prohibited if sender_id is present. Must be at least 1.'
required: false
schema:
type:
- number
- 'null'
description: 'Filter by sim id. This field is prohibited if sender_id is present. Must be at least 1.'
examples:
- 1.0
-
in: query
name: message
description: 'Filter by message. Must not be greater than 1600 characters.'
required: false
schema:
type:
- string
- 'null'
description: 'Filter by message. Must not be greater than 1600 characters.'
examples:
- 'Hello, World!'
-
in: query
name: type
description: 'Filter by message type.'
required: false
schema:
type:
- string
- 'null'
description: 'Filter by message type.'
enum:
- SMS
- MMS
- WhatsApp
examples:
- SMS
-
in: query
name: statuses
description: ''
required: false
schema:
type: array
description: ''
items:
type: string
enum:
- Pending
- Queued
- Processed
- Sent
- Delivered
- Failed
- Received
examples:
-
- Sent
-
in: query
name: after
description: 'Filter by messages that are sent at or after this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date before or equal to before.'
required: false
schema:
type:
- string
- 'null'
description: 'Filter by messages that are sent at or after this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date before or equal to before.'
examples:
- '2026-06-16T00:00:00+05:30'
-
in: query
name: before
description: 'Filter by messages that are sent at or before this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date after or equal to after.'
required: false
schema:
type:
- string
- 'null'
description: 'Filter by messages that are sent at or before this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date after or equal to after.'
examples:
- '2026-06-16T00:00:00+05:30'
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 2073
from:
type: string
examples:
- '+19734503511'
to:
type: string
examples:
- '+13529767860'
phone_id:
type:
- string
- 'null'
examples:
- null
content:
type: string
examples:
- 'Exercitationem itaque non aspernatur. Nam incidunt nemo distinctio quam sed quasi commodi.'
type:
type: string
examples:
- SMS
attachments:
type: array
examples:
- []
status:
type: string
examples:
- Sent
response:
type: array
examples:
- []
messenger:
type: string
examples:
- 'Sim #74'
scheduled_at:
type:
- string
- 'null'
examples:
- null
sent_at:
type: string
examples:
- '2026-10-03T01:46:47.000000Z'
delivered_at:
type:
- string
- 'null'
examples:
- null
required:
- id
- from
- to
- phone_id
- content
- type
- attachments
- status
- response
- messenger
- sent_at
- delivered_at
examples:
-
-
id: 2073
from: '+19734503511'
to: '+13529767860'
phone_id: null
content: 'Exercitationem itaque non aspernatur. Nam incidunt nemo distinctio quam sed quasi commodi.'
type: SMS
attachments: []
status: Sent
response: []
messenger: 'Sim #74'
scheduled_at: null
sent_at: '2026-10-03T01:46:47.000000Z'
delivered_at: null
-
id: 2074
from: '+18328270032'
to: '+12817418959'
phone_id: null
content: 'Ducimus est ut voluptatum porro repudiandae doloremque qui. Est id sed voluptatem saepe. Dicta tempore blanditiis quos et iste placeat. Ut voluptas similique magnam quis qui.'
type: SMS
attachments: []
status: Sent
response: []
messenger: 'Sim #75'
scheduled_at: null
sent_at: '2026-10-02T21:29:46.000000Z'
delivered_at: null
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 100
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
required:
- from
- to
examples:
-
data:
-
id: 2073
from: '+19734503511'
to: '+13529767860'
phone_id: null
content: 'Exercitationem itaque non aspernatur. Nam incidunt nemo distinctio quam sed quasi commodi.'
type: SMS
attachments: []
status: Sent
response: []
messenger: 'Sim #74'
scheduled_at: null
sent_at: '2026-10-03T01:46:47.000000Z'
delivered_at: null
-
id: 2074
from: '+18328270032'
to: '+12817418959'
phone_id: null
content: 'Ducimus est ut voluptatum porro repudiandae doloremque qui. Est id sed voluptatem saepe. Dicta tempore blanditiis quos et iste placeat. Ut voluptas similique magnam quis qui.'
type: SMS
attachments: []
status: Sent
response: []
messenger: 'Sim #75'
scheduled_at: null
sent_at: '2026-10-02T21:29:46.000000Z'
delivered_at: null
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 100
to: 2
total: 2
tags:
- Messages
'/api/v1/messages/{id}':
get:
summary: 'Retrieve a message'
operationId: retrieveAMessage
description: 'Retrieves a Message object.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the message.'
examples:
- 2075
from:
type: string
description: 'The sender of the message.'
examples:
- '+19475350806'
to:
type: string
description: 'The recipient of the message.'
examples:
- '+13807084142'
phone_id:
type: string
description: 'The identifier (usually a name) linked to the sender or receiver’s phone number, as defined in the contact list.'
examples:
- null
content:
type: string
description: 'The content of the message.'
examples:
- 'Qui eveniet et quasi qui. Quae sequi qui est rerum quam recusandae omnis. Quidem perferendis et et amet earum illum.'
type:
type: string
description: 'The type of the message.'
examples:
- SMS
attachments:
type: array
description: 'List of all attachments for the message.'
examples:
- []
status:
type: string
description: 'The status of the message.'
enum:
- Pending
- Queued
- Processed
- Sent
- Delivered
- Failed
- Received
examples:
- Sent
response:
type: array
description: 'The response received from the device or sending server.'
examples:
- []
messenger:
type: string
description: 'The sim or sender id used for the message.'
examples:
- 'Sim #76'
scheduled_at:
type:
- string
- 'null'
examples:
- null
sent_at:
type: string
description: 'The date and time when the message was sent.'
examples:
- '2026-10-03T01:48:28.000000Z'
delivered_at:
type: string
description: 'The date and time when the message was delivered.'
examples:
- null
required:
- id
- from
- to
- phone_id
- content
- type
- attachments
- status
- response
- messenger
- sent_at
- delivered_at
examples:
-
id: 2075
from: '+19475350806'
to: '+13807084142'
phone_id: null
content: 'Qui eveniet et quasi qui. Quae sequi qui est rerum quam recusandae omnis. Quidem perferendis et et amet earum illum.'
type: SMS
attachments: []
status: Sent
response: []
messenger: 'Sim #76'
scheduled_at: null
sent_at: '2026-10-03T01:48:28.000000Z'
delivered_at: null
tags:
- Messages
delete:
summary: 'Delete a message'
operationId: deleteAMessage
description: 'Permanently deletes a message. It cannot be undone.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- Messages
parameters:
-
in: path
name: id
description: 'The ID of the message.'
required: true
schema:
type: integer
examples:
- 1
/api/v1/sender-ids:
get:
summary: 'List all sender ids'
operationId: listAllSenderIds
description: 'Returns a list of sender ids. The sender ids are returned sorted by creation date, with the most recently created sender id appearing first.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 47
value:
type: string
examples:
- '647973'
required:
- id
- value
examples:
-
-
id: 47
value: '647973'
-
id: 48
value: '646904'
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 100
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
examples:
-
data:
-
id: 47
value: '647973'
-
id: 48
value: '646904'
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 100
to: 2
total: 2
tags:
- SenderIds
'/api/v1/sender-ids/{id}':
get:
summary: 'Retrieve a sender id'
operationId: retrieveASenderId
description: 'Retrieves a SenderId object.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the sender id.'
examples:
- 49
value:
type: string
description: 'The value of the sender id.'
examples:
- '574311'
required:
- id
- value
examples:
-
id: 49
value: '574311'
tags:
- SenderIds
delete:
summary: 'Delete a sender id'
operationId: deleteASenderId
description: 'Permanently deletes a sender id. Also removes any messages sent using this sender id. It cannot be undone.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- SenderIds
parameters:
-
in: path
name: id
description: 'The ID of the sender id.'
required: true
schema:
type: integer
examples:
- 1
'/api/v1/sending-servers/{sending_server_id}/sender-ids':
post:
summary: 'Create a sender id for a sending server'
operationId: createASenderIdForASendingServer
description: ''
parameters: []
responses:
201:
description: Created
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the sender id.'
examples:
- 50
value:
type: string
description: 'The value of the sender id.'
examples:
- '583848'
required:
- id
- value
examples:
-
id: 50
value: '583848'
tags:
- SenderIds
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
value:
type: string
description: 'The sender id value. Must not be greater than 15 characters.'
examples:
- MySenderID
required:
- value
parameters:
-
in: path
name: sending_server_id
description: 'The ID of the sending server.'
required: true
schema:
type: integer
examples:
- 1
/api/v1/sending-servers:
get:
summary: 'List all sending servers'
operationId: listAllSendingServers
description: 'Returns a list of sending servers. The sending servers are returned sorted by creation date, with the most recently created sending server appearing first.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 45
name:
type: string
examples:
- 'Gideon Boyer'
driver:
type: string
examples:
- Custom
supported_types:
type: array
items:
type: string
examples:
-
- SMS
- MMS
- WhatsApp
config:
type: object
properties:
url:
type: string
examples:
- 'https://smsgateway.rbsoft.org'
method:
type: string
examples:
- GET
params:
type: array
items:
type: object
properties:
key:
type: string
examples:
- 'sims[]'
value:
type: string
examples:
- '{sender_id}'
examples:
-
-
key: 'sims[]'
value: '{sender_id}'
-
key: 'mobile_numbers[]'
value: '{mobile_number}'
-
key: message
value: '{message}'
-
key: attachments
value: '{attachments[]}'
-
key: type
value: MMS
headers:
type: array
items:
type: object
properties:
key:
type: string
examples:
- Authorization
value:
type: string
examples:
- 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
examples:
-
-
key: Authorization
value: 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
enabled:
type: boolean
examples:
- true
created_at:
type: string
examples:
- '2026-10-03T13:19:54.000000Z'
required:
- id
- name
- driver
- supported_types
- config
- enabled
- created_at
examples:
-
-
id: 45
name: 'Gideon Boyer'
driver: Custom
supported_types:
- SMS
- MMS
- WhatsApp
config:
url: 'https://smsgateway.rbsoft.org'
method: GET
params:
-
key: 'sims[]'
value: '{sender_id}'
-
key: 'mobile_numbers[]'
value: '{mobile_number}'
-
key: message
value: '{message}'
-
key: attachments
value: '{attachments[]}'
-
key: type
value: MMS
headers:
-
key: Authorization
value: 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
enabled: true
created_at: '2026-10-03T13:19:54.000000Z'
-
id: 46
name: 'Verna Miller MD'
driver: Custom
supported_types:
- SMS
- MMS
- WhatsApp
config:
url: 'https://smsgateway.rbsoft.org'
method: GET
params:
-
key: 'sims[]'
value: '{sender_id}'
-
key: 'mobile_numbers[]'
value: '{mobile_number}'
-
key: message
value: '{message}'
-
key: attachments
value: '{attachments[]}'
-
key: type
value: MMS
headers:
-
key: Authorization
value: 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
enabled: true
created_at: '2026-10-03T13:19:54.000000Z'
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 100
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
examples:
-
data:
-
id: 45
name: 'Gideon Boyer'
driver: Custom
supported_types:
- SMS
- MMS
- WhatsApp
config:
url: 'https://smsgateway.rbsoft.org'
method: GET
params:
-
key: 'sims[]'
value: '{sender_id}'
-
key: 'mobile_numbers[]'
value: '{mobile_number}'
-
key: message
value: '{message}'
-
key: attachments
value: '{attachments[]}'
-
key: type
value: MMS
headers:
-
key: Authorization
value: 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
enabled: true
created_at: '2026-10-03T13:19:54.000000Z'
-
id: 46
name: 'Verna Miller MD'
driver: Custom
supported_types:
- SMS
- MMS
- WhatsApp
config:
url: 'https://smsgateway.rbsoft.org'
method: GET
params:
-
key: 'sims[]'
value: '{sender_id}'
-
key: 'mobile_numbers[]'
value: '{mobile_number}'
-
key: message
value: '{message}'
-
key: attachments
value: '{attachments[]}'
-
key: type
value: MMS
headers:
-
key: Authorization
value: 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
enabled: true
created_at: '2026-10-03T13:19:54.000000Z'
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 100
to: 2
total: 2
tags:
- 'Sending Servers'
post:
summary: 'Create a sending server'
operationId: createASendingServer
description: ''
parameters: []
responses:
201:
description: Created
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the sending server.'
examples:
- 48
name:
type: string
description: 'The name of the sending server.'
examples:
- 'Gideon Boyer'
driver:
type: string
description: 'The driver of the sending server.'
examples:
- Custom
supported_types:
type: array
description: 'The types of messages supported by the sending server.'
items:
type: string
examples:
-
- SMS
- MMS
- WhatsApp
config:
type: object
properties:
url:
type: string
examples:
- 'https://smsgateway.rbsoft.org'
method:
type: string
examples:
- GET
params:
type: array
items:
type: object
properties:
key:
type: string
examples:
- 'sims[]'
value:
type: string
examples:
- '{sender_id}'
examples:
-
-
key: 'sims[]'
value: '{sender_id}'
-
key: 'mobile_numbers[]'
value: '{mobile_number}'
-
key: message
value: '{message}'
-
key: attachments
value: '{attachments[]}'
-
key: type
value: MMS
headers:
type: array
items:
type: object
properties:
key:
type: string
examples:
- Authorization
value:
type: string
examples:
- 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
examples:
-
-
key: Authorization
value: 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
description: 'The sending server configuration.'
enabled:
type: boolean
description: 'Whether the sending server is enabled or not.'
examples:
- true
created_at:
type: string
description: 'The date and time when the sending server was created.'
examples:
- '2026-10-03T13:19:54.000000Z'
required:
- id
- name
- driver
- supported_types
- config
- enabled
- created_at
examples:
-
id: 48
name: 'Gideon Boyer'
driver: Custom
supported_types:
- SMS
- MMS
- WhatsApp
config:
url: 'https://smsgateway.rbsoft.org'
method: GET
params:
-
key: 'sims[]'
value: '{sender_id}'
-
key: 'mobile_numbers[]'
value: '{mobile_number}'
-
key: message
value: '{message}'
-
key: attachments
value: '{attachments[]}'
-
key: type
value: MMS
headers:
-
key: Authorization
value: 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
enabled: true
created_at: '2026-10-03T13:19:54.000000Z'
tags:
- 'Sending Servers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the sending server.'
examples:
- Twilio
driver:
type: string
description: 'The driver of the sending server.'
enum:
- Custom
- Twilio
examples:
- twilio
supported_types:
type: array
description: ''
items:
type: string
enum:
- SMS
- MMS
- WhatsApp
examples:
-
- MMS
config:
type: object
description: 'The configuration for the sending server.'
properties: { }
examples:
-
account_sid: ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
auth_token: your_auth_token
from: '+15017122661'
enabled:
type: boolean
description: 'The status of the sending server.'
examples:
- true
required:
- name
- driver
- supported_types
- config
- enabled
'/api/v1/sending-servers/{id}':
get:
summary: 'Retrieve a sending server'
operationId: retrieveASendingServer
description: 'Retrieves a SendingServer object.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the sending server.'
examples:
- 47
name:
type: string
description: 'The name of the sending server.'
examples:
- 'Gideon Boyer'
driver:
type: string
description: 'The driver of the sending server.'
examples:
- Custom
supported_types:
type: array
description: 'The types of messages supported by the sending server.'
items:
type: string
examples:
-
- SMS
- MMS
- WhatsApp
config:
type: object
properties:
url:
type: string
examples:
- 'https://smsgateway.rbsoft.org'
method:
type: string
examples:
- GET
params:
type: array
items:
type: object
properties:
key:
type: string
examples:
- 'sims[]'
value:
type: string
examples:
- '{sender_id}'
examples:
-
-
key: 'sims[]'
value: '{sender_id}'
-
key: 'mobile_numbers[]'
value: '{mobile_number}'
-
key: message
value: '{message}'
-
key: attachments
value: '{attachments[]}'
-
key: type
value: MMS
headers:
type: array
items:
type: object
properties:
key:
type: string
examples:
- Authorization
value:
type: string
examples:
- 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
examples:
-
-
key: Authorization
value: 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
description: 'The sending server configuration.'
enabled:
type: boolean
description: 'Whether the sending server is enabled or not.'
examples:
- true
created_at:
type: string
description: 'The date and time when the sending server was created.'
examples:
- '2026-10-03T13:19:54.000000Z'
required:
- id
- name
- driver
- supported_types
- config
- enabled
- created_at
examples:
-
id: 47
name: 'Gideon Boyer'
driver: Custom
supported_types:
- SMS
- MMS
- WhatsApp
config:
url: 'https://smsgateway.rbsoft.org'
method: GET
params:
-
key: 'sims[]'
value: '{sender_id}'
-
key: 'mobile_numbers[]'
value: '{mobile_number}'
-
key: message
value: '{message}'
-
key: attachments
value: '{attachments[]}'
-
key: type
value: MMS
headers:
-
key: Authorization
value: 'Bearer NzczMjdhNzk0NTc4NTk3MTQxNTY2OTU1NDY1OTc5NTE='
enabled: true
created_at: '2026-10-03T13:19:54.000000Z'
tags:
- 'Sending Servers'
put:
summary: 'Update a sending server'
operationId: updateASendingServer
description: "Update the specific sending server by setting the values of the parameters passed. It is recommended to retrieve the sending server first to get the sending server's current state because partial updates are not supported."
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- 'Sending Servers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the sending server.'
examples:
- Twilio
driver:
type: string
description: 'The driver of the sending server.'
enum:
- Custom
- Twilio
examples:
- twilio
supported_types:
type: array
description: ''
items:
type: string
enum:
- SMS
- MMS
- WhatsApp
examples:
-
- WhatsApp
config:
type: object
description: 'The configuration for the sending server.'
properties: { }
examples:
-
account_sid: ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
auth_token: your_auth_token
from: '+15017122661'
enabled:
type: boolean
description: 'The status of the sending server.'
examples:
- true
required:
- name
- driver
- supported_types
- config
- enabled
delete:
summary: 'Delete a sending server'
operationId: deleteASendingServer
description: 'Permanently deletes a sending server. Also removes sender ids associated with the sending server and any messages associated with those sender ids. It cannot be undone.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- 'Sending Servers'
parameters:
-
in: path
name: id
description: 'The ID of the sending server.'
required: true
schema:
type: integer
examples:
- 1
/api/v1/ussd-pulls/send:
get:
summary: 'Send USSD pulls'
operationId: sendUSSDPulls
description: 'Sends USSD Pull campaign.'
parameters: []
responses:
201:
description: Created
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the campaign.'
examples:
- 58
name:
type:
- string
- 'null'
description: 'The name of the campaign.'
examples:
- 'Merl Champlin'
scheduled_at:
type:
- string
- 'null'
description: 'The date and time when the campaign is scheduled to run.'
examples:
- null
timezone:
type: string
description: 'The timezone of the campaign.'
examples:
- UTC
recurring:
type: boolean
description: 'Whether the campaign is recurring.'
examples:
- false
frequency:
type:
- string
- 'null'
description: 'The frequency of the campaign.'
examples:
- null
frequency_unit:
type:
- string
- 'null'
description: 'The unit of the frequency.'
examples:
- null
ends_at:
type:
- string
- 'null'
description: 'The date and time when the recurring campaign ends.'
examples:
- null
repeat_at:
type:
- string
- 'null'
description: 'The date and time when the campaign is scheduled to repeat.'
examples:
- null
active_hours:
type: string
description: 'The timespan of a day when the campaign is active.'
examples:
- '00:00-23:59'
days_of_week:
type: array
description: 'The days of the week when the campaign is active.'
items:
type: integer
examples:
-
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status:
type: string
description: 'The status of the campaign.'
examples:
- Processed
type:
type: string
description: 'The type of the campaign.'
examples:
- SMS
options:
type: object
properties:
delay:
type: string
description: 'The delay between each item before sending the next one.'
examples:
- '0'
prioritize:
type: boolean
description: 'Whether to prioritize the campaign.'
examples:
- false
delivery_report:
type: boolean
description: 'Whether to request delivery report for SMS.'
examples:
- false
description: 'The options of the campaign.'
created_at:
type: string
description: 'The date and time the campaign was created.'
examples:
- '2026-10-03T13:19:54.000000Z'
updated_at:
type: string
description: 'The date and time the campaign was last updated.'
examples:
- '2026-10-03T13:19:54.000000Z'
required:
- id
- name
- scheduled_at
- timezone
- recurring
- frequency
- frequency_unit
- ends_at
- repeat_at
- active_hours
- days_of_week
- status
- type
- options
- created_at
- updated_at
examples:
-
id: 58
name: 'Merl Champlin'
scheduled_at: null
timezone: UTC
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '00:00-23:59'
days_of_week:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
status: Processed
type: SMS
options:
delay: '0'
prioritize: false
delivery_report: false
created_at: '2026-10-03T13:19:54.000000Z'
updated_at: '2026-10-03T13:19:54.000000Z'
tags:
- 'USSD Pulls'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
sims:
type: array
description: 'The ids of the sims to use for sending the USSD pulls. It can be an array or comma-separated string. You can also set it to only * to use all available sims.'
items:
type: string
examples:
-
- 1
ussd_codes:
type: array
description: 'The array of USSD codes to send. It can be an array or comma-separated string. Must match the regex /(?:\*\d+)+#/.'
items:
type: string
examples:
-
- '*123#'
delay:
type:
- string
- 'null'
description: 'The delay in seconds between each USSD pull.'
examples:
- 60
prioritize:
type:
- boolean
- 'null'
description: 'Whether to prioritize the campaign.'
examples:
- true
name:
type: string
description: 'The name of the campaign. Must not be greater than 255 characters.'
examples:
- 'My Campaign'
scheduled_at:
type: string
description: 'The date and time the campaign is scheduled to run. Must be a valid date.'
examples:
- '2021-01-01T12:00:00Z'
recurring:
type: boolean
description: 'Whether the campaign is recurring.'
examples:
- true
frequency:
type: integer
description: 'The frequency of the campaign. This field is required when recurring is true. Must be at least 1.'
examples:
- 1
frequency_unit:
type: string
description: 'The unit of the frequency. This field is required when recurring is true.'
enum:
- Minute
- Hour
- Day
- Week
- Month
- Year
examples:
- day
ends_at:
type: string
description: 'The date and time when the recurring campaign ends. Must be a valid date.'
examples:
- '2021-01-01T12:00:00Z'
timezone:
type: string
description: 'The timezone of the campaign. This is used for scheduled_at, ends_at, days_of_week, and active_hours. This field is required when active_hours, days_of_week, scheduled_at, or ends_at is present. Must be a valid time zone, such as Africa/Accra.'
examples:
- UTC
days_of_week:
type: array
description: 'The days of the week when the campaign is active. It can be an array or comma-separated string.'
items:
type: string
enum:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
examples:
-
- 1
active_hours:
type: object
description: 'Must contain 2 items.'
properties:
start:
type: string
description: 'The start time of the active hours. This field is required when active_hours.end is present. Must be a valid date in the format H:i. Must be a date before active_hours.end.'
examples:
- '08:00'
end:
type: string
description: 'The end time of the active hours. This field is required when active_hours.start is present. Must be a valid date in the format H:i. Must be a date after active_hours.start.'
examples:
- '17:00'
examples:
- null
random_sender:
type: boolean
description: 'Whether to use a random sim from selected sims for entire campaign.'
examples:
- true
required:
- sims
- ussd_codes
/api/v1/ussd-pulls:
get:
summary: 'List all USSD pulls'
operationId: listAllUSSDPulls
description: 'Returns a list of USSD pulls. The USSD pulls are returned sorted by sent date, with the most recently sent USSD pull appearing first.'
parameters:
-
in: query
name: user
description: 'Filter by user id. Only available for admin. Must be at least 1.'
required: false
schema:
type:
- number
- 'null'
description: 'Filter by user id. Only available for admin. Must be at least 1.'
examples:
- 1.0
-
in: query
name: campaign
description: 'Filter by campaign id. Must be at least 1.'
required: false
schema:
type:
- number
- 'null'
description: 'Filter by campaign id. Must be at least 1.'
examples:
- 1.0
-
in: query
name: sim
description: 'Filter by sim id. Must be at least 1.'
required: false
schema:
type:
- number
- 'null'
description: 'Filter by sim id. Must be at least 1.'
examples:
- 1.0
-
in: query
name: statuses
description: ''
required: false
schema:
type: array
description: ''
items:
type: string
enum:
- Pending
- Queued
- Completed
- Failed
examples:
-
- Failed
-
in: query
name: after
description: 'Show USSD pulls that are sent at or after this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date before or equal to before.'
required: false
schema:
type:
- string
- 'null'
description: 'Show USSD pulls that are sent at or after this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date before or equal to before.'
examples:
- '2026-06-16T00:00:00+05:30'
-
in: query
name: before
description: 'Show USSD pulls that are sent at or before this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date after or equal to after.'
required: false
schema:
type:
- string
- 'null'
description: 'Show USSD pulls that are sent at or before this ISO-8601 datetime. Must be a valid date in the format Y-m-d\TH:i:sP. Must be a date after or equal to after.'
examples:
- '2026-06-16T00:00:00+05:30'
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
data:
type: array
items:
type: object
properties:
id:
type: integer
examples:
- 293
code:
type: string
examples:
- '*3250#'
response:
type: string
examples:
- 'Dolorem fuga recusandae ratione optio ut nobis. Rem esse reiciendis exercitationem itaque. Aspernatur odio nam incidunt nemo distinctio quam.'
status:
type: string
examples:
- Completed
sim_id:
type: integer
examples:
- 77
sent_at:
type: string
examples:
- '2026-10-03T18:49:54.000000Z'
received_at:
type: string
examples:
- '2026-10-03T13:19:54.000000Z'
required:
- id
- code
- response
- status
- sim_id
- sent_at
- received_at
examples:
-
-
id: 293
code: '*3250#'
response: 'Dolorem fuga recusandae ratione optio ut nobis. Rem esse reiciendis exercitationem itaque. Aspernatur odio nam incidunt nemo distinctio quam.'
status: Completed
sim_id: 77
sent_at: '2026-10-03T18:49:54.000000Z'
received_at: '2026-10-03T13:19:54.000000Z'
-
id: 294
code: '*6427236#'
response: 'Et sapiente sit voluptate placeat quasi. Laboriosam cumque enim rem officiis non vel deserunt laboriosam. Omnis impedit expedita necessitatibus necessitatibus voluptatem.'
status: Completed
sim_id: 78
sent_at: '2026-10-03T18:49:54.000000Z'
received_at: '2026-10-03T13:19:54.000000Z'
links:
type: object
properties:
first:
type: string
examples:
- '/?page=1'
last:
type: string
examples:
- '/?page=1'
prev:
type:
- string
- 'null'
examples:
- null
next:
type:
- string
- 'null'
examples:
- null
meta:
type: object
properties:
current_page:
type: integer
examples:
- 1
from:
type: integer
examples:
- 1
last_page:
type: integer
examples:
- 1
links:
type: array
items:
type: object
properties:
url:
type:
- string
- 'null'
examples:
- null
label:
type: string
examples:
- '« Previous'
page:
type:
- string
- 'null'
examples:
- null
active:
type: boolean
examples:
- false
examples:
-
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path:
type: string
examples:
- /
per_page:
type: integer
examples:
- 100
to:
type: integer
examples:
- 2
total:
type: integer
examples:
- 2
examples:
-
data:
-
id: 293
code: '*3250#'
response: 'Dolorem fuga recusandae ratione optio ut nobis. Rem esse reiciendis exercitationem itaque. Aspernatur odio nam incidunt nemo distinctio quam.'
status: Completed
sim_id: 77
sent_at: '2026-10-03T18:49:54.000000Z'
received_at: '2026-10-03T13:19:54.000000Z'
-
id: 294
code: '*6427236#'
response: 'Et sapiente sit voluptate placeat quasi. Laboriosam cumque enim rem officiis non vel deserunt laboriosam. Omnis impedit expedita necessitatibus necessitatibus voluptatem.'
status: Completed
sim_id: 78
sent_at: '2026-10-03T18:49:54.000000Z'
received_at: '2026-10-03T13:19:54.000000Z'
links:
first: '/?page=1'
last: '/?page=1'
prev: null
next: null
meta:
current_page: 1
from: 1
last_page: 1
links:
-
url: null
label: '« Previous'
page: null
active: false
-
url: '/?page=1'
label: '1'
page: 1
active: true
-
url: null
label: 'Next »'
page: null
active: false
path: /
per_page: 100
to: 2
total: 2
tags:
- 'USSD Pulls'
'/api/v1/ussd-pulls/{id}':
get:
summary: 'Retrieve a USSD pull'
operationId: retrieveAUSSDPull
description: 'Retrieves a USSD Pull object.'
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
properties:
id:
type: integer
description: 'The ID of the USSD pull.'
examples:
- 295
code:
type: string
description: 'The USSD code.'
examples:
- '*697#22#'
response:
type: string
description: 'The response from the USSD pull.'
examples:
- 'Tempore in qui hic sequi in. Et enim qui eveniet et quasi qui corporis quae. Qui est rerum quam recusandae omnis dolore quidem perferendis. Et amet earum illum qui et maxime.'
status:
type: string
description: 'The status of the USSD pull.'
enum:
- Pending
- Queued
- Completed
- Failed
examples:
- Completed
sim_id:
type: integer
description: 'The id of the sim used to send the USSD pull.'
examples:
- 79
sent_at:
type: string
description: 'The date and time when the USSD pull was sent.'
examples:
- '2026-10-03T18:49:54.000000Z'
received_at:
type: string
description: 'The date and time when the response from the USSD pull was received.'
examples:
- '2026-10-03T13:19:54.000000Z'
required:
- id
- code
- response
- status
- sim_id
- sent_at
- received_at
examples:
-
id: 295
code: '*697#22#'
response: 'Tempore in qui hic sequi in. Et enim qui eveniet et quasi qui corporis quae. Qui est rerum quam recusandae omnis dolore quidem perferendis. Et amet earum illum qui et maxime.'
status: Completed
sim_id: 79
sent_at: '2026-10-03T18:49:54.000000Z'
received_at: '2026-10-03T13:19:54.000000Z'
tags:
- 'USSD Pulls'
delete:
summary: 'Delete a USSD pull'
operationId: deleteAUSSDPull
description: 'Permanently deletes a USSD pull. It cannot be undone.'
parameters: []
responses:
204:
description: 'No content'
content:
application/json:
schema:
type:
- object
- 'null'
tags:
- 'USSD Pulls'
parameters:
-
in: path
name: id
description: 'The ID of the ussd pull.'
required: true
schema:
type: integer
examples:
- 1