On ramp

Sections

Theme switcher

Introducción

Manteca está organizada alrededor de la interfaz REST. Tiene URLs predecibles orientadas a recursos y usa códigos de respuesta HTTP estándar. Todos los valores de retorno son en formato JSON.

Contamos con un sandbox para que puedas probar el API sin alterar los flujos productivos. Para acceder al mismo, tendrás que usar la URL correspondiente (junto con sus API keys).

Por otro lado, para todo lo que es notificaciones hacia el lado del cliente, utilizamos webhooks. También contamos con un servicio de websockets para escuchar algunos eventos como los precios.

El API utiliza el protocolo HTTPS para exponer los endpoints. No soporta HTTP.

Was this section helpful?

What made this section unhelpful for you?

Base URL

Producción:

https://api.manteca.dev/crypto

Sandbox:

https://sandbox.manteca.dev/crypto

Language Box

Was this section helpful?

What made this section unhelpful for you?

Autenticación

Manteca utiliza API keys para autenticar los requests. Las mismas son enviadas a través del header md-api-key

Las credenciales poseen privilegios completos por lo que es imprescindible que sean guardadas de manera segura. La interacción con Manteca debe ser siempre del lado del servidor, especialmente para los llamados autenticados.

En algunos casos, también proveemos la posibilidad de realizar IP whitelisting o acceder vía una VPN exclusiva para aumentar la seguridad.

Was this section helpful?

What made this section unhelpful for you?

Finanzas

La sección de finanzas permite gestionar y entender cómo se operan los fondos dentro de la plataforma. En este contexto, existen tres formas de operar:

  1. Siempre en descubierto: en este modelo, los usuarios pueden operar sin necesidad de tener fondos disponibles en su balance. Cada vez que un usuario realiza una operación, se genera automáticamente un débito en su cuenta.
  2. En descubierto si no hay balance: en este esquema híbrido, si el usuario tiene fondos disponibles en su balance, estos se utilizan para cubrir la operación. En caso de que no haya fondos suficientes, se genera un débito por el monto faltante, permitiendo que la operación se lleve a cabo.
  3. Sin descubierto: en este caso, es necesario que el usuario tenga los fondos suficientes en su balance para poder operar. Si no dispone del saldo necesario, la operación será rechazada.

Cuando se habilita la posibilidad de operar en descubierto, la compañía usuaria de Manteca asume la responsabilidad de cubrir los montos correspondientes a las operaciones realizadas. Esto implica enviar los fondos necesarios al CBU o wallet cripto asignada, dentro del plazo temporal acordado entre las partes. El proceso de liquidación se realiza de forma automática, garantizando que las operaciones sean consistentes y transparentes.

Endpoints

GET
GET
GET
GET

Gestión de usuarios

La gestión de usuarios es un componente clave en nuestro sistema, ya que la unidad base de todas las operaciones son los usuarios. Para realizar cualquier tipo de operación dentro de la plataforma, es obligatorio registrar a los usuarios y asegurarse de que se encuentren validados correctamente.

El proceso de validación incluye los siguientes pasos esenciales:

1

Solicitud inicial

Se envía una solicitud con todos los datos personales requeridos.

2

Carga de documentación

Se realiza la suba de las imágenes de frente y dorso del documento de identidad del usuario

3

Carga de cuentas bancarias

Se realiza la carga de cuentas bancarias necesarias para operar. Es necesario contar con al menos una cuenta bancaria asociada en la moneda que se va a operar; es decir, si vamos a operar contra pesos, se necesita cargar una cuenta en pesos para que posteriormente, se puedan realizar retiros hacia allí.

Endpoints

POST
GET
GET
GET
GET
POST
DELETE
GET
GET
GET
GET
POST
GET
GET
PUT

Mercado

El API permite realizar operaciones tanto de cripto contra fiat como de cripto contra cripto. Existen dos formas de realizarlo: la opción bajo nivel que es la que se detalla abajo o usando sintéticos. Para ejecutar una operación, se deben seguir los siguientes pasos:

1

Consultar precio del par

Obtené el precio actualizado del par de activos con el que deseas operar.

2

Crear el lock de precio

Bloqueá el precio por un período breve (por defecto, algunos segundos) para garantizar que la operación se realice al precio acordado.

3

Ejecutar la orden

Creá y ejecutá la orden. Si la orden se crea correctamente, queda auto-filled, completándose en su totalidad de manera instantánea.

Transacciones

La sección de transacciones abarca todas las operaciones financieras que se pueden realizar dentro de la plataforma. Estas incluyen tanto movimientos de fondos como la ejecución de órdenes. A continuación, se describen las principales funcionalidades:

Operaciones disponibles

  1. Depósitos y retiros de fiat: los usuarios pueden ingresar o retirar dinero fiat directamente desde y hacia cuentas bancarias vinculadas.
  2. Depósitos y retiros de cripto: los usuarios pueden transferir criptomonedas desde wallets externas hacia la plataforma y viceversa. Los retiros son procesados hacia direcciones específicas en cadenas compatibles.

Todas las operaciones se encuentran también disponibles en Sandbox, donde contamos con la posibilidad de acreditar fiat ficticio y usar criptomoendas exclusivamente minteadas por Manteca para este propósito. Para más información, ver assets de prueba.

Widget

El widget es un sistema embebible diseñado para facilitar integraciones sin necesidad de desarrollo front-end. Este feature permite a las plataformas integrar procesos complejos como KYC, compra y venta de criptomonedas de forma trivial, adaptándose incluso a casos en los que normalmente no se requiere KYC en sus operaciones regulares. Por detrás, funciona mediante nuestro sistema de sintéticos; por lo tanto, se recomienda una lectura general de esa documentación.

Además, el sistema cuenta con webhooks configurables que notifican en tiempo real a la URL definida por la plataforma integradora cada vez que ocurre un evento de interés en el widget. Esto incluye eventos clave como la finalización del KYC, transacciones de compra o venta, entre otros.

El widget sigue un funcionamiento estándar para todos los casos de uso. Los pasos principales son:

1

Generación de url

Se realiza un POST a nuestras APIs con configuraciones específicas, para lograr el flujo esperado (onboarding, ramp-on, ramp-off). Entre estas configuraciones, se puede enviar un externalId que permitirá identificar al usuario posteriormente y un sessionId que permitirá conocer el historial de actividades que ocurrieron en una misma corrida.

2

Redirección del usuario al widget

Una vez tenemos la URL, se redirecciona allî al usuario, donde podrá seguir los pasos presentados de manera interactiva. Es importante destacar que el KYC se hace una única vez por usuario; es decir, si el mismo ya se encuentra registrado, el widget se da cuenta de manera automatica y evitar solicitarlo nuevamente.

á

Redirección a la successUrl

En cuanto el flujo termina, se redirigirá al usuario a la URL que fue configurada como successUrl; es decir, la url en caso de éxito. Si hubiera un error, el mismo sería informado vía esa URL o bien, se puede configurar para que se utilice una failureUrl.

Flujo del registro

Al acceder a la primera pantalla y completar los datos iniciales, la cuenta del usuario será creada. Luego, el usuario debe completar la información necesaria para verificar sus datos e identidad. Estos son todos los pasos que deberá seguir durante el proceso de creación de su cuenta, hasta que quede validado para operar.

Webhooks

Podes configurar los webhook endpoints a través del API para ser notificado por cada uno de los eventos que ocurran y te sean de interés. Para garantizar la integridad de los datos enviados mediante webhooks, utilizamos un sistema de validación basado en HMAC. Cada webhook se envía con una firma en md-webhook-signature como header que, junto con el secret que tenemos en conjunto, permitirá realizar la verificación de autenticidad de los mensajes. Básicamente, el sigature enviado tiene que ser el mismo que generan de su lado, aplicando HMAC al contenido que llega con el secreto en común.

Para garantizar que la serialización del JSON sea determinística, es necesario ordenar las claves del objeto de manera alfabética antes de realizar la conversión a string. Esto asegura consistencia en las respuestas y es especialmente útil para firmas criptográficas o validaciones HMAC. En nuestro caso particular, utilizamos la librería fast-json-stable-stringify para hacer la serialización del mismo.

Los webhooks, tanto en el entorno de desarrollo como en el productivo, llegarán de la IP 18.229.68.94. La misma se encuentra fija para poder ajustar las políticas de seguridad pertinentes de su lado. Además, tenemos un sistema de reintentos automáticos que operan con exponential backoff; esto significa que se reintentará múltiples veces y cada reintento será después de un intervalo mayor. Realizamos hasta 8 reintentos de cada envío.

Países soportados

Flujos de API

Descubrí algunas de las distintas soluciones que se pueden implementar a través del API Cripto. Acá vas a poder encontrar flujos y casos prácticos de uso de la plataforma.

Was this section helpful?

What made this section unhelpful for you?

Alta de usuario

El alta de usuario consta de tres pasos principales. Los tres pasos son obligatorios para considerar a un usuario como dado de alta correctamente y que el mismo pueda realizar operaciones.

  1. Crear un usuario: se debe realizar el alta usando el POST de crear usuario.
  2. Añadir cuenta bancaria: se debe añadir al menos una cuenta bancaria al usuario usando el POST de añadir cuenta bancaria. Sólo podrá operar en la moneda que tenga una cuenta bancaria añadida. Por ejemplo, si cuenta con una cuenta bancaria en ARS añadida podrá operar USDT contra ARS, pero no podrá operar contra USD.
  3. Subir documentación: la subida de documentación consta de dos pasos. Primero, se realiza la generación del link de suba de documentación utilizando esta llamada. Una vez obtenida se debe subir a esa URL mediante PUT la imagen correspondiente como un binario. Es necesario subirle tanto DNI_FRONT (frente del documento de identidad) como DNI_BACK (dorso del documento de identidad) a un usuario.

Para sandbox se requiere que los legalId sean válidos. Recomendamos, por ejemplo para Argentina, buscar CUITs válidos usando cuitonline.com.

Was this section helpful?

What made this section unhelpful for you?

On-ramp

En esta sección, exploraremos el otro caso de uso más importante: el On-Ramp.

¿Qué es?

El On-Ramp se refiere al proceso inverso del off-ramp, es decir, la capacidad de cambiar moneda fiduciaria por criptomonedas.

¿Cómo funciona?

  1. El usuario realiza una transferencia bancaria en pesos o dólares al CBU que le informamos. En el caso de pesos, es posible generar un CVU único para la compañía, con un alias propio (por ejemplo: google.ars).
  2. Una vez recibida la transferencia, notificamos al usuario sobre la acreditación a través de un webhook con el evento FIAT_DEPOSIT_UPDATE.
  3. Tras recibir esta notificación, el usuario puede proceder a operar la compra de criptomonedas. Esta operación es instantánea, y las criptomonedas se acreditan inmediatamente en el balance del usuario. Una vez disponibles, pueden ser retiradas a la wallet que el usuario desee.

Contamos con una opción más nueva y sencilla de implementar. Para más información, dirigirse a la sección de reglas de pago.

Tipos de retiros disponibles

Actualmente ofrecemos dos tipos de retiros:

  1. Retiro normal: el caso más común. La compañía realiza un retiro por usuario a una wallet específica. Esta wallet puede ser la misma para todos los usuarios o distinta para cada cliente, sin ninguna restricción.
  2. Retiro globo: para reducir los costos de red, es posible realizar un retiro generalizado de los balances de criptomonedas de todos los usuarios de la compañía en intervalos definidos (diario, semanal, mensual, etc.). Con este modelo, se suman los balances de criptomonedas de todos los usuarios y se efectúa un único retiro a la wallet que la compañía haya informado. Es necesario que la compañía nos notifique previamente si desea optar por esta modalidad.
Was this section helpful?

What made this section unhelpful for you?

Off-ramp

En esta sección, exploraremos uno de los casos de uso más importantes: el Off-Ramp.

¿Qué es?

El Off-Ramp se refiere a la capacidad de cambiar criptomonedas por moneda fiduciaria, por ejemplo, pesos argentinos; es decir, partiendo de criptomonedas, terminamos en pesos en la cuenta bancaria del usuario a través de un proceso seguro, eficiente e instantáneo.

Opción 1 - Operatoria en descubierto

En este caso, se podría realizar una órden de usuario sin que el mismo cuente con fondos en su propio balance; Es decir, los fondos se debitarían de una cuenta acumuladora a nombre tu compañía en su lugar. Cada compañía comenzará con un descubierto y será responsable de ir enviando fondos a su dirección única asignada en cualquiera de las redes soportadas.

El flujo, en este caso, se vería así:

  1. Una vez el usuario es validado, recibirán un webhook con el aviso. Si no, se puede realizar long-polling, consultando el estado de validación. Cabe mencionar que este proceso demora como máximo 10 minutos y en la mayoría de los casos, suelen demorar no más de 30 segundos.
  2. Llegado a este punto, se puede realizar un lock de precio y, posteriormente, una creación de órden (por ejemplo, venta de USDT a ARS en este caso). Los precios del momento se pueden consultar a través de del endpoint de consulta de precio.
  3. Finalmente, el flujo termina con el envío de los pesos a la cuenta cargada inicialmente.

Por último, es importante destacar que existe un endpoint para consultar el estado de cuenta de la compañía. Si la misma queda en un estado negativo mayor al descubierto asignado, las órdenes se congelarán inmediatamente, desbloqueándose automáticamente una vez se envíen fondos nuevamente.

Opción 2 - Operatoria normal

En este caso, los fondos se debitarían directo de los usuarios creados y los depósitos tendrán que ser enviados a la wallet que le generaremos de cada uno de los usuarios. La variación principal respecto a la primera opción es que posterior a la validación de usuario, es necesario obtener su wallet de depósito para poder hacer envíos de fondos allí. Una vez los mismos se acrediten, recibirán un webhook informando o bien podrían realizar long-polling consultando el balance del usuario. A partir de allí, ya se puede proceder con la creación del lock de precio, órden y envío de fondos a cuenta bancaria.

Contamos con una opción más nueva y sencilla de implementar. Para más información, dirigirse a la sección de reglas de pago.

Was this section helpful?

What made this section unhelpful for you?

Assets de prueba

Paginación

Parámetros

  • page: Página actual, el default es 1.
  • limit: La cantidad de elementos por página, el default es 10.

Para poder hacer uso de esto, se requiere enviar como queryParams, algo así: /?page=1&limit=10; completando con los parámetros deseados.

Was this section helpful?

What made this section unhelpful for you?

Errores

API Cripto usa respuestas HTTP estándar para indicar resultados exitosos o fallidos.

En general:

  • Códigos en el rango de 2xx indican éxito.
  • Códigos en el rango de 4xx indican un error relacionado a la información provista (como parámetros omitidos o con un tipo inválido).
  • Códigos en el rango de 5xx indican un error inesperado en Manteca.

Más allá de los códigos, en caso de error, se podrá acceder a más detalle a partir de visualizar el body de la respuesta. Siempre se maneja un mismo formato que contiene por un lado un internalStatus que hace referencia a un código verbal de error y por otro, un message que es básicamente una descripción algo más detallada del error.

Ejemplo de respuesta de error

internalStatusstring

Código verbal de error

messagestring

Descripción del error

errorsarray

Show child attributes

Was this section helpful?

What made this section unhelpful for you?

1 2 3 4 5 6 7 { "internalStatus": "BAD_REQUEST", "message": "Bad request.", "errors": [ "userId is missing." ] }

Error Codes

400

Los parámetros enviados pueden tener algún problema. Normalmente, se indica el detalle en la respuesta.

401, 403

Faltan las API keys o faltan permisos para acceder al recurso.

404

El recurso no existe

409

Normalmente, ocurre cuando se envía el mismo requests repetidas veces en un corto lapso de tiempo.

429

Demasiadas requests enviadas en un corto período de tiempo.

500

Error del lado de Manteca.

Was this section helpful?

What made this section unhelpful for you?

Health

Contamos con una web exclusiva para visualizar el estado de nuestros servicios. Además, se puede realizar un GET al /v1 para obtener el estado particular del servicio cripto.

Was this section helpful?

What made this section unhelpful for you?