---
title: "List expected-vs-actual billing mismatches"
method: GET
path: "/admin/billing/mismatches"
tags: ["Billing"]
---

# List expected-vs-actual billing mismatches

`GET /admin/billing/mismatches`

## Request

- Base URL: `https://api.crawlora.net/api/v1`
- URL: `https://api.crawlora.net/api/v1/admin/billing/mismatches`
- Auth: API key in header `x-api-key`

Admin-only endpoint that lists Stripe invoice snapshots with dual-view mismatch data. The default filter is has_mismatch=true and the default time window is the last 30 days.

## Query parameters

- `from` string
- `to` string
- `plan` 'Free' | 'Starter' | 'Growth' | 'Pro' | 'Business' | 'Enterprise' | 'Admin'
- `status` string
- `customer_id` string
- `user_id` string
- `period_key` string
- `invoice_id` string
- `repair_status` 'pending' | 'running' | 'succeeded' | 'failed' | 'skipped'
- `mismatch_flag` string
- `min_repair_attempts` integer
- `needs_manual_review` boolean
- `has_mismatch` boolean
- `limit` integer

## Headers

- `x-api-key` string, required

## Response `200`

Mismatched Stripe invoice snapshots

- BillingStripeInvoiceSnapshotsResponseDoc
  - `code` integer
  - `data` BillingStripeInvoiceSnapshotDoc[]
    - `actual_one_time_cents` integer
    - `actual_overage_cents` integer
    - `actual_proration_cents` integer
    - `actual_subscription_cents` integer
    - `amount_due_cents` integer
    - `amount_paid_cents` integer
    - `amount_remaining_cents` integer
    - `charge_id` string
    - `created_at` string
    - `currency` string
    - `discount_cents` integer
    - `due_date` string
    - `effective_due_date` string
    - `expected_total_cents` integer
    - `finalized_at` string
    - `hosted_invoice_url` string
    - `invoice_payment_ids` string[]
    - `invoice_pdf` string
    - `last_event_created` string
    - `last_event_id` string
    - `line_items` BillingStripeInvoiceLineItemDoc[]
      - `amount_cents` integer
      - `category` string
      - `currency` string
      - `description` string
      - `line_id` string
      - `period_end` string
      - `period_start` string
      - `proration` boolean
      - `source_ref` string
      - `type` string
    - `matched_period_key` string
    - `matched_user_id` string
    - `mismatch_flags` string[]
    - `mismatch_total_cents` integer
    - `net_cash_cents` integer
    - `paid_at` string
    - `payment_intent_id` string
    - `period_end` string
    - `period_start` string
    - `plan` string
    - `post_payment_credit_note_cents` integer
    - `pre_payment_credit_note_cents` integer
    - `reconciliation_status` string
    - `refund_cents` integer
    - `repair_attempts` integer
    - `repair_error` string
    - `repair_last_attempt_at` string
    - `repair_last_success_at` string
    - `repair_status` string
    - `stripe_customer_id` string
    - `stripe_invoice_id` string
    - `stripe_invoice_number` string
    - `stripe_invoice_status` string
    - `subtotal_cents` integer
    - `subtotal_excluding_tax_cents` integer
    - `tax_cents` integer
    - `total_cents` integer
    - `total_excluding_tax_cents` integer
    - `updated_at` string
  - `msg` string

## Other responses

- `400`: Invalid query parameters
- `401`: Authentication required
- `403`: Admin plan required
- `500`: Internal server error

---

[API](https://skmtc.dev/crawlora/apis/crawlora-api.md) · [All operations](https://skmtc.dev/crawlora/apis/crawlora-api/llms.txt) · [OpenAPI document](https://skmtc.dev/crawlora/apis/crawlora-api/revisions/afac9b012a27?raw)
