# France Pesticide Products (E-Phy) - Authorised Uses & Doses (`eurodata-lab/france-pesticide-products-ephy`) Actor

Search the official French pesticide register (Anses E-Phy): authorised uses by crop and pest, doses, pre-harvest intervals, buffer zones, withdrawal dates.

- **URL**: https://apify.com/eurodata-lab/france-pesticide-products-ephy.md
- **Developed by:** [Cyril Naets](https://apify.com/eurodata-lab) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 product use returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does France Pesticide Products (E-Phy) do?

**France Pesticide Products (E-Phy)** searches the official **French pesticide register** (the E-Phy catalogue of plant protection products, run by Anses, the French agency for food, environmental and occupational health safety) and returns **one row per product and per authorised use**: crop, pest or disease, **authorised dose**, **pre-harvest interval**, maximum number of applications, **buffer zones** next to water, hazard statements, authorisation holder, and the **end-of-sale and end-of-use dates** of withdrawn products. It reads the archive that Anses publishes **every week** on data.gouv.fr and joins its files for you, so you get clean, filtered rows in seconds instead of unpacking and cross-referencing ten CSV files yourself.

Typical questions it answers: *"Which fungicides are authorised today against downy mildew on vines, at what dose and with which pre-harvest interval?"*, *"Which product uses must stop in the next 6 months?"*, *"Are the 300 products in my catalogue still authorised?"*

It covers the 13,700+ plant protection products, adjuvants and mixtures of the catalogue (about 1,800 authorised today) and their 81,000+ uses, authorised and withdrawn. No scraping, no proxy, no login: only the official open-data file.

### Why use France Pesticide Products (E-Phy)?

- **Agricultural distributors and cooperatives**: check that every product you sell is still authorised, and get warned before a product's sale or use ends (grace periods).
- **Farm management and agronomy software**: feed your app with authorised uses, doses, pre-harvest intervals and buffer zones per crop and pest, refreshed every week.
- **Agronomists, advisers and consultants**: list the authorised solutions for a crop and a pest, compare doses and constraints, filter biocontrol or organic products.
- **Garden centres and retailers**: list the products allowed in home gardens (amateur range).
- **Regulatory watch and market studies**: follow new Anses decisions, withdrawals and the portfolio of each authorisation holder.

What you get that the raw file does not give you: products, uses, hazard statements and conditions of use joined in **one row per product use**; filters by crop, pest, substance, function, holder, status, dates and labels; relative dates for scheduled runs ("uses ending in the next 6 months"); clean English field names, numbers and ISO dates; parsed active substances (name, English name, concentration); and **no personal data** (see the FAQ).

### What data can France Pesticide Products (E-Phy) extract?

One row per product use:

| Field | Description |
|---|---|
| `authorisationNumber` | French marketing authorisation number (AMM, 7 digits) |
| `productName` | Trade name of the product |
| `otherTradeNames` | Secondary trade names under the same authorisation |
| `productType` | `plantProtectionProduct`, `adjuvant`, `mixedProduct` or `tankMix` |
| `commercialType` | `reference`, `resale`, `secondBrand` or `generic` |
| `holder` | Company holding the authorisation (`null` when withheld) |
| `holderWithheld` | `true` when the holder is a private individual and its name is withheld |
| `productStatus` | `authorised` or `withdrawn` |
| `productWithdrawalDate` | Date the product authorisation was withdrawn |
| `firstAuthorisationDate` | Date of first authorisation |
| `referenceProductNumber` | Authorisation number of the reference product (second brands, resale permits) |
| `referenceProductName` | Name of the reference product |
| `userRange` | `professional` or `amateur` (home garden), when stated in the source |
| `gardenUse` | Allowed in home gardens ("Emploi autorisé dans les jardins") |
| `biocontrol` | On the French biocontrol list |
| `organicFarming` | Usable in organic farming |
| `lowRisk` | Low-risk product (article 47 of Regulation 1107/2009) |
| `productMentions` | Official mentions of the product (French) |
| `useRestrictions` | Legal restrictions of use (French), for example the neonicotinoid ban |
| `activeSubstances` | Active substances: `name` (French), `englishName`, `concentration`, `unit` |
| `activeSubstancesText` | Active substances as one text |
| `functions` | Functions of the product (French) |
| `functionsEnglish` | Functions of the product in English (Herbicide, Fungicide, Insecticide...) |
| `formulation` | Formulation type (French) |
| `usageLabel` | Full E-Phy use label: crop \* treatment \* pest |
| `crop` | Crop or situation of the use (French E-Phy wording) |
| `treatment` | Treatment type (`Trt Part.Aer.` = foliar treatment, `Désherbage` = weed control, `Trt Sem.` = seed treatment) |
| `target` | Pest, disease or weed targeted (or the herbicide context) |
| `usageStatus` | `authorised`, `provisional` or `withdrawn` |
| `usageDecisionDate` | Date of the latest Anses decision on this use |
| `bbchMin` | Earliest crop growth stage (BBCH scale) |
| `bbchMax` | Latest crop growth stage (BBCH scale) |
| `dose` | Authorised dose per application |
| `doseUnit` | Unit of the dose (L/ha, kg/ha, L/hL...) |
| `preHarvestIntervalDays` | Pre-harvest interval in days |
| `preHarvestIntervalBbch` | Pre-harvest interval as a growth stage, when given instead of days |
| `maxApplications` | Maximum number of applications |
| `minIntervalDays` | Minimum interval between applications in days |
| `endOfSaleDate` | Last day of sale for a withdrawn use |
| `endOfUseDate` | Last day of use for a withdrawn use |
| `daysUntilEndOfUse` | Days from the run date to the end-of-use date (negative when past) |
| `usageConditions` | Specific conditions for this use (French) |
| `bufferZoneWaterM` | Untreated buffer zone next to water, in metres |
| `bufferZoneArthropodsM` | Untreated buffer zone for non-target arthropods, in metres |
| `bufferZonePlantsM` | Untreated buffer zone for non-target plants, in metres |
| `hazardStatements` | Hazard statements (H codes) with their French wording |
| `hazardClasses` | Hazard classes and signal word (French) |
| `productConditions` | Conditions of use of the product (`category`, `text`); empty unless `includeProductConditions` is on |
| `sourceFileDate` | Publication date of the E-Phy archive used |
| `sourceUrl` | Page of the source dataset on data.gouv.fr |

Crop, pest, function and hazard labels are kept in French, exactly as Anses writes them, so they match the product labels and E-Phy; the main fields have English values (statuses, types, functions). You can download the results as JSON, CSV, Excel, XML or HTML, or read them through the Apify API.

### How to list the authorised products for a crop and a pest

1. Open the **Input** tab.
2. Enter a **Crop** (for example `Vigne` for vines, `Blé` for wheat, `Pomme de terre` for potatoes) and a **Pest, disease or treatment** (for example `Mildiou`, `Pucerons`, `Désherbage`).
3. Optionally pick a **Product function**, an **Active substance**, or tick **Only biocontrol products** or **Only products usable in organic farming**.
4. Keep **Product status** and **Use status** on **Authorised**, set **Maximum number of results**, and click **Start**.

To follow withdrawals, set **End of use on or after** to `today` and **End of use on or before** to `in 6 months`, choose **Sort by** = **End-of-use date (soonest first)**, and schedule the run every week: each run lists the uses that must stop in the next six months.

### How much does it cost to search the French pesticide register?

This Actor uses **pay-per-event** pricing: you pay only for the product uses returned.

| Event | Price | Equivalent |
|---|---|---|
| `result`: one product use returned | $0.015 | **$15 per 1,000 product uses** |
| `apify-actor-start`: run started (charged by Apify) | $0.00005 | $0.05 per 1,000 runs |

- Authorisation numbers not found and empty searches cost nothing.
- **Maximum number of results** caps every run, and Apify's maximum cost per run setting is respected: the run stops cleanly when your limit is reached.
- Example: the 171 authorised uses against downy mildew on vines cost about $2.57; all the authorised uses of the catalogue (about 18,500 rows) cost about $280.

### Input

All the filters you fill in are combined (a product use must match all of them). Leave everything empty to list all uses of all authorised products.

| Field | Type | Default | Description |
|---|---|---|---|
| `crop` | string | `""` (prefill `Vigne`) | Part of the crop name, French E-Phy wording, accents and case ignored |
| `target` | string | `""` (prefill `Mildiou`) | Part of the pest, disease or treatment type |
| `productName` | string | `""` | Part of the trade name or secondary trade name |
| `activeSubstance` | string | `""` | Part of an active substance name, French or English |
| `productFunction` | string | `any` | `any`, `herbicide`, `fungicide`, `insecticide`, `acaricide`, `molluscicide`, `nematicide`, `bactericide`, `growthRegulator`, `adjuvant`, `pheromone`, `repellent`, `rodenticide` or `defenceStimulator` |
| `holder` | string | `""` | Part of the authorisation holder's name (private individuals never match) |
| `authorisationNumbers` | array of strings | `[]` | Authorisation (AMM) numbers to check, 7 digits |
| `productStatus` | string | `authorised` | `authorised`, `withdrawn` or `any` |
| `usageStatus` | string | `authorised` | `authorised` (includes provisional), `withdrawn` or `any` |
| `endOfUseFrom` | string | `""` | End of use on or after: a date (`2026-12-31`), `today`, or a relative period (`+30 days`, `1 year ago`) |
| `endOfUseTo` | string | `""` | End of use on or before: a date or a relative period (`in 6 months`) |
| `decisionDateFrom` | string | `""` | Latest Anses decision on or after this date (`90 days ago`) |
| `gardenUseOnly` | boolean | `false` | Only products allowed in home gardens |
| `biocontrolOnly` | boolean | `false` | Only biocontrol products |
| `organicFarmingOnly` | boolean | `false` | Only products usable in organic farming |
| `includeProductConditions` | boolean | `false` | Add the full conditions of use of each product |
| `sortBy` | string | `sourceOrder` | `sourceOrder`, `productName`, `endOfUseDate` (soonest first) or `decisionDateDesc` (latest first) |
| `maxResults` | integer | `100` (prefill `10`) | Maximum number of product uses returned (1 to 100,000) |

When an end-of-use date is set, a product status of `authorised` is read as `any` and a use status of `authorised` as `withdrawn`, because only withdrawn uses have an end-of-use date.

Example input (the prefilled one): 10 authorised uses against downy mildew on vines.

```json
{
    "crop": "Vigne",
    "target": "Mildiou",
    "maxResults": 10
}
```

Example input for regulatory watch: the uses that must stop in the next 6 months, soonest first.

```json
{
    "endOfUseFrom": "today",
    "endOfUseTo": "in 6 months",
    "sortBy": "endOfUseDate",
    "maxResults": 1000
}
```

Example input to check a product list, including withdrawn products:

```json
{
    "authorisationNumbers": ["2180347", "2090137"],
    "productStatus": "any",
    "usageStatus": "any",
    "maxResults": 5000
}
```

### Output

Example of one product use (real record, run of 27 October 2026):

```json
{
    "authorisationNumber": "2250161",
    "productName": "BOUILLIE BORDELAISE 20 MICRO JARDIN",
    "otherTradeNames": [],
    "productType": "plantProtectionProduct",
    "commercialType": "secondBrand",
    "holder": "INDUSTRIAS QUIMICAS DEL VALLES",
    "holderWithheld": false,
    "productStatus": "authorised",
    "productWithdrawalDate": null,
    "firstAuthorisationDate": "2025-07-15",
    "referenceProductNumber": "2090137",
    "referenceProductName": "BORDO 20 MICRO",
    "userRange": "amateur",
    "gardenUse": true,
    "biocontrol": false,
    "organicFarming": true,
    "lowRisk": false,
    "productMentions": ["Production biologique amateur", "Emploi autorisé dans les jardins"],
    "useRestrictions": [],
    "activeSubstances": [{ "name": "bouillie bordelaise", "englishName": "Copper compounds", "concentration": 733.4, "unit": "g/kg" }],
    "activeSubstancesText": "bouillie bordelaise (Copper compounds) 733.4 g/kg",
    "functions": ["Fongicide"],
    "functionsEnglish": ["Fungicide"],
    "formulation": "Granulé dispersable",
    "usageLabel": "Vigne*Trt Part.Aer.*Mildiou(s)",
    "crop": "Vigne",
    "treatment": "Trt Part.Aer.",
    "target": "Mildiou(s)",
    "usageStatus": "authorised",
    "usageDecisionDate": "2025-07-15",
    "bbchMin": 15,
    "bbchMax": 91,
    "dose": 5,
    "doseUnit": "g/10 m²",
    "preHarvestIntervalDays": 21,
    "preHarvestIntervalBbch": null,
    "maxApplications": 4,
    "minIntervalDays": 7,
    "endOfSaleDate": null,
    "endOfUseDate": null,
    "daysUntilEndOfUse": null,
    "usageConditions": null,
    "bufferZoneWaterM": 5,
    "bufferZoneArthropodsM": null,
    "bufferZonePlantsM": null,
    "hazardStatements": [
        "H332 Nocif par inhalation",
        "H400 Très toxique pour les organismes aquatiques",
        "H410 Très toxique pour les organismes aquatiques, entraîne des effets néfastes à long terme"
    ],
    "hazardClasses": [
        "Toxicité aiguë par inhalation - Catégorie 4",
        "Dangers pour le milieu aquatique - Danger aigu, catégorie 1",
        "Dangers pour le milieu aquatique - Danger chronique, catégorie 1",
        "Mention d'avertissement : Attention"
    ],
    "productConditions": [],
    "sourceFileDate": "2026-10-20T16:22:45.549000+00:00",
    "sourceUrl": "https://www.data.gouv.fr/datasets/575e9fac88ee38072a640390"
}
```

The dataset has three table views: **Overview**, **Withdrawals and end dates** and **Labels and hazards**.

### Tips

- **Crop names are French**, as on the product labels: `Vigne` (vine), `Blé` (wheat), `Orge` (barley), `Maïs` (maize), `Pomme de terre` (potato), `Fruits à pépins` (apple, pear), `Crucifères oléagineuses` (rapeseed), `JEVI` (gardens, green spaces and infrastructure). Part of a word is enough: `pomme` finds `Pomme de terre`.
- **Pests and diseases are French too**: `Mildiou` (downy mildew), `Oïdium` (powdery mildew), `Pucerons` (aphids), `Limaces` (slugs), `Désherbage` (weed control).
- **One product, several rows**: a product has one row per crop, pest and dose. Use the `authorisationNumber` to group them.
- **Withdrawn products**: set **Product status** to **Any** or **Withdrawn**; uses in their grace period have an `endOfUseDate` in the future.
- A full-catalogue run (all uses, authorised and withdrawn) takes well under a minute.

### FAQ

#### Where does the data come from, and can I reuse it?

From the E-Phy catalogue of Anses ("Données ouvertes du catalogue E-Phy des produits phytopharmaceutiques, matières fertilisantes et supports de culture, adjuvants, produits mixtes et mélanges"), published every week on [data.gouv.fr](https://www.data.gouv.fr/datasets/575e9fac88ee38072a640390) under the Licence Ouverte (Etalab), which allows commercial reuse when the source is cited. This Actor is not affiliated with Anses or data.gouv.fr.

#### Is this advice on how to use a product?

No. The Actor returns the data of the official register as published. Before using or recommending a product, always check its label and the official E-Phy page: the label and the authorisation decision prevail.

#### How fresh is the data?

Each run reads the latest weekly archive (its date is in `sourceFileDate`). A decision taken by Anses appears after the next weekly publication.

#### Does it cover fertilisers and parallel trade permits?

No. The Actor covers plant protection products, adjuvants, mixed products and tank mixes, which are the products with crop and pest uses. Fertilisers and growing media (MFSC) and parallel trade permits are not returned; an authorisation number of a fertiliser is reported in the log as "found without any recorded use" and is not billed.

#### Does the output contain personal data?

No. Authorisation holders are companies. A few old authorisations were granted to private individuals: their names are withheld (`holder` = `null`, `holderWithheld` = `true`) and a holder search never matches them. The Actor returns no contact details.

#### Why do some fields stay empty?

Because the register does not fill them for every use: doses, pre-harvest intervals and buffer zones are often missing for old or withdrawn uses, and end-of-use dates exist only for withdrawn uses.

#### Something looks wrong, or I need another field?

Open an issue on the Actor's **Issues** tab with an example authorisation number: we usually answer within a few days.

# Actor input Schema

## `crop` (type: `string`):

Keep only uses on crops whose name contains this text (French crop names as used by E-Phy, accents and case ignored, at least 3 characters), for example Vigne (vine), Blé (wheat), Pomme de terre (potato), Fruits à pépins (apple and pear) or Tomate. Rapeseed is listed under Crucifères oléagineuses. Leave empty for all crops.

## `target` (type: `string`):

Keep only uses whose target pest or disease, or treatment type, contains this text (French E-Phy wording, accents and case ignored, at least 3 characters), for example Mildiou (downy mildew), Pucerons (aphids), Oïdium (powdery mildew), Désherbage (weed control), Trt Sem. (seed treatment). Leave empty for all.

## `productName` (type: `string`):

Keep only products whose trade name or secondary trade name contains this text (accents and case ignored, at least 3 characters), for example ROUNDUP or BOUILLIE BORDELAISE. Leave empty for all products.

## `activeSubstance` (type: `string`):

Keep only products containing an active substance whose French or English name contains this text (at least 3 characters), for example glyphosate, cuivre / copper, deltaméthrine / deltamethrin. Leave empty for all substances.

## `productFunction` (type: `string`):

Keep only products with this function (a product can have several, for example fungicide and insecticide).

## `holder` (type: `string`):

Keep only products whose authorisation holder (the company that holds the marketing authorisation) contains this text, for example BAYER, SYNGENTA or DE SANGOSSE (at least 3 characters). Holders that are private individuals are never named and never match. Leave empty for all holders.

## `authorisationNumbers` (type: `array`):

French marketing authorisation numbers (AMM, 7 digits), for example 2180347. Use it to check a list of products you sell or recommend. Numbers that are not found are listed in the run log and are not billed. Set "Product status" to "Any" to also see withdrawn products.

## `productStatus` (type: `string`):

<b>Authorised</b>: products currently on the market. <b>Withdrawn</b>: products whose authorisation was withdrawn (with their end-of-sale and end-of-use dates). When an end-of-use date filter is set, "Authorised" is read as "Any".

## `usageStatus` (type: `string`):

Status of each crop and pest use. <b>Authorised</b> includes provisional authorisations. A product can still be authorised while some of its uses have been withdrawn. When an end-of-use date filter is set, "Authorised" is read as "Withdrawn" (only withdrawn uses have an end-of-use date).

## `endOfUseFrom` (type: `string`):

Keep only withdrawn uses whose end-of-use date (last day the product may be used for this use) is on or after this date. Enter a date (2026-12-31), "today", or a period relative to the run date such as "+30 days" or "1 year ago". "today" lists the uses still in their grace period. Leave empty for no lower bound.

## `endOfUseTo` (type: `string`):

Keep only withdrawn uses whose end-of-use date is on or before this date, for example "in 6 months". With "End of use on or after" = today, it lists the uses that must stop within that period. Leave empty for no upper bound.

## `decisionDateFrom` (type: `string`):

Keep only uses whose latest Anses decision is on or after this date (2026-01-01, or a relative period such as "90 days ago"). Handy to follow new authorisations and changes. Leave empty for any date.

## `gardenUseOnly` (type: `boolean`):

Keep only products carrying the mention "Emploi autorisé dans les jardins" (allowed for amateur use in home gardens).

## `biocontrolOnly` (type: `boolean`):

Keep only products on the official French biocontrol list (Liste biocontrôle).

## `organicFarmingOnly` (type: `boolean`):

Keep only products marked as usable in organic farming (professional or amateur organic production).

## `includeProductConditions` (type: `boolean`):

Add the product's full conditions of use to each result (re-entry interval, operator protection, environmental and labelling conditions). Off by default because the texts are long.

## `sortBy` (type: `string`):

Order of the results. <b>End-of-use date</b> puts the uses that must stop first at the top. <b>Latest decision</b> puts the newest Anses decisions first.

## `maxResults` (type: `integer`):

Safety cap on the number of product uses returned. The run stops once it is reached, so you never pay for more than this.

## Actor input object example

```json
{
  "crop": "Vigne",
  "target": "Mildiou",
  "productName": "",
  "activeSubstance": "",
  "productFunction": "any",
  "holder": "",
  "authorisationNumbers": [],
  "productStatus": "authorised",
  "usageStatus": "authorised",
  "endOfUseFrom": "",
  "endOfUseTo": "",
  "decisionDateFrom": "",
  "gardenUseOnly": false,
  "biocontrolOnly": false,
  "organicFarmingOnly": false,
  "includeProductConditions": false,
  "sortBy": "sourceOrder",
  "maxResults": 10
}
```

# Actor output Schema

## `results` (type: `string`):

Dataset with all the product uses returned

## `overview` (type: `string`):

Product uses in the overview table view

## `withdrawals` (type: `string`):

Product uses in the withdrawals view, with end-of-sale and end-of-use dates

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "crop": "Vigne",
    "target": "Mildiou",
    "maxResults": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("eurodata-lab/france-pesticide-products-ephy").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "crop": "Vigne",
    "target": "Mildiou",
    "maxResults": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("eurodata-lab/france-pesticide-products-ephy").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "crop": "Vigne",
  "target": "Mildiou",
  "maxResults": 10
}' |
apify call eurodata-lab/france-pesticide-products-ephy --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,eurodata-lab/france-pesticide-products-ephy"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5VHTbxg4yYKjaAr7A/builds/dhN7wZOVK8XKBUJI7/openapi.json
