SDK oficial de Python para la API de Folyo (facturacion electronica chilena, DTE + SII).
Project description
Folyo — SDK oficial de Python
SDK de Python para la API de Folyo: facturacion electronica chilena (DTE + SII) standalone. Del codigo al SII, sin escalas.
- Cliente tipado sobre
httpx(unica dependencia de runtime). - Errores tipados con mapeo de los codigos del servidor.
- Soporte del patron de emision asincrona (encolar + polling con backoff).
- Idempotencia, override de ambiente del SII y reintentos seguros ante 429/503.
- Redaccion de secretos (la API key/JWT nunca aparecen en
reprni en errores).
Instalacion
pip install folyo
Requiere Python 3.9 o superior.
Autenticacion
El cliente exige exactamente uno de los dos esquemas:
- API key (recomendada para integraciones server-side, no expira). Se envia
como header
X-API-Key. Fija el tenant y la empresa. - JWT Bearer (sesion de usuario). Se envia como
Authorization: Bearer ....
from folyo import Folyo
# Con API key
folyo = Folyo(api_key="<tu-api-key>")
# O con un token JWT
folyo = Folyo(token="eyJhbGciOi...")
Tambien funciona como context manager (cierra el cliente HTTP al salir):
with Folyo(api_key="<tu-api-key>") as folyo:
...
Quickstart: emitir una Factura Electronica (DTE 33)
La emision es asincrona: emitir() encola y devuelve un job_id; el helper
emitir_y_esperar() hace el polling por ti hasta que el job termina.
import uuid
from folyo import Folyo, DTERequest, Receptor, DetalleLinea
with Folyo(api_key="<tu-api-key>") as folyo:
req = DTERequest(
tipo_dte=33, # Factura Electronica
receptor=Receptor(
rut="12.345.678-9",
razon_social="Cliente SpA",
giro="Comercio",
),
detalle=[
DetalleLinea(nombre="Servicio de consultoria", monto=100000),
],
)
# Encolar y esperar el resultado (con Idempotency-Key para reintentar seguro)
job = folyo.dte.emitir_y_esperar(req, idempotency_key=str(uuid.uuid4()))
if job.estado == "completed" and job.result is not None:
print("Folio:", job.result.folio)
print("Track ID:", job.result.track_id)
print("Total:", job.result.monto_total)
# Descargar el PDF
pdf = folyo.dte.descargar_pdf(33, job.result.folio)
with open(f"factura-{job.result.folio}.pdf", "wb") as f:
f.write(pdf)
else:
print("La emision fallo:", job.estado)
Si prefieres resolver el resultado por webhook o SSE, usa emitir() directo:
encolada = folyo.dte.emitir(req)
print(encolada.job_id) # resuelve luego via webhook dte.emitido o polling
Manejo de errores
from folyo import (
Folyo,
FolyoAuthError,
FolyoQuotaError,
FolyoRateLimitError,
FolyoValidationError,
FolyoSiiUnavailableError,
)
try:
folyo.dte.emitir(req)
except FolyoRateLimitError as e:
print("Reintentar en", e.retry_after, "segundos")
except FolyoQuotaError as e:
print("Limite de plan o pago requerido:", e.code)
except FolyoAuthError:
print("Credenciales invalidas o sin permisos")
except FolyoValidationError as e:
print("Datos invalidos:", e.message)
except FolyoSiiUnavailableError:
print("El SII no esta disponible, reintenta mas tarde")
El SDK reintenta automaticamente (con backoff exponencial y respetando
Retry-After) ante 429 y 503 en operaciones seguras: peticiones GET y
emisiones con Idempotency-Key.
Recursos disponibles
| Recurso | Metodos principales |
|---|---|
folyo.dte |
emitir, get_emision, emitir_y_esperar, listar_documentos, descargar_xml, descargar_pdf, regenerar_pdf, consultar_estado, consultar_envio, emitidos, recibidos, contribuyente, situacion_tributaria, enviar_rcof, resumen_rcof |
folyo.folios |
info, solicitar |
folyo.rcv |
periodos, periodo, sync, resumen_iva |
folyo.clientes |
listar, upsert, importar, buscar, actualizar, eliminar |
folyo.empresa |
listar, seleccionar |
folyo.acuse |
registrar, pendientes, estado |
folyo.webhooks |
listar, crear, actualizar, eliminar |
folyo.api_keys |
listar, crear, eliminar |
Algunos endpoints (clientes, RCV, listado de documentos) requieren "panel
operativo" y responden 403 en planes solo-API.
Seguridad
- La API key y el JWT nunca se incluyen en
repr(cliente)ni en los errores. - Los errores exponen solo el mensaje sanitizado del servidor, el codigo
estable, el status HTTP y el
request_id: nunca el cuerpo de la respuesta (que puede traer datos sensibles como el XML firmado o secrets de webhook). - El SDK no escribe logs por defecto.
Licencia
MIT. Ver LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file folyo-0.1.0.tar.gz.
File metadata
- Download URL: folyo-0.1.0.tar.gz
- Upload date:
- Size: 16.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47b79305a5cfba298880597722baf61d3fa238cb427757ce558fe1e1d9e8096b
|
|
| MD5 |
a36e8e8f16e91289d7102ec7c5a3b276
|
|
| BLAKE2b-256 |
abb460f9af43db9cbec9a901a3e925df31513e2462e3ffef2003e4c23d3cd72e
|
Provenance
The following attestation bundles were made for folyo-0.1.0.tar.gz:
Publisher:
sdk-release.yml on SYCTecnologiaCo/Folyo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
folyo-0.1.0.tar.gz -
Subject digest:
47b79305a5cfba298880597722baf61d3fa238cb427757ce558fe1e1d9e8096b - Sigstore transparency entry: 2274400021
- Sigstore integration time:
-
Permalink:
SYCTecnologiaCo/Folyo@f95177c39b5e3db0dbc69facf13fcd59ddbc074b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/SYCTecnologiaCo
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
sdk-release.yml@f95177c39b5e3db0dbc69facf13fcd59ddbc074b -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file folyo-0.1.0-py3-none-any.whl.
File metadata
- Download URL: folyo-0.1.0-py3-none-any.whl
- Upload date:
- Size: 18.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ae6b73a806a8dd6e01da6fdb8bc62c72394e77d7754ea9d8dbf8994532d7d469
|
|
| MD5 |
3c88def5a823b019d5b996717fe8c331
|
|
| BLAKE2b-256 |
feaa5e44ee58e2cbc44d88bf44ded1416cfe802208447fbc539403b65d013fe8
|
Provenance
The following attestation bundles were made for folyo-0.1.0-py3-none-any.whl:
Publisher:
sdk-release.yml on SYCTecnologiaCo/Folyo
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
folyo-0.1.0-py3-none-any.whl -
Subject digest:
ae6b73a806a8dd6e01da6fdb8bc62c72394e77d7754ea9d8dbf8994532d7d469 - Sigstore transparency entry: 2274400148
- Sigstore integration time:
-
Permalink:
SYCTecnologiaCo/Folyo@f95177c39b5e3db0dbc69facf13fcd59ddbc074b -
Branch / Tag:
refs/heads/main - Owner: https://github.com/SYCTecnologiaCo
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
sdk-release.yml@f95177c39b5e3db0dbc69facf13fcd59ddbc074b -
Trigger Event:
workflow_dispatch
-
Statement type: