# Payku API — 🇻🇪 Venezuela (ES)

> Documentación oficial de la API de Payku para Venezuela, generada automáticamente desde la especificación OpenAPI (v2.1.01). Fuente: https://docs.payku.com/ · Sandbox: https://des.payku.cl/

URL base: `https://app.payku.cl/` (Production) · `https://des.payku.cl/` (Sandbox)

## Introducción

Bienvenido a la API de payku. Puedes usar nuestra API para acceder a los distintos
endpoints de payku, donde podrás generar y gestionar pagos mediante distintos
métodos y obtener información de ellos.

El API está organizado alrededor de REST. Posee URLs predecibles y
orientadas a recursos, y utiliza códigos de respuesta HTTP para indicar el
resultado de la llamada. Todas las respuestas de la API retornan objetos
JSON, incluyendo los errores.

El solicitante debe buscar un código de resultado 200. Si se recibe
cualquier código de resultado distinto de 200, la solicitud o la respuesta
no es válida, lo que significa que los campos no pasaron los controles de
validación de parte de payku. Utilizamos características incluidas en el
protocolo HTTP, como autenticación, los cuales son soportados por la gran
mayoría de los clientes HTTP.

**Importante — ¿Cómo saber si una operación falló?**

No te fíes solo del código HTTP (por ejemplo, 200). En nuestra API, muchas
respuestas con error también llegan con código HTTP 200. Esto es intencional y
forma parte del diseño de la API.

Siempre revisa el contenido JSON de la respuesta y busca el campo `status`:
- Si `status` es `"success"`, la operación se realizó correctamente.
- Si `status` es `"failed"`, hubo un error (por ejemplo, datos inválidos o una
  operación rechazada). Revisa también el mensaje de error que venga en la
  misma respuesta.

## Autenticación

payku utiliza Token Based Authentication sobre HTTPS para la autenticación. Para tener acceso a nuestra API, accede a tu cuenta en la sección de Integración encontrarás la opción de Tokens integración y API. Los request no autenticados o incorrectos retornarán una respuesta de token Invalido.

## API Seguridad

Cada solicitud es requerido tener incluido en el header:
  - Authorization: Bearer **TOKEN-PÚBLICO**

## Firma

En el caso del API de pagos a terceros (payout) se agregó una capa más de seguridad a través de una firma que se envía en el header del request, para obtener dicha firma es necesario lo siguiente:

Se debe concatenar en formato para url el Request Path junto a todos los parámetros del request, los cuales deben ser ordenados alfabéticamente por key, tal que key=value. Por lo tanto, si el valor de email cliente es “example@domain.com” el formato correcto sería “example%40domain.com” y luego concatenados con el carácter ‘&’.

Una vez que los sets de caracteres son ordenados y concatenados, el hash es calculado usando la función HMAC con cifrado tipo sha256, y el token privado.

**Nota:** Si un elemento de la data, tiene como valor un objeto o arreglo, se excluye de la data. Esta función esta en el ejemplo de PHP y de Javascript.

### Ejemplo PHP
Endpoint de la API:
```php
$request_path = urlencode('/api/suclient');
```
Ordenando los parámetros:
```php
$data = [
  'email' => 'johndoe@example.com',
  'name' => 'John Doe',
  'phone' => '923122312',
  'address' => 'Moneda 101',
  'country' => 'Chile',
  'region' => 'Metropolitana',
  'city' => 'Santiago',
  'postal_code' => '850000',
  'additional_parameters' => [
    'parameter_1' => 'example',
    'parameter_2' => 'example 2',
  ]
];
ksort($data);
```
Transformación de los parámetros a formato url:
```php
    $contador = 0;
    $concatenar = null;

    if (!empty($data) && !is_null($data)) {
        foreach ($data as $key => $val) {
            if(gettype($val)!='array' && gettype($val)!='object'){
                if ($contador>0) {
                    $concatenar .= '&';
                }
                $concatenar .= $key . '=' . urlencode($val);
                $contador++;
            }
        }
    };
```
Concatenación de los parámetros en formato url con el endpoint de la API:
```php
$concat = $request_path.'&'.$concatenar;
```
Firma:
```php
$sign = hash_hmac('sha256', $concat, 'fe551abcef62fcf002dc598922e68f0a');
```

### Ejemplo JavaScript
Importar dependencia CryptoJS:
```javascript
const CryptoJS = require("crypto-js");
```
Endpoint de la API:
```javascript
const requestPath = encodeURIComponent('/api/suclient');
```
Ordenando los parámetros:
```javascript
const data = {
  email: "johndoe@example.com",
  name: "John Doe",
  phone: "923122312",
  address: "Moneda 101",
  country: "Chile",
  region: "Metropolitana",
  city: "Santiago",
  postal_code: "850000"
};
const orderedData = {};
Object.keys(data).sort().forEach(function(key) {
  orderedData[key] = data[key];
  if (typeof orderedData[key] === 'object') {
        delete orderedData[key];
  }
});
```
Transformación de los parámetros a formato url:
```javascript
const arrayConcat = new URLSearchParams(orderedData).toString();
```
Concatenación de los parámetros en formato url con el endpoint de la API:
```javascript
const concat = requestPath + "&" + arrayConcat;
```
Firma:
```javascript
const sign = CryptoJS.HmacSHA256(concat, "fe551abcef62fcf002dc598922e68f0a").toString();
```

El resultado de la firma obtenida para ambos ejemplos es:

```javascript
"c9c86202b1246f6ebeb080d08b3b99a22d36d0e8cffb7fd4e65af0fea4dd12bb"
```

## Errores

payku usa respuestas HTTP convencionales para indicar el éxito o fracaso de un request.
En general, códigos en el rango de los 2xx indican éxito, códigos en el rango 4xx indican
un error que falló debido a la información proporcionada (ej: un parámetro requerido fue
omitido, un pago falló, etc.), y códigos en el rango de los 5xx indican un error con
los servidores de payku (estos son raros).

## Códigos de error
<div class="errorContent">
<table>
  <tbody>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">400</strong>
        <p class="psmall">Bad Request</p>
      </td>
      <td class="errorDescription">Hay un problema con tu request</td>
    </tr>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">401</strong>
        <p class="psmall">Unauthorized</p>
      </td>
      <td class="errorDescription">Tu token es incorrecto o error de firma</td>
    </tr>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">403</strong>
        <p class="psmall">Forbidden</p>
      </td>
      <td class="errorDescription">No tienes permiso para ver esta página</td>
    </tr>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">404</strong>
        <p class="psmall">Not Found</p>
      </td>
      <td class="errorDescription">El recurso especificado no fue encontrado </td>
    </tr>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">405</strong>
        <p class="psmall">Method Not Allowed</p>
      </td>
      <td class="errorDescription">Trataste de ingresar a un recurso con un método inválido</td>
    </tr>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">406</strong>
        <p class="psmall">Not Acceptable</p>
      </td>
      <td class="errorDescription">Solicitaste un formato que no es json</td>
    </tr>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">410</strong>
        <p class="psmall">Gone</p>
      </td>
      <td class="errorDescription">El recurso solicitado fue removido de nuestros servidores</td>
    </tr>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">422</strong>
        <p class="psmall">Unprocessable Entity</p>
      </td>
      <td class="errorDescription">No podemos procesar tu solicitud, revísala.</td>
    </tr>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">429</strong>
        <p class="psmall">Too Many Requests</p>
      </td>
      <td class="errorDescription">¡Estás solicitando muchos recursos! ¡Detente!</td>
    </tr>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">500</strong>
        <p class="psmall">Internal Server Error</p>
      </td>
      <td class="errorDescription">Tuvimos un problema con nuestro servidor. Inténtalo nuevamente más tarde.</td>
    </tr>
    <tr>
      <td style="text-align: right"><strong class="errorTitle">503</strong>
        <p class="psmall">Service Unavailable</p>
      </td>
      <td class="errorDescription">Estamos offline por mantenimiento. Inténtalo nuevamente más tarde</td>
    </tr>
  </tbody>
</table>
</div>

## Acceso a la API

Si tienes una cuenta en payku, puedes acceder a la API REST mediante los siguientes endpoints:

<div class="content">
  <table class="center smallTable">
    <thead>
      <tr>
        <th style="text-align:center;"><strong>Site</strong></th>
        <th style="text-align:center;"><strong>BASE URL FOR REST ENDPOINT</strong></th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td><strong>Production</strong></td>
        <td align="center"><a target="_blank" href="https://app.payku.cl">https://app.payku.cl</a></td>
      </tr>
      <tr>
        <td><strong>Sandbox</strong></td>
        <td><a target="_blank" href="https://des.payku.cl">https://des.payku.cl</a></td>
      </tr>
    </tbody>
  </table>
</div>

- **Producción**: proporciona acceso directo para generar transacciones reales.
- **Sandbox**: permite probar su integración sin afectar los datos reales.

## Transacción

### Crear

`POST /api/transaction`

Este método permite crear una orden de pago y recibe como respuesta la **URL** y el **TOKEN** que identifica la transacción.

Parámetros adicionales:

1. **additional_parameters** = Permite enviar información adicional que será registrada con la transacción:

   **IMPORTANTE additional_parameters.gateway:**
   - Permite especificar el medio de pago final
   - **<span style="color: red">OBLIGATORIO</span>** para comercios que usan método On-Site

**Cuerpo de la solicitud**

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `email` | string | ✓ | Email del pagador — ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ — [ 20 .. 100 ] — Ejemplo: `payer@domain.com` |
| `order` | string | ✓ | Orden del comercio — ^[a-zA-Z0-9- ]{1,40}$ — [ 20 .. 40 ] — Ejemplo: `order-commerce-999` |
| `subject` | string | ✓ | Descripción de la orden — ^[a-zA-Z0-9 ]{1,200}$ — [ 1 .. 200 ] — Ejemplo: `description of the order` |
| `amount` | integer | ✓ | Monto de la orden — ^[0-9]+$ — Ejemplo: `100` |
| `currency` | string | ✓ | VES — ISO 4217 — [ 3 .. 3 ] — Ejemplo: `VES` |
| `payment` | integer | ✓ | 17 — ^[0-9]{1,2}$ — Ejemplo: `17` |
| `urlreturn` | string |  | url de retorno del comercio donde se redirigirá al pagador luego de obtener el resultado de la transacción. — ^https:\/\/([\w\-]+\.)+[\w\-]+(\/[\w\-\.\/?%&=]*)?$ — [ 1 .. 255 ] — Ejemplo: `https://youwebsite.com/return/client/order-commerce-999` |
| `urlnotify` | string | ✓ | URL callback del comercio donde se notificará el resultado del pago. **Nota:** Una vez que el cliente finalice el proceso de pago, se notificará a la URL de callback (urlnotify) el resultado de la operación bancaria. **Ejemplo de respuesta exitosa:** ```json { "transaction_id": "991...", "payment_key": "trx...", "transaction_key": "991...", "verification_key": "8b3...", "order": "199...", "status": "success" } ``` **Ejemplo de respuesta rechazada:** ```json { "transaction_id": "991...", "payment_key": "trx3...", "transaction_key": "991...", "verification_key": "8b3e...", "order": "199...", "status": "failed" } ``` — ^https:\/\/([\w\-]+\.)+[\w\-]+(\/[\w\-\.\/?%&=]*)?$ |
| `additional_parameters` | object |  | Parámetros adicionales del comercio. |
| ↳ `gateway` | string |  | Seleccione el método de pago deseado: \| Código \| Método \| Descripción \| On-Site \| \|---------\|--------\|------------\|--------\| \| VZLAVECAP2C \| Pago Móvil (P2C) \| PagoMóvil (Más popular) \| SI \| \| BMIGVECAP2C \| Pago Móvil (P2C) \| PagoMóvil (Más popular) \| \| \| BMIGVECAC2P \| Pago Móvil (C2P) \| BancAmiga (Pago instantáneo) \| \| \| BAMRVECAC2P \| Pago Móvil (C2P) \| Mercantil (Pago instantáneo) \| \| \| UNIOVECAP2C \| Banesco \| BotónPago (Transferencia) \| \| \| VZLAVECABIO \| Tarjetas \| BDV BioPago (Débito y Crédito) \| \| Nota: Para métodos marcados con "On-Site: SI", la respuesta incluirá información adicional: ```json { "status": "register", "id": "trx...", "url": "https://[BASE_URL]/api/validonsite", "account_service": { "bank_method": "PA...", "bank_number": "04...", "bank_document": "J-...", "bank_name": "Ban...", "bank_nameshort": "Ve...", "bank_code": "01...", "bank_linkqr": "htt..." }, "attributes_request": { "transaction": "trx...", "payer": { "phone_number": "required", "payment_reference": "required", "id_number": "required", "bank_code": "required", "payment_date": "optional" } } } ``` Campos importantes en la respuesta On-Site: - status: Estado inicial de la transacción - id: Identificador único de la transacción - url: URL para completar el pago, ej. `/api/validonsite` - account_service: Información bancaria para mostrar en el formulario de pago - attributes_request: Datos requeridos para completar el pago — Ejemplo: `CODE` |

**cURL**

```bash
curl -X POST \
https://BASE-URL/api/transaction \
-H 'Accept: application/json, text/plain, */*' \
-H 'Authorization: Bearer TOKEN-PUBLIC' \
-H 'Content-Type: application/json' \
-H 'Host: BASE-URL' \
-d '{
  "email": "payer@domain.com",
  "order": "order-commerce-999",
  "subject": "description of the order",
  "amount": 100,
  "currency": "VES",
  "payment": 17,
  "urlreturn": "https://youwebsite.com/return/client/order-commerce-999",
  "urlnotify": "https://youwebsite.com/callback/commerce/order-commerce-999",
  "additional_parameters": {
    "gateway":"GATEWAY_CODE"
  }
}'
```

**PHP**

```php
$client = new \GuzzleHttp\Client();
  $body = $client->request('POST', 'https://BASE_URL/api/transaction', [
    'json' => [
      'email' => 'payer@domain.com',
      'order' => 'order-commerce-999',
      'subject' => 'description of the order',
      'amount' => 100,
      'currency' => 'VES',
      'payment' => 17,
      'urlreturn' => 'https://youwebsite.com/return/client/order-commerce-999',
      'urlnotify' => 'https://youwebsite.com/callback/commerce/order-commerce-999',
      'additional_parameters' => [
        'gateway' => 'GATEWAY_CODE'
      ]
    ],
    'headers' => [
      'Authorization' => 'Bearer TOKEN_PUBLICO'
    ]
  ])->getBody();
$response = json_decode($body);
```

**JS**

```js
const data = {
  "email": "payer@domain.com",
  "order": "order-commerce-999",
  "subject": "description of the order",
  "amount": 100,
  "currency": "VES",
  "payment": 17,
  "urlreturn": "https://youwebsite.com/return/client/order-commerce-999",
  "urlnotify": "https://youwebsite.com/callback/commerce/order-commerce-999",
  "additional_parameters": {
    "gateway": "GATEWAY_CODE"
  }
};
const request = async (data) => {
  const response = await fetch('https://BASE_URL/api/transaction', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer TOKEN_PUBLICO'
    },
    body: JSON.stringify(data)
  });
  const result = await response.json();
  console.log(result)
}
request(data);
```

**Respuestas**

*200*

```json
{
  "status": "register",
  "id": "trx6...",
  "url": "https://[BASE_URL]/path?id=trx...&valid=e3c4...",
  "account_service": {
    "bank_method": "PA..",
    "bank_number": "04...",
    "bank_document": "J...",
    "bank_name": "Ban...",
    "bank_nameshort": "Ve...",
    "bank_code": "01...",
    "bank_linkqr": "ht..."
  },
  "attributes_request": {
    "transaction": "tr...",
    "payer": {
      "phone_number": "string",
      "payment_reference": "required"
    }
  }
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de transacción. Los posibles estados que puede obtener son los siguientes: - register - success — Ejemplo: `register` |
| `id` | string |  | Identificador único de la transacción — Ejemplo: `trx6...` |
| `url` | string |  | URL para redireccionar al usuario. — Ejemplo: `https://[BASE_URL]/path?id=trx...&valid=e3c4...` |
| `account_service` | object |  | **[!SOLO PARA MÉTODOS ON-SITE!]** Información del servicio bancario que debe ser utilizado para el pago. |
| ↳ `bank_method` | string |  | Método de pago bancario — Ejemplo: `PA..` |
| ↳ `bank_number` | string |  | Número de teléfono para pago móvil — Ejemplo: `04...` |
| ↳ `bank_document` | string |  | Documento de identificación bancaria — Ejemplo: `J...` |
| ↳ `bank_name` | string |  | Nombre completo del banco — Ejemplo: `Ban...` |
| ↳ `bank_nameshort` | string |  | Nombre corto del banco — Ejemplo: `Ve...` |
| ↳ `bank_code` | string |  | Código del banco — Ejemplo: `01...` |
| ↳ `bank_linkqr` | string |  | URL del código QR para el pago — Ejemplo: `ht...` |
| `attributes_request` | object |  | **[!SOLO PARA MÉTODOS ON-SITE!]** Datos requeridos para completar para informar el pago. |
| ↳ `transaction` | string |  | Identificador de la transacción — Ejemplo: `tr...` |
| ↳ `payer` | object |  | Información requerida del pagador |
| ↳ ↳ `phone_number` | string |  | Número de teléfono del pagador |
| ↳ ↳ `payment_reference` | string |  | Referencia del pago — Ejemplo: `required` |

*400* — Error en la solicitud.

```json
{
  "status": "failed",
  "type": "Unprocessable Entity",
  "message_error": "subject:invalid,amount:is empty,email:is empty,order:invalid"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de la solicitud. — Ejemplo: `failed` |
| `type` | string |  | Tipo de error ocurrido. — Ejemplo: `Unprocessable Entity` |
| `message_error` | string |  | Mensaje de error — Ejemplo: `subject:invalid,amount:is empty,email:is empty,order:invalid` |

### Confirmar On-Site

`POST /api/validonsite`

Este método permite confirmar el pago en el sitio web del comercio, enviando información del pagador para que pueda ser verificada. El resultado de la transacción será informado en el callback [urlnotify].

**Cuerpo de la solicitud**

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `transaction` | string | ✓ | Identificador único de la transacción — Ejemplo: `trx24...` |
| `payer` | object | ✓ | Información del pagador |
| ↳ `phone_number` | string | ✓ | Número de teléfono del pagador — Ejemplo: `04129874563` |
| ↳ `payment_reference` | string | ✓ | Referencia del pago emitido por la entidad bancaria — Ejemplo: `12345600` |
| ↳ `id_number` | string | ✓ | Número de identificación del pagador — Ejemplo: `V12987456` |
| ↳ `bank_code` | string | ✓ | Código del banco del pagador — Ejemplo: `0102` |
| ↳ `payment_date` | string |  | Fecha del pago (opcional) — Ejemplo: `2026-08-25` |

**cURL**

```bash
curl -X POST \
'https://BASE_URL/api/validonsite' \
-H 'Accept: application/json, text/plain, */*' \
-H 'Authorization: Bearer TOKEN-PUBLIC' \
-H 'Content-Type: application/json' \
-H 'Host: BASE-URL' \
-d '{
  "transaction": "trx2...",
  "payer": {
    "phone_number": "04129874563",
    "payment_reference": "12345600",
    "id_number": "V12987456",
    "bank_code": "0102",
    "payment_date": "2026-08-25"
  }
}'
```

**PHP**

```php
$client = new \GuzzleHttp\Client();
$body = $client->request('POST', 'https://BASE_URL/api/validonsite', [
  'json' => [
    'transaction' => 'trx2...',
    'payer' => [
      'phone_number' => '04129874563',
      'payment_reference' => '12345600',
      'id_number' => 'V12987456',
      'bank_code' => '0102',
      'payment_date' => '2026-08-25'
    ]
  ],
  'headers' => [
    'Authorization' => 'Bearer TOKEN_PUBLICO'
  ]
])->getBody();
$response = json_decode($body);
```

**JS**

```js
const data = {
  "transaction": "trx2...",
  "payer": {
    "phone_number": "04129874563",
    "payment_reference": "12345600",
    "id_number": "V12987456",
    "bank_code": "0102",
    "payment_date": "2026-08-25"
  }
};
const request = async (data) => {
  const response = await fetch('https://BASE_URL/api/validonsite', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer TOKEN_PUBLICO'
    },
    body: JSON.stringify(data)
  });
  const result = await response.json();
  console.log(result)
}
request(data);
```

**Respuestas**

*200* — Respuesta exitosa

```json
{
  "transaction": "trx24...",
  "status": "register",
  "message": "payment received and pending verification",
  "gateway": {
    "status": "successful"
  }
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `transaction` | string | ✓ | Identificador único de la transacción — Ejemplo: `trx24...` |
| `status` | string | ✓ | Estado de la transacción — Ejemplo: `register` |
| `message` | string | ✓ | Mensaje descriptivo del estado — Ejemplo: `payment received and pending verification` |
| `gateway` | object | ✓ | Información del gateway de pago |
| ↳ `status` | string |  | Estado del gateway — Ejemplo: `successful` |

*400* — Error en la solicitud

```json
{
  "transaction": "trx24...",
  "status": "failed",
  "message_error": "charge already used or consumed"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `transaction` | string | ✓ | Identificador único de la transacción — Ejemplo: `trx24...` |
| `status` | string | ✓ | Estado de la transacción — Ejemplo: `failed` |
| `message_error` | string | ✓ | Mensaje descriptivo del error — Ejemplo: `charge already used or consumed` |

### Obtener

`GET /api/transaction/{id}`

Este método permite obtener la información de una transacción

**Parámetros de ruta**

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `id` | string | ✓ | Identificador único de la transacción - id: Identificador de la transacción (Transaccion/POST) — máximo 40 caracteres |

**Respuestas**

*200*

```json
{
  "status": "success",
  "id": "trx3b...",
  "created_at": "2025-10-25 14:10:03",
  "order": "157...",
  "email": "payer@domain.com",
  "subject": "description of the order",
  "amount": 100,
  "payment": {
    "start": "2025-12-16 15:10:33",
    "end": "2025-12-16 15:10:36",
    "media": "VEPUY",
    "transaction_id": 107999,
    "payment_key": "pr...",
    "transaction_key": null,
    "deposit_date": "2023-10-05",
    "verification_key": "666...",
    "authorization_code": "10...",
    "last_4_digits": "0000",
    "installments": 0,
    "card_type": "VN",
    "additional_parameters": {
      "gateway": "CODE_GATEWAY",
      "network": {
        "ip_address": "192.0.2.123"
      }
    },
    "currency": "VES"
  },
  "nullify": {
    "status": "complete"
  },
  "gateway_response": {
    "status": "success",
    "message": "successful transaction"
  }
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de transacción.Los posibles estados que puede obtener son los siguientes: - register - pending - success - rejected — Ejemplo: `success` |
| `id` | string |  | Identificador único de la transacción — Ejemplo: `trx3b...` |
| `created_at` | string |  | Fecha de registro. — Ejemplo: `2025-10-25 14:10:03` |
| `order` | string |  | Número de orden. — Ejemplo: `157...` |
| `email` | string |  | Email del usuario — Ejemplo: `payer@domain.com` |
| `subject` | string |  | Descripción de la orden de compra. — Ejemplo: `description of the order` |
| `amount` | string |  | Monto. — Ejemplo: `100` |
| `payment` | object |  |  |
| ↳ `start` | string |  | Inicio de la transacción. — Ejemplo: `2025-12-16 15:10:33` |
| ↳ `end` | string |  | Fin de la transacción. — Ejemplo: `2025-12-16 15:10:36` |
| ↳ `media` | string |  | Medio de pago, utilizado por el usuario. — Ejemplo: `VEPUY` |
| ↳ `transaction_id` | int |  | Identificador único de la transacción — Ejemplo: `107999` |
| ↳ `payment_key` | string |  | Identificador del cobro creado por payku. — Ejemplo: `pr...` |
| ↳ `transaction_key` | string |  | Identificador único de la transacción |
| ↳ `deposit_date` | string |  | Fecha el cual se realizará el depósito al cliente. — Ejemplo: `2023-10-05` |
| ↳ `verification_key` | string |  | Código de verificación creado por payku. — Ejemplo: `666...` |
| ↳ `authorization_code` | string |  | Código de autorización. — Ejemplo: `10...` |
| ↳ `last_4_digits` | string |  | Últimos 4 dígitos de la tarjeta afiliada. — Ejemplo: `0000` |
| ↳ `installments` | int |  | Cuotas. — Ejemplo: `0` |
| ↳ `card_type` | string |  | Tipo de tarjeta. — Ejemplo: `VN` |
| ↳ `additional_parameters` | object |  | **Ejemplo** de parámetros adicionales que puede enviar payku. |
| ↳ ↳ `gateway` | string |  | Ejemplo: `CODE_GATEWAY` |
| ↳ ↳ `network` | object |  | Datos de la red del usuario: |
| ↳ ↳ ↳ `ip_address` | string |  | **Ejemplo** de IP Address del usuario: — Ejemplo: `192.0.2.123` |
| ↳ `currency` | string |  | Moneda. — Ejemplo: `VES` |
| `nullify` | object |  | Objeto que contiene información de la respuesta de la anulación |
| ↳ `status` | string |  | Estatus de anulación. Los posibles estados que puede obtener son los siguientes: - pending - awaiting_funds - waiting_bank_details - complete - reverse_deleted - reverse_completed — Ejemplo: `complete` |
| `gateway_response` | object |  | Objeto que contiene información de la respuesta de la transacción |
| ↳ `status` | string |  | Estatus de transacción.Los posibles estados que puede obtener son los siguientes: - pending - success - rejected - refunded partial - refunded — Ejemplo: `success` |
| ↳ `message` | string |  | Mensaje que describe el estado. - successful transaction - Rechazo de transacción. - Transacción debe reintentarse. - Error en transacción. - Rechazo por error de tasa. - Excede cupo máximo mensual. - Excede límite diario por transacción. - Rubro no autorizado. — Ejemplo: `successful transaction` |

*400* — Error en la solicitud.

```json
{
  "status": "failed",
  "type": "Unprocessable Entity",
  "message_error": "subject:invalid,amount:is empty,email:is empty,order:invalid"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de la solicitud. — Ejemplo: `failed` |
| `type` | string |  | Tipo de error ocurrido. — Ejemplo: `Unprocessable Entity` |
| `message_error` | string |  | Mensaje de error — Ejemplo: `subject:invalid,amount:is empty,email:is empty,order:invalid` |

*404* — Identificador no existe.

```json
{
  "status": "failed",
  "type": "Not Found",
  "id": "is not valid"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de la solicitud. — Ejemplo: `failed` |
| `type` | string |  | Tipo de error ocurrido. — Ejemplo: `Not Found` |
| `id` | string |  | Información de id — Ejemplo: `is not valid` |

### Listar

`GET /api/transaction?success=true`

Este método permite obtener la información de las transacciones realizados en payku, permite una paginación con un máximo de 4000 registros por página.

| Parámetro | Descripción | Ejemplo |
|-----------|-------------|---------|
| date_init | Fecha inicial para la búsqueda de transacciones. Si no se especifica, se usa la fecha actual | date_init=2025-01-01 |
| date_end | Fecha final para la búsqueda de transacciones. Si no se especifica, se usa la fecha actual | date_end=2025-12-31 |
| success | Filtra transacciones exitosas | success=true |
| pending | Filtra transacciones pendientes | pending=true |
| rejected | Filtra transacciones rechazadas | rejected=true |
| page | Número de página para paginación | page=1 |
| per_page | Cantidad de registros por página (máximo 4000) | per_page=100 |

**Ejemplo de URL completa:**
```
https://[URL_BASE]/api/transaction?date_init=2025-01-01&date_end=2025-12-31&success=true&page=1&per_page=100
```

**Respuestas**

*200*

```json
{
  "status": "success",
  "id": "trx3b...",
  "created_at": "2025-10-25 14:10:03",
  "order": "157...",
  "email": "payer@domain.com",
  "subject": "description of the order",
  "amount": 100,
  "payment": {
    "start": "2025-12-16 15:10:33",
    "end": "2025-12-16 15:10:36",
    "media": "VEPUY",
    "transaction_id": 107999,
    "payment_key": "pr...",
    "transaction_key": null,
    "deposit_date": "2023-10-05",
    "verification_key": "666...",
    "authorization_code": "10...",
    "last_4_digits": "0000",
    "installments": 0,
    "card_type": "VN",
    "additional_parameters": {
      "gateway": "CODE_GATEWAY",
      "network": {
        "ip_address": "192.0.2.123"
      }
    },
    "currency": "VES"
  },
  "nullify": {
    "status": "complete"
  },
  "gateway_response": {
    "status": "success",
    "message": "successful transaction"
  }
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de transacción.Los posibles estados que puede obtener son los siguientes: - register - pending - success - rejected — Ejemplo: `success` |
| `id` | string |  | Identificador único de la transacción — Ejemplo: `trx3b...` |
| `created_at` | string |  | Fecha de registro. — Ejemplo: `2025-10-25 14:10:03` |
| `order` | string |  | Número de orden. — Ejemplo: `157...` |
| `email` | string |  | Email del usuario — Ejemplo: `payer@domain.com` |
| `subject` | string |  | Descripción de la orden de compra. — Ejemplo: `description of the order` |
| `amount` | string |  | Monto. — Ejemplo: `100` |
| `payment` | object |  |  |
| ↳ `start` | string |  | Inicio de la transacción. — Ejemplo: `2025-12-16 15:10:33` |
| ↳ `end` | string |  | Fin de la transacción. — Ejemplo: `2025-12-16 15:10:36` |
| ↳ `media` | string |  | Medio de pago, utilizado por el usuario. — Ejemplo: `VEPUY` |
| ↳ `transaction_id` | int |  | Identificador único de la transacción — Ejemplo: `107999` |
| ↳ `payment_key` | string |  | Identificador del cobro creado por payku. — Ejemplo: `pr...` |
| ↳ `transaction_key` | string |  | Identificador único de la transacción |
| ↳ `deposit_date` | string |  | Fecha el cual se realizará el depósito al cliente. — Ejemplo: `2023-10-05` |
| ↳ `verification_key` | string |  | Código de verificación creado por payku. — Ejemplo: `666...` |
| ↳ `authorization_code` | string |  | Código de autorización. — Ejemplo: `10...` |
| ↳ `last_4_digits` | string |  | Últimos 4 dígitos de la tarjeta afiliada. — Ejemplo: `0000` |
| ↳ `installments` | int |  | Cuotas. — Ejemplo: `0` |
| ↳ `card_type` | string |  | Tipo de tarjeta. — Ejemplo: `VN` |
| ↳ `additional_parameters` | object |  | **Ejemplo** de parámetros adicionales que puede enviar payku. |
| ↳ ↳ `gateway` | string |  | Ejemplo: `CODE_GATEWAY` |
| ↳ ↳ `network` | object |  | Datos de la red del usuario: |
| ↳ ↳ ↳ `ip_address` | string |  | **Ejemplo** de IP Address del usuario: — Ejemplo: `192.0.2.123` |
| ↳ `currency` | string |  | Moneda. — Ejemplo: `VES` |
| `nullify` | object |  | Objeto que contiene información de la respuesta de la anulación |
| ↳ `status` | string |  | Estatus de anulación. Los posibles estados que puede obtener son los siguientes: - pending - awaiting_funds - waiting_bank_details - complete - reverse_deleted - reverse_completed — Ejemplo: `complete` |
| `gateway_response` | object |  | Objeto que contiene información de la respuesta de la transacción |
| ↳ `status` | string |  | Estatus de transacción.Los posibles estados que puede obtener son los siguientes: - pending - success - rejected - refunded partial - refunded — Ejemplo: `success` |
| ↳ `message` | string |  | Mensaje que describe el estado. - successful transaction - Rechazo de transacción. - Transacción debe reintentarse. - Error en transacción. - Rechazo por error de tasa. - Excede cupo máximo mensual. - Excede límite diario por transacción. - Rubro no autorizado. — Ejemplo: `successful transaction` |

*400* — Error en la solicitud.

```json
{
  "status": "failed",
  "type": "Unprocessable Entity",
  "message_error": "subject:invalid,amount:is empty,email:is empty,order:invalid"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de la solicitud. — Ejemplo: `failed` |
| `type` | string |  | Tipo de error ocurrido. — Ejemplo: `Unprocessable Entity` |
| `message_error` | string |  | Mensaje de error — Ejemplo: `subject:invalid,amount:is empty,email:is empty,order:invalid` |

*404* — Identificador no existe.

```json
{
  "status": "failed",
  "type": "Not Found",
  "id": "is not valid"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de la solicitud. — Ejemplo: `failed` |
| `type` | string |  | Tipo de error ocurrido. — Ejemplo: `Not Found` |
| `id` | string |  | Información de id — Ejemplo: `is not valid` |

## Wallet

### Realizar pagos a terceros desde mi wallet

`POST /api/wallet/payout`

Este método permite crear una orden de pago a un tercero utilizando los fondos de tu billetera virtual **payku**.

**Nota:** Para fines de prueba (Solo ambiente desarrollo), los montos específicos se procesarán automáticamente:
<br>
&bull;  Montos 1000, 2000, 3000: Se marcarán como **aprobados** automáticamente.
<br>
&bull;  Montos 1500, 2500, 3500: Se marcarán como **rechazados** automáticamente.

**Cuerpo de la solicitud**

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `email` | string | ✓ | Email del usuario — máximo 50 caracteres — Ejemplo: `payer@domain.com` |
| `phone` | string |  | Télefono del usuario — máximo 20 caracteres — Ejemplo: `04149876543` |
| `subject` | string | ✓ | Descripción de la orden — máximo 200 caracteres — Ejemplo: `description of the order` |
| `currency` | string | ✓ | Tipo de moneda (Formato ISO) — máximo 6 caracteres — Ejemplo: `VES` |
| `order` | string | ✓ | Orden del comercio — máximo 50 caracteres — Ejemplo: `order-commerce-999` |
| `amount` | integer | ✓ | Monto de la orden — máximo 14 dígitos — Ejemplo: `1000` |
| `accountbank_name` | string | ✓ | Nombre del titular de la cuenta — máximo 180 caracteres — Ejemplo: `John Doe` |
| `accountbank_rut` | string | ✓ | Cédula de identidad del titular Formato: (V/E/J) VXXXXXXXX — máximo 15 caracteres — Ejemplo: `V23654789` |
| `accountbank_sbif` | string | ✓ | Código del banco al que pertenece la cuenta bancaria. - 0102 Banco De Venezuela - 0104 Banco Venezolano De Credito - 0105 Banco Mercantil - 0108 Banco Provincial - 0114 Banco Del Caribe - 0115 Banco Exterior - 0128 Banco Caroni - 0134 Banesco - 0137 Sofitasa - 0138 Banco Plaza - 0146 Bangente - 0151 Banco Fondo Común - 0156 100% Banco - 0157 Delsur Banco Universal - 0163 Banco Del Tesoro - 0166 Banco Agrícola De Venezuela - 0168 Bancrecer - 0169 R4 Banco Microfinanciero C.A. - 0171 Banco Activo - 0172 Bancamiga - 0173 Banco Internacional De Desarrollo - 0174 Banplus - 0175 Banco Bicentenario - 0178 N58 Banco Digital - 0191 Banco Nacional De Credito — máximo 4 caracteres — Ejemplo: `0102` |
| `accountbank_type` | string | ✓ | Tipo de cuenta. - 1 Corriente - 3 Ahorro — máximo 1 caracter — Ejemplo: `1` |
| `accountbank_num` | string | ✓ | Número de cuenta del cliente en Venezuela Formato: (0412 / 0414 / 0424 / 0426 / 0416) 9876543 — máximo 200 caracteres — Ejemplo: `04149876543` |
| `url_notify` | string |  | Callback donde se notificará el resultado del pago. - Nota: Luego de realizar el pago a terceros payku respondera de forma automática al endpoint ingresado en urlnotify el resultado de la operación. - **Ejemplo Aprobado:** - { - "id": "morexzxxxx", - "identifier_payout": "morexzxxxx", - "order" : "367734544", - "status" : "success", - "update_at" : "2023-08-24 12:29:35", - "customer" : { - "name" : "Jhon Doe", - "phone" : "04149876543", - "document" : "V23654789", - "number" : "04149876543" - } - } - **Ejemplo Rechazado:** - { - "id": "morexzxxxx", - "identifier_payout": "morexzxxxx", - "order" : "367734544", - "status" : "banking_error", - "update_at" : "2023-08-24 12:29:35", - "customer" : { - "name" : "Jhon Doe", - "phone" : "04149876543", - "document" : "V23654789", - "number" : "04149876543" - } - } — máximo 600 caracteres — Ejemplo: `https://youwebsite.com/callback/commerce/order-commerce-999` |
| `additional_parameters` | object |  | Parámetros adicionales del cliente (Opcional). — máximo 4000 caracteres |
| ↳ `parameter_1` | string |  | Nombre del parámetro dado por el usuario payku — Ejemplo: `keyValue` |
| ↳ `parameter_2` | string |  | Nombre del parámetro dado por el usuario payku — Ejemplo: `keyValue` |

**cURL**

```bash
curl -X POST \
https://BASE-URL/api/wallet/payout \
-H 'Accept: application/json, text/plain, */*' \
-H 'Authorization: Bearer TOKEN-PUBLICO' \
-H 'Sign: SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO'  \
-H 'Content-Type: application/json' \
-H 'Host: BASE-URL' \
-d '{
  "email": "payer@domain.com",
  "phone": "04149876543",
  "subject": "payOut description 9876",
  "currency": "VES",
  "order": "9876",
  "amount": 1000,
  "accountbank_name": "Jhon Doe",
  "accountbank_rut": "V23654789",
  "accountbank_sbif": "0102",
  "accountbank_type": "1",
  "accountbank_num": "04149876543",
  "url_notify": "https://youwebsite.com/urlnotify?orderClient=9876",
  "additional_parameters": {
    "custom_parameter_1": "keyValue",
    "custom_parameter_2": "SpecificValue2",
    "external_reference": "REF-777"
  }
}'
```

**PHP**

```php
$client = new \GuzzleHttp\Client();
$body = $client->request('POST', 'https://BASE_URL/api/wallet/payout', [
  'json' => [
    'email' => 'payer@domain.com',
    'phone' => '04149876543',
    'subject' => 'payOut description 9876',
    'currency' => 'VES',
    'order' => '9876',
    'amount' => 1000,
    'accountbank_name' => 'Jhon Doe',
    'accountbank_rut' => 'V23654789',
    'accountbank_sbif' => '0102',
    'accountbank_type' => '1',
    'accountbank_num' => '04149876543',
    'url_notify' => 'https://youwebsite.com/urlnotify?orderClient=9876',
    'additional_parameters' => [
      'custom_parameter_1' => 'keyValue',
      'custom_parameter_2' => 'SpecificValue2',
      'external_reference' => 'REF-777'
    ]
  ],
  'headers' => [
    'Authorization' => 'Bearer TOKEN_PUBLICO',
    'Sign' => 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO'
  ]
])->getBody();
$response = json_decode($body);
```

**JS**

```js
const data = {
  "email": "payer@domain.com",
  "phone": "04149876543",
  "subject": "payOut description 9876",
  "currency": "VES",
  "order": "9876",
  "amount": 1000,
  "accountbank_name": "Jhon Doe",
  "accountbank_rut": "V23654789",
  "accountbank_sbif": "0102",
  "accountbank_type": "1",
  "accountbank_num": "04149876543",
  "url_notify": "https://youwebsite.com/urlnotify?orderClient=9876",
  "additional_parameters": {
    "custom_parameter_1": "keyValue",
    "custom_parameter_2": "SpecificValue2",
    "external_reference": "REF-777"
  }
};
const request = async (data) => {
  const response = await fetch('https://BASE_URL/api/wallet/payout', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer TOKEN_PUBLICO',
      'Sign': 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO'
    },
    body: JSON.stringify(data)
  });
  const result = await response.json();
  console.log(result)
}
request(data);
```

**Respuestas**

*200*

```json
{
  "status": "success",
  "identifier_wallet": "wvb5f7232dafff18f9",
  "identifier_payout": "mv40746ab8eff910f41e"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estado de la carga a la wallet. Los posibles estados son: - success: exitosa - failed: fallida — Ejemplo: `success` |
| `identifier_wallet` | string |  | Identificador del movimiento de la billetera virtual de payku. — Ejemplo: `wvb5f7232dafff18f9` |
| `identifier_payout` | string |  | Identificador del pago a tercero. — Ejemplo: `mv40746ab8eff910f41e` |

*400* — Error en la solicitud.

```json
{
  "status": "failed",
  "type": "Unprocessable Entity",
  "message_error": "subject:invalid,amount:is empty,email:is empty,order:invalid"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de la solicitud. — Ejemplo: `failed` |
| `type` | string |  | Tipo de error ocurrido. — Ejemplo: `Unprocessable Entity` |
| `message_error` | string |  | Mensaje de error — Ejemplo: `subject:invalid,amount:is empty,email:is empty,order:invalid` |

### Obtener payout V3

`GET /api/payoutv3/{identificadorPayout}`

Este método permite obtener un movimiento de pagos a terceros de su billetera virtual **payku** mediante un identificador:

Para realizar la consulta es necesario agregar al final del endpoint lo siguiente /{identificadorPayout} como por ejemplo: **api/payoutv3/wa24bg36767**.

**CURL**

```text
curl -X GET \
https://BASE-URL/api/payoutv3/{identificadorPayout}  \
-H 'Accept: application/json, text/plain, */*' \
-H 'Authorization: Bearer TOKEN-PUBLICO' \
-H 'Sign: SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO'  \
-H 'Content-Type: application/json' \
-H 'Host: BASE-URL' \
```

**PHP**

```php
$client = new \GuzzleHttp\Client();
  $body = $client->request('GET', 'https://BASE_URL/api/payoutv3/{identificadorPayout}', [
    'headers' => [
      'Authorization' => 'Bearer TOKEN_PUBLICO',
      'Sign' => 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO'
    ]
  ])->getBody();
$response = json_decode($body);
```

**JS**

```js
const request = async () => {
  const response = await fetch('https://BASE_URL/api/payoutv3/{identificadorPayout}', {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json',
      'Authorization': 'Bearer TOKEN-PUBLICO',
      'Sign': 'SHA256-REQUEST-PATH-VALUE-TOKEN-PRIVADO'
    },
  });
  const result = await response.json();
  console.log(result)
}

request();
```

**Respuestas**

*200*

```json
{
  "payout": {
    "id": "war3999847529816f2",
    "phone": "111111111",
    "email": "test@test.com",
    "subject": "subject order",
    "amount": "3680",
    "accountbank_rut": "V23654789",
    "accountbank_name": "test",
    "accountbank_type": 1,
    "accountbank_num": 123123123,
    "accountbank_sbif": "0102",
    "status": "pending",
    "update_at": "2023-06-09 21:10:46",
    "origin_wallet": "wa1933f37cdaf7d1c6",
    "reason_rejection": " Error CCA 51. Cuenta Beneficiario no Existe, error_creditor_account_not_found"
  }
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `payout` | object |  | Datos cuenta destino. |
| ↳ `id` | string |  | Identificador de la cuenta destino. — Ejemplo: `war3999847529816f2` |
| ↳ `phone` | string |  | Teléfono del titular de cuenta destino. — Ejemplo: `111111111` |
| ↳ `email` | string |  | Correo del titular de cuenta destino. — Ejemplo: `test@test.com` |
| ↳ `subject` | string |  | Estatus de la solicitud. — Ejemplo: `subject order` |
| ↳ `amount` | string |  | Monto a depositado en la cuenta destino. — Ejemplo: `3680` |
| ↳ `accountbank_rut` | string |  | Rut del titular de la cuenta destino. — Ejemplo: `V23654789` |
| ↳ `accountbank_name` | string |  | Nombre del titular de la cuenta destino. — Ejemplo: `test` |
| ↳ `accountbank_type` | integer |  | Tipo de cuenta del banco destino. — Ejemplo: `1` |
| ↳ `accountbank_num` | integer |  | Número de cuenta del banco destino. — Ejemplo: `123123123` |
| ↳ `accountbank_sbif` | string |  | Código del banco al que pertenece la cuenta bancaria. — Ejemplo: `0102` |
| ↳ `status` | string |  | Estatus del movimiento. - pending ("payout registrado") - processing ("payout en proceso de pago") - success ("payout depositado exitosamente") - banking_error ("payout rechazado por el banco") - fraud_prevention ("payout rechazado por compliance") — Ejemplo: `pending` |
| ↳ `update_at` | string |  | Fecha que se realizo la solicitud. — Ejemplo: `2023-06-09 21:10:46` |
| ↳ `origin_wallet` | string |  | Id de la wallet origen. — Ejemplo: `wa1933f37cdaf7d1c6` |
| ↳ `reason_rejection` | string |  | Motivo del rechazo. — Ejemplo: `Error CCA 51. Cuenta Beneficiario no Existe, error_creditor_account_not_found` |

*400* — Error en la solicitud.

```json
{
  "status": "failed",
  "type": "Unprocessable Entity",
  "message_error": "subject:invalid,amount:is empty,email:is empty,order:invalid"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de la solicitud. — Ejemplo: `failed` |
| `type` | string |  | Tipo de error ocurrido. — Ejemplo: `Unprocessable Entity` |
| `message_error` | string |  | Mensaje de error — Ejemplo: `subject:invalid,amount:is empty,email:is empty,order:invalid` |

*404* — Identificador no existe.

```json
{
  "status": "failed",
  "type": "Not Found",
  "id": "is not valid"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de la solicitud. — Ejemplo: `failed` |
| `type` | string |  | Tipo de error ocurrido. — Ejemplo: `Not Found` |
| `id` | string |  | Información de id — Ejemplo: `is not valid` |

## Bancos

Permite ver la lista de los bancos asociados.

### Obtener lista de bancos por el tipo de moneda

`GET /api/banks?currency=ves`

Este método permite obtener una lista de los bancos asociados filtrados por la moneda.
Para filtrar por la moneda, hay que agregar el query params currency con el valor de la moneda.

**CURL**

```text
curl -X GET \
https://BASE-URL/api/banks?currency=ves  \
-H 'Accept: application/json, text/plain, */*' \
-H 'Content-Type: application/json' \
-H 'Host: BASE-URL' \
```

**PHP**

```php
$client = new \GuzzleHttp\Client();
  $body = $client->request('GET', 'https://BASE_URL/api/banks?currency=ves', [
  ])->getBody();
$response = json_decode($body);
```

**JS**

```js
const request = async () => {
  const response = await fetch('https://BASE_URL/api/banks?currency=ves', {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json'
    },
  });
  const result = await response.json();
  console.log(result)
}
request();
```

**Respuestas**

*200*

```json
{
  "status": "success",
  "banks": [
    {
      "code": "0102",
      "name": "Banco de Venezuela",
      "currency": "VES"
    }
  ]
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus del endpoint. Los posibles estados que puede obtener son los siguientes: - success — Ejemplo: `success` |
| `banks` | array of objects |  | Ejemplo: `[{"code":"0102","name":"Banco de Venezuela","currency":"VES"}]` |
| ↳ `code` | string |  | Código del banco al que pertenece la cuenta bancaria. — Ejemplo: `Banco de Venezuela` |
| ↳ `name` | string |  | Nombre de la entidad bancaria. — Ejemplo: `Banco de Venezuela` |
| ↳ `currency` | string |  | Moneda — Ejemplo: `VES` |

*400* — Error en la solicitud.

```json
{
  "status": "failed",
  "type": "Unprocessable Entity",
  "message_error": "Hay un problema con tu request"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de la solicitud. — Ejemplo: `failed` |
| `type` | string |  | Tipo de error ocurrido. — Ejemplo: `Unprocessable Entity` |
| `message_error` | string |  | Mensaje de error — Ejemplo: `Hay un problema con tu request` |

## Métodos de pago

Permite ver la lista de los métodos de pago utilizados por payku.

### Obtener lista de métodos de pago por el tipo de moneda

`GET /api/paymentmethods?currency=ves`

Este método permite obtener una lista de los métodos de pago en payku.
Para filtrar por la moneda, hay que agregar el query params currency con el valor de la moneda.

**CURL**

```text
curl -X GET \
https://BASE-URL/api/paymentmethods?currency=ves  \
-H 'Accept: application/json, text/plain, */*' \
-H 'Content-Type: application/json' \
-H 'Host: BASE-URL' \
```

**PHP**

```php
$client = new \GuzzleHttp\Client();
  $body = $client->request('GET', 'https://BASE_URL/api/paymentmethods?currency=ves', [
  ])->getBody();
$response = json_decode($body);
```

**JS**

```js
const request = async () => {
  const response = await fetch('https://BASE_URL/api/paymentmethods?currency=ves', {
    method: 'GET',
    headers: {
      'Content-Type': 'application/json'
    },
  });
  const result = await response.json();
  console.log(result)
}
request();
```

**Respuestas**

*200*

```json
{
  "status": "success",
  "payment_methods": [
    {
      "currency": "VES",
      "payment": 17,
      "name": "Vepuy",
      "description": "Utiliza tu banco, simplifica tus transferencias."
    }
  ]
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus del endpoint. Los posibles estados que puede obtener son los siguientes: - success — Ejemplo: `success` |
| `payment_methods` | array of objects |  | Ejemplo: `[{"currency":"VES","payment":17,"name":"Vepuy","description":"Utiliza tu banco, simplifica tus transferencias."}]` |
| ↳ `code` | string |  | Código del banco al que pertenece la cuenta bancaria. — Ejemplo: `Banco de Venezuela` |
| ↳ `name` | string |  | Nombre de la entidad bancaria. — Ejemplo: `Banco de Venezuela` |
| ↳ `currency` | string |  | Moneda — Ejemplo: `VES` |

*400* — Error en la solicitud.

```json
{
  "status": "failed",
  "type": "Unprocessable Entity",
  "message_error": "Hay un problema con tu request"
}
```

| Campo | Tipo | Requerido | Descripción |
| --- | --- | --- | --- |
| `status` | string |  | Estatus de la solicitud. — Ejemplo: `failed` |
| `type` | string |  | Tipo de error ocurrido. — Ejemplo: `Unprocessable Entity` |
| `message_error` | string |  | Mensaje de error — Ejemplo: `Hay un problema con tu request` |
