Aller au contenu

SDK C# et exemples REST — TemplateFox

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

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

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

Version NuGet Dépôt GitHub

Fenêtre de terminal
dotnet add package TemplateFox.SDK
# or Package Manager:
Install-Package TemplateFox.SDK

La variante REST utilise System.Net.Http, inclus dans .NET.

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

using TemplateFox.SDK.Api;
using TemplateFox.SDK.Client;

var config = new Configuration
{
  ApiKey = new Dictionary<string, string>
  {
      { "x-api-key", Environment.GetEnvironmentVariable("TEMPLATEFOX_API_KEY")! }
  }
};

var api = new PDFApi(config);

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

using TemplateFox.SDK.Model;

var request = new CreatePdfRequest(
  templateId: "YOUR_TEMPLATE_ID",
  data: new Dictionary<string, object>
  {
      { "customer_name",  "John Doe" },
      { "invoice_number", "INV-001" },
      { "amount",         "$1,234.56" }
  }
);

var response = await api.CreatePdfAsync(request);

Console.WriteLine(response.Url);               // signed URL valid 24h
Console.WriteLine(response.CreditsRemaining);  // credits left on the team

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

using var httpClient = new HttpClient();

var response = await api.CreatePdfAsync(request);

var pdfBytes = await httpClient.GetByteArrayAsync(response.Url);
await File.WriteAllBytesAsync("invoice.pdf", pdfBytes);

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

using TemplateFox.SDK.Model;

var request = new CreatePdfRequest(
  templateId: "YOUR_TEMPLATE_ID",
  data: new Dictionary<string, object> { { "invoice_number", "INV-001" } },
  filename:   "invoice-001",            // no extension, .pdf appended
  storeS3:    true,                      // upload to your configured bucket
  s3Filepath: "invoices/2026/04/"       // key prefix (optional)
  // s3Bucket: "custom-bucket"          // override bucket from integration
);

var response = await api.CreatePdfAsync(request);
Console.WriteLine($"{response.S3Bucket}/{response.S3Key}");

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

using TemplateFox.SDK.Model;

var request = new CreatePdfRequest(
  templateId: "YOUR_TEMPLATE_ID",
  data:       new Dictionary<string, object> { { "customer_name", "John Doe" } },
  pdfVariant: "pdf/a-2b"   // "pdf/a-1b" | "pdf/a-2b" | "pdf/a-3b"
);

var response = await api.CreatePdfAsync(request);

Pour les gros documents ou les traitements par lots, passez par l’endpoint asynchrone. Le SDK .NET expose CreatePdfAsyncAsync, GetPdfJobAsync et ListPdfJobsAsync dans la classe PDFAsyncApi ; le déroulé complet est décrit dans Créer un PDF (asynchrone).

using TemplateFox.SDK.Api;
using TemplateFox.SDK.Model;

var asyncApi = new PDFAsyncApi(config);

var request = new CreateAsyncPdfRequest(
  templateId:    "YOUR_TEMPLATE_ID",
  data:          new Dictionary<string, object> { { "invoice_number", "INV-001" } },
  webhookUrl:    "https://example.com/webhooks/pdf",
  webhookSecret: "whk_a1b2c3d4e5f6g7h8i9j0k1l2"   // HMAC-SHA256 signing
);

var response = await asyncApi.CreatePdfAsyncAsync(request);
Console.WriteLine(response.JobId);
// Poll await asyncApi.GetPdfJobAsync(jobId) or wait for the webhook.
using TemplateFox.SDK.Client;

try
{
  var response = await api.CreatePdfAsync(request);
}
catch (ApiException e)
{
  Console.WriteLine($"status={e.ErrorCode} body={e.ErrorContent}");
}

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

ClasseMéthodeEndpoint
PDFApiCreatePdfAsyncPOST /v1/pdf/create
PDFAsyncApiCreatePdfAsyncAsyncPOST /v1/pdf/create-async
PDFAsyncApiGetPdfJobAsyncGET /v1/pdf/jobs/{id}
PDFAsyncApiListPdfJobsAsyncGET /v1/pdf/jobs
TemplatesApiListTemplatesAsyncGET /v1/templates
TemplatesApiGetTemplateFieldsAsyncGET /v1/templates/{id}/fields
AccountApiGetAccountAsyncGET /v1/account
AccountApiListTransactionsAsyncGET /v1/account/transactions
IntegrationsApiSaveS3ConfigAsyncPOST /v1/integrations/s3
IntegrationsApiGetS3ConfigAsyncGET /v1/integrations/s3
IntegrationsApiDeleteS3ConfigAsyncDELETE /v1/integrations/s3
IntegrationsApiTestS3ConnectionAsyncPOST /v1/integrations/s3/test

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