Bluesky BlueSky B2B · API Reference
Portal →

API B2B

Descarga comprobantes electrónicos (XML) de tus clientes en formato ZIP directamente desde nuestros servidores.

Base URL https://ia.blueskyecuador.com/b2b/api
Formato JSON (errores) · ZIP (descarga exitosa)

Autenticación

Cada request debe incluir dos headers de autenticación. Obtendrás estas credenciales al crear tu cuenta B2B desde el portal.

Header Descripción
X-Client-Id Tu identificador único de cliente (ULID). Visible en el panel B2B bajo el menú de usuario.
X-Api-Key Tu clave de API en texto plano. Se muestra una sola vez al crear la cuenta o al regenerarla.
bash
X-Client-Id: 01JVQH8K3N2XYZABCDEF012345
X-Api-Key:   b3BlbnNlc3NhbWU...

Rate Limiting

El límite se aplica por X-Client-Id, no por IP.

60 requests / hora

Al exceder el límite recibirás un 429 Too Many Requests con el tiempo de espera en el header Retry-After.

Errores

Todos los errores devuelven JSON con el campo error.

Código Significado
401 Headers faltantes o credenciales inválidas.
403 Cuenta suspendida, o el RUC solicitado no pertenece a tu cuenta.
404 RUC no encontrado, o sin archivos para el período solicitado.
422 Parámetros inválidos o faltantes.
429 Rate limit excedido. Espera el tiempo indicado en Retry-After.
500 Error interno al generar el ZIP.
GET /downloadRecibidos

Descarga los XMLs de recibidos de un cliente como un archivo ZIP para el mes indicado.

Query Parameters

Parámetro Tipo Requerido Descripción
ruc string RUC del contribuyente (13 dígitos, termina en 001).
type string Tipo de comprobante: factura credito retencion
year integer Año del período. Ej: 2026
month integer Mes del período (1–12). Ej: 5

Respuesta exitosa

200
El archivo ZIP del período, descargado directamente desde nuestros servidores. El nombre del archivo tiene el formato b2b_{type}_{ruc}_{year}{month:02d}.zip

Ejemplos

cURL

bash
curl -X GET \
  "https://ia.blueskyecuador.com/b2b/api/downloadRecibidos?ruc=1234567890001&type=factura&year=2026&month=5" \
  -H "X-Client-Id: TU_CLIENT_ID" \
  -H "X-Api-Key: TU_API_KEY" \
  -O -J

Python

python
import requests

headers = {
    "X-Client-Id": "TU_CLIENT_ID",
    "X-Api-Key":   "TU_API_KEY",
}

params = {
    "ruc":   "1234567890001",
    "type":  "factura",
    "year":  2026,
    "month": 5,
}

resp = requests.get("https://ia.blueskyecuador.com/b2b/api/downloadRecibidos", headers=headers, params=params)

if resp.status_code == 200:
    filename = f"b2b_{params['type']}_{params['ruc']}_{params['year']}{params['month']:02d}.zip"
    with open(filename, "wb") as f:
        f.write(resp.content)
else:
    print(resp.json())  # {"error": "..."}

PHP

php
$ruc   = '1234567890001';
$type  = 'factura';
$year  = 2026;
$month = 5;

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL            => "https://ia.blueskyecuador.com/b2b/api/downloadRecibidos?" . http_build_query([
        'ruc'   => $ruc,
        'type'  => $type,
        'year'  => $year,
        'month' => $month,
    ]),
    CURLOPT_HTTPHEADER     => [
        'X-Client-Id: TU_CLIENT_ID',
        'X-Api-Key: TU_API_KEY',
    ],
    CURLOPT_RETURNTRANSFER => true,
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if ($httpCode === 200) {
    $filename = "b2b_{$type}_{$ruc}_{$year}" . str_pad($month, 2, '0', STR_PAD_LEFT) . '.zip';
    file_put_contents($filename, $response);
} else {
    $error = json_decode($response, true);
    echo $error['error'];
}

Respuesta de error (JSON)

json
{
  "error": "No autorizado para este usuario."
}