### Request Body Example
Source: https://yappy-docs.vercel.app/boton-pago/api-payment-wc
Example JSON payload for the /payments/payment-wc request. Ensure all monetary values are formatted as strings with two decimal places.
```json
{
"merchantId": "5c2d13e5-537f-43f1-b1d0-d90d8fdaf8be",
"orderId": "ORD12345",
"domain": "https://www.tudominio.com",
"paymentDate": 1777301827,
"aliasYappy": "60021001",
"ipnUrl": "https://www.tudominio.com/api/yappy/ipn",
"shipping": "0.00",
"discount": "0.00",
"taxes": "0.35",
"subtotal": "5.00",
"total": "5.35"
}
```
--------------------------------
### Response Example
Source: https://yappy-docs.vercel.app/integraciones-yappy/api-history
Successful response containing paginated transaction data.
```json
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
},
"body": {
"pagination": {
"limit": 10,
"token": "BH/ytDLG1hzQ9xTx...",
"end_date": "2026-06-15",
"start_date": "2026-06-01",
"has_next_page": false
},
"transactions": [
{
"id": "FCIZK-90454086",
"number": "MOCK-g80ijzik",
"type": "TXN-ECOM",
"status": "COMPLETED",
"description": "Por pedido: xJoK02cTOEUI",
"role": "CREDIT",
"category": "INTRABANK",
"fee": {
"currency": "USD",
"amount": 0.16
},
"charge": {
"currency": "USD",
"tax": 0,
"tip": 0,
"amount": 10.11,
"partial_amount": 10.11
},
"debitor": {
"alias": "+50768994657",
"complete_name": "Kallie Keeling",
"alias_type": "P",
"bank_name": "Banco General"
},
"creditor": {
"alias": "Sitio web",
"complete_name": "Mi Comercio S.A.",
"alias_type": "C",
"bank_name": "Banco General"
},
"cut_off_date": "2026-06-10",
"payment_date": "2026-06-10T14:31:11.173Z",
"bill_description": "",
"registration_date": "2026-06-10T14:31:10.000Z"
}
]
}
}
```
--------------------------------
### Response Example
Source: https://yappy-docs.vercel.app/boton-pago/api-validate
The expected JSON response containing the session token and epoch time.
```json
{
"status": {
"code": "0000",
"description": "Correct execution"
},
"body": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6Ikp...",
"epochTime": 1777301827
}
}
```
--------------------------------
### Response 200 OK Example
Source: https://yappy-docs.vercel.app/boton-pago/api-payment-wc
Successful response structure containing the transaction ID and token.
```json
{
"status": {
"code": "0000",
"description": "Correct execution"
},
"body": {
"transactionId": "MRALB-83409803",
"token": "eyJhbGciOiJIUzI1NiIs...",
"documentName": "transactions"
}
}
```
--------------------------------
### Response structure for collection methods
Source: https://yappy-docs.vercel.app/integraciones-yappy/api-collection-method
Example of a successful 200 OK response containing the list of configured collection points and their associated details.
```json
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
},
"body": {
"collections": [
{
"alias": "techgeeks",
"type": "Directorio"
},
{
"alias": "Ventas en sitio",
"type": "Punto Yappy"
},
{
"alias": "Sucursal Multiplaza",
"type": "Integración Yappy",
"details": [
{ "id": "provided_group_id", "value": "smultiplaza" },
{ "id": "deviceId", "value": "smultiplaza-01" },
{ "id": "deviceId", "value": "smultiplaza-02" }
]
},
{
"alias": "Sitio web",
"type": "Boton de Pago",
"details": [
{ "id": "url", "value": "https://www.micomercio.com" }
]
}
]
}
}
```
--------------------------------
### Request Body Example
Source: https://yappy-docs.vercel.app/boton-pago/api-validate
The JSON structure required for the POST request to validate the merchant.
```json
{
"merchantId": "5c2d13e5-537f-43f1-b1d0-d90d8fdaf8be",
"urlDomain": "https://www.tudominio.com"
}
```
--------------------------------
### Request Body Examples
Source: https://yappy-docs.vercel.app/integraciones-yappy/api-history
JSON payloads for requesting transaction history, either without filters or with a specific collection point filter.
```json
{
"body": {
"pagination": {
"start_date": "2026-06-01",
"end_date": "2026-06-15",
"limit": 10
}
}
}
```
```json
{
"body": {
"pagination": {
"start_date": "2026-06-01",
"end_date": "2026-06-15",
"limit": 10
},
"filter": [
{
"id": "COLLECTION_ALIAS",
"value": "Sitio web"
}
]
}
}
```
--------------------------------
### Request collection methods
Source: https://yappy-docs.vercel.app/integraciones-yappy/api-collection-method
Perform a GET request to retrieve the list of collection methods. No body or parameters are required.
```http
GET https://api-integration-business-uat.yappycloud.com/v1/collection-method
```
--------------------------------
### GET /api/yappy/ipn
Source: https://yappy-docs.vercel.app/boton-pago/ipn
Endpoint que el backend debe exponer para recibir notificaciones de estado de transacciones desde Yappy.
```APIDOC
## GET /api/yappy/ipn
### Description
Endpoint expuesto por el comercio para recibir notificaciones instantáneas (IPN) sobre el estado de una orden. Yappy invoca este endpoint mediante una solicitud GET con los detalles de la transacción como parámetros de consulta.
### Method
GET
### Parameters
#### Query Parameters
- **orderId** (string) - Required - El orderId enviado al crear la orden.
- **hash** (string) - Required - Firma HMAC-SHA256 para validar la integridad de la notificación.
- **status** (string) - Required - Estado final de la transacción: 'E' (Ejecutado), 'C' (Cancelado), o 'X' (Expirado).
- **domain** (string) - Required - Dominio registrado en Yappy Comercial WEB.
- **confirmationNumber** (string) - Required - ID de la transacción del lado de Yappy para conciliación.
### Request Example
GET https://www.tudominio.com/api/yappy/ipn?orderId=ORD12345&hash=a3c1f8...e9d4&status=E&domain=https://www.tudominio.com&confirmationNumber=8f3e2c91-...
### Response
#### Success Response (200)
- El servidor debe responder con HTTP 200 en menos de 5 segundos para confirmar la recepción de la notificación.
```
--------------------------------
### GET /session/logout
Source: https://yappy-docs.vercel.app/integraciones-yappy/auth-logout
Closes an active work session previously opened with /session/login. This endpoint uses the GET method and does not require a request body.
```APIDOC
## GET /session/logout
### Description
Closes an active work session previously opened with /session/login. Note that this endpoint uses the GET method.
### Method
GET
### Endpoint
https://api-integration-business-uat.yappycloud.com/v1/session/logout
### Request Example
GET https://api-integration-business-uat.yappycloud.com/v1/session/logout
### Response
#### Success Response (200)
- **status** (object) - Contains the execution code and description.
#### Response Example
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
}
}
```
--------------------------------
### POST /qr/generate/DYN
Source: https://yappy-docs.vercel.app/yappy-en-caja/flujo-qr-dinamico
Genera un código QR dinámico para una transacción específica.
```APIDOC
## POST /qr/generate/DYN
### Description
Genera un QR dinámico basado en el monto del cobro. Retorna un transactionId y un hash necesario para la renderización visual del código.
### Method
POST
### Endpoint
/qr/generate/DYN
```
--------------------------------
### GET /session/logout
Source: https://yappy-docs.vercel.app/integraciones-yappy/overview
Terminates the currently active session.
```APIDOC
## GET /session/logout
### Description
Closes the active session.
### Method
GET
### Endpoint
/session/logout
```
--------------------------------
### GET /collection-method
Source: https://yappy-docs.vercel.app/integraciones-yappy/api-collection-method
Retrieves all collection points configured for the authenticated merchant.
```APIDOC
## GET /collection-method
### Description
Returns all collection points configured in Yappy Comercial for the authenticated merchant, along with their type and specific details. This is useful for obtaining exact names for filtering in `/movement/history` and auditing active collection methods.
### Method
GET
### Endpoint
https://api-integration-business-uat.yappycloud.com/v1/collection-method
### Response
#### Success Response (200)
- **status** (object) - Status code and description.
- **body.collections** (array) - List of configured collection points.
- **body.collections[].alias** (string) - Name of the collection point.
- **body.collections[].type** (string) - Type of collection point.
- **body.collections[].details** (array, optional) - Specific details based on type.
#### Response Example
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
},
"body": {
"collections": [
{
"alias": "Sucursal Multiplaza",
"type": "Integración Yappy",
"details": [
{ "id": "provided_group_id", "value": "smultiplaza" },
{ "id": "deviceId", "value": "smultiplaza-01" }
]
}
]
}
}
```
--------------------------------
### Implementar la lógica de integración
Source: https://yappy-docs.vercel.app/boton-pago/web-component
Escucha los eventos del componente para gestionar el flujo de pago, incluyendo la creación de la orden en el backend y la ejecución del método eventPayment.
```javascript
window.addEventListener("load", () => {
const btnYappy = document.querySelector("btn-yappy");
btnYappy.addEventListener("eventSuccess", (event) => {
console.log("Transacción ejecutada: ", event.detail);
});
btnYappy.addEventListener("eventError", (event) => {
console.log("Transacción fallida: ", event.detail);
});
btnYappy.addEventListener("eventClick", async () => {
try {
const response = await fetch('/api/crear-orden', {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
});
const result = await response.json();
if (result?.body?.token && result?.body?.documentName && result?.body?.transactionId) {
btnYappy.eventPayment({
transactionId: result.body.transactionId,
documentName: result.body.documentName,
token: result.body.token
});
}
} catch (error) {
console.error('Error:', error);
}
});
});
```
--------------------------------
### Importar el Web Component desde el CDN
Source: https://yappy-docs.vercel.app/boton-pago/web-component
Incluye el script del componente en tu HTML. Utiliza la URL de UAT para pruebas o la de producción para entornos reales.
```html
```
```html
```
--------------------------------
### POST /qr/generate/{qr_type}
Source: https://yappy-docs.vercel.app/yappy-en-caja/api-qr-generate
Crea una nueva transacción y genera la información necesaria para mostrar (DYN) o asociar (HYB) el código QR.
```APIDOC
## POST /qr/generate/{qr_type}
### Description
Crea una nueva transacción y genera la información necesaria para mostrar (DYN) o asociar (HYB) el código QR.
### Method
POST
### Endpoint
/qr/generate/{qr_type}
### Parameters
#### Path Parameters
- **qr_type** (string) - Required - Tipo de QR: 'DYN' (dinámico) o 'HYB' (híbrido).
#### Request Body
- **body.charge_amount.sub_total** (number) - Required - Subtotal de la venta.
- **body.charge_amount.tax** (number) - Required - Impuesto (ITBMS).
- **body.charge_amount.tip** (number) - Required - Propina. Default: 0.
- **body.charge_amount.discount** (number) - Required - Descuento. Default: 0.
- **body.charge_amount.total** (number) - Required - Total a cobrar. Debe ser igual a sub_total + tax + tip - discount.
- **body.order_id** (string) - Optional - Identificador interno del comercio asociado a la orden (máx 15 caracteres).
- **body.description** (string) - Optional - Descripción de la venta (máx 64 caracteres).
### Request Example
{
"body": {
"charge_amount": {
"sub_total": 200.52,
"tax": 2.21,
"tip": 0,
"discount": 0,
"total": 202.73
},
"order_id": "ORD-2026-00125",
"description": "Almuerzo mesa 5"
}
}
### Response
#### Success Response (200)
- **status.code** (string) - Código de estado de la operación.
- **status.description** (string) - Descripción del resultado.
- **body.date** (string) - Fecha de la transacción.
- **body.transactionId** (string) - Identificador de la transacción.
- **body.hash** (string) - Cadena alfanumérica para renderizar el QR (solo para DYN).
#### Response Example
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
},
"body": {
"date": "2026-05-15T08:15:32.500",
"transactionId": "ORJBL-14890537",
"hash": "z9y8x7w6v5u4t3s2r1q0p9o8"
}
}
```
--------------------------------
### Implementación de generación de código
Source: https://yappy-docs.vercel.app/integraciones-yappy/auth-login
Ejemplos de cómo generar el hash dinámico en diferentes lenguajes de programación.
```javascript
const crypto = require('crypto');
function generarCode(apiKey, seed) {
const fecha = new Date().toISOString().split('T')[0]; // YYYY-MM-DD
const mensaje = apiKey + fecha;
return crypto.createHmac('sha256', seed).update(mensaje).digest('hex');
}
```
```python
import hmac, hashlib
from datetime import date
def generar_code(api_key: str, seed: str) -> str:
fecha = date.today().isoformat() # YYYY-MM-DD
mensaje = (api_key + fecha).encode('utf-8')
return hmac.new(seed.encode('utf-8'), mensaje, hashlib.sha256).hexdigest()
```
```php
function generarCode(string $apiKey, string $seed): string {
$fecha = date('Y-m-d');
$mensaje = $apiKey . $fecha;
return hash_hmac('sha256', $mensaje, $seed);
}
```
--------------------------------
### Validate Merchant API Calls
Source: https://yappy-docs.vercel.app/boton-pago/api-validate
Examples of how to call the validation endpoint using various programming languages.
```curl
curl -X POST https://api-comecom-uat.yappycloud.com/payments/validate/merchant \
-H "Content-Type: application/json" \
-d '{
"merchantId": "5c2d13e5-537f-43f1-b1d0-d90d8fdaf8be",
"urlDomain": "https://www.tudominio.com"
}'
```
```javascript
const response = await fetch("https://api-comecom-uat.yappycloud.com/payments/validate/merchant", {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
merchantId: process.env.YAPPY_MERCHANT_ID,
urlDomain: 'https://www.tudominio.com'
})
});
const { body } = await response.json();
const { token, epochTime } = body;
```
```python
import os, requests
resp = requests.post(
"https://api-comecom-uat.yappycloud.com/payments/validate/merchant",
headers={"Content-Type": "application/json"},
json={
"merchantId": os.environ["YAPPY_MERCHANT_ID"],
"urlDomain": "https://www.tudominio.com",
},
)
data = resp.json()["body"]
token, epoch_time = data["token"], data["epochTime"]
```
```php
getenv("YAPPY_MERCHANT_ID"),
"urlDomain" => "https://www.tudominio.com"
]));
$resp = json_decode(curl_exec($ch), true);
$token = $resp["body"]["token"];
$epochTime = $resp["body"]["epochTime"];
```
--------------------------------
### GET /transaction/{transactionId}
Source: https://yappy-docs.vercel.app/yappy-en-caja/flujo-qr-dinamico
Consulta el estado actual de una transacción mediante polling.
```APIDOC
## GET /transaction/{transactionId}
### Description
Consulta el estado de la transacción. Se recomienda realizar polling cada 2-5 segundos hasta obtener un estado final (COMPLETED o CANCELLED).
### Method
GET
### Endpoint
/transaction/{transactionId}
### Parameters
#### Path Parameters
- **transactionId** (string) - Required - Identificador único de la transacción.
```
--------------------------------
### Configurar estilos del botón
Source: https://yappy-docs.vercel.app/boton-pago/web-component
Utiliza los atributos theme y rounded para personalizar la apariencia visual del componente.
```html
```
--------------------------------
### Logout Request Endpoint
Source: https://yappy-docs.vercel.app/integraciones-yappy/auth-logout
The logout operation requires a GET request to the specified URL without a request body.
```http
GET https://api-integration-business-uat.yappycloud.com/v1/session/logout
```
--------------------------------
### POST /session/device
Source: https://yappy-docs.vercel.app/yappy-en-caja/flujo-qr-dinamico
Inicia una sesión de caja utilizando el identificador del dispositivo.
```APIDOC
## POST /session/device
### Description
Abre una sesión de caja para iniciar el proceso de cobro. Se debe guardar el token devuelto para autenticar llamadas posteriores.
### Method
POST
### Endpoint
/session/device
```
--------------------------------
### Ejemplos de implementación para abrir sesión
Source: https://yappy-docs.vercel.app/yappy-en-caja/api-session-open
Implementaciones del endpoint de apertura de sesión en diferentes lenguajes de programación.
```bash
curl -X POST "$YAPPY_BASE_URL/session/device" \
-H "api-key: $YAPPY_API_KEY" \
-H "secret-key: $YAPPY_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{
"body": {
"device": { "id": "sanfrancisco-01", "name": "Caja-01", "user": "CAJERO-001" },
"group_id": "sanfrancisco"
}
}'
```
```javascript
const resp = await fetch(`${process.env.YAPPY_BASE_URL}/session/device`, {
method: "POST",
headers: {
"api-key": process.env.YAPPY_API_KEY,
"secret-key": process.env.YAPPY_SECRET_KEY,
"Content-Type": "application/json"
},
body: JSON.stringify({
body: {
device: { id: "sanfrancisco-01", name: "Caja-01", user: "CAJERO-001" },
group_id: "sanfrancisco"
}
})
});
const { body } = await resp.json();
const sessionToken = body.token;
```
```python
import os, requests
resp = requests.post(
f"{os.environ['YAPPY_BASE_URL']}/session/device",
headers={
"api-key": os.environ["YAPPY_API_KEY"],
"secret-key": os.environ["YAPPY_SECRET_KEY"],
"Content-Type": "application/json"
},
json={
"body": {
"device": {"id": "sanfrancisco-01", "name": "Caja-01", "user": "CAJERO-001"},
"group_id": "sanfrancisco"
}
}
)
session_token = resp.json()["body"]["token"]
```
```php
[
"device" => ["id" => "sanfrancisco-01", "name" => "Caja-01", "user" => "CAJERO-001"],
"group_id" => "sanfrancisco"
]
]));
$resp = json_decode(curl_exec($ch), true);
$sessionToken = $resp["body"]["token"];
```
--------------------------------
### GET /transaction/:id
Source: https://yappy-docs.vercel.app/yappy-en-caja/estados-transaccion
Consulta el estado actual de una transacción específica mediante su identificador.
```APIDOC
## GET /transaction/:id
### Description
Obtiene el estado actual de una transacción específica.
### Method
GET
### Endpoint
/transaction/:id
### Parameters
#### Path Parameters
- **id** (string) - Required - Identificador único de la transacción.
### Response
#### Success Response (200)
- **status** (string) - El estado de la transacción. Valores posibles: PENDING, COMPLETED, CANCELLED, REVERSED, FAILED.
```
--------------------------------
### POST /session/device
Source: https://yappy-docs.vercel.app/yappy-en-caja/token-sesion
Inicia una nueva sesión de caja y retorna un token con una duración de 12 horas.
```APIDOC
## POST /session/device
### Description
Inicia una nueva sesión para la caja, retornando un token necesario para autenticar las operaciones posteriores.
### Method
POST
### Endpoint
/session/device
```
--------------------------------
### POST /session/device
Source: https://yappy-docs.vercel.app/yappy-en-caja/api-session-open
Inicia una sesión asociada a una unidad de cobro. Devuelve el token que se utilizará en todas las llamadas siguientes.
```APIDOC
## POST /session/device
### Description
Inicia una sesión asociada a una unidad de cobro. Devuelve el token que usarás en todas las llamadas siguientes.
### Method
POST
### Endpoint
/session/device
### Headers
- **api-key** (string) - Required - Tu API Key
- **secret-key** (string) - Required - Tu Clave Secreta
- **Content-Type** (string) - Required - application/json
### Request Body
- **body.device.id** (string) - Required - Nombre de la unidad de cobro (ej. sanfrancisco-01)
- **body.device.name** (string) - Optional - Nombre referencial de la caja.
- **body.device.user** (string) - Optional - Usuario referencial del cajero.
- **body.group_id** (string) - Required - ID del grupo (ej. sanfrancisco)
### Request Example
{
"body": {
"device": {
"id": "sanfrancisco-01",
"name": "Caja-01",
"user": "CAJERO-001"
},
"group_id": "sanfrancisco"
}
}
### Response
#### Success Response (200)
- **status.code** (string) - Código de estado de la operación
- **status.description** (string) - Descripción del resultado
- **body.status** (string) - Estado de la sesión (ej. OPEN)
- **body.opened_date** (string) - Fecha de apertura de la sesión
- **body.token** (string) - Token de sesión generado
#### Response Example
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
},
"body": {
"status": "OPEN",
"opened_date": "2026-05-15T08:00:00.000",
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
}
```
--------------------------------
### POST /session/login
Source: https://yappy-docs.vercel.app/integraciones-yappy/overview
Authenticates the merchant and initiates a session to obtain a JWT token.
```APIDOC
## POST /session/login
### Description
Opens a session and returns a JWT token required for subsequent API requests.
### Method
POST
### Endpoint
/session/login
```
--------------------------------
### Ejemplo de llamada IPN
Source: https://yappy-docs.vercel.app/boton-pago/ipn
Representación de la estructura de la solicitud GET que Yappy realiza a tu endpoint configurado.
```http
GET https://www.tudominio.com/api/yappy/ipn
?orderId=ORD12345
&hash=a3c1f8...e9d4
&status=E
&domain=https://www.tudominio.com
&confirmationNumber=8f3e2c91-...
```
--------------------------------
### DELETE /session/device
Source: https://yappy-docs.vercel.app/yappy-en-caja/token-sesion
Finaliza la sesión activa de la caja y retorna el resumen de las operaciones realizadas.
```APIDOC
## DELETE /session/device
### Description
Finaliza la vigencia del token de sesión actual y devuelve un resumen de las operaciones ejecutadas durante el período activo.
### Method
DELETE
### Endpoint
/session/device
```
--------------------------------
### GET /movement/{id}
Source: https://yappy-docs.vercel.app/integraciones-yappy/api-movement
Retrieves the complete details of a transaction based on its unique ID. This is useful for verifying the status of a specific transaction without fetching the entire history.
```APIDOC
## GET /movement/{id}
### Description
Devuelve el detalle completo de una transacción a partir de su ID único. Útil cuando necesitas verificar el estado actual de una transacción específica sin descargar todo el historial.
### Method
GET
### Endpoint
https://api-integration-business-uat.yappycloud.com/v1/movement/{id}
### Parameters
#### Path Parameters
- **id** (string) - Required - El ID único de la transacción con formato XXXXX-XXXXXXXX.
### Response
#### Success Response (200)
- **status** (object) - Objeto con el código y descripción de la respuesta.
- **body** (object) - Detalles de la transacción incluyendo id, number, type, status, description, role, category, fee, charge, debitor, y creditor.
#### Response Example
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
},
"body": {
"id": "ASOWE-45283003",
"number": "MOCK-jamihs05",
"type": "TXN-ECOM",
"status": "REVERSED",
"description": "Por pedido: xJoK02cTOEUI",
"role": "CREDIT",
"category": "INTRABANK",
"fee": {
"currency": "USD",
"amount": 0.16
},
"charge": {
"currency": "USD",
"tax": 0,
"tip": 0,
"amount": 10.11,
"partial_amount": 10.11
},
"debitor": {
"alias": "+50768994657",
"complete_name": "Kallie Keeling",
"alias_type": "P",
"bank_name": "Banco General"
},
"creditor": {
"alias": "Sitio web",
"complete_name": "Mi Comercio S.A."
}
}
}
```
--------------------------------
### Web Component Integration
Source: https://yappy-docs.vercel.app/boton-pago/web-component
How to include the Yappy Web Component via CDN and insert it into the DOM.
```APIDOC
## Web Component Installation
### CDN Import
Include the following script in your HTML:
```html
```
### Usage
Insert the custom element into your page:
```html
```
### Attributes
- **theme** (string) - Optional - Visual style: "blue", "darkBlue", "orange", "dark", "sky", "light".
- **rounded** (boolean) - Optional - Set to "true" for rounded corners.
```
--------------------------------
### GET /transaction/{transaction_id}
Source: https://yappy-docs.vercel.app/yappy-en-caja/api-transaction-status
Consulta el estado actual de una transacción específica para determinar si el pago ha sido completado o cancelado.
```APIDOC
## GET /transaction/{transaction_id}
### Description
Consulta el estado actual de una transacción. Es el endpoint utilizado para polling con el fin de detectar cuándo el cliente realiza el pago.
### Method
GET
### Endpoint
/transaction/{transaction_id}
### Parameters
#### Path Parameters
- **transaction_id** (string) - Required - El identificador único de la transacción.
### Response
#### Success Response (200)
- **status** (object) - Objeto con el código y descripción del resultado de la ejecución.
- **body** (object) - Contiene el campo 'status' con el estado actual de la transacción.
#### Response Example
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
},
"body": {
"status": "COMPLETED"
}
}
```
--------------------------------
### Llamada de ejemplo con Fetch API
Source: https://yappy-docs.vercel.app/yappy-en-caja/api-qr-generate
Implementación en JavaScript utilizando fetch para realizar la solicitud al endpoint de generación de QR.
```javascript
const resp = await fetch(`${process.env.YAPPY_BASE_URL}/qr/generate/DYN`, {
method: "POST",
headers: {
"api-key": process.env.YAPPY_API_KEY,
"secret-key": process.env.YAPPY_SECRET_KEY,
"authorization": sessionToken,
"Content-Type": "application/json"
},
body: JSON.stringify({
body: {
charge_amount: {
sub_total: 200.52,
tax: 2.21,
tip: 0,
discount: 0,
total: 202.73
},
order_id: "ORD-2026-00125",
description: "Almuerzo mesa 5"
}
})
});
const { body } = await resp.json();
const { transactionId, hash } = body;
// Usa `hash` para renderizar el QR en pantalla
```
--------------------------------
### Pagination Logic
Source: https://yappy-docs.vercel.app/integraciones-yappy/api-history
Explains the process of using pagination tokens to retrieve full transaction history.
```APIDOC
## Pagination Logic
### Description
To retrieve the full transaction history, use the `pagination.token` field provided in the response body. If `has_next_page` is true, use the returned `token` in the next request to fetch the subsequent page.
### Request Body
- **pagination.start_date** (string) - Required - Start date for the transaction range.
- **pagination.end_date** (string) - Required - End date for the transaction range.
- **pagination.limit** (integer) - Required - Number of records per page.
- **pagination.token** (string) - Optional - Token for the next page of results.
### Request Example
{
"body": {
"pagination": {
"start_date": "2026-06-01",
"end_date": "2026-06-15",
"limit": 10,
"token": "BH/ytDLG1hzQ9xTx..."
}
}
}
### Error Codes
- **YP-0001**: No transactions found for the specified range/filter.
- **YP-0039**: Alias count in filter exceeds the maximum of 25.
- **YP-0040**: Limit is outside the allowed range.
- **YP-0010**: One or more body fields have invalid values.
- **YP-0008**: Missing mandatory headers.
```
--------------------------------
### Web Component Events and Methods
Source: https://yappy-docs.vercel.app/boton-pago/web-component
Documentation for the events emitted by the component and the methods available for interaction.
```APIDOC
## Component Interface
### Events
- **eventClick**: Triggered when the user clicks the button. Use this to initiate order creation.
- **eventSuccess**: Triggered upon successful transaction. Details are available in `event.detail`.
- **eventError**: Triggered when a transaction fails. Details are available in `event.detail`.
### Methods
- **eventPayment({ transactionId, token, documentName })**: Invoked to process the payment after order creation.
### Properties
- **isYappyOnline** (boolean) - Returns true if the Yappy channel is available.
- **isButtonLoading** (boolean) - Set to true to display the loading state.
- **triggerModal** (boolean) - Controls the visibility of the transaction counter modal.
```
--------------------------------
### Ejemplo de cabeceras correctas
Source: https://yappy-docs.vercel.app/integraciones-yappy/troubleshooting
Marcador de posición para la configuración correcta de cabeceras HTTP.
```bash
# Correcto
```
--------------------------------
### Configuración de variables de entorno para Yappy
Source: https://yappy-docs.vercel.app/boton-pago/production
Ejemplos de configuración para los entornos de desarrollo (UAT) y producción, destacando el cambio de URLs base, CDN y credenciales.
```text
# Entorno UAT (desarrollo)
YAPPY_BASE_URL=https://api-comecom-uat.yappycloud.com
YAPPY_CDN_URL=https://bt-cdn-uat.yappycloud.com/v1/cdn/web-component-btn-yappy.js
YAPPY_MERCHANT_ID=5c2d13e5-537f-43f1-b1d0-d90d8fdaf8be
YAPPY_CLAVE_SECRETA=dGVzdGluZy1zZWNyZXQtdWF0LWJhc2U2NC1lbmNvZGVkLWhlcmU=
```
```text
# Entorno PRODUCTIVO
YAPPY_BASE_URL=https://apipagosbg.bgeneral.cloud
YAPPY_CDN_URL=https://bt-cdn.yappy.cloud/v1/cdn/web-component-btn-yappy.js
YAPPY_MERCHANT_ID=a1b2c3d4-e5f6-7890-abcd-ef1234567890 # NUEVO
YAPPY_CLAVE_SECRETA=cHJvZHVjdGlvbi1zZWNyZXQtYmFzZTY0LWVuY29kZWQtaGVyZQ== # NUEVO
```
--------------------------------
### Flujo end-to-end con QR dinámico
Source: https://yappy-docs.vercel.app/yappy-en-caja/flujo-qr-dinamico
Bloque de código vacío que representa el inicio del flujo de integración.
```text
```
--------------------------------
### Cuerpo de la solicitud de Login
Source: https://yappy-docs.vercel.app/integraciones-yappy/auth-login
Estructura JSON requerida para el login, donde el campo code debe ser calculado dinámicamente.
```json
{
"body": {
"code": "f957f8b8f9664832e6051e3389864682624a8e2b9aaf4dd80fb2aaea7af58940"
}
}
```
--------------------------------
### Implementación de polling para verificación de pago
Source: https://yappy-docs.vercel.app/yappy-en-caja/api-transaction-status
Función asíncrona que consulta periódicamente el estado de la transacción y maneja la expiración tras el tiempo límite definido.
```javascript
async function waitForPayment(transactionId, sessionToken, timeoutMs = 300_000) {
const deadline = Date.now() + timeoutMs;
const POLL_INTERVAL = 3000;
while (Date.now() < deadline) {
const resp = await fetch(
`${process.env.YAPPY_BASE_URL}/transaction/${transactionId}`,
{
headers: {
"api-key": process.env.YAPPY_API_KEY,
"secret-key": process.env.YAPPY_SECRET_KEY,
"authorization": sessionToken
}
}
);
const { body } = await resp.json();
if (body.status === "COMPLETED") return "paid";
if (body.status === "CANCELLED") return "cancelled";
await new Promise(r => setTimeout(r, POLL_INTERVAL));
}
// 5 min pasaron sin pago: cancelar la transacción
await cancelTransaction(transactionId, sessionToken);
return "expired";
}
```
--------------------------------
### Insertar el botón en el DOM
Source: https://yappy-docs.vercel.app/boton-pago/web-component
Añade el elemento personalizado al HTML para renderizar el botón de pago.
```html
```
--------------------------------
### Ejemplo de respuesta exitosa 200 OK
Source: https://yappy-docs.vercel.app/yappy-en-caja/api-qr-generate
Respuesta esperada tras una generación exitosa, incluyendo el hash para QR dinámicos.
```json
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
},
"body": {
"date": "2026-05-15T08:15:32.500",
"transactionId": "ORJBL-14890537",
"hash": "z9y8x7w6v5u4t3s2r1q0p9o8"
}
}
```
--------------------------------
### Respuestas de la API de anulación
Source: https://yappy-docs.vercel.app/integraciones-yappy/api-transaction-cancel
Ejemplos de respuestas JSON para diferentes escenarios de anulación.
```json
{
"status": {
"code": "YP-0000",
"description": "Se ha realizado la ejecución del servicio correctamente"
}
}
```
```json
{
"status": {
"code": "YP-0016",
"description": "La transaccion que se intenta reversar posee un estado reversado. No se requieren acciones adicionales."
}
}
```
```json
{
"status": {
"code": "YP-0014",
"description": "Error, la reversa no puede ser procesada porque ya se liquido."
}
}
```
```json
{
"status": {
"code": "YP-0015",
"description": "La transaccion que se intenta reversar posee un estado fallido. No se requieren acciones adicionales."
}
}
```