Company Verifier API¶
Port : 8007 | NodePort : 30007 | Repo : solyntek/djinn/services/djinn-company-verifier
Vérification continue des entreprises et suivi de la conformité fournisseurs.
Endpoints¶
Données live (SIRENE / BODACC)¶
| Méthode | Route | Description |
|---|---|---|
GET |
/health |
Health check (inclut état circuit breakers) |
GET |
/v1/companies/{siren} |
Infos entreprise (SIRENE, live) |
GET |
/v1/companies/{siren}/compliance |
Statut conformité live (SIRENE + BODACC) |
GET |
/v1/companies/{siren}/alerts |
Alertes BODACC (procédures collectives), paginées |
POST |
/v1/companies/track |
Démarrer le suivi d'un SIREN pour un tenant |
Suivi documentaire (store local)¶
| Méthode | Route | Description |
|---|---|---|
POST |
/v1/companies |
Enregistrer le profil d'une entreprise suivie |
POST |
/v1/companies/lookup |
Rechercher par SIREN/SIRET/nom (entreprises suivies) |
GET |
/v1/companies/{siren}/documents/compliance |
Conformité documentaire (documents + alertes) |
POST |
/v1/companies/{siren}/documents |
Upload document conformité |
GET |
/v1/companies/{siren}/documents |
Lister documents |
GET |
/v1/alerts |
Alertes d'expiration de documents |
Conformité live vs documentaire
GET /v1/companies/{siren}/compliance interroge les sources externes SIRENE et BODACC en
temps réel (statut : compliant / at_risk / non_compliant / unknown, avec dégradation
gracieuse si une source est indisponible). GET /v1/companies/{siren}/documents/compliance
évalue le suivi documentaire local (Kbis, URSSAF, etc.) de l'entreprise.
Documents de conformité¶
| Type | Validité | Source |
|---|---|---|
| Kbis | 3 mois | Infogreffe / INPI |
| Attestation URSSAF | 6 mois | Upload fournisseur |
| Attestation fiscale | 1 an | Upload fournisseur |
| RC Pro | 1 an | Upload fournisseur |
APIs externes¶
| API | Coût | Données |
|---|---|---|
| SIRENE (INSEE) | Gratuit | SIREN, raison sociale, NAF, effectifs |
| BODACC (DILA) | Gratuit | Annonces légales, procédures collectives |
| INPI/RNE | Gratuit | Dirigeants, actes |
| Pappers | Payant | Comptes annuels, bénéficiaires effectifs |
Référence interactive¶
Générée à chaque build depuis la spec versionnée openapi/company-verifier-v1.json (ADR-011) — aucune route documentée à la main.
Djinn Company Verifier 0.1.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 |
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 |
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 |
Responses
POST /v1/companies/track¶
Track Company
Description
Start tracking a company by SIREN for a given tenant.
Input parameters
| Parameter | In | Type | Default | Nullable | Description |
|---|---|---|---|---|---|
X-API-Key |
header | No |
Request body
Schema of the request body
Responses
Schema of the response body
POST /v1/companies¶
Add Company
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
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 |
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 |
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 |
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 |
Responses
[
{
"id": null,
"company_siren": "string",
"company_name": "string",
"alert_type": "document_expiring",
"message": "string",
"severity": "string",
"created_at": null,
"resolved": true
}
]
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
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> |
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 |