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
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
}
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/."
}
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"
}
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/)."
}
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
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
Schema of the request body
Responses
Schema of the response body
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
}
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
}
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)."
}
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
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
}
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."
}
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
}
]
}
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"
}
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
}
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
}
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."
}
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
}
]
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
}
]
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
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
}
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"
}
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"
}
]
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
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
}
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"
}
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"
]
}
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"
}
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"
}
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."
}
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 |