Skip to main content
POST

Block a contact

Method: POST | Endpoint: /v1/contacts/{contact_id}/block Description: Stop one-to-one messages to a contact until you unblock them. A block is your choice and can be undone; an opt-out is the contact’s and can’t. See Block or opt out. Authentication: API key in the Authorization header: Authorization: Bearer ib_pk_<64 hex>. Create keys in the dashboard under Settings → API access.

Request Body

None. The path parameter contact_id is the contact’s ID (a UUID).

What a block does

  • Sends are refused. One-to-one sends to the contact, from the API, the dashboard or an automation, return 422 contact_blocked. Group conversations they’re in are not affected.
  • Their messages still arrive. Inbound messages from them are stored and still fire message.inbound, but they don’t mark the conversation unread, notify your team, or start workflows.
  • No webhook fires, for the block or the unblock.
  • It’s safe to call twice. Blocking a blocked contact answers 200 and keeps the original blocked_at.
  • It belongs to this contact. If the contact is deleted and the number later comes back as a new contact, the new one isn’t blocked.

Responses

200 OK The contact, with blocked: true.
401 Unauthorized
Other message values: Authorization Bearer token required, API key required (use Authorization: Bearer ib_pk_…), Invalid API key format, Customer account not found. 403 Forbidden
Your iBubbl account is suspended or cancelled (message is then Account is cancelled). Every API-key endpoint returns this. 404 Not Found
Also returned for a malformed ID, a deleted contact, and a contact that belongs to another account.

Authorizations

Authorization
string
header
required

Bearer API key. Format: Authorization: Bearer ib_pk_<64 hex> (70 characters). Generate keys from Dashboard → Settings → API Access.

Path Parameters

contact_id
string
required

Response

The contact, now blocked.

id
string
required

Unique contact identifier (UUID).

phone
string
required

Contact's phone number as first seen. Usually E.164; a contact first created by an inbound SMS can carry the sender's bare national form (e.g. 4155551234). Upserting any form of the same number returns this contact.

opted_out
boolean
required

True if this person has opted out: a STOP reply, a rep in the dashboard, a Do Not Disturb in your connected GoHighLevel account, or POST /v1/contacts/{id}/opt-out. When true, every send to this contact returns 422 contact_opted_out. An opt-out can't be undone, and it belongs to the number: a contact deleted and created again is still opted out.

created_at
string
required

ISO 8601 UTC timestamp the contact was created.

first_name
string | null
last_name
string | null
email
string | null
city
string | null
state
string | null
timezone
string | null

IANA timezone used for this contact's sending hours, or null if not set yet. When it is null and the number is a US or Canadian one, iBubbl infers the zone from the area code and saves it here when the contact's first message is processed; otherwise your account's timezone is used. Once set, an upsert never replaces it, so pass timezone on the first upsert, before you send, or change it with PATCH.

tags
string[]

The contact's tag names, sorted case-insensitively.

opted_out_at
string | null

ISO 8601 UTC timestamp of the opt-out, or null.

blocked
boolean
default:false

True if you blocked this contact (dashboard or POST /v1/contacts/{id}/block). Sends to them return 422 contact_blocked until you unblock them. Unlike an opt-out, a block is yours to undo, and it fires no webhook.

blocked_at
string | null

ISO 8601 UTC timestamp of the block, or null.