# SCPI

GET /scpi/{idOrIsin} and GET /scpi?q=: structured data for French SCPIs from their management companies' bulletins, DIC and annual reports.

HTML version: https://fundfactsapi.com/docs/scpi · Updated 2026-09-09

## What an SCPI payload is

French SCPIs (sociétés civiles de placement immobilier) are unlisted real-estate funds priced by their management company. They publish a bulletin trimestriel, a DIC (PRIIPs key information document), a rapport annuel and a note d'information; FundFacts reads those documents on the management company's own site and returns one structured payload per SCPI: pricing and terms, the taux de distribution history, valuation figures, the property portfolio with its sector and geographic splits, liquidity, and the document links. The shape is distinct from the fund payload (https://fundfactsapi.com/docs/fields) because the vocabulary is different.

Identify an SCPI by its `slug` (`perial-o2`, `corum-origin`, `epargne-pierre`), by its ISIN when it has one, or by its name. Use the search endpoint to find slugs.

## GET /scpi/{idOrIsin}

Structured data for one SCPI. The path segment is a slug, an ISIN or a URL-encoded name. Same authentication, quota, burst limits and headers as `GET /funds/{isin}`; one request per call. A cold load reads the manager's page and PDFs and takes 10–60 seconds; later calls within 24 hours return from the store.

```bash
curl --max-time 300 https://fundfactsapi.com/api/v1/scpi/perial-o2 \
  -H "Authorization: Bearer ffk_your_api_key"
```

### Response envelope

| Field | Type | Description |
|---|---|---|
| `slug` | `string` | Canonical identifier of the SCPI (use it in later calls). |
| `isin` | `string \| null` | ISIN of the shares when known. |
| `name` | `string \| null` | SCPI name. |
| `manager` | `string` | Management-company adapter id (perial, corum, sofidy…). |
| `cached` | `boolean` | true when served from the 24-hour store, false when refreshed for this request. |
| `generatedAt` | `string (ISO 8601) \| null` | When the payload was produced. |
| `expiresAt` | `string (ISO 8601) \| null` | When the payload will be considered stale and refreshed on the next request. |
| `plan` | `"free" \| "starter" \| "pro" \| "scale" \| "enterprise"` | Plan of the API key used for the request. |
| `quota` | `object` | Quota state after this request, same shape as on /funds. |
| `data` | `object` | The structured SCPI payload. See the field reference below. |

A full sample response (perial-o2) is shown on the HTML page. Unknown identifiers answer `404 scpi_not_found`; an SCPI whose documents could not be read answers 404 with the same code and the empty `data` skeleton.

## GET /scpi?q=

`?q=` an SCPI name, a management company, or the first characters of an ISIN; `&limit=` up to 50. Searches the known SCPI universe (seeded with the SCPIs of the covered management companies, and growing with what the store learns, such as ISINs read from the DIC). Free; counts towards the per-minute burst limit.

```bash
curl "https://fundfactsapi.com/api/v1/scpi?q=epargne+pierre&limit=5" -H "Authorization: Bearer ffk_..."
```

```json
{ "query": "epargne pierre", "count": 2, "results": [
  { "slug": "epargne-pierre", "isin": null, "name": "Épargne Pierre", "manager": "atland-voisin", "managerName": "Atland Voisin", "category": "diversifiée", "loaded": true, "dataAsOf": "2026-06-30", "url": "https://fundfactsapi.com/api/v1/scpi/epargne-pierre" },
  { "slug": "epargne-pierre-europe", "isin": null, "name": "Épargne Pierre Europe", "manager": "atland-voisin", "managerName": "Atland Voisin", "category": "européenne", "loaded": false, "dataAsOf": null, "url": "https://fundfactsapi.com/api/v1/scpi/epargne-pierre-europe" }
], "plan": "free", "quota": { … } }
```

## Sourcing & freshness

Every figure comes from public regulatory documents published by the SCPI's management company: the latest bulletin trimestriel (headline figures, TOF, splits, liquidity), the DIC (risk indicator and entry costs, read deterministically), the first pages of the rapport annuel and the note d'information (terms, fees, délai de jouissance), plus the SCPI's page. No aggregator or third-party database is read. Payloads are stored for 24 hours and refreshed on the next request after that; `dataAsOf` is the date of the bulletin's figures and `bulletinPeriod` its period label. Bulletins are quarterly (sometimes semi-annual), so the figures move at that rhythm.

## Management companies covered

Coverage is verified by `scripts/scpi-coverage.mts`; the level describes what the manager's site makes readable. Names are used only to describe that public material; FundFacts API is independent of all of them.

| Manager | SCPIs | Coverage | Notes |
|---|---|---|---|
| Paref Gestion | 4 | `page` | Plain fetches are refused (403); the SCPI page is rendered in the standard browser, documents are read when the render exposes their links. |
| Perial Asset Management | 4 | `documents` | SCPI page plus bulletin trimestriel, DIC, rapport annuel, note d'information and statuts, all linked from the page. |
| Atland Voisin | 4 | `documents` | SCPI page, bulletin trimestriel and rapport annuel; the DIC is an HTML page read as text. |
| La Française REM | 3 | `documents` | SCPI sheet plus bulletin trimestriel, DIC, rapport annuel and note d'information served from doc.la-francaise.com. |
| Praemia REIM | 2 | `documents` | SCPI sheet on praemiareim.fr plus bulletin trimestriel, DIC, rapport annuel, note d'information and statuts. |
| Corum Asset Management | 3 | `documents` | SCPI page plus the documents page: bulletin trimestriel, DIC, rapport annuel and note d'information. |
| Sofidy | 2 | `documents` | SCPI page plus bulletin trimestriel, DIC, rapport annuel, note d'information and statuts linked from the page. |
| Iroko | 2 | `documents` | SCPI page plus the shared documentation page: bulletin trimestriel, DIC, rapport annuel, note d'information and statuts. |
| Remake Asset Management | 1 | `documents` | SCPI page plus bulletin d'information, DIC, rapport annuel, note d'information and statuts via the site's download endpoints. |
| Alderan | 2 | `documents` | SCPI page plus bulletin trimestriel, DIC, rapport annuel, note d'information and statuts from the documentation pages. |
| Norma Capital | 2 | `documents` | SCPI page plus bulletin trimestriel, DIC, note d'information and rapport annuel served from /documentation/ URLs. |
| Fiducial Gérance | 3 | `documents` | SCPI page plus bulletin trimestriel, DIC, rapport annuel and note d'information from the Documentation tab. |
| AEW Patrimoine | 2 | `documents` | SCPI page plus bulletin (semestriel / trimestriel), DIC and rapport annuel linked from the page. |

## Key facts

Identity, pricing and terms of the SCPI as printed by its management company (bulletin trimestriel, DIC, note d'information). Prices are EUR per share; fees are percentages as printed (TTI / TTC or HT as the document states).

| Field | Type | Description |
|---|---|---|
| `keyFacts.name` | `string` | Official SCPI name. e.g. "Perial O2" |
| `keyFacts.managementCompany` | `string` | Société de gestion. e.g. "PERIAL Asset Management" |
| `keyFacts.isin` | `string \| null` | ISIN of the shares when the SCPI has one (most FR-prefixed); null when not printed in the documents. e.g. "FR0011254991" |
| `keyFacts.category` | `"bureaux" \| "commerces" \| "santé" \| "logistique" \| "diversifiée" \| "résidentiel" \| "européenne" \| "autre" \| null` | Dominant property type, or européenne when more than half of the assets are outside France. e.g. "bureaux" |
| `keyFacts.capitalType` | `"fixe" \| "variable" \| null` | SCPI à capital fixe or variable. e.g. "variable" |
| `keyFacts.creationYear` | `number \| null` | Year of creation. e.g. 2009 |
| `keyFacts.capitalisationEur` | `number \| null` | Capitalisation in EUR (prix de souscription × parts en circulation). e.g. 1100000000 |
| `keyFacts.sharePriceEur` | `number \| null` | Prix de souscription per share, EUR. e.g. 164 |
| `keyFacts.withdrawalPriceEur` | `number \| null` | Prix de retrait (valeur de retrait) per share, EUR. e.g. 150.06 |
| `keyFacts.subscriptionFeesPct` | `number \| null` | Commission de souscription, percent of the subscription price. Read from the DIC's entry-cost line when present. e.g. 10.2 |
| `keyFacts.managementFeesPct` | `number \| null` | Commission de gestion, percent of rental income (HT or TTC as printed). e.g. 13.8 |
| `keyFacts.minimumSubscriptionShares` | `number \| null` | Minimum first subscription, in shares. e.g. 30 |
| `keyFacts.minimumSubscriptionEur` | `number \| null` | Minimum first subscription, in EUR. e.g. 4920 |
| `keyFacts.delayOfJouissance` | `string \| null` | Délai de jouissance as printed. e.g. "1er jour du 6e mois suivant la souscription" |
| `keyFacts.riskIndicator` | `number \| null` | Indicateur synthétique de risque of the DIC (1 lowest to 7 highest), read deterministically from the DIC. e.g. 4 |
| `keyFacts.sfdrArticle` | `number \| null` | SFDR classification stated in the documents: 6, 8 or 9. e.g. 9 |
| `keyFacts.labelIsr` | `boolean \| null` | Whether the SCPI states it holds the Label ISR; null when not mentioned. e.g. true |

## Performance & valuation

Distribution history and the regulatory valuation figures of the bulletin and the annual report. Rates are percentages, values are EUR per share.

| Field | Type | Description |
|---|---|---|
| `performance.distributionRateByYear` | `Array<{ year: string; value: number }>` | Taux de distribution (TD) per calendar year, percent, oldest first, up to the last five full years. e.g. [{ "year": "2024", "value": 4.91 }, { "year": "2025", "value": 4.65 }] |
| `performance.distributionPerShareByYear` | `Array<{ year: string; value: number }>` | Dividende brut par part per calendar year, EUR. e.g. [{ "year": "2025", "value": 7.08 }] |
| `performance.tri.y5 / y10 / y15` | `number \| null` | Taux de rentabilité interne over 5, 10 and 15 years, annualised percent, when the manager publishes them. e.g. 4.39 |
| `performance.reconstitutionValueEur` | `number \| null` | Valeur de reconstitution per share, EUR. e.g. 143.65 |
| `performance.realisationValueEur` | `number \| null` | Valeur de réalisation per share, EUR. e.g. 113.55 |
| `performance.sharePriceHistory` | `Array<{ date: string; priceEur: number }>` | Prix de souscription history when the documents print one (date of the price, ISO). e.g. [{ "date": "2024-01-01", "priceEur": 164 }] |
| `performance.lastQuarterDistributionPerShareEur` | `number \| null` | Acompte / dividende par part of the latest bulletin's quarter, EUR. e.g. 1.5 |

## Portfolio

Size and occupancy of the property portfolio, with the sector and geographic splits as printed in the bulletin (by rental value or surface as the manager reports).

| Field | Type | Description |
|---|---|---|
| `portfolio.numberOfProperties` | `number \| null` | Nombre d'immeubles / actifs. e.g. 135 |
| `portfolio.surfaceSqm` | `number \| null` | Total surface, m². e.g. 949439 |
| `portfolio.numberOfTenants` | `number \| null` | Nombre de locataires. e.g. 473 |
| `portfolio.financialOccupancyRatePct` | `number \| null` | Taux d'occupation financier (TOF), percent. e.g. 84.6 |
| `portfolio.physicalOccupancyRatePct` | `number \| null` | Taux d'occupation physique (TOP), percent, when published. e.g. 91.2 |
| `portfolio.walbYears` | `number \| null` | WALB (weighted average lease break), years, when published. e.g. 3.8 |
| `portfolio.waltYears` | `number \| null` | WALT (durée ferme résiduelle des baux), years, when published. e.g. 5.1 |
| `portfolio.sectorSplit` | `Array<{ label: string; weight: number }>` | Répartition sectorielle / typologique, percent. e.g. [{ "label": "Bureaux", "weight": 84.7 }, …] |
| `portfolio.geographicSplit` | `Array<{ label: string; weight: number }>` | Répartition géographique by region and/or country, percent, as the bulletin prints it. e.g. [{ "label": "Île-de-France", "weight": 35.6 }, { "label": "Pays-Bas", "weight": 9.9 }, …] |
| `portfolio.topTenants` | `Array<{ name: string; weight: number \| null }>` | Principaux locataires with their share of rents when published. e.g. [{ "name": "Ministère de l’Intérieur", "weight": 4.1 }] |

## Liquidity

The secondary-market and capital figures of the latest bulletin.

| Field | Type | Description |
|---|---|---|
| `liquidity.sharesAwaitingWithdrawal` | `number \| null` | Parts en attente de retrait at the bulletin date. e.g. 0 |
| `liquidity.netInflowLastQuarterEur` | `number \| null` | Collecte nette of the latest quarter, EUR. e.g. 12400000 |
| `liquidity.sharesOutstanding` | `number \| null` | Nombre de parts en circulation. e.g. 14643842 |
| `liquidity.numberOfAssociates` | `number \| null` | Nombre d'associés. e.g. 28479 |

## Documents & freshness

The public regulatory documents the payload was read from (all published by the management company), and when the figures are dated.

| Field | Type | Description |
|---|---|---|
| `documents.productUrl` | `string \| null` | The SCPI's page on the management company's site. |
| `documents.bulletinUrl` | `string \| null` | Latest bulletin trimestriel (or semestriel) d'information, PDF. |
| `documents.annualReportUrl` | `string \| null` | Latest rapport annuel, PDF. |
| `documents.kidUrl` | `string \| null` | DIC (PRIIPs key information document), PDF. |
| `documents.noteInformationUrl` | `string \| null` | Note d'information visée par l'AMF, PDF. |
| `documents.statutsUrl` | `string \| null` | Statuts, PDF. |
| `documents.factsheetUrl` | `string \| null` | Fiche produit / plaquette published by the manager, when linked. |
| `dataAsOf` | `string` | Date of the latest figures (end of the bulletin's quarter), ISO YYYY-MM-DD; empty when unknown. e.g. "2026-06-30" |
| `bulletinPeriod` | `string \| null` | Period of the latest bulletin as printed. e.g. "T2 2026" |
| `generatedAt` | `string (ISO 8601)` | Timestamp of the refresh that produced this payload. Payloads are refreshed when older than 24 hours. e.g. "2026-09-09T13:41:07.112Z" |

Full reference: https://fundfactsapi.com/llms-full.txt
