Skip to main content

Pass publisher data into Moja and send it to buyers (data-pass campaigns)

Choose how publisher data enters Moja (inbound RTB or call_data webhook) and when buyers may receive it.

Written by Moja Bot

Use case: Receive lead data from a publisher, attach it to the inbound call, and send it to the right buyer at the right time.

Audience: Publishers sending pre-call lead data into Moja. This is not a guide to configuring buyer-side RTB endpoints.

A data-pass campaign has two separate decisions:

  1. How does the data enter Moja?

  2. Which buyers are allowed to receive it?

Data can enter on the inbound RTB ping itself, or on a separate call_data webhook. The second decision is the same either way. An Agent Availability Check can send the lead data to every buyer being evaluated. A Pre-Bridge Check sends it only to the selected buyer.


Choose the right path

What are you trying to do?

Use

Receive publisher fields on the inbound RTB ping

Inbound RTB query, body, or header fields + matching Custom Tags

Receive publisher fields on a static or DID call that may arrive before the data

call_data incoming webhook + Wait For Pre Call Webhooks

Send data to every buyer Moja evaluates

Agent Availability Check

Send data only to the selected buyer before connection

Pre-Bridge Check

Recommended default: Use a Pre-Bridge Check when the payload contains personal information, the buyer charges per request, or non-selected buyers should not receive the lead.


Part 1: Receive publisher data in Moja

Choose one inbound method. Do not stack both unless the publisher truly sends two independent payloads.

Path A: Data arrives on inbound RTB

Use this when the publisher posts an inbound RTB request and the lead fields are already on that request.

  1. Create a Custom Tag in Moja for every extra field you need to keep, such as lead_id, zip_code, publisher_sub_id, or income_range. Create the tags before traffic. A later Call Flow will not recover ping fields that were never stored.

  2. Have the publisher send those fields on the inbound RTB request as query parameters, JSON body fields, or headers.

  3. Moja normalizes inbound RTB tags and parameters before routing-plan resolution and Call Flow execution, so filters, RTB bodies, Agent Availability Checks, and Pre-Bridge Checks can read them.

Do not add Wait For Pre Call Webhooks for this path. Ignore on inbound RTB requests is enabled by default, so the wait node is skipped during inbound RTB evaluation. The ping already carries the data; there is no separate webhook race to wait for.

Do not create a Custom Tag named call_id. That key is reserved for Moja’s call id. A publisher’s own id must use a different key, such as pub_call_id or external_id.

Path B: Data arrives on a separate call_data webhook

Use this when the call is a static or DID path and the publisher fires lead data separately, often at the same time as the call.

  1. Go to Webhooks → Incoming.

  2. Create an incoming webhook with type call_data.

  3. Attach the incoming webhook to the campaign that receives the calls.

  4. Create a Custom Tag for every extra field you need to preserve.

  5. Give the portal-generated webhook URL to the publisher. Do not rebuild the URL from an example.

Correlation key

The publisher must send caller_id. Moja matches the request to the campaign call using the campaign and caller ID.

  • Send the same normalized E.164 caller_id on the webhook and the call, for example +15555551212.

  • phone_number is not a substitute for caller_id on this endpoint.

  • A successful webhook response confirms that Moja received the request. It does not, by itself, prove the data was attached before routing began.

Illustrative JSON payload:

{
  "caller_id": "+15555551212",
  "lead_id": "publisher-lead-123",
  "zip_code": "37919"
}

This shows the request body only. Use the webhook URL and authentication key generated in your portal; do not reconstruct a URL from this example.

Handle the timing race

A call can arrive before or alongside the publisher’s webhook. Add Wait For Pre Call Webhooks to the campaign Call Flow before the Routing Plan node.

  1. Open the campaign’s Call Flow.

  2. Place Wait For Pre Call Webhooks before routing.

  3. Set a bounded wait from 1 to 10 seconds. The portal default is 1 second.

  4. Define what happens when required data is missing: continue without it, branch to an IVR, or end the call.

Important: The wait node continues to the next node when its timer expires, even when no matching request was found. Add a condition after it if routing must not continue without a required tag.


Part 2: Send data to buyers

Part 2 does not change based on Path A or Path B. Once the fields are tags on the call, disclosure timing is the same.

Option A: Agent Availability Check

Use an Agent Availability Check when each evaluated buyer must confirm eligibility or staffing before Moja chooses a destination.

Moja runs enabled availability checks across the routes being evaluated. A passing buyer remains eligible. A buyer whose check fails or times out is skipped, and routing continues.

Disclosure warning: Because this happens before selection, the same prospective lead can be sent to more than one evaluated buyer.

Use this only when:

  • Every evaluated buyer is allowed to see the submitted fields.

  • The buyer’s endpoint is genuinely an eligibility or agent-availability check.

  • You understand any per-request charge imposed by the buyer.

Configure it on the relevant Target or RTB Target. The standard timeout defaults to 1000 ms. Treat errors and timeouts as unavailable.

Option B: Pre-Bridge Check

Use a Pre-Bridge Check when the lead data must go only to the selected buyer.

The check runs after Moja selects that route and before the caller is bridged. Its response can allow the connection, reject it, or move the call to failover.

  1. Go to Webhooks → Pre-Bridge Checks.

  2. Create the request with the buyer’s URL, method, headers, query or body, timeout, and pass conditions.

  3. Insert Moja tags in the request, such as [CALLER_ID], [ZIP_CODE], and your configured Custom Tags.

  4. Set explicit outcomes for pass, fail, error, and timeout: connect, reject, or fail over.

  5. Attach the check to the buyer’s route in the Routing Plan.

Important: Creating a Pre-Bridge Check does not activate it. It runs only on routes where it is attached.


Examples

SSDI on a static number with a pre-call webhook

A publisher sends an SSDI call to a campaign number and posts lead data to the campaign’s call_data webhook.

  1. The publisher sends caller_id, lead_id, zip_code, and the approved qualification fields.

  2. The Call Flow waits briefly for the matching webhook.

  3. Moja applies fields whose Custom Tags already exist.

  4. Routing evaluates eligible buyers.

  5. The selected buyer receives the approved payload through its attached Pre-Bridge Check.

  6. If the buyer passes the request, Moja bridges the caller. If it fails, errors, or times out, the route follows the configured outcome.

SSDI on inbound RTB

The same buyer handoff works when the publisher includes those fields on the inbound RTB ping instead of a separate webhook.

  1. Custom Tags exist before the ping.

  2. The publisher sends lead_id, zip_code, and the approved fields on the inbound RTB request.

  3. Moja stores matching tags during ping evaluation. There is no wait node.

  4. When the correlated inbound RTB call arrives through the allocation and call path Moja created for that request, routing uses those tags. This is not a generic lookup that attaches an earlier RTB ping to any later call on a static DID.

  5. The selected buyer still receives data only through the attached Pre-Bridge Check, unless you intentionally used Agent Availability Check.


Payload rules

  • Send only fields needed for routing and handoff.

  • Create matching Custom Tags before testing, whether the source is inbound RTB or call_data.

  • Use consistent lower-case tag names when configuring custom fields. Existing upper- or mixed-case references still resolve because tag matching is case-insensitive.

  • Use the portal-generated authentication details. Never place secrets in screenshots or shared tickets.

  • Do not send sensitive personal information to an Agent Availability Check unless every evaluated buyer is authorized to receive it.

  • Confirm whether the buyer bills for every request, every accepted request, or every connected call.


Timeout and retry behavior

Step

When it times out or fails

Inbound RTB ping fields

Missing Custom Tags are dropped. There is no wait. Add filters or a Call Flow condition if required fields must be present.

Wait For Pre Call Webhooks

The flow continues. Use a following condition to enforce required data.

Agent Availability Check

That destination becomes ineligible; routing continues to other eligible routes.

Pre-Bridge Check

Moja follows the configured timeout or error outcome: connect, reject, or fail over.

Design live-call integrations around short, bounded timeouts. Do not rely on automatic retries during the same routing attempt. If a receiving system needs asynchronous retries after the call, use the appropriate post-call integration instead.


Test checklist

  • Confirm required Custom Tags exist before sending traffic.

  • Inbound RTB path: send a ping that includes the extra fields, then confirm those tags are present on the request and the later call.

  • Webhook path: confirm the incoming webhook is attached to the correct campaign.

  • Webhook path: send a test with a unique normalized E.164 caller_id and verify the webhook and call use the exact same value.

  • Webhook path: test webhook-before-call, webhook-during-wait, and no-webhook cases.

  • Confirm missing-data fallback follows the intended branch.

  • For Agent Availability, confirm which buyers received requests and which passed or failed.

  • For Pre-Bridge, confirm only the selected buyer received the request.

  • Test pass, fail, error, and timeout outcomes before sending live traffic.

  • Confirm the call connects or fails over exactly as configured.


Related guides

Did this answer your question?