Proceso de Integración
BETALa API de Pagos de Bold está diseñada con una arquitectura REST simple y poderosa. Utiliza URL predecibles orientadas a recursos, acepta cuerpos de solicitud en formato JSON y emplea verbos HTTP estándar para interactuar con tus aplicaciones de manera intuitiva. Además, garantiza respuestas en JSON bien estructuradas y utiliza códigos de estado HTTP convencionales para facilitar el manejo de errores y respuestas.
Seguridad
La API funciona bajo un esquema de seguridad utilizando una llave de identidad (API key), la cual deberá ser enviada en las cabeceras de cada petición.
Autenticación de peticiones
Para autenticar tus peticiones, incluye la siguiente cabecera (header) en cada solicitud:
Llave | Valor |
---|---|
Authorization | x-api-key <llave_de_identidad> |
Asegúrate de reemplazar <llave de identidad>
con la correspondiente a tu comercio.
Por ejemplo, si la llave de identidad es:
DZSkDqh2iWmpYQg204C2fLigQerhPGXAcm5WyujxwYHQuedaría de la siguiente forma:
Llave | Valor |
---|---|
Authorization | x-api-key DZSkDqh2iWmpYQg204C2fLigQerhPGXAcm5WyujxwYH |
URL base
Todas las solicitudes a los servicios deben realizarse utilizando la siguiente URL base:
https://integrations.api.bold.co
Crea una intención de pago
Este endpoint permite iniciar un proceso de pago creando una "intención de pago". Funciona como el primer paso en el flujo de procesamiento de pagos, donde registras los detalles de la transacción como el monto, la moneda, información del cliente y detalles del método de pago.
La intención de pago tiene un identificador único su reference_id que podrás utilizar para seguir y gestionar esta transacción a lo largo de su ciclo de vida.
Endpoint
POST /online/payment-intent
Solicitud
Datos necesarios para crear un intento de pago.
Esquema: PaymentIntent
Content-Type: application/json
{
"reference_id": "ORD-12345",
"amount": {
"currency": "COP",
"total_amount": 100000,
"tip_amount": 10000,
"taxes": [
{
"type": "VAT",
"base": 5000,
"value": 500
}
]
},
"description": "Compra de productos electrónicos",
"confirm": true,
"callback_url": "https://mi-tienda.com/confirmacion-pago",
"metadata": [
{
"key": "promo_code",
"value": "DESCUENTO10"
}
],
"test": true,
"customer": {
"name": "Juan Pérez",
"phone": "3001234567",
"email": "juan.perez@example.com",
"billing_address": {
"street1": "Calle 123 #45-67",
"street2": "Apto 202",
"city": "Bogotá",
"postal_code": "110111",
"province": "Cundinamarca",
"country_code": "CO",
"phone": "3001234567"
},
"shipping_address": {
"street1": "Carrera 98 #34-56",
"street2": "Casa 5",
"city": "Medellín",
"postal_code": "050001",
"province": "Antioquia",
"country_code": "CO",
"phone": "3012345678"
}
},
"payment_method": { //Ver lista de metodos de pago que se pueden usar para el pago.
"type": "CREDIT_CARD",
"card": {
"brand": "VISA",
"cardholder_name": "Jhon Doe",
"exp_month": "12",
"exp_year": "2035",
"installments": 1,
"card_number": "4111111111111111",
"cvc": "123"
},
"billing_address": {
"street1": "Calle 123 #45-67",
"street2": "Apto 202",
"city": "Bogotá",
"postal_code": "110111",
"province": "Cundinamarca",
"country_code": "CO",
"phone": "3001234567"
}
},
"device_fingerprint": {
"ip": "192.168.1.1",
"device_type": "Smartphone",
"os": "iOS 15.4",
"browser": "Safari",
"accept_header": "text/html,application/xhtml+xml",
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1",
"java_enabled": false,
"language": "es-CO",
"color_depth": 24,
"screen_height": 844,
"screen_width": 390,
"time_zone_offset": -300,
"latitude": "4.6097100",
"longitude": "-74.0817500",
"model": "iPhone 13",
"platform": "iOS"
}
}
Respuestas
- 200: Respuesta exitosa.
- Esquema: PaymentIntentResponse
- Content-Type: application/json
{
"reference_id": "ORD-12345",
"amount": {
"currency": "COP",
"total_amount": 100000,
"tip_amount": 10000,
"taxes": [
{
"type": "VAT",
"base": 5000,
"value": 500
}
]
},
"description": "Compra de productos electrónicos",
"creation_date": "192345678900",
"status": "ACTIVE",
"bold_transaction_id": "TXN1234567890",
"callback_url": "https://mi-tienda.com/confirmacion-pago",
"metadata": [
{
"key": "promo_code",
"value": "DESCUENTO10"
}
],
"test": true,
"customer": {
"name": "Juan Pérez",
"phone": "3001234567",
"email": "juan.perez@example.com",
"billing_address": {
"street1": "Calle 123 #45-67",
"street2": "Apto 202",
"city": "Bogotá",
"postal_code": "110111",
"province": "Cundinamarca",
"country_code": "CO",
"phone": "3001234567"
},
"shipping_address": {
"street1": "Carrera 98 #34-56",
"street2": "Casa 5",
"city": "Medellín",
"postal_code": "050001",
"province": "Antioquia",
"country_code": "CO",
"phone": "3012345678"
}
}
}
- 400: Error de validación.
- Esquema: ValidationError
- Content-Type: application/json
{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}
Obtener la información de una intención de pago
Este endpoint te permite consultar todos los detalles de una intención de pago previamente creada utilizando su referencia única reference_id.
Es útil para verificar el estado actual de un pago, confirmar los detalles del pedido o para mostrar información actualizada al cliente sobre su transacción en proceso.
Endpoint
POST /online/payment-intent/{reference_id} //Referencia de pago
Respuestas
- 200: Respuesta exitosa.
- Esquema: PaymentIntentResponse
- Content-Type: application/json
{
"reference_id": "ORD-12345",
"amount": {
"currency": "COP",
"total_amount": 100000,
"tip_amount": 10000,
"taxes": [
{
"type": "VAT",
"base": 5000,
"value": 500
}
]
},
"description": "Compra de productos electrónicos",
"creation_date": "192345678900",
"status": "ACTIVE",
"bold_transaction_id": "TXN1234567890",
"callback_url": "https://mi-tienda.com/confirmacion-pago",
"metadata": [
{
"key": "promo_code",
"value": "DESCUENTO10"
}
],
"test": true,
"customer": {
"name": "Juan Pérez",
"phone": "3001234567",
"email": "juan.perez@example.com",
"billing_address": {
"street1": "Calle 123 #45-67",
"street2": "Apto 202",
"city": "Bogotá",
"postal_code": "110111",
"province": "Cundinamarca",
"country_code": "CO",
"phone": "3001234567"
},
"shipping_address": {
"street1": "Carrera 98 #34-56",
"street2": "Casa 5",
"city": "Medellín",
"postal_code": "050001",
"province": "Antioquia",
"country_code": "CO",
"phone": "3012345678"
}
}
}
- 404: PaymentNotFound.
Actualizar la información de una intención de pago
Con este endpoint puedes modificar los datos de una intención de pago existente y aun no se haya pagado, como actualizar montos, información del cliente o cualquier otro parámetro relevante
Esto resulta especialmente útil cuando hay cambios en el pedido después de haber creado la intención inicial o cuando necesitas corregir información proporcionada anteriormente.
Endpoint
PUT /online/payment-intent
Solicitud
Datos necesarios para actualizar una intención de pago.
Esquema: PaymentIntent
Content-Type: application/json
{
"reference_id": "ORD-12345",
"amount": {
"currency": "COP",
"total_amount": 100000,
"tip_amount": 10000,
"taxes": [
{
"type": "VAT",
"base": 5000,
"value": 500
}
]
},
"description": "Compra de productos electrónicos",
"creation_date": "192345678900",
"status": "ACTIVE",
"bold_transaction_id": "TXN1234567890",
"callback_url": "https://mi-tienda.com/confirmacion-pago",
"metadata": [
{
"key": "promo_code",
"value": "DESCUENTO10"
}
],
"test": true,
"customer": {
"name": "Juan Pérez",
"phone": "3001234567",
"email": "juan.perez@example.com",
"billing_address": {
"street1": "Calle 123 #45-67",
"street2": "Apto 202",
"city": "Bogotá",
"postal_code": "110111",
"province": "Cundinamarca",
"country_code": "CO",
"phone": "3001234567"
},
"shipping_address": {
"street1": "Carrera 98 #34-56",
"street2": "Casa 5",
"city": "Medellín",
"postal_code": "050001",
"province": "Antioquia",
"country_code": "CO",
"phone": "3012345678"
}
}
}
Respuestas
- 200: Respuesta exitosa.
- Esquema: PaymentIntentResponse
- Content-Type: application/json
{
"reference_id": "ORD-12345",
"amount": {
"currency": "COP",
"total_amount": 100000,
"tip_amount": 10000,
"taxes": [
{
"type": "VAT",
"base": 5000,
"value": 500
}
]
},
"description": "Compra de productos electrónicos",
"creation_date": "192345678900",
"status": "ACTIVE",
"bold_transaction_id": "TXN1234567890",
"callback_url": "https://mi-tienda.com/confirmacion-pago",
"metadata": [
{
"key": "promo_code",
"value": "DESCUENTO10"
}
],
"test": true,
"customer": {
"name": "Juan Pérez",
"phone": "3001234567",
"email": "juan.perez@example.com",
"billing_address": {
"street1": "Calle 123 #45-67",
"street2": "Apto 202",
"city": "Bogotá",
"postal_code": "110111",
"province": "Cundinamarca",
"country_code": "CO",
"phone": "3001234567"
},
"shipping_address": {
"street1": "Carrera 98 #34-56",
"street2": "Casa 5",
"city": "Medellín",
"postal_code": "050001",
"province": "Antioquia",
"country_code": "CO",
"phone": "3012345678"
}
}
}
- 400: Error de validación.
- Esquema: ValidationError
- Content-Type: application/json
{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}
- 404: PaymentNotFound.
Realizar un intento de pago
Este endpoint ejecuta el procesamiento efectivo del pago utilizando los datos del método de pago seleccionado por el cliente.
Es el paso que realmente inicia la autorización y captura de fondos basado en una intención de pago existente. Dependiendo del método de pago utilizado, puede requerir acciones adicionales como redirecciones para autenticación o confirmación por parte del usuario.
Endpoint
POST /online/payment
Solicitud
Datos necesarios para crear un intento de pago.
Esquema: PaymentAttempt
Content-Type: application/json
{
"reference_id": "ORD-123456",
"metadata": [
{
"key": "campaign",
"value": "black-friday"
}
],
"test": true,
"payer": {
"person_type": "NATURAL_PERSON",
"name": "Laura Gómez",
"phone": "3001234567",
"email": "laura.gomez@example.com",
"document_type": "CEDULA",
"document_number": "1012345678",
"terms_and_conditions": {
"acceptance_date": "2025-02-17T15:18:22.671Z",
"version": "string"
},
"data_treatment": {
"acceptance_date": "2025-02-17T15:18:22.671Z",
"version": "string"
}
},
"payment_method": { //Ver lista de metodos de pago que se pueden usar para el pago.
"type": "CREDIT_CARD",
"card": {
"brand": "VISA",
"cardholder_name": "Jhon Doe",
"exp_month": "12",
"exp_year": "2035",
"installments": 1,
"card_number": "4111111111111111",
"cvc": "123"
},
"billing_address": {
"street1": "Calle 123 #45-67",
"street2": "Apto 202",
"city": "Bogotá",
"postal_code": "110111",
"province": "Cundinamarca",
"country_code": "CO",
"phone": "3001234567"
}
},
"device_fingerprint": {
"ip": "192.168.1.1",
"device_type": "Smartphone",
"os": "iOS 15.4",
"browser": "Safari",
"accept_header": "text/html,application/xhtml+xml",
"user_agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 15_4 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.0 Mobile/15E148 Safari/604.1",
"java_enabled": false,
"language": "es-CO",
"color_depth": 24,
"screen_height": 844,
"screen_width": 390,
"time_zone_offset": -300,
"latitude": "4.6097100",
"longitude": "-74.0817500",
"model": "iPhone 13",
"platform": "iOS"
}
}
Respuestas
- 200: Respuesta exitosa.
- Esquema: PaymentAttemptResponse
- Content-Type: application/json
{
"transaction_id": "TXN0987654321",
"next_action": { // Presente si existe una accion requerida para poder continuar con el pago como autenticacion o validacion de un tercero
"redirect_url": "https://mi-banco.com/pago-pse",
"redirect_method": "POST"
},
"status": "PROCESSING" // Estado actual de la transacción (siempre será PROCESSING en esta respuesta).
}
- 400: Error de validación.
- Esquema: ValidationError
- Content-Type: application/json
{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string"
}
]
}
Obtener el estado de un intento de pago
Este endpoint te permite consultar el estado actual de un pago específico mediante su referencia única (reference_id). Proporciona información detallada sobre si el pago ha sido aprobado, rechazado o se encuentra en procesamiento, así como los detalles completos de la transacción.
Es complemento para actualizar tus sistemas internos y notificar al cliente sobre el resultado de su pago, recomendamos utilizarlo en conjunto con el webhook para recibir notificaciones en tiempo real.
Endpoint
POST /online/payment/{reference_id} //Referencia de pago
Respuestas
- 200: Respuesta exitosa.
- Esquema: PaymentAttemptStatusResponse
- Content-Type: application/json
{
"transaction_id": "TXN0987654321",
"reference_id": "ORD-123456",
"status": "APPROVED",
"amount": {
"currency": "COP",
"total_amount": 100000,
"tip_amount": 10000,
"taxes": [
{
"type": "VAT",
"base": 5000,
"value": 500
}
]
},
"payment_method": { //Ver lista de metodos de pago que se pueden usar para el pago.
"type": "CREDIT_CARD",
"card": {
"brand": "VISA",
"cardholder_name": "Jhon Doe",
"exp_month": "12",
"exp_year": "2035",
"installments": 1,
"card_number": "4111111111111111",
"cvc": "123"
},
"billing_address": {
"street1": "Calle 123 #45-67",
"street2": "Apto 202",
"city": "Bogotá",
"postal_code": "110111",
"province": "Cundinamarca",
"country_code": "CO",
"phone": "3001234567"
}
},
"payer": {
"person_type": "NATURAL_PERSON",
"name": "Laura Gómez",
"phone": "3001234567",
"email": "laura.gomez@example.com",
"document_type": "CEDULA",
"document_number": "1012345678",
"terms_and_conditions": {
"acceptance_date": "2025-02-17T17:43:17.531Z",
"version": "string"
},
"data_treatment": {
"acceptance_date": "2025-02-17T17:43:17.531Z",
"version": "string"
}
},
"sale_date": "2025-02-17T17:43:17.531Z",
"metadata": [
{
"key": "campaign",
"value": "black-friday"
}
]
}
- 404: PaymentNotFound.