---
title: "Vérifier avant publication"
description: "Afficher la version qui serait mise en ligne, les éléments qui la bloquent et la génération à publier."
canonical: "https://atelier201.com/docs/fr/api/publishing/review"
updated: "2026-11-06"
---

# Vérifier avant publication

Nécessite `sites:read`. Cette opération ne modifie rien.

Appelez cette opération avant chaque publication et affichez son résultat à la personne concernée. Transmettez `expected_generation` à [Publier une version](/docs/api/publishing/publish) afin que seule la version vérifiée soit mise en ligne.

Une version ne peut pas être publiée tant que `blockers` n’est pas vide. Chaque élément bloquant comporte un `code` et un `message` : `guest_site`, `site_unavailable`, `plan_required` (le site est un brouillon : sa publication nécessite le forfait Site), `no_build`, `build_not_ready`, `origin_changed`, `manual_check` (cette version attend une vérification rapide de notre part : aucune correction n’est nécessaire) ou `older_than_draft`. Consultez [Comment un site est mis en ligne](/docs/platform/drafts-builds-and-publishing).

Les `warnings` ne bloquent jamais la publication. Consultez-les avant de publier : `sample_text` indique, avec le fichier et la ligne, les éventuels textes d’exemple restants, comme Lorem ipsum.

```http
GET https://api.atelier201.com/v1/sites/{site_id}/publish/review
```

## Authorizations

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

## Path parameters

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

## Query parameters

- `build_id` (`string<uuid>`, pattern: `^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$`)
- `allow_older_build` (`boolean`): Vérifier un build antérieur au brouillon en tant que build que vous souhaitez mettre en ligne (`older_than_draft` est alors un avertissement, pas un blocage).

## Response

**200**: Vérifier avant publication

- `data` (`object`, required)
- `data.site_id` (`string`, required)
- `data.url` (`string`, required)
- `data.platform_address` (`object`, required): L’adresse incluse avec le site, que `set_site_address` modifie. `is_main` : les visiteurs arrivent à cette adresse, aucun domaine personnalisé ne l’a remplacée.
- `data.platform_address.slug` (`string`, required)
- `data.platform_address.domain` (`string`, required)
- `data.platform_address.is_main` (`boolean`, required)
- `data.build` (`object | null`, required)
- `data.build.id` (`string`, required)
- `data.build.site_id` (`string`, required)
- `data.build.revision` (`string`, required, length: `40–40 chars`): Un identifiant de commit Git (40 caractères hexadécimaux) du dépôt du site.
- `data.build.state` (`enum<string>`, required, one of: `queued, building, collecting, ready, failed, cancelled`)
- `data.build.target_origin` (`string`, required)
- `data.build.profile` (`enum<string>`, required, one of: `standard, guest-demo`)
- `data.build.file_count` (`integer | null`, required)
- `data.build.total_bytes` (`integer | null`, required)
- `data.build.duration_ms` (`integer | null`, required)
- `data.build.error` (`object | null`, required)
- `data.build.error.code` (`string`, required)
- `data.build.error.message` (`string,null`, required)
- `data.build.warnings` (`string[]`, required)
- `data.build.created_at` (`string`, required): ISO 8601, UTC.
- `data.build.started_at` (`string | null`, required)
- `data.build.finished_at` (`string | null`, required)
- `data.revision` (`string | null`, required)
- `data.draft_revision` (`string | null`, required)
- `data.is_latest_draft` (`boolean`, required)
- `data.live_build_id` (`string,null`, required)
- `data.expected_generation` (`integer`, required, range: `-9007199254740991–9007199254740991`)
- `data.can_publish` (`boolean`, required)
- `data.blockers` (`object[]`, required)
- `data.blockers.code` (`string`, required)
- `data.blockers.message` (`string`, required)
- `data.warnings` (`object[]`, required): Autorisé, mais mérite une décision. Ici, `older_than_draft` signifie que le build vérifié est antérieur au brouillon et a été autorisé (`allow_older_build`), ou qu’aucun `build_id` n’a été indiqué.
- `data.warnings.code` (`string`, required)
- `data.warnings.message` (`string`, required)
- `request_id` (`string`, required)

```json
{
  "data": {
    "site_id": "<string>",
    "url": "<string>",
    "platform_address": {
      "slug": "<string>",
      "domain": "<string>",
      "is_main": true
    },
    "build": {
      "id": "<string>",
      "site_id": "<string>",
      "revision": "<string>",
      "state": "queued",
      "target_origin": "<string>",
      "profile": "standard",
      "file_count": 123,
      "total_bytes": 123,
      "duration_ms": 123,
      "error": {
        "code": "<string>",
        "message": null
      },
      "warnings": [
        "<string>"
      ],
      "created_at": "<string>",
      "started_at": "<string>",
      "finished_at": "<string>"
    },
    "revision": "<string>",
    "draft_revision": "<string>",
    "is_latest_draft": true,
    "live_build_id": null,
    "expected_generation": 123,
    "can_publish": true,
    "blockers": [
      {
        "code": "<string>",
        "message": "<string>"
      }
    ],
    "warnings": [
      {
        "code": "<string>",
        "message": "<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 GET \
  --url 'https://api.atelier201.com/v1/sites/<site_id>/publish/review' \
  --header 'Authorization: <api-key>'
```
