Test the integration
To test your Mercado Pago Point integration, simulate different transaction statuses through our API. This allows you to validate its behavior in different scenarios before going to production. It is not possible to process real payments on a physical terminal using test accounts; to perform real transactions on the Point device, you must use a production account with real payment methods.
In these tests, you must use test credentialsAccess keys linked to an application and used to test the integration in a secure environment. You can find them in the application's Credentials section, within the test environment. They cannot process real payments.Access test credentials. If you are going to use a physical terminal, we recommend linking it to those credentials beforehand. For more information on how to perform this association, see Configure terminal.
Use a standard virtual device
If you do not have a physical device, use the standard virtual device identified by the serial SBX0000001. To build its ID, combine a valid poi_type for the country with that serial, for example: NEWLAND_N950__SBX0000001.
With the virtual device ID, you can run any of the scenarios described below.
Simulate test scenarios
Below, select and execute the desired scenarios to validate your integration. To simulate the different test scenarios below, you must use the test Access TokenPrivate key linked to an application, used in the backend to authenticate operations in the test environment. You can find it in the application's Credentials section, within the test environment. It cannot process real payments, must never be exposed in the frontend, and starts with the `APP_USR` prefix.Access test credentials.
The status change may take up to 10 seconds to be processed (or up to 40 seconds to simulate the action_required status) and, during this process, the order will automatically change to the at_terminal status before reaching the requested final status, except in the case of the refunded status, which transitions directly. For more information about possible statuses, see the Order and transaction status documentation.
To test the correct creation of an order and the processing of the associated payment, follow the steps below.
- Make a request to the Create orderPOST endpoint using the test Access TokenPrivate key linked to an application, used in the backend to authenticate operations in the test environment. You can find it in the application's Credentials section, within the test environment. It cannot process real payments, must never be exposed in the frontend, and starts with the `APP_USR` prefix.Access test credentials.
- Store the order identifier, returned in the response to its creation under the
idparameter. - Send a request to the Simulate order statusPOST endpoint, replacing the
{order_id}in the request path with the order ID (order_id) created in step 1. In the request body, include thestatusfield with the valueprocessed, as shown below.
curl -X POST \
'https://api.mercadopago.com/v1/orders/{order_id}/events' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer TEST-232********97488-12********26f67454********f4c8b49c********9526408' \
-d '{
"status": "processed",
"payment_method_type": "credit_card",
"installments": 1,
"payment_method_id": "visa",
"status_detail": "accredited"
}'
See the table below for descriptions of the parameters that can be sent in this request.
| Attribute | Type | Description | Possible values | Required |
status | Body.String | Final status you want to simulate for the order. | processed | Required |
payment_method_type | Body.String | Type of payment method that will be used in the simulation. | debit_card, credit_card, qr | Optional |
installments | Body.Integer | Number of payment installments. | 1 | Conditional. Send this field only when payment_method_type is credit_card. |
payment_method_id | Body.String | Payment method brand. | amex, master, visa, debmaster, debvisa, argencard, cabal, cencosud, cmr, diners, naranja, debcabal | Conditional. Send this field when payment_method_type is debit_card or credit_card. |
status_detail | Body.String | Specific status detail you want to simulate. | accredited | Optional |
If the request is successful, the response will return a status 204 No Content, with no response body.
You will receive a Webhook notification from Mercado Pago with the action field set to order.processed. In the transactions.payments node, you can check the payment status, as shown in the example below.
Additionally, you can query the Get order by IDGET endpoint to check the order status.
json{ "action": "order.processed", "api_version": "v1", "application_id": "2644473656269379", "data": { "external_reference": "ext-ref", "id": "ORD01JY0PGGPZ4DBV73E2PXRBCQ84", "status": "processed", "status_detail": "accredited", "total_paid_amount": "120", "transactions": { "payments": [ { "amount": "120", "id": "PAY01JY0PGGPZ4DBV73E2Q0DQZQCJ", "paid_amount": "120", "payment_method": { "id": "visa", "installments": 1, "type": "credit_card" }, "reference": { "id": "115019989861" }, "status": "processed", "status_detail": "accredited" } ] }, "type": "point", "version": 3 }, "date_created": "2025-06-18T05:00:19.274162018Z", "live_mode": false, "type": "order", "user_id": "123456" }
To validate that your integration correctly handles failed payments, you can simulate the failed status of an order.
- Make a new request to the Create orderPOST endpoint using the test Access TokenPrivate key linked to an application, used in the backend to authenticate operations in the test environment. You can find it in the application's Credentials section, within the test environment. It cannot process real payments, must never be exposed in the frontend, and starts with the `APP_USR` prefix.Access test credentials.
- Store the order identifier, returned in the response to its creation under the
idparameter. - Send a request to the Simulate order statusPOST endpoint, replacing the
{order_id}in the request path with the order ID (order_id) created in step 1. In the request body, include thestatusfield with the valuefailed.
curl -X POST \
'https://api.mercadopago.com/v1/orders/{order_id}/events' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer TEST-232********97488-12********26f67454********f4c8b49c********9526408' \
-d '{
"status": "failed",
"payment_method_type": "credit_card",
"installments": 1,
"payment_method_id": "visa",
"status_detail": "insufficient_amount"
}'
See the table below for descriptions of the parameters that can be sent in this request.
| Attribute | Type | Description | Possible values | Required |
status | Body.String | Final status you want to simulate for the order. | failed | Required |
payment_method_type | Body.String | Type of payment method that will be used in the simulation. | debit_card, credit_card, qr | Optional |
installments | Body.Integer | Number of payment installments. | 1 | Conditional. Send this field only when payment_method_type is credit_card. |
payment_method_id | Body.String | Payment method brand. | amex, master, visa, debmaster, debvisa, argencard, cabal, cencosud, cmr, diners, naranja, debcabal | Conditional. Send this field when payment_method_type is debit_card or credit_card. |
status_detail | Body.String | Specific status detail you want to simulate. | bad_filled_card_data, required_call_for_authorize, card_disabled, high_risk, insufficient_amount, invalid_installments, max_attempts_exceeded, rejected_other_reason, processing_error | Optional |
If the request is successful, the response will return a status 204 No Content, with no response body.
You will receive a Webhook notification from Mercado Pago with the action field set to order.failed. In the transactions.payments node, you can check the payment status, as shown in the example below.
Additionally, you can query the Get order by IDGET endpoint to check the order status.
json{ "action": "order.failed", "api_version": "v1", "application_id": "123456", "data": { "external_reference": "ext_ref_1234", "id": "ORD01K23219YK26BC6GK0HASE8VT6", "status": "failed", "status_detail": "failed", "transactions": { "payments": [ { "amount": "120", "id": "PAY01K22Y503EJ8JHGF64KGY1PZ2B", "payment_method": { "id": "debvisa", "installments": 1, "type": "debit_card" }, "reference": { "id": "123456789980" }, "status": "failed", "status_detail": "bad_filled_card_data" } ] }, "type": "point", "version": 3 }, "date_created": "2025-08-07T20:03:04.897928692Z", "live_mode": false, "type": "order", "user_id": "123456" }
To confirm that the refund flow is working correctly, you need to simulate the refunded status on a previously processed order. The simulation of this status can only be performed on orders that already have the processed status. Therefore, execute the "Create an order and process the payment" scenario first.
Send a request to the Simulate order statusPOST endpoint, replacing the {order_id} in the request path with the ID of the previously processed order. In the request body, include the status field with the value refunded.
curl -X POST \
'https://api.mercadopago.com/v1/orders/{order_id}/events' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer TEST-232********97488-12********26f67454********f4c8b49c********9526408' \
-d '{
"status": "refunded"
}'
See the table below for descriptions of the parameters that can be sent in this request.
| Attribute | Type | Description | Possible values | Required |
status | Body.String | Final status you want to simulate for the order. Important: To simulate this status, the order must have been previously processed. | refunded | Required |
If the request is successful, the response will return a status 204 No Content, with no response body.
You will receive a Webhook notification from Mercado Pago with the action field set to order.refunded, indicating that the order was refunded, as shown in the example below.
Additionally, you can query the Get order by IDGET endpoint to check the order status.
json{ "action": "order.refunded", "api_version": "v1", "application_id": "2644473656269379", "data": { "external_reference": "ext-ref", "id": "ORD01JY0PGGPZ4DBV73E2PXRBCQ84", "status": "refunded", "status_detail": "refunded", "total_paid_amount": "120", "type": "point", "version": 4 }, "date_created": "2025-06-18T05:05:08.255803326Z", "live_mode": false, "type": "order", "user_id": "123456" }
To validate that the payment cancellation flow works correctly, you can simulate the canceled status of an order.
- Make a request to the Create orderPOST endpoint using the test Access TokenPrivate key linked to an application, used in the backend to authenticate operations in the test environment. You can find it in the application's Credentials section, within the test environment. It cannot process real payments, must never be exposed in the frontend, and starts with the `APP_USR` prefix.Access test credentials.
- Store the order identifier, returned in the response to its creation under the
idparameter. - Send a request to the Simulate order statusPOST endpoint, replacing the
{order_id}in the request path with the ID of the order created in step 1. In the request body, include thestatusfield with the valuecanceled.
curl -X POST \
'https://api.mercadopago.com/v1/orders/{order_id}/events' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer TEST-232********97488-12********26f67454********f4c8b49c********9526408' \
-d '{
"status": "canceled"
}'
See the table below for descriptions of the parameters that can be sent in this request.
| Attribute | Type | Description | Possible values | Required |
status | Body.String | Final status you want to simulate for the order. | canceled | Required |
If the request is successful, the response will return a status 204 No Content, with no response body.
You will receive a Webhook notification from Mercado Pago with the action field set to order.canceled. In the transactions.payments node, you can check the payment status, as shown in the example below.
Additionally, you can query the Get order by IDGET endpoint to check the order status.
json{ "action": "order.canceled", "api_version": "v1", "application_id": "123456", "data": { "external_reference": "ext_ref_1234", "id": "ORD01JYH1Z1YJN4HZ8J3Q0RB3YP6D", "status": "canceled", "status_detail": "canceled", "transactions": { "payments": [ { "amount": "120", "id": "PAY01K22Y503EJ8JHGF64KGY1PZ2B", "status": "canceled", "status_detail": "canceled_on_terminal" } ] }, "type": "point", "version": 3 }, "date_created": "2025-08-07T19:30:44.741479284Z", "live_mode": false, "type": "order", "user_id": "123456" }
To validate that your integration correctly handles expired orders, you can simulate the expired status of an order.
- Make a request to the Create orderPOST endpoint using the test Access TokenPrivate key linked to an application, used in the backend to authenticate operations in the test environment. You can find it in the application's Credentials section, within the test environment. It cannot process real payments, must never be exposed in the frontend, and starts with the `APP_USR` prefix.Access test credentials.
- Store the order identifier, returned in the response to its creation under the
idparameter. - Send a request to the Simulate order statusPOST endpoint, replacing the
{order_id}in the request path with the order ID (order_id) created previously. In the request body, include thestatusfield with the valueexpired.
curl -X POST \
'https://api.mercadopago.com/v1/orders/{order_id}/events' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer TEST-232********97488-12********26f67454********f4c8b49c********9526408' \
-d '{
"status": "expired"
}'
See the table below for descriptions of the parameters that can be sent in this request.
| Attribute | Type | Description | Possible values | Required |
status | Body.String | Final status you want to simulate for the order. | expired | Required |
If the request is successful, the response will return a status 204 No Content, with no response body.
You will receive a Webhook notification from Mercado Pago with the action field set to order.expired. In the transactions.payments node, you can check the payment status, as shown in the example below.
Additionally, you can query the Get order by IDGET endpoint to check the order status.
json{ "action": "order.expired", "api_version": "v1", "application_id": "123456", "data": { "external_reference": "ext_ref_1234", "id": "ORD01JYH1Z1YJN4HZ8J3Q0RB3YP6D", "status": "expired", "status_detail": "expired", "transactions": { "payments": [ { "amount": "120", "id": "PAY01K22Y503EJ8JHGF64KGY1PZ2B", "status": "expired", "status_detail": "expired" } ] }, "type": "point", "version": 3 }, "date_created": "2025-08-07T19:50:29.172256789Z", "live_mode": false, "type": "order", "user_id": "123456" }
In some cases, you must confirm on the terminal whether the payment was approved or rejected. To validate that your integration correctly handles this scenario, you can simulate the action_required status of an order. The order will automatically change to at_terminal before reaching action_required, and this transition may take up to 40 seconds.
The action_required status is available only in PDV mode.
- Make a request to the Create orderPOST endpoint using the test Access TokenPrivate key linked to an application, used in the backend to authenticate operations in the test environment. You can find it in the application's Credentials section, within the test environment. It cannot process real payments, must never be exposed in the frontend, and starts with the `APP_USR` prefix.Access test credentials.
- Store the order identifier, returned in the response to its creation under the
idparameter. - Send a request to the Simulate order statusPOST endpoint, replacing the
{order_id}in the request path with the order ID (order_id) created in step 1. In the request body, include thestatusfield with the valueaction_required.
curl -X POST \
'https://api.mercadopago.com/v1/orders/{order_id}/events' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer TEST-232********97488-12********26f67454********f4c8b49c********9526408' \
-d '{
"status": "action_required"
}'
See the table below for descriptions of the parameters that can be sent in this request.
| Attribute | Type | Description | Possible values | Required |
status | Body.String | Final status you want to simulate for the order. | action_required | Required |
If the request is successful, the response will return a status 204 No Content, with no response body.
You will receive a Webhook notification from Mercado Pago with the action field set to order.action_required, indicating that an action is required at the terminal, as shown in the example below.
Additionally, you can query the Get order by IDGET endpoint to check the order status.
json{ "action": "order.action_required", "api_version": "v1", "application_id": "123456", "data": { "external_reference": "ext_ref_1234", "id": "ORD01JYH1Z1YJN4HZ8J3Q0RB3YP6D", "status": "action_required", "status_detail": "check_on_terminal", "type": "point", "version": 3 }, "date_created": "2025-06-24T13:28:36.44747706Z", "live_mode": false, "type": "order", "user_id": "123456" }
After testing all scenarios and verifying the correct functioning of your integration with Mercado Pago Point, you can Go to production.