Configurações do site
| Método | Caminho | Escopo |
|---|---|---|
GET |
/v1/sites/me/settings |
site:read |
PATCH |
/v1/sites/me/settings |
site:write |
- URL base:
https://api.canverly.com - Auth: chave de API Bearer — o site é o site da chave; não há id para passar
- Limite de requisição: 60 req/min por chave
GET /v1/sites/me/settings
Seção intitulada “GET /v1/sites/me/settings”curl -s https://api.canverly.com/v1/sites/me/settings \ -H "Authorization: Bearer ck_live_xxx"{ "id": "01KVPWYKT6AJDGG2EJN7DW4VT5", "slug": "example-blog", "primary_domain": "blog.example.com", "aliases": ["www.blog.example.com"], "theme_id": "aurora", "default_language": "pt-BR", "enabled_languages": ["pt-BR", "en"], "multi_lang_enabled": true, "prefer_www": false, "force_redirect": true, "child_redirect_mode": "redirect", "redirect_status_code": 301, "settings": { "social": { "instagram": "https://instagram.com/exampleblog" }, "search": { "enabled": true }, "subscriptions_enabled": true }}A resposta é uma projeção: só campos conhecidos são retornados, então um novo
campo interno adicionado no upstream nunca vaza aqui. id, slug, primary_domain
e aliases são somente leitura — voltam no GET, mas não podem ser gravados.
settings é o blob de apresentação/conteúdo. O GET o retorna inteiro, inclusive
chaves que esta API não consegue gravar (veja a allowlist abaixo).
PATCH /v1/sites/me/settings
Seção intitulada “PATCH /v1/sites/me/settings”Dois tipos de campo, ambos opcionais, ambos na allowlist.
Campos de nível superior
Seção intitulada “Campos de nível superior”| Campo | Tipo | Observações |
|---|---|---|
theme_id |
string | Tema ativo. |
default_language |
string | Tag BCP-47. |
enabled_languages |
string[] | Tags BCP-47. |
multi_lang_enabled |
boolean | |
prefer_www |
boolean | O host canônico prefere www.. |
force_redirect |
boolean | Força hosts não canônicos para o domínio principal. |
child_redirect_mode |
string | Como os domínios alias/filhos se comportam. |
redirect_status_code |
integer | 301 ou 302. |
Estes são substituídos pelo valor que você envia.
Chaves de settings
Seção intitulada “Chaves de settings”Dentro do objeto settings, só estas chaves de nível superior são graváveis, e elas
são mescladas por cima do que está armazenado — as chaves omitidas mantêm o valor atual:
social · footer_columns · legal_links · search · customization ·
advanced · subscriptions_enabled · language_url_mode
Marca e identidade — title · tagline · description · logo ·
logo_media_id · logo_svg · logo_url · favicon_svg · favicon_png_url ·
favicon_png_media_id · favicon_ico_url · favicon_ico_media_id
As variantes legadas são todas graváveis porque o site as lê em cascata
(logo → logo_svg → logo_url); permitir só a moderna deixaria você
gravar um campo que o site nunca lê. Envie o arquivo com
POST /v1/media primeiro e armazene o id
retornado — um site inteiro pode ganhar marca sem abrir o painel.
Um corpo sem nenhum campo gravável é um 400 cuja mensagem lista tudo
o que é aceito.
Exemplo
Seção intitulada “Exemplo”curl -X PATCH https://api.canverly.com/v1/sites/me/settings \ -H "Authorization: Bearer ck_live_xxx" \ -H "Content-Type: application/json" \ -d '{ "default_language": "pt-BR", "enabled_languages": ["pt-BR", "en"], "multi_lang_enabled": true, "settings": { "social": { "instagram": "https://instagram.com/exampleblog" }, "subscriptions_enabled": true } }'200 OK retorna a mesma projeção do GET, refletindo o novo estado — então
uma única chamada basta para gravar e confirmar.
| Status | error.code |
Quando |
|---|---|---|
400 |
bad_request |
Nenhum campo gravável no corpo (no updatable settings provided (allowed: …)). |
401 |
unauthorized |
Chave ausente/inválida/revogada. |
403 |
forbidden |
A chave não tem site:read / site:write. |
429 |
rate_limited |
Acima de 60 req/min — respeite o Retry-After. |
502 |
upstream |
Erro transitório no upstream; tente de novo com backoff. |