contacts
Send a contact / queue a call
Upserts a Contact by (workspace, phone) and enqueues a ScheduledCall against a campaign. Powers Make's "Send Contact" module.
Evaluated in this order — which step fails determines the status code:
- phone missing or unnormalizable → 400
- Campaign resolution: neither campaign_id nor campaign given → 400; not found → 404; campaign (name) matches more than one campaign → 409 (use campaign_id instead)
- Campaign status isn't draft/active/paused → 409 (not accepting new contacts)
- external_id already seen for this campaign → 200 (not 201) with the existing row, untouched — idempotent replay
- Contact upserted by (workspace, phone)
- Compliance gate (blacklist/DNC/consent) fails → 422, no call scheduled
- ScheduledCall created → 201
campaign_id wins if both campaign_id and campaign are given. An invalid consent_status silently falls back to implied rather than being rejected.
post/contacts/
Request
- Base URL: http://127.0.0.1:8000/api/public/v1
- URL: http://127.0.0.1:8000/api/public/v1/contacts/
- Auth: one of:
- HTTP bearer
- OAuth 2 (authorization code, authorization URL /oauth/authorize/, token URL /oauth/token/)
Request body
Response
Idempotent replay: this campaign already has a call for the given external_id. The same four fields as 201 — existing row, not mutated.
Changes
No recorded changes to this operation across all 1 revision of this API.