# French Public Contract Expiry & Renewal Signals

Estimates upcoming public-contract end dates using DECP notification, initial duration and published duration modifications, with an explicit confidence level.

## Endpoint

- Method: `POST`
- URL: `https://api.helpmyagent.com/v1/procurement/fr/deadlines`
- Price: `0.010 USD` / call

## Machine discovery

- llms.txt: https://helpmyagent.com/llms.txt
- OpenAPI 3.1: https://api.helpmyagent.com/openapi.json
- capabilities.json: https://helpmyagent.com/capabilities.json
- MCP: https://helpmyagent.com/mcp
- RFC 9727: https://helpmyagent.com/.well-known/api-catalog
- pricing.json: https://helpmyagent.com/pricing.json
- x402: https://helpmyagent.com/.well-known/x402
- x402-service.json: https://helpmyagent.com/.well-known/x402-service.json
- Health status: https://helpmyagent.com/health

## x402 payment methods

- USDC on `eip155:8453`
- RLUSD on `xrpl:0`

## Coverage

FR

## Use when

- Find French public contracts likely to expire or renew soon, taking published DECP duration modifications into account.

## Avoid when

- You need open tenders rather than awarded-contract expiry signals; use procurement/fr/search.

## Limitations

- End dates remain estimates; confidence is reduced when DECP reports a modification without a revised duration.
- Malformed or non-date DECP modification fields are ignored and an isolated modification identifier no longer creates a modification signal by itself.

## Example queries

- Which public contracts are likely to expire in the next 12 months, including published duration amendments?

## Freshness

```json
{
    "mode": "source_dependent"
}
```

## Sources

- [Données essentielles de la commande publique (DECP)](https://www.data.economie.gouv.fr)

## Input schema

```json
{
    "type": "object",
    "properties": {
        "cpv_prefix": {
            "type": "string",
            "pattern": "^[0-9]{1,8}$",
            "description": "Optional CPV code prefix used to restrict public-contract expiry estimates to a procurement segment."
        },
        "department": {
            "type": "string",
            "description": "Optional French department code used to restrict results geographically."
        },
        "min_months": {
            "type": "integer",
            "minimum": 0,
            "maximum": 60,
            "default": 0,
            "description": "Minimum number of months from now before the estimated contract end date. (minimum 0; maximum 60; default 0)."
        },
        "max_months": {
            "type": "integer",
            "minimum": 1,
            "maximum": 60,
            "default": 18,
            "description": "Maximum number of months from now before the estimated contract end date. (minimum 1; maximum 60; default 18)."
        },
        "limit": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50,
            "default": 25,
            "description": "Maximum number of records returned by this call. (minimum 1; maximum 50; default 25)."
        }
    },
    "additionalProperties": false,
    "description": "Structured input parameters for the procurement/fr/deadlines API."
}
```

## Output schema

```json
{
    "type": "object",
    "properties": {
        "cpv_prefix": {
            "type": [
                "string",
                "null"
            ],
            "description": "Structured value returned for “cpv prefix” as defined by this API contract."
        },
        "department": {
            "type": [
                "string",
                "null"
            ],
            "description": "Structured value returned for “department” as defined by this API contract."
        },
        "min_months": {
            "type": "integer",
            "description": "Structured value returned for “min months” as defined by this API contract."
        },
        "max_months": {
            "type": "integer",
            "description": "Structured value returned for “max months” as defined by this API contract."
        },
        "source_status": {
            "type": "string",
            "enum": [
                "ok",
                "unavailable"
            ],
            "description": "Availability status of the relevant upstream public source. (allowed values: ok, unavailable)."
        },
        "returned_count": {
            "type": [
                "integer",
                "null"
            ],
            "description": "Number of records included in this response."
        },
        "contracts": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "contract_id": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Structured value returned for “contract id” as defined by this API contract."
                    },
                    "object": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Structured value returned for “object” as defined by this API contract."
                    },
                    "cpv": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Structured value returned for “cpv” as defined by this API contract."
                    },
                    "buyer_siret": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Structured value returned for “buyer siret” as defined by this API contract."
                    },
                    "buyer_name": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Structured value returned for “buyer name” as defined by this API contract."
                    },
                    "holder_sirets": {
                        "type": "array",
                        "items": {
                            "type": "string"
                        },
                        "description": "Structured value returned for “holder sirets” as defined by this API contract."
                    },
                    "amount": {
                        "type": [
                            "number",
                            "integer",
                            "null"
                        ],
                        "description": "Structured value returned for “amount” as defined by this API contract."
                    },
                    "notification_date": {
                        "type": "string",
                        "description": "Structured value returned for “notification date” as defined by this API contract."
                    },
                    "duration_months": {
                        "type": "integer",
                        "description": "Structured value returned for “duration months” as defined by this API contract."
                    },
                    "effective_duration_months": {
                        "type": "integer",
                        "description": "Structured value returned for “effective duration months” as defined by this API contract."
                    },
                    "duration_source": {
                        "type": "string",
                        "enum": [
                            "decp_initial",
                            "decp_modification"
                        ],
                        "description": "Structured value returned for “duration source” as defined by this API contract. (allowed values: decp_initial, decp_modification)."
                    },
                    "modification_detected": {
                        "type": "boolean",
                        "description": "Structured value returned for “modification detected” as defined by this API contract."
                    },
                    "modification_id": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Structured value returned for “modification id” as defined by this API contract."
                    },
                    "modification_date": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Structured value returned for “modification date” as defined by this API contract."
                    },
                    "modification_object": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Structured value returned for “modification object” as defined by this API contract."
                    },
                    "estimated_end_date": {
                        "type": "string",
                        "description": "Structured value returned for “estimated end date” as defined by this API contract."
                    },
                    "estimated_end_confidence": {
                        "type": "string",
                        "enum": [
                            "low",
                            "medium",
                            "high"
                        ],
                        "description": "Structured value returned for “estimated end confidence” as defined by this API contract. (allowed values: low, medium, high)."
                    },
                    "months_until_end": {
                        "type": "integer",
                        "description": "Structured value returned for “months until end” as defined by this API contract."
                    },
                    "execution_location": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "description": "Structured value returned for “execution location” as defined by this API contract."
                    }
                },
                "additionalProperties": false,
                "required": [
                    "contract_id",
                    "object",
                    "cpv",
                    "buyer_siret",
                    "buyer_name",
                    "holder_sirets",
                    "amount",
                    "notification_date",
                    "duration_months",
                    "effective_duration_months",
                    "duration_source",
                    "modification_detected",
                    "modification_id",
                    "modification_date",
                    "modification_object",
                    "estimated_end_date",
                    "estimated_end_confidence",
                    "months_until_end",
                    "execution_location"
                ]
            },
            "description": "Normalized public-contract records returned by the endpoint."
        },
        "generated_at": {
            "type": "string",
            "description": "UTC timestamp at which this derived result was generated."
        },
        "limitations": {
            "type": "array",
            "items": {
                "type": "string"
            },
            "description": "Known interpretation, source-coverage or freshness limitations for this result."
        }
    },
    "additionalProperties": false,
    "required": [
        "cpv_prefix",
        "department",
        "min_months",
        "max_months",
        "source_status",
        "returned_count",
        "contracts",
        "generated_at"
    ],
    "description": "Structured result returned by the procurement/fr/deadlines API."
}
```

## Billing policy

```json
{
    "charge_on": "valid_result",
    "no_charge_on_empty_result": true,
    "no_charge_on_error": true
}
```
