---
title: "Attach domains"
method: POST
path: "/api/v1/sites/domains/attach"
tags: ["sites"]
---

# Attach domains

`POST /api/v1/sites/domains/attach`

## Request

- Base URL: `https://point11.ai`
- URL: `https://point11.ai/api/v1/sites/domains/attach`
- Auth: one of:
  - HTTP bearer
  - OAuth 2 (authorization code, authorization URL `https://auth.point11.ai/oauth2/authorize`, token URL `https://auth.point11.ai/oauth2/token`)

Serve a published Alpha website on a verified custom domain by domain id and any version id of the page (pageId). The page's live version is built again for the domain's own origin before the domain is attached, which can take a few minutes; calling it again moves the domain to the page's live version. The domain must also be added to Point11's hosting before its host answers.

## Headers

- `Point11-Organization` string, uuid
- `Idempotency-Key` string, uuid, required

## Request body

- SitesDomainsAttachRequest
  - `id` string, required
  - `pageId` string, required: Any version id of the published page; the domain serves its live version.

## Response `200`

Success.

- SitesDomainsAttachResponse
  - `id` string, required
  - `organizationId` string, required
  - `domain` string, required
  - `verified` boolean, required
  - `verificationToken` string, nullable, required
  - `verificationTokenExpiresAt` string, date-time, nullable, required
  - `sslStatus` 'pending' | 'active' | 'failed', required
  - `siteConfigurationId` string, nullable, required
  - `pagePublicationId` string, nullable, required: The published Alpha page publication this domain serves, or null.
  - `pageArtifactId` string, nullable, required: The page version the domain serves, built for its own origin; attach again to move it to the page's live version.
  - `hostedAt` string, date-time, nullable, required: When Point11 confirmed the domain is on its hosting; until then the page's own link stays its indexed address.
  - `suspendedAt` string, date-time, nullable, required: When Point11 suspended the domain; a suspended domain serves nothing.
  - `createdAt` string, date-time, required
  - `updatedAt` string, date-time, required

## Other responses

- `400`: The input, query, or Idempotency-Key is invalid.
- `401`: The bearer is missing, expired, or not accepted.
- `402`: Billing refused the write: the code names the reason and `details.reason` carries it.
- `403`: The credential lacks the operation's scope or role, or the operation needs a different door.
- `404`: The resource or organization does not exist for this caller.
- `405`: This path takes another HTTP method, named in `Allow`.
- `409`: The request conflicts with current state or with prior use of its Idempotency-Key.
- `413`: The request, or the answer it asks for, is too large; narrow it.
- `429`: The credential's rate budget is spent; retry after `Retry-After` seconds.
- `500`: An unexpected server failure; retry later. Only `request_id` identifies it.
- `503`: A dependency is temporarily unavailable; retry after `Retry-After` seconds.
- `default`: Another status a product answers for its own refusal (for example `415` for an unsupported attachment); branch on `code`.

---

[API](https://skmtc.dev/point11/apis/point11-api.md) · [All operations](https://skmtc.dev/point11/apis/point11-api/llms.txt) · [OpenAPI document](https://skmtc.dev/point11/apis/point11-api/revisions/36a84c7aca11?raw)
