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 exponenr los endpoints. No soporta HTTP.

Was this section helpful?

What made this section unhelpful for you?

Base URL

Producción:

https://api.manteca.dev/cambio

Sandbox:

https://sandbox.manteca.dev/cambio

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 ciertas implementaciones donde lo creemos conveniente, también realizamos IP whitelisting para aumentar la seguridad.

Was this section helpful?

What made this section unhelpful for you?

GET

/v1/api/price/

Select
1 2 curl --location 'https://api.manteca.dev/cambio/v1/api/price/' \ --header 'md-api-key: API_KEY' \
Was this section helpful?

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

internalStatusstring

Código verbal de error

messagestring

Descripción del error

Was this section helpful?

What made this section unhelpful for you?

1 2 3 4 { "internalStatus": "USER_NF", "message": "User not found." }

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.

Was this section helpful?

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

md-api-keystring

Query Parameters

pagestring

La página actual

limitstring

La cantidad de elementos en cada página

Was this section helpful?

What made this section unhelpful for you?

GET

/?page=1&limit=10

Select
1 2 curl --location 'https://api.manteca.dev/cambio/?page=1&limit=10' \ --header 'md-api-key: TEST_API_KEY' \
Was this section helpful?

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.

Was this section helpful?

What made this section unhelpful for you?

Recursos principales

Was this section helpful?

What made this section unhelpful for you?

Base URL

Producción:

https://api.manteca.dev/cambio

Sandbox:

https://sandbox.manteca.dev/cambio

Language Box

Was this section helpful?

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

Was this section helpful?

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

Was this section helpful?

What made this section unhelpful for you?

Obtener retiros

Header Parameters

md-api-keystring

API Key otorgada por manteca.dev

Query Parameters

pagestring
limitstring
withdrawNumberIdstring
bankIdstring
userIdstring
numberIdstring
legalIdstring
userEmailstring
statusstring
coinstring
fromstring
tostring
Was this section helpful?

What made this section unhelpful for you?

GET

/v1/api/banking/withdraw/?page=1&limit=10&withdrawNumberId=&bankId=&userId=&numberId=&legalId=&userEmail=&status=&coin=&from=&to=

Select
1 2 curl --location 'https://api.manteca.dev/cambio/v1/api/banking/withdraw/?page=1&limit=10' \ --header 'md-api-key: API_KEY' \

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"
    }
  ]
}
Was this section helpful?

What made this section unhelpful for you?

Obtener retiro por ID

Header Parameters

md-api-keystring

API Key otorgada por manteca.dev

Path Parameters

withdrawIdstring
Was this section helpful?

What made this section unhelpful for you?

GET

/v1/api/banking/withdraw/{withdrawId}

Select
1 2 curl --location 'https://api.manteca.dev/cambio/v1/api/banking/withdraw/65bbe9f5cb1214f235d122a8' \ --header 'md-api-key: API_KEY' \

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"
}
Was this section helpful?

What made this section unhelpful for you?

Cancelar retiro

Header Parameters

md-api-keystring

API Key otorgada por manteca.dev

Path Parameters

withdrawIdstring
Was this section helpful?

What made this section unhelpful for you?

DELETE

/v1/api/banking/withdraw/{withdrawId}

Select
1 2 curl --location --request DELETE 'https://api.manteca.dev/cambio/v1/api/banking/withdraw/65bbe9f5cb1214f235d122a8' \ --header 'md-api-key: API_KEY' \
Was this section helpful?

What made this section unhelpful for you?

Crear retiro

Header Parameters

md-api-keystring

API Key otorgada por manteca.dev

Body Parameters

userIdstring

ID del usuario

coinstring

Moneda para retiro. ARS o USD

amountnumber

Monto

accountIndexnumber

Cuenta a usar para retirar. Indexada a partir de 0.

Was this section helpful?

What made this section unhelpful for you?

POST

/v1/api/banking/withdraw/

Select
1 2 3 4 5 6 7 8 curl --location 'https://api.manteca.dev/cambio/v1/api/banking/withdraw/' \ --header 'md-api-key: API_KEY' \ --data '{ "userId": "65bab11c23331f98515d2e50", "coin": "ARS", "amount": 100, "accountIndex": null }'

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"
}
Was this section helpful?

What made this section unhelpful for you?

Órdenes

Precios

Health

Was this section helpful?

What made this section unhelpful for you?

GET

/v1/

Select
1 curl --location 'https://api.manteca.dev/cambio/v1/' \
Was this section helpful?

What made this section unhelpful for you?