Console API
Website
19 endpoints.
/api/v1/admin/businesses/{business_id}/websiteGet website for business
Always 200. Returns optional website payload (null if not created).
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_WebsiteGetResponse_| Field | Type | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
success | true | default true | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
datarequired | WebsiteGetResponse | WebsiteGetResponse fields
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fields
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fields
|
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/businesses/{business_id}/websiteCreate website for business
Create website + API key for the business, trigger provisioning, and return website only.
Takes no input beyond ``business_id``: the generator builds from the business's own backend content, so there is no design prompt to supply.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request body
application/jsonWebsiteCreateBody | null| Field | Type | Description |
|---|
Responses
201Successful Responseapplication/jsonSuccessResponse_WebsiteCreateResponse_| Field | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||
success | true | default true | ||||||
datarequired | WebsiteCreateResponse | WebsiteCreateResponse fields
| ||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/businesses/{business_id}/website-check/artifacts/{artifact_id}A screenshot the site agent's browser check took
The image bytes; 404 for a screenshot of another business, or none.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
artifact_idrequired | path | string | |
authorization | header | string | null |
Responses
200Successful Response400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/businesses/{business_id}/website-mod/requirements/{file_id}Download a document attached for the site agent
The document as the owner attached it; 404 for another business's.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
file_idrequired | path | string | |
authorization | header | string | null |
Responses
200Successful Response400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/businesses/{business_id}/website-mod/requirements/uploadUpload a document for the site agent (website editor chats)
Store a document the owner attached for the site agent. With the private bucket: a PDF, Word, Excel, PowerPoint or text file, validated and converted at once (the answer lists the derived files and any ``warnings``); without it, text files only, as before.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request bodyrequired
multipart/form-dataBody_upload_website_mod_requirements_api_v1_admin_businesses__business_id__website_mod_requirements_upload_post| Field | Type | Description |
|---|---|---|
filerequired | string |
Responses
200Successful Responseapplication/jsonSuccessResponse_WebsiteAgentDocumentUpload_| Field | Type | Description | |||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | ||||||||||||||||||||||||||||||||||
success | true | default true | |||||||||||||||||||||||||||||||||
datarequired | WebsiteAgentDocumentUpload | WebsiteAgentDocumentUpload fields
| |||||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | |||||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/businesses/{business_id}/website/api-keyReveal the website's public API key (live credential)
Return the site's live public API key, in the clear.
404 while the feature flag is off; 404 for an unknown business or a business with no website; 409 when the site has no readable key yet. The key returned is the one the running site uses — revealing never rotates.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_WebsiteApiKeyRevealData_| Field | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||
success | true | default true | ||||||
datarequired | WebsiteApiKeyRevealData | WebsiteApiKeyRevealData fields
| ||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/businesses/{business_id}/website/collaboratorsList who has access to the business's site repo
Direct collaborators (``status="active"``) merged with pending invitations (``status="invited"``). Direct affiliation only: org-inherited members (Keystone staff, the App) are asked out of the list at GitHub.
404 while the flag is off, for an unknown business, and for a business with no site repo yet.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_WebsiteCollaboratorsData_| Field | Type | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | ||||||||||
success | true | default true | |||||||||
datarequired | WebsiteCollaboratorsData | WebsiteCollaboratorsData fields
| |||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | |||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/businesses/{business_id}/website/collaboratorsInvite a GitHub username to the business's site repo (push)
Invite at push. Idempotent-friendly: an already-invited or already-active username answers 200 with ``already=true`` and a sentence saying so — repeats are clean answers, not errors.
422 for a blank or unknown username; 503 ``GITHUB_APP_PERMISSION_MISSING`` when the App lacks the Administration permission.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request bodyrequired
application/jsonWebsiteCollaboratorInviteBody| Field | Type | Description |
|---|---|---|
usernamerequired | string |
Responses
200Successful Responseapplication/jsonSuccessResponse_WebsiteCollaboratorInviteData_| Field | Type | Description | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | ||||||||||||||||||||||
success | true | default true | |||||||||||||||||||||
datarequired | WebsiteCollaboratorInviteData | WebsiteCollaboratorInviteData fields
| |||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | |||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/businesses/{business_id}/website/collaborators/{username}Remove a collaborator or cancel their pending invitation
One endpoint for both shapes of "take their access away": sor cancels the pending invitation if that is what exists, removes the active direct collaborator otherwise. 404 when the username has neither.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
usernamerequired | path | string | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_WebsiteCollaboratorRemoveData_| Field | Type | Description | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||||||||
success | true | default true | ||||||||||||
datarequired | WebsiteCollaboratorRemoveData | WebsiteCollaboratorRemoveData fields
| ||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/businesses/{business_id}/website/commitsList the website's change history (History tab)
The conversation's changes as a git log, newest first.
404 while the preview flag is off, and for a business with no website row. A website with no repository yet answers 200 with the honest-empty shape.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_WebsiteCommitsResponse_| Field | Type | Description | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||||||||||||||
success | true | default true | ||||||||||||||||||
datarequired | WebsiteCommitsResponse | WebsiteCommitsResponse fields
| ||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/businesses/{business_id}/website/photosUpdate website photo mappings
Update website photo selections (partial). Only slot IDs present in the active config are applied.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
business_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request bodyrequired
application/jsonWebsitePhotosUpdateMap of string to string | null
Responses
200Successful Responseapplication/jsonSuccessResponse_WebsiteResponse_| Field | Type | Description |
|---|---|---|
request_idrequired | string | |
success | true | default true |
datarequired | WebsiteResponse | WebsiteResponse fieldsWebsiteResponse, expanded above. |
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. |
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/websites/{website_id}/custom-domainGet custom domain state
Return current custom_domain, worker_name (repo_name), and preview_url when set; otherwise success with custom_domain: null.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
website_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_CustomDomainGetResponse_| Field | Type | Description | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | ||||||||||||||||||||||
success | true | default true | |||||||||||||||||||||
datarequired | CustomDomainGetResponse | CustomDomainGetResponse fields
| |||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | |||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/websites/{website_id}/custom-domainCreate or attach custom domain
Set custom domain for a website. Normalizes apex to www, creates Cloudflare custom hostname if needed, returns DNS instructions.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
website_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request bodyrequired
application/jsonCustomDomainCreateRequest| Field | Type | Description |
|---|---|---|
domainrequired | string |
Responses
200Successful Responseapplication/jsonSuccessResponse_CustomDomainCreateResponse_| Field | Type | Description | ||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||||||||||||||||||||||||||||||||||||||
success | true | default true | ||||||||||||||||||||||||||||||||||||||||||
datarequired | CustomDomainCreateResponse | CustomDomainCreateResponse fields
| ||||||||||||||||||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||||||||||||||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/websites/{website_id}/custom-domainRemove custom domain
Remove custom domain: delete in Cloudflare and clear website.custom_domain. 404 if none configured.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
website_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_CustomDomainDeleteResponse_| Field | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||
success | true | default true | ||||||
datarequired | CustomDomainDeleteResponse | CustomDomainDeleteResponse fields
| ||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/websites/{website_id}/custom-domain-statusGet custom domain status
Return Cloudflare status, ssl_status, validation_records, and dns_instructions when custom_domain is set; else { status: 'none' }.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
website_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_CustomDomainStatusResponse_| Field | Type | Description | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||||||||||||||||||||
success | true | default true | ||||||||||||||||||||||||
datarequired | CustomDomainStatusResponse | CustomDomainStatusResponse fields
| ||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/websites/{website_id}/entri-setupGet Entri setup (token + dnsRecords) for automated DNS
Mint a fresh Entri token and build the dnsRecords for entri.showEntri().
Dedicated endpoint (not folded into create/status) so a fresh short-lived token is minted each time the user opens the modal. 409 if no custom domain is configured yet.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
website_idrequired | path | string (uuid) | |
authorization | header | string | null |
Responses
200Successful Responseapplication/jsonSuccessResponse_EntriSetupResponse_| Field | Type | Description | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||||||||||||||
success | true | default true | ||||||||||||||||||
datarequired | EntriSetupResponse | EntriSetupResponse fields
| ||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/websites/{website_id}/provisioning-streamStream provisioning logs and status for a website (SSE)
Server-Sent Events stream of provisioning logs/status for a website.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
website_idrequired | path | string (uuid) | |
after_seq | query | integer | null | |
authorization | header | string | null |
Responses
200Successful Responsetext/event-streamstring400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/websites/{website_id}/reconcile-custom-domainReconcile orphaned custom domain
Link an orphaned domain (in Cloudflare but not in DB) to this website. 404 if not in CF; 409 if linked to another website.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
website_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request bodyrequired
application/jsonCustomDomainCreateRequestCustomDomainCreateRequest, expanded above.
Responses
200Successful Responseapplication/jsonSuccessResponse_CustomDomainReconcileResponse_| Field | Type | Description | |||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
request_idrequired | string | ||||||||||||||||||||||||||||
success | true | default true | |||||||||||||||||||||||||||
datarequired | CustomDomainReconcileResponse | CustomDomainReconcileResponse fields
| |||||||||||||||||||||||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | |||||||||||||||||||||||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.
/api/v1/admin/websites/{website_id}/reprovisionRe-provision a failed website
Reset a failed website and re-run its build in the background.
404 if the website does not exist, 409 if it is already active or currently provisioning. On success the error is cleared and a fresh build is kicked off. Without a website preview that is the classic path the create endpoint uses (status reset to ``provisioning``); a website preview's failed full build is retried as that build, seeded from the confirmed draft — 409 for a draft not confirmed yet (see ``website_svc.reprovision_website``) — and the answer waits (bounded) for the workflow start it makes, as the preview routes do.
A plain retry: it re-runs the same fixed brief against the business's current backend content. The body is accepted but ignored (see ``WebsiteReprovisionBody``).
Parameters
| Name | In | Type | Description |
|---|---|---|---|
website_idrequired | path | string (uuid) | |
authorization | header | string | null |
Request body
application/jsonWebsiteReprovisionBody | null| Field | Type | Description |
|---|
Responses
200Successful Responseapplication/jsonSuccessResponse_WebsiteReprovisionResponse_| Field | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|
request_idrequired | string | |||||||
success | true | default true | ||||||
datarequired | WebsiteReprovisionResponse | WebsiteReprovisionResponse fields
| ||||||
metadata | ResponseMetadata | null | ResponseMetadata fieldsResponseMetadata, expanded above. | ||||||
meta | ResponseMeta | null | ResponseMeta fieldsResponseMeta, expanded above. |
400Bad request401Unauthorized403Forbidden404Not found422Validation error500Internal server error503Service unavailable
Error bodies: ErrorResponse. See Errors.