---
title: "Modifier un texte où qu’il apparaisse"
description: "Remplace un passage dans le contenu ou le code d’un site, en une seule entrée d’historique, puis lance la compilation."
canonical: "https://atelier201.com/docs/fr/api/content/replace-text"
updated: "2026-11-06"
---

# Modifier un texte où qu’il apparaisse

Nécessite `sites:write`. Ne coûte aucun crédit. Le chemin se termine par `/text:replace`. La modification ne concerne que le brouillon. Les visiteurs ne voient rien tant que vous n’avez pas [publié](/docs/api/publishing/publish).

La méthode la plus rapide pour modifier un texte visible sans savoir où il est écrit. Envoyez `find`, le texte tel qu’il apparaît sur la page, et `replace`, le nouveau texte. Atelier201 recherche dans les sources du site sous `src/` (fichiers de contenu et code des pages), remplace le passage, ajoute une entrée à l’historique et lance la compilation. La réponse contient `build` avec son identifiant.

- **Introuvable (`404`).** Le texte n’apparaît pas exactement ainsi. Un passage coupé par du balisage, par exemple un lien ou un mot en gras au milieu, ne constitue pas un seul texte. Envoyez un passage plus court.
- **Plusieurs occurrences (`409`).** Affinez la recherche avec `path` (un fichier ou un motif glob), envoyez un passage plus long, ou définissez `all: true` pour modifier toutes les occurrences, par exemple un nouveau numéro de téléphone utilisé sur plusieurs pages.
- **Le contenu reste valide.** Dans un fichier de contenu JSON, le texte est recherché et écrit avec l’échappement JSON, puis le fichier est analysé de nouveau avant toute sauvegarde.

Pour modifier un champ dont vous connaissez l’adresse, par exemple `business:/tagline`, utilisez [Modifier un champ](/docs/api/content/set-field), qui effectue la même opération avec une validation selon le modèle de contenu.

```http
POST https://api.atelier201.com/v1/sites/{site_id}/text:replace
```

## Authorizations

- `Authorization` (bearer, in header, required)

## Path parameters

- `site_id` (`string`, required): L’identifiant du site ou son slug (l’adresse avant .atelier201.page).

## Body

`application/json`, required

- `find` (`string`, required, length: `1–2000 chars`): Le texte à modifier, exactement comme il apparaît sur la page ou dans le fichier (majuscules et ponctuation comprises).
- `replace` (`string`, required, length: `≤ 5000 chars`): Le nouveau texte. Une valeur vide supprime le passage.
- `path` (`string`, length: `≤ 300 chars`): Uniquement dans ce fichier (ou ce glob, par ex. src/pages/*.astro), si le texte apparaît à plusieurs endroits.
- `all` (`boolean`): Modifier toutes les occurrences (un produit renommé, un nouveau numéro de téléphone). Par défaut, refuse si le texte apparaît plusieurs fois.
- `summary` (`string`, length: `≤ 200 chars`): Une phrase pour l’historique. Par défaut : Modifier « <text> ».

## Response

**200**: Modifier un texte partout où il apparaît

- `data` (`object`, required)
- `data.replaced` (`integer`, required, range: `-9007199254740991–9007199254740991`): Nombre d’occurrences modifiées.
- `data.files` (`object[]`, required)
- `data.files.path` (`string`, required)
- `data.files.occurrences` (`integer`, required, range: `-9007199254740991–9007199254740991`)
- `data.revision` (`string`, required, length: `40–40 chars`): Un identifiant de commit Git (40 caractères hexadécimaux) du dépôt du site.
- `data.parent` (`string | null`, required)
- `data.changed` (`boolean`, required)
- `data.changes` (`object[]`, required)
- `data.changes.path` (`string`, required)
- `data.changes.action` (`string`, required)
- `data.build` (`object | null`, required): La génération démarrée (ou rejointe) par cette modification : l’aperçu la suit. Aucun appel à build_site n’est nécessaire.
- `data.build.id` (`string`, required)
- `data.build.state` (`string`, required)
- `data.build.next_action` (`string`, required)
- `data.next_action` (`string`, required)
- `request_id` (`string`, required)

```json
{
  "data": {
    "replaced": 123,
    "files": [
      {
        "path": "<string>",
        "occurrences": 123
      }
    ],
    "revision": "<string>",
    "parent": "<string>",
    "changed": true,
    "changes": [
      {
        "path": "<string>",
        "action": "<string>"
      }
    ],
    "build": {
      "id": "<string>",
      "state": "<string>",
      "next_action": "<string>"
    },
    "next_action": "<string>"
  },
  "request_id": "<string>"
}
```

**400**: Codes possibles : invalid_request, unknown_field, invalid_parameter, invalid_cursor

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**401**: Codes possibles : authentication_required, invalid_api_key, api_key_expired, api_key_revoked

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**402**: Codes possibles : insufficient_credits

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**403**: Codes possibles : insufficient_scope, feature_not_available, admin_required

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**404**: Codes possibles : resource_not_found

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**409**: Codes possibles : conflict, result_not_ready, idempotency_key_reused

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**410**: Codes possibles : result_expired

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**413**: Codes possibles : request_too_large

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**422**: Codes possibles : request_too_large_for_plan

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**429**: Codes possibles : rate_limited

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**500**: Codes possibles : internal_error

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**503**: Codes possibles : service_unavailable

- `error` (`object`, required)
- `error.type` (`string`, required)
- `error.code` (`string`, required)
- `error.message` (`string`, required)
- `error.param` (`string`)
- `error.docs_url` (`string`, required)
- `error.action_url` (`string<uri>`)
- `error.details` (`Record<string, object>`)
- `request_id` (`string`, required)

```json
{
  "error": {
    "type": "<string>",
    "code": "<string>",
    "message": "<string>",
    "param": "<string>",
    "docs_url": "<string>",
    "action_url": "<string>",
    "details": {}
  },
  "request_id": "<string>"
}
```

**Example request**

```bash
curl --request POST \
  --url 'https://api.atelier201.com/v1/sites/<site_id>/text:replace' \
  --header 'Authorization: <api-key>' \
  --header 'Content-Type: application/json' \
  --data '{
  "find": "<string>",
  "replace": "<string>"
}'
```
