Skip to main content
Scell.io API — Factur-X & eIDAS EU-SES

Factur-X API for Developers

One endpoint. A PDF/A-3b with EN16931-compliant CII XML. ISCA SHA-256 ledger included. Without reading 400 pages of the standard.

PHP + TS + MCP SDKs135 endpoints Swagger UIIsolated sk_test_* sandboxIntegration in 1 day
POST /api/v1/invoices — Factur-X EN16931
PHPTypeScriptMCPcURL
$api = ScellApiClient::withApiKey('sk_live_...');

$invoice = $api->invoices()->builder()
    ->outgoing()
    ->facturX()
    ->issueDate('2026-05-16')
    ->dueDate('2026-06-15')
    ->buyer('98765432109876', 'Acme SARL',
        new Address('2 av Client', '75002', 'Paris'))
    ->addLine('Consultation', 10, 150.00, 20.0)
    ->create();

echo $invoice->invoice_number; // FAC-202605-00123

FAC-202605-00123 — PDF/A-3b + XML CII EN16931

Typical client context

C

Camille Martin

CTO ISV B2B

5–50 ETP · Laravel / Node.js

Camille is building a vertical ERP for the logistics sector. Her 150 French B2B clients have been requiring Factur-X invoices since January 2026. She has 2 weeks to implement compliance without hiring an EN16931 specialist.

Common blockers

  • 1The EN16931 standard requires 400 pages of specs that nobody wants to read or maintain
  • 2A single missing field in the CII XML is enough for a Peppol rejection in production
  • 32026 reform compliance (LFR 2022) is not optional for French B2B invoice issuers
  • 4Maintaining standards updates (Factur-X V2.2, FNFE schematron) in-house costs 200–400h/year
  • 5Testing in sandbox without triggering real fiscal chains is difficult
  • 6Implementing an ISCA SHA-256 fiscal ledger in-house takes 3–6 months of development

The Scell.io response

135 endpoints documented in Swagger UI. Three SDKs: PHP (`composer require scell/sdk`), TypeScript (`npm i @scell/sdk`), MCP (`@scell/mcp-client` for AI agents). Isolated sandbox via key prefix `sk_test_*` — same endpoint, distinct PostgreSQL database, zero Peppol effect. One API call generates the PDF/A-3b with BT-84 (IBAN), BG-22 (deposit deductions) tags and types 386/380 calculated automatically. The ISCA SHA-256 ledger runs in the background — anchored on Bitcoin via OpenTimestamps with no configuration.

PHP SDK `scell/sdk`

`composer require scell/sdk`, fluent builder pattern, typed classes, first call in 30 min

TypeScript SDK `@scell/sdk`

strict types, promises, Node.js and Deno, same API as the PHP SDK

44 MCP tools `@scell/mcp-client`

Claude, GPT-4o, Cursor create invoices in natural language, zero glue code

Sandbox `sk_test_*`

same `api.scell.io` endpoint, isolated PostgreSQL database, no Peppol transmission

OpenAPI 3.0 + Swagger UI

135 endpoints with ready-to-copy curl, PHP, TypeScript examples

PDF/A-3b + CII XML conformant to FNFE schematron

zero Peppol rejection, types 386/380/credit note handled automatically

Context & stakes

The EN16931 standard covers 400 pages of specifications. Each transaction type — deposit type 386, balance type 380, credit note, delivery address BG-13 — requires its own mandatory tags in the embedded CII XML. A single missing field triggers a Peppol rejection in production. Scell.io exposes a REST API that absorbs this complexity: you send business data, you receive a PDF/A-3b with CII XML conformant to the FNFE schematron, ready for the Peppol network. The ISCA SHA-256 fiscal ledger is automatic — a `FiscalEntry` is created by a `SECURITY DEFINER` PostgreSQL trigger at each emission, even if your code bypasses the normal path. Bitcoin anchoring via OpenTimestamps on each daily closing.

Real-world use cases

  • Vertical B2B ERP issuing Factur-X invoices for 150+ French clients since the 2026 reform
  • Project management SaaS handling the full quote → deposit → balance cycle without third-party tools
  • B2B marketplace generating a Factur-X invoice per transaction between sellers and buyers
  • Mobile invoicing app signing quotes with eIDAS before conversion to invoice
  • Claude/GPT agent creating invoices via 44 MCP tools (`scell_create_invoice`, `scell_send_quote`)
  • CI/CD pipeline automatically generating recurring monthly invoices with ISCA ledger

Frequently asked questions

How long does it take to integrate Scell.io into an existing Laravel project?

On average 1 day of development: `composer require scell/sdk`, configure the `sk_test_*` key, first call to `$api->invoices()->builder()->create()`. The PHP SDK handles mandatory EN16931 tags (BT-84, BG-22, type 386/380) without additional configuration. Swagger UI documentation is available at `api.scell.io/api/documentation`.

Do we need to maintain Factur-X standard updates after integration?

No. Scell.io maintains Factur-X (V1.0 / V2.2) compliance, FNFE schematron, and EN16931:2017+A1:2019 server-side. Standards updates are deployed without any client-side API changes. The SDK is SemVer versioned: a minor or patch update never breaks the interface.

Is the Scell.io sandbox truly isolated from production?

Yes. The `sk_test_*` key points to a distinct PostgreSQL database (`rdb_sandbox`). No sandbox data touches the production database. The same endpoint `api.scell.io` is used — only the key prefix changes. Sandbox invoices are not transmitted to the Peppol network.

How does the ISCA SHA-256 fiscal ledger work?

Each invoice, credit note or quote issued triggers a `FiscalEntry` with a SHA-256 `chain_hash` computed from the previous hash. The chain is isolated per `(tenant_id, sub_tenant_id)` pair. PostgreSQL `SECURITY DEFINER` triggers guarantee recording even if application code bypasses the normal path. A free Bitcoin OpenTimestamps anchor is performed on each daily closing.

Do the 44 MCP tools work with Claude and GPT-4o?

Yes. The `@scell/mcp-client` package implements the MCP (Model Context Protocol). Claude agents (via claude-code or Anthropic API), GPT-4o (via OpenAI MCP client) and Cursor can call `scell_create_invoice`, `scell_send_quote`, `scell_create_buyer` directly in natural language. No glue code needed.

Does Scell.io support deposit invoices (type 386) and balance invoices (type 380)?

Yes. The full cycle is handled via API: quote `DEV-YYYY-NNNN` → `POST /quotes/{id}/convert-to-deposit` (type 386, VAT immediately due CGI art. 289) → `POST /quotes/{id}/convert-to-balance` (type 380, automatic BG-22 deduction from `parent_invoice_ids`). Each step generates an EN16931-conformant Factur-X and an entry in the ISCA chain.

Unlimited sandbox · No credit card

Your first Factur-X invoice in under 1 day

`composer require scell/sdk` or `npm i @scell/sdk`. sk_test_* key in 60 seconds. 135 Swagger UI documented endpoints. Automatic ISCA SHA-256 ledger.

Factur-X V1.0 / V2.2EN16931:2017+A1:2019eIDAS UE/910/2014LFR 2022 — réforme 2026ISCA SHA-256 + OpenTimestamps

Your cookie preferences

We use cookies to improve your experience. Essential cookies are always active. Cookie policy.