Skip to main content
A one-time payment (OTP) is a secure, single-use checkout link that allows your customers to complete a purchase through Compago’s hosted payment page. This is ideal for non-recurring transactions, custom payment requests, or integrations where the payment flow is triggered externally.

What You Can Do

With one-time payments, you can:
  • Generate Secure Payment Links: Create unique, time-limited checkout URLs for each transaction
  • Accept Card Payments: Process credit and debit card payments through Compago’s PCI-compliant infrastructure
  • Customize the Experience: Control where customers are redirected after payment completion
  • Track Payments: Use your own external IDs to link Compago payments with your internal systems
  • Offer Installment Plans: Support monthly installment payments (Meses Sin Intereses) when available

Use Cases

One-time payments are perfect for:
  • Invoicing: Send payment links to customers via email or messaging
  • Custom Integrations: Trigger payments from CRM, ERP, or internal tools
  • eCommerce: Accept payments for online stores and marketplaces
  • Service Businesses: Request deposits or full payments for appointments or bookings
  • Point of Sale: Create payment links for in-person transactions (when integrated with terminal apps)

How It Works

  1. Create: Your backend calls the Compago API to create a payment link, providing the amount, customer details, and redirect URLs
  2. Receive: Compago returns a secure redirectUrl for the checkout page
  3. Redirect: Send your customer to the redirectUrl where they enter their payment details
  4. Process: Compago processes the payment securely through its payment infrastructure
  5. Return: After payment completion (successful or failed), the customer is redirected back to your redirectUrl
  6. Verify: Check the payment status using the GET endpoint or through webhooks (if configured)

Prerequisites

Before creating one-time payments, ensure you have:
  • An active Compago account with API access
  • A valid API key (generate one at Configuraciones → Desarrollador in your Compago Dashboard)
  • Your integration configured to use MXN currency
One-time payments currently support MXN (Mexican Peso) only. Transactions in other currencies will be rejected.

Creating a One-Time Payment

Endpoint

POST /api/one-time-payment
API reference: POST /one-time-payment

Authentication

Include your API key in the request headers:
x-api-key: YOUR_API_KEY
Content-Type: application/json

Request Body

{
  "amount": 1200,
  "currency": "MXN",
  "description": "Order #12345 - Blue Widget",
  "externalId": "order_12345_payment_1",
  "redirectUrl": "https://yourstore.com/order/12345/confirmation",
  "homepageUrl": "https://yourstore.com",
  "billingInformation": {
    "email": "[email protected]",
    "firstName": "María",
    "lastName": "González",
    "phoneNumber": "+5215512345678",
    "address": {
      "addressLine": "Av. Insurgentes Sur 1234",
      "city": "Ciudad de México",
      "state": "CDMX",
      "zip": "03100"
    }
  }
}

Field Descriptions

FieldTypeRequiredDescription
amountnumberYesPayment amount in MXN. Must meet the minimum amount configured for your account.
currencystringYesCurrency code. Must be "MXN".
descriptionstringYesDescription of the payment shown to the customer during checkout.
externalIdstringYesYour unique identifier for this payment. Must be unique per organization.
redirectUrlstringYesURL where customers are sent after completing payment (success or failure).
homepageUrlstringYesYour homepage URL, used if the customer cancels or wants to return to your site.
billingInformationobjectYesCustomer billing details (see below).

Billing Information

FieldTypeRequiredDescription
emailstringYesCustomer’s email address.
firstNamestringYesCustomer’s first name.
lastNamestringYesCustomer’s last name.
phoneNumberstringYesCustomer’s phone number (include country code, e.g., +521…).
addressobjectYesCustomer’s billing address (see below).

Address

FieldTypeRequiredDescription
addressLinestringYesStreet address including number and street name.
citystringYesCity name.
statestringYesMexican state code (e.g., "CDMX", "JAL", "NLE"). See supported states.
zipstringYesPostal code.

Response

{
  "redirectUrl": "https://app.compago.com/checkout/otp/abc123-def456-ghi789"
}
Use the returned redirectUrl to redirect your customer to Compago’s secure checkout page.

Example with cURL

curl -X POST https://api.harmony.compago.com/api/one-time-payment \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "amount": 1200,
    "currency": "MXN",
    "description": "Order #12345",
    "externalId": "order_12345_payment_1",
    "redirectUrl": "https://yourstore.com/order/12345/confirmation",
    "homepageUrl": "https://yourstore.com",
    "billingInformation": {
      "email": "[email protected]",
      "firstName": "María",
      "lastName": "González",
      "phoneNumber": "+5215512345678",
      "address": {
        "addressLine": "Av. Insurgentes Sur 1234",
        "city": "Ciudad de México",
        "state": "CDMX",
        "zip": "03100"
      }
    }
  }'

Important Business Rules

Payment Expiration

One-time payment links expire 15 minutes after creation. If a customer does not complete the payment within this time, the link becomes invalid and cannot be used.
To create a new payment for the same transaction, generate a new one-time payment with a different externalId.

Minimum Amount

Each Compago account has a configured minimum payment amount. Requests with amounts below this threshold will be rejected with a 400 error. If you receive this error, ensure your payment amount meets your account’s minimum requirement.

External ID Uniqueness

The externalId must be unique within your organization. Attempting to create a payment with a duplicate externalId will result in a 400 error:
{
  "message": "One time payment with externalId order_12345_payment_1 already exists."
}
Use unique identifiers for each payment attempt. If a payment fails or expires, create a new one-time payment with a new externalId.

Currency Restriction

Currently, only MXN (Mexican Peso) is supported. Requests with other currencies will be rejected.

Payment Status

One-time payments have two statuses:
  • PENDING: Payment link is active and waiting for customer to complete payment
  • CONFIRMED: Customer has successfully completed the payment
Once a payment is marked as CONFIRMED, the one-time payment link can no longer be used.

Retrieving Payment Details

You can retrieve the status and details of a one-time payment using the GET endpoint.

Endpoint

GET /api/one-time-payment/{id}
API reference: GET /one-time-payment/{id}

Response for Active Payments

If the payment is still PENDING and has not expired, you’ll receive full payment details:
{
  "id": "abc123-def456-ghi789",
  "status": "PENDING",
  "amount": 1200,
  "currency": "MXN",
  "description": "Order #12345",
  "externalId": "order_12345_payment_1",
  "expiresAt": "2025-10-30T12:45:00Z",
  "expired": false,
  "homepageUrl": "https://yourstore.com",
  "redirectUrl": "https://yourstore.com/order/12345/confirmation",
  "organization": {
    "name": "Your Business Name",
    "business": {
      "websiteURL": "https://yourstore.com"
    }
  },
  "billingInformation": {
    "phoneNumber": "+5215512345678"
  }
}

Response for Completed or Expired Payments

If the payment is no longer PENDING or has expired, the response will contain limited information:
{
  "status": "CONFIRMED",
  "homepageUrl": "https://yourstore.com",
  "expired": false,
  "organization": {
    "name": "Your Business Name",
    "business": {
      "websiteURL": "https://yourstore.com"
    }
  },
  "billingInformation": {
    "phoneNumber": "+5215512345678"
  }
}
The expired field indicates whether the payment link has passed its 15-minute expiration time, regardless of its status.

Supported Mexican States

Use the following state codes in the address.state field:
CodeState
AGUAguascalientes
BCNBaja California
BCSBaja California Sur
CAMCampeche
CHPChiapas
CHHChihuahua
CDMXCiudad de México
COACoahuila
COLColima
DURDurango
MEXEstado de México
GUAGuanajuato
GROGuerrero
HIDHidalgo
JALJalisco
MICMichoacán
MORMorelos
NAYNayarit
NLENuevo León
OAXOaxaca
PUEPuebla
QUEQuerétaro
ROOQuintana Roo
SLPSan Luis Potosí
SINSinaloa
SONSonora
TABTabasco
TAMTamaulipas
TLATlaxcala
VERVeracruz
YUCYucatán
ZACZacatecas

Error Handling

Common Errors

Status CodeErrorSolution
400Amount below minimumEnsure amount meets your account’s minimum payment threshold
400Duplicate externalIdUse a unique externalId for each payment
400Currency not supportedUse "MXN" as the currency
401UnauthorizedCheck your API key is valid and included in headers
400Missing organization contextVerify your organization settings are configured correctly

Example Error Response

{
  "message": "One time payment amount must be at least $[minimum_amount]."
}

Best Practices

  1. Generate Unique External IDs: Use a combination of order ID and timestamp to ensure uniqueness
  2. Handle Expiration: Implement logic to create new payment links if the 15-minute window expires
  3. Validate Amounts: Ensure amounts meet your account’s minimum payment threshold before calling the API
  4. Store Payment IDs: Save the returned one-time payment ID to track and verify payments later
  5. Implement Webhooks: Use webhooks (if available) to receive real-time payment status updates
  6. Test Thoroughly: Use the demo environment to test your integration before going live

Support

If you encounter issues with one-time payments:
  • Verify your API key is valid in Configuraciones → Desarrollador at app.compago.com
  • Ensure all required fields are included in your request
  • Check that amounts meet the minimum threshold
  • Verify your organization settings are configured correctly
  • Contact Compago support at [email protected] for assistance