InboundXPublisher docs

On this page: Endpoint

Advanced · Reference

Ping for a bid

Ask whether we take a caller before you send the call. Every answer is HTTP 200 with JSON: a bid, or a no-bid.

Endpoint

GETPOSThttps://app.inboundx.io/api/rtb/ping

Send the parameters in the query string, as a form, or as JSON. Names aren't case-sensitive. When a name is in both the query string and the body, the query string wins.

curl -X POST "https://app.inboundx.io/api/rtb/ping" \
  -d "key=YOUR_PING_KEY" \
  -d "caller_number=+15555550123" \
  -d "caller_state=TX" \
  -d "request_id=abc-123"

Parameters

ParameterAlso acceptedRequiredMax lengthWhat it is
keyNoneYes128 charactersYour ping key for this campaign.
caller_numbercaller_idcalleridfromaniYes64 charactersThe caller's phone number, ideally with the country code. We match the call to its bid by this number when it arrives.
request_idringba-requestidringba_requestidcall_idcallidsourcecallidsource_call_idtraceexternal_idclickidRecommended512 charactersYour own ID for this call. We send it back in your postback as {CALL_ID}, and a repeat ping with the same ID gets the same bid back.
caller_zipzipzipcodezip_codepostal_codeinboundzipcodeRecommended16 charactersThe caller's five-digit ZIP code (ZIP+4 is fine; we keep the first five). If you don't send a state we can read, the zip decides it before the area code does.
caller_statestateOptional32 charactersThe caller's US state: its two-letter code or its full name ("TX" or "Texas"). If you leave it out, or we can't read it, we work it out from the zip, then from the area code.
publisher_idpublisherafidOptional128 charactersYour publisher ID. When you send it, it must match the key.
caller_citycityOptional64 charactersThe caller's city, shown on the call. Letters, spaces and .'- only, up to 64 characters.
caller_npa_nxxnpanxxcaller_prefixIf the campaign asks for it128 charactersThe first three or six digits of the caller's number. Shown for context only; a call is never matched by it.
agecaller_ageIf the campaign asks for it128 charactersThe caller's age, a whole number from 18 to 120.
dobdate_of_birthIf the campaign asks for it128 charactersThe caller's date of birth, as year-month-day or month/day/year. The agent sees the age, not the date.
homeownerhome_ownerowns_homeIf the campaign asks for it128 charactersWhether the caller owns their home: yes or no.
insuredcurrently_insuredhas_insuranceIf the campaign asks for it128 charactersWhether the caller has insurance now: yes or no.
current_carriercurrent_insurerIf the campaign asks for it128 charactersThe caller's current insurer, up to 64 characters.
debt_amountunsecured_debtdebtIf the campaign asks for it128 charactersThe caller's debt, in whole dollars. A dollar sign and thousands separators are fine.
destination_zipto_zipmove_to_zipIf the campaign asks for it128 charactersWhere the caller is moving to: a five-digit ZIP code.
loan_amountmortgage_balanceIf the campaign asks for it128 charactersThe loan or mortgage balance, in whole dollars.
accident_dateincident_dateIf the campaign asks for it128 charactersThe date of the accident, as year-month-day or month/day/year.
has_attorneyattorneyrepresentedIf the campaign asks for it128 charactersWhether the caller already has an attorney: yes or no.
trusted_form_cert_urltrustedform_cert_urltrusted_form_certtrusted_formtrustedformxxtrustedformcerturlIf the campaign asks for it128 charactersThe address of the caller's consent certificate, on https. Kept with the call for the buyer; never shown to the agent.
jornaya_leadidjornaya_lead_idjornayaleadidjleadidleadid_tokenuniversal_leadidIf the campaign asks for it128 charactersYour lead's universal ID. Kept with the call; never shown to the agent.
sub_idsubidsub1source_idIf the campaign asks for it128 charactersYour own ID for the traffic source, up to 128 characters. Kept with the call; never shown to the agent.

The bid

Repeat pings for the same caller and campaign reuse the active bid. Holds default to 15 seconds; a campaign may use 10–30 seconds. Always dial before expires_at. During a database interruption, a clean no-target response is returned within one second. Optional traffic shields may reduce bids from sources that send pings without calls.

JSON · 200 · reserved
{
  "uuid": "3f1c2a4e-9b7d-4c1e-8a2f-5d6b7c8e9f01",
  "status": "reserved",
  "payout": 45,
  "seconds": 60,
  "sip_address": "inboundx@inboundx.sip.telnyx.com",
  "expires_at": "2026-01-15T17:30:15.000Z",
  "caller_number": "+15555550123"
}
FieldWhat it is
uuidThe bid's ID.
statusAlways reserved on a bid.
retreaver_payoutWhat the call pays, in US dollars. The same number as payout, present only for Retreaver or unknown/legacy connection platforms.
retreaver_secondsHow long the call must last to pay, in seconds. The same number as seconds, present only for Retreaver or unknown/legacy connection platforms.
payoutWhat the call pays, in US dollars.
secondsHow long the call must last to pay, in seconds.
sip_addressWhere to send the call. Dial it exactly as it is.
expires_atWhen the hold ends. Send the call before then.
caller_numberThe caller's number as we read it. Compare it with yours to catch a formatting problem.

Every bid includes payout and seconds. Retreaver connections also receive retreaver_payout and retreaver_seconds with the same values. Connections without a known saved platform keep both sets for compatibility; all other selected platforms receive only the neutral fields. The platform is chosen by your buyer on your connection, not by a ping parameter.

Transfer timing

Transfer the call before the bid's expires_at. If you can't, don't send the call on that bid: once it has expired, ping again right before you transfer. A new ping costs nothing and won't double-book the caller.

No bid

When we can't take the caller, the answer is still HTTP 200:

JSON · 200 · no-target
{
  "status": "no-target",
  "reason": "state_not_covered"
}

Don't send the call. Ping again for your next caller.

Every reason, and what to do

A no-bid carries a reason. Your ping log in the portal shows the same decline in plain words. The reasons fall into three groups.

Something to fix on your side

Your ping log showsReasonClassWhat to do
Ping key missingmissing_keyTechnicalSend your ping key as key.
Caller state not validbad_caller_stateTechnicalSend the state as two letters or its full name, or leave it out and we'll work it out from the zip, then the number.
Ping key not recognisedunknown_keyTechnicalCheck the key. Each campaign has its own, so ask your buyer if you're not sure which one to use.
Ping key does not match that accountpublisher_mismatchTechnicalThe publisher ID you sent isn't the one this key belongs to. Fix it, or leave it out.
Account not activepublisher_inactiveTechnicalYour account with this buyer is switched off. Ask your buyer.
Account not set up to receive trafficpublisher_no_campaignTechnicalThis key has no campaign behind it yet. Ask your buyer.
Not buying right nowcampaign_inactiveTechnicalThe buyer isn't taking calls on this campaign right now. Ask them when it starts again.
Campaign not live yetoffer_not_liveTechnicalThis campaign isn't live yet. Your buyer turns it on when your setup is ready.
Campaign pausedoffer_pausedTechnicalYour buyer has paused this campaign. Ask them when it starts again.
Unknown stateno_caller_stateTechnicalUse a US caller number with a US area code. Anonymous, toll-free and non-US callers cannot be routed on an all-states line.
Caller number missingno_caller_numberTechnicalSend the caller's number as caller_number.
Caller not acceptedcaller_blockedTechnicalThis caller isn't accepted. Don't send them again.
State not acceptedstate_not_coveredCapacityWe don't take callers from this state on this campaign. Don't send callers from it.
Zip code needed for this campaignno_caller_zipCapacityThis campaign buys calls by zip code. Send the caller's zip as caller_zip.
Zip code not acceptedzip_not_coveredCapacityWe don't take callers from this zip code on this campaign. Don't send callers from it.
Caller already on a call with uscaller_on_live_callCapacityThis caller is already on a call with us. Send each caller once.
At-once cap reachedcap_concurrentCapacityYou've reached this campaign's limit on calls at once. Ping again when one of your calls ends.
Hourly cap reachedcap_hourlyCapacityYou've reached this campaign's limit for this hour. It resets at the top of the hour, on your buyer's clock.
Daily cap reachedcap_dailyCapacityYou've reached this campaign's limit for today. It resets at midnight, on your buyer's clock.
Bid expired before the call arrivedno_reservation_for_callerCapacityThe call arrived with no bid held for it: the bid had expired, or the caller ID wasn't the caller's own number. Send the call within 15 seconds of the bid, with the caller's number as the caller ID.
Caller state missing or not validmissing_caller_stateTechnicalThis campaign needs this field in every ping. Send it as caller_state, or ask your buyer whether it can be left out.
Call ID missingmissing_traceTechnicalThis campaign needs this field in every ping. Send it as ringba-requestid, or ask your buyer whether it can be left out.
Zip code missing or not validmissing_zipTechnicalThis campaign needs this field in every ping. Send it as caller_zip, or ask your buyer whether it can be left out.
City missing or not validmissing_cityTechnicalThis campaign needs this field in every ping. Send it as caller_city, or ask your buyer whether it can be left out.
Partial caller number missing or not validmissing_caller_number_partialTechnicalThis campaign needs this field in every ping. Send it as caller_npa_nxx, or ask your buyer whether it can be left out.
Age missing or not validmissing_ageTechnicalThis campaign needs this field in every ping. Send it as age, or ask your buyer whether it can be left out.
Date of birth missing or not validmissing_dobTechnicalThis campaign needs this field in every ping. Send it as dob, or ask your buyer whether it can be left out.
Homeowner answer missingmissing_homeownerTechnicalThis campaign needs this field in every ping. Send it as homeowner, or ask your buyer whether it can be left out.
Insurance answer missingmissing_insuredTechnicalThis campaign needs this field in every ping. Send it as insured, or ask your buyer whether it can be left out.
Current insurer missingmissing_current_carrierTechnicalThis campaign needs this field in every ping. Send it as current_carrier, or ask your buyer whether it can be left out.
Debt amount missing or not validmissing_debt_amountTechnicalThis campaign needs this field in every ping. Send it as debt_amount, or ask your buyer whether it can be left out.
Destination zip code missing or not validmissing_destination_zipTechnicalThis campaign needs this field in every ping. Send it as destination_zip, or ask your buyer whether it can be left out.
Loan amount missing or not validmissing_loan_amountTechnicalThis campaign needs this field in every ping. Send it as loan_amount, or ask your buyer whether it can be left out.
Accident date missing or not validmissing_accident_dateTechnicalThis campaign needs this field in every ping. Send it as accident_date, or ask your buyer whether it can be left out.
Attorney answer missingmissing_has_attorneyTechnicalThis campaign needs this field in every ping. Send it as has_attorney, or ask your buyer whether it can be left out.
Consent certificate missing or not validmissing_consent_cert_urlTechnicalThis campaign needs this field in every ping. Send it as trusted_form_cert_url, or ask your buyer whether it can be left out.
Lead ID missing or not validmissing_lead_idTechnicalThis campaign needs this field in every ping. Send it as jornaya_leadid, or ask your buyer whether it can be left out.
Sub ID missingmissing_sub_idTechnicalThis campaign needs this field in every ping. Send it as sub_id, or ask your buyer whether it can be left out.

No capacity right now

We couldn't take this caller at this moment. Nothing is wrong with your setup: ping again for your next caller. Your ping log shows all of these as “No capacity”.

campaign_no_rosternoise_shieldclaim_throttledempty_rosterno_agent_onlineno_eligible_agentalready_reservedall_candidates_leasedno_agentno_capacity

no_capacity means your buyer can't take calls right now for a reason on their side. Send the caller to your next buyer, and ping this one again later.

A problem on our side

Something failed on our side. Your ping log shows all of these as “Temporarily unavailable”. Ping again. If it keeps happening, check the status page and tell your buyer.

lookup_failedingress_not_configuredcampaign_missingdb_budget_exceededdb_circuit_openinternal_errortrace_reused_for_different_callerbad_ttlcampaign_not_foundreserve_failednot_reserved

Answers and limits

200 · reserved

A bid. Send the call to sip_address before its expiry. The default hold is 15 seconds; your campaign may allow longer.

200 · no-target

No bid, with a reason. Don't send the call.

Same call ID, same caller

Returns the same bid, so a retry is safe.

Value too long

Cut to the parameter's max length above, then validated.

Your ping keys come from the buyer you send calls to. Ask them for a key, or for help with your setup.© InboundX