Upcoming French public-contract EXPIRATIONS — the predictive layer over DECP ope
Upcoming French public-contract EXPIRATIONS — the predictive layer over DECP open data: contracts whose estimated end date falls inside your window (fenetre_mois, 1-24 months), filterable by CPV prefix (cpv=45) and department, with buyer, incumbent holders, lot number, declared subcontracting, and amounts flagged firm price or ENVELOPE (call-offs, subsequent contracts, tranches, framework ceiling). Buyers re-tender 4 to 9 months before expiry: anticipation BEFORE publication. 50 per page.
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
GET https://api.sirenic.eu/v1/marches/expirations
| Category | Market data |
|---|---|
| Provider host | api.sirenic.eu |
| Networks | eip155:8453 |
| Payment schemes | exact |
| Self-reported calls, 30 days | 11 from 1 payers (the provider's figure, not ours) |
Our checks, last 30 days
| Day | Result | HTTP | Asked | Time |
|---|---|---|---|---|
| 2026-09-24 | valid payment request | 402 | $0.05 | 911 ms |
Example input (from the provider)
{
"method": "GET",
"queryParams": {
"cpv": "45",
"fenetre_mois": "6"
},
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"method": {
"enum": [
"GET"
],
"type": "string"
},
"queryParams": {
"properties": {
"cpv": {
"description": "Optional CPV prefix, 2-8 digits (45 = construction, 9091 = cleaning)",
"type": "string"
},
"departement": {
"description": "Optional French department code: 2-3 digits, 2A or 2B (e.g. 69)",
"type": "string"
},
"fenetre_mois": {
"description": "Window in months, 1-24 (default 12): contracts whose estimated end falls inside",
"type": "string"
},
"page": {
"description": "Page number, 50 contracts per page (default 1)",
"type": "string"
}
},
"required": [],
"type": "object"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}