Crear cobro
curl --request POST \
--url https://api.onepay.la/v1/payments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-idempotency: <x-idempotency>' \
--data '
{
"amount": 123,
"title": "<string>",
"currency": "<string>",
"phone": "<string>",
"email": "<string>",
"reference": "<string>",
"tax": 123,
"external_id": "<string>",
"description": "<string>",
"document_url": "<string>",
"expiration_date": "<string>",
"schedule_at": "<string>",
"metadata": {},
"template_id": 123,
"redirect_url": "<string>",
"splits": [
{
"splits[].customer_id": "<string>",
"splits[].split_type": "<string>",
"splits[].split_value": 123,
"splits[].description": "<string>",
"splits[].account_id": "<string>",
"splits[].scheduled_at": "<string>"
}
],
"partial_payment_config": {
"min_amount_in_cents": 123,
"max_amount_in_cents": 123,
"max_payment_methods": 123,
"timeout_hours": 123
}
}
'import requests
url = "https://api.onepay.la/v1/payments"
payload = {
"amount": 123,
"title": "<string>",
"currency": "<string>",
"phone": "<string>",
"email": "<string>",
"reference": "<string>",
"tax": 123,
"external_id": "<string>",
"description": "<string>",
"document_url": "<string>",
"expiration_date": "<string>",
"schedule_at": "<string>",
"metadata": {},
"template_id": 123,
"redirect_url": "<string>",
"splits": [
{
"splits[].customer_id": "<string>",
"splits[].split_type": "<string>",
"splits[].split_value": 123,
"splits[].description": "<string>",
"splits[].account_id": "<string>",
"splits[].scheduled_at": "<string>"
}
],
"partial_payment_config": {
"min_amount_in_cents": 123,
"max_amount_in_cents": 123,
"max_payment_methods": 123,
"timeout_hours": 123
}
}
headers = {
"x-idempotency": "<x-idempotency>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-idempotency': '<x-idempotency>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: 123,
title: '<string>',
currency: '<string>',
phone: '<string>',
email: '<string>',
reference: '<string>',
tax: 123,
external_id: '<string>',
description: '<string>',
document_url: '<string>',
expiration_date: '<string>',
schedule_at: '<string>',
metadata: {},
template_id: 123,
redirect_url: '<string>',
splits: [
{
'splits[].customer_id': '<string>',
'splits[].split_type': '<string>',
'splits[].split_value': 123,
'splits[].description': '<string>',
'splits[].account_id': '<string>',
'splits[].scheduled_at': '<string>'
}
],
partial_payment_config: {
min_amount_in_cents: 123,
max_amount_in_cents: 123,
max_payment_methods: 123,
timeout_hours: 123
}
})
};
fetch('https://api.onepay.la/v1/payments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.onepay.la/v1/payments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => 123,
'title' => '<string>',
'currency' => '<string>',
'phone' => '<string>',
'email' => '<string>',
'reference' => '<string>',
'tax' => 123,
'external_id' => '<string>',
'description' => '<string>',
'document_url' => '<string>',
'expiration_date' => '<string>',
'schedule_at' => '<string>',
'metadata' => [
],
'template_id' => 123,
'redirect_url' => '<string>',
'splits' => [
[
'splits[].customer_id' => '<string>',
'splits[].split_type' => '<string>',
'splits[].split_value' => 123,
'splits[].description' => '<string>',
'splits[].account_id' => '<string>',
'splits[].scheduled_at' => '<string>'
]
],
'partial_payment_config' => [
'min_amount_in_cents' => 123,
'max_amount_in_cents' => 123,
'max_payment_methods' => 123,
'timeout_hours' => 123
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-idempotency: <x-idempotency>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.onepay.la/v1/payments"
payload := strings.NewReader("{\n \"amount\": 123,\n \"title\": \"<string>\",\n \"currency\": \"<string>\",\n \"phone\": \"<string>\",\n \"email\": \"<string>\",\n \"reference\": \"<string>\",\n \"tax\": 123,\n \"external_id\": \"<string>\",\n \"description\": \"<string>\",\n \"document_url\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"schedule_at\": \"<string>\",\n \"metadata\": {},\n \"template_id\": 123,\n \"redirect_url\": \"<string>\",\n \"splits\": [\n {\n \"splits[].customer_id\": \"<string>\",\n \"splits[].split_type\": \"<string>\",\n \"splits[].split_value\": 123,\n \"splits[].description\": \"<string>\",\n \"splits[].account_id\": \"<string>\",\n \"splits[].scheduled_at\": \"<string>\"\n }\n ],\n \"partial_payment_config\": {\n \"min_amount_in_cents\": 123,\n \"max_amount_in_cents\": 123,\n \"max_payment_methods\": 123,\n \"timeout_hours\": 123\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-idempotency", "<x-idempotency>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.onepay.la/v1/payments")
.header("x-idempotency", "<x-idempotency>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 123,\n \"title\": \"<string>\",\n \"currency\": \"<string>\",\n \"phone\": \"<string>\",\n \"email\": \"<string>\",\n \"reference\": \"<string>\",\n \"tax\": 123,\n \"external_id\": \"<string>\",\n \"description\": \"<string>\",\n \"document_url\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"schedule_at\": \"<string>\",\n \"metadata\": {},\n \"template_id\": 123,\n \"redirect_url\": \"<string>\",\n \"splits\": [\n {\n \"splits[].customer_id\": \"<string>\",\n \"splits[].split_type\": \"<string>\",\n \"splits[].split_value\": 123,\n \"splits[].description\": \"<string>\",\n \"splits[].account_id\": \"<string>\",\n \"splits[].scheduled_at\": \"<string>\"\n }\n ],\n \"partial_payment_config\": {\n \"min_amount_in_cents\": 123,\n \"max_amount_in_cents\": 123,\n \"max_payment_methods\": 123,\n \"timeout_hours\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onepay.la/v1/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-idempotency"] = '<x-idempotency>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 123,\n \"title\": \"<string>\",\n \"currency\": \"<string>\",\n \"phone\": \"<string>\",\n \"email\": \"<string>\",\n \"reference\": \"<string>\",\n \"tax\": 123,\n \"external_id\": \"<string>\",\n \"description\": \"<string>\",\n \"document_url\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"schedule_at\": \"<string>\",\n \"metadata\": {},\n \"template_id\": 123,\n \"redirect_url\": \"<string>\",\n \"splits\": [\n {\n \"splits[].customer_id\": \"<string>\",\n \"splits[].split_type\": \"<string>\",\n \"splits[].split_value\": 123,\n \"splits[].description\": \"<string>\",\n \"splits[].account_id\": \"<string>\",\n \"splits[].scheduled_at\": \"<string>\"\n }\n ],\n \"partial_payment_config\": {\n \"min_amount_in_cents\": 123,\n \"max_amount_in_cents\": 123,\n \"max_payment_methods\": 123,\n \"timeout_hours\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"source": "Suscripción Premium",
"currency": "COP",
"amount": 1400000,
"amount_label": "$ 1.400.000",
"title": "Suscripción Premium",
"description": null,
"phone": "+573201112233",
"expiration_at": "2025-03-20T22:36:24.000000Z",
"due_date": null,
"document_link": null,
"external_id": null,
"allows": {
"cards": true,
"accounts": true,
"card_extra": false,
"realtime": false,
"pse": true,
"transfiya": true
},
"status": "pending",
"is_test": false,
"created_at": "2025-03-05T22:36:24.000000Z",
"paid_at": null,
"payment_link": "https://pagos.onepay.la/payment/9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"redirect_url": "https://app.onepay.la/thanks",
"provider_id": null,
"metadata": { "salesforce_id": "OP-554" },
"customer": null,
"method": null,
"splits": [],
"company": null,
"commission": null
}
{
"id": "9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"source": "Suscripción Premium",
"currency": "COP",
"amount": 1400000,
"amount_label": "$ 1.400.000",
"title": "Suscripción Premium",
"description": null,
"phone": "+573201112233",
"expiration_at": "2025-03-20T22:36:24.000000Z",
"due_date": null,
"document_link": null,
"external_id": null,
"allows": {
"cards": true,
"accounts": true,
"card_extra": false,
"realtime": false,
"pse": true,
"transfiya": true
},
"status": "pending",
"is_test": false,
"created_at": "2025-03-05T22:36:24.000000Z",
"paid_at": null,
"payment_link": "https://pagos.onepay.la/payment/9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"redirect_url": "https://app.onepay.la/thanks",
"provider_id": null,
"metadata": { "salesforce_id": "OP-554" },
"customer": null,
"method": null,
"splits": [],
"company": null,
"commission": null,
"partial_payment": {
"total_paid_in_cents": 0,
"total_paid_label": "$ 0",
"remaining_amount_in_cents": 140000000,
"remaining_label": "$ 1.400.000",
"progress_percentage": 0,
"is_fully_paid": false,
"min_amount_in_cents": 20000000,
"max_amount_in_cents": null,
"max_payment_methods": 3,
"timeout_hours": 24,
"partial_expires_at": null,
"charges": []
}
}
Crear cobro
POST
/
payments
Crear cobro
curl --request POST \
--url https://api.onepay.la/v1/payments \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'x-idempotency: <x-idempotency>' \
--data '
{
"amount": 123,
"title": "<string>",
"currency": "<string>",
"phone": "<string>",
"email": "<string>",
"reference": "<string>",
"tax": 123,
"external_id": "<string>",
"description": "<string>",
"document_url": "<string>",
"expiration_date": "<string>",
"schedule_at": "<string>",
"metadata": {},
"template_id": 123,
"redirect_url": "<string>",
"splits": [
{
"splits[].customer_id": "<string>",
"splits[].split_type": "<string>",
"splits[].split_value": 123,
"splits[].description": "<string>",
"splits[].account_id": "<string>",
"splits[].scheduled_at": "<string>"
}
],
"partial_payment_config": {
"min_amount_in_cents": 123,
"max_amount_in_cents": 123,
"max_payment_methods": 123,
"timeout_hours": 123
}
}
'import requests
url = "https://api.onepay.la/v1/payments"
payload = {
"amount": 123,
"title": "<string>",
"currency": "<string>",
"phone": "<string>",
"email": "<string>",
"reference": "<string>",
"tax": 123,
"external_id": "<string>",
"description": "<string>",
"document_url": "<string>",
"expiration_date": "<string>",
"schedule_at": "<string>",
"metadata": {},
"template_id": 123,
"redirect_url": "<string>",
"splits": [
{
"splits[].customer_id": "<string>",
"splits[].split_type": "<string>",
"splits[].split_value": 123,
"splits[].description": "<string>",
"splits[].account_id": "<string>",
"splits[].scheduled_at": "<string>"
}
],
"partial_payment_config": {
"min_amount_in_cents": 123,
"max_amount_in_cents": 123,
"max_payment_methods": 123,
"timeout_hours": 123
}
}
headers = {
"x-idempotency": "<x-idempotency>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'x-idempotency': '<x-idempotency>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
amount: 123,
title: '<string>',
currency: '<string>',
phone: '<string>',
email: '<string>',
reference: '<string>',
tax: 123,
external_id: '<string>',
description: '<string>',
document_url: '<string>',
expiration_date: '<string>',
schedule_at: '<string>',
metadata: {},
template_id: 123,
redirect_url: '<string>',
splits: [
{
'splits[].customer_id': '<string>',
'splits[].split_type': '<string>',
'splits[].split_value': 123,
'splits[].description': '<string>',
'splits[].account_id': '<string>',
'splits[].scheduled_at': '<string>'
}
],
partial_payment_config: {
min_amount_in_cents: 123,
max_amount_in_cents: 123,
max_payment_methods: 123,
timeout_hours: 123
}
})
};
fetch('https://api.onepay.la/v1/payments', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.onepay.la/v1/payments",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => 123,
'title' => '<string>',
'currency' => '<string>',
'phone' => '<string>',
'email' => '<string>',
'reference' => '<string>',
'tax' => 123,
'external_id' => '<string>',
'description' => '<string>',
'document_url' => '<string>',
'expiration_date' => '<string>',
'schedule_at' => '<string>',
'metadata' => [
],
'template_id' => 123,
'redirect_url' => '<string>',
'splits' => [
[
'splits[].customer_id' => '<string>',
'splits[].split_type' => '<string>',
'splits[].split_value' => 123,
'splits[].description' => '<string>',
'splits[].account_id' => '<string>',
'splits[].scheduled_at' => '<string>'
]
],
'partial_payment_config' => [
'min_amount_in_cents' => 123,
'max_amount_in_cents' => 123,
'max_payment_methods' => 123,
'timeout_hours' => 123
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json",
"x-idempotency: <x-idempotency>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.onepay.la/v1/payments"
payload := strings.NewReader("{\n \"amount\": 123,\n \"title\": \"<string>\",\n \"currency\": \"<string>\",\n \"phone\": \"<string>\",\n \"email\": \"<string>\",\n \"reference\": \"<string>\",\n \"tax\": 123,\n \"external_id\": \"<string>\",\n \"description\": \"<string>\",\n \"document_url\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"schedule_at\": \"<string>\",\n \"metadata\": {},\n \"template_id\": 123,\n \"redirect_url\": \"<string>\",\n \"splits\": [\n {\n \"splits[].customer_id\": \"<string>\",\n \"splits[].split_type\": \"<string>\",\n \"splits[].split_value\": 123,\n \"splits[].description\": \"<string>\",\n \"splits[].account_id\": \"<string>\",\n \"splits[].scheduled_at\": \"<string>\"\n }\n ],\n \"partial_payment_config\": {\n \"min_amount_in_cents\": 123,\n \"max_amount_in_cents\": 123,\n \"max_payment_methods\": 123,\n \"timeout_hours\": 123\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("x-idempotency", "<x-idempotency>")
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.onepay.la/v1/payments")
.header("x-idempotency", "<x-idempotency>")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"amount\": 123,\n \"title\": \"<string>\",\n \"currency\": \"<string>\",\n \"phone\": \"<string>\",\n \"email\": \"<string>\",\n \"reference\": \"<string>\",\n \"tax\": 123,\n \"external_id\": \"<string>\",\n \"description\": \"<string>\",\n \"document_url\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"schedule_at\": \"<string>\",\n \"metadata\": {},\n \"template_id\": 123,\n \"redirect_url\": \"<string>\",\n \"splits\": [\n {\n \"splits[].customer_id\": \"<string>\",\n \"splits[].split_type\": \"<string>\",\n \"splits[].split_value\": 123,\n \"splits[].description\": \"<string>\",\n \"splits[].account_id\": \"<string>\",\n \"splits[].scheduled_at\": \"<string>\"\n }\n ],\n \"partial_payment_config\": {\n \"min_amount_in_cents\": 123,\n \"max_amount_in_cents\": 123,\n \"max_payment_methods\": 123,\n \"timeout_hours\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.onepay.la/v1/payments")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-idempotency"] = '<x-idempotency>'
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": 123,\n \"title\": \"<string>\",\n \"currency\": \"<string>\",\n \"phone\": \"<string>\",\n \"email\": \"<string>\",\n \"reference\": \"<string>\",\n \"tax\": 123,\n \"external_id\": \"<string>\",\n \"description\": \"<string>\",\n \"document_url\": \"<string>\",\n \"expiration_date\": \"<string>\",\n \"schedule_at\": \"<string>\",\n \"metadata\": {},\n \"template_id\": 123,\n \"redirect_url\": \"<string>\",\n \"splits\": [\n {\n \"splits[].customer_id\": \"<string>\",\n \"splits[].split_type\": \"<string>\",\n \"splits[].split_value\": 123,\n \"splits[].description\": \"<string>\",\n \"splits[].account_id\": \"<string>\",\n \"splits[].scheduled_at\": \"<string>\"\n }\n ],\n \"partial_payment_config\": {\n \"min_amount_in_cents\": 123,\n \"max_amount_in_cents\": 123,\n \"max_payment_methods\": 123,\n \"timeout_hours\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"id": "9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"source": "Suscripción Premium",
"currency": "COP",
"amount": 1400000,
"amount_label": "$ 1.400.000",
"title": "Suscripción Premium",
"description": null,
"phone": "+573201112233",
"expiration_at": "2025-03-20T22:36:24.000000Z",
"due_date": null,
"document_link": null,
"external_id": null,
"allows": {
"cards": true,
"accounts": true,
"card_extra": false,
"realtime": false,
"pse": true,
"transfiya": true
},
"status": "pending",
"is_test": false,
"created_at": "2025-03-05T22:36:24.000000Z",
"paid_at": null,
"payment_link": "https://pagos.onepay.la/payment/9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"redirect_url": "https://app.onepay.la/thanks",
"provider_id": null,
"metadata": { "salesforce_id": "OP-554" },
"customer": null,
"method": null,
"splits": [],
"company": null,
"commission": null
}
{
"id": "9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"source": "Suscripción Premium",
"currency": "COP",
"amount": 1400000,
"amount_label": "$ 1.400.000",
"title": "Suscripción Premium",
"description": null,
"phone": "+573201112233",
"expiration_at": "2025-03-20T22:36:24.000000Z",
"due_date": null,
"document_link": null,
"external_id": null,
"allows": {
"cards": true,
"accounts": true,
"card_extra": false,
"realtime": false,
"pse": true,
"transfiya": true
},
"status": "pending",
"is_test": false,
"created_at": "2025-03-05T22:36:24.000000Z",
"paid_at": null,
"payment_link": "https://pagos.onepay.la/payment/9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"redirect_url": "https://app.onepay.la/thanks",
"provider_id": null,
"metadata": { "salesforce_id": "OP-554" },
"customer": null,
"method": null,
"splits": [],
"company": null,
"commission": null,
"partial_payment": {
"total_paid_in_cents": 0,
"total_paid_label": "$ 0",
"remaining_amount_in_cents": 140000000,
"remaining_label": "$ 1.400.000",
"progress_percentage": 0,
"is_fully_paid": false,
"min_amount_in_cents": 20000000,
"max_amount_in_cents": null,
"max_payment_methods": 3,
"timeout_hours": 24,
"partial_expires_at": null,
"charges": []
}
}
Crea un nuevo pago en tu cuenta.
Headers
Token único para garantizar la idempotencia de la petición
Body
Monto a cobrar cuando el cliente recibe el pago
Breve mensaje que se mostrará al usuario al realizar el pago
Código de moneda ISO (COP, USD) por defecto COP
Número de teléfono del cliente a enviar la solicitud de pago via whatsapp.
Campo opcional si quieres enviar una solicitud de pago via email
Referencia de pago para que el usuario pueda interactuar con el portal de recaudo.
Monto en la misma moneda con valor de impuestos, el valor predeterminado será del 19%
ID externo para relacionar el pago con un registro ya existente en tu sistema.
Descripción del pago
URL de un documento que se mostrará al usuario para que pueda realizar el pago.
Fecha de expiración del pago en formato YYYY-MM-DD HH:MM:SS
Fecha en la que el pago será enviado al usuario. YYYY-MM-DD.
Metadatos adicionales del pago en formato JSON
La llave
template_id está reservada. Si la envías dentro de metadata recibirás un error 422: úsala como campo de primer nivel.Plantilla de WhatsApp con la que se enviará el cobro. Si no la envías, OnePay elige la plantilla según la configuración de tu canal.Obtén los valores válidos con
GET /templates: solo sirven los id que traen selectable: true, es decir, plantillas aprobadas de categoría PAYMENT que pertenecen a tu empresa o son genéricas compartidas contigo.Si la plantilla no existe, no está aprobada, no es de cobro o no está disponible para tu empresa, la petición falla con un error 422 y el cobro no se crea.
La plantilla queda fijada en el cobro: la verás en
metadata.template_id de la respuesta y se usará también en los reenvíos. Si el cobro entra al motor de cobranzas, los recordatorios por etapa usan la plantilla configurada en la regla correspondiente.URL de redirección
Los pagos divididos permiten distribuir automáticamente un único pago entre múltiples destinatarios según reglas preestablecidas, optimizando la gestión de fondos sin necesidad de cálculos manuales o costos adicionales.
Show Campos de splits[]
Show Campos de splits[]
ID del cliente beneficiario del split. Ver clientes.
Tipo de distribución:
percentage— Porcentaje del monto total (en centésimas:1000= 10%)fixed— Monto fijo en centavos
Si el total de splits supera el 100% del monto o excede el monto total, la operación será rechazada.
Valor del split según el tipo:
- Si
split_typeespercentage: valor en centésimas (500= 5%,10000= 100%) - Si
split_typeesfixed: monto en centavos
Descripción interna del split.
ID de la cuenta bancaria donde se recibirá el split. Si no se especifica, se usa la cuenta principal del cliente.
Fecha programada para realizar el split (
YYYY-MM-DD HH:mm:ss). Si es null, se ejecuta de inmediato.Configuración para pagos parciales. Permite que un cobro sea pagado en múltiples transacciones.
Requiere que el feature Pagos Parciales esté habilitado en tu cuenta. Contacta a soporte para activarlo.
Show Propiedades
Show Propiedades
Monto mínimo por pago parcial en centavos. Mínimo: 100 (equivale a $1).
Monto máximo por pago parcial en centavos. Si no se envía, el máximo es el saldo restante.
Número máximo de pagos parciales permitidos. Mínimo: 2, Máximo: 10. Por defecto: 3.
Horas antes de que expire la ventana de pago parcial después del primer abono. Mínimo: 1, Máximo: 720. Por defecto: 24.
Métodos de pago permitidosEl método de pago disponible depende de la configuración de tu cuenta. Comunícate con el equipo de soporte para habilitar métodos adicionales.
Solo uno de los dos (
| Método | Campo requerido | Descripción |
|---|---|---|
| Cuenta bancaria (ACH) | account_id | Débito directo desde cuenta bancaria registrada |
| Tarjeta de crédito/débito | card_id | Cargo a tarjeta tokenizada |
account_id o card_id) debe estar presente en la petición.Ejemplos de uso
- curl
- JavaScript
- Python
curl https://api.onepay.la/v1/payments \
-X POST \
-H "Authorization: Bearer sk_test_xxx" \
-H "Content-Type: application/json" \
-H "x-idempotency: payment-123" \
-d '{
"amount": 1400000,
"currency": "COP",
"title": "Suscripción Premium",
"reference": "INV-2045",
"phone": "+573201112233",
"email": "customer@example.com",
"redirect_url": "https://app.onepay.la/thanks",
"allows": {
"cards": true,
"accounts": true,
"pse": true
},
"metadata": {
"salesforce_id": "OP-554"
}
}'
import fetch from 'node-fetch';
const body = {
amount: 1400000,
currency: 'COP',
title: 'Suscripción Premium',
reference: 'INV-2045',
phone: '+573201112233',
email: 'customer@example.com',
redirect_url: 'https://app.onepay.la/thanks',
allows: {
cards: true,
accounts: true,
pse: true
},
metadata: {
salesforce_id: 'OP-554'
}
};
await fetch('https://api.onepay.la/v1/payments', {
method: 'POST',
headers: {
Authorization: 'Bearer sk_test_xxx',
'Content-Type': 'application/json',
'x-idempotency': 'payment-123'
},
body: JSON.stringify(body)
});
import requests
payload = {
"amount": 1400000,
"currency": "COP",
"title": "Suscripción Premium",
"reference": "INV-2045",
"phone": "+573201112233",
"email": "customer@example.com",
"redirect_url": "https://app.onepay.la/thanks",
"allows": {
"cards": True,
"accounts": True,
"pse": True
},
"metadata": {
"salesforce_id": "OP-554"
}
}
response = requests.post(
"https://api.onepay.la/v1/payments",
headers={
"Authorization": "Bearer sk_test_xxx",
"x-idempotency": "payment-123"
},
json=payload,
timeout=15
)
response.raise_for_status()
print(response.json())
Response
Identificador único del pago
Monto del pago en pesos
Código de moneda ISO
Estado del pago:
pending- Pendienteprocessing- Procesandoapproved- Aprobadodeclined- Rechazadocancelled- Canceladoexpired- Expiradopartially_paid- Parcialmente pagadopartial_expired- Pago parcial expirado
ID del cliente que realizó el pago
Método de pago utilizado
Descripción del pago
Metadatos adicionales del pago
Información de pago parcial. Solo presente cuando
partial_payment_config está configurado.Show Propiedades
Show Propiedades
Total pagado hasta el momento en centavos
Total pagado formateado (ej: “$50.000”)
Saldo restante por pagar en centavos
Saldo restante formateado
Porcentaje de progreso del pago (0 a 100)
Indica si el pago fue completado totalmente
Monto mínimo por pago parcial en centavos
Monto máximo por pago parcial en centavos
Número máximo de pagos parciales permitidos
Horas de expiración configuradas
Fecha de expiración del pago parcial (ISO 8601). Se establece después del primer abono.
Lista de cargos pagados
Show Propiedades del cargo
Show Propiedades del cargo
ID del cargo
Monto del cargo en centavos
Monto formateado
Tipo de método de pago (ej: “card”, “account”, “pse”)
Descripción del método de pago
Fecha de pago (ISO 8601)
Fecha y hora de creación en formato ISO 8601
Ejemplo de respuesta
{
"id": "9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"source": "Suscripción Premium",
"currency": "COP",
"amount": 1400000,
"amount_label": "$ 1.400.000",
"title": "Suscripción Premium",
"description": null,
"phone": "+573201112233",
"expiration_at": "2025-03-20T22:36:24.000000Z",
"due_date": null,
"document_link": null,
"external_id": null,
"allows": {
"cards": true,
"accounts": true,
"card_extra": false,
"realtime": false,
"pse": true,
"transfiya": true
},
"status": "pending",
"is_test": false,
"created_at": "2025-03-05T22:36:24.000000Z",
"paid_at": null,
"payment_link": "https://pagos.onepay.la/payment/9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"redirect_url": "https://app.onepay.la/thanks",
"provider_id": null,
"metadata": { "salesforce_id": "OP-554" },
"customer": null,
"method": null,
"splits": [],
"company": null,
"commission": null
}
{
"id": "9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"source": "Suscripción Premium",
"currency": "COP",
"amount": 1400000,
"amount_label": "$ 1.400.000",
"title": "Suscripción Premium",
"description": null,
"phone": "+573201112233",
"expiration_at": "2025-03-20T22:36:24.000000Z",
"due_date": null,
"document_link": null,
"external_id": null,
"allows": {
"cards": true,
"accounts": true,
"card_extra": false,
"realtime": false,
"pse": true,
"transfiya": true
},
"status": "pending",
"is_test": false,
"created_at": "2025-03-05T22:36:24.000000Z",
"paid_at": null,
"payment_link": "https://pagos.onepay.la/payment/9e5ccd4a-d2f0-49dd-87fc-a0da752bd166",
"redirect_url": "https://app.onepay.la/thanks",
"provider_id": null,
"metadata": { "salesforce_id": "OP-554" },
"customer": null,
"method": null,
"splits": [],
"company": null,
"commission": null,
"partial_payment": {
"total_paid_in_cents": 0,
"total_paid_label": "$ 0",
"remaining_amount_in_cents": 140000000,
"remaining_label": "$ 1.400.000",
"progress_percentage": 0,
"is_fully_paid": false,
"min_amount_in_cents": 20000000,
"max_amount_in_cents": null,
"max_payment_methods": 3,
"timeout_hours": 24,
"partial_expires_at": null,
"charges": []
}
}
Was this page helpful?
⌘I