---
title: "Revisar antes de publicar"
description: "Mostra qual build seria publicado, o que impede a publicação e a geração que será usada."
canonical: "https://atelier201.com/docs/pt/api/publishing/review"
updated: "2026-11-06"
---

# Revisar antes de publicar

Requer `sites:read`. Não altera nada.

Faça esta chamada antes de cada publicação e mostre à pessoa o resultado. Envie `expected_generation` para [Publicar um build](/docs/api/publishing/publish) para garantir que somente o estado revisado seja publicado.

Um build não pode ser publicado enquanto `blockers` não estiver vazio. Cada bloqueio tem um `code` e uma `message`: `guest_site`, `site_unavailable`, `plan_required` (o site é um rascunho: para publicar, é necessário ter o plano Site), `no_build`, `build_not_ready`, `origin_changed`, `manual_check` (esta versão aguarda uma verificação rápida da nossa equipe; não há nada a corrigir) ou `older_than_draft`. Consulte [Como um site é publicado](/docs/platform/drafts-builds-and-publishing).

`warnings` nunca impedem a publicação. Leia-os antes de publicar: `sample_text` identifica, com arquivo e linha, qualquer texto de exemplo que tenha permanecido, como 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): O id do site ou seu slug (o endereço antes de .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`): Revisar um build anterior ao rascunho como aquele que você pretende publicar (nesse caso, older_than_draft é um aviso, não um impedimento).

## Response

**200**: Revisar antes de publicar

- `data` (`object`, required)
- `data.site_id` (`string`, required)
- `data.url` (`string`, required)
- `data.platform_address` (`object`, required): O endereço incluído no site, que set_site_address altera. is_main: os visitantes chegam a esse endereço quando nenhum domínio personalizado o substituiu.
- `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`): Um ID de commit do Git (40 caracteres hexadecimais) do repositório do 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): Permitido, mas vale avaliar. Aqui, older_than_draft significa que o build revisado é anterior ao rascunho e foi permitido (allow_older_build), ou que nenhum build_id foi especificado.
- `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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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**: Códigos possíveis: 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>'
```
