Contracted producers get AgentTech Dialer, Solved Enroll, and exclusive leads included. See what is included
REST JSON Webhooks

Integrations and data access

Solved Solutions is a distribution company. The APIs a contracted agency uses mostly belong to the platforms we include, and the ones we operate ourselves are exports for an agency principal. This page says which is which.

What we do and do not operate

The honest division of labor, because it decides who you email when something breaks.

Paths on this page describe the published shape of each surface. Hosts, authoritative schemas, and tokens are issued with your access.

Authenticate, then read JSON

Bearer token over HTTPS, JSON in and out, cursor pagination, and an Idempotency-Key header on writes. Examples use a placeholder host.

# readiness across your structure
curl https://api.example-host/v1/agency/readiness?limit=1 \
  -H "Authorization: Bearer $SOLVED_TOKEN"

# a write, made safe to retry
curl -X POST https://api.example-host/v1/agency/exports \
  -H "Authorization: Bearer $SOLVED_TOKEN" \
  -H "Idempotency-Key: 7f1c9a2e-4b60-4e19-9c2f-0d3a" \
  -H "Content-Type: application/json" \
  -d '{"dataset":"production",
      "cadence":"daily",
      "destination":"https://example.agency/hooks/prod"}'

{
  "data": [
    {
      "producer_id": "prd_01J9K2M1Q8ZB",
      "npn": "00000000",
      "carrier_id": "car_4471",
      "state": "TX",
      "product_line": "medicare_advantage",
      "appointment_status": "approved",
      "certification_status": "transmitted",
      "license_status": "active",
      "ready_to_sell": true,
      "plan_year": 2027,
      "verified_at": "2026-09-18T13:04:22Z"
    }
  ],
  "has_more": true,
  "next_cursor": "Y3Vyc29yOjE3NTgxODI1Mjc"
}

Platform APIs: the stack your agents work in

These belong to the sister companies. Access comes with a contract here, and support for them runs through the platform that owns them.

AgentTech Dialer

Contacts, calls, and dispositions. This is the group an agency uses to keep its own systems current without anyone rekeying a call outcome.

EndpointWhat it does
GET /v1/contactsList contacts on a campaign or across the account, filterable by state, disposition, and last activity. Cursor paginated.
POST /v1/contactsCreate a contact and place it on a campaign. Use this to push a list you own into a dialing queue.
GET /v1/contacts/{id}Fetch one contact with its call history, current disposition, and the campaign it belongs to.
GET /v1/callsList calls by agent, campaign, date range, or outcome, with duration and recording reference.
GET /v1/calls/{id}Fetch one call with its timestamps, agent, disposition, recording reference, and compliance score where one exists.
GET /v1/dispositionsThe disposition set configured for the account, so your own reporting uses the same vocabulary the desk does.
GET /v1/campaignsList campaigns with their live state, caps, and current queue depth.

Solved Enroll

Clients, quotes, and applications from one record. Solved Enroll is in private beta, so this surface is provisioned with beta access rather than generally available.

EndpointWhat it does
GET /v1/clientsList client records, filterable by producer, state, and last activity. Cursor paginated.
POST /v1/clientsCreate a client record from your own intake, so a lead that arrived elsewhere becomes quotable here.
GET /v1/clients/{id}Fetch one client with the product lines quoted, applications submitted, and current policy status.
POST /v1/quotesRequest a quote set for a client across the carriers and product lines the producer is ready to sell.
GET /v1/quotes/{id}Fetch a quote set with the carriers, plans, and the producer it was generated for.
GET /v1/applicationsList applications by producer, carrier, product line, state, or submission date.
GET /v1/applications/{id}Fetch one application with its carrier, submission timestamp, current status, and any outstanding requirement.

Solved Marketing lead delivery

Not a query API. Lead delivery is a push: a post to an endpoint you name, or a webhook, sent on submission rather than in a nightly batch.

EndpointWhat it does
POST {your endpoint}An HTTP post to a URL you supply, carrying the lead fields, the program, and the consent record captured at acquisition.
POST {your webhook}The same payload delivered as a signed webhook event, for teams that already run a webhook consumer.
Native: AgentTech campaignDelivery straight into a dialer campaign, with no endpoint for you to build or maintain.
Native: Solved Enroll clientDelivery straight into a client record, so the first contact and the first quote share one object.

Back to the top of this page

Lead delivery payload

What arrives when a lead is posted to your endpoint. Programs differ, so treat fields as present or absent rather than guaranteed.

FieldMeaning
programThe lead program the record came from: Medicare, life, or final expense.
verticalThe product intent captured at acquisition, within the program.
first_name, last_nameContact name as submitted.
phonePhone number in E.164 format, already validated before delivery.
emailEmail address where one was captured.
state, county, postal_codeGeography, used for licensing and appointment matching before delivery.
date_of_birth or age_bandWhichever the program captured, used for product fit filtering.
monthly_budgetPresent on final expense programs, where budget is captured at acquisition.
coverage_amountPresent on life programs, where a coverage amount is captured.
consentAn object carrying the exact disclosure language shown, the timestamp, the submitting address, and the page.
submitted_atWhen the consumer submitted, as an RFC 3339 timestamp in UTC.
lead_idThe identifier to use for deduplication and for any credit request.

POST /hooks/solved-leads HTTP/1.1
Content-Type: application/json
X-Solved-Event: lead.delivered
X-Solved-Signature: t=1758182527,v1=9c4f2b7e1d05a3...

{
  "lead_id": "led_01J9K2M4R7T0",
  "program": "final_expense",
  "first_name": "Pat",
  "last_name": "Alvarez",
  "phone": "+18665551212",
  "state": "TX",
  "county": "Bexar",
  "age_band": "65-69",
  "monthly_budget": "under_100",
  "consent": {
    "language": "By submitting you agree to be contacted...",
    "submitted_at": "2026-09-18T14:19:46Z",
    "page": "https://example-program/final-expense"
  },
  "submitted_at": "2026-09-18T14:19:46Z"
}

Lead programs are priced and purchased separately from a contract. Nothing about your contract or your platform access depends on buying them. See lead delivery setup.

What Solved Solutions exposes

Three surfaces, all scoped to an agency principal and their own structure. This is the distribution data we actually hold.

Production and readiness exports

Written business and readiness state across your structure, as a scheduled export or an authenticated pull.

EndpointWhat it returns
GET /v1/agency/productionSubmitted and issued business by producer, carrier, product line, state, and period. Cursor paginated.
GET /v1/agency/persistencyPersistency by producer and product line over a period you specify, using the carrier records we hold.
GET /v1/agency/readinessReady-to-sell state for every producer in your structure, broken out by carrier, state, and product line.
GET /v1/agency/certificationsCertification and transmission state by producer, carrier, and plan year.
GET /v1/agency/licensesLicense state by producer and state, including renewal dates, so a lapse is visible before it bites.
POST /v1/agency/exportsCreate a scheduled export of any of the above to an endpoint you name, daily or weekly.

Hierarchy structure

Your structure as data rather than as a description, so your own reporting can attribute business the same way the statements do.

EndpointWhat it returns
GET /v1/agency/hierarchyThe full structure under your position, per carrier, with each producer and their place in it.
GET /v1/agency/producersEvery producer in your structure with status, appointment count, and onboarding state.
GET /v1/agency/producers/{id}One producer with licenses, appointments, certifications, and readiness in a single object.
GET /v1/agency/hierarchy/changesStructure changes applied in a period, so a statement that splits across two structures is explainable.

Commission statement exports

The reconciled view rather than a forwarded carrier document, because a forwarded document cannot tell you what is missing from it.

EndpointWhat it returns
GET /v1/agency/statementsStatement periods available, by carrier, with the date each was received and reconciled.
GET /v1/agency/statements/{id}One statement period with its lines, matched against the business recorded as submitted.
GET /v1/agency/statements/{id}/unmatchedThe rows that did not match: submitted business with no statement line, and statement lines with no submission record.
GET /v1/agency/chargebacksChargebacks applied in a period, by producer and policy, with the carrier reason where one was given.
POST /v1/agency/exportsSchedule a statement export alongside the production exports, to the same endpoint.

Back to the top of this page

Agency events

Four events cover the moments an agency dashboard actually needs to react to. Register an HTTPS endpoint, subscribe it, and return a 2xx quickly.

Event typeWhen it fires
producer.appointedA carrier appointment has been approved for a producer in your structure. Carries the producer, the carrier, and the state.
producer.ready_to_sellA producer has become ready to sell for a carrier, state, and product line combination. This is the event most agency dashboards are actually waiting for.
application.submittedAn application has been submitted to a carrier. Carries the producer, the carrier, the product line, the state, and the submission timestamp.
commission.statement_availableA reconciled statement period is available. Carries the carrier, the period, and whether any rows were unmatched.

Rate limiting and errors

One error envelope and status codes that mean what they usually mean.

Conventions

  • Collections return data, has_more, and next_cursor. Cursors are opaque; do not construct them.
  • Send Idempotency-Key on any write. One key per logical operation, reused across retries.
  • Timestamps are RFC 3339 in UTC. Phone numbers are E.164. Producer identity is the National Producer Number.
  • A 429 carries Retry-After in seconds. Back off on it rather than retrying immediately.
  • Quote the request_id when you report a problem. It is the fastest way to find the request in our logs.

HTTP/1.1 422 Unprocessable Entity
Content-Type: application/json

{
  "error": {
    "type": "invalid_request",
    "code": "producer_outside_hierarchy",
    "message": "That producer is not in the structure
      this token is scoped to.",
    "param": "producer_id",
    "request_id": "req_01J9K2P5F3XQ"
  }
}

StatusMeaning
200 OKThe request succeeded and the body carries the resource or a paginated collection.
201 CreatedA write succeeded and created a resource. The body carries it.
202 AcceptedWork was accepted and completes asynchronously. The outcome arrives as a webhook.
400 Bad RequestThe request could not be parsed, or a required parameter is missing or malformed.
401 UnauthorizedNo bearer token, an expired token, or a token that does not belong to this account.
403 ForbiddenAuthenticated but not permitted. Agency endpoints are scoped to your own structure, so this usually means a producer outside it.
404 Not FoundNo such resource, or it is outside the scope of this token.
409 ConflictThe resource is not in a state that allows the operation.
422 Unprocessable EntityWell formed and understood, but rejected by a rule.
429 Too Many RequestsRate limited. Retry-After carries the number of seconds to wait.
5xxOur fault. Safe to retry with the same idempotency key; a retried write will not duplicate.

FAQs

Integration questions

Does Solved Solutions have its own product API?

Only for the things we actually operate: production and readiness exports, hierarchy structure, and reconciled commission statements, all scoped to an agency principal and their own structure. The APIs a producer uses day to day belong to the platforms, because that is where the dialing, quoting, and lead generation happen. We are a distribution company, and pretending otherwise would just send you to the wrong support desk.

Where do credentials come from?

From onboarding, in every case. There is no self-serve key generator here or on the platform APIs, because these surfaces reach producer records, client records, and commission data. Ask for access during contracting and tell us what you are building, and the token is issued scoped to your structure.

Are the endpoint paths on this page live?

This page documents the shape of each surface: the resources, the path patterns, the conventions, and the event catalog. Hosts, authoritative schemas, and credentials come with your access. Nothing here is an endpoint you can authenticate against by copying it out of the page.

Can a single producer use any of this?

The agency endpoints are for an agency principal, because they return data across a structure. An individual producer generally does not need them: the dialer, the quoting platform, and the contracting portal already show the same information for one person. If you run a floor or a downline, this is the layer you want.

Do I need this to work with you?

No. Most producers never make an API call. This exists for agencies that run their own management system, their own reporting, or their own warehouse and would rather not rekey. See the integrations page for how specific system categories connect.

How do webhook deliveries behave?

At least once, not exactly once, and not necessarily in order. Key on the event id and discard duplicates. Deliveries are signed, verify against the raw body before parsing, and return a 2xx quickly and do the work afterward. An endpoint that processes inline and answers slowly will be retried while it is still working.

Is there a Model Context Protocol server?

Solved Enroll provides one as part of its private beta, so an agent runtime that speaks the protocol can treat client, quote, and application operations as tools. It is provisioned the same way beta access is, and it is subject to the same readiness rules as the platform itself.

Something else? Contact us

Tell us what you are building.

Access is issued during onboarding and scoped to your own structure. Say what you want to read and we will tell you which surface holds it.