Démarrage rapide France
Ce guide de démarrage rapide vous accompagne dans la création de votre premier enregistrement fiscal signé avec fiskaly SIGN FR, en remplissant les trois obligations fiscales françaises clés : signature, journalisation et archivage.
Prérequis
Section intitulée « Prérequis »- Un compte fiskaly (inscription sur hub.fiskaly.com)
- Une clé API et un secret pour une organisation GROUP dans l’environnement TEST
- Informations sur le contribuable : nom de l’entreprise, numéro SIREN, adresse
Votre secret API n’est affiché qu’une seule fois. Enregistrez-le immédiatement dans un endroit sécurisé.
S'authentifier
curl -X POST https://test.api.fiskaly.com/tokens \ -H "Content-Type: application/json" \ -H "X-Api-Version: 2026-02-03" \ -d '{ "content": { "type": "API_KEY", "key": "YOUR_API_KEY", "secret": "YOUR_API_SECRET" } }'const BASE = "https://test.api.fiskaly.com"; const API_VERSION = "2026-02-03"; const authResp = await fetch(`${BASE}/tokens`, { method: "POST", headers: { "Content-Type": "application/json", "X-Api-Version": API_VERSION, }, body: JSON.stringify({ content: { type: "API_KEY", key: "YOUR_API_KEY", secret: "YOUR_API_SECRET" }, }), }); const { access_token } = await authResp.json(); const headers = { "Authorization": `Bearer ${access_token}`, "Content-Type": "application/json", "X-Api-Version": API_VERSION, };import requests, uuid BASE = "https://test.api.fiskaly.com" API_VERSION = "2026-02-03" auth = requests.post(f"{BASE}/tokens", json={ "content": {"type": "API_KEY", "key": "YOUR_API_KEY", "secret": "YOUR_API_SECRET"} }, headers={"X-Api-Version": API_VERSION}) access_token = auth.json()["access_token"] hdrs = {"Authorization": f"Bearer {access_token}", "X-Api-Version": API_VERSION}// POST https://test.api.fiskaly.com/tokens // Headers: X-Api-Version: 2026-02-03 // Body: {"content":{"type":"API_KEY","key":"...","secret":"..."}}using var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-Api-Version", "2026-02-03"); var authResp = await client.PostAsJsonAsync( "https://test.api.fiskaly.com/tokens", new { content = new { type = "API_KEY", key = "YOUR_API_KEY", secret = "YOUR_API_SECRET" } });📘NoteSIGN FR utilise la même plateforme API que SIGN IT. Toutes les requêtes nécessitent l’en-tête
X-Api-Version. Les opérations d’écriture nécessitent égalementX-Idempotency-Key.Créer l'organisation, le contribuable, l'emplacement et le système
La configuration suit le même schéma que SIGN IT — créez une organisation UNIT, puis un contribuable, un emplacement et un système, en activant chaque ressource :
# Créer une organisation UNIT curl -X POST https://test.api.fiskaly.com/organizations \ -H "Authorization: Bearer ${ACCESS_TOKEN}" \ -H "Content-Type: application/json" \ -H "X-Api-Version: 2026-02-03" \ -H "X-Idempotency-Key: $(uuidgen)" \ -d '{"content": {"type": "UNIT", "name": "My French Company"}}' # Créer une clé API sujet pour la UNIT, se réauthentifier, puis : # Créer un contribuable curl -X POST https://test.api.fiskaly.com/taxpayers \ -H "Authorization: Bearer ${UNIT_TOKEN}" \ -H "Content-Type: application/json" \ -H "X-Api-Version: 2026-02-03" \ -H "X-Idempotency-Key: $(uuidgen)" \ -d '{ "content": { "type": "COMPANY", "name": {"legal": "Ma Societe SARL"}, "address": {"street": "1 Rue de Rivoli", "zip": "75001", "city": "Paris", "country_code": "FR"}, "fiscalization": { "type": "FR", "tax_id_number": "123456789" } } }' # Activer le contribuable, créer et activer l'emplacement et le système # (même schéma que SIGN IT — voir le guide d'intégration complet)// Create Organization UNIT const org = await fetch(`${BASE}/organizations`, { method: "POST", headers: { ...headers, "X-Idempotency-Key": crypto.randomUUID() }, body: JSON.stringify({ content: { type: "UNIT", name: "My French Company" } }), }).then(r => r.json()); // After creating Subject API Key and re-authenticating: // Create Taxpayer const taxpayer = await fetch(`${BASE}/taxpayers`, { method: "POST", headers: { ...headers, "X-Idempotency-Key": crypto.randomUUID() }, body: JSON.stringify({ content: { type: "COMPANY", name: { legal: "Ma Societe SARL" }, address: { street: "1 Rue de Rivoli", zip: "75001", city: "Paris", country_code: "FR" }, fiscalization: { type: "FR", tax_id_number: "123456789" }, }, }), }).then(r => r.json()); // Commission Taxpayer → create Location → commission → create System → commission# Create Taxpayer (after org + subject setup) taxpayer = requests.post(f"{BASE}/taxpayers", headers={ **hdrs, "X-Idempotency-Key": str(uuid.uuid4()) }, json={"content": { "type": "COMPANY", "name": {"legal": "Ma Societe SARL"}, "address": {"street": "1 Rue de Rivoli", "zip": "75001", "city": "Paris", "country_code": "FR"}, "fiscalization": {"type": "FR", "tax_id_number": "123456789"}, }}).json() # Commission, then create + commission Location and System...// Same pattern as SIGN IT: // POST /organizations → UNIT // POST /subjects → API_KEY (scoped) // POST /tokens → re-authenticate // POST /taxpayers → FR fiscalization // PATCH /taxpayers/{id} → COMMISSIONED // POST /locations → BRANCH // POST /systems → FISCAL_DEVICE// Same pattern as SIGN IT — create and commission: // Organization → Taxpayer → Location → System // French-specific: fiscalization.type = "FR", tax_id_number = SIREN (9 digits)Créer votre premier enregistrement
# Partie A : Intention curl -X POST https://test.api.fiskaly.com/records \ -H "Authorization: Bearer ${UNIT_TOKEN}" \ -H "Content-Type: application/json" \ -H "X-Api-Version: 2026-02-03" \ -H "X-Idempotency-Key: $(uuidgen)" \ -d '{ "content": { "type": "INTENTION", "system": {"id": "YOUR_SYSTEM_ID"}, "operation": {"type": "TRANSACTION"} } }' # Partie B : Transaction curl -X POST https://test.api.fiskaly.com/records \ -H "Authorization: Bearer ${UNIT_TOKEN}" \ -H "Content-Type: application/json" \ -H "X-Api-Version: 2026-02-03" \ -H "X-Idempotency-Key: $(uuidgen)" \ -d '{ "content": { "type": "TRANSACTION", "intention": {"id": "INTENTION_ID"}, "operation": { "type": "RECEIPT", "document": { "number": "1", "date": "2026-02-27", "amounts": { "total_including_vat": "12.00", "total_excluding_vat": "10.00" } }, "entries": [{ "type": "SALE", "description": "Product A", "nature": "GOOD", "quantity": "1", "amounts": { "unit_including_vat": "12.00", "total_including_vat": "12.00", "total_excluding_vat": "10.00", "vat": {"rate": "20.00", "amount": "2.00"} } }] } } }'// Part A: Intention const intention = await fetch(`${BASE}/records`, { method: "POST", headers: { ...headers, "X-Idempotency-Key": crypto.randomUUID() }, body: JSON.stringify({ content: { type: "INTENTION", system: { id: systemId }, operation: { type: "TRANSACTION" }, }, }), }).then(r => r.json()); // Part B: Transaction const record = await fetch(`${BASE}/records`, { method: "POST", headers: { ...headers, "X-Idempotency-Key": crypto.randomUUID() }, body: JSON.stringify({ content: { type: "TRANSACTION", intention: { id: intention.id }, operation: { type: "RECEIPT", document: { number: "1", date: "2026-02-27", amounts: { total_including_vat: "12.00", total_excluding_vat: "10.00" }, }, entries: [{ type: "SALE", description: "Product A", nature: "GOOD", quantity: "1", amounts: { unit_including_vat: "12.00", total_including_vat: "12.00", total_excluding_vat: "10.00", vat: { rate: "20.00", amount: "2.00" }, }, }], }, }, }), }).then(r => r.json()); console.log("Record created and archived:", record.state);# Part A: Intention intention = requests.post(f"{BASE}/records", headers={ **hdrs, "X-Idempotency-Key": str(uuid.uuid4()) }, json={"content": { "type": "INTENTION", "system": {"id": system_id}, "operation": {"type": "TRANSACTION"}, }}).json() # Part B: Transaction record = requests.post(f"{BASE}/records", headers={ **hdrs, "X-Idempotency-Key": str(uuid.uuid4()) }, json={"content": { "type": "TRANSACTION", "intention": {"id": intention["id"]}, "operation": { "type": "RECEIPT", "document": {"number": "1", "date": "2026-02-27", "amounts": {"total_including_vat": "12.00", "total_excluding_vat": "10.00"}}, "entries": [{"type": "SALE", "description": "Product A", "nature": "GOOD", "quantity": "1", "amounts": { "unit_including_vat": "12.00", "total_including_vat": "12.00", "total_excluding_vat": "10.00", "vat": {"rate": "20.00", "amount": "2.00"}}}], }, }}).json()// POST /records → INTENTION (system.id, operation.type = TRANSACTION) // POST /records → TRANSACTION (intention.id, receipt data with entries) // Data is signed, journaled, and archived for NF525 compliance// Two-step record creation: INTENTION → TRANSACTION // French VAT rate: 20.00% (standard) // Response confirms signing, journaling, and archivingUne fois créées, les données sont automatiquement signées, journalisées et archivées — remplissant les trois obligations fiscales clés NF525.
Étapes suivantes
Section intitulée « Étapes suivantes »Was this page helpful?