Ping-Post Vendor Integration
Ping careCycle before you transfer a live caller. Check availability, get the transfer number, and attach caller data to the call.
This guide is for call vendors who received a careCycle API key and source ID from an agency. The whole integration is one HTTP request before each transfer.
Here's the model: before you transfer a caller, you ping careCycle with the caller's phone number and any qualification data you have. The response tells you whether the call can be taken right now, and which number to send the caller to. The "post" is the call itself. When the caller arrives at that number within 30 minutes, it links back to your ping automatically. There's no token to echo and no second request to make.
The consent attestation
How you capture consent and what you disclose to callers is between you and the agency you work with; it's governed by your agreement with them, not by this API. What the API requires is an attestation on every ping that you have a permitted basis to connect this caller and share what you're sending:
transfer_consent: trueis required. Pings without it are rejected with a400.consent_basisrecords which situation applies:verbal_agreement(the caller agreed to the transfer on the call),caller_initiated(the caller dialed a number that routes here, like an ad's click-to-call), orpewc(written consent naming the agency is on file). Recommended: the agency sees it per ping in their audit trail.- The evidence fields (
trustedform_cert_url,pewc_artifact,consent_timestamp,truecall_id,jornaya_leadid,agent_npn) let you attach whatever your agreement with the agency calls for.
What careCycle does with what you send: a ping reaches exactly one
agency, and the payload is kept when the caller actually connects. Failed
pings are scrubbed after 72 hours unless the ping carried written-consent
evidence (pewc_artifact, or consent_basis: "pewc"), in which case the
data is retained for the agency.
Authentication
Every request carries your API key in the x-api-key header. The key is
scoped to your source(s) and can only call this endpoint.
x-api-key: cc_your_api_keyThe ping request
POST https://api.carecycle.ai/v2/ping
Content-Type: application/jsonNote that this is a POST with a JSON body. Caller names and dates of
birth belong in the body, never in a URL where access logs would keep them.
Required fields
| Field | Description |
|---|---|
source_id | Your assigned source identifier (for example ABC_K7H9M2NP) |
caller_id | The caller you intend to transfer. North American number; +1XXXXXXXXXX, 1XXXXXXXXXX, and XXXXXXXXXX all work. Must match the number the caller will show when transferred, since that's how the arriving call links to your ping. |
transfer_consent | Must be literally true: your attestation that a permitted consent basis applies to this call (see The consent attestation above). |
Optional fields
| Field | Description |
|---|---|
sub_id | Your traffic granularity below the source (campaign, ad set, placement). Reported per ping. |
first_name, last_name | Caller name |
date_of_birth | YYYY-MM-DD (alias: dob). Send it only if you already have it; age or birth year in a passthrough field is enough for routing. |
state | Two-letter state code |
postal_code | 5-digit ZIP (alias: zip_code) |
existing_coverage, household_income, qualification_status, filing_status, dependents | Additional qualification data |
consent_basis | Which basis applies: verbal_agreement, caller_initiated, or pewc. Strongly recommended for your own audit trail. |
consent_timestamp | When the consent basis was established (ISO timestamp) |
pewc_artifact | Reference to prior express written consent naming the agency, when you rely on PEWC instead of the live-transfer carve-out |
trustedform_cert_url | TrustedForm certificate of the originating web opt-in, if one exists |
truecall_id | ActiveProspect TrueCall ID proving the call was consumer-initiated |
jornaya_leadid | Jornaya LeadiD token of the originating lead |
agent_npn | NPN of the transferring licensed agent, for agent-initiated transfers |
Numbers are fine where you'd expect strings ("postal_code": 33101 works).
Fields we don't recognize are kept, so feel free to pass
through whatever your system already knows about the caller. Everything you
send pre-fills the customer record and shows up on the receiving agent's
screen when the call connects.
Example
curl -X POST 'https://api.carecycle.ai/v2/ping' \
-H 'x-api-key: cc_your_api_key' \
-H 'Content-Type: application/json' \
-d '{
"source_id": "ABC_K7H9M2NP",
"caller_id": "+14039932200",
"transfer_consent": true,
"consent_basis": "caller_initiated",
"trustedform_cert_url": "https://cert.trustedform.com/2605...",
"sub_id": "fb-adset-42",
"first_name": "Jane",
"state": "FL",
"postal_code": "33101"
}'The response
{
"agent_available": true,
"number": "+18005551234",
"expires_in_seconds": 1800
}Transfer the caller to number. Availability is a real check against live
agent presence, business hours, and AI coverage, so true means the call
will actually be answered. Your ping and its caller data stay matchable to
the arriving call for expires_in_seconds (30 minutes).
Errors
| Status | Meaning |
|---|---|
400 | Invalid or missing caller_id / source_id, or missing transfer_consent attestation |
401 | Missing or invalid API key |
403 | Your key is not authorized for this source_id |
404 | Source not found, inactive, or has no transfer number configured |
429 | Rate limited. Honor the Retry-After header and back off exponentially |
If you're getting a 403 or 404, contact the agency that issued your
key. Those are configuration issues on their side, not transient errors
worth retrying.
Transfer semantics
- Ping right before you transfer. The answer is a point-in-time availability check, not a reservation. An agent can get busy between a stale ping and a late transfer.
- Transfer from the number you pinged about. Matching is done by caller
ID. If the caller arrives from a different number than the
caller_idyou sent, the call still gets answered, but your data won't attach to it. - Re-pinging is safe. Pinging the same caller again refreshes your data and restarts the 30-minute window instead of creating duplicates. Retrying after a network error is safe for the same reason.
- Don't cache numbers. Tracking numbers are per-source and can change.
Use the
numberfrom each ping.
Best practices
- Send every qualification field you have. It lands on the agent's screen
the moment the call connects, and the caller notices the difference.
statematters most: buyers who route by agent licensure use it to check that someone licensed in the caller's state is actually available before saying yes. Without it, the availability answer can't account for licensing. - Use a distinct
sub_idfor each traffic source (campaign, ad set, placement). Agencies see quality persub_id, and clean sub-IDs make budget conversations go your way. - Take
agent_available: falseat face value and route the caller to your fallback. If thereasonisafter_hours, nobody is going to pick up. - Alert on sustained
401or403responses. Agencies can rotate or revoke keys, and catching that in minutes beats losing a day of traffic.
Full API reference
The machine-readable contract, with every field and response shape, lives in the Ping Post API reference.