SMSAPI 2FA Authentication API
Generate and validate one-time passcodes for two-factor authentication via /authenticator/send_code and /authenticator/check_code, delivered over SMS or voice.
Generate and validate one-time passcodes for two-factor authentication via /authenticator/send_code and /authenticator/check_code, delivered over SMS or voice.
openapi: 3.0.1
info:
title: SMSAPI REST API
description: >-
Representative OpenAPI description of the SMSAPI messaging platform, a
European bulk-messaging provider (part of LINK Mobility). Covers SMS, MMS,
voice (VMS), contacts, sender names, two-factor authentication, subusers,
account profile, HLR lookup, blacklist, and short URLs. Requests are
authenticated with an OAuth 2.0 bearer token issued from the SMSAPI
customer panel.
termsOfService: https://www.smsapi.com/en/terms
contact:
name: SMSAPI Support
url: https://www.smsapi.com/docs/
email: bok@smsapi.pl
version: '1.0'
servers:
- url: https://api.smsapi.com
description: Global endpoint (com)
- url: https://api.smsapi.eu
description: European endpoint (eu)
security:
- bearerAuth: []
tags:
- name: SMS
- name: MMS
- name: VMS
- name: Contacts
- name: Sender Names
- name: 2FA
- name: Subusers
- name: Profile
- name: HLR
- name: Blacklist
- name: Short URLs
paths:
/sms.do:
post:
operationId: sendSms
tags:
- SMS
summary: Send an SMS message.
description: >-
Send single, bulk, scheduled, or templated text messages. Provide
format=json to receive a JSON response. Supports personalization,
flash messages, opt-out links, and cut.li short URLs.
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/SendSmsRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SendMessageResponse'
/mms.do:
post:
operationId: sendMms
tags:
- MMS
summary: Send an MMS message.
description: >-
Send a multimedia message with SMIL/image content to one or many
recipients, with optional scheduling.
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/SendMmsRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SendMessageResponse'
/vms.do:
post:
operationId: sendVms
tags:
- VMS
summary: Send a voice message (VMS).
description: >-
Deliver a voice message generated from text-to-speech (tts) or from an
uploaded audio file, with optional scheduling.
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
$ref: '#/components/schemas/SendVmsRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SendMessageResponse'
/profile:
get:
operationId: getProfile
tags:
- Profile
summary: Get account profile and balance.
description: Returns account profile details and the current points (credit) balance.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Profile'
/contacts:
get:
operationId: listContacts
tags:
- Contacts
summary: List contacts.
parameters:
- name: offset
in: query
schema:
type: integer
- name: limit
in: query
schema:
type: integer
- name: phone_number
in: query
schema:
type: string
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ContactCollection'
post:
operationId: createContact
tags:
- Contacts
summary: Create a contact.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContactInput'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
/contacts/{contactId}:
get:
operationId: getContact
tags:
- Contacts
summary: Get a contact.
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
put:
operationId: updateContact
tags:
- Contacts
summary: Update a contact.
parameters:
- $ref: '#/components/parameters/ContactId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ContactInput'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Contact'
delete:
operationId: deleteContact
tags:
- Contacts
summary: Delete a contact.
parameters:
- $ref: '#/components/parameters/ContactId'
responses:
'204':
description: No Content
/contacts/groups:
get:
operationId: listContactGroups
tags:
- Contacts
summary: List contact groups.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/GroupCollection'
post:
operationId: createContactGroup
tags:
- Contacts
summary: Create a contact group.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/GroupInput'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/Group'
/contacts/{contactId}/groups/{groupId}:
put:
operationId: assignContactToGroup
tags:
- Contacts
summary: Assign a contact to a group.
parameters:
- $ref: '#/components/parameters/ContactId'
- $ref: '#/components/parameters/GroupId'
responses:
'200':
description: OK
delete:
operationId: removeContactFromGroup
tags:
- Contacts
summary: Remove a contact from a group.
parameters:
- $ref: '#/components/parameters/ContactId'
- $ref: '#/components/parameters/GroupId'
responses:
'204':
description: No Content
/sendernames:
get:
operationId: listSenderNames
tags:
- Sender Names
summary: List sender names.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SenderNameCollection'
post:
operationId: createSenderName
tags:
- Sender Names
summary: Register a new sender name.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SenderNameInput'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/SenderName'
/sendernames/{sender}:
get:
operationId: getSenderName
tags:
- Sender Names
summary: Get a sender name.
parameters:
- $ref: '#/components/parameters/Sender'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SenderName'
delete:
operationId: deleteSenderName
tags:
- Sender Names
summary: Delete a sender name.
parameters:
- $ref: '#/components/parameters/Sender'
responses:
'204':
description: No Content
/sendernames/{sender}/default:
put:
operationId: setDefaultSenderName
tags:
- Sender Names
summary: Set a sender name as default.
parameters:
- $ref: '#/components/parameters/Sender'
responses:
'200':
description: OK
/authenticator/send_code:
post:
operationId: sendAuthCode
tags:
- 2FA
summary: Send a one-time 2FA code.
description: Generate and deliver a one-time passcode over SMS or voice.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SendCodeRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SendCodeResponse'
/authenticator/check_code:
post:
operationId: checkAuthCode
tags:
- 2FA
summary: Validate a one-time 2FA code.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CheckCodeRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CheckCodeResponse'
/subusers:
get:
operationId: listSubusers
tags:
- Subusers
summary: List subusers.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/SubuserCollection'
post:
operationId: createSubuser
tags:
- Subusers
summary: Create a subuser.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SubuserInput'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/Subuser'
/subusers/{subuserId}:
get:
operationId: getSubuser
tags:
- Subusers
summary: Get a subuser.
parameters:
- $ref: '#/components/parameters/SubuserId'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Subuser'
put:
operationId: updateSubuser
tags:
- Subusers
summary: Update a subuser.
parameters:
- $ref: '#/components/parameters/SubuserId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SubuserInput'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/Subuser'
delete:
operationId: deleteSubuser
tags:
- Subusers
summary: Delete a subuser.
parameters:
- $ref: '#/components/parameters/SubuserId'
responses:
'204':
description: No Content
/hlr.do:
post:
operationId: hlrLookup
tags:
- HLR
summary: Perform an HLR lookup.
description: >-
Validate a phone number and resolve carrier, portability, and
reachability information.
requestBody:
required: true
content:
application/x-www-form-urlencoded:
schema:
type: object
properties:
number:
type: string
idx:
type: string
format:
type: string
default: json
required:
- number
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/HlrResult'
/blacklist/phone_numbers:
get:
operationId: listBlacklist
tags:
- Blacklist
summary: List blacklisted phone numbers.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/BlacklistCollection'
post:
operationId: addBlacklistNumber
tags:
- Blacklist
summary: Add a phone number to the blacklist.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/BlacklistInput'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/BlacklistEntry'
/blacklist/phone_numbers/{phoneNumber}:
delete:
operationId: removeBlacklistNumber
tags:
- Blacklist
summary: Remove a phone number from the blacklist.
parameters:
- name: phoneNumber
in: path
required: true
schema:
type: string
responses:
'204':
description: No Content
/short_urls/links:
get:
operationId: listShortUrls
tags:
- Short URLs
summary: List cut.li short links.
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ShortUrlCollection'
post:
operationId: createShortUrl
tags:
- Short URLs
summary: Create a cut.li short link.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ShortUrlInput'
responses:
'201':
description: Created
content:
application/json:
schema:
$ref: '#/components/schemas/ShortUrl'
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
description: OAuth 2.0 bearer token generated in the SMSAPI customer panel (API Tokens).
parameters:
ContactId:
name: contactId
in: path
required: true
schema:
type: string
GroupId:
name: groupId
in: path
required: true
schema:
type: string
Sender:
name: sender
in: path
required: true
schema:
type: string
SubuserId:
name: subuserId
in: path
required: true
schema:
type: string
schemas:
SendSmsRequest:
type: object
properties:
to:
type: string
description: Comma-separated recipient MSISDN(s).
message:
type: string
from:
type: string
description: Registered sender name.
date:
type: string
description: Unix timestamp or ISO date for scheduled delivery.
encoding:
type: string
flash:
type: integer
template:
type: string
fast:
type: integer
format:
type: string
default: json
required:
- to
- message
SendMmsRequest:
type: object
properties:
to:
type: string
subject:
type: string
smil:
type: string
description: SMIL document describing the multimedia content.
date:
type: string
format:
type: string
default: json
required:
- to
- smil
SendVmsRequest:
type: object
properties:
to:
type: string
tts:
type: string
description: Text to be read out via text-to-speech.
file:
type: string
description: URL or reference to an uploaded audio file.
tts_lector:
type: string
date:
type: string
format:
type: string
default: json
required:
- to
SendMessageResponse:
type: object
properties:
count:
type: integer
list:
type: array
items:
type: object
properties:
id:
type: string
points:
type: number
number:
type: string
status:
type: string
Profile:
type: object
properties:
username:
type: string
points:
type: object
properties:
points:
type: number
payment_type:
type: integer
Contact:
type: object
properties:
id:
type: string
phone_number:
type: string
first_name:
type: string
last_name:
type: string
email:
type: string
source:
type: string
date_created:
type: string
ContactInput:
type: object
properties:
phone_number:
type: string
first_name:
type: string
last_name:
type: string
email:
type: string
required:
- phone_number
ContactCollection:
type: object
properties:
size:
type: integer
collection:
type: array
items:
$ref: '#/components/schemas/Contact'
Group:
type: object
properties:
id:
type: string
name:
type: string
description:
type: string
contacts_count:
type: integer
GroupInput:
type: object
properties:
name:
type: string
description:
type: string
required:
- name
GroupCollection:
type: object
properties:
size:
type: integer
collection:
type: array
items:
$ref: '#/components/schemas/Group'
SenderName:
type: object
properties:
sender:
type: string
status:
type: string
description: Sender name status (e.g. ACTIVE, INACTIVE).
is_default:
type: boolean
SenderNameInput:
type: object
properties:
sender:
type: string
required:
- sender
SenderNameCollection:
type: array
items:
$ref: '#/components/schemas/SenderName'
SendCodeRequest:
type: object
properties:
recipient:
type: string
channel:
type: string
enum:
- sms
- call
from:
type: string
message_template:
type: string
expiry:
type: integer
required:
- recipient
SendCodeResponse:
type: object
properties:
id:
type: string
recipient:
type: string
channel:
type: string
expires_at:
type: string
CheckCodeRequest:
type: object
properties:
id:
type: string
code:
type: string
required:
- id
- code
CheckCodeResponse:
type: object
properties:
id:
type: string
valid:
type: boolean
Subuser:
type: object
properties:
id:
type: string
username:
type: string
active:
type: boolean
points:
type: object
properties:
from_account:
type: boolean
per_month:
type: number
SubuserInput:
type: object
properties:
username:
type: string
password:
type: string
active:
type: boolean
api_access:
type: boolean
required:
- username
- password
SubuserCollection:
type: object
properties:
size:
type: integer
collection:
type: array
items:
$ref: '#/components/schemas/Subuser'
HlrResult:
type: object
properties:
number:
type: string
status:
type: string
ported:
type: boolean
network:
type: string
country:
type: string
BlacklistEntry:
type: object
properties:
phone_number:
type: string
created_at:
type: string
BlacklistInput:
type: object
properties:
phone_number:
type: string
required:
- phone_number
BlacklistCollection:
type: object
properties:
size:
type: integer
collection:
type: array
items:
$ref: '#/components/schemas/BlacklistEntry'
ShortUrl:
type: object
properties:
id:
type: string
name:
type: string
url:
type: string
short_url:
type: string
clicks:
type: integer
ShortUrlInput:
type: object
properties:
name:
type: string
url:
type: string
required:
- url
ShortUrlCollection:
type: object
properties:
size:
type: integer
collection:
type: array
items:
$ref: '#/components/schemas/ShortUrl'