Skip to the page
Chapters

Claims

Validate a claim

POST/api/v1/claims/validate

Checks a claim body the way creating it would and stores nothing: every finding together, errors (which keep a claim from being sent) and warnings. 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}$`.

Body

Body
NameTypeRequiredDescription
kindstringoptionalclaim (the default): treatment done. predetermination: sent before treatment to ask what the payer would pay; it has no service dates and comes back with an estimate. Set when the claim is made; it never changes.One of: `claim`, `predetermination`.
office_idstringrequiredThe office that bills the claim (off_...).
payer_idstringrequiredThe payer (a Claim House payer ID, pyr_..., a payer ID or an alias from the payer directory).
rendering_provider_idstringrequiredThe dentist who did the treatment (prv_...).
subscriberobjectrequiredThe person who holds the coverage. Also the patient unless patient is given.
subscriber.first_namestringrequired
subscriber.last_namestringrequired
subscriber.date_of_birthvalueoptional
subscriber.genderstring or nulloptionalOne of: `F`, `M`, `U`.
subscriber.member_idstringrequired
subscriber.group_numbervalueoptional
subscriber.addressobject or nulloptional
subscriber.address.line1stringrequired
subscriber.address.line2valueoptional
subscriber.address.citystringrequired
subscriber.address.statestringrequired
subscriber.address.postal_codestringrequired
patientobject or nulloptionalThe patient, when not the subscriber.
patient.first_namestringrequired
patient.last_namestringrequired
patient.date_of_birthvalueoptional
patient.genderstring or nulloptionalOne of: `F`, `M`, `U`.
patient.relationshipstringrequiredOne of: `spouse`, `child`, `other`.
patient.addressobject or nulloptional
patient.address.line1stringrequired
patient.address.line2valueoptional
patient.address.citystringrequired
patient.address.statestringrequired
patient.address.postal_codestringrequired
place_of_servicestringoptionalThe place of service code. Default 11 (office).
linesarray of objectrequiredThe procedures, one line each. At least one for a claim to be sent.At most 100 items.
lines[].cdtstringrequired
lines[].descriptionvalueoptional
lines[].service_datevalueoptional
lines[].feenumberoptional
lines[].quantityintegeroptionalAt least 0.At most 99999.
lines[].toothvalueoptional
lines[].surfacesvalueoptional
lines[].areavalueoptional
totalvalueoptionalThe total the claim comes to, in dollars: checked against the lines.
remarksvalueoptionalNotes for the payer: up to 5 notes of 80 characters, split between words (about 370 characters of ordinary text); a remark that does not fit is a TOO_LONG finding.
metadataobjectoptionalUp to 20 pairs of your own, returned with the claim and never sent to the payer.
patient_control_numbervalueoptionalYour identifier for the claim, sent on the claim and returned on its status: unique in your organization. Made for you when omitted.
attachmentsarray of stringoptionalThe attachments the claim carries (att_...), at most 5: of your organization and mode, for the claim's payer, unsolicited and on no other claim. Each must be closed before the claim is sent (ATTACHMENT_OPEN); the claim file carries a PWK and a note for each.At most 5 items.
submitbooleanoptionaltrue (the default): validate the claim and queue it when it has no errors. false: save it as a draft.

Response

The findings. Status 200.

Response fields
NameTypeDescription
objectstringAlways `claim_validation`.
validbooleanTrue when there is no error: the claim would be queued.
errorsintegerAt least -9007199254740991.
warningsintegerAt least -9007199254740991.
findingsarray of object
findings[].fieldvalueThe request field the finding is about, as a dotted path (lines[0].tooth), or null for the claim as a whole.
findings[].codestringA stable code for the finding.
findings[].messagestring
findings[].severitystringAn error keeps the claim from being sent; a warning does not.One of: `error`, `warning`.

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.
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.
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/validate" \
  -H "Authorization: Bearer $CLAIMHOUSE_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "office_id": "off_01JM000000E008000000000003",
  "payer_id": "pyr_01JM000000E008000000000004",
  "rendering_provider_id": "prv_01JM000000E008000000000005",
  "subscriber": {
    "first_name": "Alex",
    "last_name": "Example",
    "date_of_birth": "1985-04-12",
    "gender": "F",
    "member_id": "CH-ACTIVE-FULL",
    "address": {
      "line1": "1 Example Street",
      "city": "Exampleville",
      "state": "GA",
      "postal_code": "30000"
    }
  },
  "lines": [
    {
      "cdt": "D2740",
      "fee": 1140,
      "service_date": "2026-09-24",
      "tooth": "3"
    }
  ],
  "metadata": {
    "pms_claim_number": "PMS-1042"
  },
  "attachments": [
    "att_01JM000000E00800000000003G"
  ]
}'

Example response: 200

JSON
{
  "object": "claim_validation",
  "valid": true,
  "errors": 0,
  "warnings": 0,
  "findings": []
}