---
title: "Create a collection instruction"
method: POST
path: "/api/collection-instructions/"
tags: ["Collection Instructions (Brazil)"]
---

# Create a collection instruction

`POST /api/collection-instructions/`

## Request

- Base URL: `https://sandbox.belvo.com`
- URL: `https://sandbox.belvo.com/api/collection-instructions/`
- Auth: HTTP basic
- TypeScript: <https://skmtc.dev/belvo/apis/belvo-api-docs/docs/api/collection-instructions/post.ts> (a function with typed inputs; its response is checked against the schema)

Create a collection instruction for a user's Link. While an item's collection window is open, Belvo checks the balances of the user's accounts several times a day. When one account has at least the item's `amount` plus BRL 0.01, Belvo sets the item to `CHARGE_SETTLED` and sends you the `item_ready_to_charge` webhook. You then create the Charge yourself, using Payments (Brazil). For every item status and the webhook payload, see the <a href="https://developers.belvo.com/products/smart_collections_brazil/smart-collections-statuses-and-webhooks" target="_blank">Smart Collections statuses and webhooks</a> article.

Before you send the request, check that:

  - The `link_id` is an active, confirmed Link of your organization, with exactly one data consent.
  - Every item has at least one collection window that ends in the future. If one item doesn't, Belvo rejects the whole request.
  - Each policy `amount` is the same as its item's `amount`. Belvo doesn't use the policy `amount` yet.

This request is not idempotent, and `external_id` is not checked for uniqueness. If you retry after a timeout, first list your collection instructions to check whether the first request created one.

**Errors:** Belvo returns a `400` error only for problems with `link_id` or a body that is not valid JSON. Any other problem returns a `500` error, including a body that doesn't match the schema, an item with no window that ends in the future, a Link that doesn't have exactly one data consent, and a failure to read the Link's accounts.

## Request body

- CollectionInstructionRequest: The request body to create a collection instruction, with the Link to monitor and one or more items to collect.
  - `link_id` string, uuid, required: The `link.id` of the user's Open Finance Data Aggregation Link. Belvo reads the balances of the accounts shared through this Link. The Link must belong to your organization, be active, and be confirmed. It must also have exactly one data consent.
  - `items` CollectionItemRequest[], required: The amounts you want to collect. Belvo monitors each item separately and sends a separate webhook for each one.
    - `amount` string, required: The amount to collect, in BRL, as a decimal string. Belvo considers an account ready to charge when its balance is at least this amount plus BRL 0.01. Belvo checks each account on its own and does not add balances across accounts.
    - `external_id` string, nullable: Your own reference for this item, such as an invoice or installment number. Belvo returns it in the `item_ready_to_charge` webhook. Belvo does not check that this value is unique, and it is not an idempotency key: if you send the same request twice, Belvo creates two instructions. Send `null` or omit the field if you don't need it.
    - `collection_policies` CollectionPolicyRequest[], required: The collection windows for this item. Belvo checks balances only while a window is open. At least one window must end in the future when you create the instruction.
      - `start_date` string, date, required: The first day of the window (`YYYY-MM-DD`). The window opens at 00:00 UTC on this date.
      - `end_date` string, date, required: The last day of the window (`YYYY-MM-DD`), inclusive. The window closes at the end of this date, in UTC.
      - `amount` string, required: The amount for this window, in BRL, as a decimal string. **Note:** Belvo stores this value but does not use it yet. The balance check always uses the item's `amount`, so set this field to the same value as the item's `amount`.

## Response `201`

Created

- CollectionInstructionResponse: A collection instruction, with all of its items and their collection windows.
  - `id` string, uuid, required: The unique identifier of the collection instruction. Use it to get or cancel the instruction.
  - `link_id` string, uuid, required: The `link.id` whose accounts Belvo monitors for this instruction.
  - `status` 'PROCESSING' | 'COMPLETED' | 'CANCELLED', required: The status of the collection instruction. Can be one of: - `PROCESSING`: The instruction was created. It stays in this status until you cancel it, even after every item has reached a final status. Check each item's `status` to see how monitoring ended. - `COMPLETED`: Reserved for future use. Belvo does not currently set this status. - `CANCELLED`: You cancelled the instruction. Any items that were still `PENDING` or `PROCESSING` were cancelled too.
  - `created_at` string, date-time, required: The date and time, in ISO-8601 format (UTC), when Belvo created the instruction.
  - `updated_at` string, date-time, required: The date and time, in ISO-8601 format (UTC), when the instruction's status last changed.
  - `items` CollectionItemResponse[], required: The items of this instruction. The order of the items is not guaranteed.
    - `id` string, uuid, required: The unique identifier of the item. Belvo sends it in the `item_ready_to_charge` webhook, and you use it to cancel the item or mark it as complete.
    - `amount` string, required: The amount to collect, in BRL, as a decimal string with two decimal places.
    - `external_id` string, nullable, required: The reference you sent when you created the item. `null` if you didn't send one.
    - `status` 'PENDING' | 'PROCESSING' | 'CHARGE_SETTLED' | 'POLICY_EXPIRED' | 'CHARGE_REJECTED' | 'FAILED' | 'COMPLETED' | 'CANCELLED', required: The status of the collection instruction item. Can be one of: - `PENDING`: The item is waiting for its next scheduled balance check. Every new item starts in this status. - `PROCESSING`: A balance check for the item is in progress. After the check, the item returns to `PENDING` if no account had enough balance and a collection window is still open. - `CHARGE_SETTLED`: One of the user's accounts had enough balance, and Belvo sent you the `item_ready_to_charge` webhook. Monitoring stops. This status does **not** mean that a payment was made: you create the Charge yourself, using Payments (Brazil). If Belvo can't deliver the webhook, the item still moves to this status, so also check the instruction's details regularly. - `POLICY_EXPIRED`: All of the item's collection windows ended before any account had enough balance. Belvo does not send a webhook for this status. - `CHARGE_REJECTED`: Belvo could not read the balance of any of the user's accounts (for example, because the data consent is no longer valid). Belvo does not send a webhook for this status. - `FAILED`: An internal error stopped monitoring. Belvo does not send a webhook for this status. - `COMPLETED`: You marked the item as complete (for example, because you collected the amount outside Belvo), so Belvo stopped monitoring it. - `CANCELLED`: You cancelled the item, or the whole collection instruction. `CHARGE_SETTLED`, `POLICY_EXPIRED`, `CHARGE_REJECTED`, `FAILED`, `COMPLETED`, and `CANCELLED` are final statuses.
    - `created_at` string, date-time, required: The date and time, in ISO-8601 format (UTC), when Belvo created the item.
    - `updated_at` string, date-time, required: The date and time, in ISO-8601 format (UTC), when Belvo last updated the item. Belvo updates the item at every balance check, so for a `PENDING` item this is usually the time of its last check.
    - `collection_policies` CollectionPolicyResponse[], required: The collection windows of the item.
      - `id` string, uuid, required: The unique identifier of the collection window.
      - `start_date` string, date, required: The first day of the window (`YYYY-MM-DD`). The window opens at 00:00 UTC on this date.
      - `end_date` string, date, required: The last day of the window (`YYYY-MM-DD`), inclusive. The window closes at the end of this date, in UTC.
      - `amount` string, required: The amount you sent for this window, in BRL, as a decimal string. Belvo does not use this value yet; the balance check uses the item's `amount`.
      - `created_at` string, date-time, required: The date and time, in ISO-8601 format (UTC), when Belvo created the window.

## Other responses

- `400`: Bad request error
- `401`: Unauthorized
- `403`: Permission denied
- `408`: Request Timeout
- `500`: Server error

## Changes

- **2026-10-21** `acb784e42ca0`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/belvo/apis/belvo-api-docs/changes/api/collection-instructions/post.md)

---

[API](https://skmtc.dev/belvo/apis/belvo-api-docs.md) - [All operations](https://skmtc.dev/belvo/apis/belvo-api-docs/llms.txt) - [OpenAPI document](https://skmtc.dev/belvo/apis/belvo-api-docs/revisions/acb784e42ca0?raw)
