Invoicing

invoices.qstConfirm

Confirm the reviewed QST setup for this organization with the person's explicit approval of the current invoices.qstReview calculation and facts. Pass its reviewHash and expectedSettingsRevision, the same saved invoice or proposed draft, reviewed facts, and an idempotency key. Changed records or settings require a fresh review. Saves the registration basis for later invoices while continuing to recheck qualifying sales, effective dates, customer status and missing evidence. Confirmation does not register the company with Revenu Québec, cancel registration, or send an invoice. Administrator only.

POST/api/v1/accounting/invoices.qstConfirm

Permissions

accounting:readaccounting:writeaccounting:admin

Who can call it

admin

Retries

Idempotency key required

MCP

accounting_invoices_qst_confirm

Fields

  • idstring (ID)

    The record's ID.

  • draftobject

    No other fields

  • factsobjectRequired

    No other fields

  • clearCustomerGeneralQstboolean

    Default false

  • reviewHashstringRequired

    SHA-256 hash as 64 lowercase hex characters

  • expectedSettingsRevisionintegerRequired

    The related record's current revision, from the last time you read it.

    0 to 9007199254740991

  • idempotencyKeystringRequired

    Any unique text you generate once per intended change, so a retried request only happens once. Send it as the Idempotency-Key header instead if you prefer; if you send both they must match.

    8–200 characters

Example

curl https://app.getoatmilk.com/api/v1/accounting/invoices.qstConfirm \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "facts": {
    "supplierOutsideQuebec": true,
    "carriesOnBusinessInQuebec": true,
    "registration": "unknown",
    "registrationNumber": "example",
    "effectiveDate": "2026-09-30",
    "allSalesRecorded": true,
    "additionalSales": [
      {
        "date": "2026-09-30",
        "amountCadMinor": "1250",
        "description": "Synthetic example from the docs"
      }
    ],
    "expectedAdditionalSalesCadMinor": "1250",
    "expectedSalesAsOf": "example",
    "customerGeneralQstNumber": "example"
  },
  "reviewHash": "9f2b5c1d7e3a4b6c8d0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4c",
  "expectedSettingsRevision": 3,
  "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"
}'
Response
{
  "data": { … }
}

This action checks your data too, so replace the example values with your own before sending it.

Try it

Try it

Checks your input with this action’s real schema and answers like the API, with synthetic data. No key needed, and nothing changes.

POST/api/v1/accounting/invoices.qstConfirm
curl https://app.getoatmilk.com/api/v1/accounting/invoices.qstConfirm \
  -H "Authorization: Bearer $OATMILK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{
  "facts": {
    "supplierOutsideQuebec": true,
    "carriesOnBusinessInQuebec": true,
    "registration": "unknown",
    "registrationNumber": "example",
    "effectiveDate": "2026-09-30",
    "allSalesRecorded": true,
    "additionalSales": [
      {
        "date": "2026-09-30",
        "amountCadMinor": "1250",
        "description": "Synthetic example from the docs"
      }
    ],
    "expectedAdditionalSalesCadMinor": "1250",
    "expectedSalesAsOf": "example",
    "customerGeneralQstNumber": "example"
  },
  "reviewHash": "9f2b5c1d7e3a4b6c8d0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4c",
  "expectedSettingsRevision": 3,
  "id": "9a8b7c6d-5e4f-4a3b-8c2d-1e0f9a8b7c6d"
}'

More in Invoicing.