# MD for: https://www.mercadopago.com.ar/developers/pt/docs/mp-point-v2/integration-test.md \# Test the integration The integration test of Mercado Pago Point to your system is based on simulating different transaction statuses using our API. This way, you can ensure the correct functioning of your integration before going to production, through different test scenarios. It is not possible to process real payments on the 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 :toolTipComponent\[test credentials\]{link="/developers/en/docs/mp-point-v2/create-application#bookmark\_access\_test\_credentials" linkText="Access test credentials" content="Keys from the application created in Mercado Pago. You can access them through \*Your integrations > Integration data > Tests > Test credentials\*."}. Although the simulation allows you to validate the integration without interaction with the terminal in each test transaction, \*\*it is essential that the terminal is previously linked to your test credentials\*\*. For more information on how to perform this association, access \[Configure terminal\](https://www.mercadopago.com.ar/developers/en/docs/mp-point-v2/configure-terminal). The status change may take up to 10 seconds to be processed 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\](https://www.mercadopago.com.ar/developers/en/docs/mp-point-v2/resources/status-order-transaction) documentation. > WARNING > > Before starting the tests, make sure that \[Webhook notifications\](https://www.mercadopago.com.ar/developers/en/docs/mp-point-v2/notifications) are configured. This configuration is necessary to validate the correct functioning of notifications in each test scenario. ## 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 :toolTipComponent\[test Access Token\]{link="/developers/en/docs/mp-point-v2/create-application#bookmark\_access\_test\_credentials" linkText="Access test credentials" content="Private key of the application created in Mercado Pago, used in the \_backend\_. You can access it through \*Your integrations > Integration data > Tests > Test credentials\*."}. :::AccordionComponent{title="Create an order and process the payment"} To test the correct creation of an order and the processing of the associated payment, follow the steps below. 1\. Make a \*\*POST\*\* request to :TagComponent{tag="API" text="Create order" href="/developers/en/reference/in-person-payments/point/orders/create-order/post"} using the :toolTipComponent\[test Access Token\]{link="/developers/en/docs/mp-point-v2/create-application#bookmark\_access\_test\_credentials" linkText="Access test credentials" content="Private key of the application created in Mercado Pago, used in the \_backend\_. You can access it through \*Your integrations > Integration data > Tests > Test credentials\*."}. 2\. Store the order identifier, returned in the response to its creation under the \`id\` parameter. 3\. Send a \*\*POST\*\* to the :TagComponent{tag="API" text="Simulate order status" href="/developers/en/reference/in-person-payments/point/orders/simulate-order/post"} endpoint, replacing the \`{order\_id}\` in the request path with the \`id\` of the previously created order. In the request body, include the \`status\` field with the value \`processed\`, as shown below. * [curl ](#editor%5F1) curl ``` 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" }' ``` Copiar 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 :TagComponent{tag="API" text="Get order by ID" href="/developers/en/reference/in-person-payments/point/orders/get-order/get"} 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": "5.00", "transactions": { "payments": \[ { "amount": "5.00", "id": "PAY01JY0PGGPZ4DBV73E2Q0DQZQCJ", "paid\_amount": "5.00", "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" } \`\`\` ::: :::AccordionComponent{title="Simulate a payment failure"} To validate that your integration correctly handles failed payments, you can simulate the \`failed\` status of an order. 1\. Make a new \*\*POST\*\* request to :TagComponent{tag="API" text="Create order" href="/developers/en/reference/in-person-payments/point/orders/create-order/post"} using the :toolTipComponent\[test Access Token\]{link="/developers/en/docs/mp-point-v2/create-application#bookmark\_access\_test\_credentials" linkText="Access test credentials" content="Private key of the application created in Mercado Pago, used in the \_backend\_. You can access it through \*Your integrations > Integration data > Tests > Test credentials\*."}. 2\. Store the order identifier, returned in the response to its creation under the \`id\` parameter. 3\. Send a \*\*POST\*\* to the :TagComponent{tag="API" text="Simulate order status" href="/developers/en/reference/in-person-payments/point/orders/simulate-order/post"} endpoint, replacing the \`{order\_id}\` in the request path with the \`id\` of the previously created order. In the request body, include the \`status\` field with the value \`failed\`. * [curl ](#editor%5F2) curl ``` 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" }' ``` Copiar 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 :TagComponent{tag="API" text="Get order by ID" href="/developers/en/reference/in-person-payments/point/orders/get-order/get"} 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" } \`\`\` ::: :::AccordionComponent{title="Refund a payment"} 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 \*\*POST\*\* to the :TagComponent{tag="API" text="Simulate order status" href="/developers/en/reference/in-person-payments/point/orders/simulate-order/post"} 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 ](#editor%5F3) curl ``` 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" }' ``` Copiar 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 :TagComponent{tag="API" text="Get order by ID" href="/developers/en/reference/in-person-payments/point/orders/get-order/get"} 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": "5.00", "type": "point", "version": 4 }, "date\_created": "2025-06-18T05:05:08.255803326Z", "live\_mode": false, "type": "order", "user\_id": "123456" } \`\`\` ::: :::AccordionComponent{title="Create and cancel a payment order"} To validate that the payment cancellation flow works correctly, you can simulate the \`canceled\` status of an order. 1\. Make a \*\*POST\*\* request to :TagComponent{tag="API" text="Create order" href="/developers/en/reference/in-person-payments/point/orders/create-order/post"} using the :toolTipComponent\[test Access Token\]{link="/developers/en/docs/mp-point-v2/create-application#bookmark\_access\_test\_credentials" linkText="Access test credentials" content="Private key of the application created in Mercado Pago, used in the \_backend\_. You can access it through \*Your integrations > Integration data > Tests > Test credentials\*."}. 2\. Store the order identifier, returned in the response to its creation under the \`id\` parameter. 3\. Send a \*\*POST\*\* to the :TagComponent{tag="API" text="Simulate order status" href="/developers/en/reference/in-person-payments/point/orders/simulate-order/post"} endpoint, replacing the \`{order\_id}\` in the request path with the \`id\` of the previously created order. In the request body, include the \`status\` field with the value \`canceled\`. * [curl ](#editor%5F4) curl ``` 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" }' ``` Copiar 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 :TagComponent{tag="API" text="Get order by ID" href="/developers/en/reference/in-person-payments/point/orders/get-order/get"} 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" } \`\`\` ::: :::AccordionComponent{title="Simulate order expiration"} To validate that your integration correctly handles expired orders, you can simulate the \`expired\` status of an order. 1\. Make a \*\*POST\*\* request to :TagComponent{tag="API" text="Create order" href="/developers/en/reference/in-person-payments/point/orders/create-order/post"} using the :toolTipComponent\[test Access Token\]{link="/developers/en/docs/mp-point-v2/create-application#bookmark\_access\_test\_credentials" linkText="Access test credentials" content="Private key of the application created in Mercado Pago, used in the \_backend\_. You can access it through \*Your integrations > Integration data > Tests > Test credentials\*."}. 2\. Store the order identifier, returned in the response to its creation under the \`id\` parameter. 3\. Send a \*\*POST\*\* to the :TagComponent{tag="API" text="Simulate order status" href="/developers/en/reference/in-person-payments/point/orders/simulate-order/post"} endpoint, replacing the \`{order\_id}\` in the request path with the \`id\` of the previously created order. In the request body, include the \`status\` field with the value \`expired\`. * [curl ](#editor%5F5) curl ``` 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" }' ``` Copiar 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 :TagComponent{tag="API" text="Get order by ID" href="/developers/en/reference/in-person-payments/point/orders/get-order/get"} 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" } \`\`\` ::: After testing all scenarios and verifying the correct functioning of your integration with Mercado Pago Point, you can \[Go to production\](https://www.mercadopago.com.ar/developers/en/docs/mp-point-v2/go-to-production).