Designs
Os designs do Cord Studio como código: guarde-os no seu repositório, verifique-os antes de enviá-los e escolha com qual sai cada orçamento.
Visão geral
Um design do Cord Studio decide como o seu cliente vê o link do orçamento: a ordem dos blocos, o conteúdo, o estilo e o que ele muda do tema da sua empresa. Pela API, é o mesmo documento JSON que a aba Código do editor visual mostra, e o Cord o valida com as mesmas regras: os blocos de que o seu cliente precisa antes de aprovar, o contraste de 4,5 para 1 e as mídias da biblioteca da sua empresa.
Com a API, você pode guardar os seus designs no seu repositório, verificá-los na sua CI e enviá-los para a sua conta. As operações completas, com cada campo, estão na Referência da API.
| Campo | O que é |
|---|---|
object |
Sempre "diseno". |
id |
UUID do design. |
nombre |
De 1 a 80 caracteres. |
descripcion |
Descrição interna, até 280 caracteres; null sem descrição. O seu cliente não a vê. |
predeterminado |
true se é o design com que saem os orçamentos que não escolhem outro. Só um é o padrão de cada vez. |
actualizado |
Última edição, ISO 8601. |
diseno |
O documento: esquema (hoje 1), temaOverrides (o que o design muda do tema da sua empresa) e paginas, cada uma com os seus bloques (id, tipo, props e estilo). Só vem no detalhe e nas respostas de criar e editar. |
Listar e consultar
GET /api/v1/disenos devolve os seus designs não arquivados, sem o documento: primeiro o padrão e depois do editado mais recentemente ao mais antigo. Não é paginado, porque uma conta tem até 100.
curl "https://cordhq.app/api/v1/disenos" \
-H "Authorization: Bearer sk_live_tU..."
{
"data": [
{ "object": "diseno", "id": "5b2e8c41-7d3a-4f19-9e6b-0c4a2d8f1b73", "nombre": "Proposta de obra", "descripcion": "Com capa, cronograma e garantia", "predeterminado": true, "actualizado": "2026-11-10T16:42:08.000Z" },
{ "object": "diseno", "id": "c8d1f6a2-3e4b-4a7c-8f05-6b9e2d1c7a40", "nombre": "Manutenção mensal", "descripcion": null, "predeterminado": false, "actualizado": "2026-11-08T19:05:31.000Z" }
]
}
GET /api/v1/disenos/{id} devolve um design com o documento em diseno. O id de um design que não existe ou que está arquivado responde 404 not_found.
Criar um design
POST /api/v1/disenos aceita nombre, descripcion e uma destas duas fontes, nunca as duas juntas:
diseno: um documento completo, por exemplo um que você baixou comGET /api/v1/disenos/{id}ou copiou da aba Código.plantilla: um dos dezoito modelos da galeria:agencia,arquitectura,eventos,consultoria,software,fotografia,industrial,salud,educacion,inmobiliaria,minimal,editorial,noche,brutalista,tropical,gala,popouescenario. Os textos saem no idioma da sua conta e com os usos do país da sua empresa, e semnombreo design recebe o nome do modelo.gala,popeescenariopersonalizam os blocos do Cord: sem o plano Profissional respondem 402subscription_required.
Sem nenhuma das duas, o design nasce como o Cartão do Cord, o design de sempre, e se chama "Diseño nuevo". Um design novo não é o padrão: para usá-lo, marque-o como explica a seção seguinte.
curl -X POST "https://cordhq.app/api/v1/disenos" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: design-obra-2027" \
-d '{ "plantilla": "arquitectura", "nombre": "Proposta de obra 2027" }'
Responde com o design criado, com o documento. Com um diseno que não passa na validação, responde 400 invalid_request com issues (veja Validar sem salvar), e se a sua conta já tiver 100 designs não arquivados, 409 disenos_tope.
Editar e definir o padrão
PATCH /api/v1/disenos/{id} muda o que você envia e mantém o resto:
| Campo | Efeito |
|---|---|
nombre, descripcion |
Substituem os salvos; descripcion: null a remove. |
diseno |
Substitui o documento inteiro. O Cord o valida como na criação. |
predeterminado |
true o usa nos orçamentos enviados a partir de agora, e o anterior deixa de ser o padrão. false no padrão deixa de usá-lo: os seus orçamentos voltam a sair com o Cartão do Cord. |
curl -X PATCH "https://cordhq.app/api/v1/disenos/5b2e8c41-7d3a-4f19-9e6b-0c4a2d8f1b73" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: padrao-obra-2027" \
-d '{ "predeterminado": true }'
Responde com o design atualizado. Editar um design ou mudar o padrão não mexe no que os seus clientes já receberam: cada orçamento congela o seu design ao ser enviado.
Validar sem salvar
POST /api/v1/disenos/validar recebe { "diseno": { … } } e o verifica como o editor, sem salvar nada. Use-o na sua CI antes de enviar um design; basta uma chave com leitura sobre disenos.
curl -X POST "https://cordhq.app/api/v1/disenos/validar" \
-H "Authorization: Bearer sk_test_tU..." \
-H "Content-Type: application/json" \
-d @disenos/proposta-de-obra.json
Se o design pode ser salvo, responde 200 com object: "diseno_validacion", valido: true, avisos (o que não impede salvar, mas vale revisar, como uma variável que não existe ou um texto difícil de ler), diseno (o documento como o Cord o salvaria, com os valores padrão que ele completa) e personaliza_bloques_cord, que diz se salvá-lo assim precisa do plano Profissional.
Se não, responde 400 invalid_request. issues traz cada problema com o caminho em path (separado por pontos), o que está errado em message e um código estável em codigo, como esquema, falta_bloque, orden_aprobacion, contraste, superficie_no_solida ou medio_desconocido. field é o caminho do primeiro:
{
"error": "diseno.paginas: Falta un bloque que el cliente necesita ver antes de aprobar.",
"code": "invalid_request",
"field": "diseno.paginas",
"issues": [
{ "path": "diseno.paginas", "message": "Falta un bloque que el cliente necesita ver antes de aprobar.", "codigo": "falta_bloque" },
{ "path": "diseno.paginas.0.bloques.4.props.medio", "message": "Este medio no está en la biblioteca del negocio.", "codigo": "medio_desconocido" }
]
}
As mensagens de message chegam em espanhol. Um design aceita até 60 blocos e 64 KB, e só usa imagens e vídeos da biblioteca de mídia da sua empresa, que você envia na aba Mídia do editor; no ambiente de teste, também os da sua conta real. Criar e editar devolvem a mesma resposta 400 quando o design não passa.
Arquivar
DELETE /api/v1/disenos/{id} arquiva o design e responde { "data": { "id": "…", "archivado": true } }. Ele deixa de aparecer na lista e de contar no limite de 100. Os orçamentos que já foram enviados com ele não mudam, e um rascunho que o tinha escolhido sai com o padrão.
curl -X DELETE "https://cordhq.app/api/v1/disenos/c8d1f6a2-3e4b-4a7c-8f05-6b9e2d1c7a40" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Idempotency-Key: arquivar-manutencao"
O padrão não é arquivado: responde 409 no_archivable. Marque outro design como padrão, ou tire a marca com predeterminado: false, e tente de novo.
Escolher o design de um orçamento
POST /api/v1/cotizaciones e PATCH /api/v1/cotizaciones/{id} aceitam diseno_id: o id de um dos seus designs, ou null para o orçamento sair com o padrão. Só muda um rascunho: um orçamento enviado mantém o design com que saiu. Com uma chave publicável, o Cord ignora diseno_id.
curl -X PATCH "https://cordhq.app/api/v1/cotizaciones/2a9d8e4f-6b1c-4d7a-9e3f-5c8b1a2d4e6f" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: design-orcamento-2a9d8e4f" \
-d '{ "diseno_id": "c8d1f6a2-3e4b-4a7c-8f05-6b9e2d1c7a40" }'
O detalhe do orçamento traz diseno_id, o design escolhido (null se ele sai com o padrão), e diseno_propio, true se alguém criou um design só para ele no editor; esse design prevalece sobre diseno_id. Ao enviá-lo, o Cord usa o design próprio, o escolhido, o padrão ou o Cartão do Cord, nessa ordem, e o congela. Mais em API de Orçamentos e em Crie o design de um único orçamento.
Na sua página, o <CordBuilder disenoId> do Cord Elements cria o orçamento com um design: uma chave publicável ou o proxy do Elements também o aceitam, com a mesma regra do plano. O orçamento incorporado mostra o tema com que o orçamento saiu e só os seus blocos do Cord (Aparência).
Planos
As rotas desta página funcionam em todos os planos, exceto duas coisas que fazem parte do plano Profissional (e também do Scale e do Developer):
- Personalizar os blocos do Cord: os textos, a aparência e a superfície deles, em
propseestilo.superficiede um bloco do Cord. Criar ou editar um design que acrescenta uma personalização responde402 subscription_required; o que já estava salvo é mantido. Opersonaliza_bloques_cordda validação avisa você antes de enviá-lo. - Escolher o design de um orçamento com
diseno_id, que responde402 subscription_requiredsem o plano.nullé sempre aceito.
A resposta 402 traz plan (o atual) e plan_required. Sem o plano, o que foi salvo é mantido, mas não é aplicado: os seus orçamentos saem com o design padrão e os blocos do Cord aparecem como sempre.
Pela CLI
Desde a versão 2.3.0, a CLI do Cord baixa e envia os seus designs como arquivos JSON. Como a CLI só usa chaves de teste, cord disenos trabalha sobre o seu ambiente de teste, que nasce com uma cópia dos designs não arquivados da sua conta real. Reiniciá-lo os copia de novo com ids novos, então depois de um reinício rode pull outra vez; um ambiente de teste que já existia recebe a cópia na próxima vez que você o reinicia.
cord disenos pull --dir disenos
cord disenos validar disenos
cord disenos push disenos/proposta-de-obra.json
pullgrava um arquivo por design em./disenos, ou na pasta de--dir. Se já houver um arquivo com o mesmoid, ele o reescreve.validarverifica um arquivo ou todos os.jsonde uma pasta, comoPOST /api/v1/disenos/validar, sem salvar nada.pushatualiza os designs cujo arquivo trazid, cria os demais e grava no arquivo oidnovo. Envianombre,descripcionediseno; não muda qual é o design padrão.pushevalidarlistam cada problema com o caminho e o código, seguem para o próximo arquivo e terminam com código1.- Com
--json, cada comando imprime{"type":"disenos_pull",…},{"type":"disenos_push",…}ou{"type":"disenos_validar",…}com o resultado de cada arquivo.
Cada arquivo traz id, nombre, descripcion, predeterminado e diseno. Aqui vai abreviado, porque ao baixá-lo o Cord completa props e estilo de cada bloco com os valores padrão:
{
"id": "5b2e8c41-7d3a-4f19-9e6b-0c4a2d8f1b73",
"nombre": "Proposta de obra",
"descripcion": "Com capa e os blocos do Cord",
"predeterminado": true,
"diseno": {
"esquema": 1,
"temaOverrides": {},
"paginas": [
{
"id": "principal",
"bloques": [
{ "id": "portada", "tipo": "portada", "props": { "titulo": "Proposta para {cliente.empresa}" } },
{ "id": "encabezado", "tipo": "encabezado" },
{ "id": "metadatos", "tipo": "meta" },
{ "id": "totalcord", "tipo": "total" },
{ "id": "partidas", "tipo": "partidas" },
{ "id": "planpagos", "tipo": "plan_pagos" },
{ "id": "notascord", "tipo": "notas" },
{ "id": "legalcord", "tipo": "legal" },
{ "id": "aprobacion", "tipo": "aprobacion" },
{ "id": "conversacion", "tipo": "conversacion" },
{ "id": "contacto", "tipo": "contacto" },
{ "id": "piecord", "tipo": "pie" }
]
}
]
}
}
Levar um design para a sua conta real
A CLI não envia nada para a sua conta real. Para isso, mande o mesmo arquivo para POST /api/v1/disenos com uma chave secreta de produção, a partir do seu servidor ou da sua CI. O Cord ignora o id e o predeterminado do arquivo e responde com o design novo e o id dele na sua conta real:
curl -X POST "https://cordhq.app/api/v1/disenos" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: enviar-proposta-de-obra" \
-d @disenos/proposta-de-obra.json
O seu ambiente de teste usa a biblioteca de mídia da sua conta real, somente leitura: um design que só usa imagens e vídeos da sua conta real é enviado a ela sem mudanças. As que você envia no ambiente de teste são só dele, e um design que as usa responde medio_desconocido na sua conta real: envie-as para a biblioteca da sua conta real e troque os ids, ou remova-as, antes de enviar o design. Para usá-lo nos seus orçamentos, marque-o depois com PATCH e predeterminado: true.
Pelos SDKs
Os SDKs de servidor têm o recurso designs, com os mesmos campos da API:
| SDK | Métodos |
|---|---|
Node (@flouviahq/node, desde a 1.4.0) |
cord.designs.list, create, retrieve, update, validate e del |
Python (cord-sdk, desde a 1.2.0) |
cord.designs.list, create, retrieve, update, validate e delete, também no AsyncCord |
PHP (flouviahq/cord, desde a 1.2.0) |
$cord->designs->list, create, retrieve, update, validate e delete |
validate recebe o documento e responde como POST /api/v1/disenos/validar: um design inválido chega como erro invalid_request com os seus issues. Veja SDK de Node.
Pelo MCP
O servidor MCP do Cord tem duas ferramentas de designs. Elas não criam nem editam designs: isso é feito no editor, na API ou na CLI.
| Ferramenta | O que faz | Grupo e recurso |
|---|---|---|
listar_disenos |
Lista os seus designs em items (id, nombre, descripcion e predeterminado), e elegir_por_cotizacion diz se o seu plano deixa escolher um por orçamento. |
Leitura, disenos |
aplicar_diseno |
Escolhe com qual design sai um orçamento em rascunho: recebe cotizacion_id e diseno_id (ou null para o padrão). Não envia nada ao cliente. |
Escrita de rascunhos, cotizaciones |
Permissões e erros
Uma chave restrita precisa do recurso disenos: Leitura para listar, consultar e validar, e Escrita para criar, editar e arquivar. Escolher o design de um orçamento pede escrita sobre cotizaciones. A chave do cord login já inclui disenos.
| Código | Status | Quando |
|---|---|---|
insufficient_permissions |
403 | A chave restrita não tem permissão sobre disenos. |
invalid_request |
400 | Um campo não é válido, você enviou diseno e plantilla juntos ou o design não passa na validação. |
subscription_required |
402 | O design personaliza os blocos do Cord, ou diseno_id escolhe um design, sem o plano Profissional. |
not_found |
404 | O design não existe ou está arquivado, ou diseno_id não é um dos seus designs. |
disenos_tope |
409 | A sua conta já tem 100 designs não arquivados. |
no_archivable |
409 | Você tentou arquivar o design padrão. |
rate_limited |
429 | A sua organização já fez 30 mudanças de designs no último minuto (ao criar ou arquivar) ou 120 (ao editar). |