Skip to content

Company Verifier API

Port: 8007 | NodePort: 30007 | Repo: solyntek/djinn/services/djinn-company-verifier

Continuous verification of companies and supplier compliance monitoring.

Endpoints

Live data (SIRENE / BODACC)

Method Route Description
GET /health Health check (includes circuit breaker status)
GET /v1/companies/{siren} Company info (SIRENE, live)
GET /v1/companies/{siren}/compliance Live compliance status (SIRENE + BODACC)
GET /v1/companies/{siren}/alerts BODACC alerts (insolvency proceedings), paginated
POST /v1/companies/track Start tracking a SIREN for a tenant

Document tracking (local store)

Method Route Description
POST /v1/companies Register the profile of a tracked company
POST /v1/companies/lookup Search by SIREN/SIRET/name (tracked companies)
GET /v1/companies/{siren}/documents/compliance Document compliance (documents + alerts)
POST /v1/companies/{siren}/documents Upload compliance document
GET /v1/companies/{siren}/documents List documents
GET /v1/alerts Document expiration alerts

Live vs document compliance

GET /v1/companies/{siren}/compliance queries the external SIRENE and BODACC sources in real time (status: compliant / at_risk / non_compliant / unknown, with graceful degradation if a source is unavailable). GET /v1/companies/{siren}/documents/compliance evaluates the company's local document tracking (Kbis, URSSAF, etc.).

Compliance Documents

Type Validity Source
Kbis 3 months Infogreffe / INPI
URSSAF certificate 6 months Supplier upload
Tax certificate 1 year Supplier upload
Professional liability insurance 1 year Supplier upload

External APIs

API Cost Data
SIRENE (INSEE) Free SIREN, company name, NAF, headcount
BODACC (DILA) Free Legal notices, insolvency proceedings
INPI/RNE Free Officers, filings
Pappers Paid Annual accounts, beneficial owners

Interactive reference

Generated on every build from the versioned spec openapi/company-verifier-v1.json (ADR-011) — no route is documented by hand.

Djinn Company Verifier 0.2.0

Vérification et suivi conformité des entreprises


Endpoints


GET /health

Health

Responses

{
    "status": "string",
    "service": "string"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "status": {
            "type": "string",
            "title": "Status",
            "default": "ok"
        },
        "service": {
            "type": "string",
            "title": "Service",
            "default": "company-verifier"
        }
    },
    "type": "object",
    "title": "HealthResponse"
}

GET /v1/companies/{siren}

Get Company V1

Description

Lookup company info from SIRENE.

Input parameters

Parameter In Type Default Nullable Description
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Responses

{
    "siren": "string",
    "siret": null,
    "name": "string",
    "legal_form": null,
    "address": null,
    "naf_code": null,
    "status": "active",
    "creation_date": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "siren": {
            "type": "string",
            "pattern": "^\\d{9}$",
            "title": "Siren"
        },
        "siret": {
            "anyOf": [
                {
                    "type": "string",
                    "pattern": "^\\d{14}$"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Siret"
        },
        "name": {
            "type": "string",
            "title": "Name"
        },
        "legal_form": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Legal Form"
        },
        "address": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Address"
        },
        "naf_code": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Naf Code"
        },
        "status": {
            "type": "string",
            "enum": [
                "active",
                "ceased",
                "unknown"
            ],
            "title": "Status",
            "default": "unknown"
        },
        "creation_date": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Creation Date"
        }
    },
    "type": "object",
    "required": [
        "siren",
        "name"
    ],
    "title": "Company",
    "description": "Modèle entreprise exposé par les routes /v1/."
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /v1/companies/{siren}/compliance

Get Compliance V1

Description

Get compliance status combining SIRENE and BODACC data.

Input parameters

Parameter In Type Default Nullable Description
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Responses

{
    "siren": "string",
    "company": null,
    "compliance_status": "compliant",
    "data_freshness": "live",
    "sources_unavailable": [
        "string"
    ],
    "warnings": [
        "string"
    ],
    "alerts_count": 0,
    "checked_at": "2022-04-13T15:42:05.901Z"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "siren": {
            "type": "string",
            "title": "Siren"
        },
        "company": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/Company"
                },
                {
                    "type": "null"
                }
            ]
        },
        "compliance_status": {
            "type": "string",
            "enum": [
                "compliant",
                "at_risk",
                "non_compliant",
                "unknown"
            ],
            "title": "Compliance Status"
        },
        "data_freshness": {
            "type": "string",
            "enum": [
                "live",
                "stale",
                "partial",
                "unavailable"
            ],
            "title": "Data Freshness"
        },
        "sources_unavailable": {
            "items": {
                "type": "string"
            },
            "type": "array",
            "title": "Sources Unavailable",
            "default": []
        },
        "warnings": {
            "items": {
                "type": "string"
            },
            "type": "array",
            "title": "Warnings",
            "default": []
        },
        "alerts_count": {
            "type": "integer",
            "title": "Alerts Count",
            "default": 0
        },
        "checked_at": {
            "type": "string",
            "format": "date-time",
            "title": "Checked At"
        }
    },
    "type": "object",
    "required": [
        "siren",
        "company",
        "compliance_status",
        "data_freshness",
        "checked_at"
    ],
    "title": "ComplianceResponse",
    "description": "Réponse statut conformité (routes /v1/)."
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /v1/companies/{siren}/alerts

Get Alerts V1

Description

Get BODACC alerts for a company, paginated.

Input parameters

Parameter In Type Default Nullable Description
limit query integer 20 No
offset query integer 0 No
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Responses

[
    {}
]
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "type": "array",
    "items": {
        "type": "object",
        "additionalProperties": true
    },
    "title": "Response Get Alerts V1 V1 Companies  Siren  Alerts Get"
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

POST /v1/companies/track

Track Company

Description

Start tracking a company by SIREN for the caller's own tenant.

The tenant is always the authenticated caller's (_auth.tenant_id), never request.tenant_id: trusting a tenant id supplied in the request body would let any authenticated caller write into another tenant's partition. The body field is accepted for backward compatibility but its value is ignored — no ownership is inferred from it, so it deliberately never causes a mismatch/403 to distinguish "no such field" from "wrong tenant".

Input parameters

Parameter In Type Default Nullable Description
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Request body

{
    "siren": "string",
    "tenant_id": "string"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "siren": {
            "type": "string",
            "pattern": "^\\d{9}$",
            "title": "Siren"
        },
        "tenant_id": {
            "type": "string",
            "title": "Tenant Id"
        }
    },
    "type": "object",
    "required": [
        "siren",
        "tenant_id"
    ],
    "title": "TrackRequest",
    "description": "Requête de suivi d'entreprise."
}

Responses

{
    "siren": "string",
    "tenant_id": "string",
    "tracked": true
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "siren": {
            "type": "string",
            "title": "Siren"
        },
        "tenant_id": {
            "type": "string",
            "title": "Tenant Id"
        },
        "tracked": {
            "type": "boolean",
            "title": "Tracked",
            "default": true
        }
    },
    "type": "object",
    "required": [
        "siren",
        "tenant_id"
    ],
    "title": "TrackResponse"
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

POST /v1/companies

Add Company

Input parameters

Parameter In Type Default Nullable Description
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Request body

{
    "siren": "string",
    "siret": null,
    "name": "string",
    "legal_form": null,
    "naf_code": null,
    "naf_label": null,
    "address": null,
    "postal_code": null,
    "city": null,
    "creation_date": null,
    "workforce_bracket": null,
    "is_active": true
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "siren": {
            "type": "string",
            "pattern": "^\\d{9}$",
            "title": "Siren",
            "description": "SIREN (9 digits)"
        },
        "siret": {
            "anyOf": [
                {
                    "type": "string",
                    "pattern": "^\\d{14}$"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Siret",
            "description": "SIRET (14 digits)"
        },
        "name": {
            "type": "string",
            "title": "Name"
        },
        "legal_form": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Legal Form"
        },
        "naf_code": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Naf Code",
            "description": "Code APE/NAF"
        },
        "naf_label": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Naf Label"
        },
        "address": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Address"
        },
        "postal_code": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Postal Code"
        },
        "city": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "City"
        },
        "creation_date": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Creation Date"
        },
        "workforce_bracket": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Workforce Bracket"
        },
        "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "default": true
        }
    },
    "type": "object",
    "required": [
        "siren",
        "name"
    ],
    "title": "CompanyInfo",
    "description": "Informations d'une entreprise (depuis API SIRENE)."
}

Responses

{
    "siren": "string",
    "siret": null,
    "name": "string",
    "legal_form": null,
    "naf_code": null,
    "naf_label": null,
    "address": null,
    "postal_code": null,
    "city": null,
    "creation_date": null,
    "workforce_bracket": null,
    "is_active": true
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "siren": {
            "type": "string",
            "pattern": "^\\d{9}$",
            "title": "Siren",
            "description": "SIREN (9 digits)"
        },
        "siret": {
            "anyOf": [
                {
                    "type": "string",
                    "pattern": "^\\d{14}$"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Siret",
            "description": "SIRET (14 digits)"
        },
        "name": {
            "type": "string",
            "title": "Name"
        },
        "legal_form": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Legal Form"
        },
        "naf_code": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Naf Code",
            "description": "Code APE/NAF"
        },
        "naf_label": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Naf Label"
        },
        "address": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Address"
        },
        "postal_code": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Postal Code"
        },
        "city": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "City"
        },
        "creation_date": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Creation Date"
        },
        "workforce_bracket": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Workforce Bracket"
        },
        "is_active": {
            "type": "boolean",
            "title": "Is Active",
            "default": true
        }
    },
    "type": "object",
    "required": [
        "siren",
        "name"
    ],
    "title": "CompanyInfo",
    "description": "Informations d'une entreprise (depuis API SIRENE)."
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

POST /v1/companies/lookup

Lookup

Input parameters

Parameter In Type Default Nullable Description
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Request body

{
    "siren": null,
    "siret": null,
    "name": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "siren": {
            "anyOf": [
                {
                    "type": "string",
                    "pattern": "^\\d{9}$"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Siren",
            "description": "SIREN (9 digits)"
        },
        "siret": {
            "anyOf": [
                {
                    "type": "string",
                    "pattern": "^\\d{14}$"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Siret",
            "description": "SIRET (14 digits)"
        },
        "name": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Name",
            "description": "Raison sociale (recherche partielle)"
        }
    },
    "type": "object",
    "title": "CompanyLookupRequest",
    "description": "Requête de recherche d'entreprise."
}

Responses

{
    "results": [
        {
            "siren": "string",
            "siret": null,
            "name": "string",
            "legal_form": null,
            "naf_code": null,
            "naf_label": null,
            "address": null,
            "postal_code": null,
            "city": null,
            "creation_date": null,
            "workforce_bracket": null,
            "is_active": true
        }
    ],
    "total": 0
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "results": {
            "items": {
                "$ref": "#/components/schemas/CompanyInfo"
            },
            "type": "array",
            "title": "Results"
        },
        "total": {
            "type": "integer",
            "title": "Total"
        }
    },
    "type": "object",
    "required": [
        "results",
        "total"
    ],
    "title": "CompanyLookupResponse",
    "description": "Réponse de recherche d'entreprise."
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /v1/companies/{siren}/documents/compliance

Get Document Compliance

Input parameters

Parameter In Type Default Nullable Description
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Responses

{
    "siren": "string",
    "status": "compliant",
    "documents": [
        {
            "id": null,
            "company_siren": "string",
            "document_type": "kbis",
            "filename": null,
            "upload_date": null,
            "issue_date": null,
            "expiry_date": null,
            "status": null,
            "verification_code": null,
            "notes": null
        }
    ],
    "alerts": [
        {
            "id": null,
            "company_siren": "string",
            "company_name": "string",
            "alert_type": "document_expiring",
            "message": "string",
            "severity": "string",
            "created_at": null,
            "resolved": true
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "siren": {
            "type": "string",
            "title": "Siren"
        },
        "status": {
            "$ref": "#/components/schemas/ComplianceStatus"
        },
        "documents": {
            "items": {
                "$ref": "#/components/schemas/ComplianceDocument"
            },
            "type": "array",
            "title": "Documents"
        },
        "alerts": {
            "items": {
                "$ref": "#/components/schemas/Alert"
            },
            "type": "array",
            "title": "Alerts"
        }
    },
    "type": "object",
    "required": [
        "siren",
        "status",
        "documents",
        "alerts"
    ],
    "title": "DocumentComplianceResponse"
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

POST /v1/companies/{siren}/documents

Add Document

Input parameters

Parameter In Type Default Nullable Description
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Request body

{
    "id": null,
    "company_siren": "string",
    "document_type": "kbis",
    "filename": null,
    "upload_date": null,
    "issue_date": null,
    "expiry_date": null,
    "status": "compliant",
    "verification_code": null,
    "notes": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "id": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Id"
        },
        "company_siren": {
            "type": "string",
            "title": "Company Siren"
        },
        "document_type": {
            "$ref": "#/components/schemas/DocumentType"
        },
        "filename": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Filename"
        },
        "upload_date": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Upload Date"
        },
        "issue_date": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Issue Date"
        },
        "expiry_date": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Expiry Date"
        },
        "status": {
            "$ref": "#/components/schemas/ComplianceStatus",
            "default": "pending"
        },
        "verification_code": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Verification Code",
            "description": "Code de vérification URSSAF (15 chars)"
        },
        "notes": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Notes"
        }
    },
    "type": "object",
    "required": [
        "company_siren",
        "document_type"
    ],
    "title": "ComplianceDocument",
    "description": "Document de conformité d'une entreprise."
}

Responses

{
    "id": null,
    "company_siren": "string",
    "document_type": "kbis",
    "filename": null,
    "upload_date": null,
    "issue_date": null,
    "expiry_date": null,
    "status": "compliant",
    "verification_code": null,
    "notes": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "id": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Id"
        },
        "company_siren": {
            "type": "string",
            "title": "Company Siren"
        },
        "document_type": {
            "$ref": "#/components/schemas/DocumentType"
        },
        "filename": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Filename"
        },
        "upload_date": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Upload Date"
        },
        "issue_date": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Issue Date"
        },
        "expiry_date": {
            "anyOf": [
                {
                    "type": "string",
                    "format": "date"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Expiry Date"
        },
        "status": {
            "$ref": "#/components/schemas/ComplianceStatus",
            "default": "pending"
        },
        "verification_code": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Verification Code",
            "description": "Code de vérification URSSAF (15 chars)"
        },
        "notes": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Notes"
        }
    },
    "type": "object",
    "required": [
        "company_siren",
        "document_type"
    ],
    "title": "ComplianceDocument",
    "description": "Document de conformité d'une entreprise."
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /v1/companies/{siren}/documents

Get Documents

Input parameters

Parameter In Type Default Nullable Description
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Responses

[
    {
        "id": null,
        "company_siren": "string",
        "document_type": "kbis",
        "filename": null,
        "upload_date": null,
        "issue_date": null,
        "expiry_date": null,
        "status": "compliant",
        "verification_code": null,
        "notes": null
    }
]
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "type": "array",
    "items": {
        "$ref": "#/components/schemas/ComplianceDocument"
    },
    "title": "Response Get Documents V1 Companies  Siren  Documents Get"
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /v1/alerts

Get Alerts

Input parameters

Parameter In Type Default Nullable Description
limit query integer 50 No
offset query integer 0 No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Responses

[
    {
        "id": null,
        "company_siren": "string",
        "company_name": "string",
        "alert_type": "document_expiring",
        "message": "string",
        "severity": "string",
        "created_at": null,
        "resolved": true
    }
]
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "type": "array",
    "items": {
        "$ref": "#/components/schemas/Alert"
    },
    "title": "Response Get Alerts V1 Alerts Get"
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

POST /v1/companies/{siren}/bank-accounts

Register Bank Account

Description

Control a supplier's bank details: IBAN validity, holder vs SIRENE, change vs history.

Input parameters

Parameter In Type Default Nullable Description
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Request body

{
    "iban": "string",
    "bic": null,
    "holder_name": null,
    "source": "manual"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "iban": {
            "type": "string",
            "maxLength": 42,
            "minLength": 15,
            "title": "Iban"
        },
        "bic": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Bic"
        },
        "holder_name": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Holder Name"
        },
        "source": {
            "type": "string",
            "enum": [
                "manual",
                "rib_document"
            ],
            "title": "Source",
            "default": "manual"
        }
    },
    "type": "object",
    "required": [
        "iban"
    ],
    "title": "BankAccountIn"
}

Responses

{
    "account": {
        "id": "string",
        "tenant_id": "string",
        "company_siren": "string",
        "iban_masked": "string",
        "iban_hash": "string",
        "bic": null,
        "bank_name": null,
        "country": null,
        "holder_name": null,
        "holder_match": "match",
        "source": "string",
        "verdict": "ok",
        "reasons": [
            "string"
        ],
        "is_current": true,
        "first_seen": "2022-04-13T15:42:05.901Z",
        "last_seen": "2022-04-13T15:42:05.901Z"
    },
    "iban_check": {
        "valid": true,
        "iban_masked": "string",
        "country": null,
        "bank_code": null,
        "bank_name": null,
        "bic": null,
        "errors": [
            "string"
        ]
    },
    "changed_from_previous": true,
    "previous_iban_masked": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "account": {
            "$ref": "#/components/schemas/BankAccount"
        },
        "iban_check": {
            "$ref": "#/components/schemas/IbanCheck"
        },
        "changed_from_previous": {
            "type": "boolean",
            "title": "Changed From Previous",
            "default": false
        },
        "previous_iban_masked": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Previous Iban Masked"
        }
    },
    "type": "object",
    "required": [
        "account",
        "iban_check"
    ],
    "title": "BankAccountVerdict"
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /v1/companies/{siren}/bank-accounts

List Bank Accounts

Input parameters

Parameter In Type Default Nullable Description
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Responses

[
    {
        "id": "string",
        "tenant_id": "string",
        "company_siren": "string",
        "iban_masked": "string",
        "iban_hash": "string",
        "bic": null,
        "bank_name": null,
        "country": null,
        "holder_name": null,
        "holder_match": "match",
        "source": "string",
        "verdict": "ok",
        "reasons": [
            "string"
        ],
        "is_current": true,
        "first_seen": "2022-04-13T15:42:05.901Z",
        "last_seen": "2022-04-13T15:42:05.901Z"
    }
]
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "type": "array",
    "items": {
        "$ref": "#/components/schemas/BankAccount"
    },
    "title": "Response List Bank Accounts V1 Companies  Siren  Bank Accounts Get"
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

POST /v1/companies/{siren}/bank-accounts/from-document

Register Bank Account From Document

Description

Read a RIB (PDF/image) through doc-extract, then run the same bank account control.

Input parameters

Parameter In Type Default Nullable Description
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Request body

{
    "file": "string"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the request body
{
    "properties": {
        "file": {
            "type": "string",
            "contentMediaType": "application/octet-stream",
            "title": "File"
        }
    },
    "type": "object",
    "required": [
        "file"
    ],
    "title": "Body_register_bank_account_from_document_v1_companies__siren__bank_accounts_from_document_post"
}

Responses

{
    "account": {
        "id": "string",
        "tenant_id": "string",
        "company_siren": "string",
        "iban_masked": "string",
        "iban_hash": "string",
        "bic": null,
        "bank_name": null,
        "country": null,
        "holder_name": null,
        "holder_match": "match",
        "source": "string",
        "verdict": "ok",
        "reasons": [
            "string"
        ],
        "is_current": true,
        "first_seen": "2022-04-13T15:42:05.901Z",
        "last_seen": "2022-04-13T15:42:05.901Z"
    },
    "iban_check": {
        "valid": true,
        "iban_masked": "string",
        "country": null,
        "bank_code": null,
        "bank_name": null,
        "bic": null,
        "errors": [
            "string"
        ]
    },
    "changed_from_previous": true,
    "previous_iban_masked": null
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "account": {
            "$ref": "#/components/schemas/BankAccount"
        },
        "iban_check": {
            "$ref": "#/components/schemas/IbanCheck"
        },
        "changed_from_previous": {
            "type": "boolean",
            "title": "Changed From Previous",
            "default": false
        },
        "previous_iban_masked": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Previous Iban Masked"
        }
    },
    "type": "object",
    "required": [
        "account",
        "iban_check"
    ],
    "title": "BankAccountVerdict"
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /v1/companies/{siren}/sanctions

Get Sanctions V1

Description

Screen the company and its published directors against the asset-freeze register.

Input parameters

Parameter In Type Default Nullable Description
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Responses

{
    "siren": "string",
    "hits": [
        {
            "entry": {
                "registre_id": 0,
                "nature": "person",
                "name": "string",
                "first_names": [
                    "string"
                ],
                "aliases": [
                    "string"
                ]
            },
            "matched": "string",
            "score": 10.12,
            "subject": "company"
        }
    ],
    "list_date": null,
    "screened_at": "2022-04-13T15:42:05.901Z",
    "sources_unavailable": [
        "string"
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "siren": {
            "type": "string",
            "title": "Siren"
        },
        "hits": {
            "items": {
                "$ref": "#/components/schemas/SanctionsHit"
            },
            "type": "array",
            "title": "Hits"
        },
        "list_date": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "List Date"
        },
        "screened_at": {
            "type": "string",
            "format": "date-time",
            "title": "Screened At"
        },
        "sources_unavailable": {
            "items": {
                "type": "string"
            },
            "type": "array",
            "title": "Sources Unavailable"
        }
    },
    "type": "object",
    "required": [
        "siren",
        "hits",
        "screened_at"
    ],
    "title": "SanctionsScreening"
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

GET /v1/companies/{siren}/risk

Get Risk V1

Description

Combine every control into one risk assessment — a control, never an authorization.

verdict reports what the underlying checks found (SIRENE status, BODACC alerts, document compliance, bank-account control, sanctions screening); it is not a payment decision and this route never blocks anything on the caller's behalf.

Input parameters

Parameter In Type Default Nullable Description
siren path string No
X-API-Key header No
X-Internal-Service header No
X-Tenant-ID header No

Responses

{
    "siren": "string",
    "verdict": "ok",
    "reasons": [
        "string"
    ],
    "checks": {},
    "company": null,
    "bank_account": null,
    "sanctions_hits": 0,
    "documents_status": null,
    "bodacc_alerts": 0,
    "sources_unavailable": [
        "string"
    ],
    "checked_at": "2022-04-13T15:42:05.901Z"
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "siren": {
            "type": "string",
            "title": "Siren"
        },
        "verdict": {
            "type": "string",
            "enum": [
                "ok",
                "to_review",
                "blocking",
                "unknown"
            ],
            "title": "Verdict",
            "description": "Résultat de l'évaluation, pas une décision : 'blocking' signale un fait de niveau bloquant relevé par le contrôle (ex. entreprise radiée, sanction), jamais un refus de paiement — ce service n'autorise ni ne bloque rien."
        },
        "reasons": {
            "items": {
                "type": "string"
            },
            "type": "array",
            "title": "Reasons"
        },
        "checks": {
            "additionalProperties": {
                "type": "string"
            },
            "type": "object",
            "title": "Checks"
        },
        "company": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/Company"
                },
                {
                    "type": "null"
                }
            ]
        },
        "bank_account": {
            "anyOf": [
                {
                    "$ref": "#/components/schemas/BankAccount"
                },
                {
                    "type": "null"
                }
            ]
        },
        "sanctions_hits": {
            "type": "integer",
            "title": "Sanctions Hits",
            "default": 0
        },
        "documents_status": {
            "anyOf": [
                {
                    "type": "string"
                },
                {
                    "type": "null"
                }
            ],
            "title": "Documents Status"
        },
        "bodacc_alerts": {
            "type": "integer",
            "title": "Bodacc Alerts",
            "default": 0
        },
        "sources_unavailable": {
            "items": {
                "type": "string"
            },
            "type": "array",
            "title": "Sources Unavailable"
        },
        "checked_at": {
            "type": "string",
            "format": "date-time",
            "title": "Checked At"
        }
    },
    "type": "object",
    "required": [
        "siren",
        "verdict",
        "checked_at"
    ],
    "title": "RiskReport",
    "description": "Synthèse de risque fournisseur : un contrôle, pas une décision.\n\n`verdict` est le résultat d'une **évaluation** combinant l'identité\nSIRENE, les procédures BODACC, la conformité documentaire, le contrôle du\ncompte bancaire et le criblage sanctions (voir `services/risk.py` pour la\nrègle d'ordre exacte). Ce n'est jamais une autorisation ou une garantie de\npaiement : l'intégrant reste seul décisionnaire de la suite à donner."
}

{
    "detail": [
        {
            "loc": [
                null
            ],
            "msg": "string",
            "type": "string",
            "input": null,
            "ctx": {}
        }
    ]
}
⚠️ This example has been generated automatically from the schema and it is not accurate. Refer to the schema for more information.

Schema of the response body
{
    "properties": {
        "detail": {
            "items": {
                "$ref": "#/components/schemas/ValidationError"
            },
            "type": "array",
            "title": "Detail"
        }
    },
    "type": "object",
    "title": "HTTPValidationError"
}

Schemas

Alert

Name Type Description
alert_type AlertType
company_name string
company_siren string
created_at
id
message string
resolved boolean
severity string

AlertType

Type: string

BankAccount

Name Type Description
bank_name
bic
company_siren string
country
first_seen string(date-time)
holder_match string
holder_name
iban_hash string
iban_masked string
id string
is_current boolean
last_seen string(date-time)
reasons Array<string>
source string
tenant_id string
verdict string

BankAccountIn

Name Type Description
bic
holder_name
iban string
source string

BankAccountVerdict

Name Type Description
account BankAccount
changed_from_previous boolean
iban_check IbanCheck
previous_iban_masked

Body_register_bank_account_from_document_v1_companies__siren__bank_accounts_from_document_post

Name Type Description
file string

Company

Name Type Description
address
creation_date
legal_form
naf_code
name string
siren string
siret
status string

CompanyInfo

Name Type Description
address
city
creation_date
is_active boolean
legal_form
naf_code Code APE/NAF
naf_label
name string
postal_code
siren string SIREN (9 digits)
siret SIRET (14 digits)
workforce_bracket

CompanyLookupRequest

Name Type Description
name Raison sociale (recherche partielle)
siren SIREN (9 digits)
siret SIRET (14 digits)

CompanyLookupResponse

Name Type Description
results Array<CompanyInfo>
total integer

ComplianceDocument

Name Type Description
company_siren string
document_type DocumentType
expiry_date
filename
id
issue_date
notes
status ComplianceStatus
upload_date
verification_code Code de vérification URSSAF (15 chars)

ComplianceResponse

Name Type Description
alerts_count integer
checked_at string(date-time)
company
compliance_status string
data_freshness string
siren string
sources_unavailable Array<string>
warnings Array<string>

ComplianceStatus

Type: string

DocumentComplianceResponse

Name Type Description
alerts Array<Alert>
documents Array<ComplianceDocument>
siren string
status ComplianceStatus

DocumentType

Type: string

HealthResponse

Name Type Description
service string
status string

HTTPValidationError

Name Type Description
detail Array<ValidationError>

IbanCheck

Name Type Description
bank_code
bank_name
bic
country
errors Array<string>
iban_masked string
valid boolean

RiskReport

Name Type Description
bank_account
bodacc_alerts integer
checked_at string(date-time)
checks
company
documents_status
reasons Array<string>
sanctions_hits integer
siren string
sources_unavailable Array<string>
verdict string Résultat de l'évaluation, pas une décision : 'blocking' signale un fait de niveau bloquant relevé par le contrôle (ex. entreprise radiée, sanction), jamais un refus de paiement — ce service n'autorise ni ne bloque rien.

SanctionEntry

Name Type Description
aliases Array<string>
first_names Array<string>
name string
nature string
registre_id integer

SanctionsHit

Name Type Description
entry SanctionEntry
matched string
score number
subject string

SanctionsScreening

Name Type Description
hits Array<SanctionsHit>
list_date
screened_at string(date-time)
siren string
sources_unavailable Array<string>

TrackRequest

Name Type Description
siren string
tenant_id string

TrackResponse

Name Type Description
siren string
tenant_id string
tracked boolean

ValidationError

Name Type Description
ctx
input
loc Array<>
msg string
type string