Migrating from another provider
What moves through the API, what does not, and the order to cut over safely: contacts, opt-outs, outbound sends and inbound replies.
Contacts, opt-outs, sending and receiving all move through the API. Message history does not. Start with the opt-outs.
What moves
- Contacts. Create each one with
POST /v1/contactsin the rightworkspace_id. Carry your CRM record id incustom_fields. - Opt-outs. Turn on outbound Do Not Disturb for each opted-out contact with
PATCH /v1/contacts/{id}/dnd. Sends to a contact with outbound DND on are refused with409. - Outbound. Send with
POST /v1/messages. - Inbound replies. Register an inbound webhook URL on each workspace. See Inbound webhooks.
What does not move
- Message history. There is no route for importing past messages. Keep an export from your old provider.
- Devices. Lines are paired in the dashboard, not through the API.
Steps
- Export your contacts, with phone numbers in full international format, and your complete opt-out list with timestamps. Keep both somewhere you control.
- Register your app and install it on the account. See Custom integrations.
- Create the workspaces you need, or list the existing ones with
GET /v1/workspacesand note their ids. - Import contacts:
curl -X POST https://api.bluereacher.com/v1/contacts \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{
"workspace_id": 7,
"phone_number": "+15551234567",
"first_name": "Dana",
"custom_fields": { "crm_id": "YOUR_CRM_ID" }
}'- Apply the opt-out list before you send anything:
curl -X PATCH https://api.bluereacher.com/v1/contacts/1234/dnd \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Content-Type: application/json" \
-d '{ "direction": "outbound", "status": "enable_all" }'- Register the inbound webhook on each workspace and confirm a delivery arrives.
- Repoint your outbound code at
POST /v1/messages. Send to a number you own first. - Cut over one segment, check replies arrive, then move the rest.
Keep your own opt-out list as well. DND is the enforcement; your list is the record. See Opt-out handling.
Checklist
- Contacts and opt-outs exported before the old account closes
- App registered and installed
- Contacts imported with CRM ids in
custom_fields - Outbound DND set for every opted-out contact
- Inbound webhook registered on every workspace and a delivery confirmed
- One segment sent and checked before the rest

