Skip to the page
Chapters

Claims

Reconcile a claim

POST/api/v1/claims/{id}/reconcile

Says you posted the claim's payment in your system: a paid or denied claim becomes reconciled (a reconciled one is returned as it is). If the payer later reverses or corrects the payment, the claim leaves reconciled with a timeline entry and an event (claim.payment_reversed or claim.paid), so you can undo or redo the posting. To post every claim of a remittance at once, post its ERA. Send an empty JSON object as the body. Needs an Idempotency-Key header and a key with the submit permission.

Needs a key with submit permission.

Request

Headers

Headers
NameTypeRequiredDescription
Idempotency-KeystringrequiredMakes the request safe to repeat: a request with the same key and body returns the first answer (the reply has an idempotent-replayed header), and the same key with a different request is refused. 1 to 255 printable characters; a UUID is a good choice.At least 1 character.At most 255 characters.Matches `^[\x21-\x7e]{1,255}$`.

Path parameters

Path parameters
NameTypeRequiredDescription
idstringrequiredA claim ID (clm_...).

Response

The claim as it is now. Status 200.

Response fields
NameTypeDescription
idstringAn ID that starts with clm_.
objectstringAlways `claim`.
kindstringclaim, or predetermination (sent before treatment; its answer is an estimate). Set when it was made.One of: `claim`, `predetermination`.
statestringOne of: `draft`, `validated`, `needs_attention`, `queued`, `submitted`, `accepted_clearinghouse`, `accepted_payer`, `rejected`, `voided`, `paid`, `denied`, `reconciled`, `returned`.
next_stepstringOne sentence saying what happens next, or what you must do.
frequencystringoriginal; replacement for a resubmission of a claim the payer has; void for a void transaction.One of: `original`, `replacement`, `void`.
parent_idstring or nullThe claim a void transaction voids.
patient_control_numberstringYour identifier for the claim, or the one we made: unique in your organization, sent on the claim and returned on its status.
officeobject
office.idstringAn ID that starts with off_.
office.namestring
payerobject
payer.idstringAn ID that starts with pyr_.
payer.payer_idstringThe payer's own payer ID.
payer.namestring
rendering_providerobject
rendering_provider.idstringAn ID that starts with prv_.
rendering_provider.first_namestring
rendering_provider.last_namestring
rendering_provider.npistring
patient_nameobjectThe patient: the dependent when there is one, else the subscriber.
patient_name.first_namestring
patient_name.last_namestring
patient_idstring or nullThe patient this is about (pat_...) in the patient directory: the dependent when there is one, else the subscriber. Set by Claim House when a check completes or a claim's patient is written; null while a check is pending, and when the patient has no date of birth or a name with no letters or digits to compare.
service_datesobject
service_dates.firststring (date) or null
service_dates.laststring (date) or null
totalsobject
totals.chargestringThe sum of the line fees, in dollars, as a decimal string.Matches `^-?\d+\.\d{2}$`.
totals.linesintegerAt least -9007199254740991.
paymentobject or nullWhat the payer paid (states paid, denied and reconciled), from its remittances; null before one arrives, when every payment was reversed, and always on a predetermination.
payment.outcomestringpaid or denied: the outcome of the claim's current payment (the latest one no reversal cancelled). A reconciled claim keeps it.One of: `paid`, `denied`.
payment.era_idstringThe ERA of the claim's current payment (era_...): the latest one, when that is not certain.
payment.paidstringWhat the payer paid in all: the sum of every payment applied, reversals subtracted.Matches `^-?\d+\.\d{2}$`.
payment.allowedstring or nullThe amount the current payment allowed, when it said.Matches `^-?\d+\.\d{2}$`.
payment.patient_responsibilitystringWhat the patient owes, as the payer says (deductible, coinsurance and the like).Matches `^-?\d+\.\d{2}$`.
payment.payment_datestring (date) or nullThe payment date of the ERA.
payment.reconciled_atstring (date-time) or nullWhen you confirmed you posted the payment (state reconciled); null until then.
estimateobject or nullA predetermination's estimate (state returned); null before it arrives, and always on a claim.
estimate.era_idstringThe ERA that carried the estimate (era_...).
estimate.allowedstring or nullWhat the payer would allow, when it said.Matches `^-?\d+\.\d{2}$`.
estimate.paystringWhat the payer would pay once the treatment is done.Matches `^-?\d+\.\d{2}$`.
estimate.patientstringThe patient's estimated share.Matches `^-?\d+\.\d{2}$`.
estimate.returned_atstring (date-time)When the estimate arrived.
estimate.linesarray of objectThe estimate per line, where the payer said (line_number is the predetermination's).
estimate.lines[].line_numberintegerAt least 1.
estimate.lines[].allowedstring or nullAn amount in dollars, as a decimal string with two places (such as "113.60").Matches `^-?\d+\.\d{2}$`.
estimate.lines[].paystringAn amount in dollars, as a decimal string with two places (such as "113.60").Matches `^-?\d+\.\d{2}$`.
estimate.lines[].patientstringAn amount in dollars, as a decimal string with two places (such as "113.60").Matches `^-?\d+\.\d{2}$`.
converted_fromstring or nullOn a claim made from a predetermination: the predetermination.
converted_tostring or nullOn a converted predetermination: the claim made from it.
request_idstring or nullThe API request that made the claim (the x-request-id of its response); null for a claim made in the dashboard.
created_atstring (date-time)
updated_atstring (date-time)
subscriberobject
subscriber.first_namestring
subscriber.last_namestring
subscriber.date_of_birthstring (date) or null
subscriber.genderstring or nullOne of: `F`, `M`, `U`.
subscriber.member_idstring
subscriber.group_numbervalue
subscriber.addressobject or null
subscriber.address.line1string
subscriber.address.line2value
subscriber.address.citystring
subscriber.address.statestring
subscriber.address.postal_codestring
patientobject or nullThe patient, when not the subscriber.
patient.first_namestring
patient.last_namestring
patient.date_of_birthstring (date) or null
patient.genderstring or nullOne of: `F`, `M`, `U`.
patient.relationshipstringOne of: `spouse`, `child`, `other`.
patient.addressobject or null
patient.address.line1string
patient.address.line2value
patient.address.citystring
patient.address.statestring
patient.address.postal_codestring
place_of_servicestring
linesarray of object
lines[].line_numberintegerAt least 1.
lines[].cdtstring
lines[].descriptionvalueThe description you sent, or our short description of the code when you sent none and it is a common one.
lines[].service_datestring (date) or nullThe date of service. Null on a predetermination (it has none), and on a claim made from one until you add it.
lines[].feestringThe charge for the whole line, in dollars, as a decimal string (never multiplied by the quantity).Matches `^-?\d+\.\d{2}$`.
lines[].quantityintegerHow many units the line is for: a count sent with the line (SV306).At least -9007199254740991.
lines[].toothvalue
lines[].surfacesvalue
lines[].areavalueThe oral cavity code: a quadrant (10, 20, 30, 40), an arch (01, 02) or 00.
remarksvalue
metadataobject
attachmentsarray of stringThe attachments the claim carries, in the order the claim file writes them (a PWK and a note for each).Each item matches `^att_[0-9A-HJKMNP-TV-Z]{26}$`.
validationobject or nullThe result of the last validation; null while the claim has not been validated.
validation.validated_atstring (date-time)
validation.errorsintegerAt least -9007199254740991.
validation.warningsintegerAt least -9007199254740991.
validation.findingsarray of object
validation.findings[].fieldvalueThe request field the finding is about, as a dotted path (lines[0].tooth), or null for the claim as a whole.
validation.findings[].codestringA stable code for the finding.
validation.findings[].messagestring
validation.findings[].severitystringAn error keeps the claim from being sent; a warning does not.One of: `error`, `warning`.
networkobject
network.submitted_atstring (date-time) or null
network.clearinghouse_claim_idvalue
network.payer_claim_numbervalueThe payer's own number for the claim, once it has accepted it.
network.rejectionobject or null
network.rejection.sourcestringOne of: `clearinghouse`, `payer`.
network.rejection.categoryvalueThe status category code from the 277 (such as A7).
network.rejection.codevalueThe status code from the 277 (such as 33).
network.rejection.messagestringWhy, in plain words.
network.rejection.fixvalueWhat to change, when it is known.
idempotency_keyvalueThe Idempotency-Key the claim was sent with.

Errors

Errors
HTTP statusCodeWhat it means
401UNAUTHORIZEDA valid API key is required. Send it as "Authorization: Bearer <key>".
403PERMISSION_DENIEDThis API key is not allowed to do that.
404NOT_FOUNDNot found.
422INVALID_REQUESTThe request is not valid.
400IDEMPOTENCY_KEY_REQUIREDPOST and PATCH requests need an Idempotency-Key header.
422IDEMPOTENCY_KEY_REUSEDThat Idempotency-Key was already used with a different request.
409IDEMPOTENCY_KEY_IN_USEA request with that Idempotency-Key is still running. Retry shortly.
413PAYLOAD_TOO_LARGEThe request body is larger than 1 MB.
504TIMEOUTThe request took too long to finish. It may still have taken effect: look it up before sending it again with a new Idempotency-Key. What it made is found with GET /api/v1/eligibility?request_id=<this request_id>, and the same filter on /api/v1/claims and /api/v1/attachments (a key with read permission).
503CLAIMS_UNAVAILABLEClaims are not available in live mode yet. Use a test key.
409CONFLICTThe resource is not in a state that allows this, or it changed while the request was handled. Read it, then decide whether to send the request again.
500INTERNALSomething went wrong on our side. Quote the request ID if you contact us.

Example

Example request

Shell
curl -X POST "https://sandbox.myclaimhouse.com/api/v1/claims/clm_01JM000000E00800000000002G/reconcile" \
  -H "Authorization: Bearer $CLAIMHOUSE_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{}'

Example response: 200

JSON
{
  "id": "clm_01JM000000E00800000000002G",
  "object": "claim",
  "kind": "claim",
  "state": "reconciled",
  "next_step": "The payment is posted. Nothing is needed unless the payer changes or reverses it.",
  "frequency": "original",
  "parent_id": null,
  "patient_control_number": "CH4Q7M2K9TRB",
  "office": {
    "id": "off_01JM000000E008000000000003",
    "name": "Example Family Dental"
  },
  "payer": {
    "id": "pyr_01JM000000E008000000000004",
    "payer_id": "00000",
    "name": "Example Dental Plan"
  },
  "rendering_provider": {
    "id": "prv_01JM000000E008000000000005",
    "first_name": "Riley",
    "last_name": "Example",
    "npi": "1999990017"
  },
  "patient_name": {
    "first_name": "Alex",
    "last_name": "Example"
  },
  "service_dates": {
    "first": "2026-09-24",
    "last": "2026-09-24"
  },
  "totals": {
    "charge": "1140.00",
    "lines": 1
  },
  "payment": {
    "outcome": "paid",
    "era_id": "era_01JM000000E00800000000003G",
    "paid": "820.80",
    "allowed": "1026.00",
    "patient_responsibility": "205.20",
    "payment_date": "2026-09-24",
    "reconciled_at": "2026-09-25T09:00:00.000000+00:00"
  },
  "estimate": null,
  "converted_from": null,
  "converted_to": null,
  "patient_id": "pat_01JM000000E00800000000004K",
  "request_id": "req_01JM000000E00800000000002J",
  "created_at": "2026-09-24T21:00:00.120000+00:00",
  "updated_at": "2026-09-24T21:00:00.310000+00:00",
  "subscriber": {
    "first_name": "Alex",
    "last_name": "Example",
    "date_of_birth": "1985-04-12",
    "gender": "F",
    "member_id": "CH-ACTIVE-FULL",
    "group_number": null,
    "address": {
      "line1": "1 Example Street",
      "line2": null,
      "city": "Exampleville",
      "state": "GA",
      "postal_code": "30000"
    }
  },
  "patient": null,
  "place_of_service": "11",
  "lines": [
    {
      "line_number": 1,
      "cdt": "D2740",
      "description": "Porcelain or ceramic crown",
      "service_date": "2026-09-24",
      "fee": "1140.00",
      "quantity": 1,
      "tooth": "3",
      "surfaces": null,
      "area": null
    }
  ],
  "remarks": null,
  "metadata": {
    "pms_claim_number": "PMS-1042"
  },
  "attachments": [
    "att_01JM000000E00800000000003G"
  ],
  "validation": {
    "validated_at": "2026-09-24T21:00:00.300000+00:00",
    "errors": 0,
    "warnings": 0,
    "findings": []
  },
  "network": {
    "submitted_at": "2026-09-24T21:00:30.000000+00:00",
    "clearinghouse_claim_id": "SBXEXAMPLE1042",
    "payer_claim_number": "990000001042",
    "rejection": null
  },
  "idempotency_key": "pms-1042"
}