Aller au contenu

SDK Go et exemples REST — TemplateFox

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

  • SDK (github.com/TemplateFoxPDF/gosdk) — client typé, généré automatiquement depuis notre spécification OpenAPI.
  • REST — le paquet net/http de la bibliothèque standard. Pratique pour limiter les dépendances.

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

Référence Go Dépôt GitHub

Fenêtre de terminal
go get github.com/TemplateFoxPDF/gosdk

La variante REST n’a besoin que de la bibliothèque standard (net/http, encoding/json).

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

import (
  "context"
  "os"

  templatefox "github.com/TemplateFoxPDF/gosdk"
)

config := templatefox.NewConfiguration()
config.AddDefaultHeader("x-api-key", os.Getenv("TEMPLATEFOX_API_KEY"))

client := templatefox.NewAPIClient(config)
ctx := context.Background()

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

request := templatefox.CreatePdfRequest{
  TemplateId: "YOUR_TEMPLATE_ID",
  Data: map[string]interface{}{
      "customer_name":  "John Doe",
      "invoice_number": "INV-001",
      "amount":         "$1,234.56",
  },
}

response, _, err := client.PDFApi.CreatePdf(ctx, request)
if err != nil {
  log.Fatal(err)
}

fmt.Println(*response.Url)              // signed URL valid 24h
fmt.Println(*response.CreditsRemaining) // credits left on the team

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

response, _, err := client.PDFApi.CreatePdf(ctx, templatefox.CreatePdfRequest{
  TemplateId: "YOUR_TEMPLATE_ID",
  Data:       map[string]interface{}{"customer_name": "Jane Doe"},
})
if err != nil {
  log.Fatal(err)
}

pdfResp, _ := http.Get(*response.Url)
defer pdfResp.Body.Close()

file, _ := os.Create("invoice.pdf")
defer file.Close()
io.Copy(file, pdfResp.Body)

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

storeS3 := true
filepath := "invoices/2026/04/"   // key prefix (optional)
filename := "invoice-001"          // no extension, .pdf appended

request := templatefox.CreatePdfRequest{
  TemplateId: "YOUR_TEMPLATE_ID",
  Data:       map[string]interface{}{"invoice_number": "INV-001"},
  Filename:   &filename,
  StoreS3:    &storeS3,
  S3Filepath: &filepath,
  // S3Bucket:  &bucket,    // override bucket from integration
}

response, _, _ := client.PDFApi.CreatePdf(ctx, request)
fmt.Println(*response.S3Bucket, *response.S3Key)

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

variant := "pdf/a-2b"   // "pdf/a-1b" | "pdf/a-2b" | "pdf/a-3b"

response, _, _ := client.PDFApi.CreatePdf(ctx, templatefox.CreatePdfRequest{
  TemplateId: "YOUR_TEMPLATE_ID",
  Data:       map[string]interface{}{"customer_name": "John Doe"},
  PdfVariant: &variant,
})

Pour les gros documents ou les traitements par lots, passez par l’endpoint asynchrone. Le déroulé complet est décrit dans Créer un PDF (asynchrone).

payload, _ := json.Marshal(map[string]any{
  "template_id":    "YOUR_TEMPLATE_ID",
  "data":           map[string]string{"invoice_number": "INV-001"},
  "webhook_url":    "https://example.com/webhooks/pdf",
  "webhook_secret": "whk_a1b2c3d4e5f6g7h8i9j0k1l2",   // HMAC-SHA256 signing
})

req, _ := http.NewRequest("POST", baseURL+"/v1/pdf/create-async", bytes.NewReader(payload))
setHeaders(req)

resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()

var result struct{ JobId string `json:"job_id"` }
json.NewDecoder(resp.Body).Decode(&result)
// Poll GET /v1/pdf/jobs/{job_id} or wait for the webhook.

L’exemple ci-dessus appelle l’API REST directement, avec net/http.

response, httpResp, err := client.PDFApi.CreatePdf(ctx, request)
if err != nil {
  if apiErr, ok := err.(templatefox.GenericOpenAPIError); ok {
      fmt.Printf("status=%d body=%s\n", httpResp.StatusCode, apiErr.Body())
  }
  log.Fatal(err)
}

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

ServiceMéthodeEndpoint
PDFApiCreatePdfPOST /v1/pdf/create
TemplatesApiListTemplatesGET /v1/templates
TemplatesApiGetTemplateFieldsGET /v1/templates/{id}/fields
AccountApiGetAccountGET /v1/account
AccountApiListTransactionsGET /v1/account/transactions
IntegrationsApiSaveS3ConfigPOST /v1/integrations/s3
IntegrationsApiGetS3ConfigGET /v1/integrations/s3
IntegrationsApiDeleteS3ConfigDELETE /v1/integrations/s3
IntegrationsApiTestS3ConnectionPOST /v1/integrations/s3/test

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