POST /sms/conversations/{line}/{number}/resolve
Mark a conversation handled
| Scope | sms:write |
| Role permission | Phone numbers — line must be one of theirs |
| Cost | Free. 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
200with 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
| Name | Type | Required | Example | Description |
|---|---|---|---|---|
line | string | yes | 12125550188 | One of your account's numbers — the line the thread is on. Digits. |
number | string | yes | 13475550123 | The other party's number. Digits. |
Request body
| Field | Type | Required | Description |
|---|---|---|---|
resolvedBy | integer | no | Credit 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.
| Field | Type | Description |
|---|---|---|
line | string | Your account number the thread is on, normalized. |
number | string | The other party's number, normalized. |
resolved | boolean | The thread's state after this call. |
resolvedBy | integer | The user credited, matching id in GET /users. Absent when an integration resolved it with no person named. |
resolvedAt | string (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
| Status | Meaning |
|---|---|
400 | invalid_request — a missing or malformed field, an unknown enum value, or an unknown field in the body. Nothing was charged. |
401 | unauthenticated — no credential, or one that is invalid, revoked or expired. The WWW-Authenticate header names the scope the endpoint wanted. |
403 | Two different failures share this status, and the type tells them apart: |
500 | internal_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 '{}'