# MD for: https://www.mercadopago.com.ar/developers/pt/docs/checkout-api-orders/payment-integration/rapipago-pagofacil.md \# Rapipago and Pago Fácil With Mercado Pago's Checkout API it is also possible to offer payments with \*\*Rapipago\*\* or \*\*Pago Fácil\*\*. With these payment methods, buyers will be able to make a deferred cash payment, always within the established deadline for its due date, and they will need to wait for it to be credited to consider the purchase completed. If you wish to continue with your integration after \[setting up your environment\](https://www.mercadopago.com.ar/developers/en/docs/checkout-api-orders/development-environment) and want to offer payments with Rapipago or Pago Fácil, follow the steps below. > NOTE > > Remember: before setting up the payment methods, choose the way you will process your transactions. The processing mode, whether \*\*manual or automatic\*\*, will be defined at the time of order creation, using the \`processing\_mode\` parameter. For more information, visit the section \[Integration Model\](https://www.mercadopago.com.ar/developers/en/docs/checkout-api-orders/integration-model). :::AccordionComponent{title="Add payment form" pill="client-side"} To be able to receive payments, you need to add a form in the frontend that securely captures the payer's information. If you already have a development that includes your own payment form, make sure to include Rapipago and Pago Fácil among the payment options you want to offer, as indicated below, and continue to the \[Get document types step\](https://www.mercadopago.com.ar/developers/en/docs/checkout-api-orders/payment-integration/other-payment-methods#:\~:text=client%2Dside-,Get,-document%20types). If you do not have a payment form, add the one below to your project, including the identifier of the payment methods to be offered. | Payment method | \`payment\_method\_id\`| |:---:|:---:| | Rapipago | \`rapipago\` | | Pago Fácil | \`pagofacil\` | \`\`\`html Nombre Appelido E-mail Tipo de documento Número del documento Pagar \`\`\` ::: :::AccordionComponent{title="Get document types" pill="client-side"} To facilitate the correct entry of data in the payment form, it is necessary to obtain the possible document types to be accepted. The function below will allow you to automatically populate the available options, thanks to the inclusion of the \`select\` element with the \`id: form-checkout\_\_identificationType\` found in the form used as an example in the previous step. If you already have a development that includes the retrieval of document types, as indicated below, proceed to the \[Submit payment step\](https://www.mercadopago.com.ar/developers/en/docs/checkout-api-orders/payment-integration/other-payment-methods#:\~:text=server%2Dside-,Submit,-payment). If you do not have this function, add the following to your project. \`\`\`javascript function createSelectOptions(elem, options, labelsAndKeys = { label : "name", value : "id"}){ const {label, value} = labelsAndKeys; elem.options.length = 0; const tempOptions = document.createDocumentFragment(); options.forEach( option => { const optValue = option\[value\]; const optLabel = option\[label\]; const opt = document.createElement('option'); opt.value = optValue; opt.textContent = optLabel; tempOptions.appendChild(opt); }); elem.appendChild(tempOptions); } // Get Identification Types (async function getIdentificationTypes () { try { const identificationTypes = await mp.getIdentificationTypes(); const docTypeElement = document.getElementById('docType'); createSelectOptions(docTypeElement, identificationTypes) }catch(e) { return console.error('Error getting identificationTypes: ', e); } })() \`\`\` ::: :::AccordionComponent{title="Submit payment" pill="server-side"} The payment submission must be made by creating an order that contains associated payment transactions. > NOTE > > The creation of a payment can occur asynchronously in an order. In this scenario, the order remains in a processing state and without information. We recommend setting up \[Order topic notifications\](https://www.mercadopago.com.ar/developers/en/docs/checkout-api-orders/notifications) to receive updates on the status change, including the updated order data. Alternatively, you can choose to send a \*\*GET\*\* request to the \[/v1/orders/{id}\](https://www.mercadopago.com.ar/developers/en/reference/online-payments/checkout-api/get-order/get) endpoint to retrieve that updated information. To do this, send a \*\*POST\*\* with your :toolTipComponent\[test Access Token\]{content="Private key of the application created in Mercado Pago, that must be used in the backend. You can access it through \*Your integrations > Integration data > Tests > Test credentials\*."} and the required parameters listed below to the endpoint :TagComponent{tag="API" text="/v1/orders" href="/developers/en/reference/online-payments/checkout-api/create-order/post"} and execute the request. \`\`\`curl curl --location 'https://api.mercadopago.com/v1/orders' \\ --header 'Content-Type: application/json' \\ --header 'Authorization: Bearer ' \\ --header 'X-Idempotency-Key: ' \\ { "type": "online", "external\_reference": "ext\_ref\_1234", "processing\_mode": "automatic", "total\_amount": "200.00", "expiration\_time": "P3D", "payer": { "email": "test\_user\_ar@testuser.com", "first\_name": "John", "last\_name": "Doe", "identification": { "type": "DNI", "number": "99999999999" }, }, "transactions": { "payments": \[ { "amount": "200.00", "payment\_method": { "id": "rapipago", "type": "ticket" } } \] } } \`\`\` See the table below for descriptions of the parameters that are mandatory in the request and those that, although optional, have some important particularity that should be highlighted. | Atribute | Type | Description | Requirement | | --- | --- | --- | --- | | \`Authorization\` | \_Header\_ | Refers to your private key, the :toolTipComponent\[test Access Token\]{content="Private key of the application created in Mercado Pago, that must be used in the backend. You can access it through \*Your integrations > Integration data > Tests > Test credentials\*."}. | Required | | \`X-Idempotency-Key\` | \_Header\_ | Idempotency key. It is used to ensure that each request is processed only once, avoiding duplications. Use a unique value in the header of your request, such as a UUID V4 or random strings. | Required | | \`processing\_mode\` | \_Body. String\_ | Processing mode of the order. The possible values are: \- \`automatic\`: to create and process the order in automatic mode. \- \`manual\`: to create the order and process it later. For more information, visit the section \[Integration model\](https://www.mercadopago.com.ar/developers/en/docs/checkout-api-orders/integration-model). | Required | | \`total\_amount\` | \_Body. String\_ | Total amount for the transaction. | Required | | \`expiration\_time\` | \_Body. String\_ | Allows you to set the \*\*due date\*\* using the ISO 8601 duration format. By default, \*\*the due date of the boleto is 3 business days\*\* ("\`P3D\`" in the example) to avoid conflicts between the expiration date and the payment crediting, which can take up to 2 business hours from its completion. In case the payment is made after the established expiration date, the amount will be refunded to the payer's Mercado Pago account. | Optional | | \`payer.email\` | \_Body. String\_ | Buyer’s e-mail. | Required | | \`payer.identification.type\` | \_Body. String\_ | Buyer’s identification type. | Required | | \`payer.identification.number\` | \_Body. String\_ | Buyer’s identification number. | Required | | \`transaction.payments.payment\_method.id\` | \_Body. String\_ | Identifier of the payment method. The options for these payment methods are: \`rapipago\`: for payments with Rapipago. \`pagofacil\`: for payments with Pago Fácil. | Required | | \`transaction.payments.payment\_method.type\` | \_Body. String\_ | Type of the payment method. For payments with Rapipago or Pago Fácil, the value must be \`ticket\`. | Required | > SUCCESS\_MESSAGE > > To learn in detail about all the parameters sent and returned in this request, please refer to our \[API Reference\](https://www.mercadopago.com.ar/developers/en/reference/online-payments/checkout-api/create-order/post). Additionally, if you receive an error when submitting the payment, you can consult our \[list of errors\](https://www.mercadopago.com.ar/developers/en/docs/checkout-api-orders/payment-management/integration-errors). The response will return the parameter \`ticket\_url\`, which contains the URL with instructions for the buyer to make the payment, to which you should redirect them. Additionally, it will show the status \`action\_required\` until the payment is completed. \`\`\`json { "id": "ORD01J6TC8BYRR0T4ZKY0QR39WGYE", "type": "online", "processing\_mode": "automatic", "external\_reference": "ext\_ref\_1234", "total\_amount": "200.00", "country\_code": "ARG", "user\_id": "1245621468", "status": "action\_required", "status\_detail": "waiting\_payment", "capture\_mode": "automatic", "created\_date": "2024-09-02T22:04:01.880469Z", "last\_updated\_date": "2024-09-02T22:04:04.429289Z", "integration\_data": { "application\_id": "4599991948843755" }, "transactions": { "payments": \[ { "id": "PAY01J6TC8BYRR0T4ZKY0QRTZ0E24", "reference\_id": "22dvqmsbq8c", "amount": "200.00", "status": "action\_required", "status\_detail": "waiting\_payment", "payment\_method": { "id": "rapipago", "type": "ticket", "ticket\_url": "https://www.mercadopago.com.ar/payments/86797024510/ticket?caller\_id=1870026883&payment\_method\_id=rapipago&payment\_id=86797024510&payment\_method\_reference\_id=6004835002&hash=0331521a-9ddb-44a2-851c-65f77d8d394e", "barcode\_content": "3335008800000000006004835002100020000242462010", "reference": "6005407530", "verification\_code": "6005407530" } } \] } } \`\`\` Among the returned parameters, the ones indicated in the table below stand out. | Attribute | Type | Description | |---|---|---| | \`transactions.payments.status\` | \_String\_ | Returns the transaction status. In this case, it will return \`action\_required\` to indicate that an action is required to complete the processing, that is, until the payment is made. | | \`transactions.payments.status\_detail\` | \_String\_ | Transaction status detail. In this case, the value obtained is pending (\`waiting\_payment\`) for the buyer to complete the payment. | | \`transactions.payments.payment\_method.ticket\_url\` | \_String\_ | URL with payment instructions to which you should redirect the buyer. | | \`transactions.payments.payment\_method.barcode\_content\` | \_String\_ | Barcode in EAN-13 format for payment of the Rapipago or Pago Fácil slip. | | \`transactions.payments.payment\_method.reference\` | \_String\_ | Payment reference code. | | \`transactions.payments.payment\_method.verification\_code\` | \_String\_ | Payment verification code. | > WARNING > > If you have created the order in manual mode, remember that processing the payment requires an additional step, which is calling the :TagComponent{tag="API" text="Process order" href="/developers/en/reference/online-payments/checkout-api/process-order/post"}. ::: :::AccordionComponent{title="Cancel payment" pill="server-side"} If you wish, you can cancel a payment created, as long as it is pending or in process; that is, with \`status=action\_required\`. Additionally, we recommend canceling payments that were not made by the established due date to avoid billing and reconciliation issues. > WARNING > > If 30 days pass after the established due date for a payment and it has not been made, Mercado Pago will consider it expired. In these cases, it is not possible to perform a manual cancellation, and the payment status will change to canceled or expired. For more information, please consult the \[Refunds and cancellations\](https://www.mercadopago.com.ar/developers/en/docs/checkout-api-payments/payment-management/refunds-cancellations) section. :::