Skip to the page
Chapters

Reports

Get a report

GET/api/v1/reports/summary

Where money and time went in a period, for the key's organization in the key's mode: billed, paid, first-pass acceptance, median days to pay and the claims unpaid over 30 days; days to payment by payer, rejections by reason, acceptance by office and adjustments by reason. The same figures as the Reports screen and its CSV, each the count or sum the claims and ERAs lists give for the same filter. Periods are calendar days in America/Denver; the answer gives the period's bounds. Every figure is computed from the transaction ledger when you ask for it, for the current mode only (test and live are never mixed). Predeterminations are never counted. No patient data.

Needs a key with read permission.

Request

Query parameters

Query parameters
NameTypeRequiredDescription
periodstringoptionalThe period: last_90_days (the default, today included), this_month or this_year, in the billing time zone.One of: `last_90_days`, `this_month`, `this_year`.

Response

The period's figures. Status 200.

Response fields
NameTypeDescription
objectstringAlways `report_summary`.
periodstringOne of: `last_90_days`, `this_month`, `this_year`.
modestringOne of: `test`, `live`.
time_zonestringThe time zone the period's days are counted in.
fromstring (date-time)The period starts at this instant (included).
tostring (date-time)The period ends at this instant (not included).
first_daystring (date)
last_daystring (date)
billedobjectBilled is the charges of the claims first sent to the payer in the period (handed to the network), and how many there are. A claim corrected and resubmitted, or sent again as a replacement, is the same claim: it is counted once, in the period it was first sent. A void transaction is never a claim.
billed.amountstringMatches `^-?\d+\.\d{2}$`.
billed.claimsintegerAt least -9007199254740991.
paidobjectPaid is what payers have paid so far on those claims (each claim's current payment, after any reversal or correction), and its share of billed.
paid.amountstringMatches `^-?\d+\.\d{2}$`.
paid.percent_of_billedstring or nullA percentage with one decimal place ("96.4"); null when there was nothing to count.Matches `^\d+\.\d$`.
first_pass_acceptanceobjectFirst-pass acceptance is, of those claims the payer has answered (ever rejected, or accepted, paid, posted or denied as they stand now), the share it accepted without a rejection ever being recorded on them. A rejected claim corrected and sent again still counts as answered, and not first-pass. Claims still on their way the first time and voided claims are not counted.
first_pass_acceptance.percentstring or nullA percentage with one decimal place ("96.4"); null when there was nothing to count.Matches `^\d+\.\d$`.
first_pass_acceptance.acceptedintegerAt least -9007199254740991.
first_pass_acceptance.answeredintegerAt least -9007199254740991.
median_days_to_payobjectMedian days to pay is the median number of calendar days (in Mountain time) from a claim's first sending to its first payment, over those claims that have been paid. With an even number of claims it is the mean of the two middle ones.
median_days_to_pay.daysvalue
median_days_to_pay.paymentsintegerAt least -9007199254740991.
unpaid_over_30_daysobjectUnpaid over 30 days is the claims the payer accepted more than 30 days ago that no payment has reached since, whatever the period: the Claims list's Accepted claims unpaid for 30 days, and their charges.
unpaid_over_30_days.amountstringMatches `^-?\d+\.\d{2}$`.
unpaid_over_30_days.claimsintegerAt least -9007199254740991.
days_to_pay_by_payerarray of objectDays to payment by payer is the same median for each payer, for the 10 payers with the most paid claims, fastest first.
days_to_pay_by_payer[].payer_idstringAn ID that starts with pyr_.
days_to_pay_by_payer[].namestring
days_to_pay_by_payer[].median_daysnumber
days_to_pay_by_payer[].paymentsintegerAt least -9007199254740991.
rejections_by_reasonobjectRejections by reason counts every rejection recorded on those claims (a claim rejected, corrected and rejected again counts twice), by the status category and code it came with, the 10 most frequent.
rejections_by_reason.totalintegerEvery rejection recorded on the claims first sent in the period.At least -9007199254740991.
rejections_by_reason.claims_sentintegerThe claims first sent in the period.At least -9007199254740991.
rejections_by_reason.reasonsarray of object
rejections_by_reason.reasons[].sourcevalue
rejections_by_reason.reasons[].categoryvalue
rejections_by_reason.reasons[].codevalue
rejections_by_reason.reasons[].descriptionstring
rejections_by_reason.reasons[].rejectionsintegerAt least -9007199254740991.
acceptance_by_officearray of objectAcceptance by office is the first-pass acceptance of each office of the organization; a dash where none of its claims has been answered.
acceptance_by_office[].office_idstringAn ID that starts with off_.
acceptance_by_office[].namestring
acceptance_by_office[].percentstring or nullA percentage with one decimal place ("96.4"); null when there was nothing to count.Matches `^\d+\.\d$`.
acceptance_by_office[].acceptedintegerAt least -9007199254740991.
acceptance_by_office[].answeredintegerAt least -9007199254740991.
adjustments_by_reasonarray of objectAdjustments by reason adds up the claim and line adjustments of the ERAs received in the period, by group and reason code, the 10 largest. A predetermination's pricing is not an adjustment.
adjustments_by_reason[].groupstring
adjustments_by_reason[].reasonstring
adjustments_by_reason[].codestring
adjustments_by_reason[].descriptionstring
adjustments_by_reason[].amountstringMatches `^-?\d+\.\d{2}$`.
adjustments_by_reason[].adjustmentsintegerAt least -9007199254740991.

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.
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).
500INTERNALSomething went wrong on our side. Quote the request ID if you contact us.

Example

Example request

Shell
curl "https://sandbox.myclaimhouse.com/api/v1/reports/summary?period=last_90_days" \
  -H "Authorization: Bearer $CLAIMHOUSE_KEY"

Example response: 200

JSON
{
  "object": "report_summary",
  "period": "last_90_days",
  "mode": "live",
  "time_zone": "America/Denver",
  "from": "2026-07-05T06:00:00.000Z",
  "to": "2026-10-03T06:00:00.000Z",
  "first_day": "2026-07-05",
  "last_day": "2026-10-02",
  "billed": {
    "amount": "68400.00",
    "claims": 60
  },
  "paid": {
    "amount": "42858.50",
    "percent_of_billed": "62.7"
  },
  "first_pass_acceptance": {
    "percent": "94.6",
    "accepted": 53,
    "answered": 56
  },
  "median_days_to_pay": {
    "days": 14,
    "payments": 52
  },
  "unpaid_over_30_days": {
    "amount": "2280.00",
    "claims": 2
  },
  "days_to_pay_by_payer": [
    {
      "payer_id": "pyr_01JM000000E008000000000004",
      "name": "Example Dental Plan",
      "median_days": 14,
      "payments": 52
    }
  ],
  "rejections_by_reason": {
    "total": 3,
    "claims_sent": 60,
    "reasons": [
      {
        "source": "payer",
        "category": "A7",
        "code": "33",
        "description": "Rejected because information is not valid (A7:33)",
        "rejections": 3
      }
    ]
  },
  "acceptance_by_office": [
    {
      "office_id": "off_01JM000000E008000000000003",
      "name": "Example Dental, Main Street",
      "percent": "95.6",
      "accepted": 43,
      "answered": 45
    },
    {
      "office_id": "off_01JM000000E00800000000004G",
      "name": "Example Dental, Riverside",
      "percent": "90.9",
      "accepted": 10,
      "answered": 11
    }
  ],
  "adjustments_by_reason": [
    {
      "group": "CO",
      "reason": "45",
      "code": "CO-45",
      "description": "The charge is more than the payer fee schedule allows",
      "amount": "9120.00",
      "adjustments": 52
    },
    {
      "group": "PR",
      "reason": "2",
      "code": "PR-2",
      "description": "The patient coinsurance share",
      "amount": "4865.00",
      "adjustments": 37
    },
    {
      "group": "CO",
      "reason": "119",
      "code": "CO-119",
      "description": "The benefit maximum for the period has been reached",
      "amount": "1140.00",
      "adjustments": 1
    }
  ]
}