# Parser > Verified bank-statement ledgers, applications, MCA positions and underwriting math from a merchant's documents. - [Introduction](https://docs.parser-app.com/index.md): Send a merchant's documents, get back verified bank-statement ledgers, the application, MCA positions and underwriting math. - [Quickstart](https://docs.parser-app.com/quickstart.md): Submit a packet, wait for it, and read the result. - [Authentication](https://docs.parser-app.com/authentication.md): API keys for systems, AuthKit sign-in for people, permissions, errors and rate limits. - [How a packet is read](https://docs.parser-app.com/concepts/how-a-packet-is-read.md): From the files you send to verified ledgers, positions and underwriting, and when a person is asked to look. - [Jobs](https://docs.parser-app.com/concepts/jobs.md): Every packet is a job: statuses, waiting, idempotency, options, limits and erasure. - [The submission packet](https://docs.parser-app.com/concepts/submission-packet.md): What result.submission_packet says about the submission as a whole. - [Webhooks](https://docs.parser-app.com/guides/webhooks.md): Get every finished job pushed to your system, signed, retried until you take it. - [Deals from email](https://docs.parser-app.com/guides/email-intake.md): Forward a deals inbox, or connect Gmail, Microsoft 365 or IMAP. Each deal thread becomes one job. - [Integrations](https://docs.parser-app.com/guides/integrations.md): Push each job to your CRM, or alert a Slack channel when a job needs review. - [Usage and quality](https://docs.parser-app.com/guides/usage.md): What you used, what it cost, and how well each bank's statements are read. - [API reference](https://docs.parser-app.com/api-reference/introduction.md): Base URL, authentication, errors and conventions for every endpoint. - [Parse a merchant packet (PDF / PNG / JPEG files)](https://docs.parser-app.com/api-reference/parse/parse-a-merchant-packet-pdf-png-jpeg-files.md): Upload one merchant's packet: one or more files (bank statements, ISO/merchant application, other documents). The packet is one submission: the result's `submission_packet` lists its typed documents, which ones the decision rests on and why the others are excluded, the merchant's details with their… - [Withhold, EBITDA and capacity math over supplied months and positions](https://docs.parser-app.com/api-reference/underwriting/withhold-ebitda-and-capacity-math-over-supplied-months-and-positions.md): Recompute the underwriting block without re-parsing: e.g. after an underwriter excludes a month or edits the MCA table. Months marked `excluded` are dropped. Existing MCA monthly burden converts daily x21, weekly x4 and biweekly x2; offers use x21 / x4.2 / x2.1. - [This tenant's jobs, newest first](https://docs.parser-app.com/api-reference/jobs/this-tenants-jobs-newest-first.md): Id, status, source, timestamps and error; fetch a job for its result. Filter by `status`, `source` and `since` (ISO 8601); page with `cursor` (the previous page's `next_cursor`). - [Job status and, when finished, its result](https://docs.parser-app.com/api-reference/jobs/job-status-and-when-finished-its-result.md): `queued` -> `running` -> `completed` | `review_required` | `failed`. `result` is set once the job finishes (`error` on `failed`). `wait` holds the request until the job finishes or the seconds pass (at most `MAX_WAIT_SECONDS`). The webhook events point here (`payload.result_path`). - [Erase a finished job and everything derived from it](https://docs.parser-app.com/api-reference/jobs/erase-a-finished-job-and-everything-derived-from-it.md): Erases the job's request and result, its input files, the cached reads, page atoms and index entries of its documents, the Luna answers it paid for, its metering, email thread entries and webhook events, now. Audited. This is how a merchant's deletion request is honoured: erase each of its jobs. - [This tenant's webhook endpoints](https://docs.parser-app.com/api-reference/webhooks/this-tenants-webhook-endpoints.md): Every registered endpoint, without its secret. - [Register an endpoint for job events](https://docs.parser-app.com/api-reference/webhooks/register-an-endpoint-for-job-events.md): The endpoint receives `job.completed`, `job.review_required` and `job.failed` (or the listed `topics`) for this tenant's jobs. The signing `secret` is returned once. Each event is a POST of `{id, tenant_id, topic, resource_type, resource_id, created_at, payload}` with `X-Parser-Event-Id` (stable acr… - [Remove an endpoint; its pending deliveries stop](https://docs.parser-app.com/api-reference/webhooks/remove-an-endpoint;-its-pending-deliveries-stop.md): Pending deliveries to it are cancelled; delivered ones stay in its history until purged. - [Replace the signing secret](https://docs.parser-app.com/api-reference/webhooks/replace-the-signing-secret.md): Returns the new secret, shown only now. Every delivery from now on, retries included, is signed with it. - [Send a signed ping to this endpoint](https://docs.parser-app.com/api-reference/webhooks/send-a-signed-ping-to-this-endpoint.md): Queues a `ping` event for this endpoint only, delivered and retried like a job event; check its outcome under deliveries. - [Recent delivery attempts to this endpoint](https://docs.parser-app.com/api-reference/webhooks/recent-delivery-attempts-to-this-endpoint.md): Newest first: each event's status (`pending`, `delivered`, `dead`, `cancelled`), attempts, the receiver's last status code or error and the next retry. - [Ingest one raw email (RFC 822 / MIME); its attachments become one parse job](https://docs.parser-app.com/api-reference/email/ingest-one-raw-email-rfc-822-mime;-its-attachments-become-one-parse-job.md): Send the raw message as the request body (`Content-Type: message/rfc822`). Authenticate with an API key or token holding `jobs:write`, or as a mail provider's signed webhook for one mailbox: `X-Timestamp`, `X-Mailbox-ID`, `X-Provider-Message-ID` and `X-Signature` = hex HMAC-SHA256 of `timestamp\nmai… - [This tenant's mailboxes](https://docs.parser-app.com/api-reference/mailboxes/this-tenants-mailboxes.md) - [Connect a mailbox](https://docs.parser-app.com/api-reference/mailboxes/connect-a-mailbox.md): `{kind: "forwarding"}`: a new address `@INBOUND_MAIL_DOMAIN` to forward deals to (a Gmail filter, an Outlook rule), and an inbound secret for providers that post mail themselves. `{kind: "gmail", auth: "delegation", address}`: a mailbox in a Workspace domain that authorized the platform's ser… - [A mailbox](https://docs.parser-app.com/api-reference/mailboxes/a-mailbox.md) - [Change a mailbox's label, settings, or pause it](https://docs.parser-app.com/api-reference/mailboxes/change-a-mailboxs-label-settings-or-pause-it.md) - [Disconnect a mailbox: stop its watch, destroy its credentials](https://docs.parser-app.com/api-reference/mailboxes/disconnect-a-mailbox:-stop-its-watch-destroy-its-credentials.md) - [What became of each message: job, merged, ignored:, refused](https://docs.parser-app.com/api-reference/mailboxes/what-became-of-each-message:-job-merged-ignored:-refused.md) - [Gmail's forwarding confirmation code and link, once it arrived](https://docs.parser-app.com/api-reference/mailboxes/gmails-forwarding-confirmation-code-and-link-once-it-arrived.md) - [Give a forwarding mailbox a new address; mail to the old one bounces from now on](https://docs.parser-app.com/api-reference/mailboxes/give-a-forwarding-mailbox-a-new-address;-mail-to-the-old-one-bounces-from-now-on.md): For an address that leaked (spam, a mailing list). The mailbox keeps its settings and messages. Point the Gmail filter or Outlook rule at the new `address`; Gmail mails the new address a confirmation first (`GET /v1/mailboxes/{id}/verification`). - [Check a Gmail mailbox: token, label, watch](https://docs.parser-app.com/api-reference/mailboxes/check-a-gmail-mailbox:-token-label-watch.md) - [Read a Gmail mailbox's messages again since a time (at most 7 days back)](https://docs.parser-app.com/api-reference/mailboxes/read-a-gmail-mailboxs-messages-again-since-a-time-at-most-7-days-back.md) - [Integration types: config JSON Schema, events, the module each needs](https://docs.parser-app.com/api-reference/integrations/integration-types:-config-json-schema-events-the-module-each-needs.md) - [This tenant's installed integrations](https://docs.parser-app.com/api-reference/integrations/this-tenants-installed-integrations.md) - [Install an integration](https://docs.parser-app.com/api-reference/integrations/install-an-integration.md): `config` is validated against the type's schema (the catalog); `secrets` are sealed and never returned. The type's module must be on for the tenant. - [An installed integration (never its secrets)](https://docs.parser-app.com/api-reference/integrations/an-installed-integration-never-its-secrets.md) - [Rename, reconfigure, replace secrets, pause or resume](https://docs.parser-app.com/api-reference/integrations/rename-reconfigure-replace-secrets-pause-or-resume.md) - [Uninstall: its pending runs are cancelled, its secrets destroyed](https://docs.parser-app.com/api-reference/integrations/uninstall:-its-pending-runs-are-cancelled-its-secrets-destroyed.md) - [A new authorize_url for an OAuth integration (to reconnect it)](https://docs.parser-app.com/api-reference/integrations/a-new-authorize_url-for-an-oauth-integration-to-reconnect-it.md) - [Call the integration once (a ping), recorded as a test run](https://docs.parser-app.com/api-reference/integrations/call-the-integration-once-a-ping-recorded-as-a-test-run.md) - [Recent deliveries and tests of this integration, newest first](https://docs.parser-app.com/api-reference/integrations/recent-deliveries-and-tests-of-this-integration-newest-first.md) - [Who is calling: tenant, permissions and enabled modules](https://docs.parser-app.com/api-reference/identity/who-is-calling:-tenant-permissions-and-enabled-modules.md) - [This tenant's modules, on or off](https://docs.parser-app.com/api-reference/identity/this-tenants-modules-on-or-off.md) - [This tenant's API keys (never their secrets)](https://docs.parser-app.com/api-reference/api-keys/this-tenants-api-keys-never-their-secrets.md) - [Create an API key; the key is returned only now](https://docs.parser-app.com/api-reference/api-keys/create-an-api-key;-the-key-is-returned-only-now.md): `scopes` default to `jobs:write jobs:read underwriting:write` (a CRM's key). A key cannot hold a permission its creator lacks. - [Replace a key: same name and scopes, a new secret](https://docs.parser-app.com/api-reference/api-keys/replace-a-key:-same-name-and-scopes-a-new-secret.md): The old key is revoked now, or stays valid for `overlap_seconds` (at most 7 days) so callers can switch. - [Revoke a key at once](https://docs.parser-app.com/api-reference/api-keys/revoke-a-key-at-once.md) - [This tenant's settings](https://docs.parser-app.com/api-reference/tenant/this-tenants-settings.md) - [Change retention or email routing](https://docs.parser-app.com/api-reference/tenant/change-retention-or-email-routing.md): `retention_days` (null: keep everything) and `email_routing`. Job, spend and budget limits and the Luna route are set by the platform: sending them is refused (403). - [Every change made in this tenant, newest first](https://docs.parser-app.com/api-reference/audit/every-change-made-in-this-tenant-newest-first.md) - [This tenant's metered usage, by day and kind](https://docs.parser-app.com/api-reference/usage/this-tenants-metered-usage-by-day-and-kind.md): Daily totals (UTC) of the usage events: jobs submitted and finished by status, documents parsed, pages read (text or image), Luna tokens and cost, emails received, ignored, merged and routed, webhook deliveries and stored bytes. Totals are rolled up every 5 minutes. `group_by`: `day`, `kind` or both… - [Measured Luna token usage and cost, by day, task and model](https://docs.parser-app.com/api-reference/usage/measured-luna-token-usage-and-cost-by-day-task-and-model.md): Calls, paid and replayed calls, prompt / cached / completion / reasoning tokens and provider-reported cost over the last `days`, grouped by day, task and model; `job_id` narrows it to one job. - [This tenant's reading quality, by bank](https://docs.parser-app.com/api-reference/usage/this-tenants-reading-quality-by-bank.md): Per institution: statements read, how many passed the gate, image reads, scans refused as unreadable, Luna labelling and second-read verification; the frequent review reasons; position evidence; how often a confident not-a-deal verdict was overruled by its deal thread; Luna cost per verified stateme… - [Liveness](https://docs.parser-app.com/api-reference/health/liveness.md): 200 while the process serves requests. No key. - [Readiness: database open, Luna configured](https://docs.parser-app.com/api-reference/health/readiness:-database-open-luna-configured.md): 200 when the job store answers and an OpenRouter key is configured, else 503 with which one is missing. No key. ## OpenAPI Specs - [openapi](/openapi.json) This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.