Skip to content

Change a contact's WhatsApp consent on a list (logged)

PUT
/api/v1/workspaces/{workspace}/contacts/{contactId}/whatsapp/consent
curl --request PUT \
--url https://reputecast.example.com/api/v1/workspaces/acme-newsletter/contacts/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/whatsapp/consent \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{ "evidence": { "at": "2026-04-15T12:00:00Z", "consentText": "example", "consentVersion": "example", "ip": "example", "page": "example", "source": "example" }, "listId": "2489E9AD-2EE2-8E00-8EC9-32D5F69181C0", "note": "example", "status": "subscribed" }'

Permission: subscribers:edit

Consent needs its evidence; an opt-out by the person can’t be overridden.

workspace
required

Workspace slug

string
/^[a-z0-9][a-z0-9-]{1,62}$/

Workspace slug

contactId
required
string format: uuid
Media typeapplication/json
object
evidence
object
at
required
string format: date-time
consentText
required
string
<= 1000 characters
consentVersion
string
<= 40 characters
ip
string
<= 45 characters
page
string
<= 500 characters
source
required

Where it was given: a form, a call, an event

string
<= 200 characters
listId
required
string format: uuid
note
string
<= 500 characters
status
required
string
Allowed values: subscribed not_subscribed

OK

Media typeapplication/json
object
business
object
displayName
required
string
number
required
string
canEdit
required
boolean
canReply
required
boolean
connected
required
boolean
country
required
string
display
required
string
email
required
string
lineType
required
string
lists
required
Array<object>
object
at
string format: date-time
keyword
string
listId
required
string
name
required
string
page
string
source
required
string
status
required
string
Allowed values: subscribed pending opted_out not_subscribed
version
string
name
required
string
phone
required
string
suppressed
object
at
required
string format: date-time
keyword
string
reason
required
string
thread
required
Array<object>
object
at
required
string format: date-time
campaign
string
direction
required
string
Allowed values: in out
id
required
string
kind
required
string
Allowed values: template text reply keyword button
read
required
boolean
status
string
template
string
text
required
string
timeZone
required
string
window
required
object
lastAt
string format: date-time
lastText
string
open
required
boolean
until
string format: date-time

Example

{
"lists": [
{
"status": "subscribed"
}
],
"thread": [
{
"direction": "in",
"kind": "template"
}
]
}

Error

Media typeapplication/problem+json
object
code

Stable error code, e.g. permission_denied

string
detail

A human-readable explanation specific to this occurrence of the problem.

string
errors

Optional list of individual error details

Array<object>
object
location

Where the error occurred, e.g. ‘body.items[3].tags’ or ‘path.thing-id’

string
message

Error message text

string
value

The value at the given location

helpers

Members who hold the missing permission

Array<string>
instance

A URI reference that identifies the specific occurrence of the problem.

string format: uri
meta
object
key
additional properties
permission

The missing permission key

string
status

HTTP status code

integer format: int64
title

A short, human-readable summary of the problem type. This value should not change between occurrences of the error.

string
type

A URI reference to human-readable documentation for the error.

string format: uri
default: about:blank

Example

{
"detail": "Property foo is required but is missing.",
"instance": "https://example.com/error-log/abc123",
"status": 400,
"title": "Bad Request",
"type": "about:blank"
}