DCI Integration
Contents
DCI Integration#
For: developers
Integrate OpenSPP with Digital Convergence Initiative (DCI)-compliant social protection systems — either by exposing OpenSPP registry data through DCI endpoints or by consuming data from external DCI registries (CRVS, IBR, disability registries, etc.).
How to use this section#
Read DCI Overview to understand DCI architecture and the interaction patterns (sync/async search, subscribe/notify)
Read the role-specific guide for your scenario:
OpenSPP as DCI Server — expose OpenSPP registry data to external DCI clients
OpenSPP as DCI Client — query external DCI registries from OpenSPP
Consult DCI Protocol Details for message envelope, HTTP Signature, and endpoint reference
Prerequisites#
Familiarity with Odoo module structure and FastAPI
Understanding of HTTP Message Signatures (draft-cavage / RFC 9421)
Familiarity with Bearer token authentication patterns
Basic knowledge of async operations with
queue_jobFamiliarity with the OpenSPP registry structure (
res.partner,spp.registry.id)
When do you need DCI?#
Scenario |
Module(s) to install |
Role |
Guide |
|---|---|---|---|
Expose OpenSPP as a DCI server for external MIS systems |
|
Server |
|
Import births/deaths from a national CRVS |
|
Client |
|
Check for duplicate enrollments in other programs (IBR) |
|
Client |
|
Query a Disability Registry for eligibility targeting |
|
Client |
|
Try an end-to-end DCI example out of the box |
|
Demo |
Install the module |
Understand DCI message formats / protocol details |
|
Either |
|
Build a custom OpenSPP endpoint that isn't DCI-compliant |
— |
N/A |
Use API V2 instead |
OpenSPP DCI modules#
Module |
Purpose |
Role |
|---|---|---|
|
Core DCI infrastructure — message envelope, HTTP Signature, JWKS, shared schemas |
Foundation |
|
DCI server infrastructure — FastAPI app ( |
Server |
|
Base DCI client ( |
Client |
|
CRVS client ( |
Client |
|
IBR client ( |
Client |
|
Disability Registry client ( |
Client |
|
End-to-end demo layered on |
Demo |
Note
Server-side registry search needs an implementation module. spp_dci_server provides the infrastructure (routers, middleware, models), but the actual search implementation for a given registry type is loaded dynamically. Until an implementation module is installed, search requests receive a rejection response. See OpenSPP as DCI Server for details.
Common integration scenarios#
As a DCI server#
Example: A national MIS queries OpenSPP's Social Registry for beneficiary data.
graph LR
A[External MIS] -->|DCI Search Request| B[OpenSPP DCI Server]
B -->|Query Registry| C[res.partner]
C -->|Results| B
B -->|Signed DCI Response| A
See OpenSPP as DCI Server for implementation details.
As a DCI client#
Example: OpenSPP imports birth registrations from a national CRVS.
graph LR
A[OpenSPP DCI Client] -->|DCI Search Request| B[National CRVS]
B -->|Birth Records| A
A -->|Create Registrants| C[res.partner]
See OpenSPP as DCI Client for implementation details.
See also#
API V2 — the general-purpose REST API (not DCI-specific)
DCI API Standards — official DCI specifications
G2P Connect — related protocol documentation
ADR-015 — OpenSPP DCI architecture decision
openspp.org