{
"type": "https://docs.craqui.com/errors/revoked_api_key",
"title": "La clave fue revocada",
"status": 401,
"code": "revoked_api_key",
"detail": "Crea una clave nueva en Configuración → Integraciones.",
"request_id": "req_01hzx8m4k2a7d9q3f5w6y8z0bc"
}
{
"type": "https://docs.craqui.com/errors/sandbox_unavailable",
"title": "Tu estudio de prueba no está listo",
"status": 409,
"code": "sandbox_unavailable",
"detail": "Restablece tus datos de prueba en Configuración → Integraciones y vuelve a intentar.",
"request_id": "req_01hzx8m4k2a7d9q3f5w6y8z0bc"
}
Da de alta a un cliente, con las mismas reglas que el alta desde Craqui. Hace falta first_name y un email
o un phone. Al cliente no le llega ningún aviso por el alta.
Antes de crear a nadie, Craqui busca a la persona en tu estudio, por el email (o, sin email, por el teléfono):
si ya es cliente activo, responde 200 con ese cliente y created: false, sin cambiar nada;
si está en el estudio con otro rol (por ejemplo, del equipo), pasa a ser cliente también, con sus datos
como están, y responde 201;
si no está, la da de alta y responde 201.
La respuesta trae email y phone solo si la clave tiene clients.pii:read, y el header ETag para un
PATCH posterior. En tu estudio de prueba, el cliente lleva un email de example.com, example.org o
example.net. Con dry_run=true responde 200 con la vista previa.
Rechazos (409): email_in_use (el email es de una persona que no está en tu estudio; nunca se dice de
quién), phone_in_use, client_inactive (el cliente está dado de baja: se reactiva con
POST /v1/clients/{id}/reactivate),
plan_client_limit_reached. Un center_id que no es de tu negocio responde 404 not_found.
Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia
responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API
(write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con
unknown_field. Cuenta para el límite de escrituras (30 por minuto).
{
"type": "https://docs.craqui.com/errors/revoked_api_key",
"title": "La clave fue revocada",
"status": 401,
"code": "revoked_api_key",
"detail": "Crea una clave nueva en Configuración → Integraciones.",
"request_id": "req_01hzx8m4k2a7d9q3f5w6y8z0bc"
}
{
"type": "https://docs.craqui.com/errors/sandbox_unavailable",
"title": "Tu estudio de prueba no está listo",
"status": 409,
"code": "sandbox_unavailable",
"detail": "Restablece tus datos de prueba en Configuración → Integraciones y vuelve a intentar.",
"request_id": "req_01hzx8m4k2a7d9q3f5w6y8z0bc"
}
Clave del negocio. sk es una clave completa (todo lo que el rol de quien la creó puede dar)
y rk una restringida a los permisos que se eligieron al crearla. Solo se usa desde un
servidor: un pedido desde un navegador se rechaza con browser_not_allowed.
Obligatorio en todo pedido que crea o cambia algo, salvo con dry_run=true. Un valor único por
operación (por ejemplo un UUID). Si repites el pedido con la misma clave y el mismo cuerpo dentro de 24
horas, recibes la misma respuesta (con el header Idempotent-Replayed: true) sin que se repita el efecto,
también la misma respuesta de error: para intentar de nuevo algo que se rechazó, usa una clave nueva.
Con un dry_run=true la clave se ignora y no se guarda: el pedido real puede usar la misma. Pasadas las 24
horas, repetir una reserva con la misma clave y el mismo cuerpo sigue devolviendo la reserva que se hizo
(como está ahora), y la misma clave con otro cuerpo responde idempotency_key_reused.
true para ver qué pasaría sin hacerlo: Craqui evalúa el pedido con las mismas reglas que el real y
responde 200 con un objeto preview, sin escribir nada ni avisarle a nadie. Cuenta para el límite de
escrituras. false (o sin el parámetro) hace el pedido real. Es el único parámetro de consulta de una
escritura.
Si ya es de un cliente activo del estudio, la respuesta es ese cliente (200, created: false). Si es de
alguien que ya está en el estudio con otro rol, pasa a ser cliente también, con sus datos como están. Si es
de una persona que no está en el estudio, 409 email_in_use; si es de un cliente dado de baja,
409 client_inactive.
En E.164 (+59899123456), o como se marca en el país con phone_country_code (si no lo mandas, el país del
estudio). Sin email, el teléfono distingue al cliente: el de un cliente activo con el mismo nombre devuelve
ese cliente, y el de alguien de otro nombre responde 409 phone_in_use.
Datos tuyos sobre el objeto (por ejemplo el id del cliente en tu sistema), que Craqui guarda y te devuelve sin
mirarlos. Hasta 20 claves de 1 a 40 caracteres (a-z, 0-9 y _), con valores de texto de hasta 500. Solo
los ve tu sistema, por la API: ni el estudio en su panel ni el cliente. No guardes datos sensibles.
Al cliente no le llega ningún aviso por darlo de alta. false apaga el aviso «nuevo cliente» al panel del
estudio, como una carga por planilla. Necesita el permiso notifications:suppress.
Response
Con dry_run=true, la vista previa (no se escribió nada). Sin él, el cliente que ya existía, con
created: false.
Option 1
Option 2
Lo que haría un alta o un cambio de un cliente, sin hacerlo. Craqui lo evalúa con las mismas reglas que el pedido
real: si el real se rechazaría, la vista previa responde el mismo error.
El cliente como quedaría. En un alta nueva, id es null. En el alta de alguien que ya está en el estudio con
otro rol, sus datos no cambian y no se muestran (first_name y last_name en null). El email y el teléfono,
solo en un cambio y con clients.pii:read.
Lo que conviene saber, como códigos: already_client (ya es cliente del estudio: el alta no cambia nada),
existing_person (ya está en el estudio con otro rol: pasa a ser cliente, con sus datos como están) y
no_change (el cambio no cambia nada). La lista puede crecer.
Lo mismo en una frase en español, para mostrarle a una persona. No nombra al cliente.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"API de Craqui","colors":{"primary":"#1F33C7","light":"#8E9CFF","dark":"#1F33C7"},"logo":{"light":"https://mintcdn.com/craqui/oYoj2lAgh2Jk1Qcv/logo/light.png?fit=max\u0026auto=format\u0026n=oYoj2lAgh2Jk1Qcv\u0026q=85\u0026s=e96edbf5621b5bc4068b5ad8dee910c7","dark":"https://mintcdn.com/craqui/oYoj2lAgh2Jk1Qcv/logo/dark.png?fit=max\u0026auto=format\u0026n=oYoj2lAgh2Jk1Qcv\u0026q=85\u0026s=119f3ccfb48eb398b9a41837114157f1","href":"https://docs.craqui.com"},"favicon":"https://mintcdn.com/craqui/oYoj2lAgh2Jk1Qcv/favicon.png?fit=max\u0026auto=format\u0026n=oYoj2lAgh2Jk1Qcv\u0026q=85\u0026s=9b21e70461f095f51069e525e11ed743","api":{"playground":{"display":"interactive"}},"footer":{"socials":{"website":"https://craqui.com"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"craqui","hasAudioNarration":false,"actualSubdomain":"craqui","customDomains":["docs.craqui.com"],"gitSource":{"type":"github","owner":"javicraqui-build","repo":"craqui-api-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":"","_id":"6aee011a2f669b27f0303a49"},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6af22f0027110864ba94823c","clientVersion":"0.0.4094","searchFilterCounts":[{"language":"default","tag":"Guías","count":129},{"language":"default","tag":"Errores","count":108},{"language":"default","tag":"Referencia","count":57},{"language":"default","tag":"Apps de terceros","count":8},{"language":"default","tag":"webhook_endpoints","count":8},{"language":"default","tag":"Conceptos","count":7},{"language":"default","tag":"memberships","count":7},{"language":"default","tag":"clients","count":6},{"language":"default","tag":"Empezar","count":5},{"language":"default","tag":"bookings","count":5}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"estudios/api-reference/clients/dar-de-alta-a-un-cliente","slug":"/estudios/api-reference/clients/dar-de-alta-a-un-cliente","pageMetadata":{"title":"Dar de alta a un cliente","description":"Da de alta a un cliente, con las mismas reglas que el alta desde Craqui. Hace falta `first_name` y un `email`\no un `phone`. Al cliente no le llega ningún aviso por el alta.\n\nAntes de crear a nadie, Craqui busca a la persona en tu estudio, por el email (o, sin email, por el teléfono):\n- si ya es cliente activo, responde `200` con ese cliente y `created: false`, sin cambiar nada;\n- si está en el estudio con otro rol (por ejemplo, del equipo), pasa a ser cliente también, con sus datos\n como están, y responde `201`;\n- si no está, la da de alta y responde `201`.\n\nLa respuesta trae `email` y `phone` solo si la clave tiene `clients.pii:read`, y el header `ETag` para un\n`PATCH` posterior. En tu estudio de prueba, el cliente lleva un email de example.com, example.org o\nexample.net. Con `dry_run=true` responde `200` con la vista previa.\n\nRechazos (`409`): `email_in_use` (el email es de una persona que no está en tu estudio; nunca se dice de\nquién), `phone_in_use`, `client_inactive` (el cliente está dado de baja: se reactiva con\n`POST /v1/clients/{id}/reactivate`),\n`plan_client_limit_reached`. Un `center_id` que no es de tu negocio responde `404 not_found`.\n\nUna escritura: lleva `Idempotency-Key` (salvo con `dry_run=true`), solo para estudios (en una academia\nresponde `wrong_vertical`), y solo si tu negocio tiene habilitada la escritura por la API\n(`write_access_disabled` si no). Un campo que el cuerpo no declara responde `validation_failed` con\n`unknown_field`. Cuenta para el límite de escrituras (30 por minuto).\n","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /clients","href":"/estudios/api-reference/clients/dar-de-alta-a-un-cliente","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n li: \"li\",\n p: \"p\",\n ul: \"ul\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Da de alta a un cliente, con las mismas reglas que el alta desde Craqui. Hace falta \", _jsx(_components.code, {\n children: \"first_name\"\n }), \" y un \", _jsx(_components.code, {\n children: \"email\"\n }), \"\\no un \", _jsx(_components.code, {\n children: \"phone\"\n }), \". Al cliente no le llega ningún aviso por el alta.\"]\n }), \"\\n\", _jsx(_components.p, {\n children: \"Antes de crear a nadie, Craqui busca a la persona en tu estudio, por el email (o, sin email, por el teléfono):\"\n }), \"\\n\", _jsxs(_components.ul, {\n children: [\"\\n\", _jsxs(_components.li, {\n children: [\"si ya es cliente activo, responde \", _jsx(_components.code, {\n children: \"200\"\n }), \" con ese cliente y \", _jsx(_components.code, {\n children: \"created: false\"\n }), \", sin cambiar nada;\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"si está en el estudio con otro rol (por ejemplo, del equipo), pasa a ser cliente también, con sus datos\\ncomo están, y responde \", _jsx(_components.code, {\n children: \"201\"\n }), \";\"]\n }), \"\\n\", _jsxs(_components.li, {\n children: [\"si no está, la da de alta y responde \", _jsx(_components.code, {\n children: \"201\"\n }), \".\"]\n }), \"\\n\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"La respuesta trae \", _jsx(_components.code, {\n children: \"email\"\n }), \" y \", _jsx(_components.code, {\n children: \"phone\"\n }), \" solo si la clave tiene \", _jsx(_components.code, {\n children: \"clients.pii:read\"\n }), \", y el header \", _jsx(_components.code, {\n children: \"ETag\"\n }), \" para un\\n\", _jsx(_components.code, {\n children: \"PATCH\"\n }), \" posterior. En tu estudio de prueba, el cliente lleva un email de example.com, example.org o\\nexample.net. Con \", _jsx(_components.code, {\n children: \"dry_run=true\"\n }), \" responde \", _jsx(_components.code, {\n children: \"200\"\n }), \" con la vista previa.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Rechazos (\", _jsx(_components.code, {\n children: \"409\"\n }), \"): \", _jsx(_components.code, {\n children: \"email_in_use\"\n }), \" (el email es de una persona que no está en tu estudio; nunca se dice de\\nquién), \", _jsx(_components.code, {\n children: \"phone_in_use\"\n }), \", \", _jsx(_components.code, {\n children: \"client_inactive\"\n }), \" (el cliente está dado de baja: se reactiva con\\n\", _jsx(_components.code, {\n children: \"POST /v1/clients/{id}/reactivate\"\n }), \"),\\n\", _jsx(_components.code, {\n children: \"plan_client_limit_reached\"\n }), \". Un \", _jsx(_components.code, {\n children: \"center_id\"\n }), \" que no es de tu negocio responde \", _jsx(_components.code, {\n children: \"404 not_found\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Una escritura: lleva \", _jsx(_components.code, {\n children: \"Idempotency-Key\"\n }), \" (salvo con \", _jsx(_components.code, {\n children: \"dry_run=true\"\n }), \"), solo para estudios (en una academia\\nresponde \", _jsx(_components.code, {\n children: \"wrong_vertical\"\n }), \"), y solo si tu negocio tiene habilitada la escritura por la API\\n(\", _jsx(_components.code, {\n children: \"write_access_disabled\"\n }), \" si no). Un campo que el cuerpo no declara responde \", _jsx(_components.code, {\n children: \"validation_failed\"\n }), \" con\\n\", _jsx(_components.code, {\n children: \"unknown_field\"\n }), \". Cuenta para el límite de escrituras (30 por minuto).\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Dar de alta a un cliente","description":"Da de alta a un cliente, con las mismas reglas que el alta desde Craqui. Hace falta `first_name` y un `email`\no un `phone`. Al cliente no le llega ningún aviso por el alta.\n\nAntes de crear a nadie, Craqui busca a la persona en tu estudio, por el email (o, sin email, por el teléfono):\n- si ya es cliente activo, responde `200` con ese cliente y `created: false`, sin cambiar nada;\n- si está en el estudio con otro rol (por ejemplo, del equipo), pasa a ser cliente también, con sus datos\n como están, y responde `201`;\n- si no está, la da de alta y responde `201`.\n\nLa respuesta trae `email` y `phone` solo si la clave tiene `clients.pii:read`, y el header `ETag` para un\n`PATCH` posterior. En tu estudio de prueba, el cliente lleva un email de example.com, example.org o\nexample.net. Con `dry_run=true` responde `200` con la vista previa.\n\nRechazos (`409`): `email_in_use` (el email es de una persona que no está en tu estudio; nunca se dice de\nquién), `phone_in_use`, `client_inactive` (el cliente está dado de baja: se reactiva con\n`POST /v1/clients/{id}/reactivate`),\n`plan_client_limit_reached`. Un `center_id` que no es de tu negocio responde `404 not_found`.\n\nUna escritura: lleva `Idempotency-Key` (salvo con `dry_run=true`), solo para estudios (en una academia\nresponde `wrong_vertical`), y solo si tu negocio tiene habilitada la escritura por la API\n(`write_access_disabled` si no). Un campo que el cuerpo no declara responde `validation_failed` con\n`unknown_field`. Cuenta para el límite de escrituras (30 por minuto).\n","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /clients","href":"/estudios/api-reference/clients/dar-de-alta-a-un-cliente","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"createClient","tags":["clients"],"summary":"Dar de alta a un cliente","description":"Da de alta a un cliente, con las mismas reglas que el alta desde Craqui. Hace falta `first_name` y un `email`\no un `phone`. Al cliente no le llega ningún aviso por el alta.\n\nAntes de crear a nadie, Craqui busca a la persona en tu estudio, por el email (o, sin email, por el teléfono):\n- si ya es cliente activo, responde `200` con ese cliente y `created: false`, sin cambiar nada;\n- si está en el estudio con otro rol (por ejemplo, del equipo), pasa a ser cliente también, con sus datos\n como están, y responde `201`;\n- si no está, la da de alta y responde `201`.\n\nLa respuesta trae `email` y `phone` solo si la clave tiene `clients.pii:read`, y el header `ETag` para un\n`PATCH` posterior. En tu estudio de prueba, el cliente lleva un email de example.com, example.org o\nexample.net. Con `dry_run=true` responde `200` con la vista previa.\n\nRechazos (`409`): `email_in_use` (el email es de una persona que no está en tu estudio; nunca se dice de\nquién), `phone_in_use`, `client_inactive` (el cliente está dado de baja: se reactiva con\n`POST /v1/clients/{id}/reactivate`),\n`plan_client_limit_reached`. Un `center_id` que no es de tu negocio responde `404 not_found`.\n\nUna escritura: lleva `Idempotency-Key` (salvo con `dry_run=true`), solo para estudios (en una academia\nresponde `wrong_vertical`), y solo si tu negocio tiene habilitada la escritura por la API\n(`write_access_disabled` si no). Un campo que el cuerpo no declara responde `validation_failed` con\n`unknown_field`. Cuenta para el límite de escrituras (30 por minuto).\n","x-craqui-scope":"clients:write","security":["fc233af9-d3d8-4b3f-a6d0-a9007dfc974c","a6d80785-6f96-48e6-9cae-0538525750e4"],"x-craqui-capability":"api_clients_create","x-craqui-effect-class":"internal","parameters":["cc0ef668-5660-46e9-a906-2b8dec76c7c5","d1e5db26-0c0e-4f0e-99af-5d7b5c32ebd8","bfcf1e94-ac65-44be-8c47-008f49d373a2"],"requestBody":"87ffc167-36d1-4d35-9937-3ced4954ca1b","responses":{"200":"998e794d-4bd7-43b1-9258-eed76bc2890d","201":"db5ba763-f734-44e2-a4c7-ef4ac9afe9ac","400":"fec95a6f-6d41-420c-bbcf-469e1b1776b0","401":"1c346b29-19bd-4642-b375-bca3cb9a6b81","403":"681dd084-57f1-4b48-969f-5316328d81c4","404":"48cc3394-0956-4780-9a02-d4c436b0d7be","409":"31d1eb4c-b7e2-471b-b821-498ec4e6ca62","422":"a7e98e50-10f0-4106-a3c9-76fa88f1d192","429":"98baf153-31ac-49aa-876e-bc8778ac4664","500":"ec8bcdde-f876-4053-8db4-58bfb846ef83"},"method":"post","type":"path","servers":["bb48cfac-2655-4314-90fd-28cc11e87988"],"path":"/clients","baseUrlOptions":["https://api.craqui.com/v1"],"title":"Dar de alta a un cliente","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"cc0ef668-5660-46e9-a906-2b8dec76c7c5":{"name":"Craqui-Version","in":"header","required":false,"description":"Versión de la API para este pedido (`YYYY-MM-DD`). Si no la mandas, se usa la versión fijada en\nla clave cuando se creó.\n","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","examples":["2026-12-01"],"isRequired":false,"description":"Versión de la API para este pedido (`YYYY-MM-DD`). Si no la mandas, se usa la versión fijada en\nla clave cuando se creó.\n","uniqueKey":"","typeLabel":"string"}},"d1e5db26-0c0e-4f0e-99af-5d7b5c32ebd8":{"name":"Idempotency-Key","in":"header","required":false,"description":"Obligatorio en todo pedido que crea o cambia algo, salvo con `dry_run=true`. Un valor único por\noperación (por ejemplo un UUID). Si repites el pedido con la misma clave y el mismo cuerpo dentro de 24\nhoras, recibes la misma respuesta (con el header `Idempotent-Replayed: true`) sin que se repita el efecto,\ntambién la misma respuesta de error: para intentar de nuevo algo que se rechazó, usa una clave nueva.\nCon un `dry_run=true` la clave se ignora y no se guarda: el pedido real puede usar la misma. Pasadas las 24\nhoras, repetir una reserva con la misma clave y el mismo cuerpo sigue devolviendo la reserva que se hizo\n(como está ahora), y la misma clave con otro cuerpo responde `idempotency_key_reused`.\n","schema":{"type":"string","minLength":1,"maxLength":255,"isRequired":false,"description":"Obligatorio en todo pedido que crea o cambia algo, salvo con `dry_run=true`. Un valor único por\noperación (por ejemplo un UUID). Si repites el pedido con la misma clave y el mismo cuerpo dentro de 24\nhoras, recibes la misma respuesta (con el header `Idempotent-Replayed: true`) sin que se repita el efecto,\ntambién la misma respuesta de error: para intentar de nuevo algo que se rechazó, usa una clave nueva.\nCon un `dry_run=true` la clave se ignora y no se guarda: el pedido real puede usar la misma. Pasadas las 24\nhoras, repetir una reserva con la misma clave y el mismo cuerpo sigue devolviendo la reserva que se hizo\n(como está ahora), y la misma clave con otro cuerpo responde `idempotency_key_reused`.\n","uniqueKey":"","typeLabel":"string"}},"bfcf1e94-ac65-44be-8c47-008f49d373a2":{"name":"dry_run","in":"query","required":false,"description":"`true` para ver qué pasaría sin hacerlo: Craqui evalúa el pedido con las mismas reglas que el real y\nresponde `200` con un objeto `preview`, sin escribir nada ni avisarle a nadie. Cuenta para el límite de\nescrituras. `false` (o sin el parámetro) hace el pedido real. Es el único parámetro de consulta de una\nescritura.\n","schema":{"type":"boolean","isRequired":false,"description":"`true` para ver qué pasaría sin hacerlo: Craqui evalúa el pedido con las mismas reglas que el real y\nresponde `200` con un objeto `preview`, sin escribir nada ni avisarle a nadie. Cuenta para el límite de\nescrituras. `false` (o sin el parámetro) hace el pedido real. Es el único parámetro de consulta de una\nescritura.\n","uniqueKey":"","typeLabel":"boolean"}}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["first_name"],"description":"Hace falta `email` o `phone`.","properties":{"first_name":{"type":"string","minLength":1,"maxLength":200,"isRequired":true,"uniqueKey":"first_name","typeLabel":"string"},"last_name":{"oneOf":[{"type":"string","maxLength":200,"uniqueKey":"last_name.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":200,"uniqueKey":"last_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"last_name","typeLabel":"string | null"},"email":{"oneOf":[{"type":"string","format":"email","maxLength":255,"description":"Si ya es de un cliente activo del estudio, la respuesta es ese cliente (`200`, `created: false`). Si es de\nalguien que ya está en el estudio con otro rol, pasa a ser cliente también, con sus datos como están. Si es\nde una persona que no está en el estudio, `409 email_in_use`; si es de un cliente dado de baja,\n`409 client_inactive`.\n","uniqueKey":"email.oneOf.0","typeLabel":"string\u003cemail>"},{"type":"null","format":"email","maxLength":255,"description":"Si ya es de un cliente activo del estudio, la respuesta es ese cliente (`200`, `created: false`). Si es de\nalguien que ya está en el estudio con otro rol, pasa a ser cliente también, con sus datos como están. Si es\nde una persona que no está en el estudio, `409 email_in_use`; si es de un cliente dado de baja,\n`409 client_inactive`.\n","uniqueKey":"email.oneOf.1","typeLabel":"null"}],"uniqueKey":"email","typeLabel":"string\u003cemail> | null"},"phone":{"oneOf":[{"type":"string","maxLength":30,"description":"En E.164 (`+59899123456`), o como se marca en el país con `phone_country_code` (si no lo mandas, el país del\nestudio). Sin `email`, el teléfono distingue al cliente: el de un cliente activo con el mismo nombre devuelve\nese cliente, y el de alguien de otro nombre responde `409 phone_in_use`.\n","uniqueKey":"phone.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":30,"description":"En E.164 (`+59899123456`), o como se marca en el país con `phone_country_code` (si no lo mandas, el país del\nestudio). Sin `email`, el teléfono distingue al cliente: el de un cliente activo con el mismo nombre devuelve\nese cliente, y el de alguien de otro nombre responde `409 phone_in_use`.\n","uniqueKey":"phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"phone","typeLabel":"string | null"},"phone_country_code":{"oneOf":[{"type":"string","maxLength":10,"description":"El país del teléfono, en ISO 3166 (`UY`) o como código de discado (`+598`).","examples":["UY"],"uniqueKey":"phone_country_code.oneOf.0","typeLabel":"string"},{"type":"null","maxLength":10,"description":"El país del teléfono, en ISO 3166 (`UY`) o como código de discado (`+598`).","examples":["UY"],"uniqueKey":"phone_country_code.oneOf.1","typeLabel":"null"}],"uniqueKey":"phone_country_code","typeLabel":"string | null"},"center_id":{"oneOf":[{"type":"string","description":"La sede habitual del cliente.","pattern":"^ctr_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"ctr_01j65pdnq74qvnh0953pzvtczg","uniqueKey":"center_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"La sede habitual del cliente.","uniqueKey":"center_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"center_id","typeLabel":"string | null"},"metadata":{"type":"object","description":"Datos tuyos sobre el objeto (por ejemplo el id del cliente en tu sistema), que Craqui guarda y te devuelve sin\nmirarlos. Hasta 20 claves de 1 a 40 caracteres (`a-z`, `0-9` y `_`), con valores de texto de hasta 500. Solo\nlos ve tu sistema, por la API: ni el estudio en su panel ni el cliente. No guardes datos sensibles.\n","maxProperties":20,"propertyNames":{"pattern":"^[a-z0-9_]{1,40}$"},"additionalProperties":{"type":"string","maxLength":500,"uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"uniqueKey":"metadata","typeLabel":"object"},"notify":{"type":"boolean","default":true,"description":"Al cliente no le llega ningún aviso por darlo de alta. `false` apaga el aviso «nuevo cliente» al panel del\nestudio, como una carga por planilla. Necesita el permiso `notifications:suppress`.\n","uniqueKey":"notify","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"example":{"first_name":"Valentina","last_name":"Ríos","email":"valentina.rios@example.com","phone":"+59898765432","center_id":"ctr_01j65pdnq74qvnh0953pzvtczg","metadata":{"crm_code":"51907"}},"examples":{"Example":{"title":"Example","value":{"first_name":"Valentina","last_name":"Ríos","email":"valentina.rios@example.com","phone":"+59898765432","center_id":"ctr_01j65pdnq74qvnh0953pzvtczg","metadata":{"crm_code":"51907"}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"998e794d-4bd7-43b1-9258-eed76bc2890d":{"description":"Con `dry_run=true`, la vista previa (no se escribió nada). Sin él, el cliente que ya existía, con\n`created: false`.\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}},"Craqui-Version":{"description":"La versión de la API con la que se respondió.","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"RateLimit":{"description":"Pedidos que quedan en la ventana actual y segundos hasta que se renueva (draft IETF httpapi-ratelimit-headers).","schema":{"type":"string","examples":["\"read\";r=97;t=42"]}},"RateLimit-Policy":{"description":"Límite de la clave por ventana (draft IETF httpapi-ratelimit-headers).","schema":{"type":"string","examples":["\"read\";q=100;w=60"]}},"ETag":{"description":"La versión del cliente que acabas de leer o escribir. Mándala en `If-Match` en un `PATCH` para que el cambio se\naplique solo si nadie lo cambió desde entonces. Una respuesta repetida (`Idempotent-Replayed: true`) no la trae:\npide `GET /v1/clients/{id}`.\n","schema":{"type":"string","examples":["\"5d41402abc4b2a76b9719d911017c592\""]}},"Idempotent-Replayed":{"description":"`true` cuando la respuesta es la guardada de un pedido anterior con la misma `Idempotency-Key`.","schema":{"type":"string","enum":["true"]}}},"content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"Lo que haría un alta o un cambio de un cliente, sin hacerlo. Craqui lo evalúa con las mismas reglas que el pedido\nreal: si el real se rechazaría, la vista previa responde el mismo error.\n","required":["object","livemode","action","result","effects","warnings","summary"],"properties":{"object":{"type":"string","const":"preview","isRequired":true,"uniqueKey":"oneOf.0.object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si la vista previa es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"oneOf.0.livemode","typeLabel":"boolean"},"action":{"type":"string","description":"`client.create` o `client.update`. La lista puede crecer.","enum":["client.create","client.update"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.0.action","typeLabel":"enum\u003cstring>"},"result":{"type":"object","description":"El cliente como quedaría. En un alta nueva, `id` es `null`. En el alta de alguien que ya está en el estudio con\notro rol, sus datos no cambian y no se muestran (`first_name` y `last_name` en `null`). El email y el teléfono,\nsolo en un cambio y con `clients.pii:read`.\n","required":["object","id","status","first_name","last_name","home_center_id","metadata"],"properties":{"object":{"type":"string","const":"client","isRequired":true,"uniqueKey":"oneOf.0.result.object","typeLabel":"string"},"id":{"oneOf":[{"type":"string","description":"Id de un cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"cli_01jatfha5h4nkg77c3wfrvd3cw","isRequired":true,"uniqueKey":"oneOf.0.result.id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"oneOf.0.result.id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.result.id","typeLabel":"string | null"},"status":{"type":"string","enum":["active","inactive"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.0.result.status","typeLabel":"enum\u003cstring>"},"first_name":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.result.first_name.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"oneOf.0.result.first_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.result.first_name","typeLabel":"string | null"},"last_name":{"oneOf":[{"type":"string","isRequired":true,"uniqueKey":"oneOf.0.result.last_name.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"oneOf.0.result.last_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.result.last_name","typeLabel":"string | null"},"home_center_id":{"oneOf":[{"type":"string","description":"Id de una sede.","pattern":"^ctr_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"ctr_01j65pdnq74qvnh0953pzvtczg","isRequired":true,"uniqueKey":"oneOf.0.result.home_center_id.oneOf.0","typeLabel":"string"},{"type":"null","isRequired":true,"uniqueKey":"oneOf.0.result.home_center_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.0.result.home_center_id","typeLabel":"string | null"},"metadata":{"type":"object","description":"Datos tuyos sobre el objeto (por ejemplo el id del cliente en tu sistema), que Craqui guarda y te devuelve sin\nmirarlos. Hasta 20 claves de 1 a 40 caracteres (`a-z`, `0-9` y `_`), con valores de texto de hasta 500. Solo\nlos ve tu sistema, por la API: ni el estudio en su panel ni el cliente. No guardes datos sensibles.\n","maxProperties":20,"propertyNames":{"pattern":"^[a-z0-9_]{1,40}$"},"additionalProperties":{"type":"string","maxLength":500,"uniqueKey":"oneOf.0.result.metadata.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"oneOf.0.result.metadata","typeLabel":"object"},"livemode":{"type":"boolean","uniqueKey":"oneOf.0.result.livemode","typeLabel":"boolean"},"created_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"uniqueKey":"oneOf.0.result.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"uniqueKey":"oneOf.0.result.updated_at","typeLabel":"string\u003cdate-time>"},"email":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.result.email.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.0.result.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.result.email","typeLabel":"string | null"},"phone":{"oneOf":[{"type":"string","uniqueKey":"oneOf.0.result.phone.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"oneOf.0.result.phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.result.phone","typeLabel":"string | null"}},"isRequired":true,"uniqueKey":"oneOf.0.result","typeLabel":"object"},"effects":{"type":"object","description":"Lo que la escritura de un cliente haría.","required":["client_created","notifies_client","notifies_staff","changed_fields"],"properties":{"client_created":{"type":"boolean","description":"`true` si el alta suma un cliente al estudio.","isRequired":true,"uniqueKey":"oneOf.0.effects.client_created","typeLabel":"boolean"},"notifies_client":{"type":"boolean","description":"Siempre `false`: ni el alta ni un cambio le avisan al cliente.","isRequired":true,"uniqueKey":"oneOf.0.effects.notifies_client","typeLabel":"boolean"},"notifies_staff":{"type":"boolean","description":"Si el panel del estudio recibe el aviso «nuevo cliente». `false` con `notify: false` y en tu estudio de prueba.","isRequired":true,"uniqueKey":"oneOf.0.effects.notifies_staff","typeLabel":"boolean"},"changed_fields":{"type":"array","description":"En un cambio, los campos que cambiarían (los que ya están así no cuentan).","items":{"type":"string","uniqueKey":"oneOf.0.effects.changed_fields.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"oneOf.0.effects.changed_fields","typeLabel":"string[]"}},"isRequired":true,"uniqueKey":"oneOf.0.effects","typeLabel":"object"},"warnings":{"type":"array","description":"Lo que conviene saber, como códigos: `already_client` (ya es cliente del estudio: el alta no cambia nada),\n`existing_person` (ya está en el estudio con otro rol: pasa a ser cliente, con sus datos como están) y\n`no_change` (el cambio no cambia nada). La lista puede crecer.\n","items":{"type":"string","enum":["already_client","existing_person","no_change"],"x-extensible-enum":true,"uniqueKey":"oneOf.0.warnings.items.[INDEX]","typeLabel":"enum\u003cstring>"},"isRequired":true,"uniqueKey":"oneOf.0.warnings","typeLabel":"enum\u003cstring>[]"},"summary":{"type":"string","description":"Lo mismo en una frase en español, para mostrarle a una persona. No nombra al cliente.","isRequired":true,"uniqueKey":"oneOf.0.summary","typeLabel":"string"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"El cliente, con `created`.","required":["created","id","object","livemode","first_name","last_name","status","home_center_id","created_at","updated_at","metadata"],"properties":{"id":{"type":"string","description":"Id de un cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cli_01jatfha5h4nkg77c3wfrvd3cw"],"isRequired":true,"uniqueKey":"oneOf.1.id","typeLabel":"string"},"object":{"type":"string","const":"client","isRequired":true,"uniqueKey":"oneOf.1.object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si el objeto es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"oneOf.1.livemode","typeLabel":"boolean"},"first_name":{"oneOf":[{"type":"string","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Sofía"],"isRequired":true,"uniqueKey":"oneOf.1.first_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Sofía"],"isRequired":true,"uniqueKey":"oneOf.1.first_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.first_name","typeLabel":"string | null"},"last_name":{"oneOf":[{"type":"string","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Pérez"],"isRequired":true,"uniqueKey":"oneOf.1.last_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Pérez"],"isRequired":true,"uniqueKey":"oneOf.1.last_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.last_name","typeLabel":"string | null"},"status":{"type":"string","description":"`active`, `inactive` o `deleted`. Las listas traen solo `active` e `inactive`. La lista puede\ncrecer: trata un valor que no conoces como inactivo.\n","enum":["active","inactive","deleted"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.status","typeLabel":"enum\u003cstring>"},"home_center_id":{"oneOf":[{"type":"string","description":"La sede habitual del cliente, si el estudio le asignó una.","pattern":"^ctr_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"ctr_01j65pdnq74qvnh0953pzvtczg","isRequired":true,"uniqueKey":"oneOf.1.home_center_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"La sede habitual del cliente, si el estudio le asignó una.","isRequired":true,"uniqueKey":"oneOf.1.home_center_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.home_center_id","typeLabel":"string | null"},"created_at":{"type":"string","format":"date-time","description":"Cuándo pasó a ser cliente de este estudio.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"La última vez que cambió algo del cliente, su metadata incluida.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.updated_at","typeLabel":"string\u003cdate-time>"},"metadata":{"type":"object","description":"Lo que tu sistema guardó sobre el cliente (`{}` si nada). Un cliente `deleted` trae `{}`.","maxProperties":20,"propertyNames":{"pattern":"^[a-z0-9_]{1,40}$"},"additionalProperties":{"type":"string","maxLength":500,"uniqueKey":"oneOf.1.metadata.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"oneOf.1.metadata","typeLabel":"object"},"created":{"type":"boolean","description":"`true` si se dio de alta (`201`); `false` si ya era cliente activo del estudio con ese email o ese\nteléfono (`200`): no se cambió nada.\n","isRequired":true,"uniqueKey":"oneOf.1.created","typeLabel":"boolean"},"email":{"oneOf":[{"type":"string","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene (no es `null`). `null` si el\ncliente no tiene email.\n","uniqueKey":"oneOf.1.email.oneOf.0","typeLabel":"string"},{"type":"null","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene (no es `null`). `null` si el\ncliente no tiene email.\n","uniqueKey":"oneOf.1.email.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.email","typeLabel":"string | null"},"phone":{"oneOf":[{"type":"string","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene. En formato E.164\n(`+59899123456`); `null` si no tiene teléfono o si no se pudo leer como uno.\n","pattern":"^\\+[1-9]\\d{6,14}$","examples":["+59899123456"],"uniqueKey":"oneOf.1.phone.oneOf.0","typeLabel":"string"},{"type":"null","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene. En formato E.164\n(`+59899123456`); `null` si no tiene teléfono o si no se pudo leer como uno.\n","pattern":"^\\+[1-9]\\d{6,14}$","examples":["+59899123456"],"uniqueKey":"oneOf.1.phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.phone","typeLabel":"string | null"},"active_membership":{"oneOf":[{"type":"object","description":"Solo en `GET /v1/clients/{id}` con `expand[]=active_membership` (pide `memberships:read`): la\nmembresía que tiene ahora (la `active`; si no hay, la más nueva `paused`, `suspended` o\n`pending_payment`). `null` si no tiene ninguna.\n","required":["id","object","livemode","client_id","membership_plan_id","status","current_period_start","current_period_end","renews_at","next_credit_date","started_at","cancelled_at","suspension_reason","discount","active_freeze_id","created_at","updated_at"],"properties":{"id":{"type":"string","description":"Id de una membresía de un cliente.","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.id","typeLabel":"string"},"object":{"type":"string","const":"membership","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si el objeto es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.livemode","typeLabel":"boolean"},"client_id":{"oneOf":[{"type":"string","description":"El cliente. `null` si la membresía es de alguien que no es cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"cli_01jatfha5h4nkg77c3wfrvd3cw","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.client_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El cliente. `null` si la membresía es de alguien que no es cliente del estudio.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.client_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.client_id","typeLabel":"string | null"},"membership_plan_id":{"type":"string","description":"Id de un plan de membresía.","pattern":"^mpl_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mpl_01jt05nvk11xa1zm1pwve2qj7r"],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.membership_plan_id","typeLabel":"string"},"status":{"type":"string","description":"`active`, `paused` (congelada), `suspended`, `pending_payment`, `cancelled` o `expired`. La lista\npuede crecer: trata un valor que no conoces como una membresía que no da créditos.\n","enum":["active","paused","suspended","pending_payment","cancelled","expired"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.status","typeLabel":"enum\u003cstring>"},"current_period_start":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.current_period_start","typeLabel":"string\u003cdate-time>"},"current_period_end":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.current_period_end","typeLabel":"string\u003cdate-time>"},"renews_at":{"oneOf":[{"type":"string","description":"Cuándo se renueva sola: el fin del período actual si la membresía está `active` y su plan se\nrenueva solo; si no, `null`.\n","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.renews_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Cuándo se renueva sola: el fin del período actual si la membresía está `active` y su plan se\nrenueva solo; si no, `null`.\n","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.renews_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.renews_at","typeLabel":"string\u003cdate-time> | null"},"next_credit_date":{"oneOf":[{"type":"string","description":"La fecha local en que recibe los próximos créditos; `null` si no hay una prevista.","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-12-02","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.next_credit_date.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"La fecha local en que recibe los próximos créditos; `null` si no hay una prevista.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.next_credit_date.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.next_credit_date","typeLabel":"string\u003cdate> | null"},"started_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.started_at","typeLabel":"string\u003cdate-time>"},"cancelled_at":{"oneOf":[{"type":"string","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.cancelled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.cancelled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.cancelled_at","typeLabel":"string\u003cdate-time> | null"},"suspension_reason":{"oneOf":[{"type":"string","description":"Por qué se suspendió, como texto; `null` si no está suspendida.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.suspension_reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Por qué se suspendió, como texto; `null` si no está suspendida.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.suspension_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.suspension_reason","typeLabel":"string | null"},"discount":{"oneOf":[{"type":"object","description":"El descuento que tiene la membresía; `null` si no tiene.","required":["percent","fixed_amount","periods_remaining"],"properties":{"percent":{"oneOf":[{"type":"number","description":"El porcentaje de descuento (por ejemplo `15` es 15 %); `null` si es un monto fijo.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.percent.oneOf.0","typeLabel":"number"},{"type":"null","description":"El porcentaje de descuento (por ejemplo `15` es 15 %); `null` si es un monto fijo.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.percent.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.percent","typeLabel":"number | null"},"fixed_amount":{"oneOf":[{"type":"object","description":"El monto fijo que se descuenta de cada cuota; `null` si es un porcentaje.","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.fixed_amount.oneOf.0.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.fixed_amount.oneOf.0.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.fixed_amount.oneOf.0","typeLabel":"object"},{"type":"null","description":"El monto fijo que se descuenta de cada cuota; `null` si es un porcentaje.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.fixed_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.fixed_amount","typeLabel":"object | null"},"periods_remaining":{"oneOf":[{"type":"integer","description":"Cuántos períodos más se aplica; `null` si se aplica siempre.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.periods_remaining.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Cuántos períodos más se aplica; `null` si se aplica siempre.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.periods_remaining.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0.periods_remaining","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.0","typeLabel":"object"},{"type":"null","description":"El descuento que tiene la membresía; `null` si no tiene.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.discount","typeLabel":"object | null"},"active_freeze_id":{"oneOf":[{"type":"string","description":"El congelamiento en curso o programado; `null` si no hay. El detalle está en `GET /v1/memberships/{id}/freezes`.","pattern":"^frz_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"frz_01jtk6e3z2vm9ych2cc7kadyja","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.active_freeze_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El congelamiento en curso o programado; `null` si no hay. El detalle está en `GET /v1/memberships/{id}/freezes`.","isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.active_freeze_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.active_freeze_id","typeLabel":"string | null"},"created_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"oneOf.1.active_membership.oneOf.0.updated_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"oneOf.1.active_membership.oneOf.0","typeLabel":"object"},{"type":"null","description":"Solo en `GET /v1/clients/{id}` con `expand[]=active_membership` (pide `memberships:read`): la\nmembresía que tiene ahora (la `active`; si no hay, la más nueva `paused`, `suspended` o\n`pending_payment`). `null` si no tiene ninguna.\n","uniqueKey":"oneOf.1.active_membership.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.1.active_membership","typeLabel":"object | null"},"credit_balance":{"type":"object","description":"Solo en `GET /v1/clients/{id}` con `expand[]=credit_balance` (pide `credits:read`).","required":["object","livemode","client_id","total_credits","grants","grants_has_more"],"properties":{"object":{"type":"string","const":"credit_balance","isRequired":true,"uniqueKey":"oneOf.1.credit_balance.object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si el objeto es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"oneOf.1.credit_balance.livemode","typeLabel":"boolean"},"client_id":{"type":"string","description":"Id de un cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cli_01jatfha5h4nkg77c3wfrvd3cw"],"isRequired":true,"uniqueKey":"oneOf.1.credit_balance.client_id","typeLabel":"string"},"total_credits":{"type":"integer","description":"El saldo del cliente; `0` si nunca tuvo créditos.","isRequired":true,"uniqueKey":"oneOf.1.credit_balance.total_credits","typeLabel":"integer"},"grants":{"type":"array","description":"Los lotes que se pueden usar (sin anular, con créditos y sin vencer), del que vence primero al último. Como mucho 100.","items":{"type":"object","required":["credit_grant_id","kind","credits_remaining","expires_at","course_ids"],"properties":{"credit_grant_id":{"type":"string","description":"Id de un lote de créditos (un pack, una oferta o el período de una membresía).","pattern":"^cgr_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cgr_01jdwsxvjgc7y12y0h12f43149"],"isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].credit_grant_id","typeLabel":"string"},"kind":{"oneOf":[{"type":"string","description":"`pack`, `intro_offer` o `membership_period`. La lista puede crecer.","enum":["pack","intro_offer","membership_period",null],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].kind.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"`pack`, `intro_offer` o `membership_period`. La lista puede crecer.","enum":["pack","intro_offer","membership_period",null],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].kind.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].kind","typeLabel":"enum\u003cstring> | null"},"credits_remaining":{"type":"integer","isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].credits_remaining","typeLabel":"integer"},"expires_at":{"oneOf":[{"type":"string","description":"Cuándo vencen; `null` si no vencen.","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Cuándo vencen; `null` si no vencen.","isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].expires_at","typeLabel":"string\u003cdate-time> | null"},"course_ids":{"oneOf":[{"description":"Las disciplinas en las que sirven; `null` si sirven en todas.","type":"array","items":{"type":"string","description":"Id de una disciplina.","pattern":"^crs_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["crs_01jff81dk7rxtacmye5nanfp0h"],"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].course_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].course_ids.oneOf.0","typeLabel":"string[]"},{"description":"Las disciplinas en las que sirven; `null` si sirven en todas.","type":"null","items":{"type":"string","description":"Id de una disciplina.","pattern":"^crs_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["crs_01jff81dk7rxtacmye5nanfp0h"]},"isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].course_ids.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX].course_ids","typeLabel":"string[] | null"}},"uniqueKey":"oneOf.1.credit_balance.grants.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants","typeLabel":"object[]"},"grants_has_more":{"type":"boolean","description":"`true` si el cliente tiene más de 100 lotes vivos; la lista completa está en `GET /v1/credit_grants?client_id=…\u0026status=active`.","isRequired":true,"uniqueKey":"oneOf.1.credit_balance.grants_has_more","typeLabel":"boolean"}},"uniqueKey":"oneOf.1.credit_balance","typeLabel":"object"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"example":{"object":"preview","livemode":true,"action":"client.create","result":{"object":"client","id":null,"status":"active","first_name":"Valentina","last_name":"Ríos","home_center_id":"ctr_01j65pdnq74qvnh0953pzvtczg","metadata":{"crm_code":"51907"}},"effects":{"client_created":true,"notifies_client":false,"notifies_staff":true,"changed_fields":[]},"warnings":[],"summary":"Se da de alta al cliente."},"examples":{"Example":{"title":"Example","value":{"object":"preview","livemode":true,"action":"client.create","result":{"object":"client","id":null,"status":"active","first_name":"Valentina","last_name":"Ríos","home_center_id":"ctr_01j65pdnq74qvnh0953pzvtczg","metadata":{"crm_code":"51907"}},"effects":{"client_created":true,"notifies_client":false,"notifies_staff":true,"changed_fields":[]},"warnings":[],"summary":"Se da de alta al cliente."}}},"exampleType":"examples"}},"exampleType":"examples"},"db5ba763-f734-44e2-a4c7-ef4ac9afe9ac":{"description":"El cliente nuevo, con `created: true`.","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}},"Craqui-Version":{"description":"La versión de la API con la que se respondió.","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"RateLimit":{"description":"Pedidos que quedan en la ventana actual y segundos hasta que se renueva (draft IETF httpapi-ratelimit-headers).","schema":{"type":"string","examples":["\"read\";r=97;t=42"]}},"RateLimit-Policy":{"description":"Límite de la clave por ventana (draft IETF httpapi-ratelimit-headers).","schema":{"type":"string","examples":["\"read\";q=100;w=60"]}},"ETag":{"description":"La versión del cliente que acabas de leer o escribir. Mándala en `If-Match` en un `PATCH` para que el cambio se\naplique solo si nadie lo cambió desde entonces. Una respuesta repetida (`Idempotent-Replayed: true`) no la trae:\npide `GET /v1/clients/{id}`.\n","schema":{"type":"string","examples":["\"5d41402abc4b2a76b9719d911017c592\""]}},"Idempotent-Replayed":{"description":"`true` cuando la respuesta es la guardada de un pedido anterior con la misma `Idempotency-Key`.","schema":{"type":"string","enum":["true"]}}},"content":{"application/json":{"schema":{"type":"object","description":"El cliente, con `created`.","required":["created","id","object","livemode","first_name","last_name","status","home_center_id","created_at","updated_at","metadata"],"properties":{"id":{"type":"string","description":"Id de un cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cli_01jatfha5h4nkg77c3wfrvd3cw"],"isRequired":true,"uniqueKey":"id","typeLabel":"string"},"object":{"type":"string","const":"client","isRequired":true,"uniqueKey":"object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si el objeto es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"livemode","typeLabel":"boolean"},"first_name":{"oneOf":[{"type":"string","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Sofía"],"isRequired":true,"uniqueKey":"first_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Sofía"],"isRequired":true,"uniqueKey":"first_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"first_name","typeLabel":"string | null"},"last_name":{"oneOf":[{"type":"string","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Pérez"],"isRequired":true,"uniqueKey":"last_name.oneOf.0","typeLabel":"string"},{"type":"null","description":"`null` en un cliente `deleted`, o si el estudio no lo cargó.","examples":["Pérez"],"isRequired":true,"uniqueKey":"last_name.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"last_name","typeLabel":"string | null"},"status":{"type":"string","description":"`active`, `inactive` o `deleted`. Las listas traen solo `active` e `inactive`. La lista puede\ncrecer: trata un valor que no conoces como inactivo.\n","enum":["active","inactive","deleted"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"home_center_id":{"oneOf":[{"type":"string","description":"La sede habitual del cliente, si el estudio le asignó una.","pattern":"^ctr_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"ctr_01j65pdnq74qvnh0953pzvtczg","isRequired":true,"uniqueKey":"home_center_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"La sede habitual del cliente, si el estudio le asignó una.","isRequired":true,"uniqueKey":"home_center_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"home_center_id","typeLabel":"string | null"},"created_at":{"type":"string","format":"date-time","description":"Cuándo pasó a ser cliente de este estudio.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"La última vez que cambió algo del cliente, su metadata incluida.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"updated_at","typeLabel":"string\u003cdate-time>"},"metadata":{"type":"object","description":"Lo que tu sistema guardó sobre el cliente (`{}` si nada). Un cliente `deleted` trae `{}`.","maxProperties":20,"propertyNames":{"pattern":"^[a-z0-9_]{1,40}$"},"additionalProperties":{"type":"string","maxLength":500,"uniqueKey":"metadata.additionalProperties","typeLabel":"string"},"isRequired":true,"uniqueKey":"metadata","typeLabel":"object"},"created":{"type":"boolean","description":"`true` si se dio de alta (`201`); `false` si ya era cliente activo del estudio con ese email o ese\nteléfono (`200`): no se cambió nada.\n","isRequired":true,"uniqueKey":"created","typeLabel":"boolean"},"email":{"oneOf":[{"type":"string","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene (no es `null`). `null` si el\ncliente no tiene email.\n","uniqueKey":"email.oneOf.0","typeLabel":"string"},{"type":"null","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene (no es `null`). `null` si el\ncliente no tiene email.\n","uniqueKey":"email.oneOf.1","typeLabel":"null"}],"uniqueKey":"email","typeLabel":"string | null"},"phone":{"oneOf":[{"type":"string","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene. En formato E.164\n(`+59899123456`); `null` si no tiene teléfono o si no se pudo leer como uno.\n","pattern":"^\\+[1-9]\\d{6,14}$","examples":["+59899123456"],"uniqueKey":"phone.oneOf.0","typeLabel":"string"},{"type":"null","description":"Solo con el permiso `clients.pii:read`: sin él, el campo no viene. En formato E.164\n(`+59899123456`); `null` si no tiene teléfono o si no se pudo leer como uno.\n","pattern":"^\\+[1-9]\\d{6,14}$","examples":["+59899123456"],"uniqueKey":"phone.oneOf.1","typeLabel":"null"}],"uniqueKey":"phone","typeLabel":"string | null"},"active_membership":{"oneOf":[{"type":"object","description":"Solo en `GET /v1/clients/{id}` con `expand[]=active_membership` (pide `memberships:read`): la\nmembresía que tiene ahora (la `active`; si no hay, la más nueva `paused`, `suspended` o\n`pending_payment`). `null` si no tiene ninguna.\n","required":["id","object","livemode","client_id","membership_plan_id","status","current_period_start","current_period_end","renews_at","next_credit_date","started_at","cancelled_at","suspension_reason","discount","active_freeze_id","created_at","updated_at"],"properties":{"id":{"type":"string","description":"Id de una membresía de un cliente.","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.id","typeLabel":"string"},"object":{"type":"string","const":"membership","isRequired":true,"uniqueKey":"active_membership.oneOf.0.object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si el objeto es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.livemode","typeLabel":"boolean"},"client_id":{"oneOf":[{"type":"string","description":"El cliente. `null` si la membresía es de alguien que no es cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"cli_01jatfha5h4nkg77c3wfrvd3cw","isRequired":true,"uniqueKey":"active_membership.oneOf.0.client_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El cliente. `null` si la membresía es de alguien que no es cliente del estudio.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.client_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.client_id","typeLabel":"string | null"},"membership_plan_id":{"type":"string","description":"Id de un plan de membresía.","pattern":"^mpl_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mpl_01jt05nvk11xa1zm1pwve2qj7r"],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.membership_plan_id","typeLabel":"string"},"status":{"type":"string","description":"`active`, `paused` (congelada), `suspended`, `pending_payment`, `cancelled` o `expired`. La lista\npuede crecer: trata un valor que no conoces como una membresía que no da créditos.\n","enum":["active","paused","suspended","pending_payment","cancelled","expired"],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"active_membership.oneOf.0.status","typeLabel":"enum\u003cstring>"},"current_period_start":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.current_period_start","typeLabel":"string\u003cdate-time>"},"current_period_end":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.current_period_end","typeLabel":"string\u003cdate-time>"},"renews_at":{"oneOf":[{"type":"string","description":"Cuándo se renueva sola: el fin del período actual si la membresía está `active` y su plan se\nrenueva solo; si no, `null`.\n","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"active_membership.oneOf.0.renews_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Cuándo se renueva sola: el fin del período actual si la membresía está `active` y su plan se\nrenueva solo; si no, `null`.\n","isRequired":true,"uniqueKey":"active_membership.oneOf.0.renews_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.renews_at","typeLabel":"string\u003cdate-time> | null"},"next_credit_date":{"oneOf":[{"type":"string","description":"La fecha local en que recibe los próximos créditos; `null` si no hay una prevista.","format":"date","pattern":"^\\d{4}-\\d{2}-\\d{2}$","example":"2026-12-02","isRequired":true,"uniqueKey":"active_membership.oneOf.0.next_credit_date.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"La fecha local en que recibe los próximos créditos; `null` si no hay una prevista.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.next_credit_date.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.next_credit_date","typeLabel":"string\u003cdate> | null"},"started_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.started_at","typeLabel":"string\u003cdate-time>"},"cancelled_at":{"oneOf":[{"type":"string","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"active_membership.oneOf.0.cancelled_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","isRequired":true,"uniqueKey":"active_membership.oneOf.0.cancelled_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.cancelled_at","typeLabel":"string\u003cdate-time> | null"},"suspension_reason":{"oneOf":[{"type":"string","description":"Por qué se suspendió, como texto; `null` si no está suspendida.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.suspension_reason.oneOf.0","typeLabel":"string"},{"type":"null","description":"Por qué se suspendió, como texto; `null` si no está suspendida.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.suspension_reason.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.suspension_reason","typeLabel":"string | null"},"discount":{"oneOf":[{"type":"object","description":"El descuento que tiene la membresía; `null` si no tiene.","required":["percent","fixed_amount","periods_remaining"],"properties":{"percent":{"oneOf":[{"type":"number","description":"El porcentaje de descuento (por ejemplo `15` es 15 %); `null` si es un monto fijo.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.percent.oneOf.0","typeLabel":"number"},{"type":"null","description":"El porcentaje de descuento (por ejemplo `15` es 15 %); `null` si es un monto fijo.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.percent.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.percent","typeLabel":"number | null"},"fixed_amount":{"oneOf":[{"type":"object","description":"El monto fijo que se descuenta de cada cuota; `null` si es un porcentaje.","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.fixed_amount.oneOf.0.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.fixed_amount.oneOf.0.currency","typeLabel":"string"}},"isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.fixed_amount.oneOf.0","typeLabel":"object"},{"type":"null","description":"El monto fijo que se descuenta de cada cuota; `null` si es un porcentaje.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.fixed_amount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.fixed_amount","typeLabel":"object | null"},"periods_remaining":{"oneOf":[{"type":"integer","description":"Cuántos períodos más se aplica; `null` si se aplica siempre.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.periods_remaining.oneOf.0","typeLabel":"integer"},{"type":"null","description":"Cuántos períodos más se aplica; `null` si se aplica siempre.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.periods_remaining.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0.periods_remaining","typeLabel":"integer | null"}},"isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.0","typeLabel":"object"},{"type":"null","description":"El descuento que tiene la membresía; `null` si no tiene.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.discount","typeLabel":"object | null"},"active_freeze_id":{"oneOf":[{"type":"string","description":"El congelamiento en curso o programado; `null` si no hay. El detalle está en `GET /v1/memberships/{id}/freezes`.","pattern":"^frz_[0-7][0-9a-hjkmnp-tv-z]{25}$","example":"frz_01jtk6e3z2vm9ych2cc7kadyja","isRequired":true,"uniqueKey":"active_membership.oneOf.0.active_freeze_id.oneOf.0","typeLabel":"string"},{"type":"null","description":"El congelamiento en curso o programado; `null` si no hay. El detalle está en `GET /v1/memberships/{id}/freezes`.","isRequired":true,"uniqueKey":"active_membership.oneOf.0.active_freeze_id.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.active_freeze_id","typeLabel":"string | null"},"created_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.created_at","typeLabel":"string\u003cdate-time>"},"updated_at":{"type":"string","format":"date-time","description":"Instante en RFC 3339 con el offset del negocio en ese momento.","examples":["2026-12-02T19:00:00-03:00"],"isRequired":true,"uniqueKey":"active_membership.oneOf.0.updated_at","typeLabel":"string\u003cdate-time>"}},"uniqueKey":"active_membership.oneOf.0","typeLabel":"object"},{"type":"null","description":"Solo en `GET /v1/clients/{id}` con `expand[]=active_membership` (pide `memberships:read`): la\nmembresía que tiene ahora (la `active`; si no hay, la más nueva `paused`, `suspended` o\n`pending_payment`). `null` si no tiene ninguna.\n","uniqueKey":"active_membership.oneOf.1","typeLabel":"null"}],"uniqueKey":"active_membership","typeLabel":"object | null"},"credit_balance":{"type":"object","description":"Solo en `GET /v1/clients/{id}` con `expand[]=credit_balance` (pide `credits:read`).","required":["object","livemode","client_id","total_credits","grants","grants_has_more"],"properties":{"object":{"type":"string","const":"credit_balance","isRequired":true,"uniqueKey":"credit_balance.object","typeLabel":"string"},"livemode":{"type":"boolean","description":"`false` si el objeto es de tu estudio de prueba (claves `crq_test_`); `true` con claves `crq_live_`.","isRequired":true,"uniqueKey":"credit_balance.livemode","typeLabel":"boolean"},"client_id":{"type":"string","description":"Id de un cliente del estudio.","pattern":"^cli_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cli_01jatfha5h4nkg77c3wfrvd3cw"],"isRequired":true,"uniqueKey":"credit_balance.client_id","typeLabel":"string"},"total_credits":{"type":"integer","description":"El saldo del cliente; `0` si nunca tuvo créditos.","isRequired":true,"uniqueKey":"credit_balance.total_credits","typeLabel":"integer"},"grants":{"type":"array","description":"Los lotes que se pueden usar (sin anular, con créditos y sin vencer), del que vence primero al último. Como mucho 100.","items":{"type":"object","required":["credit_grant_id","kind","credits_remaining","expires_at","course_ids"],"properties":{"credit_grant_id":{"type":"string","description":"Id de un lote de créditos (un pack, una oferta o el período de una membresía).","pattern":"^cgr_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["cgr_01jdwsxvjgc7y12y0h12f43149"],"isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].credit_grant_id","typeLabel":"string"},"kind":{"oneOf":[{"type":"string","description":"`pack`, `intro_offer` o `membership_period`. La lista puede crecer.","enum":["pack","intro_offer","membership_period",null],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].kind.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","description":"`pack`, `intro_offer` o `membership_period`. La lista puede crecer.","enum":["pack","intro_offer","membership_period",null],"x-extensible-enum":true,"isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].kind.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].kind","typeLabel":"enum\u003cstring> | null"},"credits_remaining":{"type":"integer","isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].credits_remaining","typeLabel":"integer"},"expires_at":{"oneOf":[{"type":"string","description":"Cuándo vencen; `null` si no vencen.","format":"date-time","example":"2026-12-02T19:00:00-03:00","isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].expires_at.oneOf.0","typeLabel":"string\u003cdate-time>"},{"type":"null","description":"Cuándo vencen; `null` si no vencen.","isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].expires_at.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].expires_at","typeLabel":"string\u003cdate-time> | null"},"course_ids":{"oneOf":[{"description":"Las disciplinas en las que sirven; `null` si sirven en todas.","type":"array","items":{"type":"string","description":"Id de una disciplina.","pattern":"^crs_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["crs_01jff81dk7rxtacmye5nanfp0h"],"uniqueKey":"credit_balance.grants.items.[INDEX].course_ids.oneOf.0.items.[INDEX]","typeLabel":"string"},"isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].course_ids.oneOf.0","typeLabel":"string[]"},{"description":"Las disciplinas en las que sirven; `null` si sirven en todas.","type":"null","items":{"type":"string","description":"Id de una disciplina.","pattern":"^crs_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["crs_01jff81dk7rxtacmye5nanfp0h"]},"isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].course_ids.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"credit_balance.grants.items.[INDEX].course_ids","typeLabel":"string[] | null"}},"uniqueKey":"credit_balance.grants.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"credit_balance.grants","typeLabel":"object[]"},"grants_has_more":{"type":"boolean","description":"`true` si el cliente tiene más de 100 lotes vivos; la lista completa está en `GET /v1/credit_grants?client_id=…\u0026status=active`.","isRequired":true,"uniqueKey":"credit_balance.grants_has_more","typeLabel":"boolean"}},"uniqueKey":"credit_balance","typeLabel":"object"}},"uniqueKey":"","typeLabel":"object"},"example":{"id":"cli_01jx4qv8n2b5c7d9e0f1g2h3jk","object":"client","livemode":true,"first_name":"Valentina","last_name":"Ríos","status":"active","home_center_id":"ctr_01j65pdnq74qvnh0953pzvtczg","created_at":"2026-12-02T09:14:07-03:00","updated_at":"2026-12-02T09:14:07-03:00","metadata":{"crm_code":"51907"},"email":"valentina.rios@example.com","phone":"+59898765432","created":true},"examples":{"Example":{"title":"Example","value":{"id":"cli_01jx4qv8n2b5c7d9e0f1g2h3jk","object":"client","livemode":true,"first_name":"Valentina","last_name":"Ríos","status":"active","home_center_id":"ctr_01j65pdnq74qvnh0953pzvtczg","created_at":"2026-12-02T09:14:07-03:00","updated_at":"2026-12-02T09:14:07-03:00","metadata":{"crm_code":"51907"},"email":"valentina.rios@example.com","phone":"+59898765432","created":true}}},"exampleType":"examples"}},"exampleType":"examples"},"fec95a6f-6d41-420c-bbcf-469e1b1776b0":{"description":"El pedido está mal formado. Códigos posibles: `invalid_api_version`, `idempotency_key_required`,\n`validation_failed` (con un elemento de `errors` por parámetro: `unknown_parameter`,\n`invalid_prefix`, `invalid_id`, `invalid_date`, `invalid_boolean`, `invalid_enum`,\n`invalid_limit`, `duplicate_parameter`, `expand_not_supported`…) e `invalid_cursor` (un\n`starting_after` de otra búsqueda: repite la primera página con los mismos filtros). En las URLs de\navisos, `webhook_url_invalid` (en `errors`, la causa: `not_https`, `port_not_allowed`,\n`credentials_in_url`, `ip_literal`, `internal_hostname`, `private_address`, `craqui_host` o `too_long`).\nAl cancelar una sesión, `notify_not_supported` (esa escritura no lleva `notify`: siempre avisa); también al\nrevocar un pack y al congelar o descongelar una membresía (no le avisan nada al cliente). En las escrituras de\nplata, `fee_decision_required` y `current_fee_choice_required` (la API no decide sobre plata por ti).\nUn token en la URL o en un cuerpo de formulario responde `invalid_request`: va solo en el header\n`Authorization`. El detalle de un error nunca repite el valor que mandaste.\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"},"1c346b29-19bd-4642-b375-bca3cb9a6b81":{"description":"Falta la clave o no sirve. Códigos posibles: `missing_api_key`, `invalid_api_key`,\n`revoked_api_key`, `expired_api_key`, `legacy_api_key`. Con el token de una app: `invalid_access_token` (no\nes válido o venció: pide otro con el refresh token) y `app_connection_revoked` (el propietario desconectó la\napp); los dos llevan el header `WWW-Authenticate: Bearer error=\"invalid_token\"`.\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"revoked":{"title":"revoked","value":{"type":"https://docs.craqui.com/errors/revoked_api_key","title":"La clave fue revocada","status":401,"code":"revoked_api_key","detail":"Crea una clave nueva en Configuración → Integraciones.","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc"}}},"exampleType":"examples"}},"exampleType":"examples"},"681dd084-57f1-4b48-969f-5316328d81c4":{"description":"La clave es válida pero no puede hacer esto. Códigos posibles: `scope_required`,\n`plan_required`, `api_key_suspended`, `browser_not_allowed`, `wrong_vertical`,\n`event_type_not_permitted` (eventos de un recurso que la clave no puede leer; `required_scope` dice cuál) y\n`write_access_disabled` (en una ruta que crea o cambia datos, si tu negocio no tiene habilitada la escritura por\nla API) y `money_writes_not_enabled` (en una ruta de packs, membresías o pagos, si tu negocio no tiene\nhabilitadas las escrituras de plata). Con el token de una app, además: `app_suspended` (Craqui suspendió la\napp) y `app_connection_suspended` (quien conectó la app ya no es propietario del negocio).\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"},"48cc3394-0956-4780-9a02-d4c436b0d7be":{"description":"No existe, o no es de tu negocio. Código `not_found` o `route_not_found`.","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"},"31d1eb4c-b7e2-471b-b821-498ec4e6ca62":{"description":"Solo con una clave `crq_test_`: tu estudio de prueba no está listo. Código\n`sandbox_unavailable`. Restablece tus datos de prueba en Configuración → Integraciones y vuelve\na intentar. Una clave de prueba nunca responde con los datos reales del negocio. En los pedidos que\ncrean o modifican algo, también `idempotency_in_progress` (el mismo pedido todavía se está procesando) y,\nal crear una URL de avisos, `webhook_endpoint_limit_reached` (ya hay 10). En una ruta que crea o cambia datos\ndel estudio, además, sus reglas no dejan hacerlo: la descripción de cada ruta lista sus códigos.\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"sandbox_unavailable":{"title":"sandbox_unavailable","value":{"type":"https://docs.craqui.com/errors/sandbox_unavailable","title":"Tu estudio de prueba no está listo","status":409,"code":"sandbox_unavailable","detail":"Restablece tus datos de prueba en Configuración → Integraciones y vuelve a intentar.","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc"}}},"exampleType":"examples"}},"exampleType":"examples"},"a7e98e50-10f0-4106-a3c9-76fa88f1d192":{"description":"El pedido se entendió pero no se puede aplicar así. Códigos posibles: `idempotency_key_reused` (esa\n`Idempotency-Key` ya se usó con otro pedido: genera una nueva), `sandbox_contact_not_allowed` y\n`sandbox_account_reserved` (en tu estudio de prueba, un contacto que no es ficticio). En las escrituras de\nplata, además: `currency_mismatch`, `fee_decision_mismatch`, `fee_action_not_available`,\n`start_option_not_applicable` y `paid_on_out_of_range`.\n","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"},"98baf153-31ac-49aa-876e-bc8778ac4664":{"description":"Se pasó el límite de pedidos por minuto de la clave. Código `rate_limited`.","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}},"Retry-After":{"description":"Segundos que hay que esperar antes de reintentar.","schema":{"type":"integer","minimum":0}},"RateLimit":{"description":"Pedidos que quedan en la ventana actual y segundos hasta que se renueva (draft IETF httpapi-ratelimit-headers).","schema":{"type":"string","examples":["\"read\";r=97;t=42"]}},"RateLimit-Policy":{"description":"Límite de la clave por ventana (draft IETF httpapi-ratelimit-headers).","schema":{"type":"string","examples":["\"read\";q=100;w=60"]}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"},"ec8bcdde-f876-4053-8db4-58bfb846ef83":{"description":"Falló algo de nuestro lado. Código `internal_error`. Reintenta; si sigue, escríbenos con el `request_id`.","headers":{"Request-Id":{"description":"Identificador del pedido. Aparece también en el cuerpo de los errores.","schema":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$"}}},"content":{"application/problem+json":{"schema":{"type":"object","description":"Un error. Programa contra `code`, que no cambia; `title` y `detail` son para mostrarle a una\npersona y pueden cambiar de redacción.\n","required":["type","title","status","code","request_id"],"properties":{"type":{"type":"string","format":"uri","description":"URL de la página de la documentación de este error.","examples":["https://docs.craqui.com/errors/invalid_api_key"],"isRequired":true,"uniqueKey":"type","typeLabel":"string\u003curi>"},"title":{"type":"string","description":"Resumen corto, en español.","examples":["La clave no es válida"],"isRequired":true,"uniqueKey":"title","typeLabel":"string"},"status":{"type":"integer","description":"El mismo código HTTP de la respuesta.","examples":[401],"isRequired":true,"uniqueKey":"status","typeLabel":"integer"},"code":{"type":"string","description":"Código estable del error. La lista puede crecer: trata un `code` que no conoces como un\nerror genérico de su `status`.\n","examples":["invalid_api_key"],"isRequired":true,"uniqueKey":"code","typeLabel":"string"},"request_id":{"type":"string","pattern":"^req_[0-9a-hjkmnp-tv-z]{26}$","description":"Identificador del pedido. Búscalo en Configuración → Integraciones → Actividad de la API.","examples":["req_01hzx8m4k2a7d9q3f5w6y8z0bc"],"isRequired":true,"uniqueKey":"request_id","typeLabel":"string"},"detail":{"type":"string","description":"Qué pasó y qué hacer, en español.","examples":["Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_)."],"uniqueKey":"detail","typeLabel":"string"},"doc_url":{"type":"string","format":"uri","description":"Igual a `type`, por compatibilidad con clientes que buscan este campo.","uniqueKey":"doc_url","typeLabel":"string\u003curi>"},"required_scope":{"type":"string","description":"Solo en `scope_required` y `event_type_not_permitted`. El permiso que le falta a la clave.","examples":["business:read"],"uniqueKey":"required_scope","typeLabel":"string"},"errors":{"type":"array","description":"Solo en errores de validación. Un elemento por campo con problemas.","items":{"type":"object","required":["field","code"],"properties":{"field":{"type":"string","description":"El campo, como lo mandaste (por ejemplo `limit`).","examples":["limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].field","typeLabel":"string"},"code":{"type":"string","description":"Qué tiene mal el campo.","examples":["invalid_limit"],"isRequired":true,"uniqueKey":"errors.items.[INDEX].code","typeLabel":"string"},"detail":{"type":"string","description":"Explicación en español.","uniqueKey":"errors.items.[INDEX].detail","typeLabel":"string"}},"uniqueKey":"errors.items.[INDEX]","typeLabel":"object"},"uniqueKey":"errors","typeLabel":"object[]"},"current_price":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"current_price.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"current_price.currency","typeLabel":"string"}},"description":"Solo en `price_changed`. El precio de hoy, en centésimos y con su moneda.","uniqueKey":"current_price","typeLabel":"object"},"expected_amount":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"expected_amount.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"expected_amount.currency","typeLabel":"string"}},"description":"Solo en `amount_mismatch`. El saldo de hoy de la cuota, en centésimos y con su moneda.","uniqueKey":"expected_amount","typeLabel":"object"},"amount_at_stake":{"type":"object","required":["amount_cents","currency"],"properties":{"amount_cents":{"type":"integer","description":"El monto multiplicado por 100. `250000` con `UYU` es $ 2.500,00. Un entero: `250000.5` o `\"250000\"` es\n`validation_failed` (`250000.0` es el mismo número que `250000`).\n","examples":[250000],"isRequired":true,"uniqueKey":"amount_at_stake.amount_cents","typeLabel":"integer"},"currency":{"type":"string","description":"Moneda ISO 4217, en mayúsculas.","pattern":"^[A-Z]{3}$","examples":["UYU"],"isRequired":true,"uniqueKey":"amount_at_stake.currency","typeLabel":"string"}},"description":"Solo en `advance_payment_choice_required`. Lo que falta cobrar del pago por adelantado.","uniqueKey":"amount_at_stake","typeLabel":"object"},"existing_membership_id":{"type":"string","description":"Solo en `active_membership_exists`, `membership_suspended`, `membership_paused` y `membership_scheduled` al\nasignar una membresía: la que el cliente ya tiene.\n","pattern":"^mem_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["mem_01j1q27t44qvr6v2s50cv4rbvq"],"uniqueKey":"existing_membership_id","typeLabel":"string"},"booking_ids":{"type":"array","description":"Solo en `bookings_in_freeze_window` y `bookings_changed`. Las reservas en esas fechas.","items":{"type":"string","description":"Id de una reserva.","pattern":"^bkg_[0-7][0-9a-hjkmnp-tv-z]{25}$","examples":["bkg_01jx9eak0437zdf0yw0atg7g0r"],"uniqueKey":"booking_ids.items.[INDEX]","typeLabel":"string"},"uniqueKey":"booking_ids","typeLabel":"string[]"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"type":"https://docs.craqui.com/errors/invalid_api_key","title":"La clave no es válida","status":401,"code":"invalid_api_key","request_id":"req_01hzx8m4k2a7d9q3f5w6y8z0bc","detail":"Revisa que copiaste la clave completa, incluido el prefijo (crq_live_ o crq_test_).","doc_url":"\u003cstring>","required_scope":"business:read","errors":[{"field":"limit","code":"invalid_limit","detail":"\u003cstring>"}],"current_price":{"amount_cents":250000,"currency":"UYU"},"expected_amount":{"amount_cents":250000,"currency":"UYU"},"amount_at_stake":{"amount_cents":250000,"currency":"UYU"},"existing_membership_id":"mem_01j1q27t44qvr6v2s50cv4rbvq","booking_ids":["bkg_01jx9eak0437zdf0yw0atg7g0r"]}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"fc233af9-d3d8-4b3f-a6d0-a9007dfc974c":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"crq_live_sk_… / crq_live_rk_…","description":"Clave del negocio. `sk` es una clave completa (todo lo que el rol de quien la creó puede dar)\ny `rk` una restringida a los permisos que se eligieron al crearla. Solo se usa desde un\nservidor: un pedido desde un navegador se rechaza con `browser_not_allowed`.\n","scopes":[],"schemeName":"bearerAuth"}},"a6d80785-6f96-48e6-9cae-0538525750e4":{"oauth2":{"type":"oauth2","description":"Una app de terceros conectada a un negocio por su propietario (OAuth 2.1, Authorization Code con PKCE). El\naccess token (`crq_oat_…`) vale 1 hora, va solo en el header `Authorization: Bearer` y es de un solo negocio.\nUna app nunca recibe `notifications:suppress` ni `webhooks:manage`. Ver https://docs.craqui.com/apps.\n","flows":{"authorizationCode":{"authorizationUrl":"https://www.craqui.com/oauth/authorize","tokenUrl":"https://api.craqui.com/oauth/token","refreshUrl":"https://api.craqui.com/oauth/token","scopes":{"business:read":"Ver los datos básicos del negocio (siempre incluido).","centers:read":"Ver las sedes.","rooms:read":"Ver los salones.","teachers:read":"Ver a quienes dan clases.","courses:read":"Ver las disciplinas.","classes:read":"Ver las clases y su horario.","sessions:read":"Ver el horario, sesión por sesión.","sessions:write":"Cancelar sesiones.","clients:read":"Ver los clientes.","clients.pii:read":"Ver el email y el teléfono de los clientes.","clients:write":"Crear, cambiar, dar de baja y reactivar clientes.","bookings:read":"Ver las reservas.","bookings:write":"Reservar, cancelar reservas y marcar asistencia.","credits:read":"Ver los créditos de los clientes.","credits:write":"Asignar y revocar packs de créditos.","memberships:read":"Ver las membresías.","memberships:write":"Asignar, cancelar, congelar y descongelar membresías.","fees:read":"Ver las cuotas.","payments:read":"Ver los pagos.","refunds:read":"Ver los reembolsos.","payments:write":"Registrar pagos.","events:read":"Ver la lista de cambios recientes."}}},"scopes":["clients:write"],"schemeName":"oauth2"}}},"servers":{"bb48cfac-2655-4314-90fd-28cc11e87988":{"url":"https://api.craqui.com/v1","description":"Producción"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"crq_live_sk_… / crq_live_rk_…","description":"Clave del negocio. `sk` es una clave completa (todo lo que el rol de quien la creó puede dar)\ny `rk` una restringida a los permisos que se eligieron al crearla. Solo se usa desde un\nservidor: un pedido desde un navegador se rechaza con `browser_not_allowed`.\n","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Clave del negocio. `sk` es una clave completa (todo lo que el rol de quien la creó puede dar)\ny `rk` una restringida a los permisos que se eligieron al crearla. Solo se usa desde un\nservidor: un pedido desde un navegador se rechaza con `browser_not_allowed`.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"},{"schemes":[{"scheme":{"type":"oauth2","description":"Una app de terceros conectada a un negocio por su propietario (OAuth 2.1, Authorization Code con PKCE). El\naccess token (`crq_oat_…`) vale 1 hora, va solo en el header `Authorization: Bearer` y es de un solo negocio.\nUna app nunca recibe `notifications:suppress` ni `webhooks:manage`. Ver https://docs.craqui.com/apps.\n","flows":{"authorizationCode":{"authorizationUrl":"https://www.craqui.com/oauth/authorize","tokenUrl":"https://api.craqui.com/oauth/token","refreshUrl":"https://api.craqui.com/oauth/token","scopes":{"business:read":"Ver los datos básicos del negocio (siempre incluido).","centers:read":"Ver las sedes.","rooms:read":"Ver los salones.","teachers:read":"Ver a quienes dan clases.","courses:read":"Ver las disciplinas.","classes:read":"Ver las clases y su horario.","sessions:read":"Ver el horario, sesión por sesión.","sessions:write":"Cancelar sesiones.","clients:read":"Ver los clientes.","clients.pii:read":"Ver el email y el teléfono de los clientes.","clients:write":"Crear, cambiar, dar de baja y reactivar clientes.","bookings:read":"Ver las reservas.","bookings:write":"Reservar, cancelar reservas y marcar asistencia.","credits:read":"Ver los créditos de los clientes.","credits:write":"Asignar y revocar packs de créditos.","memberships:read":"Ver las membresías.","memberships:write":"Asignar, cancelar, congelar y descongelar membresías.","fees:read":"Ver las cuotas.","payments:read":"Ver los pagos.","refunds:read":"Ver los reembolsos.","payments:write":"Registrar pagos.","events:read":"Ver la lista de cambios recientes."}}},"scopes":["clients:write"],"schemeName":"oauth2"},"schema":{"title":"OAuth2 Auth","type":"string","isRequired":true,"description":"Una app de terceros conectada a un negocio por su propietario (OAuth 2.1, Authorization Code con PKCE). El\naccess token (`crq_oat_…`) vale 1 hora, va solo en el header `Authorization: Bearer` y es de un solo negocio.\nUna app nunca recibe `notifications:suppress` ni `webhooks:manage`. Ver https://docs.craqui.com/apps.\n","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"oauth2","name":"Authorization"}],"title":"oauth2"}]},"originalFileLocation":"estudios/openapi.yaml"},"subdomain":"craqui","siteName":"API de Craqui","title":"Dar de alta a un cliente - API de Craqui","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-09T20:37:26.457Z","originalFileLocation":"estudios/api-reference/clients/dar-de-alta-a-un-cliente.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Da de alta a un cliente, con las mismas reglas que el alta desde Craqui. Hace falta first_name y un email o un phone. Al cliente no le llega ningún aviso por el alta. Antes de crear a nadie, Craqui busca a la persona en tu estudio, por el email (o, sin email, por el teléfono): - si ya es cliente activo, responde 200 con ese cliente y created: false, sin cambiar nada; - si está en el estudio con otro rol (por ejemplo, del equipo), pasa a ser cliente también, con sus datos como están, y responde 201; - si no está, la da de alta y responde 201. La respuesta trae email y phone solo si la clave tiene clients.pii:read, y el header ETag para un PATCH posterior. En tu estudio de prueba, el cliente lleva un email de example.com, example.org o example.net. Con dry_run=true responde 200 con la vista previa. Rechazos (409): email_in_use (el email es de una persona que no está en tu estudio; nunca se dice de quién), phone_in_use, client_inactive (el cliente está dado de baja: se reactiva con POST /v1/clients/{id}/reactivate), plan_client_limit_reached. Un center_id que no es de tu negocio responde 404 not_found. Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Cuenta para el límite de escrituras (30 por minuto).\">\u003cmeta data-mint-head name=\"application-name\" content=\"API de Craqui\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Dar de alta a un cliente - API de Craqui\">\u003cmeta data-mint-head property=\"og:description\" content=\"Da de alta a un cliente, con las mismas reglas que el alta desde Craqui. Hace falta first_name y un email o un phone. Al cliente no le llega ningún aviso por el alta. Antes de crear a nadie, Craqui busca a la persona en tu estudio, por el email (o, sin email, por el teléfono): - si ya es cliente activo, responde 200 con ese cliente y created: false, sin cambiar nada; - si está en el estudio con otro rol (por ejemplo, del equipo), pasa a ser cliente también, con sus datos como están, y responde 201; - si no está, la da de alta y responde 201. La respuesta trae email y phone solo si la clave tiene clients.pii:read, y el header ETag para un PATCH posterior. En tu estudio de prueba, el cliente lleva un email de example.com, example.org o example.net. Con dry_run=true responde 200 con la vista previa. Rechazos (409): email_in_use (el email es de una persona que no está en tu estudio; nunca se dice de quién), phone_in_use, client_inactive (el cliente está dado de baja: se reactiva con POST /v1/clients/{id}/reactivate), plan_client_limit_reached. Un center_id que no es de tu negocio responde 404 not_found. Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Cuenta para el límite de escrituras (30 por minuto).\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"API de Craqui\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.craqui.com/estudios/api-reference/clients/dar-de-alta-a-un-cliente\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://craqui.mintlify.site/_mintlify/api/og/v2?division=clients\u0026amp;title=Dar+de+alta+a+un+cliente\u0026amp;description=Da+de+alta+a+un+cliente%2C+con+las+mismas+reglas+que+el+alta+desde+Craqui.+Hace+falta+%60first_name%60+y+un+%60email%60%0Ao+un+%60phone%60.+Al+cliente+no+le+llega+ning%C3%BAn+aviso+\u0026amp;theme=176da6da42441ffcb9f627fc\u0026amp;signature=13a2f8e8d8a65b52bb1d58b3e65af58aba7a72a9438f7053ccc5e933a2493e1e\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Dar de alta a un cliente - API de Craqui\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Da de alta a un cliente, con las mismas reglas que el alta desde Craqui. Hace falta first_name y un email o un phone. Al cliente no le llega ningún aviso por el alta. Antes de crear a nadie, Craqui busca a la persona en tu estudio, por el email (o, sin email, por el teléfono): - si ya es cliente activo, responde 200 con ese cliente y created: false, sin cambiar nada; - si está en el estudio con otro rol (por ejemplo, del equipo), pasa a ser cliente también, con sus datos como están, y responde 201; - si no está, la da de alta y responde 201. La respuesta trae email y phone solo si la clave tiene clients.pii:read, y el header ETag para un PATCH posterior. En tu estudio de prueba, el cliente lleva un email de example.com, example.org o example.net. Con dry_run=true responde 200 con la vista previa. Rechazos (409): email_in_use (el email es de una persona que no está en tu estudio; nunca se dice de quién), phone_in_use, client_inactive (el cliente está dado de baja: se reactiva con POST /v1/clients/{id}/reactivate), plan_client_limit_reached. Un center_id que no es de tu negocio responde 404 not_found. Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Cuenta para el límite de escrituras (30 por minuto).\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://craqui.mintlify.site/_mintlify/api/og/v2?division=clients\u0026amp;title=Dar+de+alta+a+un+cliente\u0026amp;description=Da+de+alta+a+un+cliente%2C+con+las+mismas+reglas+que+el+alta+desde+Craqui.+Hace+falta+%60first_name%60+y+un+%60email%60%0Ao+un+%60phone%60.+Al+cliente+no+le+llega+ning%C3%BAn+aviso+\u0026amp;theme=176da6da42441ffcb9f627fc\u0026amp;signature=13a2f8e8d8a65b52bb1d58b3e65af58aba7a72a9438f7053ccc5e933a2493e1e\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/craqui/ptsKlgDyHJpLj3bc/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"API de Craqui\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1F33C7\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.craqui.com/estudios/api-reference/clients/dar-de-alta-a-un-cliente\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/estudios/api-reference/clients/dar-de-alta-a-un-cliente.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.craqui.com/#organization\",\"name\":\"API de Craqui\",\"url\":\"https://docs.craqui.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/craqui/oYoj2lAgh2Jk1Qcv/logo/light.png?fit=max\u0026auto=format\u0026n=oYoj2lAgh2Jk1Qcv\u0026q=85\u0026s=e96edbf5621b5bc4068b5ad8dee910c7\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.craqui.com#website\",\"name\":\"API de Craqui\",\"url\":\"https://docs.craqui.com\",\"publisher\":{\"@id\":\"https://docs.craqui.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.craqui.com/estudios/api-reference/clients/dar-de-alta-a-un-cliente#webpage\",\"url\":\"https://docs.craqui.com/estudios/api-reference/clients/dar-de-alta-a-un-cliente\",\"name\":\"Dar de alta a un cliente\",\"description\":\"Da de alta a un cliente, con las mismas reglas que el alta desde Craqui. Hace falta first_name y un email o un phone. Al cliente no le llega ningún aviso por el alta. Antes de crear a nadie, Craqui busca a la persona en tu estudio, por el email (o, sin email, por el teléfono): - si ya es cliente activo, responde 200 con ese cliente y created: false, sin cambiar nada; - si está en el estudio con otro rol (por ejemplo, del equipo), pasa a ser cliente también, con sus datos como están, y responde 201; - si no está, la da de alta y responde 201. La respuesta trae email y phone solo si la clave tiene clients.pii:read, y el header ETag para un PATCH posterior. En tu estudio de prueba, el cliente lleva un email de example.com, example.org o example.net. Con dry_run=true responde 200 con la vista previa. Rechazos (409): email_in_use (el email es de una persona que no está en tu estudio; nunca se dice de quién), phone_in_use, client_inactive (el cliente está dado de baja: se reactiva con POST /v1/clients/{id}/reactivate), plan_client_limit_reached. Un center_id que no es de tu negocio responde 404 not_found. Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Cuenta para el límite de escrituras (30 por minuto).\",\"dateModified\":\"2026-11-09T20:37:26.457Z\",\"isPartOf\":{\"@id\":\"https://docs.craqui.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.craqui.com/estudios/api-reference/clients/dar-de-alta-a-un-cliente#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.craqui.com/estudios/api-reference/clients/dar-de-alta-a-un-cliente#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"clients\",\"item\":\"https://docs.craqui.com/estudios/api-reference/clients/listar-clientes\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Dar de alta a un cliente\",\"item\":\"https://docs.craqui.com/estudios/api-reference/clients/dar-de-alta-a-un-cliente\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.craqui.com/estudios/api-reference/clients/dar-de-alta-a-un-cliente#apireference\",\"headline\":\"Dar de alta a un cliente\",\"name\":\"Dar de alta a un cliente\",\"description\":\"Da de alta a un cliente, con las mismas reglas que el alta desde Craqui. Hace falta first_name y un email o un phone. Al cliente no le llega ningún aviso por el alta. Antes de crear a nadie, Craqui busca a la persona en tu estudio, por el email (o, sin email, por el teléfono): - si ya es cliente activo, responde 200 con ese cliente y created: false, sin cambiar nada; - si está en el estudio con otro rol (por ejemplo, del equipo), pasa a ser cliente también, con sus datos como están, y responde 201; - si no está, la da de alta y responde 201. La respuesta trae email y phone solo si la clave tiene clients.pii:read, y el header ETag para un PATCH posterior. En tu estudio de prueba, el cliente lleva un email de example.com, example.org o example.net. Con dry_run=true responde 200 con la vista previa. Rechazos (409): email_in_use (el email es de una persona que no está en tu estudio; nunca se dice de quién), phone_in_use, client_inactive (el cliente está dado de baja: se reactiva con POST /v1/clients/{id}/reactivate), plan_client_limit_reached. Un center_id que no es de tu negocio responde 404 not_found. Una escritura: lleva Idempotency-Key (salvo con dry_run=true), solo para estudios (en una academia responde wrong_vertical), y solo si tu negocio tiene habilitada la escritura por la API (write_access_disabled si no). Un campo que el cuerpo no declara responde validation_failed con unknown_field. Cuenta para el límite de escrituras (30 por minuto).\",\"url\":\"https://docs.craqui.com/estudios/api-reference/clients/dar-de-alta-a-un-cliente\",\"mainEntityOfPage\":{\"@id\":\"https://docs.craqui.com/estudios/api-reference/clients/dar-de-alta-a-un-cliente#webpage\"},\"dateModified\":\"2026-11-09T20:37:26.457Z\",\"publisher\":{\"@id\":\"https://docs.craqui.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.craqui.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"API de Craqui\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"API de Craqui","nav":{"global":null,"tabs":[{"tab":"Guías","pages":[{"title":"Guías","href":""}]},{"tab":"Referencia","groups":[{"group":"business","pages":[{"title":"Ver el negocio de la clave","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /business","href":"/estudios/api-reference/business/ver-el-negocio-de-la-clave"}]},{"group":"booking_policy","pages":[{"title":"Ver las reglas de reserva","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /booking_policy","href":"/estudios/api-reference/booking_policy/ver-las-reglas-de-reserva"}]},{"group":"centers","pages":[{"title":"Listar sedes","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /centers","href":"/estudios/api-reference/centers/listar-sedes"},{"title":"Ver una sede","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /centers/{id}","href":"/estudios/api-reference/centers/ver-una-sede"}]},{"group":"rooms","pages":[{"title":"Listar salones","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /rooms","href":"/estudios/api-reference/rooms/listar-salones"},{"title":"Ver un salón","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /rooms/{id}","href":"/estudios/api-reference/rooms/ver-un-salón"}]},{"group":"teachers","pages":[{"title":"Listar instructores","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /teachers","href":"/estudios/api-reference/teachers/listar-instructores"},{"title":"Ver un instructor","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /teachers/{id}","href":"/estudios/api-reference/teachers/ver-un-instructor"}]},{"group":"courses","pages":[{"title":"Listar disciplinas","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /courses","href":"/estudios/api-reference/courses/listar-disciplinas"}]},{"group":"classes","pages":[{"title":"Listar clases","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /classes","href":"/estudios/api-reference/classes/listar-clases"},{"title":"Ver una clase","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /classes/{id}","href":"/estudios/api-reference/classes/ver-una-clase"}]},{"group":"credit_packs","pages":[{"title":"Listar packs de créditos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /credit_packs","href":"/estudios/api-reference/credit_packs/listar-packs-de-créditos"}]},{"group":"membership_plans","pages":[{"title":"Listar planes de membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /membership_plans","href":"/estudios/api-reference/membership_plans/listar-planes-de-membresía"}]},{"group":"intro_offers","pages":[{"title":"Listar ofertas de bienvenida","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /intro_offers","href":"/estudios/api-reference/intro_offers/listar-ofertas-de-bienvenida"}]},{"group":"sessions","pages":[{"title":"Listar sesiones","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /sessions","href":"/estudios/api-reference/sessions/listar-sesiones"},{"title":"Ver una sesión","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /sessions/{id}","href":"/estudios/api-reference/sessions/ver-una-sesión"},{"title":"Listar las reservas de una sesión","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /sessions/{id}/bookings","href":"/estudios/api-reference/sessions/listar-las-reservas-de-una-sesión"},{"title":"Cancelar una sesión","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /sessions/{id}/cancel","href":"/estudios/api-reference/sessions/cancelar-una-sesión"}]},{"group":"clients","pages":[{"title":"Listar clientes","description":"Los clientes activos e inactivos del estudio, del más nuevo al más viejo. Sin el permiso\n`clients.pii:read` no traen email ni teléfono, y filtrar por `email` o `phone` responde\n`scope_required`.\n\n`phone` compara los dígitos por el final (8 o más), así que puede devolver más de un cliente; si lo\nmandas con `+` y algún cliente coincide exacto en E.164, vienen solo esos.\n\n Paginada por cursor: para sincronizar todo, pide `limit=100` y sigue `next_cursor`.\n\n Solo para estudios: en una academia responde `wrong_vertical`. Un parámetro que la ruta no\n declara responde `validation_failed` con `unknown_parameter`.\n","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /clients","href":"/estudios/api-reference/clients/listar-clientes"},{"title":"Dar de alta a un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /clients","href":"/estudios/api-reference/clients/dar-de-alta-a-un-cliente"},{"title":"Ver un cliente","description":"Un cliente del estudio, sin contacto salvo que la clave tenga `clients.pii:read`. Un cliente dado de\nbaja responde con `status: deleted`, sin nombre ni contacto. Alguien que nunca fue cliente del estudio\nresponde `not_found`.\n\n Solo para estudios: en una academia responde `wrong_vertical`. Un parámetro que la ruta no\n declara responde `validation_failed` con `unknown_parameter`.\n","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /clients/{id}","href":"/estudios/api-reference/clients/ver-un-cliente"},{"title":"Cambiar los datos de un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml patch /clients/{id}","href":"/estudios/api-reference/clients/cambiar-los-datos-de-un-cliente"},{"title":"Reactivar a un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /clients/{id}/reactivate","href":"/estudios/api-reference/clients/reactivar-a-un-cliente"},{"title":"Dar de baja a un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /clients/{id}/deactivate","href":"/estudios/api-reference/clients/dar-de-baja-a-un-cliente"}]},{"group":"bookings","pages":[{"title":"Listar reservas","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /bookings","href":"/estudios/api-reference/bookings/listar-reservas"},{"title":"Reservar una sesión","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /bookings","href":"/estudios/api-reference/bookings/reservar-una-sesión"},{"title":"Ver una reserva","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /bookings/{id}","href":"/estudios/api-reference/bookings/ver-una-reserva"},{"title":"Cancelar una reserva","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /bookings/{id}/cancel","href":"/estudios/api-reference/bookings/cancelar-una-reserva"},{"title":"Marcar la asistencia","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /bookings/{id}/attendance","href":"/estudios/api-reference/bookings/marcar-la-asistencia"}]},{"group":"credits","pages":[{"title":"Ver el saldo de créditos de un cliente","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /clients/{id}/credit_balance","href":"/estudios/api-reference/credits/ver-el-saldo-de-créditos-de-un-cliente"},{"title":"Listar lotes de créditos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /credit_grants","href":"/estudios/api-reference/credits/listar-lotes-de-créditos"},{"title":"Asignar un pack ya vendido","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /credit_grants","href":"/estudios/api-reference/credits/asignar-un-pack-ya-vendido"},{"title":"Revocar un pack","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /credit_grants/{id}/revoke","href":"/estudios/api-reference/credits/revocar-un-pack"},{"title":"Listar movimientos de créditos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /credit_transactions","href":"/estudios/api-reference/credits/listar-movimientos-de-créditos"}]},{"group":"memberships","pages":[{"title":"Listar membresías","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /memberships","href":"/estudios/api-reference/memberships/listar-membresías"},{"title":"Asignar una membresía ya vendida","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /memberships","href":"/estudios/api-reference/memberships/asignar-una-membresía-ya-vendida"},{"title":"Ver una membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /memberships/{id}","href":"/estudios/api-reference/memberships/ver-una-membresía"},{"title":"Listar los congelamientos de una membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /memberships/{id}/freezes","href":"/estudios/api-reference/memberships/listar-los-congelamientos-de-una-membresía"},{"title":"Dar de baja una membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /memberships/{id}/cancel","href":"/estudios/api-reference/memberships/dar-de-baja-una-membresía"},{"title":"Congelar una membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /memberships/{id}/freeze","href":"/estudios/api-reference/memberships/congelar-una-membresía"},{"title":"Descongelar una membresía","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /memberships/{id}/unfreeze","href":"/estudios/api-reference/memberships/descongelar-una-membresía"}]},{"group":"fees","pages":[{"title":"Listar cuotas","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /fees","href":"/estudios/api-reference/fees/listar-cuotas"},{"title":"Ver una cuota","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /fees/{id}","href":"/estudios/api-reference/fees/ver-una-cuota"}]},{"group":"payments","pages":[{"title":"Listar pagos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /payments","href":"/estudios/api-reference/payments/listar-pagos"},{"title":"Registrar un pago","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /payments","href":"/estudios/api-reference/payments/registrar-un-pago"},{"title":"Ver un pago","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /payments/{id}","href":"/estudios/api-reference/payments/ver-un-pago"}]},{"group":"refunds","pages":[{"title":"Listar reembolsos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /refunds","href":"/estudios/api-reference/refunds/listar-reembolsos"}]},{"group":"events","pages":[{"title":"Listar eventos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /events","href":"/estudios/api-reference/events/listar-eventos"},{"title":"Ver un evento","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /events/{id}","href":"/estudios/api-reference/events/ver-un-evento"}]},{"group":"webhook_endpoints","pages":[{"title":"Listar URLs de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /webhook_endpoints","href":"/estudios/api-reference/webhook_endpoints/listar-urls-de-avisos"},{"title":"Agregar una URL de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /webhook_endpoints","href":"/estudios/api-reference/webhook_endpoints/agregar-una-url-de-avisos"},{"title":"Ver una URL de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml get /webhook_endpoints/{id}","href":"/estudios/api-reference/webhook_endpoints/ver-una-url-de-avisos"},{"title":"Borrar una URL de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml delete /webhook_endpoints/{id}","href":"/estudios/api-reference/webhook_endpoints/borrar-una-url-de-avisos"},{"title":"Editar una URL de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml patch /webhook_endpoints/{id}","href":"/estudios/api-reference/webhook_endpoints/editar-una-url-de-avisos"},{"title":"Enviar un aviso de prueba","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /webhook_endpoints/{id}/test","href":"/estudios/api-reference/webhook_endpoints/enviar-un-aviso-de-prueba"},{"title":"Cambiar el secreto de una URL de avisos","deprecated":null,"version":null,"openapi":"/estudios/openapi.yaml post /webhook_endpoints/{id}/rotate_secret","href":"/estudios/api-reference/webhook_endpoints/cambiar-el-secreto-de-una-url-de-avisos"},{"title":"El aviso que recibe tu sistema","version":null,"deprecated":null,"openapi":"/estudios/openapi.yaml webhook event","href":"/estudios/api-reference/webhook_endpoints/el-aviso-que-recibe-tu-sistema"}]}]}]},"basePath":"","title":"Dar de alta a un cliente - API de Craqui","buildId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","deploymentId":"dpl_42LwxxU1kGN114H4XzwGYXa9ZDah","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C-hEh3I2.js","utils-CnF4QiUD.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-C7PVNbel.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-8ytevL2A.js","snippetPresets-BT1alx3v.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BLXC0i_W.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-CyLIGI9_.js","shallow-DC0lGVIW.js","getApiPlaygroundDisplay-CgDQ85tN.js","CodeSnippet-6-I-Gpv9.js","CodeSnippets-BAk1kDdu.js","Page-C945cI-W.js","getPastedJson-B276RuWN.js","icon-BqP8etTm.js","MethodPill-DM6sbxG1.js","DuplicateIcon-PyJglOaE.js","createIcon-CMeOMAc_.js","DynamicMarkdown-BoyYAA8K.js","SectionHeading-DAYv3gvZ.js","axios-vUo_bRtp.js","Markdown-BhTTmazV.js","clsx-CR-RHrVC.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CBUH0-zX.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-BmARFYNC.js"]}