# Create receipts

`POST /receipts`

API version: `v2026.07.00`. Send `X-Moov-Version: v2026.07.00` to get the behavior described here.

> AI agents: search and read all Moov docs with the docs MCP server at https://docs.moov.io/mcp (no API key). Setup: https://docs.moov.io/guides/developer-tools/mcp-ai/docs-mcp/index.md

Create receipts for transfers and scheduled transfers.

 To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/) 
 you'll need to specify the `/accounts/{accountID}/transfers.write` scope.

## Parameters

| Name | In | Type | Required | Description |
| --- | --- | --- | --- | --- |
| `X-Moov-Version` | header | string |  | Set this header to v2026.07.00 to use the API described in this specification. When omitted, the server defaults to v2024.01.00, the earliest supported version, which may not match the behavior documented here. An unrecognized well-formed version uses the latest supported version that is not newer than the requested version, when one exists. For example, `v2026.08.00` uses `v2026.07.00`. A malformed value, such as `2022`, returns a `404` response. Values: `v2026.07.00`. |

## Request body

Content type: `application/json`

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `[].kind` | string | Yes | The type of receipt being requested. Values: `sale.customer.v1`. |
| `[].email` | string (email) |  | The email address to send the receipt to. Either email or emailAccountID must be provided, but not both. |
| `[].emailAccountID` | string |  | The accountID to send the receipt to. Either email or emailAccountID must be provided, but not both. |
| `[].forTransferID` | string |  | The ID of the transfer associated with this receipt. Exactly one of forTransferID, forScheduleID, or forOccurrenceID must be provided. |
| `[].forScheduleID` | string |  | The ID of the schedule associated with this receipt. Exactly one of forTransferID, forScheduleID, or forOccurrenceID must be provided. |
| `[].forOccurrenceID` | string |  | The ID of the schedule occurrence associated with this receipt. Exactly one of forTransferID, forScheduleID, or forOccurrenceID must be provided. |

## Response 201

The resource was successfully created.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `[].receiptID` | string | Yes | Unique identifier for the receipt request. |
| `[].createdBy` | string | Yes | AccountID for which the receipt request was created. |
| `[].disabledOn` | string (date-time) |  | The date and time the receipt was disabled. |
| `[].kind` | string | Yes | The type of receipt. Values: `sale.customer.v1`. |
| `[].email` | string (email) |  | The email address the receipt is sent to. Either email or emailAccountID will be in the response, but not both. |
| `[].emailAccountID` | string |  | The accountID the receipt is sent to. Either email or emailAccountID will be in the response, but not both. |
| `[].forTransferID` | string |  | The ID of the transfer associated with this receipt. Exactly one of forTransferID, forScheduleID, or forOccurrenceID must be provided. |
| `[].forScheduleID` | string |  | The ID of the schedule associated with this receipt. Exactly one of forTransferID, forScheduleID, or forOccurrenceID must be provided. |
| `[].forOccurrenceID` | string |  | The ID of the schedule occurrence associated with this receipt. Exactly one of forTransferID, forScheduleID, or forOccurrenceID must be provided. |
| `[].sentFor` | array of object |  | The list of receipts that have been sent. |
| `[].sentFor[].receiptID` | string | Yes | Unique identifier for the receipt. |
| `[].sentFor[].idempotencyKey` | string | Yes | The idempotency key used when creating the receipt. |
| `[].sentFor[].sentOn` | string (date-time) | Yes | When the receipt was sent. |

## Errors

| Status | Meaning |
| --- | --- |
| 400 | The server could not understand the request due to invalid syntax. |
| 401 | The request contained missing or expired authentication. |
| 403 | The user is not authorized to make the request. |
| 404 | The requested resource was not found. |
| 409 | The request conflicted with the current state of the target resource. |
| 422 | The request was well-formed, but the contents failed validation. Check the request for missing or invalid fields. |
| 429 | Request was refused due to rate limiting. |
| 500 | The request failed due to an unexpected error. |
| 504 | The request failed because a downstream service failed to respond. |

## Examples

### cURL

```bash
curl -X POST "https://api.moov.io/receipts" \
  -H "Authorization: Bearer {token}" \
  -H "X-Moov-Version: v2026.07.00" \
  -d '[
  {
    "kind": "sale.customer.v1"
  }
]'
```

### Typescript (SDK)

```typescript
import { Moov } from "@moovio/sdk";

const moov = new Moov({
  security: {
    username: "",
    password: "",
  },
});

async function run() {
  const result = await moov.receipts.create([]);

  console.log(result);
}

run();
```

Full reference with SDK examples in every language: https://docs.moov.io/api/money-movement/receipts/create/
