openapi: 3.1.0 info: title: 'SMS Gateway API Documentation' description: '' version: 1.0.0 servers: - url: '{{ config("app.url") }}' tags: - name: 'Call Log' description: 'Call Log' - name: Campaigns description: Campaigns - name: 'Contact Lists' description: 'Contact Lists' - name: Contacts description: Contacts - name: Devices description: Devices - name: Messages description: Messages - name: SenderIds description: SenderIds - name: 'Sending Servers' description: 'Sending Servers' - name: 'USSD Pulls' description: 'USSD Pulls' components: securitySchemes: default: type: http scheme: bearer description: 'You can retrieve your token by visiting your dashboard and clicking Generate API token.' security: - default: [] paths: /api/v1/calls: get: summary: 'List all calls' operationId: listAllCalls description: 'Returns a list of calls. The calls are returned sorted by creation date, with the most recently created call appearing first.' parameters: - in: query name: type description: 'Filter by call type.' required: false schema: type: - string - 'null' description: 'Filter by call type.' enum: - Incoming - Outgoing - Missed - Voicemail - Rejected - Blocked - 'Answered Externally' examples: - Incoming - 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: answered description: '' required: false schema: type: - boolean - 'null' description: '' examples: - false responses: 200: description: '' content: application/json: schema: type: object properties: data: type: array items: type: object properties: id: type: integer examples: - 149 number: type: string examples: - 973-450-3511 type: type: string examples: - Missed sim_id: type: integer examples: - 67 started_at: type: string examples: - '1991-01-07T14:12:01.000000Z' duration: type: integer examples: - 1912 required: - id - number - type - sim_id - started_at - duration examples: - - id: 149 number: 973-450-3511 type: Missed sim_id: 67 started_at: '1991-01-07T14:12:01.000000Z' duration: 1912 - id: 150 number: 1-513-623-4192 type: Missed sim_id: 68 started_at: '1980-06-11T18:33:36.000000Z' duration: 3149 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: 149 number: 973-450-3511 type: Missed sim_id: 67 started_at: '1991-01-07T14:12:01.000000Z' duration: 1912 - id: 150 number: 1-513-623-4192 type: Missed sim_id: 68 started_at: '1980-06-11T18:33:36.000000Z' duration: 3149 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: - 'Call Log' '/api/v1/calls/{id}': delete: summary: 'Delete a call' operationId: deleteACall description: 'Permanently deletes a call.' parameters: [] responses: 204: description: 'No content' content: application/json: schema: type: - object - 'null' tags: - 'Call Log' parameters: - in: path name: id description: 'The ID of the call.' required: true schema: type: integer examples: - 1 /api/v1/campaigns: get: summary: 'List all campaigns' operationId: listAllCampaigns description: 'Returns a list of campaigns. The campaigns are returned sorted by creation date, with the most recently created campaign appearing first.' parameters: - in: query name: status description: 'Filter by campaign status.' required: false schema: type: - string - 'null' description: 'Filter by campaign status.' enum: - Queued - Processing - Processed - Scheduled - Completed examples: - Sent - in: query name: type description: 'Filter by campaign type.' required: false schema: type: - string - 'null' description: 'Filter by campaign type.' enum: - SMS - MMS - WhatsApp - 'USSD Pull' examples: - MMS - in: query name: recurring description: 'Filter by recurring campaigns.' required: false schema: type: - boolean - 'null' description: 'Filter by recurring campaigns.' examples: - true - in: query name: after 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.' 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