Ir al contenido

Inicio rápido

Flashpi es una API REST para los comprobantes electrónicos de Ecuador. Envías JSON simple con nombres de campo en inglés; Flashpi numera el comprobante, arma el XML del SRI y lo valida contra el esquema oficial, lo firma, lo envía al SRI, sigue su autorización, genera el RIDE (el PDF imprimible) y se lo envía por correo a tu cliente. Ese envío por correo se está habilitando: mientras tanto, entregas tú el RIDE y el XML (consulta RIDE y correo).

En esta guía creas una API key de prueba, emites una factura con el emisor demo compartido en el ambiente de pruebas del SRI, esperas la respuesta del SRI en la misma solicitud y descargas el RIDE. Todavía no necesitas un certificado de firma propio.

  • Una cuenta de Flashpi. Regístrate en la consola con Google o con tu correo y una contraseña. Verifica el correo con el enlace que te enviamos cuando haga falta (Gmail y Google Workspace ya quedan verificados): el sandbox se activa cuando el propietario de la cuenta verifica su correo. Cuando inicias sesión por primera vez, la consola te pide, como propietario de la cuenta, activar la verificación en dos pasos con una app de autenticación antes de cualquier otra cosa.
  • curl (o cualquier cliente HTTP) en un servidor o en tu computadora. La API está en https://api.flashpi.com.ec.
  1. Crea una API key de prueba. En la consola, elige Pruebas en el selector de ambiente (en el menú de la izquierda, debajo de tu cuenta; en el teléfono, arriba a la derecha). Abre API keys y crea una llave con alcance Toda la cuenta (account) y acceso de lectura y escritura: el diálogo dice Crear API key de pruebas. Cópiala enseguida: Flashpi solo guarda un hash y la muestra una sola vez. Guárdala en una variable de entorno:

    Ventana de terminal
    export FLASHPI_API_KEY="fp_test_..."

    Las llaves de prueba (fp_test_) emiten en el ambiente de pruebas del SRI, donde los comprobantes no tienen efecto tributario. Consulta Autenticación y API keys.

  2. Copia el ID del emisor demo. El Resumen de la consola muestra el emisor demo (Signia Digital S.A., la empresa que opera Flashpi), su ID, su establecimiento y punto de emisión (001 y 001) y la cuota de prueba del día (50 comprobantes por cuenta y por día). También aparece en Emisores, marcado como emisor demo. GET /v1/issuers solo lista tus propios emisores, así que toma el ID de la consola. Consulta Sandbox y emisor demo.

  3. Envía la factura en modo síncrono. Reemplaza <demo issuer id> por el ID y <your email> por tu propio correo, para que te llegue a ti el correo que recibiría un cliente real cuando el envío por correo esté habilitado. Con options.waitForAuthorization, la solicitud espera la respuesta del SRI (hasta 15 segundos por defecto).

    Ventana de terminal
    curl https://api.flashpi.com.ec/v1/invoices \
    -H "Authorization: Bearer $FLASHPI_API_KEY" \
    -H "Idempotency-Key: $(uuidgen)" \
    -H "Content-Type: application/json" \
    -d '{
    "issuerId": "<demo issuer id>",
    "establishment": "001",
    "emissionPoint": "001",
    "customer": {
    "idType": "ruc",
    "id": "1790000000001",
    "name": "Supermercados La Pradera S.A.",
    "email": "<your email>"
    },
    "items": [
    {
    "code": "SRV-001",
    "description": "Monthly accounting services",
    "quantity": "1",
    "unitPrice": "450.00",
    "taxes": [{ "type": "vat", "rate": "15" }]
    }
    ],
    "payments": [{ "method": "other_financial_system", "amount": "517.50" }],
    "options": { "waitForAuthorization": true }
    }'

    Los montos y las cantidades son cadenas decimales. Tú envías el precio y la tarifa del IVA; Flashpi calcula el subtotal, el IVA (67.50) y el total (517.50). Los pagos deben sumar ese total. La Idempotency-Key hace que la solicitud se pueda reintentar sin riesgo (consulta Idempotencia).

  4. Lee la respuesta. Cuando el SRI responde dentro de la espera, la respuesta es 200 OK con el comprobante en su estado final, aquí authorized:

    {
    "id": "01a14116-1c50-73e7-8aab-349c93e541da",
    "type": "invoice",
    "environment": "test",
    "status": "authorized",
    "issuerId": "01a0f7fa-bd80-7d58-8d62-73a4adc597cb",
    "establishment": "001",
    "emissionPoint": "001",
    "sequential": 4821,
    "number": "001-001-000004821",
    "accessKey": "1510202601099341137200110010010000048217014625315",
    "issueDate": "2026-10-15",
    "xmlVersion": "2.1.0",
    "counterparty": { "id": "1790000000001", "name": "Supermercados La Pradera S.A." },
    "totals": {
    "subtotal": "450.00",
    "discount": "0.00",
    "taxes": [{ "type": "vat", "rate": "15", "taxableBase": "450.00", "amount": "67.50" }],
    "tip": "0.00",
    "total": "517.50"
    },
    "authorization": {
    "number": "1510202601099341137200110010010000048217014625315",
    "authorizedAt": "2026-10-15T19:42:13.000Z"
    },
    "ride": { "status": "pending", "template": null, "generatedAt": null },
    "email": { "requested": true, "status": "queued", "deliveries": [], "warnings": [] },
    "sriMessages": [
    {
    "code": "test_environment",
    "message": "The document was processed in the SRI test environment and has no tax validity.",
    "severity": "warning"
    }
    ],
    "failure": null,
    "voidedAt": null,
    "createdAt": "2026-10-15T19:42:10.512Z",
    "updatedAt": "2026-10-15T19:42:13.204Z"
    }

    En el ambiente de pruebas, el SRI agrega la advertencia test_environment a todo comprobante que autoriza; no cambia la autorización. El encabezado Location apunta al comprobante (/v1/documents/{id}), y x-request-id identifica la solicitud si alguna vez escribes a soporte.

    Si el SRI tarda más que la espera, la respuesta es 202 Accepted con el comprobante en pending_sri. No se pierde nada: Flashpi sigue trabajando y el comprobante termina por su cuenta. Vuelve a leerlo con GET /v1/documents/{id}, o recibe los webhooks invoice.authorized e invoice.rejected. Un comprobante rejected trae los motivos del SRI en sriMessages.

  5. Descarga el RIDE. Flashpi genera el RIDE justo después de la autorización, así que normalmente tarda unos segundos más que la autorización:

    Ventana de terminal
    curl https://api.flashpi.com.ec/v1/documents/01a14116-1c50-73e7-8aab-349c93e541da/pdf \
    -H "Authorization: Bearer $FLASHPI_API_KEY" \
    -o factura-001-001-000004821.pdf

    Mientras ride.status siga en pending, esto responde 409 con el código ride_not_available: espera un momento y vuelve a intentarlo, o espera el webhook document.ride.generated. GET /v1/documents/{id}/xml devuelve el XML autorizado.

  • Flashpi validó la solicitud, asignó el siguiente secuencial de la numeración del emisor demo (la comparten todas las cuentas del sandbox, así que no esperes números consecutivos), generó la clave de acceso de 49 dígitos, armó el XML (factura 2.1.0) y lo validó contra el esquema del SRI.
  • Firmó el XML con el certificado de prueba del emisor demo, lo envió al ambiente de pruebas del SRI y consultó su autorización. La solicitud esperó esa respuesta por el modo síncrono.
  • Tras la autorización, generó el RIDE con la plantilla de tu cuenta y dejó en cola el correo con el RIDE y el XML para customer.email.
  • Sigue los comprobantes con webhooks en lugar de esperar en la solicitud: Webhooks y Modo síncrono y asíncrono.
  • Emite otros comprobantes: notas de crédito, comprobantes de retención, guías de remisión y más, todo en Emitir comprobantes.
  • Usa tu propio RUC: crea tu emisor desde su certificado de firma (.p12): Flashpi lee el RUC y el titular, tú revisas y completas su perfil tributario, y el mismo certificado sirve para pruebas y producción. Tus propios emisores también funcionan con llaves de prueba, sin la cuota diaria del emisor demo.
  • Pasa a producción: las llaves de producción (fp_live_) emiten comprobantes con efecto tributario en el ambiente de producción del SRI. Un propietario de la cuenta las crea en la consola, con verificación en dos pasos, cuando la cuenta ya tiene un emisor propio con un certificado aceptado. Un certificado subido con el alta desde el certificado ya firma en producción; uno subido a un emisor con una llave solo firma los comprobantes del ambiente de esa llave (Certificados). Las solicitudes son las mismas: solo cambian la llave y el issuerId.