Skip to main content

Adjudication Complete Event

The adjudication_complete event is sent when a claim adjudication has finished processing. This is the primary webhook event for receiving adjudication results in real time.

Payload​

The eventPayload contains the full claim data — the same structure returned by GET /v1/claims?id={claim_id} — including the original claim fields, parsed evidence, and adjudication results.

{
"eventId": "evt_adj_001",
"eventType": "adjudication_complete",
"eventPayload": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"claim_number": "CLM-2025-00042",
"claim_amount": 15000,
"service_start_date": "2025-03-10",
"service_end_date": "2025-03-10",
"submission_date": "2025-03-15",
"provider": "Lakewood Family Dentistry",
"employer": "Acme Corp",
"description": "Routine dental cleaning and X-rays",
"expense_category": "Dental",
"expense_type": "Preventive Care",
"plan_name": "Acme 2025 Medical FSA",
"plan_type": "medical_fsa",
"plan_year_start": "2025-01-01",
"plan_year_end": "2025-12-31",
"final_submission_date": "2026-03-31",
"final_service_date": "2025-12-31",
"adjudication_results": {
"silver_recommendation": "approve",
"valid_service_date": true,
"valid_total_amount": true,
"out_of_pocket_total": 15000,
"suggested_service_date_start": null,
"suggested_service_date_end": null,
"deny_code": null,
"deny_text": null,
"suggested_provider_name": null
},
"receipts": [
{
"merchant": "Lakewood Family Dentistry",
"purchased_at": "2025-03-10",
"total_eligible_amount": 15000,
"items": [
{
"title": "Dental Cleaning",
"sku": "D1110",
"sku_type": "CDT",
"line_item_price": 10000,
"claimable_amount": 10000,
"eligible": true
},
{
"title": "Dental X-Rays (Bitewing)",
"sku": "D0274",
"sku_type": "CDT",
"line_item_price": 5000,
"claimable_amount": 5000,
"eligible": true
}
]
}
],
"medical_invoices": [],
"dependent_care_invoices": [],
"statement_of_accounts": []
}
}
Amounts are in cents

All monetary values are integers representing cents. For example, 15000 represents $150.00.

Field Reference​

Top-Level Fields​

FieldTypeDescription
eventIdstringUnique event identifier — use for idempotency
eventTypestringAlways "adjudication_complete" for this event
eventPayloadobjectFull claim data including adjudication results

Adjudication Results​

The adjudication_results object within eventPayload contains:

FieldTypeDescription
silver_recommendationstringSilver's recommendation (see below)
valid_service_datebooleanWhether the claimed service dates are within the plan year
valid_total_amountbooleanWhether the claimed amount matches the evidence
out_of_pocket_totalintegerTotal out-of-pocket amount from evidence (in cents)
suggested_service_date_startstringCorrected start date if evidence suggests a different date
suggested_service_date_endstringCorrected end date if evidence suggests a different date
deny_codestringMachine-readable denial reason code (null if not denied)
deny_textstringHuman-readable denial explanation (null if not denied)
suggested_provider_namestringProvider name from evidence if it differs from the submitted name

Recommendation Values​

ValueDescription
approveThe claim is recommended for approval. The evidence supports the claim.
denyThe claim is recommended for denial. The evidence does not support the claim.
needs_reviewThe claim requires manual review. The automated system could not make a confident determination.
not_neededAdjudication is not needed for this claim type.
request_more_informationAdditional information or evidence is needed before a determination can be made.

Parsed Evidence​

The eventPayload includes parsed evidence in four arrays:

FieldDescription
receiptsPurchase receipts with merchant, line items, and eligibility per item
medical_invoicesMedical invoices/EOBs with service-level charges, insurance payments, and patient responsibility
dependent_care_invoicesDependent care invoices with charges, payments, and DCFSA eligibility
statement_of_accountsProvider account statements with ledger entries

Handling the Event​

def handle_adjudication_complete(event_payload):
recommendation = event_payload["adjudication_results"]["silver_recommendation"]
claim_number = event_payload["claim_number"]

if recommendation == "approve":
# Process approval — initiate reimbursement
amount_cents = event_payload["adjudication_results"]["out_of_pocket_total"]
process_approval(claim_number, amount_cents)
elif recommendation == "deny":
# Handle denial — notify relevant parties
deny_reason = event_payload["adjudication_results"]["deny_text"]
process_denial(claim_number, deny_reason)
elif recommendation == "needs_review":
# Queue for manual review
queue_for_review(claim_number, event_payload)
elif recommendation == "request_more_information":
# Request additional evidence from the participant
request_more_info(claim_number, event_payload)