Designs
Die Designs von Cord Studio als Code: Legen Sie sie in Ihrem Repository ab, prüfen Sie sie vor dem Hochladen und wählen Sie, mit welchem Design jedes Angebot gesendet wird.
Überblick
Ein Design von Cord Studio bestimmt, wie Ihr Kunde den Angebotslink sieht: die Reihenfolge der Blöcke, ihren Inhalt, ihren Stil und was es am Theme Ihres Unternehmens ändert. Über die API ist es dasselbe JSON-Dokument, das der Tab Code des visuellen Editors zeigt, und Cord prüft es mit denselben Regeln: die Blöcke, die Ihr Kunde vor der Bestätigung braucht, den Kontrast von 4,5 zu 1 und die Medien aus der Mediathek Ihres Unternehmens.
Mit der API können Sie Ihre Designs in Ihrem Repository ablegen, in Ihrer CI prüfen und in Ihr Konto hochladen. Die vollständigen Operationen mit jedem Feld finden Sie in der API-Referenz.
| Feld | Bedeutung |
|---|---|
object |
Immer "diseno". |
id |
UUID des Designs. |
nombre |
1 bis 80 Zeichen. |
descripcion |
Interne Beschreibung, bis zu 280 Zeichen; null ohne Beschreibung. Ihr Kunde sieht sie nicht. |
predeterminado |
true, wenn es das Design ist, mit dem Angebote ohne eigene Wahl gesendet werden. Es gibt immer nur ein Standarddesign. |
actualizado |
Letzte Bearbeitung, ISO 8601. |
diseno |
Das Dokument: esquema (heute 1), temaOverrides (was das Design am Theme Ihres Unternehmens ändert) und paginas, jede mit ihren bloques (id, tipo, props und estilo). Es ist nur in der Detailansicht und in den Antworten auf Anlegen und Bearbeiten enthalten. |
Auflisten und abrufen
GET /api/v1/disenos liefert Ihre nicht archivierten Designs ohne ihr Dokument: zuerst das Standarddesign, dann vom zuletzt bearbeiteten bis zum ältesten. Die Liste ist nicht paginiert, weil ein Konto höchstens 100 hat.
curl "https://cordhq.app/api/v1/disenos" \
-H "Authorization: Bearer sk_live_tU..."
{
"data": [
{ "object": "diseno", "id": "5b2e8c41-7d3a-4f19-9e6b-0c4a2d8f1b73", "nombre": "Bauangebot", "descripcion": "Mit Titelseite, Zeitplan und Garantie", "predeterminado": true, "actualizado": "2026-11-10T16:42:08.000Z" },
{ "object": "diseno", "id": "c8d1f6a2-3e4b-4a7c-8f05-6b9e2d1c7a40", "nombre": "Monatliche Wartung", "descripcion": null, "predeterminado": false, "actualizado": "2026-11-08T19:05:31.000Z" }
]
}
GET /api/v1/disenos/{id} liefert ein Design mit seinem Dokument in diseno. Die ID eines Designs, das nicht existiert oder archiviert ist, ergibt 404 not_found.
Ein Design anlegen
POST /api/v1/disenos akzeptiert nombre, descripcion und eine dieser beiden Quellen, nie beide zusammen:
diseno: ein vollständiges Dokument, zum Beispiel eines, das Sie mitGET /api/v1/disenos/{id}heruntergeladen oder aus dem Tab Code kopiert haben.plantilla: eine der achtzehn Vorlagen der Galerie:agencia,arquitectura,eventos,consultoria,software,fotografia,industrial,salud,educacion,inmobiliaria,minimal,editorial,noche,brutalista,tropical,gala,popoderescenario. Ihre Texte kommen in der Sprache Ihres Kontos und mit den Gepflogenheiten des Landes Ihres Unternehmens, und ohnenombreübernimmt das Design den Namen der Vorlage.gala,popundescenariopassen die Cord-Blöcke an: Ohne den Professional-Tarif antworten sie mit 402subscription_required.
Ohne beide beginnt das Design als Cord-Karte, das bisherige Design, und heißt "Diseño nuevo". Ein neues Design ist nicht das Standarddesign: Um es zu verwenden, legen Sie es fest, wie im nächsten Abschnitt beschrieben.
curl -X POST "https://cordhq.app/api/v1/disenos" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: design-bauangebot-2027" \
-d '{ "plantilla": "arquitectura", "nombre": "Bauangebot 2027" }'
Die Antwort enthält das angelegte Design mit seinem Dokument. Mit einem diseno, das die Prüfung nicht besteht, lautet sie 400 invalid_request mit issues (siehe Ohne Speichern prüfen), und wenn Ihr Konto bereits 100 nicht archivierte Designs hat, 409 disenos_tope.
Bearbeiten und als Standard festlegen
PATCH /api/v1/disenos/{id} ändert, was Sie senden, und behält den Rest:
| Feld | Wirkung |
|---|---|
nombre, descripcion |
Ersetzen die gespeicherten Werte; descripcion: null entfernt sie. |
diseno |
Ersetzt das ganze Dokument. Cord prüft es wie beim Anlegen. |
predeterminado |
true verwendet es für Angebote, die ab jetzt gesendet werden, und das bisherige ist nicht mehr Standard. false beim Standarddesign beendet seine Verwendung: Ihre Angebote werden wieder mit der Cord-Karte gesendet. |
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: standard-bauangebot-2027" \
-d '{ "predeterminado": true }'
Die Antwort enthält das geänderte Design. Ein Design zu bearbeiten oder das Standarddesign zu wechseln, ändert nichts an dem, was Ihre Kunden bereits erhalten haben: Jedes Angebot friert sein Design beim Senden ein.
Ohne Speichern prüfen
POST /api/v1/disenos/validar nimmt { "diseno": { … } } entgegen und prüft es wie der Editor, ohne etwas zu speichern. Verwenden Sie es in Ihrer CI, bevor Sie ein Design hochladen; ein Schlüssel mit Leseberechtigung für disenos genügt.
curl -X POST "https://cordhq.app/api/v1/disenos/validar" \
-H "Authorization: Bearer sk_test_tU..." \
-H "Content-Type: application/json" \
-d @disenos/bauangebot.json
Lässt sich das Design speichern, lautet die Antwort 200 mit object: "diseno_validacion", valido: true, avisos (was das Speichern nicht verhindert, aber einen Blick wert ist, etwa eine Variable, die es nicht gibt, oder ein schwer lesbarer Text), diseno (das Dokument, wie Cord es speichern würde, mit den ergänzten Standardwerten) und personaliza_bloques_cord, das angibt, ob das Speichern in dieser Form den Professional-Tarif braucht.
Andernfalls lautet sie 400 invalid_request. issues enthält jedes Problem mit seinem Pfad in path (durch Punkte getrennt), was falsch ist, in message und einen festen Code in codigo, etwa esquema, falta_bloque, orden_aprobacion, contraste, superficie_no_solida oder medio_desconocido. field ist der Pfad des ersten:
{
"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" }
]
}
Die Texte in message kommen auf Spanisch. Ein Design umfasst bis zu 60 Blöcke und 64 KB und verwendet nur Bilder und Videos aus der Mediathek Ihres Unternehmens, die Sie im Tab Medien des Editors hochladen; in der Testumgebung auch die Ihres echten Kontos. Anlegen und Bearbeiten liefern dieselbe 400-Antwort, wenn das Design die Prüfung nicht besteht.
Archivieren
DELETE /api/v1/disenos/{id} archiviert das Design und antwortet mit { "data": { "id": "…", "archivado": true } }. Es erscheint nicht mehr in der Liste und zählt nicht mehr zum Limit von 100. Bereits damit gesendete Angebote ändern sich nicht, und ein Entwurf, der es gewählt hatte, wird mit dem Standarddesign gesendet.
curl -X DELETE "https://cordhq.app/api/v1/disenos/c8d1f6a2-3e4b-4a7c-8f05-6b9e2d1c7a40" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Idempotency-Key: wartung-archivieren"
Das Standarddesign lässt sich nicht archivieren: Die Antwort lautet 409 no_archivable. Legen Sie ein anderes Design als Standard fest oder entfernen Sie die Markierung mit predeterminado: false, und versuchen Sie es erneut.
Das Design eines Angebots wählen
POST /api/v1/cotizaciones und PATCH /api/v1/cotizaciones/{id} akzeptieren diseno_id: die ID eines Ihrer Designs oder null, damit das Angebot mit dem Standarddesign gesendet wird. Es ändert nur einen Entwurf: Ein gesendetes Angebot behält das Design, mit dem es gesendet wurde. Mit einem öffentlichen Schlüssel ignoriert Cord 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-angebot-2a9d8e4f" \
-d '{ "diseno_id": "c8d1f6a2-3e4b-4a7c-8f05-6b9e2d1c7a40" }'
Die Detailansicht des Angebots enthält diseno_id, das gewählte Design (null, wenn es mit dem Standarddesign gesendet wird), und diseno_propio, true, wenn jemand das Angebot im Editor einzeln gestaltet hat; dieses Design hat Vorrang vor diseno_id. Beim Senden nimmt Cord das eigene Design, das gewählte, das Standarddesign oder die Cord-Karte, in dieser Reihenfolge, und friert es ein. Mehr dazu in der Angebots-API und unter Ein einzelnes Angebot gestalten.
Auf Ihrer Seite legt <CordBuilder disenoId> von Cord Elements das Angebot mit einem Design an: Auch ein öffentlicher Schlüssel oder der Elements-Proxy akzeptieren es, mit derselben Tarifregel. Das eingebettete Angebot zeigt das Theme, mit dem das Angebot verschickt wurde, und nur seine Cord-Blöcke (Erscheinungsbild).
Tarife
Die Routen auf dieser Seite funktionieren in allen Tarifen, außer zwei Dingen, die zum Professional-Tarif gehören (und auch zu Scale und Developer):
- Cord-Blöcke anpassen: ihre Texte, ihre Darstellung und ihre Fläche, in
propsundestilo.superficieeines Cord-Blocks. Ein Design anzulegen oder zu bearbeiten, das eine Anpassung hinzufügt, ergibt402 subscription_required; was bereits gespeichert war, bleibt erhalten.personaliza_bloques_cordaus der Prüfung zeigt es Ihnen vor dem Hochladen. - Das Design eines Angebots wählen mit
diseno_id, was ohne den Tarif402 subscription_requiredergibt.nullwird immer akzeptiert.
Die 402-Antwort enthält plan (den aktuellen) und plan_required. Ohne den Tarif bleibt das Gespeicherte erhalten, wird aber nicht angewendet: Ihre Angebote werden mit dem Standarddesign gesendet, und die Cord-Blöcke sehen aus wie immer.
Über die CLI
Ab Version 2.3.0 lädt die Cord-CLI Ihre Designs als JSON-Dateien herunter und hoch. Da die CLI nur Testschlüssel verwendet, arbeitet cord disenos in Ihrer Testumgebung, die mit einer Kopie der nicht archivierten Designs Ihres echten Kontos entsteht. Beim Zurücksetzen werden sie erneut kopiert, mit neuen IDs: Führen Sie nach einem Zurücksetzen pull noch einmal aus. Eine Testumgebung, die es schon gab, erhält die Kopie beim nächsten Zurücksetzen.
cord disenos pull --dir disenos
cord disenos validar disenos
cord disenos push disenos/bauangebot.json
pullschreibt pro Design eine Datei nach./disenosoder in den Ordner von--dir. Gibt es schon eine Datei mit derselbenid, wird sie überschrieben.validarprüft eine Datei oder alle.jsoneines Ordners wiePOST /api/v1/disenos/validar, ohne etwas zu speichern.pushaktualisiert die Designs, deren Datei eineidenthält, legt die übrigen an und schreibt die neueidin die Datei. Gesendet werdennombre,descripcionunddiseno; welches Design der Standard ist, ändert sich nicht.pushundvalidarlisten jedes Problem mit Pfad und Code auf, machen mit der nächsten Datei weiter und enden mit dem Exit-Code1.- Mit
--jsongibt jeder Befehl{"type":"disenos_pull",…},{"type":"disenos_push",…}oder{"type":"disenos_validar",…}mit dem Ergebnis jeder Datei aus.
Jede Datei enthält id, nombre, descripcion, predeterminado und diseno. Hier gekürzt, denn beim Herunterladen ergänzt Cord props und estilo jedes Blocks mit ihren Standardwerten:
{
"id": "5b2e8c41-7d3a-4f19-9e6b-0c4a2d8f1b73",
"nombre": "Bauangebot",
"descripcion": "Mit Titelseite und den Cord-Blöcken",
"predeterminado": true,
"diseno": {
"esquema": 1,
"temaOverrides": {},
"paginas": [
{
"id": "principal",
"bloques": [
{ "id": "portada", "tipo": "portada", "props": { "titulo": "Angebot für {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" }
]
}
]
}
}
Ein Design in Ihr echtes Konto übernehmen
Die CLI lädt nichts in Ihr echtes Konto hoch. Senden Sie dafür dieselbe Datei mit einem geheimen Live-Schlüssel an POST /api/v1/disenos, von Ihrem Server oder Ihrer CI aus. Cord ignoriert id und predeterminado der Datei und antwortet mit dem neuen Design und seiner id in Ihrem echten Konto:
curl -X POST "https://cordhq.app/api/v1/disenos" \
-H "Authorization: Bearer sk_live_tU..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: bauangebot-hochladen" \
-d @disenos/bauangebot.json
Ihre Testumgebung nutzt die Mediathek Ihres echten Kontos, nur lesend: Ein Design, das nur Bilder und Videos Ihres echten Kontos verwendet, lässt sich unverändert dorthin hochladen. Was Sie in der Testumgebung hochladen, gehört nur ihr, und ein Design, das es verwendet, ergibt in Ihrem echten Konto medio_desconocido: Laden Sie diese Medien in die Mediathek Ihres echten Kontos hoch und ersetzen Sie ihre IDs, oder entfernen Sie sie, bevor Sie das Design hochladen. Um es für Ihre Angebote zu verwenden, legen Sie es danach mit PATCH und predeterminado: true als Standard fest.
Über die SDKs
Die Server-SDKs haben die Ressource designs mit denselben Feldern wie die API:
| SDK | Methoden |
|---|---|
Node (@flouviahq/node, ab 1.4.0) |
cord.designs.list, create, retrieve, update, validate und del |
Python (cord-sdk, ab 1.2.0) |
cord.designs.list, create, retrieve, update, validate und delete, auch in AsyncCord |
PHP (flouviahq/cord, ab 1.2.0) |
$cord->designs->list, create, retrieve, update, validate und delete |
validate nimmt das Dokument entgegen und antwortet wie POST /api/v1/disenos/validar: Ein ungültiges Design kommt als Fehler invalid_request mit seinen issues zurück. Siehe Node-SDK.
Über MCP
Der MCP-Server von Cord hat zwei Tools für Designs. Sie legen keine Designs an und bearbeiten keine: Das geschieht im Editor, über die API oder die CLI.
| Tool | Funktion | Gruppe und Ressource |
|---|---|---|
listar_disenos |
Listet Ihre Designs in items (id, nombre, descripcion und predeterminado), und elegir_por_cotizacion gibt an, ob Ihr Tarif ein Design pro Angebot erlaubt. |
Lesen, disenos |
aplicar_diseno |
Wählt, mit welchem Design ein Angebot im Entwurf gesendet wird: nimmt cotizacion_id und diseno_id entgegen (oder null für das Standarddesign). Sendet nichts an den Kunden. |
Entwürfe schreiben, cotizaciones |
Berechtigungen und Fehler
Ein eingeschränkter Schlüssel braucht die Ressource disenos: Lesen zum Auflisten, Abrufen und Prüfen und Schreiben zum Anlegen, Bearbeiten und Archivieren. Das Design eines Angebots zu wählen, braucht Schreibberechtigung für cotizaciones. Der Schlüssel von cord login enthält disenos bereits.
| Code | Status | Wann |
|---|---|---|
insufficient_permissions |
403 | Der eingeschränkte Schlüssel hat keine Berechtigung für disenos. |
invalid_request |
400 | Ein Feld ist ungültig, Sie haben diseno und plantilla zusammen gesendet, oder das Design besteht die Prüfung nicht. |
subscription_required |
402 | Das Design passt Cord-Blöcke an, oder diseno_id wählt ein Design, ohne den Professional-Tarif. |
not_found |
404 | Das Design existiert nicht oder ist archiviert, oder diseno_id ist keines Ihrer Designs. |
disenos_tope |
409 | Ihr Konto hat bereits 100 nicht archivierte Designs. |
no_archivable |
409 | Sie haben versucht, das Standarddesign zu archivieren. |
rate_limited |
429 | Ihre Organisation hat in der letzten Minute bereits 30 Designänderungen vorgenommen (beim Anlegen oder Archivieren) oder 120 (beim Bearbeiten). |