LeadOpera

Reference

Application Programming Interface (API)

Everything you can do in the portal, you can do over HTTP. JSON in, JSON out. Pick a tab by product: LeadOpera (marketplace), LeadProof (lead certification), or TermsProof (agreements).

Base URL & authentication

All endpoints are under https://www.leadproof.ai. Most authenticate with a Bearer token; a few use a scoped token or a public key. JSON body + Content-Type: application/json unless noted.

Authorization: Bearer <token>
Content-Type: application/json
  • API key (secret, account-level) — spends credits and acts with full permissions; server-side only. Find it under your name (top-right) → API key.
  • Widget token (public) — used only by the capture script to mint certificates.
  • Ingest token (ingest_…, scoped) — works only on the ingest endpoints (attested + Nota); safe in a distribution platform’s webhook. Mint per source in Setup → Ingest or the Network console.
  • Google / Meta keys — the self-serve lead-ad webhook key, or the per-Page Meta connection.

Each endpoint lists its credit cost. A request that would overdraw your balance returns 402 { "error": "insufficient credits" } and charges nothing; other error responses are also non-charging. Dollar pricing, volume tiers, and marketplace fees: Pricing →.

The marketplace API — route leads through the auction, settle them on the ledger, and run your own marketplace as a Network operator. A supplier posts leads to your marketplace; the auction picks a buyer and Maestro settles. Requires nota_routing_enabled on the routing account. See the Nota, Galleria, and Maestro guides for concepts.

Ingest & route a lead (post)

POST/api/nota/ingest· auth: ingest token (Bearer ingest_…) or session · cost: platform fee at settlement
Request
{ "campaign_key": "auto-insurance-q3",   // or ?campaign_key= ; a source may bind several
  "lead_ref": "your-id-123",             // optional idempotency ref (echoed back)
  "phone": "8135550142", "email": "jane@acme.com",   // one-way hashed for Check/dedup
  "pp_cert_id": "pp_…",                  // optional — attach an existing LeadProof cert
  "dedup_window_hours": 72, "return_window_hours": 168,
  "first_name": "Jane", … }              // any additional lead fields (mapped by the source field-map)
Success 200
{ "lead_ref": "lead_…", "certified": true,
  "routing": { "routed": true, "buyer_account_id": 210, "clearing_price": 32.5,
               "decision_id": 90123, "campaignKey": "auto-insurance-q3" } }
// not sold: routing.routed=false with a reason (no_bid / no_eligible_target / duplicate / …)
Failure
401 invalid or revoked ingest token · 403 nota routing not enabled / campaign_key not connected to this source
422 campaign_key is required · 503 network is paused (operator below the required minimum balance)

Authenticate with a scoped ingest token minted per source (Setup → Ingest, or the Network console) — it only works on the ingest endpoints, so a leak can’t spend credits or read data. For a network source the token carries the operator + buy price; delivery settles three-party.

Ping (reserve without delivering)

POST/api/nota/ingest/ping· auth: ingest token or session · cost: free (reserve only)
Request
{ "campaign_key": "auto-insurance-q3", "phone": "8135550142", "email": "jane@acme.com" }
Success 200
{ "lead_ref": "lead_…", "match": true, "price": 32.5, "expires_at": "2026-09-11T14:05:00Z" }
// no winner: { "lead_ref": "lead_…", "match": false, "reason": "no_bid" }
Notes
Ping runs the auction and HOLDS a reservation at the winning price, returning the bid — it delivers
nothing. Post the full lead to /api/nota/ingest before the reservation expires to deliver at the held
price. Price is quoted back only for trusted sources.

Report CPA conversions

POST/api/nota/conversions· auth: Bearer · create · cost: CPA fee on matched conversions
Request
{ "target_id": 55, "conversions": [
  { "conversion_ref": "sale-9001", "lead_ref": "lead_…", "amount": 300 },   // match by our lead_ref,
  { "conversion_ref": "sale-9002", "phone": "8135550142" } ] }              // your ack, or phone/email
Success 200
{ "ok": true,
  "summary": { "accrued": 1, "unmatched": 1, "duplicate": 0, "earning": 300 },
  "results": [ { "conversion_ref": "sale-9001", "status": "accrued", "lead_ref": "lead_…", "earning": 300 }, … ] }
Failure
422 target_id is required · 422 conversions[] is required · 404 target not found

File returns / disputes

POST/api/nota/returns· auth: Bearer · cost: reverses the settlement per the rules
Request
{ "lead_ref": "lead_…", "buyer_account_id": 210, "reason_code": "wrong_number", "note": "optional" }
Reason codes (reason_code — free text; these are the canonical set)
invalid_number   Invalid / disconnected / unreachable number   [auto-adjudicated]
wrong_number     Wrong number — reached the wrong person   [auto-adjudicated]
duplicate        Duplicate — already delivered to you within the dedup window   [auto-adjudicated]
no_consent       No or disputed consent
not_interested   Consumer not interested
unqualified      Did not meet the buying criteria
wrong_vertical   Wrong vertical / product
out_of_area      Out of service area
spam_fraud       Spam / fraud
other            Other — manual review
Notes
Files a return against a delivered lead. reason_code is free text, but the [auto-adjudicated] codes above
are decided objectively against the sealed record (number claims re-verified vs the sealed phone hash +
carrier lookup; duplicates vs the dedup fingerprint); anything else routes to manual review. Batch upload
at POST /api/nota/returns/batch (CSV). A valid return credits the buyer the lead price and reverses the
seller earning — the platform fee is kept.

Report a disposition (Encore)

GET / POST/api/encore/dispositions· auth: Bearer · create · cost: free
Report an outcome update
POST { "lead_ref": "lead_…", "disposition": "qualified",
       "sub_status": "optional free-text detail", "buyer_account_id": 210, "campaign_key": "auto-insurance-q3",
       "converted": false }                                // manual close flag (see note)
// → { "ok": true, "lead_ref": "lead_…", "disposition": "qualified" }
Disposition codes (disposition)
delivered    Delivered — sold and handed off
contacted    Contacted — buyer is working it
qualified    Qualified
sold         Sold / closed won
dead         Dead / lost
dnc          Do not contact
returned     Returned
List
GET /api/encore/dispositions?lead_ref=lead_…        // or ?buyer_account_id=210
// → { "dispositions": [ { lead_ref, buyer_account_id, campaign_key, disposition, sub_status, converted, updated_at }, … ] }
Notes
No-PII outcome tracking on leads you sold. An unrecognized disposition defaults to "contacted".
converted marks a manual close; a CPA revenue event is fired by /api/nota/conversions (which also sets
converted=true), so use conversions when money moved and this endpoint to advance the pipeline stage.

Network operator — suppliers & money

GET / POST / DELETE/api/maestro/network/suppliers· auth: Bearer · owner/api_key · account_role=network · cost: free
Register a supplier (mints its ingest token, shown once)
POST { "supplier_email": "ops@vendor.com",   // find-or-creates the account (or supplier_account_id)
       "buy_price": 2.0, "taxonomy_code": "auto-insurance", "channel": "lead", "label": "Vendor 77" }
// → { "token": "ingest_…", "id": 41, "supplier_account_id": 512, "buy_price": 2.0 }
GET    /api/maestro/network/suppliers      // list
DELETE /api/maestro/network/suppliers?id=41
Related
/api/maestro/network/payouts   (build supplier payout batches + operator margin withdrawal)
/api/maestro/network/treasury  (admin-side)   ·   /api/maestro/network/compliance  (anchors + returns)
/api/maestro/network/status    (network health: balance floor, pause reason)
POST/api/accounts/resolve· auth: Bearer · create · cost: free
Find-or-create an account by email
POST { "email": "ops@vendor.com", "company": "optional (new)", "create": false }
// → { "status": "matched" | "no_match" | "created", "accountId": 512, "companyName": "Vendor 77 LLC" }

Fund a marketplace wallet

GET / POST/api/maestro/funding· auth: Bearer · create · cost: the amount funded (+ card surcharge on card)
Request
POST { "wallet": "buyer" | "seller_fee",
       "method": "wire" | "rtp" | "fednow" | "ach_credit" | "card",
       "amount": 1000, "note": "optional" }
// irrevocable rail → { "ok": true, "event": { … } } (declare + admin matches the deposit)
// card            → { "ok": true, "url": "https://checkout.stripe.com/…" }  (amount + disclosed surcharge)
GET  /api/maestro/funding   // balances + funding events

Nota configuration — sources, campaigns, buyer targets, field-map, secrets — is managed in the portal (Nota) and also reachable at /api/nota/sources, /api/nota/campaigns, /api/nota/targets. Full concepts in the Nota guide.

← Getting started · Pricing · Function guides

LeadOpera™ is a trademark of LeadOpera LLC, a Colorado limited liability company. Its products and services — including LeadProof™ and TermsProof™ — are proprietary and operated through their independent websites; LeadProof™ and TermsProof™ are trademarks of LeadOpera LLC. Unauthorized use of these marks is strictly prohibited. The certification method used by LeadOpera’s products is patent pending. A certificate is a tamper-evident technical record — not a determination of legal or regulatory compliance, validity, or enforceability, and not legal advice.

TrustedForm, Jornaya, Boberdoo, Phonexa, LeadsPedia, Google, Meta, Facebook, Instagram, Twilio, DigiCert, and Sectigo are trademarks of their respective owners; their mention describes interoperability only and does not imply any affiliation with, endorsement by, or sponsorship from those companies.

Press, partnership, and general inquiries: inquiry@leadopera.com

© 2026 LeadOpera LLC. All rights reserved.