API Multicaja (Alpha) API Reference

Bienvenido a la API de Multicaja (Alpha)

Este es un proyecto alpha y por lo tanto sufrirá muchos cambios

Todos los requests son autenticados usando un api-key.

Existen dos ambientes: qa y producción. El host de qa es apiqa.multicaja.cl.

API Endpoint
http://api.multicaja.cl/v0.5-alpha/
Request Content-Types: application/json
Response Content-Types: application/json
Version: 0.5

clientes

Operaciones directamente con relacionadas un cliente

Crear

POST /users

Registra a un nuevo cliente, el que puede ser persona natural (rut.value < 50000000) o empresa (rut.value >= 50000000).

Notas

  • Requiere al menos los campos mínimos de User: rut y correo.
  • Si es una empresa, debe incluir company_data.
  • El servicio también funcionará con el rut de un cliente existente con globalStatus "pre-registro".
  • Si se intenta crear un usuario con un rut o un email que ya ha sido usado y con globalStatus distinto de "pre-registro", el servicio retornará 405.
  • clave debe ser númérica, de 4 dígitos, no consecutivos, no iguales, y que no correspondan a ninguna parte de rut.value
  • Si se incluye el campo clave, globalStatus cambiará a "activo"
  • Si se incluye rut.serial_number, se invocará al SRCeI para validar la cédula. Si esa validación fuera exitosa, rut.status pasará a "validado". Si la validación no fuera exitosa, rut.status cambiará a (o seguirá siendo) "no validado". Esta llamada se hará de manera síncrona, por lo que el servicio no retornará hasta que el SRCeI responda.

Recomendaciones

  • Dado que el servicio no funciona si el rut o el email ya han sido usados (a menos que pertenezcan a un cliente con globalStatus "pre-registro"), debería buscarlo primero por rut y luego por email usando el método /users/find

Parámetros del usuario a crear

Request Example
{
  "rut": {
    "value": 14569484,
    "serial_number": "A026582309",
    "dv": "K"
  },
  "cellphone": {
    "value": "912345678"
  },
  "email": {
    "value": "pepito@gmail.com"
  },
  "company_data": {
    "razon_social": "Reparaciones Joselito Ltda.",
    "giro": 772
  },
  "clave": 8922,
  "name": "Juan Carlos",
  "lastname_1": "López",
  "lastname_2": "Carrasco",
  "gender": "string",
  "birthday": "1977-1-14"
}
201 Created

OK

405 Method Not Allowed

El usuario ya existe

422 Unprocessable Entity

El Cliente contiene datos inválidos

Response Example (201 Created)
{
  "id": 7783834,
  "rut": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": 14569484,
    "serial_number": "A026582309",
    "dv": "K"
  },
  "cellphone": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "912345678"
  },
  "email": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "pepito@gmail.com"
  },
  "company_data": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "razon_social": "Reparaciones Joselito Ltda.",
    "giro": 772
  },
  "globalStatus": "string",
  "has_clave": "true",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "name": "Juan Carlos",
  "lastname_1": "López",
  "lastname_2": "Carrasco",
  "gender": "string",
  "birthday": "1977-1-14"
}
Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

Leer

GET /users/{user_id}

Lee los datos de un cliente.

Notas

  • Incluye los objetos rut, email y cellphone
user_id

ID del usuario

type
integer
in
path
200 OK

OK

404 Not Found

Cliente no existe

Response Example (200 OK)
{
  "id": 7783834,
  "rut": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": 14569484,
    "serial_number": "A026582309",
    "dv": "K"
  },
  "cellphone": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "912345678"
  },
  "email": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "pepito@gmail.com"
  },
  "company_data": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "razon_social": "Reparaciones Joselito Ltda.",
    "giro": 772
  },
  "globalStatus": "string",
  "has_clave": "true",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "name": "Juan Carlos",
  "lastname_1": "López",
  "lastname_2": "Carrasco",
  "gender": "string",
  "birthday": "1977-1-14"
}

Actualizar

PUT /users/{user_id}

Modifica los datos de un cliente, el que puede ser persona natural (rut.value < 50000000) o empresa (rut.value >= 50000000).

Notas

  • Pese a que el rut es requerido, no es modificable. Si se proporciona un RUT distinto al del cliente {user_id}, el servicio retornará 422
  • Si es una empresa, debe incluir company_data.
  • clave debe ser númérica, de 4 dígitos, no consecutivos, no iguales, y que no correspondan a ninguna parte de rut.value
  • Si se incluye el campo clave y globalStatus era "pre-registro", globalStatus cambiará a "activo"
  • No se podrá modificar email.value si cliente no tiene clave. Si se intenta modificar un email de un cliente que no tiene clave, el servicio retornará 422.
  • No se podrá modificar email.value si email.status == "validado". Si se intenta modificar un email validado a través de este método, el servicio retornará 422. Para modificar un correo validado, se debe usar los métodos de la URL /user/{user_id}/mail. La excepción a esta regla son los clientes con globalStatus == "pre-registro". Si se intenta modificar un email validado de un cliente "pre-registro", la modificación tendrá éxito y email.status pasará a ser "no validado".
  • No se podrá modificar cellphone.value si celular.status == "validado". Si se intenta modificar un celular validado a través de este método, el servicio retornará 422. Para modificar un celular validado, se debe usar los métodos de la URL /user/{user_id}/sms. La excepción a esta regla son los clientes con globalStatus == "pre-registro". Si se intenta modificar un celular validado de un cliente "pre-registro", la modificación tendrá éxito y celular.status pasará a ser "no validado".
  • Si se incluye rut.serial_number, se invocará al SRCeI para validar la cédula. Si esa validación fuera exitosa, rut.status pasará a "validado". Si la validación no fuera exitosa, rut.status cambiará a (o seguirá siendo) "no validado". Esta llamada se hará de manera síncrona, por lo que el servicio no retornará hasta que el SRCeI responda.
  • Los campos gender, birthday, name, lastname_1 y lastname_2 no tienen restricciones de modificación

Recomendaciones

  • Sólo envíe los campos mínimos y los que se desee modificar. Por ejemplo, para cambiar el nombre, sólo incluya rut.value, email.value y name. Para validar la cédula contra el SRCeI, sólo incluya rut.value, email.value y rut.status.
  • Si se desea cambiar la clave del cliente, valide la clave anterior en primer lugar

Parámetros a modificar

user_id

ID del usuario

type
integer
in
path
Request Example
{
  "rut": {
    "value": 14569484,
    "serial_number": "A026582309",
    "dv": "K"
  },
  "cellphone": {
    "value": "912345678"
  },
  "email": {
    "value": "pepito@gmail.com"
  },
  "company_data": {
    "razon_social": "Reparaciones Joselito Ltda.",
    "giro": 772
  },
  "clave": 8922,
  "name": "Juan Carlos",
  "lastname_1": "López",
  "lastname_2": "Carrasco",
  "gender": "string",
  "birthday": "1977-1-14"
}
200 OK

OK

404 Not Found

Cliente no existe

422 Unprocessable Entity

El Cliente contiene datos inválidos

Response Example (200 OK)
{
  "id": 7783834,
  "rut": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": 14569484,
    "serial_number": "A026582309",
    "dv": "K"
  },
  "cellphone": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "912345678"
  },
  "email": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "pepito@gmail.com"
  },
  "company_data": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "razon_social": "Reparaciones Joselito Ltda.",
    "giro": 772
  },
  "globalStatus": "string",
  "has_clave": "true",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "name": "Juan Carlos",
  "lastname_1": "López",
  "lastname_2": "Carrasco",
  "gender": "string",
  "birthday": "1977-1-14"
}
Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

Buscar

GET /users/find

Busca a un cliente por rut, por email o por celular

rut

Rut sin puntos ni dígito verificador

type
integer
in
query
email

Email

type
string
in
query
cellphone

Celular (9 dígitos)

type
string
in
query
200 OK

OK

404 Not Found

Cliente no existe

Response Example (200 OK)
{
  "id": 7783834,
  "rut": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": 14569484,
    "serial_number": "A026582309",
    "dv": "K"
  },
  "cellphone": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "912345678"
  },
  "email": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "pepito@gmail.com"
  },
  "company_data": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "razon_social": "Reparaciones Joselito Ltda.",
    "giro": 772
  },
  "globalStatus": "string",
  "has_clave": "true",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "name": "Juan Carlos",
  "lastname_1": "López",
  "lastname_2": "Carrasco",
  "gender": "string",
  "birthday": "1977-1-14"
}

Buscar por ID y clave

GET /users/login

Busca a un cliente por (rut y clave) o por (email y clave)

rut

Rut sin puntos ni dígito verificador

type
integer
in
formData
email

Email

type
string
in
formData
clave

Clave de 4 dígitos

type
string
in
formData
200 OK

OK

404 Not Found

Cliente no existe (puede representar clave inválida)

Response Example (200 OK)
{
  "id": 7783834,
  "rut": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": 14569484,
    "serial_number": "A026582309",
    "dv": "K"
  },
  "cellphone": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "912345678"
  },
  "email": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "pepito@gmail.com"
  },
  "company_data": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "razon_social": "Reparaciones Joselito Ltda.",
    "giro": 772
  },
  "globalStatus": "string",
  "has_clave": "true",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "name": "Juan Carlos",
  "lastname_1": "López",
  "lastname_2": "Carrasco",
  "gender": "string",
  "birthday": "1977-1-14"
}

contacto

Para contactar a un cliente y validar datos de contacto

Enviar correo

POST /users/{user_id}/mail

Envía una comunicación o correo de validación al cliente

Notas

  • template_data debe incluirse si el template requiere datos mínimos. Los datos deben ir en formato JSON. En caso contrario, el servicio retornará 422.
  • user_callback_uri debe incluirse si el template incluye un link para que el usuario haga click. En caso contrario, el servicio retornará 422.
  • Si se incluye user_callback_uri, no se incluye address, y el usuario hace clic en el link que indica el correo, el sistema actualizará automáticamente a validado el campo email.status del Cliente. Esto se logra incluyendo en el correo un link a una URI temporal que realiza el cambio y luego redirige a user_callback_uri.
  • address permite cambiar el correo electrónico cuando el cliente tiene un correo validado. Si se incluye tanto user_callback_uri como address, y el usuario hace clic en el link que indica el correo, el sistema cambiará automáticamente el correo del cliente a la dirección que indica address y lo dejará como validado.
  • La validación de correos se logra incluyendo en el correo un link a una URI temporal que realiza el cambio de estatus y luego redirige a user_callback_uri.

Correo electrónico a enviar

template: string

Tipo de correo electrónico a enviar

template_data: string

JSON con tantos pares llave-valor como requiera el template del correo a enviar

user_callback_uri: string

Link que incluirá el correo si el template lo soporta

address: string

Correo electrónico al que se enviará este mensaje. Si no se incluye este campo, se usará el campo email.value del Cliente.

user_id

ID del usuario

type
integer
in
path
Request Example
{
  "template": "Prepago/ValidacionCorreo",
  "template_data": "{'saludo': 'Estimado Pepito', 'despedida': 'Chao!'}",
  "user_callback_uri": "https://www.multicaja.cl/prepago/registro?u=3242343",
  "address": "pepito@gmail.com"
}
201 Created

OK

404 Not Found

Cliente no existe

422 Unprocessable Entity

El mail contiene datos inválidos

Response Example (201 Created)
"boolean"
Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

Enviar sms

POST /users/{user_id}/sms

Permite mandar un mensaje por sms al cliente

Notas

  • Sólo incluir cellphone si el usuario ya tiene celular e intenta cambiarlo
  • Si el template requiere datos mínimos, debe incluirse estos datos en formato JSON mediante el campo template_data
  • Si el cliente indica no haber recibido el sms, reintente el envío cambiando gateway por "secondary"
  • No intente enviar códigos de validación a mano. Use un template que lo soporte.

SMS a enviar

template: string

Tipo de sms a enviar

gateway: string primary, secondary

Gateway por el que se enviará el SMS

  • primary: Gateway primaria (default)
  • secondary: Gateway secundaria, usar sólo si el cliente dice no haber recibido el SMS
cellphone: string

Celular al que se enviará este mensaje. Corresponde a los 9 números que siguen a '+56'. Si no se incluye este campo, se usará el campo cellphone.value del Cliente.

user_id

ID del usuario

type
integer
in
path
Request Example
{
  "template": "Prepago/ValidacionCelular",
  "gateway": "string",
  "cellphone": "912345678"
}
201 Created

OK

404 Not Found

Cliente no existe

422 Unprocessable Entity

El sms contiene datos inválidos

Response Example (201 Created)
"boolean"
Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

Validar código sms

PUT /users/{user_id}/sms

Valida un código enviado mediante POST a /users/{user_id}/sms

Notas

  • Sólo invocar este método para validar celular si se ha enviado previamente un código por SMS haciendo POST a /users/{user_id}/sms
  • Dependiendo del template usado en el POST a /users/{user_id}/sms, esta llamada podría cambiar cellphone.status a "validado". Esto ocurrirá sólo si el código proporcionado corresponde al que fue enviado al celular`.
  • Si el código ingresado no corresponde al que fue enviado al cliente, el servicio retornará 422.

Código ingresado por el cliente

user_id

ID del usuario

type
integer
in
path
Request Example
"123456"
201 Created

OK

404 Not Found

Cliente no existe

422 Unprocessable Entity

El código ingresado no es válido

Response Example (201 Created)
"boolean"
Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

cuentas

Operaciones relacionadas con las cuentas bancarias de un cliente

Listar

GET /users/{user_id}/bank_accounts
user_id

ID del usuario

type
integer
in
path
201 Created

OK

404 Not Found

Cliente no existe

Response Example (201 Created)
[
  {
    "id": 7783834,
    "bank_id": 4,
    "acc_type": "string",
    "acc_number": "string",
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    }
  }
]

Crear

POST /users/{user_id}/bank_accounts

Crea una nueva cuenta bancaria para este cliente

  • La terna (account.bank_id, account.acc_type, account.acc_number) debe ser única para este usuario. De lo contrario, el servicio retornará 405

Cuenta bancaria

user_id

ID del usuario

type
integer
in
path
Request Example
{
  "bank_id": 4,
  "acc_type": "string",
  "acc_number": "string"
}
201 Created

OK

404 Not Found

Cliente no existe

405 Method Not Allowed

La cuenta ya existe

422 Unprocessable Entity

La cuenta contiene datos inválidos

Response Example (201 Created)
[
  {
    "id": 7783834,
    "bank_id": 4,
    "acc_type": "string",
    "acc_number": "string",
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    }
  }
]
Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

Eliminar

DELETE /users/{user_id}/bank_accounts/{acc_id}
user_id

ID del usuario

type
integer
in
path
acc_id

ID de la cuenta

type
integer
in
path
200 OK

OK

404 Not Found

Cliente o Cuenta no existen

direcciones

Operaciones relacionadas con la dirección física de un cliente

Listar

GET /users/{user_id}/addresses
user_id

ID del usuario

type
integer
in
path
201 Created

OK

404 Not Found

Cliente no existe

Response Example (201 Created)
[
  {
    "id": 7783834,
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "alias": "Casa",
    "line_1": "Suecia 1414",
    "line_2": "Depto 502",
    "region_id": 13,
    "commune_id": 230,
    "postal_code": 7710787
  }
]

Crear

POST /users/{user_id}/addresses

Crea una nueva dirección para este cliente

  • La terna (address.line_1, address.commune, address.region) debe ser única para este usuario. De lo contrario, el servicio retornará 405

Dirección

user_id

ID del usuario

type
integer
in
path
Request Example
{
  "alias": "Casa",
  "line_1": "Suecia 1414",
  "line_2": "Depto 502",
  "region_id": 13,
  "commune_id": 230,
  "postal_code": 7710787
}
201 Created

OK

404 Not Found

Cliente no existe

405 Method Not Allowed

La dirección ya existe

422 Unprocessable Entity

La dirección contiene datos inválidos

Response Example (201 Created)
[
  {
    "id": 7783834,
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "alias": "Casa",
    "line_1": "Suecia 1414",
    "line_2": "Depto 502",
    "region_id": 13,
    "commune_id": 230,
    "postal_code": 7710787
  }
]
Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

Eliminar

DELETE /users/{user_id}/addresses/{addr_id}
user_id

ID del usuario

type
integer
in
path
addr_id

ID de la dirección

type
integer
in
path
200 OK

OK

404 Not Found

Cliente o Dirección no existen

parámetros

Listas de parámetros inmutables

Lista bancos

GET /params/banks
200 OK

OK

Response Example (200 OK)
[
  {
    "id": "integer",
    "value": "string",
    "desc": "string"
  }
]

Lista comunas

GET /params/communes
region

id de region para busqueda

type
integer
in
query
200 OK

OK

Response Example (200 OK)
[
  {
    "id": "integer",
    "value": "string",
    "desc": "string"
  }
]

Lista regiones

GET /params/regions
200 OK

OK

Response Example (200 OK)
[
  {
    "id": "integer",
    "value": "string",
    "desc": "string"
  }
]

Lista giros comerciales

GET /params/giros
200 OK

OK

Response Example (200 OK)
[
  {
    "id": "integer",
    "value": "string",
    "desc": "string"
  }
]

prepago

Operaciones relacionadas con Prepago Multicaja

Consultar

GET /users/{user_id}/prepaid

Indica si el cliente tiene un Prepago Multicaja. En caso afirmativo, retorna la tarjeta truncada.

  • Si el cliente tiene Prepago Multicaja, has_prepaid_account será true.
  • card.timestamps.created_at indicará la fecha en la que este cliente obtuvo su primera tarjeta de prepago
  • card.timestamps.updated_at indicará la fecha de la última acción de bloqueo, desbloqueo y reemisión.
user_id

ID del usuario

type
integer
in
path
200 OK

OK

404 Not Found

Cliente no existe o no tiene un Prepago Multicaja

Response Example (200 OK)
{
  "has_prepaid_card": true,
  "card": {
    "id": 7783834,
    "processor_user_id": "2231-9892-781283049685",
    "pan": "123456******1234",
    "expiration": "11/22",
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    }
  }
}

Emitir

POST /users/{user_id}/prepaid/issue

Asigna una tarjeta Prepago Multicaja a este cliente.

Como requisito para invocar este servicio, el cliente debe tener name y lastname_1 no vacíos, y además cumplir que (rut.status == "validado_srcei" || rut.status == "validado_tef") && email.status == "validado" && cellphone.stauts == "validado"

  • initial_balance: Saldo inicial de la tarjeta
  • Si el cliente ya tiene un Prepago Multicaja, este servicio retornará 405

Saldo inicial de la tarjeta en pesos

user_id

ID del usuario

type
integer
in
path
Request Example
5000
200 OK

OK

404 Not Found

Cliente no existe

405 Method Not Allowed

Cliente ya cuenta con un Prepago Multicaja. Si quiere reemitir la tarjeta, use el método reissue.

422 Unprocessable Entity

Hubo un error de validación

Response Example (200 OK)
{
  "id": 7783834,
  "processor_user_id": "2231-9892-781283049685",
  "pan": "123456******1234",
  "expiration": "11/22",
  "status": "string",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  }
}
Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

Ver saldo

GET /users/{user_id}/prepaid/balance

Retorna el saldo de la tarjeta

user_id

ID del usuario

type
integer
in
path
200 OK

OK

404 Not Found

Cliente no existe o no tiene un Prepago Multicaja

Response Example (200 OK)
3250

Aumentar saldo

POST /users/{user_id}/prepaid/balance/topup

Aumenta el saldo

Retorna el nuevo saldo de la tarjeta y un movimiento con un código de autorización

  • topup_amount corresponde al monto en pesos que se desea recargar
  • merchant_transaction_id corresponde a un identificador de la recarga en el canal. El servicio es idempotente para recargas con el mismo identificador y con idéntico topup_amount.
merchant_transaction_id: string

Identificador único de la recarga en el canal

topup_amount: integer

Monto de la recarga

user_id

ID del usuario

type
integer
in
path
Request Example
{
  "merchant_transaction_id": "20180315-77685-12",
  "topup_amount": 5000
}
201 Created

OK

404 Not Found

Cliente no existe o no tiene un Prepago Multicaja

422 Unprocessable Entity

La recarga contiene datos inválidos

Response Example (201 Created)
{
  "balance": 3250,
  "transaction": {
    "auth_code": "88457",
    "amount": 45737,
    "desc": "Abono sucursal Web"
  }
}
Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

Retirar

POST /users/{user_id}/prepaid/balance/withdraw

Disminuye el saldo de la tarjeta

Retorna el nuevo saldo de la tarjeta y un movimiento con un código de autorización

  • withdrawal_amount corresponde al monto en pesos que se desea retirar
  • merchant_transaction_id corresponde a un identificador del retiro en el canal. El servicio es idempotente para retiros con el mismo identificador y con idéntico withdrawal_amount.
merchant_transaction_id: string

Identificador único del retiro en el canal

withdrawal_amount: integer

Monto del retiro

user_id

ID del usuario

type
integer
in
path
Request Example
{
  "merchant_transaction_id": "20180315-77685-12",
  "withdrawal_amount": 5000
}
201 Created

OK

404 Not Found

Cliente no existe o no tiene un Prepago Multicaja

422 Unprocessable Entity

El retiro contiene datos inválidos

Response Example (201 Created)
{
  "balance": 3250,
  "transaction": {
    "auth_code": "88457",
    "amount": 45737,
    "desc": "Abono sucursal Web"
  }
}
Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

Reemitir

POST /users/{user_id}/prepaid/reissue

Bloquea la tarjeta activa y emite una tarjeta Prepago Multicaja a este cliente.

Para invocar este servicio, el cliente ya debe tener un Prepago Multicaja

La nueva tarjeta es retornada por el servicio. Si el cliente no tiene Prepago Multicaja, el servicio retornará 422

user_id

ID del usuario

type
integer
in
path
201 Created

OK

404 Not Found

Cliente no existe

422 Unprocessable Entity

Cliente no cuenta con un Prepago Multicaja

Response Example (201 Created)
{
  "id": 7783834,
  "processor_user_id": "2231-9892-781283049685",
  "pan": "123456******1234",
  "expiration": "11/22",
  "status": "string",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  }
}

Bloquear

POST /users/{user_id}/prepaid/status/lock

Bloquea la tarjeta. Si la tarjeta ya está bloqueada, no hace nada.

Para invocar este servicio, el cliente ya debe tener un Prepago Multicaja

Si el cliente no tiene Prepago Multicaja, el servicio retornará 405

user_id

ID del usuario

type
integer
in
path
201 Created

OK

404 Not Found

Cliente no existe

405 Method Not Allowed

Cliente no cuenta con un Prepago Multicaja

Response Example (201 Created)
{
  "id": 7783834,
  "processor_user_id": "2231-9892-781283049685",
  "pan": "123456******1234",
  "expiration": "11/22",
  "status": "string",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  }
}

Desbloquear

POST /users/{user_id}/prepaid/status/unlock

Desbloquea la tarjeta. Si la tarjeta ya está activa o expirada, no hace nada.

Para invocar este servicio, el cliente ya debe tener un Prepago Multicaja

Si el cliente no tiene Prepago Multicaja, el servicio retornará 405

user_id

ID del usuario

type
integer
in
path
201 Created

OK

404 Not Found

Cliente no existe

405 Method Not Allowed

Cliente no cuenta con un Prepago Multicaja

Response Example (201 Created)
{
  "id": 7783834,
  "processor_user_id": "2231-9892-781283049685",
  "pan": "123456******1234",
  "expiration": "11/22",
  "status": "string",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  }
}

Buscar transacciones

GET /users/{user_id}/prepaid/transactions
user_id

ID del usuario

type
integer
in
path

OK

404 Not Found

Cliente no existe

Response Example (200 OK)
[
  {
    "auth_code": "88457",
    "amount": 45737,
    "desc": "Abono sucursal Web"
  }
]

Notificación (Callback)

POST /prepaid/processor/notification

Notifica una transacción ocurrida en una tarjeta de prepago

Mensaje invocado por el procesador emisor

  • Si el mensaje de entrada no corresponde an un ISO8583Transaction, el servicio responderá 422

Transacción

Request Example
{
  "entidad_codigo": "9603",
  "cliente": {
    "centro_alta": "0001",
    "cuenta": "000000012345",
    "tipo_documento": "RUT",
    "numero_documento": "14569484"
  },
  "tarjeta": {
    "pan": "4111111111111111",
    "expiracion": "03/22",
    "bloqueo_codigo": "010",
    "bloqueo_descripcion": "MORA GRAVE",
    "saldo": {
      "codigo_moneda": "CLP",
      "saldo_dispuesto_antes": "1983000",
      "saldo_autorizado_antes": "100000",
      "saldo_dispuesto_despues": "1882900",
      "saldo_autorizado_despues": "200100"
    }
  },
  "mensaje_entrada": {
    "codigo_moneda_local": "CLP",
    "monto_local": "100100",
    "codigo_moneda_origen": "EUR",
    "monto_origen": "154",
    "comercio_nombre": "AMAZON UK",
    "comercio_pais": "GBR",
    "timestamp": "2018-01-14T15:27:42.669Z"
  },
  "mensaje_respuesta": {
    "factura_codigo": "TF491",
    "factura_descripcion": "COMPRA EN CUOTAS",
    "codigo_autorizacion": "100100",
    "respuesta_tipo_codigo": "110",
    "respuesta_tipo_descripcion": "APROBADO",
    "respuesta_codigo_autorizacion": "123456",
    "timestamp": "2018-01-14T15:27:42.669Z"
  },
  "raw_iso_8583_request": "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvS4=",
  "raw_iso_8583_response": "vdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c="
}
200 OK

OK

422 Unprocessable Entity

El mensaje ISO8583Transaction tiene errores

Response Example (422 Unprocessable Entity)
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

Schema Definitions

NewUser: object

Cliente (Request)

  • Si el RUT es inferior a 50.000.000, corresponde a Persona Natural y company_data deberá ser null.
  • Si el RUT es igual o superior a 50.000.000, corresponde a Empresa y company_data debe existir.
rut: NewRut
cellphone: NewCellPhone
email: NewEmail
company_data: NewCompanyData
clave: string

Clave de autenticación de 4 dígitos. Campo write-only.

Example
{
  "rut": {
    "value": 14569484,
    "serial_number": "A026582309",
    "dv": "K"
  },
  "cellphone": {
    "value": "912345678"
  },
  "email": {
    "value": "pepito@gmail.com"
  },
  "company_data": {
    "razon_social": "Reparaciones Joselito Ltda.",
    "giro": 772
  },
  "clave": 8922,
  "name": "Juan Carlos",
  "lastname_1": "López",
  "lastname_2": "Carrasco",
  "gender": "string",
  "birthday": "1977-1-14"
}

User: object

Cliente (Response)

  • Este objeto representa tanto a una persona natural como a una empresa
  • Si el RUT es inferior a 50.000.000, corresponde a Persona Natural y company_data deberá ser null.
  • Si el RUT es igual o superior a 50.000.000, corresponde a Empresa y company_data es obligatorio
id: integer

Identificador interno. Campo read-only.

rut: Rut
cellphone: CellPhone
email: Email
company_data: CompanyData
globalStatus: string pre-registro, activo, bloqueado, borrado

Estado del cliente. Campo read-only.

  • "pre-registro": cliente no posee clave
  • "activo": cliente con clave que puede transar
  • "bloqueado": cuenta temporalmente congelada
  • "borrado": eliminación lógica del cliente, no admite ningún cambio
has_clave: string

"true" si el usuario tiene clave; "false" en otro caso

timestamps: Timestamps
Example
{
  "id": 7783834,
  "rut": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": 14569484,
    "serial_number": "A026582309",
    "dv": "K"
  },
  "cellphone": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "912345678"
  },
  "email": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "value": "pepito@gmail.com"
  },
  "company_data": {
    "status": "string",
    "timestamps": {
      "created_at": "2018-01-14T15:27:42.669Z",
      "updated_at": "2018-03-02T10:03:12.123Z"
    },
    "razon_social": "Reparaciones Joselito Ltda.",
    "giro": 772
  },
  "globalStatus": "string",
  "has_clave": "true",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "name": "Juan Carlos",
  "lastname_1": "López",
  "lastname_2": "Carrasco",
  "gender": "string",
  "birthday": "1977-1-14"
}

UserBasicFields: object

Nombre, Sexo, y Fecha de nacimiento de una persona Padre de User y NewUser No se usa de manera independiente en la API

name: string

Nombre o nombres de pila

lastname_1: string

Apellido paterno

lastname_2: string

Apellido materno

gender: string M, F, N

Sexo de la persona

  • M: Masculino
  • F: Femenino
  • N: Otro / prefiere no responder
birthday: string (date)

Fecha de nacimiento

Example
{
  "name": "Juan Carlos",
  "lastname_1": "López",
  "lastname_2": "Carrasco",
  "gender": "string",
  "birthday": "1977-1-14"
}

NewRut: object

Identificador Chileno (Request)

No se usa de manera independiente en la API

value: integer

El rut sin puntos, guión, ni dígito verificador

serial_number: string

Número de serie o número de documento. Éste es un campo write-only, por lo que nunca vendrá como respuesta de la API

dv: string

digito verificador

Example
{
  "value": 14569484,
  "serial_number": "A026582309",
  "dv": "K"
}

Rut: object

Identificador Chileno (Response)

No se usa de manera independiente en la API

status: string no_validado, validado_srcei, validado_tef

Estado de validación del rut

  • no_validado: el rut no ha sido validado o las validaciones no han sido exitosas
  • validado_srcei: el rut fue validado exitosamente contra el registro civil
  • validado_tef: la validación más fuerte, ya que el usuario ha realizado un aviso de depósito seguido de una transferencia desde una cuenta correspondiente a su rut
timestamps: Timestamps
Example
{
  "status": "string",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "value": 14569484,
  "serial_number": "A026582309",
  "dv": "K"
}

NewEmail: object

Correo Electrónico (Request)

No se usa de manera independiente en la API

value: string (email)
Example
{
  "value": "pepito@gmail.com"
}

Email: object

Correo Electrónico (Response)

No se usa de manera independiente en la API

status: string no_validado, en_proceso_de_validacion, validado

Estado de validación del email

  • no_validado: el email no ha sido validado
  • en_proceso_de_validacion: se ha enviado al menos un correo de validación, pero el usuario no ha hecho clic en el link
  • validado: el usuario demostró tener acceso a la casilla haciendo clic en un link enviado a ésta
timestamps: Timestamps
Example
{
  "status": "string",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "value": "pepito@gmail.com"
}

NewCellPhone: object

Teléfono Celular (Request)

No se usa de manera independiente en la API

value: string

Los 9 números que siguen a '+56'

Example
{
  "value": "912345678"
}

CellPhone: object

Teléfono Celular (Response)

No se usa de manera independiente en la API

status: string no_validado, en_proceso_de_validacion, validado

Estado de validación del celular

  • no_validado: el celular no ha sido validado
  • en_proceso_de_validacion: se ha enviado al menos un sms de validación, pero el usuario no ha usado el código
  • validado: el usuario demostró tener acceso al celular usando el código enviado a éste
timestamps: Timestamps
Example
{
  "status": "string",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "value": "912345678"
}

NewCompanyData: object

Datos de la empresa a la que corresponde este Cliente (Request)

No se usa de manera independiente en la API

razon_social: string

Nombre legal de la empresa

giro: integer

ID del giro (ver /params/giros)

Example
{
  "razon_social": "Reparaciones Joselito Ltda.",
  "giro": 772
}

CompanyData: object

Datos de la empresa a la que corresponde este Cliente (Response)

No se usa de manera independiente en la API

status: string no_validado, validado_sii

Estado de validación de la razón social

  • no_validado: la razón social no ha sido validada
  • validado_sii: la razón social fue validada mediante el SII
timestamps: Timestamps
Example
{
  "status": "string",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "razon_social": "Reparaciones Joselito Ltda.",
  "giro": 772
}

Timestamps: object

Fecha de creación y de última modificación. Campo read-only. Componente de Address, User, Rut, CellPhone, Email, BankAccount y CompanyData

No se usa de manera independiente en la API

created_at: string (date-time)
updated_at: string (date-time)
Example
{
  "created_at": "2018-01-14T15:27:42.669Z",
  "updated_at": "2018-03-02T10:03:12.123Z"
}

NewAddress: object

Dirección física (Request)

alias: string

Nombre que el usuario le da a esta dirección

line_1: string

Lo que se une a región y comuna para determinar el código postal

line_2: string

Información adicional como número de departamento. No afecta el código postal.

region_id: integer

ID de la comuna (ver /params/regions)

commune_id: integer

ID de la comuna (ver /params/communes)

postal_code: string

Identificador de (address.line_1, address.commune, address.region)

Example
{
  "alias": "Casa",
  "line_1": "Suecia 1414",
  "line_2": "Depto 502",
  "region_id": 13,
  "commune_id": 230,
  "postal_code": 7710787
}

Address: object

Dirección física (Response)

id: integer

Identificador interno. Campo read-only.

timestamps: Timestamps
Example
{
  "id": 7783834,
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  },
  "alias": "Casa",
  "line_1": "Suecia 1414",
  "line_2": "Depto 502",
  "region_id": 13,
  "commune_id": 230,
  "postal_code": 7710787
}

NewBankAccount: object

Cuenta bancaria personal (Request)

bank_id: integer

ID del banco (revisar /params/banks)

acc_type: string vista, corriente, ahorro

Tipo de cuenta

acc_number: string

Número de cuenta sin puntos, guiones, ni ceros a la izquierda

Example
{
  "bank_id": 4,
  "acc_type": "string",
  "acc_number": "string"
}

BankAccount: object

Cuenta bancaria personal (Response)

id: integer

Identificador interno. Campo read-only.

bank_id: integer

ID del banco (revisar /params/banks)

acc_type: string vista, corriente, ahorro

Tipo de cuenta

acc_number: string

Número de cuenta sin puntos, guiones, ni ceros a la izquierda

status: string no_validada, validada

Estado de validación de la cuenta

  • no_validada: estado por defecto
  • validada: el usuario hizo una aviso de depósito seguido de una transferencia desde esta cuenta
timestamps: Timestamps
Example
{
  "id": 7783834,
  "bank_id": 4,
  "acc_type": "string",
  "acc_number": "string",
  "status": "string",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  }
}

ISO8583Transaction: object

Request y response en formato ISO 8583

entidad_codigo: string

Código de entidad en el procesador

cliente: object

cliente afectado por la transacción

tarjeta: object

tarjeta afectada por la transacción

mensaje_entrada: object

Mensaje que llegó al procesador

mensaje_respuesta: object

Mensaje que respondió el procesador

raw_iso_8583_request: string

Mensaje de entrada ISO 8583 codificado en base64

raw_iso_8583_response: string

Mensaje de respuesta ISO 8583 codificado en base64

Example
{
  "entidad_codigo": "9603",
  "cliente": {
    "centro_alta": "0001",
    "cuenta": "000000012345",
    "tipo_documento": "RUT",
    "numero_documento": "14569484"
  },
  "tarjeta": {
    "pan": "4111111111111111",
    "expiracion": "03/22",
    "bloqueo_codigo": "010",
    "bloqueo_descripcion": "MORA GRAVE",
    "saldo": {
      "codigo_moneda": "CLP",
      "saldo_dispuesto_antes": "1983000",
      "saldo_autorizado_antes": "100000",
      "saldo_dispuesto_despues": "1882900",
      "saldo_autorizado_despues": "200100"
    }
  },
  "mensaje_entrada": {
    "codigo_moneda_local": "CLP",
    "monto_local": "100100",
    "codigo_moneda_origen": "EUR",
    "monto_origen": "154",
    "comercio_nombre": "AMAZON UK",
    "comercio_pais": "GBR",
    "timestamp": "2018-01-14T15:27:42.669Z"
  },
  "mensaje_respuesta": {
    "factura_codigo": "TF491",
    "factura_descripcion": "COMPRA EN CUOTAS",
    "codigo_autorizacion": "100100",
    "respuesta_tipo_codigo": "110",
    "respuesta_tipo_descripcion": "APROBADO",
    "respuesta_codigo_autorizacion": "123456",
    "timestamp": "2018-01-14T15:27:42.669Z"
  },
  "raw_iso_8583_request": "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvS4=",
  "raw_iso_8583_response": "vdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c="
}

PrepaidTransaction: object

Transacción realizada con la tarjeta de prepago (Response)

auth_code: string

Identificador del movimiento en el procesador

amount: integer

Monto del movimiento

desc: string

Glosa

Example
{
  "auth_code": "88457",
  "amount": 45737,
  "desc": "Abono sucursal Web"
}

PrepaidCard: object

Tarjeta de prepago Visa o Mastercard (Response)

id: integer

Identificador interno. Campo read-only.

processor_user_id: string

Identificador del cliente en el procesador

pan: string

PAN de la tarjeta

expiration: string

Fecha de expiración de la tarjeta

status: string activa, bloqueada, expirada

Estado de la tarjeta

  • activa: permite comprar
  • bloqueada: la tarjeta fue bloqueada por el cliente
  • expirada: la tarjeta expiró
timestamps: Timestamps
Example
{
  "id": 7783834,
  "processor_user_id": "2231-9892-781283049685",
  "pan": "123456******1234",
  "expiration": "11/22",
  "status": "string",
  "timestamps": {
    "created_at": "2018-01-14T15:27:42.669Z",
    "updated_at": "2018-03-02T10:03:12.123Z"
  }
}

Param: object

Parámetro básico (Response)

id: integer

identificador del parámetro

value: string

nombre del parámetro

desc: string

descripción del parámetro

Example
{
  "id": "integer",
  "value": "string",
  "desc": "string"
}

ErrorObj: object

Error que devuelve la api ante un HTTP 422 (Response)

code: integer (int32)

Código que representa el error. No será igual al código HTTP.

message: string

Descripción corta del error

details: ErrorObjDetail
Example
{
  "code": 1024,
  "message": "El cliente no pasó la validación",
  "details": [
    {
      "code": 227,
      "message": "El nombre no puede estar vacío"
    }
  ]
}

ErrorObjDetail: object

Cuando un error está compuesto por una lista de sub-errores, vendrán en este objeto Componente de ErrorObj

No se usa de manera independiente en la API

code: integer (int32)

Código que representa el sub-error

message: string

Descripción del sub-error

Example
{
  "code": 227,
  "message": "El nombre no puede estar vacío"
}