Skip to main content

POST /sms/conversations/{line}/{number}/resolve

Mark a conversation handled

Scopesms:write
Role permissionPhone numbers — line must be one of theirs
CostFree. Cannot reach the other party.

Two behaviours worth knowing:

  • It creates the thread's state if there is none. Most conversations have never been actioned, so an endpoint that 404'd on those would fail on exactly the common case.
  • It is idempotent. Re-resolving returns 200 with the stored state and does not re-stamp who closed it or when, so a retry after a timeout cannot rewrite history.

The body is entirely optional — a bare POST resolves the thread.

Path parameters

NameTypeRequiredExampleDescription
linestringyes12125550188One of your account's numbers — the line the thread is on. Digits.
numberstringyes13475550123The other party's number. Digits.

Request body

FieldTypeRequiredDescription
resolvedByintegernoCredit a specific user, matching id in GET /users. Honoured for API keys only — an OAuth token always credits its own owner, because inventing a different one would corrupt "who closed this".

Just resolve it:

{}

Responses

200

The thread's state after the call.

FieldTypeDescription
linestringYour account number the thread is on, normalized.
numberstringThe other party's number, normalized.
resolvedbooleanThe thread's state after this call.
resolvedByintegerThe user credited, matching id in GET /users. Absent when an integration resolved it with no person named.
resolvedAtstring (RFC 3339)When, RFC 3339 UTC. Absent when not resolved.
{
"data": {
"line": "12125550188",
"number": "13475550123",
"resolved": true,
"resolvedBy": 481920,
"resolvedAt": "2026-08-11T14:02:11Z"
}
}

Errors

StatusMeaning
400invalid_request — a missing or malformed field, an unknown enum value, or an unknown field in the body. Nothing was charged.
401unauthenticated — no credential, or one that is invalid, revoked or expired. The WWW-Authenticate header names the scope the endpoint wanted.
403Two different failures share this status, and the type tells them apart:
500internal_error — something failed on our side. For a send, nothing was charged, guaranteed, which is what makes a retry safe.

See Errors for the full catalog and what to do about each.

Example

curl -X POST 'https://api.account.telebroad.com/api/public/v1/sms/conversations/12125550188/13475550123/resolve' \
-H "Authorization: Bearer $TB_KEY" \
-H 'Content-Type: application/json' \
-d '{}'

Try it in the playground →