Upcoming public-contract expiries
The opposite of an alert on a published notice: buyers typically re-tender 4 to 9 months before expiry, and that is the window this route opens. The framework-agreement flag is the field to read first: an expiring framework agreement is not re-tendered like an ordinary contract.
See a real response (free) Get the quote for /v1/marches/expirations
What the route returns
Catalogue description, exactly as agents read it:
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.
Expected identifier
No identifier: fenetre_mois from 1 to 24, plus optionally a cpv prefix and a department.
A wrongly formatted identifier in the path returns 400 and is not billed — but it costs you a round trip. It is the leading cause of failed calls on the foreign routes. A search parameter, by contrast, is cleaned up: unsupported characters are stripped and the usable query is served.
Extract from a genuinely paid response
Dated snapshot from 2026-09-02, truncated to one item per array. It is not live data. The full extract is served free of charge from the samples surface, and the schema from the OpenAPI document.
{
"filtres": {
"cpv": "45",
"departement": null,
"fenetre_mois": 6
},
"total_marches": 34249,
"page": 1,
"pages": 685,
"marches": [
{
"id": "2777529",
"objet": "Travaux de menuiserie pour l'accueil de la DRFIP 44",
"acheteur": {
"siret": "13001292500017",
"nom": "DIRECTION REGIONALE FINANCES PUBLIQUES PAYS DE LA LOIRE ET DEPARTEMENT LOIRE ATLANTIQUE"
},
"montant": 9788.8,
"accord_cadre": false,
"montant_est_enveloppe": true,
"modalites_execution": "Marchés subséquents",
"sous_traitance_declaree": false,
"lot_numero": null,
"date_notification": "2025-09-02",
"duree_mois": 12,
"date_fin_estimee": "2026-09-02",
"code_cpv": "45421100-5",
"departement": null,
"titulaires_sortants": [
{
"siren": "501383251",
"nom": "SOGEA ATLANTIQUE BTP"
}
]
}
]
}
Price and billing
Price: $0.05. The authoritative amount is the one in the 402 quote returned by the route itself — not this text, which derives from the same grid but is still just a page.
An error response cancels the payment: a 400, 404 or 503 is never billed. An upstream outage closes the route with a 503 rather than serving a degraded response.
Calling the route
# 1. Le devis, sans rien payer : la route répond 402 avec son montant
curl -i https://api.sirenic.eu/v1/marches/expirations
# 2. L'appel réglé — le client x402 paie le devis et rejoue la requête
npx x402-fetch https://api.sirenic.eu/v1/marches/expirations
# 3. Ou en MCP, dans Claude Code / Cursor / un agent
claude mcp add --transport http sirenic https://api.sirenic.eu/mcp
What this route does not do
End dates are estimated from the notification date and the declared duration. This is not an official re-tendering calendar, and some upstream rows are incomplete.
Neighbouring routes
/v1/acheteur/{siret}/profil— $0.02/v1/entreprise/{siren}/concurrents-marches— $0.02/v1/entreprise/{siren}/marches-publics— $0.01
How you pay
Every route is paid per call, in USDC or EURC on the Base network, over the x402 protocol: no account to create, no API key, no subscription. The first call returns a 402 quote your client settles, then replays the call. A failed call is never billed.
Would you rather have a euro invoice and prepaid credits? That is in preparation, and we will not announce a date until it is open. Write to contact@sirenic.eu and we will let you know when it opens.
Paid responses are Ed25519-signed: you can later prove what was served to you, and when. The whole catalogue is free to read in the OpenAPI document and in llms.txt.
One call, end to end
# Client x402 (npm) — le devis 402 est réglé et l'appel rejoué automatiquement
npx x402-fetch https://api.sirenic.eu/v1/entreprise/552032534
# Ou en MCP, dans Claude Code / Cursor
claude mcp add --transport http sirenic https://api.sirenic.eu/mcp
Routes used and pricing
| Route | Price | Sample | What it returns |
|---|---|---|---|
/v1/marches/expirations | $0.05 | free sample | 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. |
Contract end dates are estimates, computed from the notification date and the declared duration. This is not an official re-tendering calendar.
Take it further
No account to create, no key to request: the first step is free and shows you exactly what you would be buying.
See a real response (free) Get the quote for /v1/marches/expirations Get notified about euro packs
Read next
Volume figures on this page were measured in our database on 2026-08-19. They are dated snapshots, not live counters. · OpenAPI · llms.txt · Full route catalogue and pricing