Ir al contenido

Referencia de recursos

Las 80 operaciones de la API, por módulo. Sale del mismo registro que usan la API y el MCP, así que siempre coincide con lo que responde el servidor.

Cómo se llama una operación

Todas las rutas van después de https://panel.kaptativa.app/api/v1 y llevan el token en Authorization: Bearer.

  • Por su recurso, con el método y la ruta que figuran en cada ficha. Los campos marcados «En la ruta» reemplazan a las llaves, los de un GET van en la consulta y los demás en el cuerpo JSON. Responde el objeto tal cual; un listado, { datos, paginacion }.
  • Por su nombre, con POST /v1/herramientas/<nombre> y todos los campos en el cuerpo JSON. Sirve para cualquier operación. Responde lo mismo, pero dentro de resultado.

Si salió bien, la respuesta es siempre 200, también al crear. Si no, un error con su código. Un método que la ruta no admite responde 405 con el encabezado Allow.

Cada ficha dice el alcance que tiene que tener el token y el permiso que tiene que tener su persona en el panel. Para saber cuáles puede usar un token en particular, pedí GET /v1/herramientas.

La misma información, para generar un cliente o importarla en otra herramienta, está en openapi.json (OpenAPI 3.1).

Generales

GET/v1

La cuenta y el token con el que se llama, con sus alcances. Sirve para probar la conexión.

GET/v1/herramientas

Las operaciones que puede usar este token hoy, con el esquema JSON de su entrada y el método y la ruta de su recurso.

GET/v1/openapi.json

La referencia en OpenAPI 3.1. Es pública: no pide token.

Las operaciones de tu token
curl "https://panel.kaptativa.app/api/v1/herramientas" \
  -H "Authorization: Bearer TU_TOKEN"

gestion.ticket.listar

GET/v1/gestion/tickets

Lista los tickets de soporte de la cuenta con su estado, por grupo (abiertos, nuevos, resueltos, cerrados) y tipo.

Tipo
Consulta
Alcance
gestion:lectura
Permiso de la persona
gestion-tickets.ver
Campos de gestion.ticket.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
grupo"todos" | "nuevos" | "abiertos" | "resueltos" | "cerrados"En la consultaQué tickets: abiertos por defecto
tipo"error" | "mejora" | "consulta" | "urgente" | "tarea"En la consulta
Ejemplo de gestion.ticket.listar
curl "https://panel.kaptativa.app/api/v1/gestion/tickets?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.ticket.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "grupo": {
      "description": "Qué tickets: abiertos por defecto",
      "type": "string",
      "enum": [
        "todos",
        "nuevos",
        "abiertos",
        "resueltos",
        "cerrados"
      ]
    },
    "tipo": {
      "type": "string",
      "enum": [
        "error",
        "mejora",
        "consulta",
        "urgente",
        "tarea"
      ]
    }
  }
}

gestion.ticket.ver

GET/v1/gestion/tickets/{numero}

Muestra un ticket de soporte con su estado y la conversación con el equipo de Kaptativa.

Tipo
Consulta
Alcance
gestion:lectura
Permiso de la persona
gestion-tickets.ver
Campos de gestion.ticket.ver
CampoTipoVaDescripción
numeroobligatorioenteroEn la rutaEl número del ticket: 2 para TIC-00002
Ejemplo de gestion.ticket.ver
curl "https://panel.kaptativa.app/api/v1/gestion/tickets/1" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.ticket.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "numero": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "El número del ticket: 2 para TIC-00002"
    }
  },
  "required": [
    "numero"
  ]
}

gestion.ticket.abrir

POST/v1/gestion/tickets

Abre un ticket de soporte para el equipo de Kaptativa: un error, una mejora, una consulta.

Tipo
Acción irreversible
Alcance
gestion:escritura
Permiso de la persona
gestion-tickets.crear
Campos de gestion.ticket.abrir
CampoTipoVaDescripción
asuntoobligatoriotexto, hasta 120 caracteresEn el cuerpo
tipoobligatorio"error" | "mejora" | "consulta" | "urgente" | "tarea"En el cuerpo
modulotextoEn el cuerpoEl módulo afectado, por ejemplo Sitio o Inmobiliaria
descripcionobligatoriotexto, hasta 4000 caracteresEn el cuerpo
Ejemplo de gestion.ticket.abrir
curl -X POST "https://panel.kaptativa.app/api/v1/gestion/tickets" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"asunto":"No puedo cargar una foto","tipo":"error","descripcion":"Al subir una foto a la propiedad, la página queda cargando y no termina."}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.ticket.abrir.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "asunto": {
      "type": "string",
      "minLength": 3,
      "maxLength": 120
    },
    "tipo": {
      "type": "string",
      "enum": [
        "error",
        "mejora",
        "consulta",
        "urgente",
        "tarea"
      ]
    },
    "modulo": {
      "description": "El módulo afectado, por ejemplo Sitio o Inmobiliaria",
      "type": "string"
    },
    "descripcion": {
      "type": "string",
      "minLength": 10,
      "maxLength": 4000
    }
  },
  "required": [
    "asunto",
    "tipo",
    "descripcion"
  ]
}

gestion.ticket.responder

POST/v1/gestion/tickets/{numero}/mensajes

Le escribe al equipo de Kaptativa en la conversación de un ticket.

Tipo
Acción irreversible
Alcance
gestion:escritura
Permiso de la persona
gestion-tickets.crear
Campos de gestion.ticket.responder
CampoTipoVaDescripción
numeroobligatorioenteroEn la rutaEl número del ticket: 2 para TIC-00002
textoobligatoriotexto, hasta 4000 caracteresEn el cuerpo
Ejemplo de gestion.ticket.responder
curl -X POST "https://panel.kaptativa.app/api/v1/gestion/tickets/1/mensajes" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"texto":"Hola, Ana. Te escribo por la consulta de ayer."}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.ticket.responder.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "numero": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "El número del ticket: 2 para TIC-00002"
    },
    "texto": {
      "type": "string",
      "minLength": 2,
      "maxLength": 4000
    }
  },
  "required": [
    "numero",
    "texto"
  ]
}

gestion.ticket.verificar

POST/v1/gestion/tickets/{numero}/verificar

Confirma que un ticket resuelto quedó bien: pasa a Verificado y se cierra.

Tipo
Cambio de estado
Alcance
gestion:escritura
Permiso de la persona
gestion-tickets.editar
Campos de gestion.ticket.verificar
CampoTipoVaDescripción
numeroobligatorioenteroEn la rutaEl número del ticket: 2 para TIC-00002
Ejemplo de gestion.ticket.verificar
curl -X POST "https://panel.kaptativa.app/api/v1/gestion/tickets/1/verificar" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.ticket.verificar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "numero": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "El número del ticket: 2 para TIC-00002"
    }
  },
  "required": [
    "numero"
  ]
}

gestion.ticket.reabrir

POST/v1/gestion/tickets/{numero}/reabrir

Reabre un ticket resuelto porque el problema sigue, con un mensaje para el equipo.

Tipo
Cambio de estado
Alcance
gestion:escritura
Permiso de la persona
gestion-tickets.editar
Campos de gestion.ticket.reabrir
CampoTipoVaDescripción
numeroobligatorioenteroEn la rutaEl número del ticket: 2 para TIC-00002
textoobligatoriotexto, hasta 4000 caracteresEn el cuerpo
Ejemplo de gestion.ticket.reabrir
curl -X POST "https://panel.kaptativa.app/api/v1/gestion/tickets/1/reabrir" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"texto":"Hola, Ana. Te escribo por la consulta de ayer."}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.ticket.reabrir.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "numero": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "El número del ticket: 2 para TIC-00002"
    },
    "texto": {
      "type": "string",
      "minLength": 2,
      "maxLength": 4000
    }
  },
  "required": [
    "numero",
    "texto"
  ]
}

gestion.ticket.calificar

POST/v1/gestion/tickets/{numero}/calificacion

Califica la atención de un ticket resuelto con pulgar arriba o abajo.

Tipo
Acción reversible
Alcance
gestion:escritura
Permiso de la persona
gestion-tickets.editar
Campos de gestion.ticket.calificar
CampoTipoVaDescripción
numeroobligatorioenteroEn la rutaEl número del ticket: 2 para TIC-00002
calificacionobligatorio"arriba" | "abajo"En el cuerpo
Ejemplo de gestion.ticket.calificar
curl -X POST "https://panel.kaptativa.app/api/v1/gestion/tickets/1/calificacion" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"calificacion":"arriba"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.ticket.calificar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "numero": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991,
      "description": "El número del ticket: 2 para TIC-00002"
    },
    "calificacion": {
      "type": "string",
      "enum": [
        "arriba",
        "abajo"
      ]
    }
  },
  "required": [
    "numero",
    "calificacion"
  ]
}

gestion.cliente.buscar

GET/v1/gestion/clientes

Busca clientes por nombre, email o documento y muestra su tipo, contacto y vendedor; sin texto, los más recientes.

Tipo
Consulta
Alcance
gestion:lectura
Permiso de la persona
gestion-clientes.ver
Campos de gestion.cliente.buscar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consulta
sinVerificarverdadero o falsoEn la consultaSolo los No clientes con el email sin verificar, para fusionar
Ejemplo de gestion.cliente.buscar
curl "https://panel.kaptativa.app/api/v1/gestion/clientes?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.cliente.buscar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 80
    },
    "sinVerificar": {
      "description": "Solo los No clientes con el email sin verificar, para fusionar",
      "type": "boolean"
    }
  }
}

gestion.cliente.ver

GET/v1/gestion/clientes/{id}

Muestra la ficha de un cliente: datos personales y comerciales, campos propios y direcciones.

Tipo
Consulta
Alcance
gestion:lectura
Permiso de la persona
gestion-clientes.ver
Campos de gestion.cliente.ver
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id que devuelve gestion.cliente.buscar
Ejemplo de gestion.cliente.ver
curl "https://panel.kaptativa.app/api/v1/gestion/clientes/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.cliente.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve gestion.cliente.buscar"
    }
  },
  "required": [
    "id"
  ]
}

gestion.cliente.crear

POST/v1/gestion/clientes

Da de alta un cliente con nombre y, si se sabe, apellido, email y teléfono; queda con el tipo Cliente.

Tipo
Acción reversible
Alcance
gestion:escritura
Permiso de la persona
gestion-clientes.crear
Campos de gestion.cliente.crear
CampoTipoVaDescripción
nombreobligatoriotexto, hasta 120 caracteresEn el cuerpo
apellidotexto, hasta 120 caracteresEn el cuerpo
emailtexto (email)En el cuerpo
telefonotexto, hasta 40 caracteresEn el cuerpo
Ejemplo de gestion.cliente.crear
curl -X POST "https://panel.kaptativa.app/api/v1/gestion/clientes" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"nombre":"Ana"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.cliente.crear.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "nombre": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "apellido": {
      "type": "string",
      "maxLength": 120
    },
    "email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "telefono": {
      "type": "string",
      "maxLength": 40
    }
  },
  "required": [
    "nombre"
  ]
}

gestion.proveedor.buscar

GET/v1/gestion/proveedores

Busca proveedores por nombre, razón social o CUIT y muestra su rubro, contacto y horario de atención.

Tipo
Consulta
Alcance
gestion:lectura
Permiso de la persona
gestion-proveedores.ver
Campos de gestion.proveedor.buscar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consulta
Ejemplo de gestion.proveedor.buscar
curl "https://panel.kaptativa.app/api/v1/gestion/proveedores?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.proveedor.buscar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 80
    }
  }
}

gestion.proveedor.ver

GET/v1/gestion/proveedores/{id}

Muestra la ficha de un proveedor: datos impositivos, contacto, dirección, horarios y archivos.

Tipo
Consulta
Alcance
gestion:lectura
Permiso de la persona
gestion-proveedores.ver
Campos de gestion.proveedor.ver
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id que devuelve gestion.proveedor.buscar
Ejemplo de gestion.proveedor.ver
curl "https://panel.kaptativa.app/api/v1/gestion/proveedores/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.proveedor.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve gestion.proveedor.buscar"
    }
  },
  "required": [
    "id"
  ]
}

gestion.tarjeta.buscar

GET/v1/gestion/tarjetas

Busca tarjetas por título o descripción en todos los tableros que la persona ve, con su tablero, columna, estado, prioridad y vencimiento.

Tipo
Consulta
Alcance
gestion:lectura
Permiso de la persona
gestion-tableros.ver
Campos de gestion.tarjeta.buscar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscarobligatoriotexto, hasta 80 caracteresEn la consulta
Ejemplo de gestion.tarjeta.buscar
curl "https://panel.kaptativa.app/api/v1/gestion/tarjetas?limite=25&buscar=ana" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.tarjeta.buscar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "minLength": 2,
      "maxLength": 80
    }
  },
  "required": [
    "buscar"
  ]
}

gestion.tarjeta.crear

POST/v1/gestion/tarjetas

Agrega una tarjeta al pie de una columna de un tablero, con vencimiento si se lo dicen.

Tipo
Acción reversible
Alcance
gestion:escritura
Permiso de la persona
gestion-tableros.editar
Campos de gestion.tarjeta.crear
CampoTipoVaDescripción
tableroobligatoriotexto, hasta 80 caracteresEn el cuerpoEl nombre del tablero
columnatexto, hasta 60 caracteresEn el cuerpoEl nombre de la columna; sin decirla, la primera
tituloobligatoriotexto, hasta 200 caracteresEn el cuerpo
vencetextoEn el cuerpoLa fecha de vencimiento, como 2026-10-30
Ejemplo de gestion.tarjeta.crear
curl -X POST "https://panel.kaptativa.app/api/v1/gestion/tarjetas" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"tablero":"Ventas","titulo":"Llamar a Ana García"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.tarjeta.crear.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "tablero": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80,
      "description": "El nombre del tablero"
    },
    "columna": {
      "description": "El nombre de la columna; sin decirla, la primera",
      "type": "string",
      "maxLength": 60
    },
    "titulo": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200
    },
    "vence": {
      "description": "La fecha de vencimiento, como 2026-10-30",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    }
  },
  "required": [
    "tablero",
    "titulo"
  ]
}

gestion.importacion.listar

GET/v1/gestion/importaciones

Lista las últimas importaciones de clientes y proveedores con su estado y cuántos registros creó, actualizó o tuvieron error.

Tipo
Consulta
Alcance
gestion:lectura
Permiso de la persona
gestion-importaciones.ver
Campos de gestion.importacion.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
Ejemplo de gestion.importacion.listar
curl "https://panel.kaptativa.app/api/v1/gestion/importaciones?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/gestion.importacion.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    }
  }
}

administracion.usuario.listar

GET/v1/administracion/usuarios

Lista el equipo de la cuenta: nombre, apodo, tipo de usuario, email y si está habilitado.

Tipo
Consulta
Alcance
administracion:lectura
Permiso de la persona
administracion-usuarios.ver
Campos de administracion.usuario.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 60 caracteresEn la consulta
habilitado"si" | "no"En la consulta
Ejemplo de administracion.usuario.listar
curl "https://panel.kaptativa.app/api/v1/administracion/usuarios?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/administracion.usuario.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 60
    },
    "habilitado": {
      "type": "string",
      "enum": [
        "si",
        "no"
      ]
    }
  }
}

administracion.notificacion.listar

GET/v1/administracion/notificaciones

Lista los avisos de quien pregunta en la cuenta: los sin leer o todos.

Tipo
Consulta
Alcance
administracion:lectura
Permiso de la persona
administracion-notificaciones.ver
Campos de administracion.notificacion.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
soloSinLeerverdadero o falsoEn la consulta
Ejemplo de administracion.notificacion.listar
curl "https://panel.kaptativa.app/api/v1/administracion/notificaciones?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/administracion.notificacion.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "soloSinLeer": {
      "type": "boolean"
    }
  }
}

administracion.notificacion.marcar_leidas

POST/v1/administracion/notificaciones/leidas

Marca como leídos todos los avisos de quien pregunta.

Tipo
Cambio de estado
Alcance
administracion:escritura
Permiso de la persona
administracion-notificaciones.ver

No lleva campos.

Ejemplo de administracion.notificacion.marcar_leidas
curl -X POST "https://panel.kaptativa.app/api/v1/administracion/notificaciones/leidas" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/administracion.notificacion.marcar_leidas.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {}
}

administracion.plan.ver

GET/v1/administracion/plan

Muestra lo contratado con su precio, el consumo del mes de cada medidor y los abonos.

Tipo
Consulta
Alcance
administracion:lectura
Permiso de la persona
administracion-plan-consumo.ver

No lleva campos.

Ejemplo de administracion.plan.ver
curl "https://panel.kaptativa.app/api/v1/administracion/plan" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/administracion.plan.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {}
}

administracion.perfil.listar

GET/v1/administracion/perfiles

Lista los tipos de usuario de la cuenta con cuántas personas tiene cada uno y su alcance.

Tipo
Consulta
Alcance
administracion:lectura
Permiso de la persona
administracion-perfiles.ver
Campos de administracion.perfil.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
Ejemplo de administracion.perfil.listar
curl "https://panel.kaptativa.app/api/v1/administracion/perfiles?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/administracion.perfil.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    }
  }
}

administracion.actividad.buscar

GET/v1/administracion/actividad

Busca en la actividad de la cuenta quién hizo qué, sobre qué y cuándo.

Tipo
Consulta
Alcance
administracion:lectura
Permiso de la persona
administracion-actividad.ver
Campos de administracion.actividad.buscar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consulta
desdetextoEn la consulta
hastatextoEn la consulta
modulotextoEn la consulta
Ejemplo de administracion.actividad.buscar
curl "https://panel.kaptativa.app/api/v1/administracion/actividad?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/administracion.actividad.buscar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 80
    },
    "desde": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "hasta": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "modulo": {
      "type": "string"
    }
  }
}

configuracion.ajuste_propiedades.ver

GET/v1/configuracion/ajustes-propiedades

Muestra los parámetros de Inmobiliaria > Configuración: prefijos de código, cintas, fotos recomendadas, tipos y más.

Tipo
Consulta
Alcance
configuracion:lectura
Permiso de la persona
configuracion-propiedades.ver

No lleva campos.

Ejemplo de configuracion.ajuste_propiedades.ver
curl "https://panel.kaptativa.app/api/v1/configuracion/ajustes-propiedades" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/configuracion.ajuste_propiedades.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {}
}

configuracion.ajuste_propiedades.cambiar

PATCH/v1/configuracion/ajustes-propiedades/{clave}

Cambia un parámetro de Inmobiliaria > Configuración. Queda en el historial y se puede deshacer.

Tipo
Acción reversible
Alcance
configuracion:escritura
Permiso de la persona
configuracion-propiedades.editar
Campos de configuracion.ajuste_propiedades.cambiar
CampoTipoVaDescripción
claveobligatorio"prefijoVenta" | "prefijoAlquiler" | "advertirIncompletas" | "bloquearIncompletas" | "fotosRecomendadas" | "cintaReservada" | "diasCintaVendida" | "diasCintaAlquilada" | "marcaPosicion" | "marcaOpacidad" | "marcaTamano" | "umbralBajaPrecio" | "mensajeWhatsapp" | "tiempoRespuesta" | "ventanaAgrupacion" | "motivosCierre" | "brochureConDatos" | "mostrarDesarrollista" | "margenBusqueda" | "topeDiario"En la ruta
valorobligatoriotexto o número o verdadero o falso o lista de textoEn el cuerpo
Ejemplo de configuracion.ajuste_propiedades.cambiar
curl -X PATCH "https://panel.kaptativa.app/api/v1/configuracion/ajustes-propiedades/prefijoVenta" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"valor":"texto"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/configuracion.ajuste_propiedades.cambiar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "clave": {
      "type": "string",
      "enum": [
        "prefijoVenta",
        "prefijoAlquiler",
        "advertirIncompletas",
        "bloquearIncompletas",
        "fotosRecomendadas",
        "cintaReservada",
        "diasCintaVendida",
        "diasCintaAlquilada",
        "marcaPosicion",
        "marcaOpacidad",
        "marcaTamano",
        "umbralBajaPrecio",
        "mensajeWhatsapp",
        "tiempoRespuesta",
        "ventanaAgrupacion",
        "motivosCierre",
        "brochureConDatos",
        "mostrarDesarrollista",
        "margenBusqueda",
        "topeDiario"
      ]
    },
    "valor": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "number"
        },
        {
          "type": "boolean"
        },
        {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      ]
    }
  },
  "required": [
    "clave",
    "valor"
  ]
}

configuracion.archivo.buscar

GET/v1/configuracion/archivos

Busca imágenes o documentos subidos a la cuenta por nombre.

Tipo
Consulta
Alcance
configuracion:lectura
Permiso de la persona
configuracion-archivos.ver
Campos de configuracion.archivo.buscar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
espacioobligatorio"imagenes" | "archivos"En la consulta
buscarobligatoriotexto, hasta 80 caracteresEn la consulta
Ejemplo de configuracion.archivo.buscar
curl "https://panel.kaptativa.app/api/v1/configuracion/archivos?limite=25&espacio=imagenes&buscar=ana" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/configuracion.archivo.buscar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "espacio": {
      "type": "string",
      "enum": [
        "imagenes",
        "archivos"
      ]
    },
    "buscar": {
      "type": "string",
      "minLength": 1,
      "maxLength": 80
    }
  },
  "required": [
    "espacio",
    "buscar"
  ]
}

configuracion.resguardo.ver

GET/v1/configuracion/resguardo

Muestra el último respaldo, el respaldo automático programado y los últimos respaldos con su estado.

Tipo
Consulta
Alcance
configuracion:lectura
Permiso de la persona
configuracion-resguardo.ver

No lleva campos.

Ejemplo de configuracion.resguardo.ver
curl "https://panel.kaptativa.app/api/v1/configuracion/resguardo" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/configuracion.resguardo.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {}
}

configuracion.resguardo.respaldar

POST/v1/configuracion/resguardo/respaldos

Pide un respaldo de la base de datos y los archivos de la cuenta. Lo arma el sistema en unos minutos.

Tipo
Acción reversible
Alcance
configuracion:escritura
Permiso de la persona
configuracion-resguardo.crear

No lleva campos.

Ejemplo de configuracion.resguardo.respaldar
curl -X POST "https://panel.kaptativa.app/api/v1/configuracion/resguardo/respaldos" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/configuracion.resguardo.respaldar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {}
}

configuracion.dominio.listar

GET/v1/configuracion/dominios

Lista los dominios de la cuenta con su estado, cuál es el principal, el certificado y el vencimiento.

Tipo
Consulta
Alcance
configuracion:lectura
Permiso de la persona
configuracion-dominio-correo.ver
Campos de configuracion.dominio.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
Ejemplo de configuracion.dominio.listar
curl "https://panel.kaptativa.app/api/v1/configuracion/dominios?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/configuracion.dominio.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    }
  }
}

configuracion.dominio.verificar

POST/v1/configuracion/dominios/{dominio}/verificar

Verifica un dominio propio pendiente: busca el registro TXT y, si está, lo activa.

Tipo
Cambio de estado
Alcance
configuracion:escritura
Permiso de la persona
configuracion-dominio-correo.editar
Campos de configuracion.dominio.verificar
CampoTipoVaDescripción
dominioobligatoriotexto, hasta 253 caracteresEn la ruta
Ejemplo de configuracion.dominio.verificar
curl -X POST "https://panel.kaptativa.app/api/v1/configuracion/dominios/tu-dominio.com/verificar" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/configuracion.dominio.verificar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "dominio": {
      "type": "string",
      "minLength": 4,
      "maxLength": 253
    }
  },
  "required": [
    "dominio"
  ]
}

configuracion.casilla.listar

GET/v1/configuracion/casillas

Lista las casillas de correo con el dominio de la cuenta, con su responsable, espacio y estado.

Tipo
Consulta
Alcance
configuracion:lectura
Permiso de la persona
configuracion-dominio-correo.ver
Campos de configuracion.casilla.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
Ejemplo de configuracion.casilla.listar
curl "https://panel.kaptativa.app/api/v1/configuracion/casillas?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/configuracion.casilla.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    }
  }
}

inmobiliaria.venta.listar

GET/v1/inmobiliaria/ventas

Lista las propiedades en venta con código, estado, precio, zona y si están publicadas; filtra por texto, estado y fichas incompletas.

Tipo
Consulta
Alcance
inmobiliaria:lectura
Permiso de la persona
inmobiliaria-venta.ver
Campos de inmobiliaria.venta.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consulta
estado"disponible" | "reservada" | "vendida" | "suspendida"En la consulta
incompletasverdadero o falsoEn la consulta
Ejemplo de inmobiliaria.venta.listar
curl "https://panel.kaptativa.app/api/v1/inmobiliaria/ventas?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.venta.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 80
    },
    "estado": {
      "type": "string",
      "enum": [
        "disponible",
        "reservada",
        "vendida",
        "suspendida"
      ]
    },
    "incompletas": {
      "type": "boolean"
    }
  }
}

inmobiliaria.venta.ver

GET/v1/inmobiliaria/ventas/{codigo}

Muestra la ficha de una propiedad en venta: datos, precio, ubicación, estado, fotos y lo que le falta.

Tipo
Consulta
Alcance
inmobiliaria:lectura
Permiso de la persona
inmobiliaria-venta.ver
Campos de inmobiliaria.venta.ver
CampoTipoVaDescripción
codigoobligatoriotexto, hasta 20 caracteresEn la rutaEl código de la propiedad, como VEN-0042
Ejemplo de inmobiliaria.venta.ver
curl "https://panel.kaptativa.app/api/v1/inmobiliaria/ventas/VEN-0042" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.venta.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "codigo": {
      "type": "string",
      "minLength": 3,
      "maxLength": 20,
      "description": "El código de la propiedad, como VEN-0042"
    }
  },
  "required": [
    "codigo"
  ]
}

inmobiliaria.venta.publicar

PATCH/v1/inmobiliaria/ventas/{codigo}/publicacion

Publica en el sitio o pausa una propiedad en venta. Pausada no se ve y queda guardada.

Tipo
Cambio de estado
Alcance
inmobiliaria:escritura
Permiso de la persona
inmobiliaria-venta.publicar
Campos de inmobiliaria.venta.publicar
CampoTipoVaDescripción
codigoobligatoriotexto, hasta 20 caracteresEn la rutaEl código de la propiedad, como VEN-0042
publicadaobligatorioverdadero o falsoEn el cuerpo
Ejemplo de inmobiliaria.venta.publicar
curl -X PATCH "https://panel.kaptativa.app/api/v1/inmobiliaria/ventas/VEN-0042/publicacion" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"publicada":true}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.venta.publicar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "codigo": {
      "type": "string",
      "minLength": 3,
      "maxLength": 20,
      "description": "El código de la propiedad, como VEN-0042"
    },
    "publicada": {
      "type": "boolean"
    }
  },
  "required": [
    "codigo",
    "publicada"
  ]
}

inmobiliaria.venta.cambiar_estado

PATCH/v1/inmobiliaria/ventas/{codigo}/estado

Cambia el estado comercial de una propiedad en venta. Para cerrarla hacen falta el precio y la fecha de cierre.

Tipo
Cambio de estado
Alcance
inmobiliaria:escritura
Permiso de la persona
inmobiliaria-venta.cambiar_estado
Campos de inmobiliaria.venta.cambiar_estado
CampoTipoVaDescripción
codigoobligatoriotexto, hasta 20 caracteresEn la rutaEl código de la propiedad, como VEN-0042
estadoobligatorio"disponible" | "reservada" | "vendida" | "suspendida"En el cuerpo
cierreobjetoEn el cuerpoPrecio (en la moneda, sin centavos) y fecha del cierre
Ejemplo de inmobiliaria.venta.cambiar_estado
curl -X PATCH "https://panel.kaptativa.app/api/v1/inmobiliaria/ventas/VEN-0042/estado" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"estado":"disponible"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.venta.cambiar_estado.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "codigo": {
      "type": "string",
      "minLength": 3,
      "maxLength": 20,
      "description": "El código de la propiedad, como VEN-0042"
    },
    "estado": {
      "type": "string",
      "enum": [
        "disponible",
        "reservada",
        "vendida",
        "suspendida"
      ]
    },
    "cierre": {
      "description": "Precio (en la moneda, sin centavos) y fecha del cierre",
      "type": "object",
      "properties": {
        "importe": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "moneda": {
          "type": "string",
          "enum": [
            "ARS",
            "USD"
          ]
        },
        "fecha": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        }
      },
      "required": [
        "importe",
        "moneda",
        "fecha"
      ]
    }
  },
  "required": [
    "codigo",
    "estado"
  ]
}

inmobiliaria.venta.cambiar_precio

PATCH/v1/inmobiliaria/ventas/{codigo}/precio

Cambia el precio de una propiedad en venta, en dólares, en pesos o los dos. Queda en el historial de precios.

Tipo
Acción reversible
Alcance
inmobiliaria:escritura
Permiso de la persona
inmobiliaria-venta.editar
Campos de inmobiliaria.venta.cambiar_precio
CampoTipoVaDescripción
codigoobligatoriotexto, hasta 20 caracteresEn la rutaEl código de la propiedad, como VEN-0042
precioUsdnúmero o nuloEn el cuerpo
precioArsnúmero o nuloEn el cuerpo
Ejemplo de inmobiliaria.venta.cambiar_precio
curl -X PATCH "https://panel.kaptativa.app/api/v1/inmobiliaria/ventas/VEN-0042/precio" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"precioUsd":185000}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.venta.cambiar_precio.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "codigo": {
      "type": "string",
      "minLength": 3,
      "maxLength": 20,
      "description": "El código de la propiedad, como VEN-0042"
    },
    "precioUsd": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ]
    },
    "precioArs": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "codigo"
  ]
}

inmobiliaria.alquiler.listar

GET/v1/inmobiliaria/alquileres

Lista las propiedades en alquiler con código, estado, precio, zona y si están publicadas; filtra por texto, estado y fichas incompletas.

Tipo
Consulta
Alcance
inmobiliaria:lectura
Permiso de la persona
inmobiliaria-alquiler.ver
Campos de inmobiliaria.alquiler.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consulta
estado"disponible" | "reservada" | "alquilada" | "suspendida"En la consulta
incompletasverdadero o falsoEn la consulta
Ejemplo de inmobiliaria.alquiler.listar
curl "https://panel.kaptativa.app/api/v1/inmobiliaria/alquileres?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.alquiler.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 80
    },
    "estado": {
      "type": "string",
      "enum": [
        "disponible",
        "reservada",
        "alquilada",
        "suspendida"
      ]
    },
    "incompletas": {
      "type": "boolean"
    }
  }
}

inmobiliaria.alquiler.ver

GET/v1/inmobiliaria/alquileres/{codigo}

Muestra la ficha de una propiedad en alquiler: datos, precio, ubicación, estado, fotos y lo que le falta.

Tipo
Consulta
Alcance
inmobiliaria:lectura
Permiso de la persona
inmobiliaria-alquiler.ver
Campos de inmobiliaria.alquiler.ver
CampoTipoVaDescripción
codigoobligatoriotexto, hasta 20 caracteresEn la rutaEl código de la propiedad, como VEN-0042
Ejemplo de inmobiliaria.alquiler.ver
curl "https://panel.kaptativa.app/api/v1/inmobiliaria/alquileres/VEN-0042" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.alquiler.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "codigo": {
      "type": "string",
      "minLength": 3,
      "maxLength": 20,
      "description": "El código de la propiedad, como VEN-0042"
    }
  },
  "required": [
    "codigo"
  ]
}

inmobiliaria.alquiler.publicar

PATCH/v1/inmobiliaria/alquileres/{codigo}/publicacion

Publica en el sitio o pausa una propiedad en alquiler. Pausada no se ve y queda guardada.

Tipo
Cambio de estado
Alcance
inmobiliaria:escritura
Permiso de la persona
inmobiliaria-alquiler.publicar
Campos de inmobiliaria.alquiler.publicar
CampoTipoVaDescripción
codigoobligatoriotexto, hasta 20 caracteresEn la rutaEl código de la propiedad, como VEN-0042
publicadaobligatorioverdadero o falsoEn el cuerpo
Ejemplo de inmobiliaria.alquiler.publicar
curl -X PATCH "https://panel.kaptativa.app/api/v1/inmobiliaria/alquileres/VEN-0042/publicacion" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"publicada":true}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.alquiler.publicar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "codigo": {
      "type": "string",
      "minLength": 3,
      "maxLength": 20,
      "description": "El código de la propiedad, como VEN-0042"
    },
    "publicada": {
      "type": "boolean"
    }
  },
  "required": [
    "codigo",
    "publicada"
  ]
}

inmobiliaria.alquiler.cambiar_estado

PATCH/v1/inmobiliaria/alquileres/{codigo}/estado

Cambia el estado comercial de una propiedad en alquiler. Para cerrarla hacen falta el precio y la fecha de cierre.

Tipo
Cambio de estado
Alcance
inmobiliaria:escritura
Permiso de la persona
inmobiliaria-alquiler.cambiar_estado
Campos de inmobiliaria.alquiler.cambiar_estado
CampoTipoVaDescripción
codigoobligatoriotexto, hasta 20 caracteresEn la rutaEl código de la propiedad, como VEN-0042
estadoobligatorio"disponible" | "reservada" | "alquilada" | "suspendida"En el cuerpo
cierreobjetoEn el cuerpoPrecio (en la moneda, sin centavos) y fecha del cierre
Ejemplo de inmobiliaria.alquiler.cambiar_estado
curl -X PATCH "https://panel.kaptativa.app/api/v1/inmobiliaria/alquileres/VEN-0042/estado" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"estado":"disponible"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.alquiler.cambiar_estado.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "codigo": {
      "type": "string",
      "minLength": 3,
      "maxLength": 20,
      "description": "El código de la propiedad, como VEN-0042"
    },
    "estado": {
      "type": "string",
      "enum": [
        "disponible",
        "reservada",
        "alquilada",
        "suspendida"
      ]
    },
    "cierre": {
      "description": "Precio (en la moneda, sin centavos) y fecha del cierre",
      "type": "object",
      "properties": {
        "importe": {
          "type": "number",
          "exclusiveMinimum": 0
        },
        "moneda": {
          "type": "string",
          "enum": [
            "ARS",
            "USD"
          ]
        },
        "fecha": {
          "type": "string",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        }
      },
      "required": [
        "importe",
        "moneda",
        "fecha"
      ]
    }
  },
  "required": [
    "codigo",
    "estado"
  ]
}

inmobiliaria.alquiler.cambiar_precio

PATCH/v1/inmobiliaria/alquileres/{codigo}/precio

Cambia el precio de una propiedad en alquiler, en dólares, en pesos o los dos. Queda en el historial de precios.

Tipo
Acción reversible
Alcance
inmobiliaria:escritura
Permiso de la persona
inmobiliaria-alquiler.editar
Campos de inmobiliaria.alquiler.cambiar_precio
CampoTipoVaDescripción
codigoobligatoriotexto, hasta 20 caracteresEn la rutaEl código de la propiedad, como VEN-0042
precioUsdnúmero o nuloEn el cuerpo
precioArsnúmero o nuloEn el cuerpo
Ejemplo de inmobiliaria.alquiler.cambiar_precio
curl -X PATCH "https://panel.kaptativa.app/api/v1/inmobiliaria/alquileres/VEN-0042/precio" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"precioUsd":185000}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.alquiler.cambiar_precio.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "codigo": {
      "type": "string",
      "minLength": 3,
      "maxLength": 20,
      "description": "El código de la propiedad, como VEN-0042"
    },
    "precioUsd": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ]
    },
    "precioArs": {
      "anyOf": [
        {
          "type": "number",
          "minimum": 0
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "codigo"
  ]
}

inmobiliaria.consulta.listar

GET/v1/inmobiliaria/consultas

Lista las consultas por propiedades: las de hoy, las abiertas o por estado, con la persona, la propiedad, el canal, el asesor y si está demorada.

Tipo
Consulta
Alcance
inmobiliaria:lectura
Permiso de la persona
inmobiliaria-consultas.ver
Campos de inmobiliaria.consulta.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
hoyverdadero o falsoEn la consultaSolo las que entraron hoy
estado"abiertas" | "nueva" | "respondida" | "visita_agendada" | "visito" | "cerrada"En la consulta
propiedadtexto, hasta 20 caracteresEn la consultaEl código, como VEN-0042
Ejemplo de inmobiliaria.consulta.listar
curl "https://panel.kaptativa.app/api/v1/inmobiliaria/consultas?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.consulta.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "hoy": {
      "description": "Solo las que entraron hoy",
      "type": "boolean"
    },
    "estado": {
      "type": "string",
      "enum": [
        "abiertas",
        "nueva",
        "respondida",
        "visita_agendada",
        "visito",
        "cerrada"
      ]
    },
    "propiedad": {
      "description": "El código, como VEN-0042",
      "type": "string",
      "maxLength": 20
    }
  }
}

inmobiliaria.consulta.registrar

POST/v1/inmobiliaria/consultas

Registra una consulta que llegó por teléfono o en la oficina, por una propiedad (con su código) o una tasación, con el nombre y el contacto de la persona.

Tipo
Acción reversible
Alcance
inmobiliaria:escritura
Permiso de la persona
inmobiliaria-consultas.crear
Campos de inmobiliaria.consulta.registrar
CampoTipoVaDescripción
propiedadtexto, hasta 20 caracteresEn el cuerpoEl código; sin código es una tasación
nombreobligatoriotexto, hasta 120 caracteresEn el cuerpo
telefonotexto, hasta 40 caracteresEn el cuerpo
emailtexto (email)En el cuerpo
mensajetexto, hasta 2000 caracteresEn el cuerpo
canal"telefono" | "oficina"En el cuerpo
Ejemplo de inmobiliaria.consulta.registrar
curl -X POST "https://panel.kaptativa.app/api/v1/inmobiliaria/consultas" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"nombre":"Ana"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.consulta.registrar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "propiedad": {
      "description": "El código; sin código es una tasación",
      "type": "string",
      "maxLength": 20
    },
    "nombre": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "telefono": {
      "type": "string",
      "maxLength": 40
    },
    "email": {
      "type": "string",
      "format": "email",
      "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
    },
    "mensaje": {
      "type": "string",
      "maxLength": 2000
    },
    "canal": {
      "type": "string",
      "enum": [
        "telefono",
        "oficina"
      ]
    }
  },
  "required": [
    "nombre"
  ]
}

inmobiliaria.interesado.listar

GET/v1/inmobiliaria/interesados

Lista quién busca qué: cada búsqueda activa con la persona, lo que busca y cuántas propiedades nuevas coinciden.

Tipo
Consulta
Alcance
inmobiliaria:lectura
Permiso de la persona
inmobiliaria-interesados.ver
Campos de inmobiliaria.interesado.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consulta
conNuevasverdadero o falsoEn la consultaSolo las que tienen coincidencias sin mandar
Ejemplo de inmobiliaria.interesado.listar
curl "https://panel.kaptativa.app/api/v1/inmobiliaria/interesados?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.interesado.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 80
    },
    "conNuevas": {
      "description": "Solo las que tienen coincidencias sin mandar",
      "type": "boolean"
    }
  }
}

inmobiliaria.emprendimiento.listar

GET/v1/inmobiliaria/emprendimientos

Lista los emprendimientos con su estado de obra, avance, entrega, unidades disponibles y precio desde.

Tipo
Consulta
Alcance
inmobiliaria:lectura
Permiso de la persona
inmobiliaria-emprendimientos.ver
Campos de inmobiliaria.emprendimiento.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consulta
Ejemplo de inmobiliaria.emprendimiento.listar
curl "https://panel.kaptativa.app/api/v1/inmobiliaria/emprendimientos?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.emprendimiento.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 80
    }
  }
}

inmobiliaria.emprendimiento.ver

GET/v1/inmobiliaria/emprendimientos/{nombre}

Muestra la disponibilidad de un emprendimiento por tipología y unidad, con el estado de cada una.

Tipo
Consulta
Alcance
inmobiliaria:lectura
Permiso de la persona
inmobiliaria-emprendimientos.ver
Campos de inmobiliaria.emprendimiento.ver
CampoTipoVaDescripción
nombreobligatoriotexto, hasta 120 caracteresEn la rutaEl nombre o parte del nombre
Ejemplo de inmobiliaria.emprendimiento.ver
curl "https://panel.kaptativa.app/api/v1/inmobiliaria/emprendimientos/Ana" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/inmobiliaria.emprendimiento.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "nombre": {
      "type": "string",
      "minLength": 2,
      "maxLength": 120,
      "description": "El nombre o parte del nombre"
    }
  },
  "required": [
    "nombre"
  ]
}

Bandeja

3 operaciones. Alcances: bandeja:lectura y bandeja:escritura.

bandeja.conversacion.sin_contestar

GET/v1/bandeja/conversaciones/sin-contestar

Lista las conversaciones de WhatsApp que esperan respuesta en las líneas que la persona ve, con el contacto, la línea, quién la tiene y el último mensaje.

Tipo
Consulta
Alcance
bandeja:lectura
Permiso de la persona
bandeja-whatsapp.ver
Campos de bandeja.conversacion.sin_contestar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
miasverdadero o falsoEn la consultaSolo las asignadas a la persona
Ejemplo de bandeja.conversacion.sin_contestar
curl "https://panel.kaptativa.app/api/v1/bandeja/conversaciones/sin-contestar?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/bandeja.conversacion.sin_contestar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "mias": {
      "description": "Solo las asignadas a la persona",
      "type": "boolean"
    }
  }
}

bandeja.envio.programar

POST/v1/bandeja/envios

Programa un mensaje de WhatsApp para una conversación que ya existe, a una fecha y hora. Se puede cancelar hasta que sale.

Tipo
Acción reversible
Alcance
bandeja:escritura
Permiso de la persona
bandeja-whatsapp.crear
Campos de bandeja.envio.programar
CampoTipoVaDescripción
contactoobligatoriotexto, hasta 80 caracteresEn el cuerpoEl nombre o el teléfono del contacto
textoobligatoriotexto, hasta 4096 caracteresEn el cuerpo
cuandoobligatoriotextoEn el cuerpoLa fecha y hora en Buenos Aires, como 2026-10-30T10:00
Ejemplo de bandeja.envio.programar
curl -X POST "https://panel.kaptativa.app/api/v1/bandeja/envios" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"contacto":"Ana García","texto":"Hola, Ana. Te escribo por la consulta de ayer.","cuando":"2026-10-30T10:00"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/bandeja.envio.programar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "contacto": {
      "type": "string",
      "minLength": 2,
      "maxLength": 80,
      "description": "El nombre o el teléfono del contacto"
    },
    "texto": {
      "type": "string",
      "minLength": 1,
      "maxLength": 4096
    },
    "cuando": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$",
      "description": "La fecha y hora en Buenos Aires, como 2026-10-30T10:00"
    }
  },
  "required": [
    "contacto",
    "texto",
    "cuando"
  ]
}

bandeja.respuesta.buscar

GET/v1/bandeja/respuestas

Busca entre las respuestas rápidas que la persona ve (las compartidas y las suyas) por atajo, título o texto, para partir de ellas al preparar un borrador.

Tipo
Consulta
Alcance
bandeja:lectura
Permiso de la persona
bandeja-respuestas.ver
Campos de bandeja.respuesta.buscar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consulta
Ejemplo de bandeja.respuesta.buscar
curl "https://panel.kaptativa.app/api/v1/bandeja/respuestas?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/bandeja.respuesta.buscar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 80
    }
  }
}

tienda.producto.listar

GET/v1/tienda/productos

Lista los productos del catálogo con su categoría, marca, precio, stock total y si se ven en el sitio; filtra por texto (título, SKU o código de barras), categoría, marca, ocultos y archivados.

Tipo
Consulta
Alcance
tienda:lectura
Permiso de la persona
tienda-productos.ver
Campos de tienda.producto.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consulta
categoriaIdtexto (uuid)En la consulta
marcaIdtexto (uuid)En la consulta
ocultosverdadero o falsoEn la consultaSolo los que no se ven en el sitio
archivadosverdadero o falsoEn la consultaLos archivados en lugar de los vigentes
Ejemplo de tienda.producto.listar
curl "https://panel.kaptativa.app/api/v1/tienda/productos?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.producto.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 80
    },
    "categoriaId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "marcaId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "ocultos": {
      "description": "Solo los que no se ven en el sitio",
      "type": "boolean"
    },
    "archivados": {
      "description": "Los archivados en lugar de los vigentes",
      "type": "boolean"
    }
  }
}

tienda.producto.ver

GET/v1/tienda/productos/{id}

Muestra la ficha de un producto: textos, categoría, marca, moneda, visibilidad y sus variantes con precio, SKU, código de barras y peso.

Tipo
Consulta
Alcance
tienda:lectura
Permiso de la persona
tienda-productos.ver
Campos de tienda.producto.ver
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id que devuelve tienda.producto.listar
Ejemplo de tienda.producto.ver
curl "https://panel.kaptativa.app/api/v1/tienda/productos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.producto.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve tienda.producto.listar"
    }
  },
  "required": [
    "id"
  ]
}

tienda.producto.crear

POST/v1/tienda/productos

Da de alta un producto simple, sin variantes: título, textos, categoría, marca, moneda, precio, SKU, código de barras y peso. Las variantes, las fotos y el resto se cargan desde el panel.

Tipo
Acción reversible
Alcance
tienda:escritura
Permiso de la persona
tienda-productos.crear
Campos de tienda.producto.crear
CampoTipoVaDescripción
tituloobligatoriotexto, hasta 120 caracteresEn el cuerpo
subtitulotexto, hasta 160 caracteres o nuloEn el cuerpo
descripcionCortatexto, hasta 400 caracteres o nuloEn el cuerpo
descripciontexto, hasta 20000 caracteres o nuloEn el cuerpo
categoriaIdtexto (uuid) o nuloEn el cuerpoEl id que devuelve tienda.categoria.listar. Sin categoría el producto no se ve en el sitio
marcaIdtexto (uuid) o nuloEn el cuerpoEl id que devuelve tienda.marca.listar
visibleMinoristasverdadero o falsoEn el cuerpo
visibleMayoristasverdadero o falsoEn el cuerpo
destacadoverdadero o falsoEn el cuerpo
precionúmero, de 0 a 10000000000 o nuloEn el cuerpoEl precio de venta, en la moneda del producto
precioAnteriornúmero, de 0 a 10000000000 o nuloEn el cuerpoEl precio tachado
skutexto, hasta 60 caracteres o nuloEn el cuerpo
codigoBarrastexto, hasta 40 caracteres o nuloEn el cuerpo
pesoGramosentero, de 0 a 10000000 o nuloEn el cuerpoLas tarifas de envío van por rango de peso
moneda"ARS" | "USD"En el cuerpo
alicuotaIva"0" | "21" | "27" | "10.5" | "exento" | "no_gravado"En el cuerpo
Ejemplo de tienda.producto.crear
curl -X POST "https://panel.kaptativa.app/api/v1/tienda/productos" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"titulo":"Llamar a Ana García"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.producto.crear.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "titulo": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "subtitulo": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 160
        },
        {
          "type": "null"
        }
      ]
    },
    "descripcionCorta": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 400
        },
        {
          "type": "null"
        }
      ]
    },
    "descripcion": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 20000
        },
        {
          "type": "null"
        }
      ]
    },
    "categoriaId": {
      "description": "El id que devuelve tienda.categoria.listar. Sin categoría el producto no se ve en el sitio",
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "marcaId": {
      "description": "El id que devuelve tienda.marca.listar",
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "visibleMinoristas": {
      "type": "boolean"
    },
    "visibleMayoristas": {
      "type": "boolean"
    },
    "destacado": {
      "type": "boolean"
    },
    "precio": {
      "description": "El precio de venta, en la moneda del producto",
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 10000000000
        },
        {
          "type": "null"
        }
      ]
    },
    "precioAnterior": {
      "description": "El precio tachado",
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 10000000000
        },
        {
          "type": "null"
        }
      ]
    },
    "sku": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ]
    },
    "codigoBarras": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ]
    },
    "pesoGramos": {
      "description": "Las tarifas de envío van por rango de peso",
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0,
          "maximum": 10000000
        },
        {
          "type": "null"
        }
      ]
    },
    "moneda": {
      "type": "string",
      "enum": [
        "ARS",
        "USD"
      ]
    },
    "alicuotaIva": {
      "type": "string",
      "enum": [
        "0",
        "21",
        "27",
        "10.5",
        "exento",
        "no_gravado"
      ]
    }
  },
  "required": [
    "titulo"
  ]
}

tienda.producto.editar

PATCH/v1/tienda/productos/{id}

Cambia los datos básicos de un producto: título, textos, categoría, marca y visibilidad; en un producto sin variantes, también el precio, el SKU, el código de barras y el peso. Lo que no se manda queda como está.

Tipo
Acción reversible
Alcance
tienda:escritura
Permiso de la persona
tienda-productos.editar
Campos de tienda.producto.editar
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id que devuelve tienda.producto.listar
titulotexto, hasta 120 caracteresEn el cuerpo
subtitulotexto, hasta 160 caracteres o nuloEn el cuerpo
descripcionCortatexto, hasta 400 caracteres o nuloEn el cuerpo
descripciontexto, hasta 20000 caracteres o nuloEn el cuerpo
categoriaIdtexto (uuid) o nuloEn el cuerpoEl id que devuelve tienda.categoria.listar. Sin categoría el producto no se ve en el sitio
marcaIdtexto (uuid) o nuloEn el cuerpoEl id que devuelve tienda.marca.listar
visibleMinoristasverdadero o falsoEn el cuerpo
visibleMayoristasverdadero o falsoEn el cuerpo
destacadoverdadero o falsoEn el cuerpo
precionúmero, de 0 a 10000000000 o nuloEn el cuerpoEl precio de venta, en la moneda del producto
precioAnteriornúmero, de 0 a 10000000000 o nuloEn el cuerpoEl precio tachado
skutexto, hasta 60 caracteres o nuloEn el cuerpo
codigoBarrastexto, hasta 40 caracteres o nuloEn el cuerpo
pesoGramosentero, de 0 a 10000000 o nuloEn el cuerpoLas tarifas de envío van por rango de peso
Ejemplo de tienda.producto.editar
curl -X PATCH "https://panel.kaptativa.app/api/v1/tienda/productos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"titulo":"Llamar a Ana García"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.producto.editar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve tienda.producto.listar"
    },
    "titulo": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120
    },
    "subtitulo": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 160
        },
        {
          "type": "null"
        }
      ]
    },
    "descripcionCorta": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 400
        },
        {
          "type": "null"
        }
      ]
    },
    "descripcion": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 20000
        },
        {
          "type": "null"
        }
      ]
    },
    "categoriaId": {
      "description": "El id que devuelve tienda.categoria.listar. Sin categoría el producto no se ve en el sitio",
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "marcaId": {
      "description": "El id que devuelve tienda.marca.listar",
      "anyOf": [
        {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        {
          "type": "null"
        }
      ]
    },
    "visibleMinoristas": {
      "type": "boolean"
    },
    "visibleMayoristas": {
      "type": "boolean"
    },
    "destacado": {
      "type": "boolean"
    },
    "precio": {
      "description": "El precio de venta, en la moneda del producto",
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 10000000000
        },
        {
          "type": "null"
        }
      ]
    },
    "precioAnterior": {
      "description": "El precio tachado",
      "anyOf": [
        {
          "type": "number",
          "minimum": 0,
          "maximum": 10000000000
        },
        {
          "type": "null"
        }
      ]
    },
    "sku": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 60
        },
        {
          "type": "null"
        }
      ]
    },
    "codigoBarras": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 40
        },
        {
          "type": "null"
        }
      ]
    },
    "pesoGramos": {
      "description": "Las tarifas de envío van por rango de peso",
      "anyOf": [
        {
          "type": "integer",
          "minimum": 0,
          "maximum": 10000000
        },
        {
          "type": "null"
        }
      ]
    }
  },
  "required": [
    "id"
  ]
}

tienda.categoria.listar

GET/v1/tienda/categorias

Lista las categorías y subcategorías del catálogo con su id, su tipo (de productos o de servicios), si están visibles y cuántos productos tienen.

Tipo
Consulta
Alcance
tienda:lectura
Permiso de la persona
tienda-categorias.ver
Campos de tienda.categoria.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
Ejemplo de tienda.categoria.listar
curl "https://panel.kaptativa.app/api/v1/tienda/categorias?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.categoria.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    }
  }
}

tienda.marca.listar

GET/v1/tienda/marcas

Lista las marcas del catálogo con su id, si están visibles y cuántos productos tienen.

Tipo
Consulta
Alcance
tienda:lectura
Permiso de la persona
tienda-marcas.ver
Campos de tienda.marca.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
Ejemplo de tienda.marca.listar
curl "https://panel.kaptativa.app/api/v1/tienda/marcas?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.marca.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    }
  }
}

tienda.stock.ver

GET/v1/tienda/productos/{id}/stock

Muestra el stock de un producto: cada variante con su id, su total y cuánto hay en cada depósito.

Tipo
Consulta
Alcance
tienda:lectura
Permiso de la persona
tienda-stock.ver
Campos de tienda.stock.ver
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id del producto, el que devuelve tienda.producto.listar
Ejemplo de tienda.stock.ver
curl "https://panel.kaptativa.app/api/v1/tienda/productos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e/stock" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.stock.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id del producto, el que devuelve tienda.producto.listar"
    }
  },
  "required": [
    "id"
  ]
}

tienda.deposito.listar

GET/v1/tienda/depositos

Lista los depósitos con su id, si están disponibles, cuál es el del sitio y cuántos productos tienen stock ahí.

Tipo
Consulta
Alcance
tienda:lectura
Permiso de la persona
tienda-stock.ver
Campos de tienda.deposito.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
Ejemplo de tienda.deposito.listar
curl "https://panel.kaptativa.app/api/v1/tienda/depositos?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.deposito.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    }
  }
}

tienda.stock.ajustar

POST/v1/tienda/stock/ajustes

Ajusta el stock de una variante en un depósito al número contado: registra la diferencia como un movimiento de ajuste en el libro de stock.

Tipo
Acción reversible
Alcance
tienda:escritura
Permiso de la persona
tienda-stock.ajustar
Campos de tienda.stock.ajustar
CampoTipoVaDescripción
varianteIdobligatoriotexto (uuid)En el cuerpoEl id de la variante, el que devuelve tienda.stock.ver
depositoIdobligatoriotexto (uuid)En el cuerpoEl id que devuelve tienda.deposito.listar
stockRealobligatorionúmero, de 0 a 1000000000En el cuerpoLo que se contó, en unidades
motivo"Inventario físico" | "Otros"En el cuerpoSin esto, Inventario físico
observacionestexto, hasta 500 caracteresEn el cuerpo
clavetexto, hasta 80 caracteresEn el cuerpoUna clave propia de quien llama, como alta-2026-0001: repetir el pedido con la misma clave no mueve el stock dos veces
Ejemplo de tienda.stock.ajustar
curl -X POST "https://panel.kaptativa.app/api/v1/tienda/stock/ajustes" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"varianteId":"c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e","depositoId":"c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e","stockReal":1}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.stock.ajustar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "varianteId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id de la variante, el que devuelve tienda.stock.ver"
    },
    "depositoId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve tienda.deposito.listar"
    },
    "stockReal": {
      "type": "number",
      "minimum": 0,
      "maximum": 1000000000,
      "description": "Lo que se contó, en unidades"
    },
    "motivo": {
      "description": "Sin esto, Inventario físico",
      "type": "string",
      "enum": [
        "Inventario físico",
        "Otros"
      ]
    },
    "observaciones": {
      "type": "string",
      "maxLength": 500
    },
    "clave": {
      "type": "string",
      "minLength": 8,
      "maxLength": 80,
      "description": "Una clave propia de quien llama, como alta-2026-0001: repetir el pedido con la misma clave no mueve el stock dos veces"
    }
  },
  "required": [
    "varianteId",
    "depositoId",
    "stockReal"
  ]
}

tienda.movimiento_stock.registrar

POST/v1/tienda/stock/movimientos

Registra un ingreso, un egreso o una transferencia entre depósitos de una variante. Un egreso mayor que el stock del depósito no se registra.

Tipo
Acción reversible
Alcance
tienda:escritura
Permiso de la persona
tienda-stock.crear
Campos de tienda.movimiento_stock.registrar
CampoTipoVaDescripción
tipoobligatorio"ingreso" | "egreso" | "transferencia"En el cuerpo
varianteIdobligatoriotexto (uuid)En el cuerpoEl id de la variante, el que devuelve tienda.stock.ver
depositoIdobligatoriotexto (uuid)En el cuerpoEl depósito donde entra o de donde sale
destinoIdtexto (uuid)En el cuerpoEn una transferencia, el depósito que recibe
cantidadobligatorionúmeroEn el cuerpoEn unidades
motivoobligatoriotexto, hasta 120 caracteresEn el cuerpoPor ejemplo Compra a proveedor, Producto dañado o Reposición
numerotexto, hasta 60 caracteresEn el cuerpoEl número del comprobante, si hay
observacionestexto, hasta 500 caracteresEn el cuerpo
clavetexto, hasta 80 caracteresEn el cuerpoUna clave propia de quien llama, como alta-2026-0001: repetir el pedido con la misma clave no mueve el stock dos veces
Ejemplo de tienda.movimiento_stock.registrar
curl -X POST "https://panel.kaptativa.app/api/v1/tienda/stock/movimientos" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"tipo":"ingreso","varianteId":"c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e","depositoId":"c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e","cantidad":1,"motivo":"texto"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.movimiento_stock.registrar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "tipo": {
      "type": "string",
      "enum": [
        "ingreso",
        "egreso",
        "transferencia"
      ]
    },
    "varianteId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id de la variante, el que devuelve tienda.stock.ver"
    },
    "depositoId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El depósito donde entra o de donde sale"
    },
    "destinoId": {
      "description": "En una transferencia, el depósito que recibe",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "cantidad": {
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1000000000,
      "description": "En unidades"
    },
    "motivo": {
      "type": "string",
      "minLength": 1,
      "maxLength": 120,
      "description": "Por ejemplo Compra a proveedor, Producto dañado o Reposición"
    },
    "numero": {
      "description": "El número del comprobante, si hay",
      "type": "string",
      "maxLength": 60
    },
    "observaciones": {
      "type": "string",
      "maxLength": 500
    },
    "clave": {
      "type": "string",
      "minLength": 8,
      "maxLength": 80,
      "description": "Una clave propia de quien llama, como alta-2026-0001: repetir el pedido con la misma clave no mueve el stock dos veces"
    }
  },
  "required": [
    "tipo",
    "varianteId",
    "depositoId",
    "cantidad",
    "motivo"
  ]
}

tienda.movimiento_stock.listar

GET/v1/tienda/stock/movimientos

Lista el libro de stock, del movimiento más nuevo al más viejo: producto, depósito, tipo, cantidad, stock anterior y nuevo, motivo y quién lo hizo; filtra por texto y por fechas.

Tipo
Consulta
Alcance
tienda:lectura
Permiso de la persona
tienda-stock.ver
Campos de tienda.movimiento_stock.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consultaPor título o SKU
desdetextoEn la consultaUna fecha, como 2026-11-30
hastatextoEn la consultaUna fecha, como 2026-11-30
Ejemplo de tienda.movimiento_stock.listar
curl "https://panel.kaptativa.app/api/v1/tienda/stock/movimientos?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.movimiento_stock.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "description": "Por título o SKU",
      "type": "string",
      "maxLength": 80
    },
    "desde": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Una fecha, como 2026-11-30"
    },
    "hasta": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Una fecha, como 2026-11-30"
    }
  }
}

tienda.pedido.listar

GET/v1/tienda/pedidos

Lista los pedidos, del más nuevo al más viejo, con su código, cliente, total y los tres estados (pedido, pago y entrega); filtra por texto (código o cliente), por cada estado y por canal.

Tipo
Consulta
Alcance
tienda:lectura
Permiso de la persona
tienda-pedidos.ver
Campos de tienda.pedido.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
buscartexto, hasta 80 caracteresEn la consulta
estado"borrador" | "pendiente" | "finalizado" | "aprobado" | "cancelado" | "arrepentido"En la consulta
estadoPago"pendiente" | "realizado" | "aprobado" | "rechazado" | "anulado" | "reembolsado" | "cuenta_corriente"En la consulta
estadoEntrega"sin_preparar" | "empaquetada" | "preparada" | "en_camino" | "enviada" | "retirada"En la consulta
canal"sitio" | "sistema" | "mercado_libre" | "local" | "instagram" | "whatsapp"En la consulta
Ejemplo de tienda.pedido.listar
curl "https://panel.kaptativa.app/api/v1/tienda/pedidos?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.pedido.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "buscar": {
      "type": "string",
      "maxLength": 80
    },
    "estado": {
      "type": "string",
      "enum": [
        "borrador",
        "pendiente",
        "finalizado",
        "aprobado",
        "cancelado",
        "arrepentido"
      ]
    },
    "estadoPago": {
      "type": "string",
      "enum": [
        "pendiente",
        "realizado",
        "aprobado",
        "rechazado",
        "anulado",
        "reembolsado",
        "cuenta_corriente"
      ]
    },
    "estadoEntrega": {
      "type": "string",
      "enum": [
        "sin_preparar",
        "empaquetada",
        "preparada",
        "en_camino",
        "enviada",
        "retirada"
      ]
    },
    "canal": {
      "type": "string",
      "enum": [
        "sitio",
        "sistema",
        "mercado_libre",
        "local",
        "instagram",
        "whatsapp"
      ]
    }
  }
}

tienda.pedido.ver

GET/v1/tienda/pedidos/{id}

Muestra un pedido: el comprador, los productos, los importes, lo pagado y el saldo, la entrega con su transporte y seguimiento, y a qué estados puede pasar.

Tipo
Consulta
Alcance
tienda:lectura
Permiso de la persona
tienda-pedidos.ver
Campos de tienda.pedido.ver
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id que devuelve tienda.pedido.listar
Ejemplo de tienda.pedido.ver
curl "https://panel.kaptativa.app/api/v1/tienda/pedidos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.pedido.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve tienda.pedido.listar"
    }
  },
  "required": [
    "id"
  ]
}

tienda.pedido.cambiar_estado

PATCH/v1/tienda/pedidos/{id}/estado

Pasa un pedido a Pendiente, Aprobado o Finalizado, según lo que permitan su pago y su entrega. Reabrir uno cancelado pide el motivo. Para cancelarlo está tienda.pedido.cancelar.

Tipo
Cambio de estado
Alcance
tienda:escritura
Permiso de la persona
tienda-pedidos.editar
Campos de tienda.pedido.cambiar_estado
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id que devuelve tienda.pedido.listar
estadoobligatorio"pendiente" | "aprobado" | "finalizado"En el cuerpo
motivotexto, hasta 500 caracteresEn el cuerpo
Ejemplo de tienda.pedido.cambiar_estado
curl -X PATCH "https://panel.kaptativa.app/api/v1/tienda/pedidos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e/estado" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"estado":"pendiente"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.pedido.cambiar_estado.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve tienda.pedido.listar"
    },
    "estado": {
      "type": "string",
      "enum": [
        "pendiente",
        "aprobado",
        "finalizado"
      ]
    },
    "motivo": {
      "type": "string",
      "maxLength": 500
    }
  },
  "required": [
    "id",
    "estado"
  ]
}

tienda.pedido.cancelar

POST/v1/tienda/pedidos/{id}/cancelacion

Cancela un pedido con su motivo, o lo marca Arrepentido si el comprador usó su derecho de arrepentimiento. No toca el pago: si estaba pagado queda la alerta Cancelado con pago para resolverla en el panel.

Tipo
Cambio de estado
Alcance
tienda:escritura
Permiso de la persona
tienda-pedidos.cancelar
Campos de tienda.pedido.cancelar
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id que devuelve tienda.pedido.listar
motivoobligatoriotexto, hasta 500 caracteresEn el cuerpo
arrepentimientoverdadero o falsoEn el cuerpoEl comprador se arrepintió de la compra
Ejemplo de tienda.pedido.cancelar
curl -X POST "https://panel.kaptativa.app/api/v1/tienda/pedidos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e/cancelacion" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"motivo":"texto"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.pedido.cancelar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve tienda.pedido.listar"
    },
    "motivo": {
      "type": "string",
      "minLength": 2,
      "maxLength": 500
    },
    "arrepentimiento": {
      "description": "El comprador se arrepintió de la compra",
      "type": "boolean"
    }
  },
  "required": [
    "id",
    "motivo"
  ]
}

tienda.pedido.cambiar_entrega

PATCH/v1/tienda/pedidos/{id}/entrega

Avanza la entrega de un pedido (empaquetada, preparada, en camino, enviada o retirada), con el transporte y el número de seguimiento si los hay. Si la cuenta avisa los cambios por correo, el comprador recibe el aviso que ya manda el panel.

Tipo
Cambio de estado
Alcance
tienda:escritura
Permiso de la persona
tienda-pedidos.cambiar_entrega
Campos de tienda.pedido.cambiar_entrega
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id que devuelve tienda.pedido.listar
estadoobligatorio"sin_preparar" | "empaquetada" | "preparada" | "en_camino" | "enviada" | "retirada"En el cuerpo
transportetexto, hasta 120 caracteresEn el cuerpo
trackingtexto, hasta 120 caracteresEn el cuerpoEl número de seguimiento del envío
Ejemplo de tienda.pedido.cambiar_entrega
curl -X PATCH "https://panel.kaptativa.app/api/v1/tienda/pedidos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e/entrega" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"estado":"sin_preparar"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/tienda.pedido.cambiar_entrega.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve tienda.pedido.listar"
    },
    "estado": {
      "type": "string",
      "enum": [
        "sin_preparar",
        "empaquetada",
        "preparada",
        "en_camino",
        "enviada",
        "retirada"
      ]
    },
    "transporte": {
      "type": "string",
      "maxLength": 120
    },
    "tracking": {
      "description": "El número de seguimiento del envío",
      "type": "string",
      "maxLength": 120
    }
  },
  "required": [
    "id",
    "estado"
  ]
}

alquileres.contrato.listar

GET/v1/alquileres/contratos

Lista los contratos de alquiler, del más nuevo al más viejo, con el inmueble, el inquilino titular, el estado, las fechas, el alquiler vigente y la deuda vencida; filtra por estado, por texto y por los que vencen en 60 días.

Tipo
Consulta
Alcance
alquileres:lectura
Permiso de la persona
alq-contratos.ver
Campos de alquileres.contrato.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
estado"borrador" | "vigente" | "finalizado" | "rescindido"En la consulta
buscartexto, hasta 80 caracteresEn la consultaPor inmueble, número de contrato o inquilino
porVencerverdadero o falsoEn la consultaSolo los vigentes que terminan en los próximos 60 días
Ejemplo de alquileres.contrato.listar
curl "https://panel.kaptativa.app/api/v1/alquileres/contratos?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/alquileres.contrato.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "estado": {
      "type": "string",
      "enum": [
        "borrador",
        "vigente",
        "finalizado",
        "rescindido"
      ]
    },
    "buscar": {
      "description": "Por inmueble, número de contrato o inquilino",
      "type": "string",
      "maxLength": 80
    },
    "porVencer": {
      "description": "Solo los vigentes que terminan en los próximos 60 días",
      "type": "boolean"
    }
  }
}

alquileres.contrato.ver

GET/v1/alquileres/contratos/{id}

Muestra un contrato de alquiler: inmueble, inquilinos, fechas, alquiler vigente, cómo se ajusta y cuándo es el próximo ajuste, la deuda vencida con punitorios y el saldo a favor.

Tipo
Consulta
Alcance
alquileres:lectura
Permiso de la persona
alq-contratos.ver
Campos de alquileres.contrato.ver
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id que devuelve alquileres.contrato.listar
Ejemplo de alquileres.contrato.ver
curl "https://panel.kaptativa.app/api/v1/alquileres/contratos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/alquileres.contrato.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve alquileres.contrato.listar"
    }
  },
  "required": [
    "id"
  ]
}

alquileres.contrato.listar_mensualidades

GET/v1/alquileres/contratos/{id}/mensualidades

Lista las mensualidades de un contrato, de la más vieja a la más nueva, con su vencimiento, total, pagado, saldo, punitorios al día y estado.

Tipo
Consulta
Alcance
alquileres:lectura
Permiso de la persona
alq-contratos.ver
Campos de alquileres.contrato.listar_mensualidades
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
idobligatoriotexto (uuid)En la rutaEl id que devuelve alquileres.contrato.listar
Ejemplo de alquileres.contrato.listar_mensualidades
curl "https://panel.kaptativa.app/api/v1/alquileres/contratos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e/mensualidades?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/alquileres.contrato.listar_mensualidades.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve alquileres.contrato.listar"
    }
  },
  "required": [
    "id"
  ]
}

alquileres.mensualidad.listar

GET/v1/alquileres/mensualidades

Lista las mensualidades de un mes de todos los contratos, con el inquilino, el inmueble, el saldo y los punitorios al día; filtra por estado y por texto. Sin período, el mes en curso.

Tipo
Consulta
Alcance
alquileres:lectura
Permiso de la persona
alq-mensualidades.ver
Campos de alquileres.mensualidad.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
periodotextoEn la consultaEl mes, como 2026-11
estado"pendiente" | "vencida" | "parcial" | "pagada" | "anulada"En la consulta
buscartexto, hasta 80 caracteresEn la consultaPor inquilino, inmueble o número de contrato
Ejemplo de alquileres.mensualidad.listar
curl "https://panel.kaptativa.app/api/v1/alquileres/mensualidades?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/alquileres.mensualidad.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "periodo": {
      "description": "El mes, como 2026-11",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}$"
    },
    "estado": {
      "type": "string",
      "enum": [
        "pendiente",
        "vencida",
        "parcial",
        "pagada",
        "anulada"
      ]
    },
    "buscar": {
      "description": "Por inquilino, inmueble o número de contrato",
      "type": "string",
      "maxLength": 80
    }
  }
}

alquileres.pago.listar

GET/v1/alquileres/pagos

Lista los pagos de alquiler registrados entre dos fechas, del más nuevo al más viejo, con el recibo, el contrato, el inquilino, el medio y el importe. Sin fechas, los del mes en curso.

Tipo
Consulta
Alcance
alquileres:lectura
Permiso de la persona
alq-cobranzas.ver
Campos de alquileres.pago.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
desdetextoEn la consultaUna fecha, como 2026-11-30
hastatextoEn la consultaUna fecha, como 2026-11-30
medio"efectivo" | "transferencia" | "mercado_pago" | "debito" | "red_cobranza" | "deposito" | "otro"En la consulta
buscartexto, hasta 80 caracteresEn la consultaPor inquilino, inmueble o número de recibo
Ejemplo de alquileres.pago.listar
curl "https://panel.kaptativa.app/api/v1/alquileres/pagos?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/alquileres.pago.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "desde": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Una fecha, como 2026-11-30"
    },
    "hasta": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Una fecha, como 2026-11-30"
    },
    "medio": {
      "type": "string",
      "enum": [
        "efectivo",
        "transferencia",
        "mercado_pago",
        "debito",
        "red_cobranza",
        "deposito",
        "otro"
      ]
    },
    "buscar": {
      "description": "Por inquilino, inmueble o número de recibo",
      "type": "string",
      "maxLength": 80
    }
  }
}

alquileres.pago.registrar

POST/v1/alquileres/contratos/{id}/pagos

Registra un pago que ya se recibió de un contrato: lo reparte de la mensualidad más vieja a la más nueva, congela los punitorios a la fecha y deja el recibo. No manda el recibo por correo: ese aviso sale solo cuando el pago se carga desde el panel, desde donde también se puede reenviar. Sin monto toma lo adeudado a esa fecha. Con la misma clave no se registra dos veces: devuelve el recibo que ya hizo.

Tipo
Cobro
Alcance
alquileres:escritura
Permiso de la persona
alq-cobranzas.crear
Campos de alquileres.pago.registrar
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id que devuelve alquileres.contrato.listar
fechaobligatoriotextoEn el cuerpoEl día en que se recibió el pago, como 2026-11-10; no puede ser futura
medioobligatorio"efectivo" | "transferencia" | "mercado_pago" | "debito" | "red_cobranza" | "deposito" | "otro"En el cuerpo
montonúmeroEn el cuerpoEn la moneda del contrato. Sin esto, lo adeudado a la fecha
referenciatexto, hasta 120 caracteresEn el cuerpoEl número de la transferencia o del comprobante
quienPago"inquilino" | "garante" | "tercero"En el cuerpoSin esto, el inquilino
notastexto, hasta 500 caracteresEn el cuerpo
clavetexto, hasta 80 caracteresEn el cuerpoUna clave propia de quien llama, como cobro-2026-11-0001: repetir el pedido con la misma clave no registra el pago dos veces
Ejemplo de alquileres.pago.registrar
curl -X POST "https://panel.kaptativa.app/api/v1/alquileres/contratos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e/pagos" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"fecha":"2026-11-10","medio":"efectivo"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/alquileres.pago.registrar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve alquileres.contrato.listar"
    },
    "fecha": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "El día en que se recibió el pago, como 2026-11-10; no puede ser futura"
    },
    "medio": {
      "type": "string",
      "enum": [
        "efectivo",
        "transferencia",
        "mercado_pago",
        "debito",
        "red_cobranza",
        "deposito",
        "otro"
      ]
    },
    "monto": {
      "description": "En la moneda del contrato. Sin esto, lo adeudado a la fecha",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 1000000000000
    },
    "referencia": {
      "description": "El número de la transferencia o del comprobante",
      "type": "string",
      "maxLength": 120
    },
    "quienPago": {
      "description": "Sin esto, el inquilino",
      "type": "string",
      "enum": [
        "inquilino",
        "garante",
        "tercero"
      ]
    },
    "notas": {
      "type": "string",
      "maxLength": 500
    },
    "clave": {
      "description": "Una clave propia de quien llama, como cobro-2026-11-0001: repetir el pedido con la misma clave no registra el pago dos veces",
      "type": "string",
      "minLength": 8,
      "maxLength": 80
    }
  },
  "required": [
    "id",
    "fecha",
    "medio"
  ]
}

alquileres.moroso.listar

GET/v1/alquileres/morosos

Lista los contratos con mensualidades vencidas pasados los días de gracia: inquilino, inmueble, cuántos períodos debe y desde cuándo, capital, punitorios al día, último pago y en qué está la gestión.

Tipo
Consulta
Alcance
alquileres:lectura
Permiso de la persona
alq-morosos.ver
Campos de alquileres.moroso.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
minimoentero, de 1 a 60En la consultaSolo los que deben al menos esta cantidad de períodos
Ejemplo de alquileres.moroso.listar
curl "https://panel.kaptativa.app/api/v1/alquileres/morosos?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/alquileres.moroso.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "minimo": {
      "description": "Solo los que deben al menos esta cantidad de períodos",
      "type": "integer",
      "minimum": 1,
      "maximum": 60
    }
  }
}

turnos.servicio.listar

GET/v1/turnos/servicios

Lista los servicios para los que se puede cargar un turno, con su id y cuántas sesiones trae cada uno.

Tipo
Consulta
Alcance
turnos:lectura
Permiso de la persona
turnos-calendario.ver
Campos de turnos.servicio.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
Ejemplo de turnos.servicio.listar
curl "https://panel.kaptativa.app/api/v1/turnos/servicios?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/turnos.servicio.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    }
  }
}

turnos.sucursal.listar

GET/v1/turnos/sucursales

Lista las sucursales de la cuenta con su id, la principal primero.

Tipo
Consulta
Alcance
turnos:lectura
Permiso de la persona
turnos-calendario.ver
Campos de turnos.sucursal.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
Ejemplo de turnos.sucursal.listar
curl "https://panel.kaptativa.app/api/v1/turnos/sucursales?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/turnos.sucursal.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    }
  }
}

turnos.profesional.listar

GET/v1/turnos/profesionales

Lista los profesionales que atienden turnos, con su id y si están activos.

Tipo
Consulta
Alcance
turnos:lectura
Permiso de la persona
turnos-calendario.ver
Campos de turnos.profesional.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
Ejemplo de turnos.profesional.listar
curl "https://panel.kaptativa.app/api/v1/turnos/profesionales?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/turnos.profesional.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    }
  }
}

turnos.programacion.listar

GET/v1/turnos/programaciones

Lista las programaciones (las agendas): el servicio y la sucursal, entre qué fechas y horas se atiende, qué días, cuánto dura cada turno, el cupo y los profesionales asignados.

Tipo
Consulta
Alcance
turnos:lectura
Permiso de la persona
turnos-programaciones.ver
Campos de turnos.programacion.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
archivadasverdadero o falsoEn la consultaLas archivadas en lugar de las vigentes
Ejemplo de turnos.programacion.listar
curl "https://panel.kaptativa.app/api/v1/turnos/programaciones?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/turnos.programacion.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "archivadas": {
      "description": "Las archivadas en lugar de las vigentes",
      "type": "boolean"
    }
  }
}

turnos.disponibilidad.consultar

GET/v1/turnos/disponibilidad

Consulta los horarios de un servicio en una sucursal y un día: cada uno con su franjaId, la hora, cuántos lugares le quedan y qué profesionales están libres. sinProgramacion avisa que ese día el servicio no se atiende ahí.

Tipo
Consulta
Alcance
turnos:lectura
Permiso de la persona
turnos-calendario.ver
Campos de turnos.disponibilidad.consultar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
servicioIdobligatoriotexto (uuid)En la consultaEl id que devuelve turnos.servicio.listar
sucursalIdobligatoriotexto (uuid)En la consultaEl id que devuelve turnos.sucursal.listar
fechaobligatoriotextoEn la consultaUna fecha, como 2026-11-30
Ejemplo de turnos.disponibilidad.consultar
curl "https://panel.kaptativa.app/api/v1/turnos/disponibilidad?limite=25&servicioId=c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e&sucursalId=c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e&fecha=2026-11-30" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/turnos.disponibilidad.consultar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "servicioId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve turnos.servicio.listar"
    },
    "sucursalId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve turnos.sucursal.listar"
    },
    "fecha": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Una fecha, como 2026-11-30"
    }
  },
  "required": [
    "servicioId",
    "sucursalId",
    "fecha"
  ]
}

turnos.sesion.listar

GET/v1/turnos/sesiones

Lista las sesiones de los turnos, por horario (las que todavía no tienen horario van primero), con el cliente, el servicio, el profesional, el estado y qué se puede hacer con cada una; filtra por fechas, estado, servicio, sucursal, profesional y texto.

Tipo
Consulta
Alcance
turnos:lectura
Permiso de la persona
turnos-seguimiento.ver
Campos de turnos.sesion.listar
CampoTipoVaDescripción
limiteentero, de 1 a 100En la consultaCuántos trae, de 1 a 100. Sin esto, 25.
cursortexto, hasta 200 caracteresEn la consultaEl valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.
desdetextoEn la consultaUna fecha, como 2026-11-30
hastatextoEn la consultaUna fecha, como 2026-11-30
estado"sin_asignar" | "pendiente" | "confirmado" | "finalizado" | "cancelado" | "en_espera" | "atendido" | "ausente"En la consultaEl estado de la sesión o el de sala
servicioIdtexto (uuid)En la consultaEl id que devuelve turnos.servicio.listar
sucursalIdtexto (uuid)En la consultaEl id que devuelve turnos.sucursal.listar
profesionalIdtexto (uuid)En la consultaEl id que devuelve turnos.profesional.listar
buscartexto, hasta 80 caracteresEn la consultaPor cliente, email o código del turno
Ejemplo de turnos.sesion.listar
curl "https://panel.kaptativa.app/api/v1/turnos/sesiones?limite=25" \
  -H "Authorization: Bearer TU_TOKEN"

Devuelve una página: mirá Paginación. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/turnos.sesion.listar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "limite": {
      "description": "Cuántos trae, de 1 a 100. Sin esto, 25.",
      "type": "integer",
      "minimum": 1,
      "maximum": 100
    },
    "cursor": {
      "description": "El valor de paginacion.siguiente de la respuesta anterior, para traer la página que sigue.",
      "type": "string",
      "maxLength": 200
    },
    "desde": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Una fecha, como 2026-11-30"
    },
    "hasta": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Una fecha, como 2026-11-30"
    },
    "estado": {
      "description": "El estado de la sesión o el de sala",
      "type": "string",
      "enum": [
        "sin_asignar",
        "pendiente",
        "confirmado",
        "finalizado",
        "cancelado",
        "en_espera",
        "atendido",
        "ausente"
      ]
    },
    "servicioId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve turnos.servicio.listar"
    },
    "sucursalId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve turnos.sucursal.listar"
    },
    "profesionalId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve turnos.profesional.listar"
    },
    "buscar": {
      "description": "Por cliente, email o código del turno",
      "type": "string",
      "maxLength": 80
    }
  }
}

turnos.turno.ver

GET/v1/turnos/turnos/{id}

Muestra un turno: el cliente, el servicio, la sucursal y cada una de sus sesiones con su fecha, hora, profesional y estado.

Tipo
Consulta
Alcance
turnos:lectura
Permiso de la persona
turnos-calendario.ver
Campos de turnos.turno.ver
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id del turno, el que devuelven turnos.turno.crear y turnos.sesion.listar (turnoId)
Ejemplo de turnos.turno.ver
curl "https://panel.kaptativa.app/api/v1/turnos/turnos/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e" \
  -H "Authorization: Bearer TU_TOKEN"

También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/turnos.turno.ver.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id del turno, el que devuelven turnos.turno.crear y turnos.sesion.listar (turnoId)"
    }
  },
  "required": [
    "id"
  ]
}

turnos.turno.crear

POST/v1/turnos/turnos

Carga un turno para un cliente que ya existe (clienteId) o uno nuevo (nuevo), de un servicio en una sucursal. Las sesiones que traen horario nacen confirmadas; las demás quedan por agendar. El turno nace sin cobro.

Tipo
Acción reversible
Alcance
turnos:escritura
Permiso de la persona
turnos-calendario.crear
Campos de turnos.turno.crear
CampoTipoVaDescripción
servicioIdobligatoriotexto (uuid)En el cuerpoEl id que devuelve turnos.servicio.listar
sucursalIdobligatoriotexto (uuid)En el cuerpoEl id que devuelve turnos.sucursal.listar
clienteIdtexto (uuid)En el cuerpoEl id que devuelve gestion.cliente.buscar
nuevoobjetoEn el cuerpoLos datos de un cliente nuevo, si no se manda clienteId
sesioneslista de objetoEn el cuerpoUn horario por sesión; sin ninguno, el turno queda por agendar
notastexto, hasta 2000 caracteresEn el cuerpo
Ejemplo de turnos.turno.crear
curl -X POST "https://panel.kaptativa.app/api/v1/turnos/turnos" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"servicioId":"c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e","sucursalId":"c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/turnos.turno.crear.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "servicioId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve turnos.servicio.listar"
    },
    "sucursalId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve turnos.sucursal.listar"
    },
    "clienteId": {
      "description": "El id que devuelve gestion.cliente.buscar",
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    },
    "nuevo": {
      "description": "Los datos de un cliente nuevo, si no se manda clienteId",
      "type": "object",
      "properties": {
        "nombre": {
          "type": "string",
          "minLength": 1,
          "maxLength": 120
        },
        "apellido": {
          "type": "string",
          "maxLength": 120
        },
        "email": {
          "type": "string",
          "format": "email",
          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
        },
        "telefono": {
          "type": "string",
          "maxLength": 40
        }
      },
      "required": [
        "nombre"
      ]
    },
    "sesiones": {
      "description": "Un horario por sesión; sin ninguno, el turno queda por agendar",
      "maxItems": 20,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "franjaId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "El franjaId del horario elegido, el que devuelve turnos.disponibilidad.consultar"
          },
          "profesionalId": {
            "type": "string",
            "format": "uuid",
            "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
            "description": "El id que devuelve turnos.profesional.listar"
          }
        },
        "required": [
          "franjaId"
        ]
      }
    },
    "notas": {
      "type": "string",
      "maxLength": 2000
    }
  },
  "required": [
    "servicioId",
    "sucursalId"
  ]
}

turnos.sesion.reprogramar

PATCH/v1/turnos/sesiones/{id}/horario

Le da horario a una sesión que estaba por agendar o la pasa a otro: libera el lugar anterior y toma el nuevo. Una sesión finalizada, cancelada o marcada ausente no se reprograma.

Tipo
Acción reversible
Alcance
turnos:escritura
Permiso de la persona
turnos-calendario.editar
Campos de turnos.sesion.reprogramar
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id de la sesión, el que devuelven turnos.sesion.listar y turnos.turno.ver
franjaIdobligatoriotexto (uuid)En el cuerpoEl franjaId del horario elegido, el que devuelve turnos.disponibilidad.consultar
profesionalIdtexto (uuid)En el cuerpoEl id que devuelve turnos.profesional.listar
Ejemplo de turnos.sesion.reprogramar
curl -X PATCH "https://panel.kaptativa.app/api/v1/turnos/sesiones/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e/horario" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"franjaId":"c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/turnos.sesion.reprogramar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id de la sesión, el que devuelven turnos.sesion.listar y turnos.turno.ver"
    },
    "franjaId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El franjaId del horario elegido, el que devuelve turnos.disponibilidad.consultar"
    },
    "profesionalId": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id que devuelve turnos.profesional.listar"
    }
  },
  "required": [
    "id",
    "franjaId"
  ]
}

turnos.sesion.cancelar

POST/v1/turnos/sesiones/{id}/cancelacion

Cancela una sesión pendiente, confirmada o por agendar y devuelve su lugar a la agenda. Si hay lista de espera para ese horario, el lugar que se libera se le ofrece al primero de la lista. Se puede reabrir desde el panel.

Tipo
Cambio de estado
Alcance
turnos:escritura
Permiso de la persona
turnos-seguimiento.cancelar
Campos de turnos.sesion.cancelar
CampoTipoVaDescripción
idobligatoriotexto (uuid)En la rutaEl id de la sesión, el que devuelven turnos.sesion.listar y turnos.turno.ver
motivotexto, hasta 200 caracteresEn el cuerpo
Ejemplo de turnos.sesion.cancelar
curl -X POST "https://panel.kaptativa.app/api/v1/turnos/sesiones/c0a8012e-7b1f-4c3a-9d2e-5f6a7b8c9d0e/cancelacion" \
  -H "Authorization: Bearer TU_TOKEN" \
  -H "Idempotency-Key: 8b1f6c1e-2d0a-4a53-9c0b-0c4e3d7a9f21" \
  -H "Content-Type: application/json" \
  -d '{"motivo":"texto"}'

Acepta Idempotency-Key. También se puede llamar por nombre, con todos los campos en el cuerpo: POST /v1/herramientas/turnos.sesion.cancelar.

Esquema JSON de la entrada
{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "format": "uuid",
      "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      "description": "El id de la sesión, el que devuelven turnos.sesion.listar y turnos.turno.ver"
    },
    "motivo": {
      "type": "string",
      "maxLength": 200
    }
  },
  "required": [
    "id"
  ]
}