Skip to content
Get Started

V2

V2Totp

Store and retrieve TOTP codes for agent 2FA (authenticator app replacement)

Get current TOTP code
GET/api/v2/totp/code/{secret_id}
ModelsExpand Collapse
TotpGetCodeResponse object { code, expires_in, status }
code: optional string

The current TOTP code

expires_in: optional number

Seconds until this code rotates

status: optional string

V2TotpSecrets

Store and retrieve TOTP codes for agent 2FA (authenticator app replacement)

Register a TOTP secret
POST/api/v2/totp/secrets
List TOTP secrets
GET/api/v2/totp/secrets
Delete a TOTP secret
DELETE/api/v2/totp/secrets/{secret_id}
ModelsExpand Collapse
SecretCreateResponse object { status, totp_secret }
status: optional string
totp_secret: optional object { id, algorithm, created_at, 5 more }
id: optional string

Unique identifier for this TOTP secret

formatuuid
algorithm: optional "SHA1" or "SHA256" or "SHA512"

Hash algorithm used

One of the following:
"SHA1"
"SHA256"
"SHA512"
created_at: optional string
digits: optional number

Code length (6 or 8)

issuer: optional string

Service name

label: optional string

Human-readable label

period: optional number

Rotation period in seconds

secret: optional string

Base32 secret — only returned on creation, never on list/get

SecretListResponse object { status, totp_secrets }
status: optional string
totp_secrets: optional array of object { id, algorithm, created_at, 5 more }
id: optional string

Unique identifier for this TOTP secret

formatuuid
algorithm: optional "SHA1" or "SHA256" or "SHA512"

Hash algorithm used

One of the following:
"SHA1"
"SHA256"
"SHA512"
created_at: optional string
digits: optional number

Code length (6 or 8)

issuer: optional string

Service name

label: optional string

Human-readable label

period: optional number

Rotation period in seconds

secret: optional string

Base32 secret — only returned on creation, never on list/get

SecretDeleteResponse object { status }
status: optional string

V2Seats

Operations for retrieving seats (users) on the account, used for attribution via seat_id

List seats
GET/api/v2/seats
Get seat count
GET/api/v2/seats/count
Get a seat
GET/api/v2/seats/{seat_id}
ModelsExpand Collapse
SeatListResponse = array of object { account, created_at, email, 4 more }
account: optional string

Account name the seat belongs to

created_at: optional string

When the seat was created

formatdate-time
email: optional string

Email address of the seat user

formatemail
first_name: optional string

First name

forwarding_number: optional string

Optional phone number used to forward calls

last_name: optional string

Last name

seat_id: optional string

Primary identifier for the seat. Pass this on the send endpoints’ seat_id parameter.

formatuuid
SeatCountResponse object { count }
count: optional number
SeatRetrieveResponse object { seat, status }
seat: optional object { account, created_at, email, 4 more }
account: optional string

Account name the seat belongs to

created_at: optional string

When the seat was created

formatdate-time
email: optional string

Email address of the seat user

formatemail
first_name: optional string

First name

forwarding_number: optional string

Optional phone number used to forward calls

last_name: optional string

Last name

seat_id: optional string

Primary identifier for the seat. Pass this on the send endpoints’ seat_id parameter.

formatuuid
status: optional string

V2Groups

Operations for group messaging (beta)

Get group membership
GET/api/v2/groups/{group_id}
Rename or clear an iMessage group
POST/api/v2/groups/{group_id}/name
ModelsExpand Collapse
GroupRetrieveResponse object { data, status }
data: optional object { created_at, group_id, group_name, 6 more }
created_at: optional string
group_id: optional string
group_name: optional string
latest_comm_at: optional string
latest_message_id: optional string
participant_numbers: optional array of string

Convenience list of resolved participant phone numbers. Participants with email-only handles remain in participants but are omitted here.

participants: optional array of object { contact_id, handle, name, 4 more }
contact_id: optional string

Contact ID when this participant is linked to a contact

handle: optional string

Raw participant handle, usually an E.164 phone number but sometimes an iMessage email handle

name: optional string

Contact or seat display name when available

participant_id: optional string

Unique participant row identifier

phone: optional string

Resolved participant phone number, preferring the stored group phone handle and falling back to contact phone. Email handles remain available in handle.

seat_id: optional string

Seat ID when this participant is a team member

type: optional "contact" or "seat"

Participant kind

One of the following:
"contact"
"seat"
updated_at: optional string
worker_group_id: optional string

Worker-local iMessage group identifier when known

status: optional string
GroupRenameResponse object { data, status }
data: object { from_number, group_id, group_name }
from_number: string

Sendblue line that performed the change

group_id: string
group_name: string

Device-verified name; empty when cleared

status: "OK"