Generate report via API
The Other Operations reports API lets you define the file content and delivery channel, generate reports manually or schedule their automatic generation, and download them when they are available.
Use your production Access TokenPrivate key of the application created in Mercado Pago and used in the backend. You can access it through Your integrations > Integration data > Production > Production credentials. to send requests.
The flow consists of the following steps:
- Configure the file columns and delivery notifiers.
- Generate the report manually, check its status, and download it when available.
- Schedule automatic generation if you need to receive the report periodically.
- Review the Webhook notification content and validate its signature.
Remember that the report type you want to configure, generate, or schedule is defined through the reportId path parameter. The available values are:
reportId | Report type | Description |
activities_collection | Collection report | Includes collections received through checkout, QR, Point, marketplace, and other channels. |
activities_after_collection | Post-collection report | Includes refunds, chargebacks, claims, and adjustments made after collection. |
activities_withdraw | Withdrawal report | Includes fund withdrawals and transfers from the account. |
1. Set up your reports
The configuration determines which columns the file contains, how its data is displayed, and the channels used to notify you about or deliver the report. You must create a configuration for each report type, identified by reportId, before generating or scheduling files.
To create it, send a request to /v1/reporting/operations/{reportId}/configPOST with the structure and notifiers objects.
- In
structure, assign a name to the configuration throughnameand define the file columns incolumns. Eachcolumnsitem must contain thekeyof a field supported by the report type. See the available values in Report fields. - In
structure.file_format, you can define the separators, date format, name, and prefix of the file. - In
structure.display_timezone, you can set the timezone used to display dates in the file. This value does not change the range later sent infilters.creation_date.range. - In
notifiers, include at least one channel to indicate that the report is available or deliver the generated file.
Each notifiers item contains a type, which identifies the delivery channel, and a data object with the connection data required for that channel.
notifiers[].type value | Delivery channel | Fields to send in notifiers[].data |
webhook | Sends a notification to your URL. | url, key |
ftp | Delivers the file to an FTP or SFTP server using a password. | server, port, username, password, remote_dir |
ftp_pkey | Delivers the file to an SFTP server using an SSH private key. | server, port, username, private_key, remote_dir |
internal_sftp | Delivers the file through Mercado Pago's internal SFTP channel. | Send data as an empty object; its attributes are managed internally. |
In case of success, the response contains structure.id, which identifies the configuration, and notifiers[].id, which identifies each created notifier. Save these values: you will need them to update the configuration or schedule automatic generation.
To retrieve the active configuration for a report type, send a request to /v1/reporting/operations/{reportId}/configGET. The response returns the structure, its associated notifiers, and their respective identifiers.
To modify an existing configuration, use the structure.id value as structureId in /v1/reporting/operations/{reportId}/config/{structureId}PUT.
With this request, you can update the report name and columns, output-file settings, the timezone used to display dates, and delivery notifiers.
2. Generate report manually
Generate a report for a specific period and download it when available.
To generate the report, send a request to /v1/reporting/operations/{reportId}/statementsPOST. With this request, you can define the report period, apply the filters supported by the selected type, and choose the file format. The period cannot exceed one year.
curl -X POST \
'https://api.mercadopago.com/v1/reporting/operations/activities_collection/statements' \
-H 'Authorization: Bearer YOUR_ACCESS_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"filters":{"creation_date":{"range":{"gte":"2026-03-01T00:00:00-03:00","lte":"2026-03-31T23:59:59-03:00"}}}}'
In case of success, the response returns record_id. Use this value as uid to check the report status and download the file.
To check a report's status, use the record_id obtained when creating it as uid in /v1/reporting/operations/{reportId}/statements/{uid}GET.
| Status | Description |
pending | The report is being generated. |
available | The file is available for download. |
failed | The generation could not be completed. |
empty | No operations were found for the submitted range and filters. |
You can also list generated reports through /v1/reporting/operations/{reportId}/statementsGET and filter the results by status, creation date, and origin.
When the report has the available status, download it through /v1/reporting/operations/{reportId}/statements/{uid}/downloadGET. Use the same uid from the status request and choose between CSV and XLSX. Larger files may be delivered compressed as .zip.
3. Schedule report automatically
Create a schedule to generate the report automatically on a daily, weekly, or monthly basis.
To enable automatic generation, send a request to /v1/reporting/operations/{reportId}/schedulePOST. With this request, you can define the generation frequency and time, specify the report configuration, and select its delivery notifiers.
In case of success, the response returns id, which identifies the created schedule. Save this value to later disable it as scheduleId.
Use the schedule identifier as scheduleId in /v1/reporting/operations/{reportId}/schedule/{scheduleId}DELETE. Disabling it stops new reports from being generated, but previously created files remain available.
4. Notifications
When the report is available, Mercado Pago sends a POST request to the URL defined in notifiers[].data.url for the webhook notifier. The body identifies the report and the available files.
{
"report_id": "activities_collection",
"statement_id": "6d17e034-6eb3-48fc-a6fa-461e886fa406",
"status": "available",
"files": [
{
"type": "text/csv",
"name": "activities_collection.csv",
"size": 20480,
"has_zip_version": false
}
]
}
Verify the notification signature with the secret sent in notifiers[].data.key and discard the event if it does not match.