# publishSite

Source: <https://telegafirst.com/docs/api-op-publishsite>
Locale: ru
releaseGitSha: 0bb11ef116e17ec64c802d5476eaff442e53d252
sourceContentDigest: 4d0b456778d73d570838040403b7cdbcb70701839b6f2c42d67e70d4100b2ca8
Version: 8

# publishSite

`POST /api/v1/tools/site/publish`

Publish a staged site bundle

## Авторизация и права

Scopes: ALL. Auth alternatives: OR; scopes внутри альтернативы: ALL.

| Поле | Значение |
| - | - |
| security.0.hubApiKey | \[] |
| security.1.hubBearer | \[] |
| securitySchemes.hubApiKey.in | "header" |
| securitySchemes.hubApiKey.name | "X-Api-Key" |
| securitySchemes.hubApiKey.type | "apiKey" |
| securitySchemes.hubBearer.scheme | "bearer" |
| securitySchemes.hubBearer.type | "http" |
| x-required-scopes | \["site:write"] |

## Параметры запроса

| Поле | Значение |
| - | - |
| 0.description | "Tenant, credential and handler-bound byte-shape replay key" |
| 0.in | "header" |
| 0.name | "Idempotency-Key" |
| 0.required | true |
| 0.schema | [0.schema](https://telegafirst.com/docs/schema-9ac136edb99a2063b3091602181c8d2022fdccb5b514991319d58544c2e57e95) |

## Тело запроса

| Поле | Значение |
| - | - |
| content.application/json.schema | [SitePublishRequest](https://telegafirst.com/docs/schema-5faa67d813398787307e4e3b33a22cbe5a2ea4a4ac4b4b7ba42436d656d10143) |
| required | true |

## Ответы

| Поле | Значение |
| - | - |
| 201.content.application/json.schema | [SitePublishResult](https://telegafirst.com/docs/schema-2b908644c16f4d2ad8f9f09acc7767040b42665abba2258654fe4b03a948ae48) |
| 201.description | "Tenant site control-plane result" |
| 201.headers.X-Bot-Username.description | "Active bot username, when resolved" |
| 201.headers.X-Bot-Username.schema | [201.headers.X-Bot-Username.schema](https://telegafirst.com/docs/schema-00404e686415370f1711c4d7acfa2905444d3cf23cef2e10c47d445ebe690f96) |
| 201.headers.X-Client-Slug.description | "Active tenant slug, when resolved" |
| 201.headers.X-Client-Slug.schema | [201.headers.X-Client-Slug.schema](https://telegafirst.com/docs/schema-00404e686415370f1711c4d7acfa2905444d3cf23cef2e10c47d445ebe690f96) |
| 201.headers.X-RateLimit-Limit.description | "Effective request budget" |
| 201.headers.X-RateLimit-Limit.schema | [201.headers.X-RateLimit-Limit.schema](https://telegafirst.com/docs/schema-00404e686415370f1711c4d7acfa2905444d3cf23cef2e10c47d445ebe690f96) |
| 201.headers.X-RateLimit-Remaining.description | "Remaining request budget" |
| 201.headers.X-RateLimit-Remaining.schema | [201.headers.X-RateLimit-Remaining.schema](https://telegafirst.com/docs/schema-00404e686415370f1711c4d7acfa2905444d3cf23cef2e10c47d445ebe690f96) |
| 201.headers.X-RateLimit-Reset.description | "Unix window reset in seconds" |
| 201.headers.X-RateLimit-Reset.schema | [201.headers.X-RateLimit-Reset.schema](https://telegafirst.com/docs/schema-00404e686415370f1711c4d7acfa2905444d3cf23cef2e10c47d445ebe690f96) |

## Ошибки

| Поле | Значение |
| - | - |
| 400.content.application/problem+json.schema | [ProblemDetails](https://telegafirst.com/docs/schema-c4113f3de00d728702a8663612e2074cbe3e8b3bb70d2b0dee6f3503fe89bd41) |
| 400.description | "Invalid strict publish input or missing replay key" |
| 400.x-error-codes | \["VALIDATION\_ERROR","IDEMPOTENCY\_KEY\_REQUIRED"] |
| 401.content.application/problem+json.schema | [ProblemDetails](https://telegafirst.com/docs/schema-c4113f3de00d728702a8663612e2074cbe3e8b3bb70d2b0dee6f3503fe89bd41) |
| 401.description | "Missing, invalid, revoked or conflicting credential; surface JWT is refused" |
| 401.x-error-codes | \["INVALID\_API\_KEY"] |
| 403.content.application/problem+json.schema | [ProblemDetails](https://telegafirst.com/docs/schema-c4113f3de00d728702a8663612e2074cbe3e8b3bb70d2b0dee6f3503fe89bd41) |
| 403.description | "Missing scope, prohibited publishable credential or absent active bot" |
| 403.x-error-codes | \["INSUFFICIENT\_SCOPE","PUBLISHABLE\_KEY\_NOT\_ALLOWED","NO\_ACTIVE\_BOT"] |
| 404.content.application/problem+json.schema | [ProblemDetails](https://telegafirst.com/docs/schema-c4113f3de00d728702a8663612e2074cbe3e8b3bb70d2b0dee6f3503fe89bd41) |
| 404.description | "No tenant-owned staged bundle or connected host" |
| 404.x-error-codes | \["NOT\_FOUND"] |
| 409.content.application/problem+json.schema | [ProblemDetails](https://telegafirst.com/docs/schema-c4113f3de00d728702a8663612e2074cbe3e8b3bb70d2b0dee6f3503fe89bd41) |
| 409.description | "Stale ticket base or access policy; request a new upload ticket. Other typed domain conflict or request in flight" |
| 409.x-error-codes | \["CONFLICT","SITE\_BUNDLE\_STALE"] |
| 413.content.application/problem+json.schema | [ProblemDetails](https://telegafirst.com/docs/schema-c4113f3de00d728702a8663612e2074cbe3e8b3bb70d2b0dee6f3503fe89bd41) |
| 413.description | "Resource policy size or item-count limit exceeded" |
| 413.x-error-codes | \["PAYLOAD\_TOO\_LARGE","ITEM\_COUNT\_EXCEEDED"] |
| 422.content.application/problem+json.schema | [ProblemDetails](https://telegafirst.com/docs/schema-c4113f3de00d728702a8663612e2074cbe3e8b3bb70d2b0dee6f3503fe89bd41) |
| 422.description | "Replay mismatch; a path outside the permitted publication prefix or reserved on a tenant site host; an HTML tag over the parser bound (details.path, details.limitBytes, details.tag, details.attr); a video over the per-video size of the plan (details.path, details.limitBytes); a bundle over the site size of the plan (details.limitBytes) or the file count of a site, the same on every plan (details.limitFiles)" |
| 422.x-error-codes | \["IDEMPOTENCY\_KEY\_MISMATCH","SITE\_PATH\_OUTSIDE\_PUBLISHABLE\_PREFIX","SITE\_PATH\_RESERVED","SITE\_HTML\_TAG\_TOO\_LARGE","SITE\_VIDEO\_TOO\_LARGE","SITE\_BUNDLE\_TOO\_LARGE","SITE\_TOO\_MANY\_FILES"] |
| 429.content.application/problem+json.schema | [ProblemDetails](https://telegafirst.com/docs/schema-c4113f3de00d728702a8663612e2074cbe3e8b3bb70d2b0dee6f3503fe89bd41) |
| 429.description | "Resource rate budget exceeded or unavailable" |
| 429.headers.Retry-After.description | "Retry delay in seconds, when supplied by the limiter" |
| 429.headers.Retry-After.schema | [429.headers.Retry-After.schema](https://telegafirst.com/docs/schema-00404e686415370f1711c4d7acfa2905444d3cf23cef2e10c47d445ebe690f96) |
| 429.x-error-codes | \["RATE\_LIMIT\_EXCEEDED","RATE\_LIMIT\_UNAVAILABLE"] |
| 500.content.application/problem+json.schema | [ProblemDetails](https://telegafirst.com/docs/schema-c4113f3de00d728702a8663612e2074cbe3e8b3bb70d2b0dee6f3503fe89bd41) |
| 500.description | "Unexpected internal failure" |
| 500.x-error-codes | \["INTERNAL\_ERROR"] |

## Дополнительные условия

| Поле | Значение |
| - | - |
| description | "Owner-only site:write. host plus UUID uploadId; no action\_id. Staging is scoped to credential tenant. Server-side object sizes govern the live cap before download; staged declaration must match. Ticket host/mode/base cannot be rebound or reinterpreted. Merge preserves omitted files and access rules; replace is a complete snapshot. A changed base or access policy yields SITE\_BUNDLE\_STALE 409: request a new ticket, PUT its files and publish again. Delta Sync returns uploaded, deleted and unchanged paths plus manifestDigest, attributionSnippet and pageUrls for only ticket HTML paths actually finished published. Use the exact returned URLs. The full effective site quota and the per-video size are checked again on server sizes. An HTML tag longer than the publisher reads (details.limitBytes; usually an image, video or font inlined as a data: URL) is SITE\_HTML\_TAG\_TOO\_LARGE naming the page, element and attribute; move that data into its own bundle file. Every refusal leaves the live site unchanged. Successful publication clears staging; failed staging remains retryable. No secret approval gate." |
| operationId | "publishSite" |
| summary | "Publish a staged site bundle" |
| tags | \["site"] |
| x-idempotency.conflictStatus | 422 |
| x-idempotency.implementation | "global-cache" |
| x-idempotency.replayStatus | 201 |
| x-idempotency.required | true |
| x-idempotency.scope | \["client","credential","controller-handler","key"] |
| x-idempotency.ttlSeconds | 86400 |
| x-pagination.queryParameters | \[] |
| x-pagination.supported | false |
| x-scope-semantics | "ALL" |
