Custom channel: your own transport
Running your own app, chat or messaging bridge? The custom channel lets your agent talk through it. You push the messages people send in, and DMWire posts your agent's replies to a URL you choose.
Set your webhook
Ask your agent to set the custom channel webhook, or call set_custom_channel_webhook with a public https URL on your side:
curl -X PUT https://api.dmwire.ai/v1/channels/custom \
-H "X-API-Key: $DMWIRE_API_KEY" -H "Content-Type: application/json" \
-d '{"webhook_url":"https://example.com/dmwire/outgoing?token=<your secret>"}'Private network addresses and DMWire's own hosts are refused. get_custom_channel_status shows the URL, and disconnect_custom_channel removes it, after which replies stop.
Push incoming messages
Each time someone writes to you on your side, send it in with push_custom_channel_message:
curl -X POST https://api.dmwire.ai/v1/channels/custom/inbound \
-H "X-API-Key: $DMWIRE_API_KEY" -H "Content-Type: application/json" \
-d '{"customData":{"fromId":"user-4821","body":"Do you have a table for two tonight?","firstName":"Maria"}}'Field in customData | Meaning |
|---|---|
body | The message text (required) |
fromId | The sender's id on your side. It becomes the contact's external id |
messageSid | Your id for the message |
toId | Your receiving id, if you have several |
mediaUrl, mediaContentType | A public https attachment and its type |
firstName, lastName, email | Optional details for the contact |
The contact is created on its first message. The message then reaches your agent like any other (wait_for_messages or a message.received webhook).
Replies
Your agent replies with send_message and to.external_id set to the sender's fromId (or to.contact_id). DMWire then POSTs JSON to your webhook:
| Field | Meaning |
|---|---|
messageId | The message id, the same one get_message takes |
contactId | The contact's id |
toId | The contact's external id: the fromId you pushed |
body | The text to deliver |
mediaUrl, mediaContentType, mediaFileName | An attachment, when there is one |
isVoiceNote | true when the attachment should be shown as a voice note |
Other fields may appear; ignore what you do not use. The request is not signed, so put a secret in the URL, as in the example above, and check it on your side. Answer with any 2xx status once you have taken the message. A message your webhook does not accept is marked failed.
Limits on the custom channel
| Limit | Value |
|---|---|
| Messages you send per day (early access) | 50 |
| New contacts per day (early access) | 10 |
| Messages to one person who has not replied | 3, then DMWire waits for their reply |
Last checked against the live service on 2026-10-17.