Aller au contenu

SDK Python et exemples REST — TemplateFox

Deux façons d’utiliser l’API TemplateFox depuis Python :

  • SDK (templatefox) — client typé, généré automatiquement depuis notre spécification OpenAPI.
  • REST — requests ou httpx. Pratique pour limiter les dépendances.

Les exemples de cette page montrent les deux côte à côte.

Version PyPI Dépôt GitHub

Fenêtre de terminal
pip install templatefox
# or
poetry add templatefox
# or
uv add templatefox

Pour la variante REST, pip install requests suffit.

Définissez votre clé API une fois, puis réutilisez le client.

import os
from templatefox import ApiClient, Configuration
from templatefox.api import PDFApi

config = Configuration()
config.api_key["ApiKeyAuth"] = os.environ["TEMPLATEFOX_API_KEY"]

client = ApiClient(config)
api = PDFApi(client)

Seuls template_id et data sont obligatoires ; tous les autres champs sont facultatifs.

from templatefox.models import CreatePdfRequest

response = api.create_pdf(
  CreatePdfRequest(
      template_id="YOUR_TEMPLATE_ID",
      data={
          "customer_name": "John Doe",
          "invoice_number": "INV-001",
          "amount": "$1,234.56",
      },
  )
)

print(response.url)                # signed URL valid 24h
print(response.credits_remaining)  # credits left on the team

Tous les paramètres sont détaillés dans Créer un PDF.

import urllib.request
from templatefox.models import CreatePdfRequest

response = api.create_pdf(
  CreatePdfRequest(
      template_id="YOUR_TEMPLATE_ID",
      data={"customer_name": "Jane Doe"},
  )
)

urllib.request.urlretrieve(response.url, "invoice.pdf")

Avec le SDK, vous téléchargez le fichier depuis l’URL signée. En REST, export_type="binary" renvoie directement les octets du PDF.

Configurez l’intégration S3 une fois dans le tableau de bord, puis passez store_s3=True dans n’importe quel appel.

from templatefox.models import CreatePdfRequest

response = api.create_pdf(
  CreatePdfRequest(
      template_id="YOUR_TEMPLATE_ID",
      data={"invoice_number": "INV-001"},
      filename="invoice-001",           # no extension, .pdf appended
      store_s3=True,                     # upload to your configured bucket
      s3_filepath="invoices/2026/04/",  # key prefix (optional)
      # s3_bucket="custom-bucket",      # override bucket from integration
  )
)

print(response.s3_bucket, response.s3_key)

Pour l’archivage ou les usages juridiques, demandez une variante PDF/A.

from templatefox.models import CreatePdfRequest

response = api.create_pdf(
  CreatePdfRequest(
      template_id="YOUR_TEMPLATE_ID",
      data={"customer_name": "John Doe"},
      pdf_variant="pdf/a-2b",   # "pdf/a-1b" | "pdf/a-2b" | "pdf/a-3b"
  )
)

Pour les gros documents ou les traitements par lots, passez par l’endpoint asynchrone : un webhook vous prévient quand le PDF est prêt. Le déroulé complet est décrit dans Créer un PDF (asynchrone).

response = requests.post(
  f"{BASE_URL}/v1/pdf/create-async",
  headers=HEADERS,
  json={
      "template_id": "YOUR_TEMPLATE_ID",
      "data": {"invoice_number": "INV-001"},
      "webhook_url": "https://example.com/webhooks/pdf",
      "webhook_secret": "whk_a1b2c3d4e5f6g7h8i9j0k1l2",  # HMAC-SHA256 signing
  },
).json()

job_id = response["job_id"]
# Poll GET /v1/pdf/jobs/{job_id} or wait for the webhook.

Le SDK couvre aussi ces endpoints, dans la classe PDFAsyncApi (create_pdf_async, get_pdf_job, list_pdf_jobs) ; l’exemple ci-dessus appelle l’API REST avec requests.

from templatefox.exceptions import ApiException
from templatefox.models import CreatePdfRequest

try:
  response = api.create_pdf(
      CreatePdfRequest(template_id="INVALID_ID", data={})
  )
except ApiException as e:
  print(e.status, e.body)

La liste complète est dans Codes d’erreur.

ClasseMéthodeEndpoint
PDFApicreate_pdfPOST /v1/pdf/create
PDFAsyncApicreate_pdf_asyncPOST /v1/pdf/create-async
PDFAsyncApiget_pdf_jobGET /v1/pdf/jobs/{id}
PDFAsyncApilist_pdf_jobsGET /v1/pdf/jobs
ImageApicreate_imagePOST /v1/image/create
TemplatesApilist_templatesGET /v1/templates
TemplatesApiget_template_fieldsGET /v1/templates/{id}/fields
AccountApiget_accountGET /v1/account
AccountApilist_transactionsGET /v1/account/transactions
IntegrationsApisave_s3_configPOST /v1/integrations/s3
IntegrationsApiget_s3_configGET /v1/integrations/s3
IntegrationsApidelete_s3_configDELETE /v1/integrations/s3
IntegrationsApitest_s3_connectionPOST /v1/integrations/s3/test

Tous les endpoints REST sont documentés dans la référence API.