How Procura natively integrates DGI Côte d'Ivoire's FNE framework: setup, API flow, multi-country support, and the path to production.
Procura team · May 2026 · 9 min readFNE (Facture Normalisée Électronique) is the standardized e-invoicing framework run by Côte d'Ivoire's Tax Office (DGI). Every taxpayer registered for VAT must transmit each B2B invoice in real time to the FNE platform and carry an official reference + QR-verifiable token on the printed copy. Without that signature, the invoice is no longer admissible to support a VAT deduction for the buyer or an expense write-off for the seller.
The framework is the Ivorian counterpart of Benin's MECeF, but with a markedly different technical shape. FNE uses a single-step sign API: one POST to /external/invoices/sign returns the certified reference, the NCC, a QR-verifiable token and a remaining sticker balance — there is no separate confirmation step. The DGI also issues the production base URL per-taxpayer after certification, rather than running a single shared endpoint.
The official portal is hosted at fne.dgi.gouv.ci, with a public test platform at http://54.247.95.108/ws and a procedure document published in May 2025 explaining the registration flow. An unofficial-but-aligned PHP SDK published by PRODESTIC mirrors the constants, payload shape and response keys we use in Procura, so any integration that works against the test platform will work in production.
Procura was built natively to integrate with FNE: as soon as an organization is set to country = Côte d'Ivoire, the FNE section appears in its settings with the exact fields the DGI expects (NCC, API token, point of sale, establishment, production URL), and every approved invoice can be signed in one click against the official endpoint.
An FNE integration in Procura is configured around five core fields. The NCC (Numéro Compte Contribuable) is your taxpayer ID — the same one that already appears on every invoice you issue, typically 8 to 14 characters depending on the regime. The API token is a Bearer secret the DGI delivers when your company is registered on the FNE portal. The point of sale and establishment are operational identifiers that ride on every transmission and can be overridden per invoice.
Two more fields complete the setup: the environment (Sandbox vs Production) and the optional production URL. Sandbox always points to the public test platform — you do not need to provide a URL there. Production requires the per-taxpayer URL the DGI hands over after certification. Procura validates this at save time: switching to Production without a production URL is rejected at the form level, so an org can never silently submit live invoices against the sandbox endpoint.
Procura also exposes a third environment, Procura Mock, that simulates FNE locally so you can validate the full flow before contacting the DGI. The mock honors the same B2B-without-NCC-is-400 validation, the same Bearer auth, and returns the same response shape (reference, ncc, token, balance_sticker) so any integration that works against the mock will work against the real DGI.
The settings UI ships with a dedicated bilingual onboarding card describing the five steps from registration to production: register on fne.dgi.gouv.ci, submit specimens, receive Sandbox token, get production token + URL, switch to Production. Each step has a direct link to the relevant DGI page.
FNE uses a single-step state model for every invoice. Procura POSTs the structured payload (invoiceType, paymentMethod, template, items, taxes, client) to /external/invoices/sign and receives the official reference, the NCC echoed back, a token URL the buyer can scan to verify the invoice on fne.dgi.gouv.ci, and the remaining sticker balance for your company in the DGI quota. There is no follow-up confirmation call to make.
Templates carry semantic meaning. B2B is the main flow for invoicing another taxpayer and requires the client's NCC. B2C covers retail to consumers without NCC requirements. B2F is for foreign clients and requires foreignCurrency + foreignCurrencyRate. B2G is for government clients and may require additional fields. Procura selects the right template per invoice based on the vendor's flags, but the field is also overridable in the signing call.
Tax types are slightly different from MECeF's letter codes: FNE accepts TVA (18%, standard), TVAB (9%, reduced), TVAC (0% conventional exemption) and TVAD (0% legal exemption). Procura maps each line item's effective tax rate to the right code, applying TVA by default when an invoice carries a positive tax amount and TVAC when it doesn't.
Procura wraps the sign call inside a single trpc.fne.signInvoice mutation that's idempotent at the row level: an invoice that already carries an fneReference cannot be re-signed. On failure, the invoice is marked with fneStatus = error and the raw DGI response is stored in fneRawResponse for diagnosis. Audit log entries are created on success and failure so the compliance team can replay any incident. A separate refundInvoice mutation issues credit notes against POST /external/invoices/{id}/refund.
An organization that operates in both Côte d'Ivoire and Bénin — say, a group with offices in Abidjan and Cotonou — needs both FNE and MECeF active at the same time. Procura supports this natively: FNE and MECeF are two distinct module slugs in the activeModules array, and both can be enabled on the same tenant.
The Settings → Finance sidebar shows FNE (Côte d'Ivoire) and MECeF (Bénin) as two separate sections. Each holds its own credentials (NCC + token + production URL for FNE, IFU + token for MECeF), its own environment switch, and its own audit trail. Invoices issued under one regime are never confused with those issued under the other.
Provisioning a multi-country organization from the Procura platform-admin console is a single form: pick a primary country, then tick whichever module slugs apply (fne, mecef, or both). The country gate accepts ISO codes and full names in both languages — Côte d'Ivoire, Cote d'Ivoire, Ivory Coast, CI all unlock the FNE section the same way.
Behind the scenes the gating logic is countryHit OR moduleHit: a section appears whenever the org's country matches the section's accepted variants OR any of its module slugs appear in activeModules. That second branch is what lets a multi-country organization with country='Côte d'Ivoire' but activeModules=['fne','mecef'] see both regimes side by side without changing primary country.
Before flipping FNE to production, run through a five-point checklist. First, validate the integration end to end against the Procura mock — every approved invoice should pick up a stub reference, the QR token should resolve to a placeholder URL, and the audit log should record every sign call with its response. Second, register on fne.dgi.gouv.ci by submitting your RCCM, NCC and tax compliance attestation, and obtain the Sandbox API token from the FNE portal.
Third, configure Sandbox in Procura with your real NCC and the Sandbox token, then re-run the integration test against actual specimen invoices. The DGI validates the structure, the templates (B2B/B2C/B2F/B2G), the tax codes (TVA/TVAB/TVAC/TVAD), the payment methods and the supporting fields. Any mismatch surfaces as a clear error message that the Procura settings page exposes verbatim.
Fourth, request the production token and the per-taxpayer production URL. The DGI delivers both after specimen validation. Plug the URL into the Production URL field, paste the production token in the API token field, switch the environment to Production, leave the active toggle off until you are ready, and run one final dry-run with an internal invoice to verify the full chain.
Fifth, flip the active toggle and start signing real invoices. From that moment, every approved invoice should be signed within seconds, the FNE reference should appear on the printed invoice and on the supplier portal, the QR token should resolve to the public verification page, and the remaining-sticker balance should decrement on each call so you can monitor your DGI quota. If anything drifts, the audit log replays the request and response of every transaction.