{"openapi":"3.1.0","info":{"title":"NDX One · API","version":"1","description":"La API de NDX One: lee y crea datos de la operación desde tus propios sistemas. Se entra con una llave de integración que crea el administrador en Configuración › Conectores: `Authorization: Bearer <secreto>`. Cada llave es de una empresa y ve lo de esa empresa y lo compartido. 120 peticiones por minuto por llave. Todo POST lleva `Idempotency-Key`."},"servers":[{"url":"https://plataforma.ndx-one.com","description":"NDX One"}],"tags":[{"name":"La llave","description":"Qué llave eres y qué puedes hacer."},{"name":"Clientes","description":"Contactos, actividades y tareas: buscar, leer, dar de alta y registrar."}],"security":[{"llave":[]}],"components":{"securitySchemes":{"llave":{"type":"http","scheme":"bearer","description":"El secreto de la llave: ndx_<prefijo>_<secreto>."}}},"paths":{"/api/v1/me":{"get":{"operationId":"me","tags":["La llave"],"summary":"Qué llave soy","description":"La llave, su empresa y lo que puede hacer: para configurar la integración sin preguntar.","responses":{"200":{"description":"La llave.","content":{"application/json":{"schema":{"type":"object","description":"Qué llave soy y qué puedo hacer.","properties":{"key":{"type":"object","description":"La llave.","properties":{"id":{"type":"string","description":"La llave.","minLength":1,"maxLength":36,"format":"uuid"},"name":{"type":"string","description":"Nombre."}},"required":["id","name"],"additionalProperties":false},"company":{"type":"object","description":"Su empresa.","properties":{"id":{"type":"string","description":"La empresa.","minLength":1,"maxLength":36,"format":"uuid"},"name":{"type":"string","description":"Nombre."}},"required":["id","name"],"additionalProperties":false},"actions":{"type":"array","description":"Lo que puede hacer.","items":{"type":"object","description":"Una acción.","properties":{"module":{"type":"string","description":"Módulo."},"action":{"type":"string","description":"Acción."}},"required":["module","action"],"additionalProperties":false}},"modulesInPlan":{"type":"array","description":"Módulos de la API en su plan.","items":{"type":"string","description":"Módulo."}}},"required":["key","company","actions","modulesInPlan"],"additionalProperties":false}}}},"401":{"description":"Sin llave, o no vale.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Fuera del plan (code plan) o sin permiso (code forbidden).","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Más de 120 peticiones por minuto. Con Retry-After.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"No se pudo atender. Con Retry-After: repítela.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}}}},"/api/v1/crm/contacts":{"get":{"operationId":"searchContacts","tags":["Clientes"],"summary":"Buscar contactos","description":"Por teléfono (E.164), correo o nombre, en la empresa de la llave y lo compartido. Sin ficha con ese teléfono, devuelve los contactos de la cuenta cuyo teléfono general es ese número (matchedBy company_phone).\n\nPermiso: crm.read.","parameters":[{"name":"phone","in":"query","required":false,"description":"Teléfono en E.164 (se aceptan espacios). Casa con números puestos por una persona, importados o heredados.","schema":{"type":"string","description":"Teléfono en E.164 (se aceptan espacios). Casa con números puestos por una persona, importados o heredados.","minLength":1,"maxLength":40,"pattern":"^\\+[1-9][0-9 ().-]{6,30}$","examples":["+34600123456"]}},{"name":"email","in":"query","required":false,"description":"Correo exacto, sin distinguir mayúsculas.","schema":{"type":"string","description":"Correo exacto, sin distinguir mayúsculas.","minLength":1,"maxLength":254,"format":"email"}},{"name":"q","in":"query","required":false,"description":"Parte del nombre.","schema":{"type":"string","description":"Parte del nombre.","minLength":2,"maxLength":100}},{"name":"includeStorePhones","in":"query","required":false,"description":"true para casar también con números que escribió un comprador en la tienda (no comprobados).","schema":{"type":"string","enum":["true","false"],"description":"true para casar también con números que escribió un comprador en la tienda (no comprobados)."}},{"name":"limit","in":"query","required":false,"description":"Cuántos por página.","schema":{"type":"integer","description":"Cuántos por página.","minimum":1,"maximum":50,"examples":[20]}},{"name":"cursor","in":"query","required":false,"description":"El nextCursor de la página anterior.","schema":{"type":"string","description":"El nextCursor de la página anterior.","minLength":1,"maxLength":2000}}],"responses":{"200":{"description":"Los que casan (puede ser ninguno).","content":{"application/json":{"schema":{"type":"object","description":"Los que casan. Varios se devuelven todos: decide tu sistema.","properties":{"items":{"type":"array","description":"Contactos.","maxItems":50,"items":{"type":"object","description":"Un contacto encontrado.","properties":{"id":{"type":"string","description":"El contacto.","minLength":1,"maxLength":36,"format":"uuid"},"name":{"type":"string","description":"Nombre completo."},"jobTitle":{"type":["string","null"],"description":"Cargo."},"stage":{"type":"string","description":"En qué punto está la relación."},"company":{"type":["object","null"],"description":"Su cuenta.","properties":{"id":{"type":"string","description":"La cuenta.","minLength":1,"maxLength":36,"format":"uuid"},"name":{"type":"string","description":"Nombre."}},"required":["id","name"],"additionalProperties":false},"owner":{"type":["object","null"],"description":"Su responsable.","properties":{"name":{"type":"string","description":"Nombre."}},"required":["name"],"additionalProperties":false},"phones":{"type":"array","description":"Sus teléfonos.","items":{"type":"object","description":"Un teléfono.","properties":{"number":{"type":"string","description":"Como se guardó."},"e164":{"type":["string","null"],"description":"En E.164; nulo si no se pudo calcular."},"kind":{"type":"string","description":"work, personal u other."},"isPrimary":{"type":"boolean","description":"El principal."},"source":{"type":"string","description":"Quién lo puso: person, connector (la tienda), import, api o legacy."}},"required":["number","e164","kind","isPrimary","source"],"additionalProperties":false}},"emails":{"type":"array","description":"Sus correos.","items":{"type":"object","description":"Un correo.","properties":{"address":{"type":"string","description":"La dirección."},"isPrimary":{"type":"boolean","description":"El principal."}},"required":["address","isPrimary"],"additionalProperties":false}},"matchedBy":{"type":"string","enum":["phone","company_phone","email","name"],"description":"Con qué casó."},"phoneSource":{"type":["string","null"],"description":"Si casó por teléfono, quién puso ese número: es una pista, no una identidad."}},"required":["id","name","jobTitle","stage","company","owner","phones","emails","matchedBy","phoneSource"],"additionalProperties":false}},"nextCursor":{"type":["string","null"],"description":"Para la página siguiente; nulo al final."}},"required":["items","nextCursor"],"additionalProperties":false}}}},"400":{"description":"Algo no es válido: error.field dice qué.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Sin llave, o no vale.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Fuera del plan (code plan) o sin permiso (code forbidden).","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Más de 120 peticiones por minuto. Con Retry-After.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"No se pudo atender. Con Retry-After: repítela.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}}},"post":{"operationId":"createContact","tags":["Clientes"],"summary":"Dar de alta un contacto","description":"En la empresa de la llave, sin responsable. Si ya hay una ficha con ese correo, 409 duplicate (con su id si la llave puede ver). El teléfono no cuenta como duplicado: busca antes.\n\nPermiso: crm.edit.","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"De 1 a 200 caracteres. La misma clave y la misma petición devuelven la misma respuesta durante 24 h, sin repetirla.","schema":{"type":"string","minLength":1,"maxLength":200}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"El contacto, para darlo de alta en la empresa de la llave.","properties":{"firstName":{"type":"string","description":"Nombre.","minLength":1,"maxLength":100},"lastName":{"type":["string","null"],"description":"Apellidos.","minLength":1,"maxLength":100},"jobTitle":{"type":["string","null"],"description":"Cargo.","minLength":1,"maxLength":150},"counterpartyId":{"type":["string","null"],"description":"La cuenta (empresa cliente) a la que pertenece, de las que alcanza la llave.","minLength":1,"maxLength":36,"format":"uuid"},"phones":{"type":["array","null"],"description":"Sus teléfonos. El primero es el principal.","maxItems":10,"items":{"type":"object","description":"Un teléfono.","properties":{"number":{"type":"string","description":"En E.164 (se aceptan espacios).","minLength":1,"maxLength":40,"pattern":"^\\+[1-9][0-9 ().-]{6,30}$","examples":["+34600123456"]},"kind":{"type":["string","null"],"enum":["work","personal","other",null],"description":"De qué es. Por omisión, work."}},"required":["number"],"additionalProperties":false}},"emails":{"type":["array","null"],"description":"Sus correos. El primero es el principal.","maxItems":10,"items":{"type":"string","description":"Un correo.","minLength":1,"maxLength":254,"format":"email"}}},"required":["firstName"],"additionalProperties":false}}}},"responses":{"201":{"description":"Creado.","content":{"application/json":{"schema":{"type":"object","description":"Lo creado.","properties":{"id":{"type":"string","description":"Su id.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"400":{"description":"Algo no es válido: error.field dice qué.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Sin llave, o no vale.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Fuera del plan (code plan) o sin permiso (code forbidden).","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"duplicate, conflict, idempotency_conflict o in_progress.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"413":{"description":"El cuerpo es demasiado grande.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Más de 120 peticiones por minuto. Con Retry-After.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"No se pudo atender. Con Retry-After: repítela.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}}}},"/api/v1/crm/contacts/{id}":{"get":{"operationId":"getContact","tags":["Clientes"],"summary":"El contacto","description":"La ficha, con su ETag. Con If-None-Match igual al ETag, 304 sin cuerpo. Fuera del alcance de la llave, 404.\n\nPermiso: crm.read.","parameters":[{"name":"id","in":"path","required":true,"description":"El contacto.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"El contacto. Lleva la cabecera ETag.","content":{"application/json":{"schema":{"type":"object","description":"El contacto. Los campos nuevos que aparezcan se ignoran.","properties":{"id":{"type":"string","description":"El contacto.","minLength":1,"maxLength":36,"format":"uuid"},"firstName":{"type":"string","description":"Nombre."},"lastName":{"type":["string","null"],"description":"Primer apellido."},"secondLastName":{"type":["string","null"],"description":"Segundo apellido."},"name":{"type":"string","description":"Nombre completo, como se muestra."},"jobTitle":{"type":["string","null"],"description":"Cargo."},"department":{"type":["string","null"],"description":"Departamento, del vocabulario del cliente."},"stage":{"type":"string","description":"En qué punto está la relación: lead, active, inactive o discarded. Pueden aparecer valores nuevos."},"language":{"type":["string","null"],"description":"Idioma, BCP 47."},"timeZone":{"type":["string","null"],"description":"Zona horaria IANA."},"account":{"type":["object","null"],"description":"Su cuenta (empresa cliente).","properties":{"id":{"type":"string","description":"La cuenta.","minLength":1,"maxLength":36,"format":"uuid"},"name":{"type":"string","description":"Nombre."}},"required":["id","name"],"additionalProperties":false},"owner":{"type":["object","null"],"description":"Su responsable, sin correo: es un empleado.","properties":{"id":{"type":"string","description":"La persona.","minLength":1,"maxLength":36,"format":"uuid"},"name":{"type":"string","description":"Nombre."}},"required":["id","name"],"additionalProperties":false},"phones":{"type":"array","description":"Sus teléfonos, el principal primero.","items":{"type":"object","description":"Un teléfono.","properties":{"number":{"type":"string","description":"Como se guardó."},"e164":{"type":["string","null"],"description":"En E.164; nulo si no se pudo calcular."},"kind":{"type":"string","description":"work, personal u other."},"isPrimary":{"type":"boolean","description":"El principal."},"source":{"type":"string","description":"Quién lo puso: person, connector (la tienda), import, api o legacy."}},"required":["number","e164","kind","isPrimary","source"],"additionalProperties":false}},"emails":{"type":"array","description":"Sus correos, el principal primero.","items":{"type":"object","description":"Un correo.","properties":{"address":{"type":"string","description":"La dirección."},"isPrimary":{"type":"boolean","description":"El principal."}},"required":["address","isPrimary"],"additionalProperties":false}},"externalId":{"type":["string","null"],"description":"El id en el sistema del integrador."},"source":{"type":["string","null"],"description":"De dónde vino, del vocabulario del cliente."},"createdAt":{"type":"string","description":"Alta, RFC 3339 en UTC."},"updatedAt":{"type":"string","description":"Último cambio de la ficha, RFC 3339 en UTC."}},"required":["id","firstName","lastName","secondLastName","name","jobTitle","department","stage","language","timeZone","account","owner","phones","emails","externalId","source","createdAt","updatedAt"],"additionalProperties":false}}}},"304":{"description":"No ha cambiado desde ese ETag. Sin cuerpo.","content":{"application/json":{"schema":{"type":"object","description":"Sin cuerpo.","properties":{},"additionalProperties":false}}}},"401":{"description":"Sin llave, o no vale.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Fuera del plan (code plan) o sin permiso (code forbidden).","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"No existe o no lo alcanza.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Más de 120 peticiones por minuto. Con Retry-After.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"No se pudo atender. Con Retry-After: repítela.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}}}},"/api/v1/crm/contacts/{id}/context":{"get":{"operationId":"getCallContext","tags":["Clientes"],"summary":"Resumen del contacto","description":"La ficha, sus oportunidades abiertas, las cinco últimas interacciones y sus tareas abiertas. Fuera del alcance de la llave, 404.\n\nPermiso: crm.read.","parameters":[{"name":"id","in":"path","required":true,"description":"El contacto.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"El contexto.","content":{"application/json":{"schema":{"type":"object","description":"Lo que hace falta para atender, en una petición.","properties":{"contact":{"type":"object","description":"La ficha.","properties":{"id":{"type":"string","description":"El contacto.","minLength":1,"maxLength":36,"format":"uuid"},"name":{"type":"string","description":"Nombre completo."},"jobTitle":{"type":["string","null"],"description":"Cargo."},"stage":{"type":"string","description":"En qué punto está la relación."},"company":{"type":["object","null"],"description":"Su cuenta.","properties":{"id":{"type":"string","description":"La cuenta.","minLength":1,"maxLength":36,"format":"uuid"},"name":{"type":"string","description":"Nombre."}},"required":["id","name"],"additionalProperties":false},"owner":{"type":["object","null"],"description":"Su responsable.","properties":{"name":{"type":"string","description":"Nombre."}},"required":["name"],"additionalProperties":false},"phones":{"type":"array","description":"Sus teléfonos.","items":{"type":"object","description":"Un teléfono.","properties":{"number":{"type":"string","description":"Como se guardó."},"e164":{"type":["string","null"],"description":"En E.164; nulo si no se pudo calcular."},"kind":{"type":"string","description":"work, personal u other."},"isPrimary":{"type":"boolean","description":"El principal."},"source":{"type":"string","description":"Quién lo puso: person, connector (la tienda), import, api o legacy."}},"required":["number","e164","kind","isPrimary","source"],"additionalProperties":false}},"emails":{"type":"array","description":"Sus correos.","items":{"type":"object","description":"Un correo.","properties":{"address":{"type":"string","description":"La dirección."},"isPrimary":{"type":"boolean","description":"El principal."}},"required":["address","isPrimary"],"additionalProperties":false}},"language":{"type":["string","null"],"description":"Idioma."},"timeZone":{"type":["string","null"],"description":"Zona horaria."},"customFields":{"type":"array","description":"Los campos del cliente con valor.","items":{"type":"object","description":"Un campo.","properties":{"key":{"type":"string","description":"Clave."},"label":{"type":"string","description":"Nombre."}},"required":["key","label"],"additionalProperties":true}}},"required":["id","name","jobTitle","stage","company","owner","phones","emails","language","timeZone","customFields"],"additionalProperties":false},"openOpportunities":{"type":"array","description":"Las 20 más recientes.","maxItems":20,"items":{"type":"object","description":"Una oportunidad abierta.","properties":{"id":{"type":"string","description":"La oportunidad.","minLength":1,"maxLength":36,"format":"uuid"},"title":{"type":"string","description":"Título."},"stage":{"type":["string","null"],"description":"Fase."},"amount":{"type":["number","null"],"description":"Importe, en la moneda de la organización."},"owner":{"type":["object","null"],"description":"Responsable.","properties":{"name":{"type":"string","description":"Nombre."}},"required":["name"],"additionalProperties":false}},"required":["id","title","stage","amount","owner"],"additionalProperties":false}},"openOpportunitiesTotal":{"type":"integer","description":"Cuántas hay en total.","minimum":0,"maximum":1000000000},"recentInteractions":{"type":"array","description":"Las 5 últimas llamadas, reuniones y visitas registradas (el correo no va).","maxItems":5,"items":{"type":"object","description":"Una interacción.","properties":{"kind":{"type":"string","description":"call, meeting o visit."},"at":{"type":"string","description":"Cuándo."},"summary":{"type":"string","description":"Resumen."},"type":{"type":["string","null"],"description":"Tipo."},"durationMinutes":{"type":["integer","null"],"description":"Minutos.","minimum":1,"maximum":32767},"author":{"type":["object","null"],"description":"Quién la registró.","properties":{"kind":{"type":"string","enum":["person","integration"],"description":"Una persona o una llave."},"name":{"type":"string","description":"Nombre."}},"required":["kind","name"],"additionalProperties":false}},"required":["kind","at","summary","type","durationMinutes","author"],"additionalProperties":false}},"openTasks":{"type":"array","description":"Las 20 más urgentes.","maxItems":20,"items":{"type":"object","description":"Una tarea abierta.","properties":{"id":{"type":"string","description":"La tarea.","minLength":1,"maxLength":36,"format":"uuid"},"title":{"type":"string","description":"Título."},"dueOn":{"type":["string","null"],"description":"Para cuándo."},"assignee":{"type":["object","null"],"description":"Quién la tiene.","properties":{"name":{"type":"string","description":"Nombre."}},"required":["name"],"additionalProperties":false}},"required":["id","title","dueOn","assignee"],"additionalProperties":false}},"openTasksTotal":{"type":"integer","description":"Cuántas hay en total.","minimum":0,"maximum":1000000000}},"required":["contact","openOpportunities","openOpportunitiesTotal","recentInteractions","openTasks","openTasksTotal"],"additionalProperties":false}}}},"401":{"description":"Sin llave, o no vale.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Fuera del plan (code plan) o sin permiso (code forbidden).","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"No existe o no lo alcanza.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Más de 120 peticiones por minuto. Con Retry-After.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"No se pudo atender. Con Retry-After: repítela.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}}}},"/api/v1/crm/contacts/{id}/calls":{"post":{"operationId":"logCall","tags":["Clientes"],"summary":"Registrar una llamada","description":"Una actividad de tipo llamada en el histórico del contacto, firmada por la llave. Pide ver el contacto. La transcripción y los números se guardan en crudo aparte. Con el mismo externalCallId otra vez, 409 duplicate con la que ya está.\n\nPermiso: crm.read.","parameters":[{"name":"id","in":"path","required":true,"description":"El contacto.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"De 1 a 200 caracteres. La misma clave y la misma petición devuelven la misma respuesta durante 24 h, sin repetirla.","schema":{"type":"string","minLength":1,"maxLength":200}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"La llamada: qué se habló, cuándo y cuánto duró.","properties":{"summary":{"type":"string","description":"Qué pasó, en una línea: es lo que se lee en el histórico.","minLength":1,"maxLength":300},"direction":{"type":["string","null"],"enum":["in","out",null],"description":"in (llamó) u out (se le llamó). Por omisión, in."},"startedAt":{"type":["string","null"],"description":"Cuándo empezó. Por omisión, ahora; no en el futuro.","minLength":1,"maxLength":40,"format":"date-time"},"durationSeconds":{"type":["integer","null"],"description":"Cuánto duró. En el histórico, en minutos redondeados hacia arriba.","minimum":0,"maximum":86400},"transcript":{"type":["string","null"],"description":"La transcripción entera. Se guarda en crudo, tal cual llega, aparte.","minLength":1,"maxLength":400000},"notes":{"type":["string","null"],"description":"Detalle, si lo hay.","minLength":1,"maxLength":10000},"typeId":{"type":["string","null"],"description":"El tipo, del vocabulario del cliente (GET /api/v1/crm/activity-types).","minLength":1,"maxLength":36,"format":"uuid"},"externalCallId":{"type":["string","null"],"description":"El id de la llamada en tu sistema, tal cual: con él, mandarla otra vez no la duplica.","minLength":1,"maxLength":200},"fromNumber":{"type":["string","null"],"description":"Desde qué número, en E.164.","minLength":1,"maxLength":40,"pattern":"^\\+[1-9][0-9 ().-]{6,30}$"},"toNumber":{"type":["string","null"],"description":"A qué número, en E.164.","minLength":1,"maxLength":40,"pattern":"^\\+[1-9][0-9 ().-]{6,30}$"}},"required":["summary"],"additionalProperties":false}}}},"responses":{"201":{"description":"Registrada.","content":{"application/json":{"schema":{"type":"object","description":"Lo creado.","properties":{"id":{"type":"string","description":"Su id.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["id"],"additionalProperties":false}}}},"400":{"description":"Algo no es válido: error.field dice qué.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Sin llave, o no vale.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Fuera del plan (code plan) o sin permiso (code forbidden).","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"No existe o no lo alcanza.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"duplicate, conflict, idempotency_conflict o in_progress.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"413":{"description":"El cuerpo es demasiado grande.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Más de 120 peticiones por minuto. Con Retry-After.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"No se pudo atender. Con Retry-After: repítela.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}}}},"/api/v1/crm/contacts/{id}/tasks":{"post":{"operationId":"createTask","tags":["Clientes"],"summary":"Crear una tarea","description":"Al responsable del contacto o, si no tiene o no lo ve, al de la llave. Si ninguno puede verlo, 422.\n\nPermiso: crm.read.","parameters":[{"name":"id","in":"path","required":true,"description":"El contacto.","schema":{"type":"string","format":"uuid"}},{"name":"Idempotency-Key","in":"header","required":true,"description":"De 1 a 200 caracteres. La misma clave y la misma petición devuelven la misma respuesta durante 24 h, sin repetirla.","schema":{"type":"string","minLength":1,"maxLength":200}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","description":"Una tarea de seguimiento sobre el contacto.","properties":{"title":{"type":"string","description":"Qué hay que hacer.","minLength":1,"maxLength":200},"dueOn":{"type":["string","null"],"description":"Para cuándo, un día.","minLength":1,"maxLength":10,"format":"date"},"notes":{"type":["string","null"],"description":"Detalle.","minLength":1,"maxLength":4000}},"required":["title"],"additionalProperties":false}}}},"responses":{"201":{"description":"Creada.","content":{"application/json":{"schema":{"type":"object","description":"La tarea y a quién se asignó.","properties":{"id":{"type":"string","description":"La tarea.","minLength":1,"maxLength":36,"format":"uuid"},"assignee":{"type":"object","description":"Quién la recibe: el responsable del contacto o, si no, el de la llave.","properties":{"name":{"type":"string","description":"Nombre."}},"required":["name"],"additionalProperties":false}},"required":["id","assignee"],"additionalProperties":false}}}},"400":{"description":"Algo no es válido: error.field dice qué.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"401":{"description":"Sin llave, o no vale.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Fuera del plan (code plan) o sin permiso (code forbidden).","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"404":{"description":"No existe o no lo alcanza.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"409":{"description":"duplicate, conflict, idempotency_conflict o in_progress.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"413":{"description":"El cuerpo es demasiado grande.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"422":{"description":"Nadie que pueda verlo puede recibirla (no_assignee).","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Más de 120 peticiones por minuto. Con Retry-After.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"No se pudo atender. Con Retry-After: repítela.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}}}},"/api/v1/crm/activity-types":{"get":{"operationId":"listActivityTypes","tags":["Clientes"],"summary":"Los tipos de actividad","description":"El vocabulario de la organización para tipificar una actividad.\n\nPermiso: crm.read.","responses":{"200":{"description":"Los tipos.","content":{"application/json":{"schema":{"type":"object","description":"El vocabulario del cliente.","properties":{"items":{"type":"array","description":"Tipos de actividad.","items":{"type":"object","description":"Un tipo.","properties":{"id":{"type":"string","description":"El tipo.","minLength":1,"maxLength":36,"format":"uuid"},"name":{"type":"string","description":"Nombre."}},"required":["id","name"],"additionalProperties":false}}},"required":["items"],"additionalProperties":false}}}},"401":{"description":"Sin llave, o no vale.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"403":{"description":"Fuera del plan (code plan) o sin permiso (code forbidden).","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"429":{"description":"Más de 120 peticiones por minuto. Con Retry-After.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}},"503":{"description":"No se pudo atender. Con Retry-After: repítela.","content":{"application/json":{"schema":{"type":"object","description":"Un error.","properties":{"error":{"type":"object","description":"Qué pasó.","properties":{"code":{"type":"string","description":"invalid, unauthorized, plan, forbidden, not_found, duplicate, conflict, idempotency_conflict, in_progress, no_assignee, too_large, rate_limited, unavailable."},"message":{"type":"string","description":"Qué pasó y qué hacer, en español."},"field":{"type":["string","null"],"description":"Qué campo: en un 400, y en un 409 de la Idempotency-Key."},"id":{"type":["string","null"],"description":"En un 409 duplicate, lo que ya está: la ficha (solo a una llave que puede ver) o la llamada.","minLength":1,"maxLength":36,"format":"uuid"}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}}}}}}