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 exponenr los endpoints. No soporta HTTP.
What made this section unhelpful for you?
Base URL
Producción:
https://api.manteca.dev/cambio
Sandbox:
https://sandbox.manteca.dev/cambio
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 ciertas implementaciones donde lo creemos conveniente, también realizamos IP whitelisting para aumentar la seguridad.
What made this section unhelpful for you?
What made this section unhelpful for you?
Errores
API Cambio 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
Código verbal de error
Descripción del error
What made this section unhelpful for you?
Status Codes
200
Todo funcionó correctamente.
201
La creación de un recurso funcionó correctamente.
204
Todo funcionó correctamente y no hay response.
400
El request tiene algún error. Por lo general, son conflictos con los parámetros enviados.
401
Falta enviar el API key.
403
El API key no tiene suficientes permisos para realizar tal acción.
404
No existe el recurso referenciado.
409
La request genera un conflicto. Por ejemplo, por temas de duplicación de request.
429
La cantidad de requests enviados supera el límite impuesto.
500
Algo funcionó mal de nuestro lado.
What made this section unhelpful for you?
Paginación
Hay endpoints que devuelven arrays como response al pedido. En los casos en los que los datos pueden crecer dinámicamente, se devolverá la información de la paginación en el pedido y se aceptarán los siguientes parámetros para pedir los datos paginados.
Parámetros
page
: Página actual, el default es 1.limit
: La cantidad de elementos por página, el default es 10.
Header Parameters
Query Parameters
La página actual
La cantidad de elementos en cada página
What made this section unhelpful for you?
What made this section unhelpful for you?
Webhooks
Podés 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. Entre ellos, encontrarás notificaciones relacionadas a cambios de estado de órdenes, depósitos y retiros.
What made this section unhelpful for you?
Recursos principales
What made this section unhelpful for you?
Base URL
Producción:
https://api.manteca.dev/cambio
Sandbox:
https://sandbox.manteca.dev/cambio
What made this section unhelpful for you?
Compañía
Existen dos tipos de compañía. PARTIALLY_MANAGED y FULLY_MANAGED.
FULLY_MANAGED
En este tipo la empresa no llevará un registro de los saldos de sus clientes ni de las operaciones bancarias, y no se permite deuda. El saldo final del usuario será 100% el saldo en Manteca. Las órdenes siempre utilizarán el saldo del cliente, sin generar deuda. Para ingresar saldos a la plataforma el cliente debe hacer un depósito y para retirar saldos el cliente debe hacer un retiro. Las ganancias se registran como un crédito especial que debe liquidarse por Manteca en un intervalo de tiempo específico acordado con la empresa.
PARTIALLY_MANAGED
Este tipo está diseñado pensando en los Proveedores de Servicios de Pago (PSP). La empresa llevará un registro de al menos uno de los fiat (ARS, USD o ambos), y las operaciones se realizarán contra la deuda. La empresa gestiona el saldo de la moneda(s) asociadas. Manteca, por su parte, se encargará de gestionar el balance de la moneda no gestionada por la empresa, así como los activos de mercado asociados. Las órdenes contra la moneda manejada por la empresa siempre generarán deuda, sin utilizar el saldo del cliente. El resultado de la orden siempre aumentará el saldo del cliente, sin generar crédito. En caso de que sea la moneda manejada ésta se retira automáticamente apenas el mercado lo permita. Los depósitos de la moneda manejada siempre generarán crédito, sin aumentar el saldo del cliente. Se prohíben los retiros fiat de la moneda manejada y se realizan automáticamente al final del día, utilizando el saldo del cliente, sin generar deuda. Se permiten los retiros de las monedas no manejadas, utilizando el saldo del cliente, sin generar deuda. Las ganancias se registran como un crédito especial que debe liquidarse por Manteca en un intervalo de tiempo específico acordado con la empresa.
Se puede llegar a requerir una inversión inicial que consideramos reserva para proveer liquidez. La empresa tendrá un límite determinado en dólares que indicará cuánta deuda puede llegar a tener en el momento. Para aumentar el límite se puede otorgar más reservas de antemano. Cada cierto período se realizarán dos tipos de settlements. El primero, retiro de ganancias, donde Manteca enviará las ganancias a la compañía. El segundo, balancear la deuda contra el crédito de la empresa o Manteca y dejar registro del total operado durante ese ciclo. De ser necesario se harán transferencias entre la empresa y Manteca. La frecuencia de ambos settlements son independientes, pueden ocurrir en plazos determinados arbitrariamente.
Contabilidad
Onboarding
Para altas de un cliente, Manteca asume que el email del cliente está verificado. El cliente se compone por dos módulos, la persona y el usuario.
Usuario
El usuario es la cuenta del cliente para la compañía. Se identifica con su número de cuenta (numberId).
Persona
Contiene los datos personales del cliente que se comparten entre todas las compañías. Esto permite que un cliente puede pertenecer a dos o más compañías sin conflicto. Se identifica con su número de ID nacional (legalId. Acepta CUIT, CUIL o pasaporte).
Ejemplo. Si un individuo es cliente de dos compañías, el individuo tendrá dos usuarios asociados y una persona compartida.
Conflicto de Persona
Al dar de alta un cliente, la empresa otorgará los datos de la pesona del mismo. Si el individuo tuviese una persona registrada, se comparará los datos nuevos recibidos con los datos existentes. Si existe una diferencia entre los datos, se generará un conflicto. En este paso, se requiere intervención de un administrador de Manteca, el cual actualizará la persona con los datos más recientes.
Flujo de Onboarding
Empieza el alta con el endpoint de Onboarding inicial. Recibe email, legalId, personalData (datos personales simplificados, no todo. El resto se intentará obtener directamente de servicios de información como AFIP) e información de bancos. En la response, en caso de obtener la flag de causedConflict: True
se debe esperar a que un administrador lo resuelva.
Se debe ver el status del usuario creado. Dependiendo del status del usuario, faltará cierta información:
- si status es EMAIL_VALIDATED requiere más información de la persona. (Utilizar endpoint de modificar persona para completar)
- Asegurar de que existan todos estos datos
phoneNumber, name, surname, sex, birthDate, nationality, maritalStatus, work, address.street, IVA, ganancias
- si status es PERSONAL_DATA_COMPLETE requiere información bancaria. (Utilizar endpoint de modificar usuario para completar)
- si status es USER_DATA_COMPLETE requiere subir DNIs (Ver sección de suba de DNIs)
- si status es VALIDATING requiere esperar.
- si status es VALIDATION_FAILED requiere resubir la documentación ya que fue rechazada.
- si status es VALIDATED u ONBOARDING_FAILED requiere esperar a que un administrador de Manteca solucione el alta.
- si status es ACTIVE el cliente está disponible para operar.
Compliance
Usuarios
Balances
Bancos
What made this section unhelpful for you?
Depósitos
Para depositar balance en la cuenta de un cliente, el cliente debe hacer una transferencia bancaria con una cuenta bancaria a nombre del cliente (Mismo CUIT/CUIL). Si un cliente tiene usuarios con dos compañías, se requiere intervención de un administrador de Manteca para que asigne el depósito a la compañía correspondiente.
Retiros
What made this section unhelpful for you?
Obtener retiros
Header Parameters
API Key otorgada por manteca.dev
Query Parameters
What made this section unhelpful for you?
Response
{
"totalCount": 1,
"pageCount": 1,
"pageSize": 10,
"page": 1,
"lastPage": 1,
"data": [
{
"id": "65bbe9f5cb1214f235d122a8",
"withdrawNumberId": "95",
"bankId": "95",
"companyId": "658dd9502accccd05acc3ce9",
"userId": "65bab11c23331f98515d2e50",
"numberId": "10438",
"legalId": "23999999995",
"status": "EXECUTED",
"coin": "ARS",
"amount": 100,
"destAccount": {
"cbu": "alias.alias",
"currency": "ARS",
"description": "Optional description",
"bank": {
"code": "123",
"name": "Banco Gariboldi Garibiano"
},
"virtual": false
},
"creationTime": "2024-02-01T15:59:01.928-03:00",
"updatedAt": "2024-02-01T15:59:02.303-03:00"
}
]
}
What made this section unhelpful for you?
Obtener retiro por ID
Header Parameters
API Key otorgada por manteca.dev
Path Parameters
What made this section unhelpful for you?
Response
{
"id": "65bbe9f5cb1214f235d122a8",
"withdrawNumberId": "95",
"bankId": "95",
"companyId": "658dd9502accccd05acc3ce9",
"userId": "65bab11c23331f98515d2e50",
"numberId": "10438",
"legalId": "23999999995",
"status": "EXECUTED",
"coin": "ARS",
"amount": 100,
"destAccount": {
"cbu": "alias.alias",
"currency": "ARS",
"description": "Optional description",
"bank": {
"code": "123",
"name": "Banco Gariboldi Garibiano"
},
"virtual": false
},
"creationTime": "2024-02-01T15:59:01.928-03:00",
"updatedAt": "2024-02-01T15:59:02.303-03:00"
}
What made this section unhelpful for you?
Cancelar retiro
Header Parameters
API Key otorgada por manteca.dev
Path Parameters
What made this section unhelpful for you?
What made this section unhelpful for you?
Crear retiro
Header Parameters
API Key otorgada por manteca.dev
Body Parameters
ID del usuario
Moneda para retiro. ARS o USD
Monto
Cuenta a usar para retirar. Indexada a partir de 0.
What made this section unhelpful for you?
Response
{
"id": "65bbe9f5cb1214f235d122a8",
"withdrawNumberId": "95",
"companyId": "658dd9502accccd05acc3ce9",
"userId": "65bab11c23331f98515d2e50",
"numberId": "10438",
"legalId": "23999999995",
"status": "PENDING",
"coin": "ARS",
"amount": 100,
"destAccount": {
"cbu": "alias.alias",
"currency": "ARS",
"description": "Optional description",
"bank": {
"code": "123",
"name": "Banco Gariboldi Garibiano"
},
"virtual": false
},
"creationTime": "2024-02-01T15:59:01.928-03:00",
"updatedAt": "2024-02-01T15:59:01.928-03:00"
}