---
title: "Send a receipt for a periodic statement"
method: POST
path: "/internal-accounts/{id}/confirm-statement"
tags: ["Periodic Statements"]
---

# Send a receipt for a periodic statement

`POST /internal-accounts/{id}/confirm-statement`

## Request

- Base URL: `https://api.lightspark.com/grid/2025-10-13`
- URL: `https://api.lightspark.com/grid/2025-10-13/internal-accounts/{id}/confirm-statement`
- Auth: HTTP basic

Record your monthly receipt that you pulled and issued this account's periodic statement for a period. Grid stores it as the delivery record for that account and period.

Send it once a month for each account, after you have issued the statement built from `GET /internal-accounts/{id}/balance-changes`. Send it within five days of the month's end for every customer account: Grid checks then that every account's statement was issued.

`statementMonth` names the statement month as `YYYY-MM`, a calendar month in US Central time. It must be a month that has already begun.

Sending a receipt is idempotent. The stored time is the first receipt's, so calling this again does not move it.

## Request body

- ConfirmStatementDeliveryRequest
  - `statementMonth` string, required: The statement month the receipt covers, as `YYYY-MM`. A statement month is a calendar month in US Central time, and it must have already begun.
  - `statementDeliveredAt` string, date-time, required: When you issued the statement to the customer. Must include a timezone offset, must not be in the future, and must be at or after the end of the period.

## Response `200`

Receipt recorded

- StatementDelivery
  - `internalAccountId` string, required: The account whose statement this is
  - `statementMonth` string, required: The statement month, as `YYYY-MM`
  - `fetchedAt` string, date-time: When the statement for this period was first read from Grid. Absent if it never has been
  - `statementDeliveredAt` string, date-time, required: When the statement was issued, from the first receipt for this period. Later receipts do not move it.

## Other responses

- `400`: Bad request. Returned when `statementMonth` is not a `YYYY-MM` month or names a month that has not begun, when `statementDeliveredAt` is missing, in the future or before the period has ended, or when the account has no statement of its own.
- `401`: Unauthorized
- `404`: Internal account not found
- `409`: The period is not final yet. Card settlement for the month has not closed, so its statement could still change and cannot have been issued. Send the receipt once `GET /internal-accounts/{id}/balance-changes` serves the month.
- `500`: Internal service error

## Changes

> 115 revisions in range; 2 not diffed.

- **2026-10-28** `d996ddfb9d2b`: 2 info
  - added the optional property `details/missingFields` to the response with the `400` status
  - added the optional property `details/refusalReason` to the response with the `400` status
- **2026-10-26** `f11f1e76bdd7`: 1 warning
  - added the new `PURCHASE_CARD_LIMIT_REACHED` enum value to the `code` response property for the response status `409`
- **2026-10-26** `0a6dad5815c7`: 1 warning
  - added the new `INVOICE_ALREADY_USED` enum value to the `code` response property for the response status `409`
- **2026-10-24** `715332dcb111`: 1 warning
  - added the new `EXACT_AMOUNT_UNAVAILABLE` enum value to the `code` response property for the response status `400`
- **2026-10-20** `761d1d030cb5`: 2 warning
  - added the new `AGENT_CARD_EXISTS` enum value to the `code` response property for the response status `409`
  - added the new `CARDHOLDER_AGREEMENT_NOT_ACCEPTED` enum value to the `code` response property for the response status `400`

[Operation history](https://skmtc.dev/lightsparkdev/apis/grid-api/changes/internal-accounts/:id/confirm-statement/post.md)

---

[API](https://skmtc.dev/lightsparkdev/apis/grid-api.md) - [All operations](https://skmtc.dev/lightsparkdev/apis/grid-api/llms.txt) - [OpenAPI document](https://skmtc.dev/lightsparkdev/apis/grid-api/revisions/7a1db46ec552?raw)
