A valid request URL is required to generate request examples{
"success": true,
"data": {
"phoneNumber": "+14155551234",
"consent": "none",
"revokedRecords": 1,
"revokedAt": "2026-09-24T16:20:03.000Z"
}
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}Revoke the SMS consent your workspace recorded for a contact
Withdraw the express consent YOUR workspace recorded for a person through this API (PUT /sms/contacts//consent) — for example a record entered in error, or a customer who withdrew the permission they gave you on your own form. Every live consent record your workspace attested through the API for the number is marked revoked (records are kept as history, never deleted), and a compliance-trail entry records who revoked it. WHAT IS LEFT. The contact’s tier drops back to what the platform observed on its own: a contact who texted one of your numbers first keeps conversational consent, and anyone else drops to none — the response’s consent tells you which. An express tier is withdrawn whatever set it. Revoking never touches an opt-out (STOP), never erases the fact that a customer texted you first, and never revokes consent records this API did not write (such as voice-campaign consent). A contact left at none is refused 422 consent_required by sendSMSMessage (POST /sms/messages); a contact left at conversational can still be texted. A customer asking you to stop texting is an opt-out: add them to the suppression list with POST /sms/suppressions (or the dashboard), which blocks every kind of text immediately. Revoking consent does not add the number to the suppression list, so never use it for that. Idempotent: a number with no live API-recorded consent succeeds with revokedRecords: 0.
A valid request URL is required to generate request examples{
"success": true,
"data": {
"phoneNumber": "+14155551234",
"consent": "none",
"revokedRecords": 1,
"revokedAt": "2026-09-24T16:20:03.000Z"
}
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}{
"type": "about:blank",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>",
"code": "<string>",
"errors": [
{
"field": "<string>",
"message": "<string>"
}
]
}Authorizations
Flowyte secret API key (Authorization: Bearer flowyte_sk_live_…). Scope-gated; is scoped to your organization — a key can never reach another tenant. The listed scopes in each operation's apiKey requirement are the scopes that key must hold. The tokenUrl is nominal: keys are minted in the dashboard.
Path Parameters
The contact's number in E.164 format (e.g. +14155551234).
Response
Consent revoked. consent is the contact's tier after the write — conversational if they texted you first, otherwise none.