# Euronext Paris (CAC 40) API
> Live French equity data from Euronext Paris: real-time quotes for any listed stock by ticker (price, % change, intraday OHLC, volume, market cap in EUR), a ranking screener for gainers, losers, most-active and top market-cap local primary listings, and the Paris index family (CAC 40, SBF 120 and CAC All-Tradable). Foreign depositary receipts are filtered out so you get only genuine French companies such as LVMH, L'Oreal, Hermes, TotalEnergies and Schneider Electric.

## Authentication
All requests require your oanor API key in the `x-oanor-key` header. Get one at https://www.oanor.com/developer/keys.

```bash
curl -H "x-oanor-key: oanor_live_…" "https://api.oanor.com/france-stock-api/..."
```

## Pricing
- **Free** (Free) — 2,000 calls/Mo, 2 req/s
- **Basic** ($13/Mo) — 52,000 calls/Mo, 5 req/s
- **Pro** ($38/Mo) — 205,000 calls/Mo, 15 req/s
- **Business** ($82/Mo) — 810,000 calls/Mo, 40 req/s

## Endpoints

### Quotes

#### `GET /v1/quote` — Live quote for one or more Paris stocks

**Parameters:**
- `symbols` (query, required, string) — Comma-separated Paris tickers (up to 20) Example: `MC,OR,TTE`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/france-stock-api/v1/quote?symbols=MC%2COR%2CTTE"
```

**Response:**
```json
{
    "data": {
        "count": 3,
        "market": "EPA",
        "quotes": [
            {
                "low": 501.1,
                "high": 521.2,
                "last": 510.6,
                "name": "LVMH Moet Hennessy Louis Vuitton SE",
                "open": 508,
                "pe_ttm": 23.3575,
                "sector": "Consumer Non-Durables",
                "symbol": "MC",
                "ticker": "EURONEXT:MC",
                "volume": 930219,
                "currency": "EUR",
                "change_abs": 17.4,
                "change_pct": 3.528,
                "market_cap": 252856203608
            },
            {
                "low": 386.3,
                "high": 394.25,
                "last": 390.25,
                "name": "L'Oreal S.A.",
                "open": 388.2,
                "pe_ttm": 34.0982,
                "sector": "Consumer Non-Durables",
                "symbol": "OR",
                "ticker": "EURONEXT:OR",
                "volume": 472567,
                "currency": "EUR",
                "change_abs": 6.95,
                "change_pct": 1.8132,
                "market_cap": 207780137711
            },
            {
                "low": 74.48,
                "high": 76.51,
                "last": 76.38,
                "name": "TotalEnergies SE",
                "open": 75.79,
                "pe_ttm": 12.859,
                "sector": "Energy Minerals",
                "symbol": "TTE",
                "ticker": "EUR
…(truncated, see openapi.json for full schema)
```

### Screener

#### `GET /v1/screener` — Rank local primary listings

**Parameters:**
- `sort` (query, optional, string) — Sort field: market_cap, change or volume Example: `market_cap`
- `order` (query, optional, string) — asc or desc Example: `desc`
- `limit` (query, optional, string) — Number of results (1-100) Example: `25`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/france-stock-api/v1/screener?sort=market_cap&order=desc&limit=25"
```

**Response:**
```json
{
    "data": {
        "sort": "market_cap",
        "count": 25,
        "order": "desc",
        "market": "EPA",
        "results": [
            {
                "low": 501.1,
                "high": 521.2,
                "last": 510.6,
                "name": "LVMH Moet Hennessy Louis Vuitton SE",
                "open": 508,
                "pe_ttm": 23.3575,
                "sector": "Consumer Non-Durables",
                "symbol": "MC",
                "ticker": "EURONEXT:MC",
                "volume": 930219,
                "currency": "EUR",
                "change_abs": 17.4,
                "change_pct": 3.528,
                "market_cap": 252856203608
            },
            {
                "low": 386.3,
                "high": 394.25,
                "last": 390.25,
                "name": "L'Oreal S.A.",
                "open": 388.2,
                "pe_ttm": 34.0982,
                "sector": "Consumer Non-Durables",
                "symbol": "OR",
                "ticker": "EURONEXT:OR",
                "volume": 472567,
                "currency": "EUR",
                "change_abs": 6.95,
                "change_pct": 1.8132,
                "market_cap": 207780137711
            },
            {
                "low": 1676,
                "high": 1739,
                "last": 1697,
                "name": "Hermes International SCA",
                "open": 1680.5,
                "pe_ttm": 39.4004,
                "sector": "Consumer Non-Dura
…(truncated, see openapi.json for full schema)
```

### Indices

#### `GET /v1/index` — Paris index family (CAC 40, SBF 120, CAC All-Tradable)

**Parameters:**
- `symbol` (query, optional, string) — Optional specific index symbol(s) Example: `PX1`

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/france-stock-api/v1/index?symbol=PX1"
```

**Response:**
```json
{
    "data": {
        "count": 1,
        "market": "EPA",
        "indices": [
            {
                "low": 8302.69,
                "high": 8397.63,
                "name": "CAC 40 Index",
                "open": 8315.31,
                "index": "PX1",
                "label": "CAC 40",
                "value": 8350.87,
                "change_abs": 150.07,
                "change_pct": 1.8299
            }
        ]
    },
    "meta": {
        "timestamp": "2026-06-15T02:09:56.028Z",
        "request_id": "32e23048-94bb-4c8e-8ac8-d45d69bdb2ee"
    },
    "status": "ok",
    "message": "Index retrieved successfully",
    "success": true
}
```

### Meta

#### `GET /v1/meta` — Market metadata & endpoint guide

**Example:**
```bash
curl -H "x-oanor-key: $KEY" \
  "https://api.oanor.com/france-stock-api/v1/meta"
```

**Response:**
```json
{
    "data": {
        "market": "Euronext Paris",
        "source": "TradingView screener (france market), keyless",
        "country": "France",
        "indices": [
            "PX1",
            "PX4",
            "CACT"
        ],
        "currency": "EUR",
        "examples": {
            "index": "/v1/index",
            "quote": "/v1/quote?symbols=MC,OR,TTE",
            "screener": "/v1/screener?sort=change&order=desc&limit=10"
        },
        "endpoints": {
            "/v1/index": "Paris index family (CAC 40 = PX1, SBF 120 = PX4, CAC All-Tradable = CACT)",
            "/v1/quote": "live quote for one or more Paris stocks by ticker (symbols=MC,OR,TTE)",
            "/v1/screener": "rank local primary listings by market_cap | change | volume (sort, order, limit)"
        },
        "cache_ttl_ms": 20000
    },
    "meta": {
        "timestamp": "2026-06-15T02:09:56.113Z",
        "request_id": "bfa53275-4ae1-401c-b0fb-28343eb4f5cd"
    },
    "status": "ok",
    "message": "Meta",
    "success": true
}
```


---
Marketplace page: https://www.oanor.com/api/france-stock-api
OpenAPI spec: https://www.oanor.com/api/france-stock-api/openapi.json
