# Global Bridge Connections

Documentación oficial de los servicios prestados

## Introducción

La API de GBC está organizada en torno a REST. Nuestra API tiene direcciones URL predecibles orientadas a los recursos, acepta cuerpos de solicitud codificados en formularios, devuelve respuestas codificadas en JSON y utiliza códigos de respuesta, autenticación y verbos HTTP estándar.

Puede usar la API de GBC en modo de prueba, que no afecta sus datos en vivo (producción). Se suministrarán API Keys que usa para autenticar la solicitud, determinar si la solicitud es en modo en vivo (producción) o en modo de prueba (staging)..

La API de GBC no admite actualizaciones masivas. Puede trabajar en un solo objeto por solicitud.

La API de GBC difiere para cada cuenta a medida que lanzamos nuevas versiones y adaptamos la funcionalidad.

## Inicia tu uso de las API de GBC

Para continuar recomendamos primero seguir los siguientes artículos:

{% content-ref url="/pages/RkMrOh4P6TFifrCVy3bN" %}
[Glosario](/glosario)
{% endcontent-ref %}

{% content-ref url="/pages/jnaEkAPuFy6hgbiUzMww" %}
[Módulos](/modulos)
{% endcontent-ref %}

{% content-ref url="/pages/o5O92jvYgTXDs3fu5zta" %}
[Entornos de la API](/entornos-de-la-api)
{% endcontent-ref %}

{% content-ref url="/pages/xykzIsaVBSOKh5KYS71m" %}
[Solicitud de API Keys](/solicitud-de-api-keys)
{% endcontent-ref %}

{% content-ref url="/pages/mrKZmj0c93DSfK40TUTC" %}
[Seguridad](/seguridad)
{% endcontent-ref %}

{% content-ref url="/pages/xLuiU7m0fwds5aP9jDAx" %}
[Comienza de forma sencilla](/comienza-de-forma-sencilla)
{% endcontent-ref %}


# Glosario

Términos utilizados en toda la documentación, necesaria para el entendimiento del contexto.

### GBC

Es la manera de referirnos a Global Bridge Connections en nuestra documentación o en nuestras reuniones.

### Cliente B2B (Merchant)

**B2B** es la abreviatura de business-to-business (de negocio a negocio) y hace referencia al intercambio de servicios, información y/o productos de una empresa a otra. Entonces cuando nos referimos en GBC a un cliente B2B sería un cliente corporativo.

### Cliente Final

El cliente final lo podemos definir como el **Cliente** al cual el **Cliente B2B** ofrece nuestros servicios.

### Módulos de GBC

Podemos definir un módulo de GBC como una herramienta desarrollada por GBC para facilitar la solución de un problema o mejorar una experiencia en una implementación de un servicio. Por ejemplo (Módulo de Tarjetas Prepagadas, Módulo de pasarela de pagos, etc).

### API

Una API o interfaz de programación de aplicaciones es un conjunto de definiciones y protocolos que se usa para diseñar e integrar el software de las aplicaciones.

### Entornos de la API

Un entorno de una API se refiere a donde se encuentra la información y conexiones de los módulos de GBC, por ejemplo un ambiente de prueba se puede definir como (staging) y un ambiente productivo (producción) el cual ya tendría transacciones reales.

### API Keys

En los módulos de **GBC** vamos a encontrar un protocolo seguro de conexión, donde la pieza principal de este protocolo serian las **API Keys** que se les otorga a cada **Cliente B2B** para el correspondiente acceso a los **Entornos de cada API**.


# Módulos

Descripción de los recursos disponibles en nuestra API

### Módulo de Tarjetas Prepagas (TPP)

Este módulo tiene como objetivo poner a disposición, de los clientes B2B de GBC, la herramienta para poder emitir y gestionar tarjetas prepagadas en Perú.


# Entornos de la API

Información relacionada a los ambientes utilizados en la API de GBC

### STAGING (Ambiente de pruebas)

Ambiente exclusivo para hacer operaciones de pruebas sobre los módulos API de GBC. Para trabajar con este entorno vas a necesitar las siguientes variables:

**Dominio**: <https://stgapicards.gbc.pe/>

***API\_PUBLIC\_KEY*** : Datos serán suministrado al Merchant

**API\_*****SECRET\_*****KEY :** Datos seán  suministrados al Merchant

### PRODUCCIÓN (Ambiente Live)

Ambiente exclusivo para operaciones reales sobre los módulos API de GBC. Para trabajar con este entorno vas a necesitar las siguientes variables:

**Dominio**: <https://apicards.gbc.pe/>

***API\_PUBLIC\_KEY*** : Datos serán suministrados al Merchant

**API\_*****SECRET\_*****KEY :** Datos serán suministrados al Merchant


# Solicitud de API Keys

Para hacer uso de las herramientas API's que provee GBC necesitas conocer y solicitar tus API keys.

La solicitud de las API Keys se deben hacer a  través del asesor comercial de GBC asignado.


# Seguridad

Antes de empezar, en GBC nos ocupamos de mantener la seguridad de nuestras herramientas y de la información que se pueda transferir vía nuestra API.

En GBC, la Seguridad de la Información compartida es el punto clave para la interacción con nuestra API. Teniendo eso en cuenta, hemos desarrollado unos métodos y/o maneras de asegurar el correcto uso de los Endpoints y del correcto uso de los datos sensibles que se van a transferir en nuestra API.


# Solicitudes Firmadas

Información relacionada con la forma de comunicación segura en la API

En GBC, hemos implementado una capa de seguridad de peticiones a nuestros endpoints públicos y privados, la cual consiste en generar una firma única por cada petición enviada a los ambientes de GBC. A continuación encontrarás el paso a paso para lograr firmar tus solicitudes a nuestras API.

### Headers

En las cabeceras de cada petición, GBC solicitará los siguientes parámetros obligatorios:

| Campo               | Tipo de dato | Detalle                                                                                                                                                                                      |
| ------------------- | ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| authorization-token | string       | <p>Token que se genera genera luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p>                                                                |
| signature           | string       | Firma generada con los valores del payload y encriptada con la secret key del cliente B2B. Este resultado (firma) se envía en los headers de cada petición junto con el authorization-token. |

### Generación del signature (firma)

A continuación, los pasos para la generación de la firma:&#x20;

1. Tener **api-public-key** y **api-secret-key**.
2. Agregar el campo generado en el momento **timestamp** a los datos (objeto) a firmar.
3. Ordenar los campos (objeto) que se quieren firmar de forma alfabética ascendente.
4. Pasar el objeto a tipo texto.
5. Ejecutar la función SHA256, donde la llave de la firma seria con el valor de la  (**api-secret-key**)
6. El dato resultante de este cálculo sería lo que colocaría en el campo signature en los Headers

### Ejemplo del cálculo de firma (Nodejs)

#### Objeto a firmar

```
const params = {
        alias,
        timestamp,
}
```

**Función de firma**

```
// Liberias Crypto
const CryptoJS = require("crypto-js");
const queryString = require('query-string');
const axios = require('axios');

// Claves secretas
const SECRET_KEY = 'tu-secret-key-uuid';
const PUBLIC_KEY = 'tu-public-key-uuid';
const URL = 'https://stgapicards.gbc.pe/api-hub/v1/merchants/me';

// Función de firma de datos
const signatureRequest = (params, secretKey) => {
    params = Object.keys(params)
        .sort()
        .reduce((acc, key) => {
            acc[key] = params[key];
            return acc;
        }, {});
    const query = queryString.stringify(params);
    return CryptoJS.SHA256(query, { secretKey }).toString();
}

// Ejecución de la firma en una función de ejemplo

const getUserData = (alias) =>
{
    const timestamp = Math.floor(Date.now());

    const params = {
        alias,
        timestamp,
    }

     const signatureResponse = signatureRequest(params, SECRET_KEY);
    
     axios.post(URL, params, {
        headers: {
            'Api-Public-Key': PUBLIC_KEY,
            'Signature': signatureResponse
        }
     })
     .then( (response) => console.log('RESPONSE:::', response.data ))
     .catch( (error) => console.log('ERROR:::', error.response.data));
}
```


# Protección de datos sensibles

Protocolo de exposición de datos sensibles en los endpoints de la API

En GBC hemos realizado un protocolo seguro para poder tener datos sensibles en nuestros Módulos de API.

### ¿Qué **consideramos como un dato sensible?**

Hemos definido un dato sensible como una información importante que necesite una capa más de seguridad con el objetivo de cumplir leyes, normas, reglamentos y/o certificaciones. Unos casos de ejemplo pueden ser datos personales de un cliente final o también podemos ver un dato sensible como los números de una tarjeta de débito y/o crédito.

### **Proceso de consulta de endpoint con datos sensibles**

1. Se deben solicitar las llaves que permitirá desencriptar los datos sensibles en el endpoint (/api-hub/v1/dynamic-keys). Este endpoint devuelve la información de la llave secreta generada como uso único y el campo (key\_id).
2. &#x20;Se debe invocar el endpoint que contiene data sensible enviando los datos necesarios y agregando el campo (key\_id).

### Proceso de desencriptar datos sensibles

En esta sección se detallan cómo desencriptar o ver los datos sensibles, cada dato está en formato base64.

**Paso a paso para desencriptar**

1. Obtener a la disponibilidad el PrivateKey (Llave privada), el passphrase (Frase de contraseña), y el dato encriptado de **base64,** es necesario convertir el dato a **Buffer.**
2. Ejecutar la función para desencriptar y enviar como parámetros el passpharse, privateKey, dataEncrypted de tipo **Buffer.**
3. La función retorna el dato original, para visualizar es necesario convertir a **utf8.**

**Ejemplo en NodeJS**

```
const { publicEncrypt, constants, privateDecrypt } = require('crypto');

function decrypt(passphrase: string, privateKey: string, dataEncrypted: Buffer) {
    return privateDecrypt(
      {
        key: privateKey,
        padding: constants.RSA_PKCS1_OAEP_PADDING,
        oaepHash: "sha512",
        passphrase
      },
      dataEncrypted
    ); 
}
// Convert base64 to Buffer
const encryptedBuff = Buffer.from(dataBase64, 'base64')

// Decrypt Data
const decrypt = decrypt(keys.passphrase, keys.privateKey, encryptedBuff);
console.log('decrypt::', decrypt)

// Decrypt plain
console.log('decrypt:: REAL DATA', decrypt.toString('utf8'))
```

### **Endpoints relacionados** con datos sensibles

{% content-ref url="/pages/UcMKY463e0etYAbk9sdk" %}
[Cards](/reference/api-reference/cards)
{% endcontent-ref %}


# Comienza de forma sencilla

Explicamos el paso a paso para que tu negocio pueda utilizar las herramientas que brinda GBC en forma de APIs.

{% hint style="info" %}
**Recordatorio:** GBC utilizar entornos seperados donde podrás hacer uso y probar las herramientas APIs, esto lo que significa es que tendrás a tu disposición API Keys para cada ambiente Staging(Ambiente de pruebas) y Producción (Ambiente con transacciones reales).
{% endhint %}

## Validemos tus API Keys con una petición de prueba

Para esto utilizaremos un endpoint de nuestra API público que nos permite realizar la comprobación de que todo está bien configurado en el contexto como Merchant.

{% content-ref url="/pages/JFnB4By3N114UkIX33Kj" %}
[Merchants](/reference/api-reference/merchants)
{% endcontent-ref %}


# Estatus de entidades

Información detallada de cada estatus que pueden tener las entidades de las API de GBC

### Estatus de Tarjetas (Cards)

| Estado    | Descripción                                                                                                                             |
| --------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| INACTIVE  | Estado inicial cuando se asigna una tarjeta a un cliente                                                                                |
| ACTIVE    | Estado cuando se le activa la tarjeta a un cliente para que éste pueda hacer uso de ella                                                |
| SUSPENDED | Estado que detalla una suspensión o bloqueo temporal, con posibilidad de activarla (Usado cuando sale fuera del país o no uso temporal) |
| BLOCKED   | Estado que detalla una pérdida o robo. Sin posibilidad de una activación posterior                                                      |
| CANCELED  | Estado que detalla una cancelación, cuando la persona posee una tarjeta y ya no la quiere. Sin posibilidad de una activación posterior  |


# Códigos de Error

<table><thead><tr><th width="124">Código</th><th>Detalle</th></tr></thead><tbody><tr><td>99999</td><td>No se pudo procesar la información</td></tr><tr><td>A0001</td><td>El BIN ya se encuentra registrado</td></tr><tr><td>A0002</td><td>El BIN no puede ser nulo o vacío</td></tr><tr><td>A0003</td><td>La descripción del BIN no puede ser nulo o vacío</td></tr><tr><td>A0004</td><td>El identificador no puede ser nulo o vacío</td></tr><tr><td>A0005</td><td>No se encontraron registros</td></tr><tr><td>A0006</td><td>El código del cliente ya se encuentra registrado</td></tr><tr><td>A0007</td><td>El número del documento ya se encuentra registrado</td></tr><tr><td>A0008</td><td>El tipo del documento no puede ser nulo o vacío</td></tr><tr><td>A0009</td><td>El número del documento no puede ser nulo o vacío</td></tr><tr><td>A0010</td><td>El nombre de la compañía no puede ser nulo o vacío</td></tr><tr><td>A0011</td><td>El país de la compañia no puede ser nulo o vacío</td></tr><tr><td>A0012</td><td>La lista blanca de ips no puede ser nulo o vacío</td></tr><tr><td>A0013</td><td>La clave pública no puede ser nulo o vacío</td></tr><tr><td>A0014</td><td>La clave secreta no puede ser nulo o vacío</td></tr><tr><td>A0015</td><td>La clave de firma no puede ser nulo o vacío</td></tr><tr><td>A0016</td><td>El código del cliente no puede ser nulo o vacío</td></tr><tr><td>A0017</td><td>El nombre de la compañia ya se encuentra registrado</td></tr><tr><td>A0018</td><td>El estado no puede ser nulo o vacío</td></tr><tr><td>A0019</td><td>El negocio no está registrado</td></tr><tr><td>A0020</td><td>La clave pública no existe</td></tr><tr><td>A0021</td><td>El rol de acceso no puede ser nulo o vacío</td></tr><tr><td>A0022</td><td>No existe un rol asignado</td></tr><tr><td>A0023</td><td>El apellido no puede ser nulo o vacío</td></tr><tr><td>A0024</td><td>La fecha de nacimiento no puede ser nulo o vacío</td></tr><tr><td>A0025</td><td>La dirección no puede ser nulo o vacío</td></tr><tr><td>A0026</td><td>La ciudad no puede ser nulo o vacío</td></tr><tr><td>A0027</td><td>El código postal no puede ser nulo o vacío</td></tr><tr><td>A0028</td><td>El código de ciudad no puede ser nulo o vacío</td></tr><tr><td>A0029</td><td>El numero de móvil no puede ser nulo o vacío</td></tr><tr><td>A0030</td><td>El email no puede ser nulo o vacío</td></tr><tr><td>A0031</td><td>La ocupación no puede ser nulo o vacío</td></tr><tr><td>A0032</td><td>El cliente ya encuentra registrado</td></tr><tr><td>A0033</td><td>El nombre no puede ser nulo o vacío</td></tr><tr><td>A0034</td><td>El cliente no se encuentra registrado</td></tr><tr><td>A0035</td><td>El término de búsqueda no puede ser nulo o vacío</td></tr><tr><td>A0036</td><td>No se pudo crear el registro</td></tr><tr><td>A0037</td><td>El cliente no se encuentra registrado</td></tr><tr><td>A0038</td><td>El género no puede ser nulo o vacío</td></tr><tr><td>A0039</td><td>No se encuentra autorizado para esta operación</td></tr><tr><td>A0040</td><td>La descripción no puede ser nulo o vacío</td></tr><tr><td>A0041</td><td>El código no puede ser nulo o vacío</td></tr><tr><td>A0042</td><td>El identificador del SUB_BIN no puede ser nulo o vacío</td></tr><tr><td>A0043</td><td>El código de producto ya se encuentra registrado</td></tr><tr><td>A0044</td><td>El SUB_BIN asignado no existe</td></tr><tr><td>A0045</td><td>El identificador del cliente no puede ser nulo o vacío</td></tr><tr><td>A0046</td><td>El identificador del producto no puede ser nulo o vacío</td></tr><tr><td>A0047</td><td>El producto no se encuentra registrado</td></tr><tr><td>A0048</td><td>El identificador de la tarjeta de cliente no puede ser nulo o vacío</td></tr><tr><td>A0049</td><td>La tarjeta de cliente no se encuentra registrado</td></tr><tr><td>A0050</td><td>La tarjeta de cliente no se encuentra registrado</td></tr><tr><td>A0051</td><td>No se encontró ninguna llave de acceso</td></tr><tr><td>A0052</td><td>El negocio no tiene una configuración registrada</td></tr><tr><td>A0053</td><td>El negocio ya tiene una configuración registrada</td></tr><tr><td>A0054</td><td>El identificador del negocio principal no puede ser nulo o vacío</td></tr><tr><td>A0055</td><td>El negocio ya está registrado</td></tr><tr><td>A0056</td><td>El identificador del token de acceso no puede ser nulo o vacío</td></tr><tr><td>A0057</td><td>El token de acceso del producto de negocio no se encuentra registrado</td></tr><tr><td>A0058</td><td>El negocio no se encuentra registrado</td></tr><tr><td>A0059</td><td>Llaves de acceso existentes</td></tr></tbody></table>


# API Reference

Descripción de las API disponibles en GBC

Para conocer los detalles de cada API, consulte nuestra documentación completa.

## Métodos

Recordemos todos los métodos CRUD, cada una de las letras de esta sigla corresponden a una acción en particular: ***Create*****&#x20;(crear),&#x20;*****Read*****&#x20;(leer),&#x20;*****Update*****&#x20;(actualizar) y&#x20;*****Delete*****&#x20;(eliminar)**.&#x20;

A continuación encontrará todos los módulos correspondientes a la administración y consultas de los negocios, clientes y tarjetas.

{% content-ref url="/pages/alQPuf1FCYXEH0DYhCXe" %}
[Authentications](/reference/api-reference/authentications)
{% endcontent-ref %}

{% content-ref url="/pages/gmXT2UjZcgOjMj9GoSmc" %}
[Security](/reference/api-reference/security)
{% endcontent-ref %}

{% content-ref url="/pages/JFnB4By3N114UkIX33Kj" %}
[Merchants](/reference/api-reference/merchants)
{% endcontent-ref %}

{% content-ref url="/pages/BTTGzeuRzSZnMX4dQLoL" %}
[Clients](/reference/api-reference/clients)
{% endcontent-ref %}

{% content-ref url="/pages/UcMKY463e0etYAbk9sdk" %}
[Cards](/reference/api-reference/cards)
{% endcontent-ref %}

{% content-ref url="/pages/qoaRZTRJQIdXra1TViCo" %}
[Client-cards](/reference/api-reference/client-cards)
{% endcontent-ref %}


# Authentications

Información sobre endpoints relacionados con la entidad Merchant, para su correspondiente autenticación.

## Login o inicio de sesión de un merchant

<mark style="color:green;">`POST`</mark> `/api-hub/v1/auth/merchant/login`

El token tiene una duración de 1 hora.

#### Request Body

| Name                                          | Type   | Description                   |
| --------------------------------------------- | ------ | ----------------------------- |
| public\_key<mark style="color:red;">\*</mark> | String | El llave pública del merchant |
| secret\_key<mark style="color:red;">\*</mark> | String | El llave secreta del merchant |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
	"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwic3ViamVjdCI6InRlc3RAZ21haWwuY29tIiwiaWF0IjoxNTE2MjM5MDIyfQ.ecspcYS8Da_WEvyD-KdE11ydIkmDwhJocCokwy1h4ck"
}
```

{% endtab %}
{% endtabs %}

## Se confirma el token de acceso de un merchant

<mark style="color:orange;">`PUT`</mark> `/api-hub/v1/auth/merchants/access-tokens/confirm`

Sólo se ejecuta por única vez en el primer login para generar sus nuevas credenciales, a las cuales sólo usted podrá tener acceso.&#x20;

:warning: El Response devolverá sus nuevas credenciales y estas debe guardarlas para poder iniciar y generar sus token de acceso. &#x20;

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"id": "be4b0ed9-be13-4604-a8cc-4204f1468d75",
		"status": "ACTIVE",
		"created_at": "2022-11-19T22:37:07.601516+00:00",
		"updated_at": "2022-11-19T22:37:07.601516+00:00",
		"deleted_at": null,
		"is_deleted": false,
		"is_deleted_by": null,
		"merchant_id": "6a89bef8-6dbd-4963-b26f-bb928efaa4b2",
		"public_key": "9a5fa3fe-c284-44eb-ab1d-7b8572dde410",
		"secret_key": "ceeba05c-b1ab-43d3-8274-7e6538fcfc5f",
		"is_verify": true,
		"access_role": "gbc_core_role_api"
	}
}
```

{% endtab %}

{% tab title="401: Unauthorized " %}

```javascript
{
    "message": "Authorization is missing",
    "data": []
}
```

{% endtab %}
{% endtabs %}


# Security

Página de dedicada a endpoints de seguridad

## Este endpoint detalla cómo crear una llave de encriptación.

<mark style="color:green;">`POST`</mark> `/api-hub/v1/dynamic-keys`

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                        | Type   | Description                                                                                                                    |
| ------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| timestamp<mark style="color:red;">\*</mark> | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK Detalle de clave dinamica" %}
**Definición del response**

**id** El identificador de la llave.

**private\_key** La llave privada, servirá para desencriptar los datos sensibles.

**passphrase** La llave de contraseña, servirá para desencriptar los datos sensibles.

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"id": "83ff7e0c-5b68-5c07-4ac9-b0106faf937a",
		"private_key": "-----BEGIN ENCRYPTED PRIVATE KEY-----\nMIIJrTBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQINNYwIGlX8IYCAggA\nMAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBDQn6BgrJvVtGWD4Q9VE8qSBIIJ\nUJUWL9n47TiHMGp6mRtCdX5HA6YQeYTGVlzE6glcDdomzlsXWIOKy2270lLwKybj\nFxcdHqdoJ1sg8Wbrjb7EjQXw2+WiCjtt5QhM4PKwf6XLOX7dOtHWhngNbLpkRJL7\nSTO3ii86zNr96agmUgtJms8j/r06jhra835TSw42DcHq1edLFt7s1+zci8FbdqL9\nTPZFDLLf9UItX6S5v7qyVm7j2w4nBZ1qt1lgAT41+kQe5KLD94mGCs2kGu5GCyhx\nEt0B+/SIeZWo3hx27n8UD5SEiVnPxnP9ZBy7SXxXf9R6NXjlDFjuTRh4dlcKpvIU\nsatmKMFr7DdBuHccnGsmOugatBYB6buZ5bdIjZzGQNEAZbYbWDtlk17zpJhZ2pJn\nP15oy93u4CMfOap+KjyFzUbnvZUPgZNG6nXGNik7iBNywtcmWMc9fK+LXqEPbC30\nnp1CvNMfSsx0yeTBkr9YJSisjhJ3KkyTkPlyo94eQaj4LkO2Tk1JgGFY9EQFBHm4\nJvQNdKxmvFhNCG2hKu02CWOqU6DSBFJEfJIFOXXk3RTECPK7q1Jp9d+4ySB22Lkm\n03htPPfN6I4FifiyBWxWYobKMUeWBSewpi4heVuJ+VlCRc9BsDTUaDRzlZi8ihVq\nq5Q88qFUcKAW3rMaNkoS18HOix3pIrViD+6TiyHF+p2HutHxuMQUFcsW7LXo347l\nedgev21RTaf30bNSlmaUNO8IMDv40r7WvSXeMxWNepS586bcoPI/cOg6WY6J7OfP\nTbBnooEEp34ZRI6UoKIP3aq3YF4v04By2MtaoUNOXmoOP6mljev7WYDpjo8lv96E\nS8xXFJBA4ixAzAhwhhOPemrSZJOBLYBOeKwUSHLivnURjKjKEYP77wXO9uqjHipN\nKLuxb9uGuVX9rLSln0h8xOn5GIb/MkQjWfr0hE21qSbUBa/uBpEqtrn13qKNYOqo\nzxCezdHJwxusy0VdI0SFIrA1no657AgyzrH4SSQ9LKSbVBa6dVI97V/FpDmWi5/+\nD7lEfRlDqtJS1GQlONiUo0HnOfFSM6WFg9dsI9jL7KMD/vZm5sIHwGEBDSfum/0m\naDP0OjX0p9ScgcRfOaS/povLzACWVAwFlo7ZlUZE7Slo+/JgJcHl96sTcENMJ+WH\n5Ow0qbW8uO2CDWhSsoWxLSzug0gAPR1IMPxekWfvalFQLslbbTdIFPMNqPWZq2cM\n8DiVVBBhoGWdlCQi7PD492oofH4HuxAv69RzJk3LRN9AveVRXqZ2VIqbfx67sj71\npBtyjJDeihtvpof2gICRPP/G1LDxz2IYvpqi7ccsiaMEzcZ910TCHRHRKska97Kq\nenvCg8daKON+DnBvQ/TECViYc7tyxrOVKrOe8rSVW8DJ44Re/fa6G0PMjS/KeyY+\nNtPSCCWr1LpQ/Hl/4GoKlKNH/eZ+qBwelexxMhrM5/dX0p/ppr6ACVZmUCnsDLxK\newCszT+ex4NdXgZRle9MUjTEBheQdLWvmMMr/QzCJIHidClTN9bhKD5y1w1Q8pj2\nnie9FOzy0ebIvI9VYSYn6fswrFKRx7gXiVbq4USdt6FB1+RUdhJ+Zi/kuiBfmB4T\nHBIaTM6B1DtV6f4Erq6JmqE9+f4vaEtC5QwT9rLOZCu+I2OKUOaHJTaVCfAVOGhk\nH4GQxVLykxEGpM/tXPj755u4ddfVYkR7heyFlIVtayybPYDQy02g3C2H7VrzvB34\nEbNYUhJVSoJ/uw6PYN92aA9mJ7kb4u69jjHTHO6F+HvK0fbbYOS2vA348UK1x7bX\nrMxkTUh8OId3A7ORtYITNq6uWPBIMVcU8htPlWtTSx4dbpfqmjajNFyU76MVlk0r\nPJFmUHdaVt1m1ljZ6aHZnvsuRTixr3IRRPTmCjdEZOghhM9Dqx6FPE7W2p9FtGFD\n3bH/dZq6GPbzfKLM5/XdfsLq8UGS7uBrFANu99+BDLB4/xRmtrAb0fpZHYV3TX1d\nencG6ghittcuxcsehtrVrUFJC7raBkAcii6p6oZ6nDXu55YbnCFDrvD7wmo5k7F/\nWSSY9jJqUVSr1vf6eA3ouxchZMCbOxCOJWpmVHgDI4NytP6WlX7nl6HcE46T/+yC\nygSe9dq7QoTupSow1EAqrLJ4cPtKf3prupkFn3ycPs6bSy32PTON5SBlpGIUmgdH\n2wQRNYpEkrBoGzloObbPVadQPjwz+B06AC03rdBpf0LZsw6xxtdjRwJXy5yEHn3I\nt8kntbR4nTGHWKA/YqQjL3smLTsy+P6GKnDdYe15+Cy8GI+UPbshNw2+2nNU0hf2\nuzB6wou7sTxZkqqJIdlrzxsqLZ9TIcZq0nNvG3Y0DWvmhMkCPk5NdmvB1lnpk2pQ\nBIrtDGPciga2G2rBUugrEv6Y1WpflwLbT0OiHyYahw8uqkNndCMIZ9FIKm77bl1p\njVimrdF4JyqaU3dHFIypzVe6vYqthzybH8bFeCdQGqhzoqfVcm+ElYntC7EZBOil\nXfLYES2sSTrbWrCUVdGz9VbPcea0jtYEiCBfuov5SnaImM3dfbEAs2KzLPAbbK4w\nf+9lhctW51m3BpGSGUEByZM3ewF8Ur96pf926EbA4AleiqXGk4AaO1k8jG06ciVe\nPxXxvXZA1C7tpfzyL3fUpwju7x4sGrdSUxWKzedlSYEePMSRbM2nBnbNU7ynl9Qj\nUKoqgkpTCioFGPZceoiCB30EZ6XgX64pSsPiLOUi80+xjjLzA7nwMf8xcWK5WdnM\n/XpZwW9jIBjZl+YprJiR5AmNugptLH9RXuUg1MwwcwNUTUchaOGCDx41Q2jI4dWt\naBcZSuUmGEPJ3B0Wz0uk2GrSXVU4xVDOVQ/8uz1mwb4d8IZTnbJLWHbqlsgyjK90\nB2PA/IcXZGc+PlJ64CAU161bsPPiTD+oXNf0zdJIU6UlCiHVymtVCI4dKhfF2AtO\nmlvOb6RmdC+q2/4EQwitUSu3hFyUZSijsHQvUeXVJ4JOMiIr1LphXUNTU2p+u+OK\nEDdyeK9zUYtMaW95Q3dr5TzUlbTSClda9rhdi88RwyLAYunnWHSbR03Lx/gXtfsM\nPfm9CGfuhRIwUx23MnzspI90NpKpowYMLjPrU8B3MhUo3H6H/kSDmBfNRkel84w0\nFA2WG9GFZdE+LbEYT88C8tYbBQDWS1BhXrpA4K2SazUa\n-----END ENCRYPTED PRIVATE KEY-----\n",
		"passphrase": "717557c75b0c554296705cd7fd178de67c6c6bedce7a27fe93c3218f92d795bd48af34b0e06f7dde793082e47d2f3c7e"
	}
}
```

{% endtab %}

{% tab title="401: Unauthorized Cuando el authorization-token no es enviado" %}

```javascript
{
    "message": "Authorization is missing",
    "data": []
}
```

{% endtab %}
{% endtabs %}


# Merchants

Información sobre endpoints relacionados con la entidad Merchant

## Información del Merchant

<mark style="color:blue;">`GET`</mark> `/api-hub/v1/merchants/me`

Datos de un merchant que consulta el endpoint con su llave pública

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                    |
| ------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| timestamp<mark style="color:red;">\*</mark> | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> |        | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

{% tabs %}
{% tab title="200 Solicitud realizada con éxito" %}

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"id": "ea6b7751-babb-b35c-f1b1-c4936bdd16ce",
		"status": "ACTIVE",
		"created_at": "2022-09-15T16:50:33.995476+00:00",
		"updated_at": "2022-09-15T16:50:33.995476+00:00",
		"deleted_at": null,
		"is_deleted": false,
		"is_deleted_by": null,
		"code_client": "2121",
		"document_type": "RUC",
		"document_number": "20551990860",
		"company_name": "GLOBAL BRIDGE CONNECTIONS S.A.C.",
		"company_country": "PER",
		"white_list_ips": [
			""
		],
		"merchant_access_token": {
			"id": "e1cac68b-d4ca-b516-fd89-ad21cc14e731",
			"status": "ACTIVE",
			"created_at": "2022-09-15T16:50:33.995476+00:00",
			"updated_at": "2022-09-15T16:50:33.995476+00:00",
			"deleted_at": null,
			"is_deleted": false,
			"is_deleted_by": null,
			"merchant_id": "ea6b7751-babb-b35c-f1b1-c4936bdd16ce",
			"public_key": "c1e146fe-2baf-aeb8-4648-07d7d45f5f92",
			"secret_key": "995cd4b2-xxx3-5b90-a120-a4a8004c3fd8"
		}
	}
}
```

{% endtab %}

{% tab title="401: Unauthorized Cuando el authorization-token no es enviado" %}

```javascript
{
    "message": "Authorization is missing",
    "data": []
}
```

{% endtab %}
{% endtabs %}

## Lista de clientes del Merchant

<mark style="color:blue;">`GET`</mark> `/api-hub/v1/merchants/clients`

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                    |
| ------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| timestamp<mark style="color:red;">\*</mark> | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |
| page                                        | Number | El valor indica la página que se desea visualizar, el valor por defecto en caso no se mande es 1.                              |
| per\_page                                   | Number | El valor indica la cantidad de registros que se desea visualizar por página, el valor por defecto en caso no se mande es 15.   |

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
    "code": "00000",
    "message": "Successful",
    "data": [
        {
            "id": "4302a1f9-aa3f-6e81-b006-f53c2b4ec056",
            "status": "ACTIVE",
            "created_at": "2022-09-21T15:03:26.797578+00:00",
            "updated_at": "2022-09-21T15:03:29.344627+00:00",
            "deleted_at": null,
            "is_deleted": false,
            "is_deleted_by": null,
            "document_type": "DNI",
            "document_number": "12345678",
            "first_name": "MARCOS",
            "first_last_name": "RAMOS",
            "status_kyc": null,
            "birth_country": "PER",
            "birth_date": "1995-10-17",
            "residence_address": "JR LOS RIOS",
            "residence_country": "PER",
            "residence_city": "AYACUCHO",
            "residence_zip_code": "50002",
            "phone_country_code": "+51",
            "phone_number": "902000000",
            "email": "TEST@GMAIL.COM",
            "landline_country_code": null,
            "landline_number": null,
            "occupation": "ING. SISTEMAS",
            "merchant_id": "cc989743-6db7-e2d5-00d0-8477ddfcf98c",
            "provider_name": "ODYBANK",
            "provider_reference": "298731",
            "internal_reference": "223300000001",
            "second_name": "PEDRI",
            "second_last_name": "LICAS",
            "gender": "M"
        }
    ],
    "metadata": {
        "pagination": {
            "total": 5,
            "page": 1,
            "per_page": 1,
            "previous_page": null,
            "next_page": 2,
            "first_page": 1,
            "last_page": 5
        }
    }
}
```

{% endtab %}
{% endtabs %}

## Lista de lotes de productos del Merchant

<mark style="color:blue;">`GET`</mark> `/api-hub/v1/merchants/lots`

#### Query Parameters

| Name                                        | Type             | Description                                                                                                                    |
| ------------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| page<mark style="color:red;">\*</mark>      | Number           | El número de página del listado de lotes.                                                                                      |
| per\_page<mark style="color:red;">\*</mark> | Number           | El cantidad de lotes vistos en el listado de lotes.                                                                            |
| timestamp<mark style="color:red;">\*</mark> | Number \| String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

{% tabs %}
{% tab title="200: OK " %}

<pre class="language-javascript"><code class="lang-javascript"><strong>{
</strong>	"code": "00000",
	"message": "Successful",
	"data": [
		{
			"id": "bb0a5f45-6f67-6d59-7c65-301ec309b130",
			"status": "SENT",
			"created_at": "2022-10-10T21:31:29.194111+00:00",
			"updated_at": "2022-10-10T21:31:29.194111+00:00",
			"deleted_at": null,
			"is_deleted": false,
			"is_deleted_by": null,
			"number_lot": 23,
			"quantity_card": 10,
			"type_affiliation": "NOMINATED",
			"type_card": "VIRTUAL",
			"merchant_product_id": "5d71b4b0-991f-90ad-c50f-178530f54824",
			"merchant_id": "ea6b7751-babb-b35c-f1b1-c4936bdd16ce"
		},
		{
			"id": "49446dd7-9a25-f6a5-0284-79cee0a338c2",
			"status": "SENT",
			"created_at": "2022-10-10T21:32:22.114394+00:00",
			"updated_at": "2022-10-10T21:32:22.114394+00:00",
			"deleted_at": null,
			"is_deleted": false,
			"is_deleted_by": null,
			"number_lot": 24,
			"quantity_card": 10,
			"type_affiliation": "NOMINATED",
			"type_card": "VIRTUAL",
			"merchant_product_id": "5d71b4b0-991f-90ad-c50f-178530f54824",
			"merchant_id": "ea6b7751-babb-b35c-f1b1-c4936bdd16ce"
		},
		{
			"id": "fc3c5ac9-2a1e-dd23-03c6-6ddcf0f465b5",
			"status": "SENT",
			"created_at": "2022-10-10T21:32:31.555597+00:00",
			"updated_at": "2022-10-10T21:32:31.555597+00:00",
			"deleted_at": null,
			"is_deleted": false,
			"is_deleted_by": null,
			"number_lot": 25,
			"quantity_card": 10,
			"type_affiliation": "NOMINATED",
			"type_card": "VIRTUAL",
			"merchant_product_id": "5d71b4b0-991f-90ad-c50f-178530f54824",
			"merchant_id": "ea6b7751-babb-b35c-f1b1-c4936bdd16ce"
		}
	],
	"metadata": {
		"pagination": {
			"total": 4,
			"page": 1,
			"per_page": 3,
			"previous_page": null,
			"next_page": 2,
			"first_page": 1,
			"last_page": 2
		}
	}
}
</code></pre>

{% endtab %}
{% endtabs %}


# Clients

Información sobre endpoints relacionados con la entidad Clientes Finales (Clients) de un Merchant

## Consulta de un cliente final por ID o Internal reference.

<mark style="color:blue;">`GET`</mark> `/api-hub/v1/clients/{term}`

#### Path Parameters

| Name                                   | Type   | Description                                                                                |
| -------------------------------------- | ------ | ------------------------------------------------------------------------------------------ |
| term<mark style="color:red;">\*</mark> | String | El valor puede ser el CLIENT\_ID, el INTERNAL\_REFERENCE del cliente o el DOCUMENT\_NUMBER |

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                      |
| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------- |
| timestamp<mark style="color:red;">\*</mark> | String | El valor debe ser en formato UNIX, comprendido por 13 dígitos. En javascript se puede usar la función Date.now() = 1664568045547 |

#### Headers

| Name                                                  | Type   | Description                                                                                                                  |
| ----------------------------------------------------- | ------ | ---------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, y debe contar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                              |

{% tabs %}
{% tab title="200: OK Datos del cliente" %}

**status** : El estado tiene que estar activo, si no es el caso hay un endpoint para reactivar al usuario

**provider\_reference** : Es el código de Unibanca

**internal\_reference** : Rastreo interno del cliente del negocio

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"id": "f6d61675-fc97-341a-fe59-52fa38a508f2",
		"status": "ACTIVE",
		"created_at": "2022-09-22T18:34:24.561033+00:00",
		"updated_at": "2022-09-22T18:34:25.854273+00:00",
		"deleted_at": null,
		"is_deleted": false,
		"is_deleted_by": null,
		"document_type": "DNI",
		"document_number": "47461000",
		"first_name": "MARIA",
		"first_last_name": "PEREZ",
		"status_kyc": null,
		"birth_country": "PER",
		"birth_date": "1993-09-26",
		"residence_address": "CAL.CORONEL INCLÁN NRO",
		"residence_country": "PER",
		"residence_city": "LIMA",
		"residence_zip_code": "15074",
		"phone_country_code": "+51",
		"phone_number": "924027000",
		"email": "CLIENTE@GLOBALBRIDGECONNECTIONS.COM",
		"landline_country_code": null,
		"landline_number": null,
		"occupation": "ADMINISTRADOR DE EMPRESAS",
		"merchant_id": "a6764840-1626-b4c1-eb52-bedef14e6596",
		"provider_name": "ODYBANK",
		"provider_reference": "80",
		"internal_reference": "100200000001",
		"second_name": "ROSA",
		"second_last_name": "GONZALEZ",
		"gender": "F"
	},
	"metadata": {
		"term": "100200000001"
	}
}
```

{% endtab %}
{% endtabs %}

## En este endpoint detallamos cómo es la creación de un cliente final para un negocio

<mark style="color:green;">`POST`</mark> `/api-hub/v1/clients`

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                                   | Type   | Description                                                                                                                    |
| ------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| document\_type<mark style="color:red;">\*</mark>       | String | El tipo de documento debe de ser DNI, CE, PAS, RUC o PTP.                                                                      |
| document\_number<mark style="color:red;">\*</mark>     | String | Para el valor del número de documento está relacionado con el document\_type, en la cantidad de dígitos.                       |
| first\_name<mark style="color:red;">\*</mark>          | String | El primer nombre del cliente.                                                                                                  |
| second\_name                                           | String | El segundo nombre del cliente.                                                                                                 |
| first\_last\_name<mark style="color:red;">\*</mark>    | String | El apellido paterno o primer apellido del cliente.                                                                             |
| second\_last\_name                                     | String | El apellido materno o segundo apellido del cliente.                                                                            |
| gender<mark style="color:red;">\*</mark>               | String | El género del cliente debe de ser F (Femenino) o M (Masculino).                                                                |
| birth\_country<mark style="color:red;">\*</mark>       | Date   | El país de nacimiento debe de ser en formato ISO 3.                                                                            |
| birth\_date<mark style="color:red;">\*</mark>          | String | La fecha de nacimiento debe de ser en formato (YYY-MM-DD).                                                                     |
| residence\_address<mark style="color:red;">\*</mark>   | String | La dirección de residencia del cliente.                                                                                        |
| residence\_country<mark style="color:red;">\*</mark>   | String | El país de residencia debe de ser en formato ISO 3.                                                                            |
| residence\_city<mark style="color:red;">\*</mark>      | String | La ciudad de residencia del cliente.                                                                                           |
| residence\_zip\_code<mark style="color:red;">\*</mark> | String | El código postal de residencia del cliente.                                                                                    |
| phone\_country\_code<mark style="color:red;">\*</mark> | String | El código de país del teléfono del cliente.                                                                                    |
| phone\_number<mark style="color:red;">\*</mark>        | String | El número de teléfono o celular del cliente.                                                                                   |
| email<mark style="color:red;">\*</mark>                | String | La dirección de correo electrónico del cliente.                                                                                |
| occupation<mark style="color:red;">\*</mark>           | String | La ocupación o carrera profesional del cliente.                                                                                |
| timestamp<mark style="color:red;">\*</mark>            | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK Cliente creado con exito" %}

```javascript
{
	"document_type": "DNI",
	"document_number": "400000",
	"first_name": "MARIA",
	"second_name":"JOSEFA",
	"first_last_name": "PEREZ",
	"second_last_name": "GOMEZ",
	"gender": "F",
  	"birth_country": "PER",
  	"birth_date": "1993-09-26",
	"residence_address": "CAL.CORONEL INCLÁN",
	"residence_country": "PER",
  	"residence_city": "LIMA",
	"residence_zip_code": "15074",
  	"phone_country_code": "+51",
  	"phone_number": "924020000",
  	"email": "CLIENTE@GLOBALBRIDGECONNECTIONS.COM",
	"occupation": "ADMINISTRADOR DE EMPRESAS",
	"timestamp": "1663876446257"
}
```

**internal\_reference** Rastreo interno del cliente del negocio

**provider\_reference** Es el código de Unibanca

**status** El estado tiene que estar activo, si no es el caso hay un endpoint para reactivar al usuario
{% endtab %}
{% endtabs %}

## Este endpoint detalla la reactivación de un cliente que tiene un status INACTIVE para poder sincronizar datos

<mark style="color:green;">`POST`</mark> `/api-hub/v1/clients/reactive`

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                        | Type   | Description                                                                                                                    |
| ------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| id<mark style="color:red;">\*</mark>        | UUID   | El identificador de cliente, en formato UUID.                                                                                  |
| timestamp<mark style="color:red;">\*</mark> | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK Respuesta objeto cliente" %}
**status** : El estado tiene que estar activo, si no es el caso hay un endpoint para reactivar al usuario

**provider\_reference** : Es el código de Unibanca

**internal\_reference** : Rastreo interno del cliente del negocio

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"id": "6e28b4dc-a81c-6464-8534-ec489c221a58",
		"status": "ACTIVE",
		"created_at": "2022-09-22T19:54:55.980016+00:00",
		"updated_at": "2022-09-22T19:54:58.284801+00:00",
		"deleted_at": null,
		"is_deleted": false,
		"is_deleted_by": null,
		"document_type": "DNI",
		"document_number": "4746000",
		"first_name": "MARIA",
		"first_last_name": "PEREZ",
		"status_kyc": null,
		"birth_country": "PER",
		"birth_date": "1993-09-26",
		"residence_address": "CAL.CORONEL INCLÁN",
		"residence_country": "PER",
		"residence_city": "LIMA",
		"residence_zip_code": "15074",
		"phone_country_code": "+51",
		"phone_number": "924027014",
		"email": "CLIENTE@GLOBALBRIDGECONNECTIONS.COM",
		"landline_country_code": null,
		"landline_number": null,
		"occupation": "ADMINISTRADOR DE EMPRESAS",
		"merchant_id": "a6764840-1626-b4c1-eb52-bedef14e6596",
		"provider_name": "ODYBANK",
		"provider_reference": "2432754",
		"internal_reference": "100200000001",
		"second_name": "ROSA",
		"second_last_name": "CASTRO",
		"gender": "F"
	}
}
```

{% endtab %}
{% endtabs %}

## Consultar todas las tarjetas de un cliente

<mark style="color:blue;">`GET`</mark> `/api-hub/v1/clients/{client_id}/cards`

#### Path Parameters

| Name                                         | Type | Description                   |
| -------------------------------------------- | ---- | ----------------------------- |
| client\_id<mark style="color:red;">\*</mark> | UUID | El identificador del cliente. |

#### Query Parameters

| Name                                        | Type               | Description                                                                                                                    |
| ------------------------------------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------------ |
| page<mark style="color:red;">\*</mark>      | Number             | El número de página del listado.                                                                                               |
| per\_page                                   | Number             | El cantidad de elementos vistos en el listado.                                                                                 |
| status                                      | ACTIVE \| INACTIVE | Filtrar por el estado de las tarjetas.                                                                                         |
| timestamp<mark style="color:red;">\*</mark> | String             | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende de todos los campos enviados por el query, ordenados de forma alfabética y el secret-key.                    |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": [
		{
			"id": "5a54a561-b82c-c440-1ac0-d62e4d57f55g",
			"status": "INACTIVE",
			"created_at": "2022-09-22T15:14:10.194442+00:00",
			"updated_at": "2022-09-22T16:47:34.454138+00:00",
			"deleted_at": null,
			"is_deleted": false,
			"is_deleted_by": null,
			"provider_name": "ODYBANK",
			"card_tracking_code": "2333",
			"merchant_product_id": "5d71b4b0-991f-90ad-c50f-178530f54546",
			"client_id": "854c8fd2-3b39-c232-2cfe-59d1aec654a2",
			"reason": null,
			"currencies": [
				{
					"account": "2333",
					"currency": "PEN"
				}
			],
			"blocked_at": null,
			"replacement_by": null
		},
		{
			"id": "708b7d77-f229-68f7-bbbc-27dbadbedudf",
			"status": "ACTIVE",
			"created_at": "2022-09-22T17:10:02.285965+00:00",
			"updated_at": "2022-09-22T17:10:02.285965+00:00",
			"deleted_at": null,
			"is_deleted": false,
			"is_deleted_by": null,
			"provider_name": "ODYBANK",
			"card_tracking_code": "2222",
			"merchant_product_id": "3f45b4b0-78jh-76fg-c50f-178530f54765",
			"client_id": "854c8fd2-3b39-c232-2cfe-59d1aec654a2",
			"reason": null,
			"currencies": [
				{
					"account": "2222",
					"currency": "PEN"
				}
			],
			"blocked_at": null,
			"replacement_by": null
		}
	],
	"metadata": {
		"query": {},
		"params": {
			"client_id": "854c8fd2-3b39-c232-2cfe-59d1aec654a2"
		},
		"pagination": {
			"page": 1,
			"total": 2,
			"per_page": 15,
			"last_page": 1,
			"next_page": null,
			"first_page": 1,
			"previous_page": null
		}
	}
}
```

{% endtab %}
{% endtabs %}

Definiciones de campos

* **document\_type** DNI, CE, PAS, RUC, PTP
* **gender** F ⇒ FEMENINO, M ⇒ MASCULINO
* **birth\_country** ISO 3
* **birth\_date** YYYY-MM-DD
* **residence\_country** ISO 3


# Cards

## Detalla la asignación de una tarjeta a un cliente final, dentro de un lote de tarjetas de Odybank. La tarjeta luego de ser asignada su estado es INACTIVE.

<mark style="color:green;">`POST`</mark> `/api-hub/v1/client-cards/assign`

Las credenciales otorgadas para realizar el login obtienen el producto el cual se le asignará al cliente final.

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                         | Type   | Description                                                                                                                    |
| -------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| client\_id<mark style="color:red;">\*</mark> | String | El identificador del cliente debe de ser en formato UUID.                                                                      |
| timestamp<mark style="color:red;">\*</mark>  | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK Detalle de tarjeta asignada" %}
**Definición del response**

**status**: El estado tiene que estar no activa, ya existe un endpoint que se encarga de activar la tarjeta de un cliente.

**card\_tracking\_code**: El código de seguimiento de la tarjeta, es generada desde Odybank.

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"id": "176fb137-9298-be03-42f6-a31c4faa3616",
		"status": "INACTIVE",
		"created_at": "2022-09-22T20:01:19.095306+00:00",
		"updated_at": "2022-09-22T20:01:21.587199+00:00",
		"deleted_at": null,
		"is_deleted": false,
		"is_deleted_by": null,
		"provider_name": "ODYBANK",
		"card_tracking_code": "0332206224610292",
		"merchant_product_id": "b349ee01-8d7d-6c51-ca3d-7b98deac14ac",
		"client_id": "6e28b4dc-a81c-6464-8534-ec489c221a58",
		"reason": null,
		"currencies": [
			{
				"account": "0332206224610316",
				"currency": "PEN"
			}
		],
		"blocked_at": null,
		"replacement_by": null,
		"card_pan":   "222980******0739"
	}
}
```

{% endtab %}
{% endtabs %}

## Detalla la activación de una tarjeta, el estado es modificado a ACTIVE.

<mark style="color:purple;">`PATCH`</mark> `/api-hub/v1/client-cards/activation`

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                                   | Type   | Description                                                                                                                    |
| ------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code<mark style="color:red;">\*</mark> | String | El código de seguimiento de la tarjeta.                                                                                        |
| timestamp<mark style="color:red;">\*</mark>            | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK " %}
**status** : El estado ahora es activa.

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"id": "176fb137-9298-be03-42f6-a31c4faa3616",
		"status": "ACTIVE",
		"created_at": "2022-09-22T20:01:19.095306+00:00",
		"updated_at": "2022-09-22T20:01:21.587199+00:00",
		"deleted_at": null,
		"is_deleted": false,
		"is_deleted_by": null,
		"provider_name": "ODYBANK",
		"card_tracking_code": "0332206224610292",
		"merchant_product_id": "b349ee01-8d7d-6c51-ca3d-7b98deac14ac",
		"client_id": "6e28b4dc-a81c-6464-8534-ec489c221a58"
	}
}
```

{% endtab %}
{% endtabs %}

## Detalla la información de una tarjeta.

<mark style="color:blue;">`GET`</mark> `/api-hub/v1/client-cards/details`

#### Query Parameters

| Name                                                   | Type   | Description                                                                                                                    |
| ------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code<mark style="color:red;">\*</mark> | String | El código de seguimiento de la tarjeta.                                                                                        |
| key\_id<mark style="color:red;">\*</mark>              | UUID   | El identificador de la llave, para encriptar los datos.                                                                        |
| timestamp<mark style="color:red;">\*</mark>            | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

{% tabs %}
{% tab title="200: OK " %}
**Definición del response**

**date\_expiration**: La fecha de caducidad de la tarjeta, se encuentra encriptada por seguridad.

**number\_card**: El número de la tarjeta, se encuentra encriptada por seguridad.

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"card_tracking_code": "0332206224610292",
		"currency": {
			"number": "604",
			"string": "SOLES"
		},
		"date_block": "2022-09-28 20:21:09.16",
		"date_expiration": "P0QFz5bJEWzjvdea7IalCnvZ7gJd9BqDB+K/fyLgO1k67IcpnI5ErwU7Hf5wHSCgUdrVmKfMR781HnoCBrXl/y0bwaVhYuvpJBPf+0qaj2VHarSsyd0PVlxwXCn98/TAAKOJlGBhnu8XaKlQviYp8XccjtHJ4zWzwzbl71uWkiRuamN9GzxcC8+eWNBEBwVkovUO+1Qc/YVfEVlG/Lx3EBeZ6Q4okg0bp5QAQ5/XNGVSme5ItBIFbp5hBF0PNsuMsGEp5+GHO8Ka2mZVvUUOHabkGsA0l0M33FONKEZZH1SU8InzJ3Pa00q5SqjqpdJ9xkPATyVhIxiGPsjsrvunaLtzIGGkZNobOzwhsbvQjX77Wxeh+JFOrXxbJmOCpSgm4caFvrv9KExecypQDFxQSVG2/NM3oTtgnMCwDnD8WZe7eP79Y4OjUpu05utPXbJeImBB3iYRt6qUmTQi+eStVSkyF5e6bPx8jRpTEK0pPrS9N8ekjoHuizRDYjwhHItaxHZpHAnbIRqleyg1rroctgqHGTRUxjbe/CQeWaQ99f3DFgDx1LvhE1HZpYfY2iyb0vy0ThpfdB+5njyg4bw1l6NpjL+RJQxEaPuwPr8CGgjigsxmMpfb8GHE8jGWgFw8Tx+O8uNaFCK7ROUtNYhIpIL+9Liw7k1Uk8DXZE60p3E=",
		"number_card": "WlZlRE3yNmah3DSXA6eUozNp1vFEu9ROgX4RBcF3llYF+SChpDtXzoS05wC6aCQ3v1Pq1RbLM7xSwhoaQ5d4Ubihfc6NjBQbGbvs7gxgg+6y896A557cRdSE0l2wEs+oKzA3advpy45g+TEH4cY3SmCEkcFSC+F/+kWR3bs712PxgmzGSYFbwU/fDKyvo+FHwxW2dBM6j3xVwySVzDj2H26OlaKQTbIbnif7SoCu+sT7toQN2exxEZ9KWpcI8uiFed09a8OCO02auJWVZTOdoEFsg054y87LAaExEqAkeGSyA3ZMYUUXf8JbXbfzH0dhlT86POdccJ4eCMFHakzkm/hdh9UsGvhjnb/MKbI/Q7EW9XgPnGJa5EM5ttA7hV47mTg1ZSYFZtMmuplA6TC99cn7qO4MC6wsg+96IzH15WDGNR0Xp3FtWfOA5aNY7jLJvWhIoKRrD7foPnn6xCUafrdhttWbcfrIVOPh+bP+2rUG5Y1/kOWRmqgIEnLeh9g/mqBbJcr3NtvtdlaZNMgdhx4rtmRohD1gV53MgpkXaZma+dFrjmZvvat737NKlmVfZuGasox+L9Xz5hUQFwUYZ8tJK4DUMowA7ihrfdvwM3+1SSbjoj6ZKrUjFZEugAn6tx2dQlfkLnJffsXObWMITrC4RcCNmHcQLYr50n36h9s=",
		"reason_block": "CANCELACIÓN",
		"status": "CANCELED",
		"status_description": "CANCELED (CANCELADA)"
	}
}
```

{% endtab %}
{% endtabs %}

## Detalla el cvv2 de una tarjeta.

<mark style="color:blue;">`GET`</mark> `/api-hub/v1/client-cards/cvv2`

#### Query Parameters

| Name                                                   | Type   | Description                                                                                                                    |
| ------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code<mark style="color:red;">\*</mark> | String | El código de seguimiento de la tarjeta.                                                                                        |
| timestamp<mark style="color:red;">\*</mark>            | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |
| key\_id<mark style="color:red;">\*</mark>              | UUID   | El identificador de la llave, para encriptar los datos.                                                                        |

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

{% tabs %}
{% tab title="200: OK " %}
**Definición del response**

**cvv2**:  El código de seguridad de la tarjeta, se encuentra encriptada por seguridad.

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"cvv2": "OUD6apORicAur/cM0plT4skz/ICWWLerdlyx5x3Z3Ltc4jJYfaHOipDQdT/IF1eSySmzfSwMlQY7lgsDQmmU8ZnGN3HrLbBUlpqOJpSednbcSQ0yH6v3CN+LIHaVKDdJNejibJjbKpKm/ZCD9CP7OWe9gm4c5qM7mop4wtE0stb/kutx9PJtxTTp4VfiGA/lC6jTwmy9zGuewRc/phKN9T3uru68Hrv+kaPVbIaOw4jg2sskALszImU5fJhNH1Aaj+mCLJ5tUgK6GoUQ25FxIY0Rfy8HMxSrFHVb9c7PqvmkFs6PWu4N4V3r7wx5nocAJw7MBesHuWJxXmOX3TGVHQeCQBNlOkkgGphp9uau4057amHjc7GyKppoBOczNUAdbxvE88N2i7RitZR/gZDTdsnTkY+9q0nurkxkDad2WXVnpOquAV7MIspCc2MWXlNSWUO9UJ3laFLRSSnynUZC8Q6rMzJcobPIbemOgKyrzrVS2NNIQbtiTvxZVD0WmUGCbYCSWoIoq/B0c+qufuLjpjdvL/2w/QDKKasYm2WB55wrgLVGq2/CAI7jFSBHBgw/iTxVR0Dm35zuYdEYyjqUBWGkAtvQrrsf+KC9rCS5DQ79kUfxYA5OhO0tD3mlNI0LaN7edMz+jek6ybbfQHh8pLgXS0aGHF1LLons1rKO8Zo="
	}
}
```

{% endtab %}
{% endtabs %}

## Detalla la información de las transacciones de una tarjeta.

<mark style="color:blue;">`GET`</mark> `/api-hub/v1/client-cards/transactions`

#### Query Parameters

| Name                                                   | Type   | Description                                                                                                                    |
| ------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code<mark style="color:red;">\*</mark> | String | El código de seguimiento de la tarjeta.                                                                                        |
| timestamp<mark style="color:red;">\*</mark>            | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

{% tabs %}
{% tab title="200: OK " %}
Definición del response

**card\_tracking\_code** : El código de seguimiento de la tarjeta.

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": [{
		"sequence": "129877",
		"type": "Compra    ",
		"amount": "179.40",
		"cost": "0.00",
		"hour": "16:58:32",
		"date": "2022/10/07",
		"commerce": "PLAZA VEA              Lima          PER",
		"commerce_category": null,
		"pan_trunc": "22298003****0071",
		"currency": "PEN"
	}]
}
```

{% endtab %}
{% endtabs %}

## Detalla la suspensión de una tarjeta, el estado es modificado a SUSPENDED.

<mark style="color:purple;">`PATCH`</mark> `/api-hub/v1/client-cards/suspend`

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                 | Type       | Description                                                                                                                    |
| -------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code | String     | Código de seguimiento de una tarjeta                                                                                           |
| timestamp            | String     | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |
| reason               | String(50) | Razón de suspensión                                                                                                            |

{% tabs %}
{% tab title="200: OK " %}
**Definición del response**

**status** El estado ahora es SUSPENDED.

```javascript
{
	"code": "00000",
        "message": "Successful",
        "data": {
        "id": "176fb137-9298-be03-42f6-a31c4faa3616",
        "status": "SUSPENDED",
        "created_at": "2022-09-22T20:01:19.095306+00:00",
        "updated_at": "2022-09-28T17:07:47.926054+00:00",
        "deleted_at": null,
        "is_deleted": false,
        "is_deleted_by": null,
        "provider_name": "ODYBANK",
        "card_tracking_code": "0332206224610292",
        "merchant_product_id": "b349ee01-8d7d-6c51-ca3d-7b98deac14ac",
        "client_id": "6e28b4dc-a81c-6464-8534-ec489c221a58"
	}
}
```

{% endtab %}
{% endtabs %}

## Detalla la activación de una tarjeta, el estado es modificado a BLOCKED.

<mark style="color:purple;">`PATCH`</mark> `/api-hub/v1/client-cards/blocked`

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                                   | Type   | Description                                                                                                                    |
| ------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code<mark style="color:red;">\*</mark> | String | Código de seguimiento de una tarjeta                                                                                           |
| reason<mark style="color:red;">\*</mark>               | String | Razón de bloqueo                                                                                                               |
| timestamp<mark style="color:red;">\*</mark>            | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK " %}
**Definición del response**

**status** El estado ahora es BLOCKED.

```javascript
{
	"code": "00000",
    "message": "Successful",
    "data": {
        "id": "176fb137-9298-be03-42f6-a31c4faa3616",
        "status": "BLOCKED",
        "created_at": "2022-09-22T20:01:19.095306+00:00",
        "updated_at": "2022-09-28T17:07:47.926054+00:00",
        "deleted_at": null,
        "is_deleted": false,
        "is_deleted_by": null,
        "provider_name": "ODYBANK",
        "card_tracking_code": "0332206224610292",
        "merchant_product_id": "b349ee01-8d7d-6c51-ca3d-7b98deac14ac",
        "client_id": "6e28b4dc-a81c-6464-8534-ec489c221a58"
	}
}
```

{% endtab %}
{% endtabs %}

## Detalla la cancelación de una tarjeta, el estado es modificado a CANCELED.

<mark style="color:purple;">`PATCH`</mark> `/api-hub/v1/client-cards/cancel`

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                                   | Type       | Description                                                                                                                    |
| ------------------------------------------------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code<mark style="color:red;">\*</mark> | String     | El código de seguimiento de la tarjeta.                                                                                        |
| reason<mark style="color:red;">\*</mark>               | String(50) | Razón (motivo) de cancelar                                                                                                     |
| timestamp<mark style="color:red;">\*</mark>            | String     | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK " %}
**Definición del response**

**status** El estado ahora es CANCELED.

```javascript
{
    "code": "00000",
    "message": "Successful",
    "data": {
        "id": "176fb137-9298-be03-42f6-a31c4faa3616",
        "status": "CANCELED",
        "created_at": "2022-09-22T20:01:19.095306+00:00",
        "updated_at": "2022-09-30T20:50:26.851541+00:00",
        "deleted_at": null,
        "is_deleted": false,
        "is_deleted_by": null,
        "provider_name": "ODYBANK",
        "card_tracking_code": "0332206224610292",
        "merchant_product_id": "b349ee01-8d7d-6c51-ca3d-7b98deac14ac",
        "client_id": "6e28b4dc-a81c-6464-8534-ec489c221a58",
        "reason": "Cancelación de prueba"
    }
}
```

{% endtab %}
{% endtabs %}

## Detalla la recarga de saldo de una tarjeta.

<mark style="color:green;">`POST`</mark> `/api-hub/v1/client-cards/recharge-balance`

#### Headers

| Name                                                  | Type | Description                                                                                                                   |
| ----------------------------------------------------- | ---- | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> |      | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           |      | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                                   | Type                 | Description                                                                                                                    |
| ------------------------------------------------------ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code<mark style="color:red;">\*</mark> | String               | El código de seguimiento de la tarjeta.                                                                                        |
| currency<mark style="color:red;">\*</mark>             | String \[PEN \| USD] | ISO 4217. Actualmente solo hay para PEN y USD.                                                                                 |
| amount<mark style="color:red;">\*</mark>               | Decimal              | El monto debe ser un decimal por punto. Ejemplo: 20.50. Si no contiene decimal mandar solo el entero 20.                       |
| timestamp<mark style="color:red;">\*</mark>            | String               | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"transaction_id": "83fg7e0c-1b68-5t07-4ac9-b3106faf537a",
		"sequence": "1231444234"
	}
}
```

{% endtab %}
{% endtabs %}

## Detalla el debito de una tarjeta (cash out).

<mark style="color:green;">`POST`</mark> `/api-hub/v1/client-cards/cash-out-balance`

#### Headers

| Name                                            | Type   | Description                                                                                                                   |
| ----------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>     | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                                   | Type                 | Description                                                                                                                    |
| ------------------------------------------------------ | -------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code<mark style="color:red;">\*</mark> | String               | El código de seguimiento de la tarjeta.                                                                                        |
| currency<mark style="color:red;">\*</mark>             | String \[PEN \| USD] | ISO 4217. Actualmente solo hay para PEN y USD.                                                                                 |
| amount<mark style="color:red;">\*</mark>               | Decimal              | El monto debe ser un decimal por punto. Ejemplo: 20.50. Si no contiene decimal mandar solo el entero 20.                       |
| timestamp<mark style="color:red;">\*</mark>            | Number String        | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"transaction_id": "83ff7e0c-5b68-5c07-4ac9-b0106faf457a",
		"sequence": "123123237"
	}
}
```

{% endtab %}
{% endtabs %}

## Muestra el saldo de una tarjeta

<mark style="color:blue;">`GET`</mark> `/api-hub/v1/client-cards/balance`

#### Query Parameters

| Name                                                   | Type   | Description                                                                                                                    |
| ------------------------------------------------------ | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code<mark style="color:red;">\*</mark> | String | El código de seguimiento de la tarjeta.                                                                                        |
| timestamp<mark style="color:red;">\*</mark>            | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           |        | La firma depende del timestamp y el secret-key.                                                                               |

{% tabs %}
{% tab title="200: OK " %}

**Definición del response**

**card\_tracking\_code** : El código de seguimiento de la tarjeta.

```javascript
{
    "code": "00000",
    "message": "Successful",
    "data": {
        "sequence": "000409",
        "currency": "PEN",
        "balance": "1812.10"
    }
}
```

{% endtab %}
{% endtabs %}

## Reposición de tarjeta (Bloqueada)

<mark style="color:green;">`POST`</mark> `/api-hub/v1/client-cards/replacement-card`

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                                            | Type   | Description                                                                                                                    |
| --------------------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code\_blocked<mark style="color:red;">\*</mark> | String | El código de seguimiento de la tarjeta bloqueada.                                                                              |
| timestamp<mark style="color:red;">\*</mark>                     | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"id": "d336849b-e8ca-07fe-58b2-b10cbf0ce2b6",
		"status": "INACTIVE",
		"created_at": "2022-10-17T22:46:21.658455+00:00",
		"updated_at": "2022-10-17T22:46:21.658455+00:00",
		"deleted_at": null,
		"is_deleted": false,
		"is_deleted_by": null,
		"provider_name": "ODYBANK",
		"card_tracking_code": "0332206224610316",
		"merchant_product_id": "b349ee01-8d7d-6c51-ca3d-7b98deac14ac",
		"client_id": "6e28b4dc-a81c-6464-8534-ec489c221a58",
		"reason": null,
		"currencies": [
			{
				"account": "0332206224610316",
				"currency": "PEN"
			}
		],
		"blocked_at": null,
		"replacement_by": null,
		"card_pan":   "222980******0739"
	}
}
```

{% endtab %}
{% endtabs %}

## Transferencia de saldo tarjeta a tarjeta

<mark style="color:green;">`POST`</mark> `/api-hub/v1/client-cards/transfer-balance-card-to-card`

#### Headers

| Name                                                  | Type   | Description                                                                                                                   |
| ----------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------------------------------------------- |
| authorization-token<mark style="color:red;">\*</mark> | String | <p>Se envía el token generado luego del Login, se debe enviar con el siguiente formato:</p><p>"Bearer JHgytHG67687JHG..."</p> |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.                                                                               |

#### Request Body

| Name                                                           | Type                 | Description                                                                                                                    |
| -------------------------------------------------------------- | -------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| card\_tracking\_code\_target<mark style="color:red;">\*</mark> | String               | Código de seguimiento de la tarjeta de destino, a la cual se le abonara el monto                                               |
| card\_tracking\_code\_source<mark style="color:red;">\*</mark> | String               | Código de seguimiento de la tarjeta de origen, de la cual se debitará el monto                                                 |
| currency<mark style="color:red;">\*</mark>                     | String \[PEN \| USD] | ISO 4217. Actualmente solo hay para PEN y USD.                                                                                 |
| amount<mark style="color:red;">\*</mark>                       | Decimal              | El monto debe ser un decimal por punto. Ejemplo: 20.50. Si no contiene decimal mandar solo el entero 20.                       |
| timestamp<mark style="color:red;">\*</mark>                    | String               | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
		"transaction_id": "83ff7e0c-5b68-5c07-4ac9-b0106faf457a",
		"sequence": "123123237"
	}
}
```

{% endtab %}
{% endtabs %}


# Client-cards

## Obtiene los datos de la relación de las tablas Clients y Cards

<mark style="color:blue;">`GET`</mark> `/api-hub/v1/client-cards/{id}/details`

#### Path Parameters

| Name                                 | Type   | Description                             |
| ------------------------------------ | ------ | --------------------------------------- |
| id<mark style="color:red;">\*</mark> | String | Identificador de la tabla client\_cards |

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                    |
| ------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| timestamp<mark style="color:red;">\*</mark> | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |

#### Headers

| Name                                                  | Type   | Description                                                                                                                    |
| ----------------------------------------------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------ |
| authorization-token<mark style="color:red;">\*</mark> | String | El valor debe ser en formato NOW comprendido por 13 dígitos, en javascript se puede usar la función Date.now() = 1664568045547 |
| signature<mark style="color:red;">\*</mark>           | String | La firma depende del timestamp y el secret-key.Identificador de la tabla client\_cards                                         |

{% tabs %}
{% tab title="200: OK " %}

```javascript
{
	"code": "00000",
	"message": "Successful",
	"data": {
            "id": "0ec44d0c-88fb-4eb3-280d-82ab60479ffd",
            "status": "ACTIVE",
            "created_at": "2022-09-22T17:11:36.762098+00:00",
            "updated_at": "2022-09-22T17:11:36.762098+00:00",
            "deleted_at": null,
            "is_deleted": false,
            "is_deleted_by": null,
            "provider_name": "ODYBANK",
            "card_tracking_code": "3333",
            "merchant_product_id": "5d71b4b0-991f-90ad-c50f-178530f54824",
            "client_id": "854c8fd2-3b39-c232-2cfe-59d1aec654e1",
            "reason": null,
            "currencies": [
                    {
                        "account": "3333",
                        "currency": "PEN"
                    }
                ],
            "blocked_at": null,
            "replacement_by": null
	}
}
```

{% endtab %}
{% endtabs %}


# Authentication

API para el manejo de merchants en el nivel de autenticación y autorización

## Agregar merchants

<mark style="color:green;">`POST`</mark> `auth/v1/merchant/register`

Este método  registrará en merchant en la base de datos y debe devolver credenciales que podrá utilizar el merchant para administrar (Proyectos y/o Usuarios)

#### Headers

| Name     | Type   | Description                                    |
| -------- | ------ | ---------------------------------------------- |
| x-secret | String | Valor privado para poder habilitar este método |

#### Request Body

| Name                                               | Type      | Description |
| -------------------------------------------------- | --------- | ----------- |
| code\_client<mark style="color:red;">\*</mark>     | String    |             |
| document\_type<mark style="color:red;">\*</mark>   | String    |             |
| document\_number<mark style="color:red;">\*</mark> | String    |             |
| company\_name<mark style="color:red;">\*</mark>    | String    |             |
| company\_country<mark style="color:red;">\*</mark> | String    |             |
| white\_list\_ips                                   | String\[] |             |

{% tabs %}
{% tab title="200: OK " %}

```json
{
"merchant": {
    id: string,
    status: string,
    code_client: string,
    document_type: string,
    document_number: string,
    company_name: string,
    company_country: string
},
"merchant_access_tokens": [
  {
      "id": string,
      "status": string
      "public_key": string,
      "secret_key": string,
      "is_verify": boolean,
      "access_role": string
  }
]
}
```

{% endtab %}
{% endtabs %}

## Inicio de sesión de un merchant

<mark style="color:green;">`POST`</mark> `/auth/v1/merchant/login`

#### Request Body

| Name        | Type   | Description |
| ----------- | ------ | ----------- |
| public\_key | String |             |
| secret\_key | String |             |


