Invoice statuses

Every document in InletAP holds exactly one status, and that status is the honest answer to "what is happening to this invoice". This page is the reference for all thirteen: what each means, what puts a document there, what takes it out, and whether it has been counted against your plan.

The inbox listing every document with vendor, invoice number, due date, amount, property, status and confidence.
Every document, whatever its state. The status column is the same vocabulary used throughout this guide.

Read it when a document has stopped somewhere you did not expect, or before you write a rule that depends on where invoices end up.

The thirteen statuses

StatusWhat it meansEnters whenLeaves toCounts against your allowance
newThe message has been received and the raw mail is stored. Nothing has been read yet.An email arrives at one of your intake addresses.parsed, or straight to needs_review, filtered or quarantined.No
parsedAttachments and body text have been pulled out of the MIME structure.The parser finishes with the message.extracted, held_quota, needs_review, filtered, quarantined.No
held_quotaParsed, ready, and waiting because the plan allowance is spent.The allowance is exhausted at the moment extraction would run.extracted once released, or back to parsed.Not yet — it is counted when it is released and extracted
extractedFields have been read from the document, each with a confidence score.The extraction step completes.needs_review or ready_for_approval.Yes, counted here
needs_reviewA person is needed before this can go further.Confidence below the threshold, an escalation, a rejected approval, or an extraction that failed outright.ready_for_approval, duplicate, filtered, quarantined.Yes, at the latest when a reviewer finishes it
ready_for_approvalCoded and waiting for a decision.Extraction is confident enough, a rule auto-approves, or a reviewer sends it on.approved, back to needs_review on a rejection, or quarantined.Yes
approvedThe approval quorum for its tier has been met.The last required approver signs.exported.Yes
exportedDelivered to your ledger or written into an export file.The export batch succeeds.Nowhere. This is the end of the line.Yes
partially_exportedPart of a split invoice reached your ledger and part did not.A document posting to several QuickBooks companies succeeds in some and is parked in others.exported, once the remaining companies post.Yes
failed_exportThe export was attempted and did not complete.An export batch fails, or the item is parked before posting.Back to approved so it can be retried.Yes
duplicateConfirmed as a copy of a document you already have.Duplicate detection at ingest, or a reviewer confirming a candidate original.needs_review, if the judgment was wrong.Only if it was extracted before being identified
filteredJudged not to be an invoice at all.Triage recognizes a newsletter, an auto-reply, a bounce, a calendar invitation, or a body-only email with nothing financial in it.parsed, by restoring it.No, and this is the point of it
quarantinedA security hold.A rule with a quarantine action matches, or somebody puts it there.needs_review, once a person has looked.Depends on how far it had already traveled

The document is never deleted at any of these stops. The original message, the attachments and the extracted text are all retained, including for the statuses that read like a dead end.

Filtered, quarantined and held: the three that get confused

These three all mean "this is not going any further right now", and they are deliberately kept apart, because conflating them would make all three harder to reason about.

filtered is a routing decision. Something arrived that is not an invoice, and it was diverted before extraction — so it costs nothing, consumes no allowance, and can be put back with one action. Restoring it returns the document to parsed and re-queues it, which is exactly where it would have been had it never been diverted.

The filter errs towards letting things through. A message that carries both invoice wording and an amount is never filtered on a statistical rule, however much its envelope looks like marketing, because a false positive costs you a support ticket and a false negative costs a few cents of processing.

quarantined is an incident. It means a rule you wrote said "hold this one", and the document is waiting for a person with the authority to look at it. It is not a judgment about the file's contents; it is a judgment about the sender, the amount or the wording that you encoded yourself.

held_quota is neither. The document is a perfectly good invoice and the month's allowance is spent, so it stops immediately before the extraction step — the step that costs money. The parsed source text is already stored, so releasing a held document only has to run extraction; nothing is fetched or parsed twice.

partially_exported, and why it is its own status

Most invoices become one bill. An invoice split across ownership entities that keep separate QuickBooks companies becomes one bill per company, and those posts can succeed and fail independently: two bills in, one parked.

Calling that exported would claim money is in your ledger that is not. Calling it failed_export would claim the opposite, and would invite a retry of bills that already posted. So it has its own status, the export screen shows one row per company with its own outcome, and the retry is aimed at the company that failed. See multi-entity QuickBooks.

What counts against your allowance

A processed invoice is one document that InletAP extracted fields from. The counter is stamped on the document exactly once, and never twice, whatever route the document takes afterwards.

There are two places it can be stamped:

  • Extraction. The usual one, and the reason filtered and held_quota cost nothing: both stop before it.
  • A person finishing review on a document the extractor could not read — a photographed handwritten bill, for instance — and sending it for approval. The work has been done and the invoice is real, so it counts.

A document that bounces back through review, gets re-extracted, or is rejected and approved again is still counted once. Re-running the pipeline does not re-bill you.

See plans and limits for what happens when the allowance runs out on each plan.

Which moves are allowed

Statuses do not move freely. The transitions in the table above are the whole set, enforced server-side, and a move that is not on the list is refused rather than quietly performed.

Three of those transitions are worth knowing about because people look for them:

You want toThe move
Undo a filterfiltered to parsed. Restoring is the only move out of filtered, and it re-queues extraction.
Undo a duplicateduplicate to needs_review. The link to the original is kept in the audit trail.
Retry a failed exportfailed_export back to approved, which makes the document eligible for the next batch.
Finish a partial exportpartially_exported to exported, by retrying only the company that was parked. The bills that already posted are left alone.

exported has no outward transitions at all. Once a bill exists in your ledger, the correction belongs in the ledger — InletAP will not pretend the posting never happened, and the audit trail records the external ID it received.

Where to go next