Guide · API REST
Remplir un modèle Word depuis le code, sans Word
Deux appels. Le premier lit le modèle et renvoie chaque espace réservé qu'il déclare : champs de fusion, régions répétées, emplacements d'images et de QR. Le second envoie les valeurs et renvoie le PDF ou le DOCX fini. Pas de Word sur le serveur, pas d'interop Office, pas de complément.
Ce qui se passe mal sans API
- L'interop Office sur un serveur est lente, monothread et non prise en charge en mode non surveillé.
- Éditer document.xml à la main casse dès que quelqu'un restyle le modèle dans Word.
- Les listes d'espaces réservés dérivent : le code attend des champs que le modèle n'a plus, ou en ignore de nouveaux.
La requête
L'appel d'extraction prend le modèle seul et répond avec l'enveloppe initiale : une entrée par espace réservé, valeurs null. Remplissez cette enveloppe et renvoyez-la avec le modèle au point de terminaison de génération.
TOKEN=$(curl -sS https://auth.xgenerate.io/realms/xgenerate/protocol/openid-connect/token \
-d grant_type=client_credentials \
-d client_id="$XGENERATE_CLIENT_ID" \
-d client_secret="$XGENERATE_CLIENT_SECRET" | jq -r .access_token)
# 1. Discover the placeholders: the seed envelope lists every field, region, image and QR-bill slot.
curl -sS https://api.xgenerate.io/v2/documents/fields \
-H "Authorization: Bearer $TOKEN" \
-F "file=@letter.docx" \
| jq '{fields: [.fields[].name], lists: [.lists[].name], images: [.images[].name]}'
# 2. Fill it: send the same template with the values.
cat > fields.json <<'JSON'
{ "fields": [
{ "name": "recipient.name", "value": "Camille Durand" },
{ "name": "letter.date", "value": "25.10.2026" },
{ "name": "letter.subject", "value": "Your contract renewal" } ] }
JSON
curl -sS https://api.xgenerate.io/v2/documents/generate \
-H "Authorization: Bearer $TOKEN" \
-F "file=@letter.docx" \
-F "fields=@fields.json;type=application/json" \
-F "format=PDF" \
-o letter.pdfDepuis .NET
using System.Net.Http.Json;
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new("Bearer", token);
var template = Convert.ToBase64String(await File.ReadAllBytesAsync("letter.docx"));
// 1. Discover the placeholders the template declares.
var extracted = await http.PostAsJsonAsync(
"https://api.xgenerate.io/v2/documents/fields", new { content = template });
extracted.EnsureSuccessStatusCode();
var seed = await extracted.Content.ReadFromJsonAsync<Envelope>();
// seed!.Fields holds one entry per merge field, each with Value null.
// 2. Fill them and render.
var request = new
{
filename = "letter.docx",
content = template,
format = "PDF",
fields = new
{
fields = new[]
{
new { name = "recipient.name", value = "Camille Durand" },
new { name = "letter.subject", value = "Your contract renewal" }
}
}
};
var response = await http.PostAsJsonAsync(
"https://api.xgenerate.io/v2/documents/generate", request);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadFromJsonAsync<GenerateResult>();
await File.WriteAllBytesAsync(result!.Filename, Convert.FromBase64String(result.Content));
record Field(string Name, string? Value);
record Envelope(Field[] Fields);
record GenerateResult(string Filename, string Content, string Format);La réponse
L'appel d'extraction renvoie l'enveloppe DocumentFields en JSON. L'appel de génération renvoie le PDF en octets bruts sur le transport multipart, ou filename, content, format et warnings sur le transport JSON ; les avertissements nomment les emplacements d'image, de QR et d'en-tête sans valeur, et les champs de fusion sans données sont supprimés sans avertissement.
Le résultat

Ce que XGenerate ne fait pas
Les modèles utilisent les champs de fusion Word standard, les régions TableStart / TableEnd et des emplacements d'images par texte alternatif. Les expressions de calcul sont évaluées via un fichier de liaisons optionnel ou l'API /bindings/evaluate, en dehors du modèle Word. Les blocs conditionnels selon une valeur ne sont pas pris en charge ; les champs IF de Word autour d'un texte le sont.
Essayez-le sur votre propre modèle
Envoyez-nous un fichier Word que vous utilisez aujourd'hui. Nous le rendons avec vos données et vous renvoyons le PDF avec le modèle adapté, pour que votre évaluation ne dépende pas de nous.
Demander une démo