Location: Webhooks → Outgoing Webhooks, Campaign → Outgoing webhooks, Target / RTB formula → Outgoing Webhooks
Use case: Post a converted or completed call to more than one receiver without sharing one payload
Creating a webhook does not send traffic. Moja only fires webhooks that are attached to the campaign that took the call, or to the target / RTB formula that was actually dialed.
The full tag list is in the Outbound Webhooks Guide.
When to use more than one webhook
Goal | Setup |
One receiver, one event | One outgoing webhook, attached to the campaign |
Two receivers (publisher and CRM, or publisher and QA) | Two webhooks, each with its own URL and body, both attached |
Different payload or event per buyer | Attach the webhook on the target or RTB formula, not only the campaign |
Same URL, different required fields | Still two configs. Do not overload one body and hope unused tags stay empty |
Campaign-level webhooks still fire for every attached campaign. Target / RTB attachments only fire when that destination is dialed.
Required steps
Create the webhook under Webhooks → Outgoing Webhooks.
Name it for the destination, not the campaign (for example,
Publisher converted postback).Event: On converted if the receiver only wants paid or converted calls. On completed if they want every finished call, converted or not. On hangup can fire before final revenue.
Set the method, URL, headers, and body or query string as the receiver specified.
Use uppercase system tags:
[CALL_ID],[CALLER_ID],[DURATION],[REVENUE_PAID_OUT],[EVENT_TIMESTAMP].
Create any custom tags first if the receiver needs a field that is not a system tag (a publisher
call_id,affid, or lead token). The tag key in Moja must match the inbound or ping field you want to keep. A lowercase[call_id]in the webhook is not Moja’s call id.Attach it. Open the campaign → Outgoing webhooks and select the config. Repeat for every campaign that should fire it. For buyer-specific posts, open the target or RTB formula → Outgoing Webhooks and attach there.
Repeat for the second destination. Two attachments on the same campaign is the supported pattern.
Test with Test Webhook, then place a real call that meets the event (a converted call if you chose On converted).
Confirm delivery in Webhooks → Outgoing Webhook Requests. HTTP 200 on the receiver is the pass. Zero request rows means the webhook is not attached, or the event never fired.
Tags that commonly break postbacks
[CALL_ID]is Moja’s call id. Use it to dedupe.A publisher’s own id from the inbound ping is a custom tag. Create that tag, then put it in the body. If the ping sends
call_idand no custom tag namedcall_idexists, the value is dropped and the postback field is empty.[REVENUE_PAID_OUT]and[CONVERTED]are empty or still placeholders on early events (call.incoming, and oftencall.hangup).[URL_PARAMETERS]is a JSON string, not a nested object. The receiver must parse it.Hard-coded empty strings never fill. Put the tag in the field.
How to test
Confirm the webhook appears on the campaign, or on the target that will be dialed.
Fire Test Webhook and confirm the receiver returns 200.
Place one call that matches the event.
Open Outgoing Webhook Requests for that config. You should see a row with the call id and the receiver status.
If you attached two webhooks, confirm two request rows on the same call.
Troubleshooting
Created, but nothing fires
Not attached. Open the campaign → Outgoing webhooks, or the target / RTB formula. Creating the webhook at the organization level is not enough.
Fires, receiver returns 400 or an empty required field
Wrong tag. Check the request body in Outgoing Webhook Requests. An empty publisher call_id usually means the custom tag was never created, or the inbound request never stored that ping field.
Only one of two destinations gets the call
The second webhook is missing or not attached to this campaign or target.
Converted webhook never fires
The call did not convert, or you attached On converted and tested a short or unpaid call. Use On completed if they want every hangup.
Test button works, live calls do not
Test does not require campaign attach. Live calls do.
Related articles
