Y-m-d
. Must be a date before or equal to before
.'
example: '2021-01-01'
required: false
schema:
type: string
description: 'Filter by campaigns after a certain date. Must be a valid date in the format Y-m-d
. Must be a date before or equal to before
.'
example: '2021-01-01'
nullable: true
-
in: query
name: before
description: 'Filter by campaigns before a certain date. Must be a valid date in the format Y-m-d
. Must be a date after or equal to after
.'
example: '2025-01-01'
required: false
schema:
type: string
description: 'Filter by campaigns before a certain date. Must be a valid date in the format Y-m-d
. Must be a date after or equal to after
.'
example: '2025-01-01'
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 7
name: 'Leo Gusikowski'
scheduled_at: null
timezone: Atlantic/Faroe
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '09:00-17:00'
days_of_week:
- 1
- 3
- 5
- 6
- 7
status: Processed
type: 'USSD Pull'
options:
delay: '39'
prioritize: false
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.000000Z'
-
id: 8
name: 'Mr. Orland Hermiston II'
scheduled_at: '2026-05-01T21:31:16.000000Z'
timezone: America/Boise
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '09:00-17:00'
days_of_week:
- 1
- 2
- 4
- 5
status: Processed
type: SMS
options:
delay: '60'
prioritize: false
delivery_report: false
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.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
properties:
data:
type: array
example:
-
id: 7
name: 'Leo Gusikowski'
scheduled_at: null
timezone: Atlantic/Faroe
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '09:00-17:00'
days_of_week:
- 1
- 3
- 5
- 6
- 7
status: Processed
type: 'USSD Pull'
options:
delay: '39'
prioritize: false
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.000000Z'
-
id: 8
name: 'Mr. Orland Hermiston II'
scheduled_at: '2026-05-01T21:31:16.000000Z'
timezone: America/Boise
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '09:00-17:00'
days_of_week:
- 1
- 2
- 4
- 5
status: Processed
type: SMS
options:
delay: '60'
prioritize: false
delivery_report: false
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.000000Z'
items:
type: object
properties:
id:
type: integer
example: 7
name:
type: string
example: 'Leo Gusikowski'
scheduled_at:
type: string
example: null
timezone:
type: string
example: Atlantic/Faroe
recurring:
type: boolean
example: false
frequency:
type: string
example: null
frequency_unit:
type: string
example: null
ends_at:
type: string
example: null
repeat_at:
type: string
example: null
active_hours:
type: string
example: '09:00-17:00'
days_of_week:
type: array
example:
- 1
- 3
- 5
- 6
- 7
items:
type: integer
status:
type: string
example: Processed
type:
type: string
example: 'USSD Pull'
options:
type: object
properties:
delay:
type: string
example: '39'
prioritize:
type: boolean
example: false
created_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
updated_at:
type: string
example: '2025-09-08T05:42:25.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
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 100
to:
type: integer
example: 2
total:
type: integer
example: 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
example:
id: 9
name: 'Stefanie Lebsack'
scheduled_at: '2025-10-23T01:36:18.000000Z'
timezone: Asia/Atyrau
recurring: false
frequency: null
frequency_unit: null
ends_at: null
repeat_at: null
active_hours: '00:00-23:59'
days_of_week:
- 1
- 2
- 5
- 6
status: Processed
type: SMS
options:
delay: '57'
prioritize: false
delivery_report: true
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.000000Z'
properties:
id:
type: integer
example: 9
description: 'The ID of the campaign.'
enum: []
name:
type: string
example: 'Stefanie Lebsack'
description: 'The name of the campaign.'
enum: []
scheduled_at:
type: string
example: '2025-10-23T01:36:18.000000Z'
description: 'The date and time when the campaign is scheduled to run.'
enum: []
timezone:
type: string
example: Asia/Atyrau
description: 'The timezone of the campaign.'
enum: []
recurring:
type: boolean
example: false
description: 'Whether the campaign is recurring.'
enum: []
frequency:
type: string
example: null
description: 'The frequency of the campaign.'
enum: []
frequency_unit:
type: string
example: null
description: 'The unit of the frequency.'
enum: []
ends_at:
type: string
example: null
description: 'The date and time when the recurring campaign ends.'
enum: []
repeat_at:
type: string
example: null
description: 'The date and time when the campaign is scheduled to repeat.'
enum: []
active_hours:
type: string
example: '00:00-23:59'
description: 'The timespan of a day when the campaign is active.'
enum: []
days_of_week:
type: array
example:
- 1
- 2
- 5
- 6
description: 'The days of the week when the campaign is active.'
enum: []
items:
type: integer
status:
type: string
example: Processed
description: 'The status of the campaign.'
enum: []
type:
type: string
example: SMS
description: 'The type of the campaign.'
enum: []
options:
type: object
properties:
delay:
type: string
example: '57'
description: 'The delay between each item before sending the next one.'
enum: []
prioritize:
type: boolean
example: false
description: 'Whether to prioritize the campaign.'
enum: []
delivery_report:
type: boolean
example: true
description: 'Whether to request delivery report for SMS.'
enum: []
description: 'The options of the campaign.'
created_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time the campaign was created.'
enum: []
updated_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time the campaign was last updated.'
enum: []
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
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
nullable: true
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.'
example: 'New Campaign'
nullable: false
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
nullable: true
tags:
- Campaigns
parameters:
-
in: path
name: id
description: 'The ID of the campaign.'
example: 1
required: true
schema:
type: integer
'/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
example:
data:
-
id: 11
name: null
model: 'Nokia X20'
android_version: '7'
app_version: 0.20.34
battery: 46
is_charging: false
enabled: true
sims:
-
id: 15
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: 12
name: null
model: 'Xiaomi Mi 11'
android_version: '9'
app_version: 3.73.98
battery: 71
is_charging: false
enabled: true
sims:
-
id: 16
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
properties:
data:
type: array
example:
-
id: 11
name: null
model: 'Nokia X20'
android_version: '7'
app_version: 0.20.34
battery: 46
is_charging: false
enabled: true
sims:
-
id: 15
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: 12
name: null
model: 'Xiaomi Mi 11'
android_version: '9'
app_version: 3.73.98
battery: 71
is_charging: false
enabled: true
sims:
-
id: 16
name: 'Hermiston, Parker and Marvin'
label: null
number: '+13648507362'
country: GE
carrier: 'Littel Ltd'
slot: 0
data_roaming: false
signal_strength: 4
active: true
items:
type: object
properties:
id:
type: integer
example: 11
name:
type: string
example: null
model:
type: string
example: 'Nokia X20'
android_version:
type: string
example: '7'
app_version:
type: string
example: 0.20.34
battery:
type: integer
example: 46
is_charging:
type: boolean
example: false
enabled:
type: boolean
example: true
sims:
type: array
example:
-
id: 15
name: 'Koelpin, Nolan and Bailey'
label: null
number: '+15202822732'
country: SZ
carrier: 'Miller Ltd'
slot: 0
data_roaming: false
signal_strength: 4
active: true
items:
type: object
properties:
id:
type: integer
example: 15
name:
type: string
example: 'Koelpin, Nolan and Bailey'
label:
type: string
example: null
number:
type: string
example: '+15202822732'
country:
type: string
example: SZ
carrier:
type: string
example: 'Miller Ltd'
slot:
type: integer
example: 0
data_roaming:
type: boolean
example: false
signal_strength:
type: integer
example: 4
active:
type: boolean
example: true
required:
- id
- name
required:
- id
- name
- model
- android_version
- app_version
- battery
- is_charging
- enabled
- sims
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 10
to:
type: integer
example: 2
total:
type: integer
example: 2
tags:
- Campaigns
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
example: 1
required: true
schema:
type: integer
'/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
example:
data:
-
id: 3
name: 'Gideon Boyer'
enabled: true
sender_ids:
-
id: 21
value: '942561'
-
id: 4
name: "Bridgette D'Amore"
enabled: true
sender_ids:
-
id: 22
value: '597151'
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
properties:
data:
type: array
example:
-
id: 3
name: 'Gideon Boyer'
enabled: true
sender_ids:
-
id: 21
value: '942561'
-
id: 4
name: "Bridgette D'Amore"
enabled: true
sender_ids:
-
id: 22
value: '597151'
items:
type: object
properties:
id:
type: integer
example: 3
name:
type: string
example: 'Gideon Boyer'
enabled:
type: boolean
example: true
sender_ids:
type: array
example:
-
id: 21
value: '942561'
items:
type: object
properties:
id:
type: integer
example: 21
value:
type: string
example: '942561'
required:
- id
required:
- id
- name
- sender_ids
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 10
to:
type: integer
example: 2
total:
type: integer
example: 2
tags:
- Campaigns
parameters:
-
in: path
name: campaign_id
description: 'The ID of the campaign.'
example: 1
required: true
schema:
type: integer
/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
example:
data:
-
id: 11
name: deborah.mayert
-
id: 12
name: kuhn.jaclyn
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
properties:
data:
type: array
example:
-
id: 11
name: deborah.mayert
-
id: 12
name: kuhn.jaclyn
items:
type: object
properties:
id:
type: integer
example: 11
name:
type: string
example: deborah.mayert
required:
- id
- name
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 10
to:
type: integer
example: 2
total:
type: integer
example: 2
tags:
- 'Contact Lists'
post:
summary: 'Create a contact list'
operationId: createAContactList
description: ''
parameters: []
responses:
201:
description: Created
content:
application/json:
schema:
type: object
example:
id: 14
name: brown.maggie
properties:
id:
type: integer
example: 14
description: 'The ID of the contact list.'
enum: []
name:
type: string
example: brown.maggie
description: 'The name of the contact list.'
enum: []
required:
- id
- name
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.'
example: 'My List'
nullable: false
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
example:
id: 13
name: deborah.mayert
properties:
id:
type: integer
example: 13
description: 'The ID of the contact list.'
enum: []
name:
type: string
example: deborah.mayert
description: 'The name of the contact list.'
enum: []
required:
- id
- name
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
nullable: true
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.'
example: 'My List'
nullable: false
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
nullable: true
tags:
- 'Contact Lists'
parameters:
-
in: path
name: id
description: 'The ID of the contact list.'
example: 1
required: true
schema:
type: integer
'/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
example:
data:
-
id: 21
label: Itaque
tag: itaque
type: email
options: null
default_value: non
required: true
-
id: 22
label: Sed
tag: sed
type: multiselect
options:
-
label: quasi
value: commodi
-
label: tempore
value: in
-
label: qui
value: hic
-
label: sequi
value: corrupti
-
label: et
value: enim
default_value:
- in
required: 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: 50
to: 2
total: 2
properties:
data:
type: array
example:
-
id: 21
label: Itaque
tag: itaque
type: email
options: null
default_value: non
required: true
-
id: 22
label: Sed
tag: sed
type: multiselect
options:
-
label: quasi
value: commodi
-
label: tempore
value: in
-
label: qui
value: hic
-
label: sequi
value: corrupti
-
label: et
value: enim
default_value:
- in
required: true
items:
type: object
properties:
id:
type: integer
example: 21
label:
type: string
example: Itaque
tag:
type: string
example: itaque
type:
type: string
example: email
options:
type: string
example: null
default_value:
type: string
example: non
required:
type: boolean
example: true
required:
- id
- label
- tag
- type
- options
- default_value
- required
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
required:
- label
path:
type: string
example: /
per_page:
type: integer
example: 50
to:
type: integer
example: 2
total:
type: integer
example: 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
example:
id: 24
label: Est
tag: est
type: dropdown
options:
-
label: repellat
value: ut
-
label: est
value: accusantium
-
label: eaque
value: unde
-
label: enim
value: id
-
label: id
value: dolorem
default_value: null
required: false
properties:
id:
type: integer
example: 24
description: 'The ID of the field.'
enum: []
label:
type: string
example: Est
description: 'The label of the field.'
enum: []
tag:
type: string
example: est
description: 'The tag of the field.'
enum: []
type:
type: string
example: dropdown
description: 'The type of the field.'
enum:
- text
- number
- email
- dropdown
- multiselect
- checkbox
- radio
- date
- datetime-local
- time
- textarea
options:
type: array
example:
-
label: repellat
value: ut
-
label: est
value: accusantium
-
label: eaque
value: unde
-
label: enim
value: id
-
label: id
value: dolorem
description: 'List of all possible options for the field.'
enum: []
items:
type: object
properties:
label:
type: string
example: repellat
value:
type: string
example: ut
required:
- label
default_value:
type: string
example: null
description: 'The default value of the field.'
enum: []
required:
type: boolean
example: false
description: 'Whether the field is required or not.'
enum: []
required:
- id
- label
- tag
- type
- options
- default_value
- required
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.'
example: 'First Name'
nullable: false
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.'
example: first_name
nullable: false
type:
type: string
description: 'The type of the field.'
example: text
nullable: false
enum:
- text
- number
- email
- dropdown
- multiselect
- checkbox
- radio
- date
- datetime-local
- time
- textarea
options:
type: array
description: 'List of all possible options for the field. This field is required when type
is checkbox
, dropdown
, multiselect
, or radio
.'
example: null
items:
type: object
properties:
label:
type: string
description: 'The label of the option. Must be at least 3 characters.'
example: 'Option 1'
nullable: false
value:
type: string
description: 'The value of the option. Must contain only letters, numbers, dashes and underscores.'
example: option_1
nullable: false
required:
- label
- value
default_value:
type: string
description: 'The default value of the field.'
example: John
nullable: true
required:
type: boolean
description: 'Whether the field is required or not.'
example: false
nullable: false
required:
- label
- tag
- type
- required
parameters:
-
in: path
name: contact_list_id
description: 'The ID of the contact list.'
example: 1
required: true
schema:
type: integer
'/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
example:
id: 23
label: Non
tag: non
type: email
options: null
default_value: aspernatur
required: true
properties:
id:
type: integer
example: 23
description: 'The ID of the field.'
enum: []
label:
type: string
example: Non
description: 'The label of the field.'
enum: []
tag:
type: string
example: non
description: 'The tag of the field.'
enum: []
type:
type: string
example: email
description: 'The type of the field.'
enum:
- text
- number
- email
- dropdown
- multiselect
- checkbox
- radio
- date
- datetime-local
- time
- textarea
options:
type: string
example: null
description: 'List of all possible options for the field.'
enum: []
default_value:
type: string
example: aspernatur
description: 'The default value of the field.'
enum: []
required:
type: boolean
example: true
description: 'Whether the field is required or not.'
enum: []
required:
- id
- label
- tag
- type
- options
- default_value
- required
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
nullable: true
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.'
example: 'First Name'
nullable: false
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.'
example: first_name
nullable: false
type:
type: string
description: 'The type of the field.'
example: text
nullable: false
enum:
- text
- number
- email
- dropdown
- multiselect
- checkbox
- radio
- date
- datetime-local
- time
- textarea
options:
type: array
description: 'List of all possible options for the field. This field is required when type
is checkbox
, dropdown
, multiselect
, or radio
.'
example: null
items:
type: object
properties:
label:
type: string
description: 'The label of the option. Must be at least 3 characters.'
example: 'Option 1'
nullable: false
value:
type: string
description: 'The value of the option. Must contain only letters, numbers, dashes and underscores.'
example: option_1
nullable: false
required:
- label
- value
default_value:
type: string
description: 'The default value of the field.'
example: John
nullable: true
required:
type: boolean
description: 'Whether the field is required or not.'
example: false
nullable: false
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
nullable: true
tags:
- 'Contact Lists'
parameters:
-
in: path
name: id
description: 'The ID of the field.'
example: 1
required: true
schema:
type: integer
'/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
example:
data:
-
id: 2001
mobile_number: '+14329282957'
subscribed: true
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.000000Z'
-
id: 2002
mobile_number: '+18058165575'
subscribed: false
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.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
properties:
data:
type: array
example:
-
id: 2001
mobile_number: '+14329282957'
subscribed: true
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.000000Z'
-
id: 2002
mobile_number: '+18058165575'
subscribed: false
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.000000Z'
items:
type: object
properties:
id:
type: integer
example: 2001
mobile_number:
type: string
example: '+14329282957'
subscribed:
type: boolean
example: true
created_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
updated_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
required:
- id
- mobile_number
- subscribed
- created_at
- updated_at
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 100
to:
type: integer
example: 2
total:
type: integer
example: 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
example:
id: 2004
mobile_number: '+19475350806'
subscribed: true
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.000000Z'
properties:
id:
type: integer
example: 2004
description: 'The ID of the contact.'
enum: []
mobile_number:
type: string
example: '+19475350806'
description: 'The mobile number of the contact.'
enum: []
subscribed:
type: boolean
example: true
description: 'Whether the contact is subscribed or not.'
enum: []
created_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time when the contact was created.'
enum: []
updated_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time when the contact was last updated.'
enum: []
required:
- id
- mobile_number
- subscribed
- created_at
- updated_at
tags:
- Contacts
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
mobile_number:
type: string
description: 'The mobile number of the contact.'
example: '+12025886500'
nullable: false
subscribed:
type: boolean
description: 'Whether the contact is subscribed to the contact list.'
example: false
nullable: false
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."
example: John
nullable: false
last_name:
type: string
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."
example: Doe
nullable: true
required:
- mobile_number
- subscribed
- first_name
parameters:
-
in: path
name: contact_list_id
description: 'The ID of the contact list.'
example: 1
required: true
schema:
type: integer
'/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
example:
id: 2003
mobile_number: '+19475350806'
subscribed: true
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.000000Z'
properties:
id:
type: integer
example: 2003
description: 'The ID of the contact.'
enum: []
mobile_number:
type: string
example: '+19475350806'
description: 'The mobile number of the contact.'
enum: []
subscribed:
type: boolean
example: true
description: 'Whether the contact is subscribed or not.'
enum: []
created_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time when the contact was created.'
enum: []
updated_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time when the contact was last updated.'
enum: []
required:
- id
- mobile_number
- subscribed
- created_at
- updated_at
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
nullable: true
tags:
- Contacts
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
mobile_number:
type: string
description: 'The mobile number of the contact.'
example: '+12025886500'
nullable: false
subscribed:
type: boolean
description: 'Whether the contact is subscribed to the contact list.'
example: false
nullable: false
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."
example: John
nullable: false
last_name:
type: string
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."
example: Doe
nullable: true
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
nullable: true
tags:
- Contacts
parameters:
-
in: path
name: id
description: 'The ID of the contact.'
example: 1
required: true
schema:
type: integer
/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
example:
data:
-
id: 13
name: null
model: 'Nokia X20'
enabled: true
android_version: '7'
app_version: 0.20.34
battery: 46
is_charging: false
updated_at: '2025-09-08T05:42:25.000000Z'
sims:
-
id: 17
name: 'Nitzsche, Rogahn and Jakubowski'
label: null
number: '+16284319281'
country: IL
carrier: 'Gerhold, Walter and Schinner'
slot: 0
data_roaming: false
signal_strength: 4
active: true
-
id: 14
name: null
model: 'OnePlus Nord 2 5G'
enabled: true
android_version: '11'
app_version: 3.40.82
battery: 0
is_charging: true
updated_at: '2025-09-08T05:42:25.000000Z'
sims:
-
id: 18
name: 'Langosh, Waters and Wolf'
label: null
number: '+13108318149'
country: BW
carrier: 'Boehm LLC'
slot: 0
data_roaming: true
signal_strength: 2
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
properties:
data:
type: array
example:
-
id: 13
name: null
model: 'Nokia X20'
enabled: true
android_version: '7'
app_version: 0.20.34
battery: 46
is_charging: false
updated_at: '2025-09-08T05:42:25.000000Z'
sims:
-
id: 17
name: 'Nitzsche, Rogahn and Jakubowski'
label: null
number: '+16284319281'
country: IL
carrier: 'Gerhold, Walter and Schinner'
slot: 0
data_roaming: false
signal_strength: 4
active: true
-
id: 14
name: null
model: 'OnePlus Nord 2 5G'
enabled: true
android_version: '11'
app_version: 3.40.82
battery: 0
is_charging: true
updated_at: '2025-09-08T05:42:25.000000Z'
sims:
-
id: 18
name: 'Langosh, Waters and Wolf'
label: null
number: '+13108318149'
country: BW
carrier: 'Boehm LLC'
slot: 0
data_roaming: true
signal_strength: 2
active: true
items:
type: object
properties:
id:
type: integer
example: 13
name:
type: string
example: null
model:
type: string
example: 'Nokia X20'
enabled:
type: boolean
example: true
android_version:
type: string
example: '7'
app_version:
type: string
example: 0.20.34
battery:
type: integer
example: 46
is_charging:
type: boolean
example: false
updated_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
sims:
type: array
example:
-
id: 17
name: 'Nitzsche, Rogahn and Jakubowski'
label: null
number: '+16284319281'
country: IL
carrier: 'Gerhold, Walter and Schinner'
slot: 0
data_roaming: false
signal_strength: 4
active: true
items:
type: object
properties:
id:
type: integer
example: 17
name:
type: string
example: 'Nitzsche, Rogahn and Jakubowski'
label:
type: string
example: null
number:
type: string
example: '+16284319281'
country:
type: string
example: IL
carrier:
type: string
example: 'Gerhold, Walter and Schinner'
slot:
type: integer
example: 0
data_roaming:
type: boolean
example: false
signal_strength:
type: integer
example: 4
active:
type: boolean
example: true
required:
- id
- name
required:
- id
- name
- model
- enabled
- android_version
- app_version
- battery
- is_charging
- updated_at
- sims
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 100
to:
type: integer
example: 2
total:
type: integer
example: 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
example:
id: 15
name: null
model: 'Nokia X20'
enabled: true
android_version: '7'
app_version: 0.20.34
battery: 46
is_charging: false
updated_at: '2025-09-08T05:42:25.000000Z'
sims:
-
id: 19
name: 'Carter, Zieme and Oberbrunner'
label: null
number: '+16819707512'
country: KM
carrier: Kassulke-Ankunding
slot: 0
data_roaming: true
signal_strength: 3
active: true
properties:
id:
type: integer
example: 15
description: 'The ID of the device.'
enum: []
name:
type: string
example: null
description: 'The name of the device.'
enum: []
model:
type: string
example: 'Nokia X20'
description: 'The model of the device.'
enum: []
enabled:
type: boolean
example: true
description: 'Whether the user has logged in to the app on the device.'
enum: []
android_version:
type: string
example: '7'
description: 'The android version of the device.'
enum: []
app_version:
type: string
example: 0.20.34
description: 'The app version installed on the device.'
enum: []
battery:
type: integer
example: 46
description: 'The percentage of battery remaining on the device.'
enum: []
is_charging:
type: boolean
example: false
description: 'Whether the device is charging or not.'
enum: []
updated_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The last time the device was updated.'
enum: []
sims:
type: array
example:
-
id: 19
name: 'Carter, Zieme and Oberbrunner'
label: null
number: '+16819707512'
country: KM
carrier: Kassulke-Ankunding
slot: 0
data_roaming: true
signal_strength: 3
active: true
description: 'List of all sims on the device.'
enum: []
items:
type: object
properties:
id:
type: integer
example: 19
name:
type: string
example: 'Carter, Zieme and Oberbrunner'
label:
type: string
example: null
number:
type: string
example: '+16819707512'
country:
type: string
example: KM
carrier:
type: string
example: Kassulke-Ankunding
slot:
type: integer
example: 0
data_roaming:
type: boolean
example: true
signal_strength:
type: integer
example: 3
active:
type: boolean
example: true
required:
- id
- name
required:
- id
- name
- model
- enabled
- android_version
- app_version
- battery
- is_charging
- updated_at
- sims
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
nullable: true
tags:
- Devices
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the device. Must be at least 3 characters. Must not be greater than 255 characters.'
example: 'My Device'
nullable: true
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
nullable: true
tags:
- Devices
parameters:
-
in: path
name: id
description: 'The ID of the device.'
example: 1
required: true
schema:
type: integer
/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
example:
id: 10
name: 'Blaise Pouros'
scheduled_at: '2025-12-16T20:37:14.000000Z'
timezone: America/Indiana/Knox
recurring: true
frequency: 5
frequency_unit: Minute
ends_at: '2026-09-05T09:37:44.000000Z'
repeat_at: null
active_hours: '09:00-17:00'
days_of_week:
- 1
- 3
- 5
- 7
status: Processed
type: MMS
options:
delay: '34'
prioritize: true
created_at: '2025-09-08T05:42:25.000000Z'
updated_at: '2025-09-08T05:42:25.000000Z'
properties:
id:
type: integer
example: 10
description: 'The ID of the campaign.'
enum: []
name:
type: string
example: 'Blaise Pouros'
description: 'The name of the campaign.'
enum: []
scheduled_at:
type: string
example: '2025-12-16T20:37:14.000000Z'
description: 'The date and time when the campaign is scheduled to run.'
enum: []
timezone:
type: string
example: America/Indiana/Knox
description: 'The timezone of the campaign.'
enum: []
recurring:
type: boolean
example: true
description: 'Whether the campaign is recurring.'
enum: []
frequency:
type: integer
example: 5
description: 'The frequency of the campaign.'
enum: []
frequency_unit:
type: string
example: Minute
description: 'The unit of the frequency.'
enum: []
ends_at:
type: string
example: '2026-09-05T09:37:44.000000Z'
description: 'The date and time when the recurring campaign ends.'
enum: []
repeat_at:
type: string
example: null
description: 'The date and time when the campaign is scheduled to repeat.'
enum: []
active_hours:
type: string
example: '09:00-17:00'
description: 'The timespan of a day when the campaign is active.'
enum: []
days_of_week:
type: array
example:
- 1
- 3
- 5
- 7
description: 'The days of the week when the campaign is active.'
enum: []
items:
type: integer
status:
type: string
example: Processed
description: 'The status of the campaign.'
enum: []
type:
type: string
example: MMS
description: 'The type of the campaign.'
enum: []
options:
type: object
properties:
delay:
type: string
example: '34'
description: 'The delay between each item before sending the next one.'
enum: []
prioritize:
type: boolean
example: true
description: 'Whether to prioritize the campaign.'
enum: []
description: 'The options of the campaign.'
created_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time the campaign was created.'
enum: []
updated_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time the campaign was last updated.'
enum: []
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
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. You can also set the first element to * and it will use all available sims. This field is required when sender_ids is not present.'
example:
- 1
items:
type: integer
sender_ids:
type: array
description: 'The ids of the sender ids to use for sending the messages. You can also set the first element to * and it will use all available sender ids. This field is required when sims is not present.'
example:
- 1
items:
type: integer
random_sender:
type: boolean
description: 'Whether to use a random sim or sender id from selected sims or sender_ids for entire campaign.'
example: false
nullable: false
contact_lists:
type: array
description: 'The ids of the contact lists to send the messages. This field is required when mobile_numbers is not present. This field is prohibited when mobile_numbers is present.'
example:
- 1
items:
type: integer
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.'
example:
- '+12345678901'
items:
type: string
type:
type: string
description: 'The type of the message.'
example: SMS
nullable: false
enum:
- SMS
- MMS
- WhatsApp
message:
type: string
description: 'The message to send. This field is required when type
is SMS
. This field is required when attachments
is not present. Must not be greater than 1600 characters.'
example: 'Hello, World!'
nullable: false
attachments:
type: array
description: 'The array of file URLs you want to send as attachments with the message. This field is prohibited when type is not MMS.'
example:
- 'https://example.com/image.jpg'
items:
type: string
delivery_report:
type: boolean
description: 'Whether to request a delivery report for the message. This field is prohibited when type is not SMS.'
example: false
nullable: false
delay:
type: string
description: 'The delay between messages in seconds. This field is prohibited when sims is not present.'
example: 60
nullable: false
prioritize:
type: boolean
description: 'Whether to prioritize the campaign. This field is prohibited when sims is not present.'
example: false
nullable: false
name:
type: string
description: 'The name of the campaign. Must not be greater than 255 characters.'
example: 'My Campaign'
nullable: false
scheduled_at:
type: string
description: 'The date and time the campaign is scheduled to run. Must be a valid date.'
example: '2021-01-01T12:00:00Z'
nullable: false
recurring:
type: boolean
description: 'Whether the campaign is recurring.'
example: false
nullable: false
frequency:
type: integer
description: 'The frequency of the campaign. This field is required when recurring
is true
. Must be at least 1.'
example: 1
nullable: false
frequency_unit:
type: string
description: 'The unit of the frequency. This field is required when recurring
is true
.'
example: day
nullable: false
enum:
- Minute
- Hour
- Day
- Week
- Month
- Year
ends_at:
type: string
description: 'The date and time when the recurring campaign ends. Must be a valid date.'
example: '2021-01-01T12:00:00Z'
nullable: false
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
.'
example: UTC
nullable: false
days_of_week:
type: array
description: 'The days of the week when the campaign is active.'
example:
- 1
items:
type: string
enum:
- '1'
- '2'
- '3'
- '4'
- '5'
- '6'
- '7'
active_hours:
type: object
description: 'Must contain 2 items.'
example: null
nullable: false
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
.'
example: '08:00'
nullable: false
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
.'
example: '17:00'
nullable: false
/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.'
example: 1.0
required: false
schema:
type: number
description: 'Filter by user id. Only available for admin. Must be at least 1.'
example: 1.0
nullable: true
-
in: query
name: campaign
description: 'Filter by campaign id. Must be at least 1.'
example: 1.0
required: false
schema:
type: number
description: 'Filter by campaign id. Must be at least 1.'
example: 1.0
nullable: true
-
in: query
name: sim
description: 'Filter by sim id. This field is prohibited if sender_id is present. Must be at least 1.'
example: 1.0
required: false
schema:
type: number
description: 'Filter by sim id. This field is prohibited if sender_id is present. Must be at least 1.'
example: 1.0
nullable: true
-
in: query
name: message
description: 'Filter by message. Must not be greater than 1600 characters.'
example: 'Hello, World!'
required: false
schema:
type: string
description: 'Filter by message. Must not be greater than 1600 characters.'
example: 'Hello, World!'
nullable: true
-
in: query
name: type
description: 'Filter by message type.'
example: SMS
required: false
schema:
type: string
description: 'Filter by message type.'
example: SMS
nullable: true
enum:
- SMS
- MMS
- WhatsApp
-
in: query
name: statuses
description: ''
example:
- Queued
required: false
schema:
type: array
description: ''
example:
- Queued
items:
type: string
enum:
- Pending
- Queued
- Processed
- Sent
- Delivered
- Failed
- Received
-
in: query
name: after
description: 'Filter by messages that are sent after this date. Must be a valid date in the format Y-m-d
. Must be a date before or equal to before
.'
example: '2021-01-01'
required: false
schema:
type: string
description: 'Filter by messages that are sent after this date. Must be a valid date in the format Y-m-d
. Must be a date before or equal to before
.'
example: '2021-01-01'
nullable: true
-
in: query
name: before
description: 'Filter by messages that are sent before this date. Must be a valid date in the format Y-m-d
. Must be a date after or equal to after
.'
example: '2024-01-01'
required: false
schema:
type: string
description: 'Filter by messages that are sent before this date. Must be a valid date in the format Y-m-d
. Must be a date after or equal to after
.'
example: '2024-01-01'
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 2061
from: '+17345017250'
to: '+19899609500'
content: 'Itaque non aspernatur odio nam incidunt. Distinctio quam sed quasi commodi tempore.'
type: SMS
attachments: []
status: Sent
response: []
messenger: 'Sim #20'
sent_at: '2025-09-07T08:20:33.000000Z'
delivered_at: '2025-09-08T05:42:25.000000Z'
-
id: 2062
from: '+13309437084'
to: '+14094483472'
content: 'Porro aut tempora ut possimus odit. Sed rem ducimus est ut voluptatum porro repudiandae doloremque. In est id sed voluptatem.'
type: WhatsApp
attachments: []
status: Queued
response: []
messenger: 'Sim #21'
sent_at: '2025-09-07T15:42:10.000000Z'
delivered_at: '2025-09-08T05:42:25.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
properties:
data:
type: array
example:
-
id: 2061
from: '+17345017250'
to: '+19899609500'
content: 'Itaque non aspernatur odio nam incidunt. Distinctio quam sed quasi commodi tempore.'
type: SMS
attachments: []
status: Sent
response: []
messenger: 'Sim #20'
sent_at: '2025-09-07T08:20:33.000000Z'
delivered_at: '2025-09-08T05:42:25.000000Z'
-
id: 2062
from: '+13309437084'
to: '+14094483472'
content: 'Porro aut tempora ut possimus odit. Sed rem ducimus est ut voluptatum porro repudiandae doloremque. In est id sed voluptatem.'
type: WhatsApp
attachments: []
status: Queued
response: []
messenger: 'Sim #21'
sent_at: '2025-09-07T15:42:10.000000Z'
delivered_at: '2025-09-08T05:42:25.000000Z'
items:
type: object
properties:
id:
type: integer
example: 2061
from:
type: string
example: '+17345017250'
to:
type: string
example: '+19899609500'
content:
type: string
example: 'Itaque non aspernatur odio nam incidunt. Distinctio quam sed quasi commodi tempore.'
type:
type: string
example: SMS
attachments:
type: array
example: []
status:
type: string
example: Sent
response:
type: array
example: []
messenger:
type: string
example: 'Sim #20'
sent_at:
type: string
example: '2025-09-07T08:20:33.000000Z'
delivered_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
required:
- id
- from
- to
- content
- type
- attachments
- status
- response
- messenger
- sent_at
- delivered_at
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 100
to:
type: integer
example: 2
total:
type: integer
example: 2
required:
- from
- to
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
example:
id: 2063
from: '+15045565946'
to: '+14322823398'
content: 'Eveniet et quasi qui corporis quae sequi. Est rerum quam recusandae omnis dolore. Perferendis et et amet earum illum qui.'
type: WhatsApp
attachments: []
status: Sent
response: []
messenger: 'Sim #22'
sent_at: '2025-09-08T00:09:04.000000Z'
delivered_at: '2025-09-08T05:42:25.000000Z'
properties:
id:
type: integer
example: 2063
description: 'The ID of the message.'
enum: []
from:
type: string
example: '+15045565946'
description: 'The sender of the message.'
enum: []
to:
type: string
example: '+14322823398'
description: 'The recipient of the message.'
enum: []
content:
type: string
example: 'Eveniet et quasi qui corporis quae sequi. Est rerum quam recusandae omnis dolore. Perferendis et et amet earum illum qui.'
description: 'The content of the message.'
enum: []
type:
type: string
example: WhatsApp
description: 'The type of the message.'
enum: []
attachments:
type: array
example: []
description: 'List of all attachments for the message.'
enum: []
status:
type: string
example: Sent
description: 'The status of the message.'
enum:
- Pending
- Queued
- Processed
- Sent
- Delivered
- Failed
- Received
response:
type: array
example: []
description: 'The response received from the device or sending server.'
enum: []
messenger:
type: string
example: 'Sim #22'
description: 'The sim or sender id used for the message.'
enum: []
sent_at:
type: string
example: '2025-09-08T00:09:04.000000Z'
description: 'The date and time when the message was sent.'
enum: []
delivered_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time when the message was delivered.'
enum: []
required:
- id
- from
- to
- content
- type
- attachments
- status
- response
- messenger
- sent_at
- delivered_at
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
nullable: true
tags:
- Messages
parameters:
-
in: path
name: id
description: 'The ID of the message.'
example: 1
required: true
schema:
type: integer
/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
example:
data:
-
id: 23
value: '647973'
-
id: 24
value: '731066'
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
properties:
data:
type: array
example:
-
id: 23
value: '647973'
-
id: 24
value: '731066'
items:
type: object
properties:
id:
type: integer
example: 23
value:
type: string
example: '647973'
required:
- id
- value
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 100
to:
type: integer
example: 2
total:
type: integer
example: 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
example:
id: 25
value: '574311'
properties:
id:
type: integer
example: 25
description: 'The ID of the sender id.'
enum: []
value:
type: string
example: '574311'
description: 'The value of the sender id.'
enum: []
required:
- id
- value
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
nullable: true
tags:
- SenderIds
parameters:
-
in: path
name: id
description: 'The ID of the sender id.'
example: 1
required: true
schema:
type: integer
'/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
example:
id: 26
value: '583848'
properties:
id:
type: integer
example: 26
description: 'The ID of the sender id.'
enum: []
value:
type: string
example: '583848'
description: 'The value of the sender id.'
enum: []
required:
- id
- value
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 11 characters.'
example: MySenderID
nullable: false
required:
- value
parameters:
-
in: path
name: sending_server_id
description: 'The ID of the sending server.'
example: 1
required: true
schema:
type: integer
/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
example:
data:
-
id: 5
name: 'Gideon Boyer'
driver: Textlocal
supported_types:
- SMS
config:
url: 'https://api.textlocal.in'
test: true
api_key: NDQ2NDYyNGQ0OTY2NGU3Njc5Nzc0ZTM0Njk2NjQzNjI=
enabled: true
created_at: '2025-09-08T05:42:25.000000Z'
-
id: 6
name: 'Amelia Koelpin'
driver: Textlocal
supported_types:
- MMS
config:
url: 'https://api.textlocal.in'
test: true
api_key: NDQ2NDYyNGQ0OTY2NGU3Njc5Nzc0ZTM0Njk2NjQzNjI=
enabled: true
created_at: '2025-09-08T05:42:25.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
properties:
data:
type: array
example:
-
id: 5
name: 'Gideon Boyer'
driver: Textlocal
supported_types:
- SMS
config:
url: 'https://api.textlocal.in'
test: true
api_key: NDQ2NDYyNGQ0OTY2NGU3Njc5Nzc0ZTM0Njk2NjQzNjI=
enabled: true
created_at: '2025-09-08T05:42:25.000000Z'
-
id: 6
name: 'Amelia Koelpin'
driver: Textlocal
supported_types:
- MMS
config:
url: 'https://api.textlocal.in'
test: true
api_key: NDQ2NDYyNGQ0OTY2NGU3Njc5Nzc0ZTM0Njk2NjQzNjI=
enabled: true
created_at: '2025-09-08T05:42:25.000000Z'
items:
type: object
properties:
id:
type: integer
example: 5
name:
type: string
example: 'Gideon Boyer'
driver:
type: string
example: Textlocal
supported_types:
type: array
example:
- SMS
items:
type: string
config:
type: object
properties:
url:
type: string
example: 'https://api.textlocal.in'
test:
type: boolean
example: true
api_key:
type: string
example: NDQ2NDYyNGQ0OTY2NGU3Njc5Nzc0ZTM0Njk2NjQzNjI=
enabled:
type: boolean
example: true
created_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
required:
- id
- name
- driver
- supported_types
- config
- enabled
- created_at
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 100
to:
type: integer
example: 2
total:
type: integer
example: 2
tags:
- 'Sending Servers'
post:
summary: 'Create a sending server'
operationId: createASendingServer
description: ''
parameters: []
responses:
201:
description: Created
content:
application/json:
schema:
type: object
example:
id: 8
name: 'Gideon Boyer'
driver: Textlocal
supported_types:
- SMS
config:
url: 'https://api.textlocal.in'
test: true
api_key: NDQ2NDYyNGQ0OTY2NGU3Njc5Nzc0ZTM0Njk2NjQzNjI=
enabled: true
created_at: '2025-09-08T05:42:25.000000Z'
properties:
id:
type: integer
example: 8
description: 'The ID of the sending server.'
enum: []
name:
type: string
example: 'Gideon Boyer'
description: 'The name of the sending server.'
enum: []
driver:
type: string
example: Textlocal
description: 'The driver of the sending server.'
enum: []
supported_types:
type: array
example:
- SMS
description: 'The types of messages supported by the sending server.'
enum: []
items:
type: string
config:
type: object
properties:
url:
type: string
example: 'https://api.textlocal.in'
test:
type: boolean
example: true
api_key:
type: string
example: NDQ2NDYyNGQ0OTY2NGU3Njc5Nzc0ZTM0Njk2NjQzNjI=
description: 'The sending server configuration.'
enabled:
type: boolean
example: true
description: 'Whether the sending server is enabled or not.'
enum: []
created_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time when the sending server was created.'
enum: []
required:
- id
- name
- driver
- supported_types
- config
- enabled
- created_at
tags:
- 'Sending Servers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the sending server.'
example: Twilio
nullable: false
driver:
type: string
description: 'The driver of the sending server.'
example: twilio
nullable: false
enum:
- Custom
- Textlocal
- Twilio
supported_types:
type: array
description: ''
example:
- MMS
items:
type: string
enum:
- SMS
- MMS
- WhatsApp
config:
type: object
description: 'The configuration for the sending server.'
example:
account_sid: ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
auth_token: your_auth_token
from: '+15017122661'
nullable: false
properties: { }
enabled:
type: boolean
description: 'The status of the sending server.'
example: false
nullable: false
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
example:
id: 7
name: 'Gideon Boyer'
driver: Textlocal
supported_types:
- SMS
config:
url: 'https://api.textlocal.in'
test: true
api_key: NDQ2NDYyNGQ0OTY2NGU3Njc5Nzc0ZTM0Njk2NjQzNjI=
enabled: true
created_at: '2025-09-08T05:42:25.000000Z'
properties:
id:
type: integer
example: 7
description: 'The ID of the sending server.'
enum: []
name:
type: string
example: 'Gideon Boyer'
description: 'The name of the sending server.'
enum: []
driver:
type: string
example: Textlocal
description: 'The driver of the sending server.'
enum: []
supported_types:
type: array
example:
- SMS
description: 'The types of messages supported by the sending server.'
enum: []
items:
type: string
config:
type: object
properties:
url:
type: string
example: 'https://api.textlocal.in'
test:
type: boolean
example: true
api_key:
type: string
example: NDQ2NDYyNGQ0OTY2NGU3Njc5Nzc0ZTM0Njk2NjQzNjI=
description: 'The sending server configuration.'
enabled:
type: boolean
example: true
description: 'Whether the sending server is enabled or not.'
enum: []
created_at:
type: string
example: '2025-09-08T05:42:25.000000Z'
description: 'The date and time when the sending server was created.'
enum: []
required:
- id
- name
- driver
- supported_types
- config
- enabled
- created_at
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
nullable: true
tags:
- 'Sending Servers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The name of the sending server.'
example: Twilio
nullable: false
driver:
type: string
description: 'The driver of the sending server.'
example: twilio
nullable: false
enum:
- Custom
- Textlocal
- Twilio
supported_types:
type: array
description: ''
example:
- MMS
items:
type: string
enum:
- SMS
- MMS
- WhatsApp
config:
type: object
description: 'The configuration for the sending server.'
example:
account_sid: ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
auth_token: your_auth_token
from: '+15017122661'
nullable: false
properties: { }
enabled:
type: boolean
description: 'The status of the sending server.'
example: false
nullable: false
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
nullable: true
tags:
- 'Sending Servers'
parameters:
-
in: path
name: id
description: 'The ID of the sending server.'
example: 1
required: true
schema:
type: integer
/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
example:
id: 14
name: 'Blaise Pouros'
scheduled_at: '2025-12-16T20:37:15.000000Z'
timezone: America/Indiana/Knox
recurring: true
frequency: 5
frequency_unit: Minute
ends_at: '2026-09-05T09:37:45.000000Z'
repeat_at: null
active_hours: '09:00-17:00'
days_of_week:
- 1
- 3
- 5
- 7
status: Processed
type: MMS
options:
delay: '34'
prioritize: true
created_at: '2025-09-08T05:42:26.000000Z'
updated_at: '2025-09-08T05:42:26.000000Z'
properties:
id:
type: integer
example: 14
description: 'The ID of the campaign.'
enum: []
name:
type: string
example: 'Blaise Pouros'
description: 'The name of the campaign.'
enum: []
scheduled_at:
type: string
example: '2025-12-16T20:37:15.000000Z'
description: 'The date and time when the campaign is scheduled to run.'
enum: []
timezone:
type: string
example: America/Indiana/Knox
description: 'The timezone of the campaign.'
enum: []
recurring:
type: boolean
example: true
description: 'Whether the campaign is recurring.'
enum: []
frequency:
type: integer
example: 5
description: 'The frequency of the campaign.'
enum: []
frequency_unit:
type: string
example: Minute
description: 'The unit of the frequency.'
enum: []
ends_at:
type: string
example: '2026-09-05T09:37:45.000000Z'
description: 'The date and time when the recurring campaign ends.'
enum: []
repeat_at:
type: string
example: null
description: 'The date and time when the campaign is scheduled to repeat.'
enum: []
active_hours:
type: string
example: '09:00-17:00'
description: 'The timespan of a day when the campaign is active.'
enum: []
days_of_week:
type: array
example:
- 1
- 3
- 5
- 7
description: 'The days of the week when the campaign is active.'
enum: []
items:
type: integer
status:
type: string
example: Processed
description: 'The status of the campaign.'
enum: []
type:
type: string
example: MMS
description: 'The type of the campaign.'
enum: []
options:
type: object
properties:
delay:
type: string
example: '34'
description: 'The delay between each item before sending the next one.'
enum: []
prioritize:
type: boolean
example: true
description: 'Whether to prioritize the campaign.'
enum: []
description: 'The options of the campaign.'
created_at:
type: string
example: '2025-09-08T05:42:26.000000Z'
description: 'The date and time the campaign was created.'
enum: []
updated_at:
type: string
example: '2025-09-08T05:42:26.000000Z'
description: 'The date and time the campaign was last updated.'
enum: []
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
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. You can also set the first element to * and it will use all available sims.'
example:
- 1
items:
type: integer
ussd_codes:
type: array
description: 'The array of USSD codes to send. Must match the regex /(?:\*\d+)+#/.'
example:
- '*123#'
items:
type: string
delay:
type: string
description: 'The delay in seconds between each USSD pull.'
example: 60
nullable: true
prioritize:
type: boolean
description: 'Whether to prioritize the campaign.'
example: false
nullable: true
name:
type: string
description: 'The name of the campaign. Must not be greater than 255 characters.'
example: 'My Campaign'
nullable: false
scheduled_at:
type: string
description: 'The date and time the campaign is scheduled to run. Must be a valid date.'
example: '2021-01-01T12:00:00Z'
nullable: false
recurring:
type: boolean
description: 'Whether the campaign is recurring.'
example: false
nullable: false
frequency:
type: integer
description: 'The frequency of the campaign. This field is required when recurring
is true
. Must be at least 1.'
example: 1
nullable: false
frequency_unit:
type: string
description: 'The unit of the frequency. This field is required when recurring
is true
.'
example: day
nullable: false
enum:
- Minute
- Hour
- Day
- Week
- Month
- Year
ends_at:
type: string
description: 'The date and time when the recurring campaign ends. Must be a valid date.'
example: '2021-01-01T12:00:00Z'
nullable: false
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
.'
example: UTC
nullable: false
days_of_week:
type: array
description: 'The days of the week when the campaign is active.'
example:
- 1
items:
type: string
enum:
- '1'
- '2'
- '3'
- '4'
- '5'
- '6'
- '7'
active_hours:
type: object
description: 'Must contain 2 items.'
example: null
nullable: false
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
.'
example: '08:00'
nullable: false
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
.'
example: '17:00'
nullable: false
random_sender:
type: boolean
description: 'Whether to use a random sim from selected sims for entire campaign.'
example: false
nullable: false
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.'
example: 1.0
required: false
schema:
type: number
description: 'Filter by user id. Only available for admin. Must be at least 1.'
example: 1.0
nullable: true
-
in: query
name: campaign
description: 'Filter by campaign id. Must be at least 1.'
example: 1.0
required: false
schema:
type: number
description: 'Filter by campaign id. Must be at least 1.'
example: 1.0
nullable: true
-
in: query
name: sim
description: 'Filter by sim id. Must be at least 1.'
example: 1.0
required: false
schema:
type: number
description: 'Filter by sim id. Must be at least 1.'
example: 1.0
nullable: true
-
in: query
name: statuses
description: ''
example:
- Queued
required: false
schema:
type: array
description: ''
example:
- Queued
items:
type: string
enum:
- Pending
- Queued
- Completed
- Failed
-
in: query
name: after
description: 'Show USSD pulls that are sent after this date. Must be a valid date in the format Y-m-d
. Must be a date before or equal to before
.'
example: '2021-01-01'
required: false
schema:
type: string
description: 'Show USSD pulls that are sent after this date. Must be a valid date in the format Y-m-d
. Must be a date before or equal to before
.'
example: '2021-01-01'
nullable: true
-
in: query
name: before
description: 'Show USSD pulls that are sent before this date. Must be a valid date in the format Y-m-d
. Must be a date after or equal to after
.'
example: '2021-01-01'
required: false
schema:
type: string
description: 'Show USSD pulls that are sent before this date. Must be a valid date in the format Y-m-d
. Must be a date after or equal to after
.'
example: '2021-01-01'
nullable: true
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
-
id: 281
code: '*3434200#'
response: null
status: Failed
sim_id: 23
sent_at: '2025-09-08T11:12:26.000000Z'
received_at: null
-
id: 282
code: '*32721213140#'
response: 'Aut tempora ut possimus odit nisi sed rem ducimus. Ut voluptatum porro repudiandae doloremque qui in. Id sed voluptatem saepe magnam dicta tempore blanditiis quos.'
status: Completed
sim_id: 24
sent_at: '2025-09-08T11:12:26.000000Z'
received_at: '2025-09-08T12:31:12.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
properties:
data:
type: array
example:
-
id: 281
code: '*3434200#'
response: null
status: Failed
sim_id: 23
sent_at: '2025-09-08T11:12:26.000000Z'
received_at: null
-
id: 282
code: '*32721213140#'
response: 'Aut tempora ut possimus odit nisi sed rem ducimus. Ut voluptatum porro repudiandae doloremque qui in. Id sed voluptatem saepe magnam dicta tempore blanditiis quos.'
status: Completed
sim_id: 24
sent_at: '2025-09-08T11:12:26.000000Z'
received_at: '2025-09-08T12:31:12.000000Z'
items:
type: object
properties:
id:
type: integer
example: 281
code:
type: string
example: '*3434200#'
response:
type: string
example: null
status:
type: string
example: Failed
sim_id:
type: integer
example: 23
sent_at:
type: string
example: '2025-09-08T11:12:26.000000Z'
received_at:
type: string
example: null
required:
- id
- code
- response
- status
- sim_id
- sent_at
- received_at
links:
type: object
properties:
first:
type: string
example: '/?page=1'
last:
type: string
example: '/?page=1'
prev:
type: string
example: null
next:
type: string
example: null
meta:
type: object
properties:
current_page:
type: integer
example: 1
from:
type: integer
example: 1
last_page:
type: integer
example: 1
links:
type: array
example:
-
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
items:
type: object
properties:
url:
type: string
example: null
label:
type: string
example: '« Previous'
page:
type: string
example: null
active:
type: boolean
example: false
path:
type: string
example: /
per_page:
type: integer
example: 100
to:
type: integer
example: 2
total:
type: integer
example: 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
example:
id: 283
code: '*00268*8#'
response: null
status: Failed
sim_id: 25
sent_at: '2025-09-08T11:12:26.000000Z'
received_at: null
properties:
id:
type: integer
example: 283
description: 'The ID of the USSD pull.'
enum: []
code:
type: string
example: '*00268*8#'
description: 'The USSD code.'
enum: []
response:
type: string
example: null
description: 'The response from the USSD pull.'
enum: []
status:
type: string
example: Failed
description: 'The status of the USSD pull.'
enum:
- Pending
- Queued
- Completed
- Failed
sim_id:
type: integer
example: 25
description: 'The id of the sim used to send the USSD pull.'
enum: []
sent_at:
type: string
example: '2025-09-08T11:12:26.000000Z'
description: 'The date and time when the USSD pull was sent.'
enum: []
received_at:
type: string
example: null
description: 'The date and time when the response from the USSD pull was received.'
enum: []
required:
- id
- code
- response
- status
- sim_id
- sent_at
- received_at
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
nullable: true
tags:
- 'USSD Pulls'
parameters:
-
in: path
name: id
description: 'The ID of the ussd pull.'
example: 1
required: true
schema:
type: integer