The correction object

A bundle of changes to a company's pay history and their effects on taxes.

A Correction groups any number of void payrolls and external payrolls into a single unit that is previewed, approved, and fulfilled together. Grouping changes onto one correction lets Check offset the resulting tax liabilities against each other — for example, taxes refunded by a void can offset taxes owed on its replacement payroll — so amounts are not double-collected.

{
  "id": "cor_Bw6EkMDmxCPeVQ2eYzLu",
  "description": "Void and replace 3/31 payroll for J. Smith",
  "company": "com_sx3svU6K8c5ZkSFlOh5p",
  "year": 2026,
  "created_at": "2026-06-24T18:26:56.848920Z",
  "status": "draft",
  "preview": {
    "status": "succeeded",
    "started_at": "2026-06-29T18:26:56.848920Z",
    "messages": null
  },
  "approval": null,
  "reopen_deadline": null,
  "simulation_mode": "automatic",
  "settlement_date": "2026-07-15",
  "bank_account": "bnk_iPiAA7RDadr3gGMa2cvq",
  "totals": {
    "cash_requirement": "150.00",
    "cash_requirement_waived": "0.00",
    "agency_refundable": "25.00"
  },
  "operations": [
    {
      "operation": "void_payroll",
      "creates": "pay_Mt7cJqXcVfW2yPKhBvsN",
      "corrects": "pay_OriginalVoidedPayroll"
    },
    {
      "operation": "add_payroll",
      "creates": "pay_Vg3RvNwqLpTz8oYaGdQE",
      "corrects": null
    },
    {
      "operation": "balance_quarter",
      "creates": "pay_Jd9nWuBqOxSz5eKmCvhT",
      "corrects": "pay_OriginalBalancingPayroll"
    }
  ],
  "metadata": {}
}
AttributeDescription
id
string
Unique identifier for the correction.
description
string
A human-readable description of the correction, set by you.
company
string
ID of the company whose pay history is being corrected.
year
integer
The tax year the correction applies to, set at creation. All payrolls on a correction must belong to this tax year.
created_at
timestamp
Time at which the correction was created.
status
string
One of draft, pending, processing, settled, or failed. A correction is editable only while in draft. Approving a correction moves it to pending; its money movement is scheduled for settlement_date and the correction can be reopened while pending and before reopen_deadline. Once fulfillment begins processing, the correction moves to processing and can no longer be reopened. It moves to settled once fulfillment has been processed and the correction is reflected in the company's pay history. A correction moves to failed if its fulfillment cannot be processed.
preview
object or null
Status of the most recent preview. Contains status (calculating, succeeded, or failed), started_at, and messages. When status is failed, messages is an array of calculation message objects (same shape as payroll preview messages) with severity, code, message, and optional additional_context; otherwise messages is null. The preview is invalidated whenever payrolls are added to or removed from the correction.
approval
object or null
Status of the most recent approval. Contains status (calculating, succeeded, or failed), started_at, and error_code (a partner-facing failure code when status is failed, otherwise null). null until an approval is requested. When status is failed, the correction remains in draft and error_code is one of:

fulfillment_changed — the money movement changed since the last preview. totals is refreshed to the new amounts.
balancing_changed — the balancing payrolls for an impacted closed quarter changed since the last preview. The refreshed balancing payrolls are on the correction. Reported instead of fulfillment_changed when both changed.
payroll_item_already_voided — another correction's void of the same payroll item was approved first.
approval_failed — the approval failed for any other reason.
reopen_deadline
timestamp or null
The last moment the correction can be reopened while in pending. null while in draft (before a successful preview, after preview invalidation, or after reopening). Set when a preview succeeds and is refreshed when approval completes. It is set to 11:00 AM Eastern on the banking day before the settlement_date (or, when settlement_date is not set, the date Check would settle on), or on the banking day before the send date of a tax remittance that funds a refund while Check still holds the money, whichever is earlier. It is recalculated when settlement_date changes.
settlement_date
string or null
The CFT settlement date for the correction's money movement. null until set at creation or updated on a draft. Must be a banking day between the earliest date ACH can reach and 7 days from today. Any other date returns settlement_date_invalid, and approval checks the date again. Required before approval if the correction will debit or refund the employer. If no money moves, it can be left out and a date is set at approval.
bank_account
string or null
ID of the bank account that will be debited or credited when the correction's money movement is fulfilled. Stamped when the correction is created or when bank_account is updated on a draft; null only when the company had no default bank account to stamp.
simulation_mode
string or null
Sandbox-only. How the correction moves through money movement after approval. One of automatic or manual. null in production. When manual, use the correction simulate endpoints to step funding, the same way payroll simulate endpoints step a payroll. Corrections with nothing to settle go straight to settled at approval in either mode.
totals
object or null
Money-movement totals for the correction, using the same shape as fulfillment totals. null until a preview has priced the draft; after approval, these are the settled numbers.
operations
array
What the correction does, one entry per member payroll. Each entry contains operation (void_payroll, add_payroll, or balance_quarter), creates (the payroll ID the operation produced), and corrects (the payroll ID the operation acts on, or null when there is no original to offset). Empty on a newly created draft.
metadata
object
Arbitrary key-value data you can attach to the correction.