Catálogo de API Products

En nuestro catálogo podrás encontrar los API Products disponibles, con su descripción y una explicación de su funcionalidad, así como también, documentación técnica de cada API. Para ver la documentación técnica, tienes que tener tu sesión iniciada.

Request samples

Navega hasta encontrar los ejemplos que estás buscando.

Regístrate

Los API Products que encontrarás en nuestro catálogo están disponibles para que los pruebes en entorno Sandbox.

Para ello, solo debes registrarte. Desde el botón “Regístrate” de nuestra página principal, completa el formulario. A partir de allí, podrás acceder a tu cuenta y gestionar tus aplicaciones.

Registra tu aplicación

Para consumir nuestros API Products en ambiente Sandbox, debes seguir los siguientes pasos:

  1. Inicia sesión
  2. Crea una aplicación.

Nombre Aplicación

Debes indicar el nombre que tiene o tendrá tu aplicación que consumirá APIs. Este nombre será mostrado al cliente BCI cuando dé el consentimiento.

URL de devolución de llamada

Aquí debes informar la URL de tu sitio a la cual debe volver el proceso de Oauth ( BCI Access ) al finalizar

Descripción

¿En qué consiste tu aplicación?

PublicKey

Genera un par de llaves pública y privada, si no sabes cómo al final de esta guía hay un tutorial de como hacerlo. Debes pegar la llave pública en este formulario. La privada guardala pues la usarás cuando consumas las APIs desde tu aplicación.

TppId

Completar con un valor numérico de 5 dígitos que luego se utilizará para informar en las peticiones donde así se lo requieran las APIs publicadas.

Asocia los API Products que te interesa consumir.

Prueba la integración de tu aplicación con los API Products en modo sandbox utilizando las guías técnicas de cada API Product.

Dashboard

Siguiendo estos pasos, habrás registrado tu aplicación correctamente. Luego entonces, podrás ir a tu menú personal y seleccionar “Mis Aplicaciones”. En este panel de control verás todas las aplicaciones que hayas registrado, las llamadas que hayas realizado, etc.

Lo más importante de esta sección es que en ella encontrarás el App ID y App Secret ID, que son tus credenciales para utilizar las APIs de BCI.

Guía de llamada a APIs

APIs con Bci Access No Requerido

Si el API Product que deseas conectar, no requiere autorización por medio de Bci Access, como por ejemplo Economic Indicators, el procedimiento de llamada sería de la siguiente manera:

Donde:

  • {{tu_App_ID}}:  Es el App ID o también llamada Consumer Key que te entrega el API Market al registrar tu aplicación.
  • {{ambiente}}: [sandbox | prod]

Procedimiento de llamada

Request sample

curl --location --request GET '
https://apiprogram.bci.cl/{ambiente}/v1/api-economic-indicators/list?query-date=2019-11-26' \
--header 'Content-Type: application/json' \
--header 'x-apikey:{{tu_App_ID}}'

Procedimiento de llamada

Request sample

curl --location --request GET '
https://apiprogram.bci.cl/{ambiente}/v1/api-economic-indicators/list?query-date=2019-11-26' \
--header 'Content-Type: application/json' \
--header 'x-apikey:{{tu_App_ID}}'

APIs con Bci Access Requerido

Para consumir a una API con Bci Access, llamadas APIs Privadas, primero debes obtener un código que se usa para obtener un access token y posteriormente hacer la llamada a la API con el access token obtenido. Es importante que recuerdes que este código es válido para un usuario específico y por un tiempo limitado.


 

Paso 1: Solicitud de token para acceder a AccessRequest

Paso 1: Solicitud de token para acceder a AccessRequest

Request sample

    curl --location --request POST 'https://
    apiprogram.bci.cl/{{ambiente}}/v1/api-oauth/
    token' \
    
    --header 'Content-Type: application/x-www-
    form-urlencoded' \
    
    --data-urlencode 'redirect_uri ={{CallbackUrl}}' \
    
    --data-urlencode 
    'client_assertion={{JWT_Oauth}}' \
    
    --data-urlencode 'grant_type=client_credentials' \
    
    --data-urlencode 'scope=access-requests'
                                        

Donde se deben establecer los parámetros requeridos:

Parameter in Name Value Required
Header Content-Type application/x-www-form-urlencoded Yes
data-urlencode grant_type client_credentials Yes
data-urlencode redirect_uri {{Callbackurl}} Url especificada como Url de devolución de llamada en el API Market para tu aplicación Yes
data-urlencode      
data-urlencode scope {{scope}} ámbito para el cual se requiere un acceso. Los valores de “scope” están detallados en la documentación particular de cada producto. En este caso es access-request Yes
data-urlencode client_assertion {{JWT_Oauth}} firmado con la clave privada correspondiente a la clave pública cargada en el developer app. Campos: { “iss”:”{{tu_API_KEY}}”, “credentials”:”tu_API_KEY_SECRET” } Yes

Respuesta

Request sample

    {
    "access_token": "{{access_token}}",
    "token_type": "Bearer",
    "expires_in": 3599
    }
                                        

Paso 1: Solicitud de token para acceder a AccessRequest

Request sample

        curl --location --request POST 'https://
        apiprogram.bci.cl/{{ambiente}}/v1/api-oauth/
        token' \
        
        --header 'Content-Type: application/x-www-
        form-urlencoded' \
        
        --data-urlencode 'redirect_uri ={{CallbackUrl}}' \
        
        --data-urlencode 
        'client_assertion={{JWT_Oauth}}' \
        
        --data-urlencode 'grant_type=client_credentials' \
        
        --data-urlencode 'scope=access-requests'
                                    

Respuesta

Request sample

        {
        "access_token": "{{access_token}}",
        "token_type": "Bearer",
        "expires_in": 3599
        }
                                    

Paso 2: Llamada a AccessRequest

Utiliza el access token obtenido en el paso anterior para solicitar iniciar un proceso de Access Request para el producto (Scope) que quieras consumir. Ejemplo: customers.

Donde se deben establecer los parámetros requeridos:

Paso 2: Llamada a AccessRequest

Request sample

    curl --location --request POST 'https://
    apiprogram.bci.cl/{{ambiente}}/v1/
    api-access-requests/requests' \
    --header 'Authorization: Bearer 
    {{access_token}} \
    --header 'Content-Type: application/json' \
    --data-raw '{
    "Data": {
        "TppId": "{{tu_TppId}}",
        "Scope": "{{scope}}"
    }
    }'
                                        
Parameter in Name Value Required
Header Authorization Bearer {{access_token}}, donde {{access_token}} es el token recibido en el paso anterior Yes
Header Content-Type application/json Yes
Body { “Data”:{ “Tppld”:{{Tppld}}” “Scope”:{{Scope}}” } } Tppld: corresponde al identificador de 5 dígitos que le asignaste a tu aplicación en el API Market. Scope: ámbito para el cual se requiere un acceso. Los valores de “scopes” están detallados en la documentación particular de cada producto. Ejemplo: “customers”. Yes

Respuesta

Request sample

            {
    "Request": {
        "RequestId": 
    "5f6a1aa4a485c100076610cf",
        "CreationDateTime": 
    "2020-09-22T12:27:23-03:00",
        "Data": {
            "TransactionFromDateTime": 
    "2020-09-22T12:27:23-03:00",
            "TransactionToDateTime": 
    "2021-03-21T12:27:23-03:00",
            "ExpirationDateTime": 
    "2020-10-22T12:27:23-03:00"
        },
        "Status": "AwaitingAuthorization",
        "TppId": "{{tu_TppId}}",
        "Scope": "customers"
    }
    }
                                        

Paso 2: Llamada a AccessRequest

Request sample

        curl --location --request POST 'https://
        apiprogram.bci.cl/{{ambiente}}/v1/
        api-access-requests/requests' \
        --header 'Authorization: Bearer 
        {{access_token}} \
        --header 'Content-Type: application/json' \
        --data-raw '{
        "Data": {
            "TppId": "{{tu_TppId}}",
            "Scope": "{{scope}}"
        }
        }'
                                    

Respuesta

Request sample

        {
        "Request": {
            "RequestId": 
        "5f6a1aa4a485c100076610cf",
            "CreationDateTime": 
        "2020-09-22T12:27:23-03:00",
            "Data": {
                "TransactionFromDateTime": 
        "2020-09-22T12:27:23-03:00",
                "TransactionToDateTime": 
        "2021-03-21T12:27:23-03:00",
                "ExpirationDateTime": 
        "2020-10-22T12:27:23-03:00"
            },
            "Status": "AwaitingAuthorization",
            "TppId": "{{tu_TppId}}",
            "Scope": "customers"
        }
        }
                                    

Paso 3: Llamada a oAuth Authorize

Paso 3: Llamada a oAuth Authorize

Ejecutar llamada a:

    curl --location --request POST ‘https://
    apiprogram.bci.cl/{{ambiente}}/v1/
    api-oauth/authorize?
    response_type=code&client_id={{tu_App_ID}}
    &redirect_uri=
    {{CallbackUrl}}&state={{uudiv1}}
    &nonce={{uuidv4}}&scope={{Scope}}&request=
    {{JWT_Auth}}’
    --header 'Content-Type: application/json' \
    --header 'x-apikey:  {{tu_App_ID}}'
                                        

Donde {{ ambiente }} : [sandbox | prod]

Parameter in Name Value Required
query-param response_type code Yes
query-param client_id {{tu_API_key}}: Es el API Key o también llamado Consumer Key que te entrega el API Market al registra tu aplicación. Yes
query-param redirect_uri {{CallbackUrl}}: parámetro que especificaste como url de devolución de llamada en el API Market para tu aplicación. Yes
query-param state {{state}}:uuid v.1 generado para esta transacción. Yes
query-param nonce {{nonce}}:uuid v.4 generado para esta transacción. Yes
query-param scope {{scope}}: ámbito para el cual se requiere un acceso. Los valores “scopes” están detallados en la documentación particular de cada producto. Yes
query-param request {{JWT_Auth}}: JWT firmado con la clave privada correspondiente a la clave pública cargada en el developer app. { “iss”: “https://api.openbank.com”, “responde_type”:”code”, “client_id”:{{tu_API_key}}, “redirect_url”:{{callbackurl}}, “scope”:{{scope}}, “state”:{{state}}, “nonce”:{{nonce}}, “claims”:{ “id_token”: { “openbanking_intent_id”: { “value”:”urn:openbanking:intent:” + {{scope}} + ":" + {{requestid}}, “essential”: true }, “acr”: { “essential”: true } } } }
Los valores de los campos de JWT tu_API_key, Callbackurl, scope, state y nonce deben ser los mismo que los enviados en la url de la llamada a la API.
Ver cómo generar un token jwt.
Yes
Header Content-Type application/json Yes
Header x-apikey {{tu_API_Key}} Yes

Respuesta

Request sample

    {{CallbackUrl}}?code={{codigoCliente}}
                                        

La respuesta de esta llamada es un código 302 que re-direccionará tu sitio o app hacia el sitio del Bci ACCESS de Bci. El cliente deberá completar los pasos que se indican y al finalizar el proceso el mismo Bci Access retornará a la url de redirección que indicaste al registrar tu aplicación (CallbackUrl) junto a él código del cliente requerido para la ejecución del último paso. Este codigoCliente dura 30 días y te permitirá consumir el producto asociado al cliente para el cual realizaste el proceso. Te sugerimos almacenarlo para no tener que pasar por el proceso de Oauth nuevamente.

Datos Sandbox:

Para la ejecución de la app Bci Access, ingresa un RUT (válido) y clave (con valor: 111222) en cualquiera de las tres bancas disponibles.

Flujos de excepción:

Se presentan dos flujos de excepción para que puedas visualizar la estructura de error retornada en estas situaciones:

Casos RUT Acción
Todas las bancas: Clave Bloqueada 33333333-3 Retorno de error “clave bloqueada” con el correspondiente redirect de error.
Banca Pyme: Requerimiento de firma de más apoderados 44444444-4 Retorno de error referente a la necesidad de la firma de un segundo apoderado, con el correspondiente redirect de error.

Paso 3: Llamada a oAuth Authorize

Ejecutar llamada a:

        curl --location --request POST ‘https://
        apiprogram.bci.cl/{{ambiente}}/v1/
        api-oauth/authorize?
        response_type=code&client_id={{tu_App_ID}}
        &redirect_uri=
        {{CallbackUrl}}&state={{uudiv1}}
        &nonce={{uuidv4}}&scope={{Scope}}&request=
        {{JWT_Auth}}’
        --header 'Content-Type: application/json' \
        --header 'x-apikey:  {{tu_App_ID}}'
                                    

Respuesta

Request sample

        {{CallbackUrl}}?code={{codigoCliente}}
                                    

Paso 4: Obtención del Authorization Token en oAuth

Para finalizar, debes invocar método token para la generación del Authorization Token que te permitirá acceder a la API deseada.

Paso 4: Obtención del Authorization Token en oAuth

    curl --location --request POST 'https://
    apiprogram.bci.cl/{{ambiente}}/v1/
    api-oauth/token' \
    --header 'Content-Type: application/x-www-
    form-urlencoded' \
    --data-urlencode 
    'grant_type=authorization_code' \
    --data-urlencode 
    'redirect_uri={{CallbackUrl}}' \
    --data-urlencode 'client_id={{tu_API_KEY}}’ \
    --data-urlencode 'code={{codigoCliente}}' \
    --data-urlencode 'scope={{scope}} \
    --data-urlencode 
    'client_assertion_type=urn:ietf:params:oauth:client
    -assertion-type:jwt-bearer' \
    --data-urlencode
    'client_assertion={{JWT_Oauth}}'
                                        

Donde se deben establecer los parámetros requeridos:

Parameter in Name Value Required
Header Content-Type application/x-www-form-urlencoded Yes
data-urlencode grant_type authorization_code Yes
data-urlencode redirect_uri {{CallbackUrl}}: Url que especificaste como url de devolución de llamada en el API Market para tu aplicación Yes
data-urlencode client_id {{tu_API_Key}}: Es el API Key o también llamado Consumer Key que te entrega el API Market al registrar tu aplicación. Yes
data-urlencode code {{codigoCliente}} Codigo obtenido en la respuesta del Paso 3. Yes
data-urlencode scope {{scope}}: Ámbito para el cual se requiere un acceso. Los valores de "scopes" están detalladosen la documentación particular de cada producto. Ejemplo: "customers" Yes
data-urlencode client_assertion_type urn:ietf:params:oauth:client-assertion-type:jwt-bearer Yes
data-urlencode client_assertion {{JWT_Oauth}} JWT firmado con la clave privada correspondiente a la clave pública cargada en el developer app.
Campos:
{ "iss": "{{tu_API_KEY}}", "credentials": "tu_API_KEY_secret" }
Ver cómo generar un token jwt.
Yes

Respuesta

Request sample

            {
    "access_token": 
    "PPTHdpasasfaguyrrWDH0RC56RBv",
    "token_type": "Bearer",
    "refresh_token": 
    "GzXLmCagsmaiiaytinj0LzNp0IGy",
    "expires_in": 3599
    }
                                        

Paso 4: Obtención del Authorization Token en oAuth

        curl --location --request POST 'https://
        apiprogram.bci.cl/{{ambiente}}/v1/
        api-oauth/token' \
        --header 'Content-Type: application/x-www-
        form-urlencoded' \
        --data-urlencode 
        'grant_type=authorization_code' \
        --data-urlencode 
        'redirect_uri={{CallbackUrl}}' \
        --data-urlencode 'client_id={{tu_API_KEY}}’ \
        --data-urlencode 'code={{codigoCliente}}' \
        --data-urlencode 'scope={{scope}} \
        --data-urlencode 
        'client_assertion_type=urn:ietf:params:oauth:client
        -assertion-type:jwt-bearer' \
        --data-urlencode
        'client_assertion={{JWT_Oauth}}'
                                    

Respuesta

Request sample

        {
        "access_token": 
        "PPTHdpasasfaguyrrWDH0RC56RBv",
        "token_type": "Bearer",
        "refresh_token": 
        "GzXLmCagsmaiiaytinj0LzNp0IGy",
        "expires_in": 3599
        }
                                    

Paso Opcional: Obtención del Refresh Access Token a oAuth Authorize

En caso de caducidad del Access Token obtenido, es posible generar un nuevo token a partir del refresh token (recibido previamente)

Paso Opcional: Obtención del Refresh Access Token a oAuth Authorize

POST /{{api_env}}/v1/api-oauth/token
Donde {{api_env}}: [sandbox | prod]

    curl --location --request POST '{{host-
    endpoint}}/{api_env}/v1/api-oauth/token' \
    --header 'Content-Type: application/x-www-
    form-urlencoded' \
    --data-urlencode 'grant_type=
    refresh_token' \
    --data-urlencode 
    'client_id={{LOrx7gHAMo4irOqWTSzrB5zNMRxgePJ}}' \
    --data-urlencode 
    'client_secret={{cdysiRU6}}' \
    --data-urlencode ' refresh_token={{ 
    refresh_token }}'
                                        

Donde se deben establecer los parámetros requeridos:

Parameter in Name Value Required
Header Content-Type application/x-www-form-urlencoded Yes
data-urlencode grant_type refresh_token Yes
data-urlencode client_id {{client_id}}: valor del apikey Yes
data-urlencode client_secret {{code}}: valor del api secret Yes
data-urlencode refresh_token {{refresh_token}}: valor del refresh obtenido en el paso 4 Yes

Respuesta

Request sample

    {
    "access_token": "string",
    "token_type": "string",
    "refresh_token": "string",
    "expires_in": 0,
    "id_token": "string"
    }
                                        

Paso Opcional: Obtención del Refresh Access Token a oAuth Authorize

POST /{{api_env}}/v1/api-oauth/token
Donde {{api_env}}: [sandbox | prod]

        curl --location --request POST '{{host-
        endpoint}}/{api_env}/v1/api-oauth/token' \
        --header 'Content-Type: application/x-www-
        form-urlencoded' \
        --data-urlencode 'grant_type=
        refresh_token' \
        --data-urlencode 
        'client_id={{LOrx7gHAMo4irOqWTSzrB5zNMRxgePJ}}' \
        --data-urlencode 
        'client_secret={{cdysiRU6}}' \
        --data-urlencode ' refresh_token={{ 
        refresh_token }}'
                                    

Respuesta

Request sample

        {
        "access_token": "string",
        "token_type": "string",
        "refresh_token": "string",
        "expires_in": 0,
        "id_token": "string"
        }
                                    
Errores

Todas nuestras APIs responderán con los siguientes códigos de retorno:

HTTP Code Leyenda
header Content-Type
200 Success
400 Bad Request
401 Missing/Invalid Access Token
403 Invalid Scope
404 Not Found
406 Invalid Accept Header
429 Quota Limit Exceeded
500 Internal Server Error

Formato de Respuesta de Error:

    {
    "Error": {
        "Status": "string",
        "Code": "string",
        "Title": "string",
        "DeveloperMessage": "string",
        "Sources": {
            "Parameter": "string"
        }
    }
    }
                                        

Formato de Respuesta de Error:

        {
        "Error": {
        "Status": "string",
        "Code": "string",
        "Title": "string",
        "DeveloperMessage": "string",
        "Sources": {
            "Parameter": "string"
        }
        }
        }
                                    

Como generar Token JWT para llamada a oauth/token

El JWT Token requerido para invocar a la api-oauth y obtener un token, debe contener la siguiente información:

Header Payload

{   "alg": "RS256",   "expiresIn": "1h" }

{
  "iss": {{tu_API_KEY}},
  "credentials": {{tu_API_KEY_secret}}
}

Este token de solicitud de Access Request debe ser firmado por tu clave privada RSA.

Como generar Token JWT para llamada a oauth/authorize

El JWT Token requerido para invocar a la api-oauth authorize y obtener el código del cliente, debe contener la siguiente información:

Value Required

{
  "alg": "RS256",
  "expiresIn": "1h"
}

{
"iss": "https://api.openbank.com",
"response_type": "code",
"client_id": {{tu_API_KEY}},
"redirect_uri": {{CallbackUrl}},
"scope": {{scope}},
"state": {{state}},
"nonce": {{nonce}},
"claims": {
  "id_token": {
    "openbanking_intent_id": {
       "value": "urn:openbank:intent:" + {{scope}} + ":" + {{requestId}},
       "essential": true
    },
    "acr": {
       "essential": true
    }
  }
}
}

Donde su payload debe contener las credenciales API Key y Secret API Key, entregadas al momento de registrar una app en nuestro portal.

Este token de solicitud de Access Request debe ser firmado por tu llave privada RSA.

Cómo generar un par de llave pública y llave privada

El JTW mencionado en el paso anterior requiere de una llave privada. Esta se puede general como se indica a continuación.

Llave privada

Ejecuta en una consola el siguiente comando para generar tu llave privada openssl genrsa -out private.pem 2048

Esto dejará un archivo llamado private.pem en la ruta en la que hayas ejecutado el comando. El archivo contendrá el string que corresponde a tu llave/clave privada. Utilizaras este string para generar los JTW con los que consumirás las APIs.

Llave pública

Ejecuta en la consola dentro de la misma ruta anterior el comando: openssl rsa -in private.pem -outform PEM -pubout -out public.pem

Esto dejará un archivo llamado public.pem en la ruta en la que hayas ejecutado el comando. El archivo contendrá el string que corresponde a tu llave pública. La utilizaras para registrar tu aplicación aquí en el API Market.

Glosario de Términos

ENTORNO SANDBOX:

También llamado entorno de pruebas, es un ambiente con las mismas características que el productivo donde se pueden ejecutar las API con datos de prueba ficticios.

BCI Access

Aplicación que garantiza la autenticación de clientes Bci para el otorgamiento de consentimientos a terceros sobre el uso de información personal; así como también, la comprobación de identidad con un segundo factor de seguridad.