Capítulo: Referencia de la API

Desarrolladores

Referencia de la API

Todos los endpoints públicos de la API de VentionDesk. La lista se genera a partir de las rutas registradas del servidor; la regla de acceso de cada endpoint sale de las comprobaciones de la ruta, y las tablas de los contratos Zod con los que VentionDesk comprueba las solicitudes y da forma a las respuestas. Así, lo que pone aquí es lo que el servidor hace de verdad.

Las URL empiezan por https://api.ventiondesk.com. El inicio de sesión, los scopes, el formato de error y los límites de solicitudes se explican en Fundamentos de la API. Los campos obligatorios están marcados con *; un endpoint sin tabla comprueba su cuerpo con un contrato que no está publicado, o no tiene ninguno.

Acceso se lee así: «propietario» y «propietario y miembros del equipo» significan una persona que ha iniciado sesión en la interfaz web; con una clave de API, esos endpoints responden con 403. Los endpoints con scope también son accesibles para claves de agente que lleven ese scope.

Tareas

GET/v1/tasks

Leer tareas, filtradas por proyecto, estado, responsable o texto de búsqueda.

Acceso propietario, miembros del equipo o claves de agente con scope tasks:read

Parámetros de consulta

CampoTipoNota
projectUUID
projectSlugTexto
status"hold" | "todo" | "in_progress" | "question" | "review" | "done"
assignee"owner" | "staff" | "claude" | "external"
claimable"true" | "false"
maxAttemptsEntero≥ 1 | ≤ 20 | Predeterminado: 3
limitEntero≥ 1 | ≤ 100 | Predeterminado: 20
qTextoal menos 1 caracteres

Respuesta

CampoTipoNota
tasksLista de Objeto

POST/v1/tasks

Crear una tarea; las tareas abiertas muy parecidas se reconocen como duplicados.

Acceso propietario, miembros del equipo o claves de agente con scope tasks:write

Cuerpo (JSON)

CampoTipoNota
projectIdUUID
projectSlugTexto
title *Textoal menos 25 caracteres
descriptionMdTextoal menos 1 caracteres
area"frontend" | "backend" | "design" | "infra" | "support"
dueDateFecha (AAAA-MM-DD)
estimateMinutesEntero> 0
triggerConditionTextoal menos 1 caracteres
evidenceTextoal menos 1 caracteres

GET/v1/tasks/:id

Una tarea con descripción, avisos y adjuntos.

Acceso propietario, miembros del equipo o claves de agente con scope tasks:read

Respuesta

CampoTipoNota
taskObjeto
resultsLista de Objeto
attachmentsLista de Objeto

PATCH/v1/tasks/:id

Cambiar campos de una tarea.

Acceso propietario, miembros del equipo o claves de agente con scope tasks:write

Cuerpo (JSON)

CampoTipoNota
titleTextoal menos 1 caracteres
descriptionMdTexto o null
status"hold" | "todo" | "in_progress" | "question" | "review" | "done"
assignee"owner" | "staff" | "claude" | "external" o null
area"frontend" | "backend" | "design" | "infra" | "support" o null
dueDateFecha (AAAA-MM-DD) o null
estimateMinutesEntero o null> 0
positionTextoal menos 1 caracteres
triggerConditionTexto o null

POST/v1/tasks/:id/claim

Reclamar una tarea de forma atómica: dos ejecuciones nunca reciben la misma.

Acceso propietario, miembros del equipo o claves de agente con scope tasks:write

Cuerpo (JSON)

CampoTipoNota
maxAttemptsEntero≥ 1 | ≤ 20 | Predeterminado: 3
runIdUUID

POST/v1/tasks/:id/decision

Aprobación o rechazo de un aviso por una persona; un rechazo exige un comentario.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
decision *"approved" | "rejected"
commentMdTextoal menos 1 caracteres | como máximo 20000 caracteres
attachmentIdsLista de UUIDPredeterminado: []

Respuesta

CampoTipoNota
taskObjeto
resultObjeto

POST/v1/tasks/:id/handoff

Pasar una tarea a Claude.

Acceso propietario, miembros del equipo o claves de agente con scope tasks:write

POST/v1/tasks/:id/result

Informar del estado de una tarea (arbeitet, kontrolle, frage, master, blockiert, erledigt).

Acceso propietario, miembros del equipo o claves de agente con scope tasks:write

Cuerpo (JSON)

CampoTipoNota
state *"arbeitet" | "kontrolle" | "frage" | "master" | "blockiert" | "erledigt"
summaryMdTextoal menos 1 caracteres
detailsMdTextoal menos 1 caracteres
prUrlURL
evidenceTextoal menos 1 caracteres
runIdUUID

Ejecuciones de agentes

POST/v1/agent/runs

Iniciar una ejecución de un agente.

Acceso solo claves de agente, con scope agent:run

Cuerpo (JSON)

CampoTipoNota
projectIdUUID
projectSlugTexto
metaObjeto (libre)Predeterminado: {}

Respuesta

CampoTipoNota
runObjeto

POST/v1/agent/runs/:id/finish

Terminar una ejecución de agente, con un resumen o un estado de error.

Acceso solo claves de agente

Cuerpo (JSON)

CampoTipoNota
status *"succeeded" | "failed"
summaryTextoal menos 1 caracteres

Respuesta

CampoTipoNota
runObjeto

POST/v1/agent/runs/:id/heartbeat

Señal de vida de una ejecución de agente en curso.

Acceso solo claves de agente

Respuesta

CampoTipoNota
runObjeto

Proyectos

POST/v1/errors/:id/resolve

Marcar como resuelto un error abierto: primero en el servicio de seguimiento de errores (Sentry, Bugsnag, Rollbar) con el acceso de la fuente de errores, y solo si sale bien, en VentionDesk. Si el proveedor falla (acceso de solo lectura, error desconocido, sin respuesta), el error sigue abierto: 409 o 502 con el motivo. Para el propietario, los miembros del equipo y los agentes con errors:write. Ocultar y eliminar no están disponibles aquí.

Acceso propietario, miembros del equipo o claves de agente con scope errors:write

Respuesta

CampoTipoNota
issueObjeto
changedtrue | false

POST/v1/errors/:id/task

Crear una tarea a partir de un error.

Acceso propietario y miembros del equipo

GET/v1/errors/summary

Recuento de errores de todos los proyectos para el resumen.

Acceso propietario y miembros del equipo

Respuesta

CampoTipoNota
projectsLista de Objeto

POST/v1/monitors/probe

Comprobar la URL de un monitor antes de crearlo e indicar las redirecciones, incluido el destino final.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
url *URLcomo máximo 2048 caracteres

GET/v1/projects

Proyectos que la cuenta o la clave puede ver.

Acceso propietario, miembros del equipo o claves de agente con scope projects:read

Parámetros de consulta

CampoTipoNota
status"active" | "blocked" | "review" | "paused"
includeArchived"true" | "false"
qTextoal menos 1 caracteres

Respuesta

CampoTipoNota
projectsLista de Objeto

GET/v1/projects/:id

Un proyecto por su ID.

Acceso propietario, miembros del equipo o claves de agente con scope projects:read

PATCH/v1/projects/:id/customer

Asignar un proyecto a otro cliente; tickets, borradores y documentos lo acompañan.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
customerId *UUID

Respuesta

CampoTipoNota
projectObjeto
changedtrue | false
movedObjeto

GET/v1/projects/:id/deploy

Qué destinos de despliegue existen y qué le falta a cada uno.

Acceso propietario

Respuesta

CampoTipoNota
targetsLista de Objeto

POST/v1/projects/:id/deploy

Lanzar un despliegue (202: lanzado, no completado).

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
target *"production" | "staging" | "preview"
provider"vercel" | "render"

Respuesta

CampoTipoNota
provider"vercel" | "render"
target"production" | "staging" | "preview"
externalIdTexto o null
startedEntero> 0

POST/v1/projects/:id/error-sources

Asignar a este proyecto un proyecto del servicio de seguimiento de errores.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
provider *"sentry" | "bugsnag" | "rollbar"
externalId *Textoal menos 1 caracteres | como máximo 200 caracteres

DELETE/v1/projects/:id/error-sources/:sourceId

Desvincular una fuente de errores del proyecto.

Acceso propietario y miembros del equipo

GET/v1/projects/:id/errors

Errores de Sentry, Bugsnag o Rollbar de este proyecto. Un agente con errors:read recibe los errores de sus proyectos, sin fuentes ni conexiones.

Acceso propietario, miembros del equipo o claves de agente con scope errors:read

Respuesta

CampoTipoNota
issuesLista de Objeto
statsObjeto
sourcesLista de Objeto
providersLista de "sentry" | "bugsnag" | "rollbar"

GET/v1/projects/:id/hosting

Las asignaciones de hosting del proyecto.

Acceso propietario y miembros del equipo

Respuesta

CampoTipoNota
mappingsLista de Objeto
providersLista de "netlify" | "cloudflare_pages" | "aws_amplify" | "railway" | "flyio" | "digitalocean_app_platform"

POST/v1/projects/:id/hosting

Asignar un sitio, app o servicio del proveedor de hosting.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
provider *"netlify" | "cloudflare_pages" | "aws_amplify" | "railway" | "flyio" | "digitalocean_app_platform"
externalId *Textoal menos 1 caracteres | como máximo 200 caracteres

DELETE/v1/projects/:id/hosting/:mappingId

Quitar una asignación de hosting.

Acceso propietario y miembros del equipo

DELETE/v1/projects/:id/render-services/:serviceId

Desvincular del proyecto un ID de servicio de Render obsoleto.

Acceso propietario

GET/v1/projects/:id/report

El estado del proyecto para un informe: progreso, tareas por estado, tickets abiertos y vencidos, hoja de ruta, monitores, despliegues y pull requests abiertos. Nada de dinero: ni ingresos, ni presupuesto, ni costes.

Acceso propietario, miembros del equipo o claves de agente con scope stats:read

GET/v1/projects/:id/roadmap

Las fases de la hoja de ruta de un proyecto en el orden planificado.

Acceso propietario, miembros del equipo o claves de agente con scope roadmap:write

Respuesta

CampoTipoNota
phasesLista de Objeto

POST/v1/projects/:id/roadmap

Crear una fase de la hoja de ruta. Sin sort va al final; la siguiente fase abierta es el hito en el cockpit.

Acceso propietario, miembros del equipo o claves de agente con scope roadmap:write

Cuerpo (JSON)

CampoTipoNota
title *Textoal menos 1 caracteres | como máximo 200 caracteres
startsOn *Textopatrón fijo
endsOn *Textopatrón fijo
sortEntero≥ 0

PATCH/v1/projects/:id/roadmap/:phaseId

Cambiar una fase (título, periodo, hecha u orden), solo los campos enviados. La API no elimina.

Acceso propietario, miembros del equipo o claves de agente con scope roadmap:write

Cuerpo (JSON)

CampoTipoNota
titleTextoal menos 1 caracteres | como máximo 200 caracteres
startsOnTextopatrón fijo
endsOnTextopatrón fijo
donetrue | false
sortEntero≥ 0

POST/v1/projects/:id/sync

Sincronizar ya los datos de GitHub del proyecto en lugar de por la noche.

Acceso propietario y miembros del equipo

GET/v1/projects/:id/time

Las entradas de tiempo de un proyecto: día, duración, descripción, tarea, facturable y facturado sí/no, nombre de la persona; sin tarifa por hora, importe ni ID de factura.

Acceso propietario, miembros del equipo o claves de agente con scope time:read

Parámetros de consulta

CampoTipoNota
fromTextopatrón fijo
toTextopatrón fijo
limitEntero≥ 1 | ≤ 500 | Predeterminado: 200

Respuesta

CampoTipoNota
entriesLista de Objeto
totalSecondsEntero≥ 0

GET/v1/projects/by-slug/:slug

Un proyecto por su slug.

Acceso propietario, miembros del equipo o claves de agente con scope projects:read

Tickets

GET/v1/tickets

Leer tickets, filtrados por estado, canal, prioridad, proyecto o cliente.

Acceso propietario, miembros del equipo o claves de agente con scope tickets:read

Parámetros de consulta

CampoTipoNota
status"open" | "in_progress" | "waiting" | "resolved"
source"contact_form" | "app" | "email" | "monitor" | "portal" | "phone" | "on_site" | "stripe" | "api"
priority"low" | "normal" | "high" | "critical"
projectUUID
projectSlugTexto
customerUUID
withSla"true" | "false"
qTextoal menos 1 caracteres
limitEntero≥ 1 | ≤ 100 | Predeterminado: 50

Respuesta

CampoTipoNota
ticketsLista de Objeto

POST/v1/tickets

Crear un ticket, por ejemplo tras una llamada telefónica.

Acceso propietario, miembros del equipo o claves de agente con scope tickets:write

Cuerpo (JSON)

CampoTipoNota
subject *Textoal menos 3 caracteres
bodyMd *Textoal menos 1 caracteres
source *"contact_form" | "app" | "email" | "monitor" | "portal" | "phone" | "on_site" | "stripe" | "api"
customerIdUUID o null
projectIdUUID o null
priority"low" | "normal" | "high" | "critical"Predeterminado: "normal"
requesterNameTexto
requesterEmailCorreo electrónico
requesterMetaObjeto (libre)

DELETE/v1/tickets/:id

Eliminar un ticket.

Acceso propietario y miembros del equipo

GET/v1/tickets/:id

Un ticket con su historial.

Acceso propietario, miembros del equipo o claves de agente con scope tickets:read

Respuesta

CampoTipoNota
ticketObjeto
messagesLista de Objeto

PATCH/v1/tickets/:id

Cambiar asunto, estado, prioridad, canal, cliente, proyecto, responsable o visibilidad en el portal de un ticket.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
subjectTextoal menos 3 caracteres
status"open" | "in_progress" | "waiting" | "resolved"
priority"low" | "normal" | "high" | "critical"
source"contact_form" | "app" | "email" | "monitor" | "portal" | "phone" | "on_site" | "stripe" | "api"
customerIdUUID o null
projectIdUUID o null
assignedToUUID o null
portalVisibletrue | false

POST/v1/tickets/:id/messages

Escribir una entrada en el historial: nota interna o borrador. No sale ningún correo.

Acceso propietario, miembros del equipo o claves de agente con scope tickets:write

Cuerpo (JSON)

CampoTipoNota
bodyMd *Textoal menos 1 caracteres
isInternalNotetrue | falsePredeterminado: false
isDrafttrue | falsePredeterminado: false

POST/v1/tickets/:id/reply

Responder al cliente: la única vía por la que sale un correo. Pone el ticket en «En espera». La respuesta de un agente lleva siempre el aviso de que la ha escrito un asistente de IA y está limitada a 20 por hora y clave y a 3 por ticket y día (por encima, 429).

Acceso propietario, miembros del equipo o claves de agente con scope tickets:reply

Cuerpo (JSON)

CampoTipoNota
bodyMd *Textoal menos 1 caracteres
isInternalNotetrue | falsePredeterminado: false
isDrafttrue | falsePredeterminado: false
draftIdUUID

POST/v1/tickets/:id/to-task

Crear una tarea a partir de un ticket: el asunto como título, todo el historial como descripción.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
projectId *UUID
titleTextoal menos 10 caracteres
assignee"owner" | "staff" | "claude" | "external" o null

GET/v1/tickets/attachments/:id/url

URL de corta duración para un adjunto de un ticket; un agente solo la recibe para tickets de sus proyectos.

Acceso propietario, miembros del equipo o claves de agente con scope tickets:read

Respuesta

CampoTipoNota
urlURL
expiresInSecondsEntero> 0

Notas

POST/v1/notes

Crear una nota en un proyecto (ID o slug del proyecto).

Acceso propietario, miembros del equipo o claves de agente con scope notes:write

Cuerpo (JSON)

CampoTipoNota
projectIdUUID
projectSlugTexto
bodyMd *Textoal menos 1 caracteres
kind"idea" | "decision" | "risk"Predeterminado: "idea"

Respuesta

CampoTipoNota
noteObjeto

POST/v1/notes/:id/to-task

Crear una tarea a partir de una nota.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
titleTextoal menos 25 caracteres
assignee"owner" | "staff" | "claude" | "external" o null

Respuesta

CampoTipoNota
okfalse
errorTexto
code"note_already_converted"
taskObjeto

Ideas

POST/v1/ideas

Crear una idea, siempre «Abierta». Un agente solo crea: no lee, cambia ni elimina ninguna idea; sin proyecto, solo con una clave para todos los proyectos.

Acceso propietario o claves de agente con scope ideas:write

Cuerpo (JSON)

CampoTipoNota
title *Textoal menos 1 caracteres | como máximo 200 caracteres
bodyMdTextocomo máximo 20000 caracteres
tagsLista de TextoPredeterminado: []
potential"low" | "medium" | "high"
priority"low" | "high"
projectIdUUID o null

Respuesta

CampoTipoNota
ideaObjeto

Tiempo

GET/v1/time/entries

Leer entradas de tiempo.

Acceso propietario y miembros del equipo

Parámetros de consulta

CampoTipoNota
fromTexto
toTexto
projectUUID
userUUID
unbilled"true" | "false"
limitEntero≥ 1 | ≤ 500 | Predeterminado: 200

Respuesta

CampoTipoNota
entriesLista de Objeto

POST/v1/time/entries

Añadir tiempo a posteriori.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
label *Textoal menos 1 caracteres
startedAt *Marca de tiempo (ISO 8601)
endedAt *Marca de tiempo (ISO 8601)
secondsEntero> 0
projectIdUUID o null
ticketIdUUID o null
taskIdUUID o null
billabletrue | falsePredeterminado: true

DELETE/v1/time/entries/:id

Eliminar una entrada de tiempo.

Acceso propietario y miembros del equipo

PATCH/v1/time/entries/:id

Cambiar una entrada de tiempo.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
labelTextoal menos 1 caracteres
secondsEntero> 0
billabletrue | false
projectIdUUID o null
ticketIdUUID o null

GET/v1/time/timer

El temporizador en marcha de la cuenta.

Acceso propietario y miembros del equipo

Respuesta

CampoTipoNota
timerObjeto o null

POST/v1/time/timer/start

Iniciar el temporizador.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
labelTextoPredeterminado: ""
projectIdUUID o null
ticketIdUUID o null
taskIdUUID o null

POST/v1/time/timer/stop

Parar el temporizador y registrar el tiempo como entrada.

Acceso propietario y miembros del equipo

GET/v1/time/unbilled

Horas facturables aún sin facturar, por proyecto, con el importe.

Acceso propietario

Respuesta

CampoTipoNota
projectsLista de Objeto
totalsObjeto

Clientes

DELETE/v1/customers/:id

Eliminar un cliente, incluidos los archivos.

Acceso propietario

Respuesta

CampoTipoNota
customerIdUUID
shortNameTexto
impactObjeto
filesObjeto
portalAccountsObjeto

GET/v1/customers/:id/deletion

Vista previa de lo que se quitaría junto con un cliente.

Acceso propietario

Respuesta

CampoTipoNota
customerIdUUID
shortNameTexto
deletabletrue | false
reasonTexto o null
blockersObjeto
impactObjeto

POST/v1/customers/:id/portal-access

Dar acceso al portal de clientes a una persona de contacto.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
email *Correo electrónico
displayNameTextoal menos 1 caracteres

Respuesta

CampoTipoNota
accessObjeto
mailObjeto

DELETE/v1/customers/:id/portal-access/:userId

Retirar el acceso al portal de una cuenta. Un token ya emitido sigue siendo válido hasta que se renueve.

Acceso propietario

Respuesta

CampoTipoNota
revokedObjeto

POST/v1/customers/:id/portal-access/:userId/invite

Volver a enviar la invitación al portal de clientes.

Acceso propietario

Respuesta

CampoTipoNota
mailObjeto

Documentos

GET/v1/documents

Leer documentos, filtrados por cliente, proyecto o tipo.

Acceso cualquier cuenta con sesión iniciada; su rol decide lo que ve

Parámetros de consulta

CampoTipoNota
customerUUID
projectUUID
type"pdf" | "image" | "sheet" | "contract" | "other"
qTextoal menos 1 caracteres | como máximo 120 caracteres
limitEntero≥ 1 | ≤ 200 | Predeterminado: 50

Respuesta

CampoTipoNota
documentsLista de Objeto

PATCH/v1/documents/:id

Cambiar asignación, tipo, etiquetas o visibilidad en el portal de un documento.

Acceso cualquier cuenta con sesión iniciada; su rol decide lo que ve

Cuerpo (JSON)

CampoTipoNota
nameTextoal menos 1 caracteres | como máximo 200 caracteres
type"pdf" | "image" | "sheet" | "contract" | "other"
projectIdUUID o null
sharedWithPortaltrue | false
tagsLista de Texto

GET/v1/documents/:id/url

URL de corta duración para descargar un documento.

Acceso cualquier cuenta con sesión iniciada; su rol decide lo que ve

Respuesta

CampoTipoNota
urlURL
expiresInSecondsEntero> 0

Finanzas

GET/v1/finance/export

Exportación anual para el asesor fiscal: ZIP con un CSV por tabla y los justificantes guardados.

Acceso propietario

GET/v1/invoices

Leer facturas, filtradas por estado, cliente o «vencidas». Un agente solo ve borradores de sus proyectos.

Acceso propietario o claves de agente con scope invoices:write

Parámetros de consulta

CampoTipoNota
status"draft" | "open" | "overdue" | "paid" | "cancelled"
customerUUID
overdue"true" | "false"
limitEntero≥ 1 | ≤ 200 | Predeterminado: 50

Respuesta

CampoTipoNota
invoicesLista de Objeto

POST/v1/invoices

Crear un borrador de factura, todavía sin número de factura. Sin customerId se aplica el cliente del proyecto; un agente solo crea borradores en uno de sus proyectos. Finalizar, enviar y registrar pagos sigue siendo cosa del propietario.

Acceso propietario o claves de agente con scope invoices:write

Cuerpo (JSON)

CampoTipoNota
customerIdUUID
projectIdUUID o null
paymentTermsDaysEntero≥ 1 | ≤ 90
vatRateEntero
vatScheme"standard" | "reverse_charge"
serviceFromTextopatrón fijo
serviceToTextopatrón fijo
serviceDateEqualsInvoiceDatetrue | falsePredeterminado: false
positionsLista de ObjetoPredeterminado: []

GET/v1/invoices/:id

Una factura con partidas, totales y pagos.

Acceso propietario o claves de agente con scope invoices:write

Respuesta

CampoTipoNota
invoiceObjeto
positionsLista de Objeto

POST/v1/invoices/:id/cancel

Anular una factura finalizada; se crea un documento de anulación.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
reason *Textoal menos 3 caracteres | como máximo 500 caracteres
serviceRendered *true | false

Respuesta

CampoTipoNota
invoiceObjeto
releasedEntriesEntero≥ 0
entries"released" | "failed"
correction"stored" | "skipped" | "failed"
taxOfficeConsenttrue | false

GET/v1/invoices/:id/cancellation/pdf

El documento de anulación en PDF.

Acceso propietario

POST/v1/invoices/:id/cancellation/send

Enviar el documento de anulación por correo.

Acceso propietario

Respuesta

CampoTipoNota
mail"sent" | "skipped"
reasonTextopuede faltar
invoiceObjeto

POST/v1/invoices/:id/dunning/send

Enviar el nivel de aviso que toca.

Acceso propietario

Respuesta

CampoTipoNota
mail"sent" | "skipped"
reasonTextopuede faltar
invoiceObjeto
levelEntero o null≥ 1 | ≤ 4

POST/v1/invoices/:id/finalize

Finalizar un borrador: asigna el número correlativo, bloquea la factura y guarda el PDF.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
settleObjeto

Respuesta

CampoTipoNota
invoiceObjeto
pdf"stored" | "skipped" | "failed"
payment"none" | "booked" | "failed"
paymentErrorTextopuede faltar

POST/v1/invoices/:id/payments

Registrar un pago o una devolución.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
amountCents *Entero
paidOnTextopatrón fijo
method"transfer" | "stripe" | "cash" | "other"Predeterminado: "transfer"
noteTextocomo máximo 500 caracteres

GET/v1/invoices/:id/pdf

La factura en PDF: el documento guardado al finalizarla.

Acceso propietario

POST/v1/invoices/:id/positions

Añadir una partida a un borrador.

Acceso propietario o claves de agente con scope invoices:write

Cuerpo (JSON)

CampoTipoNota
description *Textoal menos 1 caracteres
quantity *Número> 0
unit"hour" | "flat"Predeterminado: "hour"
unitPriceCents *Entero≥ 0
sortEntero

DELETE/v1/invoices/:id/positions/:positionId

Quitar una partida de un borrador.

Acceso propietario o claves de agente con scope invoices:write

PATCH/v1/invoices/:id/positions/:positionId

Cambiar una partida de un borrador, solo los campos enviados. Una factura finalizada responde con 409.

Acceso propietario o claves de agente con scope invoices:write

Cuerpo (JSON)

CampoTipoNota
descriptionTextoal menos 1 caracteres
quantityNúmero> 0
unit"hour" | "flat"Predeterminado: "hour"
unitPriceCentsEntero≥ 0
sortEntero

POST/v1/invoices/:id/remind

Enviar un recordatorio de pago.

Acceso propietario

Respuesta

CampoTipoNota
mail"sent" | "skipped"
reasonTextopuede faltar
invoiceObjeto

POST/v1/invoices/:id/send

Enviar una factura finalizada por correo.

Acceso propietario

Respuesta

CampoTipoNota
mail"sent" | "skipped"
reasonTextopuede faltar
invoiceObjeto

GET/v1/invoices/:id/stripe-refund

Si se puede reembolsar un pago de Stripe y cuánto.

Acceso propietario

POST/v1/invoices/:id/stripe-refund

Reembolsar mediante Stripe una factura pagada con Stripe; se registra a través del webhook.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
amountCentsEntero> 0

POST/v1/invoices/from-unbilled

Convertir las horas facturables pendientes de un proyecto en un borrador de factura: una partida por entrada de tiempo.

Acceso propietario o claves de agente con scope invoices:write

Cuerpo (JSON)

CampoTipoNota
projectId *UUID
untilDateTexto
paymentTermsDaysEntero≥ 1 | ≤ 90
vatRateEntero
vatScheme"standard" | "reverse_charge"

Respuesta

CampoTipoNota
invoiceObjeto
entriesEntero≥ 0
hoursNúmero≥ 0

GET/v1/quotes

Leer presupuestos. Un agente solo ve borradores de sus proyectos.

Acceso propietario o claves de agente con scope quotes:write

Respuesta

CampoTipoNota
quotesLista de Objeto

POST/v1/quotes

Crear un borrador de presupuesto, todavía sin número. Sin customerId se aplica el cliente del proyecto; un agente solo crea borradores en uno de sus proyectos y nunca para un interesado.

Acceso propietario o claves de agente con scope quotes:write

Cuerpo (JSON)

CampoTipoNota
title *Textoal menos 3 caracteres
customerIdUUID o null
prospectNameTexto
prospectEmailCorreo electrónico
projectIdUUID o null
validUntilTexto
vatRateEntero
vatScheme"standard" | "reverse_charge"
positionsLista de ObjetoPredeterminado: []

DELETE/v1/quotes/:id

Eliminar un borrador de presupuesto: todavía no tiene número.

Acceso propietario o claves de agente con scope quotes:write

GET/v1/quotes/:id

Un presupuesto con sus partidas.

Acceso propietario o claves de agente con scope quotes:write

Respuesta

CampoTipoNota
quoteObjeto
positionsLista de Objeto

PATCH/v1/quotes/:id

Cambiar el título y la validez de un borrador. Un presupuesto enviado responde con 409.

Acceso propietario o claves de agente con scope quotes:write

Cuerpo (JSON)

CampoTipoNota
titleTextoal menos 3 caracteres
validUntilTexto o nullpatrón fijo

GET/v1/quotes/:id/pdf

Un presupuesto en PDF.

Acceso propietario

POST/v1/quotes/:id/positions

Añadir una partida a un borrador de presupuesto.

Acceso propietario o claves de agente con scope quotes:write

Cuerpo (JSON)

CampoTipoNota
description *Textoal menos 1 caracteres
quantity *Número> 0
unit"hour" | "flat"Predeterminado: "hour"
unitPriceCents *Entero≥ 0
sortEntero

DELETE/v1/quotes/:id/positions/:positionId

Quitar una partida de un borrador de presupuesto.

Acceso propietario o claves de agente con scope quotes:write

PATCH/v1/quotes/:id/positions/:positionId

Cambiar una partida de un borrador de presupuesto, solo los campos enviados.

Acceso propietario o claves de agente con scope quotes:write

Cuerpo (JSON)

CampoTipoNota
descriptionTextoal menos 1 caracteres
quantityNúmero> 0
unit"hour" | "flat"Predeterminado: "hour"
unitPriceCentsEntero≥ 0
sortEntero

POST/v1/quotes/:id/send

Enviar un presupuesto por correo.

Acceso propietario

Respuesta

CampoTipoNota
mail"sent" | "skipped"
reasonTextopuede faltar
quoteObjeto

Conexiones

GET/v1/integrations

Las fuentes conectadas del espacio de trabajo, sin secretos.

Acceso propietario y miembros del equipo

Respuesta

CampoTipoNota
integrationsLista de Objeto
plattformtrue | false
githubInstallierbartrue | false

POST/v1/integrations

Conectar una fuente. El acceso se comprueba con el proveedor antes de guardarlo.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
provider *"vercel" | "render" | "netlify" | "cloudflare_pages" | "aws_amplify" | "railway" | "flyio" | "digitalocean_app_platform" | "postmark" | "mailgun" | "amazon_ses" | "resend" | "sentry" | "bugsnag" | "rollbar" | "stripe"
fields *Objeto (libre)

DELETE/v1/integrations/:id

Quitar una conexión.

Acceso propietario

PATCH/v1/integrations/:id

Editar una conexión; un secreto vacío se mantiene sin cambios.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
fields *Objeto (libre)

GET/v1/integrations/:id/webhook

La dirección del webhook de una conexión (Stripe, Sentry, Bugsnag, Rollbar) para introducirla en el proveedor.

Acceso propietario

Respuesta

CampoTipoNota
urlURL
signierttrue | false
bereittrue | false

GET/v1/integrations/:provider/error-projects

Proyectos que el acceso ve en el servicio de seguimiento de errores.

Acceso propietario y miembros del equipo

Respuesta

CampoTipoNota
resourcesLista de Objeto

GET/v1/integrations/:provider/resources

Sitios, apps o servicios que el acceso de hosting ve en el proveedor.

Acceso propietario y miembros del equipo

Respuesta

CampoTipoNota
resourcesLista de Objeto

GET/v1/integrations/github/callback

Vuelta desde GitHub tras la instalación; vincula la instalación al espacio de trabajo.

Acceso state firmado e inicio de sesión en GitHub

Parámetros de consulta

CampoTipoNota
installation_idTextopatrón fijo
setup_actionTextocomo máximo 20 caracteres
codeTextocomo máximo 200 caracteres
stateTextocomo máximo 2000 caracteres

POST/v1/integrations/github/install-url

URL para instalar la app de VentionDesk en GitHub.

Acceso propietario

Respuesta

CampoTipoNota
urlURL

Cuenta, ajustes y administración

GET/v1/admin/api-keys

Las claves de API del espacio de trabajo, sin texto plano.

Acceso propietario

Respuesta

CampoTipoNota
keysLista de Objeto

POST/v1/admin/api-keys

Crear una clave de agente o de entrada. El texto plano solo aparece en esta respuesta.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
name *Textoal menos 3 caracteres
kind"agent" | "intake"Predeterminado: "agent"
scopes *Lista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"
projectIds *Lista de UUID o null
expiresAtMarca de tiempo (ISO 8601)

Respuesta

CampoTipoNota
keyObjeto
plaintextTexto

DELETE/v1/admin/api-keys/:id

Revocar una clave: surte efecto de inmediato.

Acceso propietario

PATCH/v1/admin/api-keys/:id

Cambiar los permisos y proyectos de una clave; la clave en sí sigue siendo la misma.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
scopes *Lista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"
projectIds *Lista de UUID o null

Respuesta

CampoTipoNota
keyObjeto

DELETE/v1/admin/api-keys/:id/endgueltig

Eliminar definitivamente una clave revocada.

Acceso propietario

GET/v1/admin/members

Los miembros del espacio de trabajo con su rol.

Acceso propietario

Respuesta

CampoTipoNota
membersLista de Objeto

PATCH/v1/admin/members/:id

Cambiar el rol de un miembro.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
role *"owner" | "staff"

Respuesta

CampoTipoNota
memberObjeto
activeHeretrue | false

DELETE/v1/admin/users/:id

Eliminar una cuenta del portal; antes se seudonimizan el nombre y la dirección en el historial.

Acceso propietario

Respuesta

CampoTipoNota
removedObjeto
account"kept" | "deleted" | "locked"

POST/v1/admin/users/invite

Invitar a un miembro del equipo por correo.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
email *Correo electrónico
role *"owner" | "staff"
displayNameTextoal menos 1 caracteres

Respuesta

CampoTipoNota
userObjeto
existingAccounttrue | falsepuede faltar | Predeterminado: false

GET/v1/ki-apps

Apps de IA conectadas: las propias en todos los espacios de trabajo y, para el propietario, todas las del espacio de trabajo.

Acceso propietario y miembros del equipo

Respuesta

CampoTipoNota
appsLista de Objeto
alleImBetriebtrue | false

POST/v1/ki-apps

Guardar el consentimiento para una app de IA (espacio de trabajo, permisos, proyectos) antes de la aprobación en el inicio de sesión. Supabase Auth identifica la app, no quien llama.

Acceso propietario y miembros del equipo

Cuerpo (JSON)

CampoTipoNota
authorizationId *Textoal menos 1 caracteres | como máximo 200 caracteres
orgId *UUID
scopes *Lista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"
projectIds *Lista de UUID o null

Respuesta

CampoTipoNota
appObjeto

DELETE/v1/ki-apps/:id

Desconectar una app de IA: surte efecto de inmediato; para las propias se retira también la aprobación del inicio de sesión.

Acceso propietario y miembros del equipo

GET/v1/ki-apps/rahmen

Lo que ofrece la página de consentimiento: los espacios de trabajo de la persona, los permisos permitidos y los proyectos.

Acceso propietario y miembros del equipo

Respuesta

CampoTipoNota
betriebeLista de Objeto
betriebUUID
rolle"owner" | "staff"
erlaubtLista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"
projekteLista de Objeto

GET/v1/ki-apps/vorgabe

Qué permisos pueden dar los miembros del equipo a una app de IA.

Acceso propietario y miembros del equipo

Respuesta

CampoTipoNota
scopesLista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"
abWerkLista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"
waehlbarLista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"

PUT/v1/ki-apps/vorgabe

Cambiar esta configuración predeterminada.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
scopes *Lista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"

Respuesta

CampoTipoNota
scopesLista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"
abWerkLista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"
waehlbarLista de "projects:read" | "tasks:read" | "tasks:write" | "tickets:read" | "tickets:write" | "tickets:reply" | "notes:write" | "deployments:read" | "agent:run" | "intake:write" | "access-log:write" | "invoices:write" | "errors:read" | "errors:write" | "time:read" | "stats:read" | "quotes:write" | "roadmap:write" | "ideas:write"

GET/v1/me

Tu propia cuenta: rol, espacio de trabajo, espacios de trabajo disponibles y direcciones de servicio.

Acceso cualquier cuenta con sesión iniciada; su rol decide lo que ve

Respuesta

CampoTipoNota
idUUID
role"owner" | "staff" | "customer" | "agent"
customerIdUUID o null
displayNameTextoal menos 1 caracteres
emailCorreo electrónico
mfaRequiredtrue | false
intakeObjeto
organizationObjeto o nullpuede faltar | Predeterminado: null
membershipsLista de Objetopuede faltar | Predeterminado: []
supportObjeto o nullpuede faltar
locale"de" | "en" | "zh" | "es" | "hi" | "tr" o nullpuede faltar

PATCH/v1/me/locale

Guardar en la cuenta tu propio idioma de la interfaz.

Acceso cualquier cuenta con sesión iniciada; su rol decide lo que ve

Cuerpo (JSON)

CampoTipoNota
locale *"de" | "en" | "zh" | "es" | "hi" | "tr"

POST/v1/me/organization

Cambiar el espacio de trabajo activo si la cuenta pertenece a varios.

Acceso cualquier cuenta con sesión iniciada; su rol decide lo que ve

Cuerpo (JSON)

CampoTipoNota
orgId *UUID

Respuesta

CampoTipoNota
organizationObjeto
role"owner" | "staff"

GET/v1/settings

Ajustes del espacio de trabajo, incluido el membrete para los documentos.

Acceso propietario

Respuesta

CampoTipoNota
companyObjeto

PATCH/v1/settings

Cambiar ajustes y membrete.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
company *Objeto

Respuesta

CampoTipoNota
companyObjeto

GET/v1/settings/agreements

Estado del consentimiento a las condiciones y al contrato de encargo del tratamiento.

Acceso propietario

POST/v1/settings/agreements

Aceptar o rechazar una nueva versión de las condiciones o del contrato de encargo del tratamiento.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
document *"agb" | "avv"
version *Textoal menos 1 caracteres | como máximo 40 caracteres
decision *"accepted" | "declined"

GET/v1/settings/benachrichtigungen

Correo con cada ticket nuevo: activado o no, destinatarios, canales y prioridad mínima.

Acceso propietario

PATCH/v1/settings/benachrichtigungen

Configurar el correo con cada ticket nuevo (solo el propietario).

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
aktiv *true | false
wiederoeffnentrue | false
empfaenger *Lista de Correo electrónico o null
kanaele *Lista de "contact_form" | "app" | "email" | "monitor" | "portal" | "phone" | "on_site" | "stripe" | "api" o null
mindestPrioritaet *"low" | "normal" | "high" | "critical"

GET/v1/settings/mail

Remitente de los correos a clientes y estado del dominio de remitente propio.

Acceso propietario

PATCH/v1/settings/mail

Cambiar el nombre y la dirección del remitente.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
absenderNameTexto o nullcomo máximo 60 caracteres
postfachnameTextocomo máximo 40 caracteres

GET/v1/settings/mail-templates

Las plantillas de correo del espacio de trabajo, incluidos los textos predeterminados.

Acceso propietario

Respuesta

CampoTipoNota
vorlagenLista de Objeto

DELETE/v1/settings/mail-templates/:kind

Restablecer una plantilla de correo al texto predeterminado.

Acceso propietario

PUT/v1/settings/mail-templates/:kind

Guardar una plantilla de correo.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
subject *Textoal menos 1 caracteres | como máximo 200 caracteres
html *Textoal menos 1 caracteres | como máximo 102400 caracteres

Respuesta

CampoTipoNota
kind"invoice_send" | "invoice_reminder" | "dunning" | "invoice_cancellation" | "quote_send" | "ticket_reply" | "ticket_receipt" | "ticket_internal" | "ticket_reopened" | "member_invite" | "portal_invite" | "deletion_reminder"
angepassttrue | false
subjectTexto o null
htmlTexto o null
aktualisiertAmTexto o null
bereinigttrue | false

DELETE/v1/settings/mail/domain

Quitar el dominio de remitente propio.

Acceso propietario

POST/v1/settings/mail/domain

Crear un dominio de remitente propio; la respuesta enumera los registros DNS.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
adresse *Textoal menos 3 caracteres | como máximo 254 caracteres

POST/v1/settings/mail/domain/verify

Hacer comprobar los registros DNS del dominio de remitente.

Acceso propietario

Suscripción a VentionDesk

GET/v1/abo

Estado de la suscripción a VentionDesk del espacio de trabajo: plan, prueba, suspensión.

Acceso propietario y miembros del equipo

Respuesta

CampoTipoNota
betriebTexto
tarif"solo" | "team" | "enterprise"
abrechnung"jaehrlich" | "monatlich"
status"trial" | "active" | "past_due" | "canceled"
testphaseBisTexto o null
laufzeitBisTexto o null
kuendigtZumTexto o nullpuede faltar | Predeterminado: null
loeschungAmTexto o nullpuede faltar | Predeterminado: null
gesperrttrue | falsepuede faltar | Predeterminado: false
sperrGrund"beendet" | "testphase" | "zahlungsverzug" | "anbieter" o nullpuede faltar | Predeterminado: null
sperreAbTexto o nullpuede faltar | Predeterminado: null
plaetzeEntero o null
mitgliederEntero
stripeKundetrue | false
stripeAbotrue | falsepuede faltar | Predeterminado: false
befreittrue | false
stripeBereittrue | false

POST/v1/abo/cancel

Cancelar la suscripción a VentionDesk al final del periodo.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
nonce *Textopatrón fijo
grund"too_expensive" | "missing_features" | "switched_service" | "unused" | "too_complex" | "low_quality" | "customer_service" | "other"
kommentarTextocomo máximo 500 caracteres

Respuesta

CampoTipoNota
angenommentrue
ausstehendtrue | falsepuede faltar
hinweisTextopuede faltar

POST/v1/abo/change

Cambiar el plan o la periodicidad de pago de la suscripción a VentionDesk.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
tarif *"solo" | "team" | "enterprise"
abrechnung *"jaehrlich" | "monatlich"
plaetze *Entero≥ 1 | ≤ 10000
nonce *Textopatrón fijo

POST/v1/abo/checkout

Contratar una suscripción a VentionDesk (redirige a Stripe Checkout).

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
tarif *"solo" | "team" | "enterprise"
abrechnung *"jaehrlich" | "monatlich"

Respuesta

CampoTipoNota
urlURL

GET/v1/abo/export

Exportación de datos de todo el espacio de trabajo en ZIP (estructura: ver Exportación de datos).

Acceso propietario

POST/v1/abo/preview

Vista previa de un cambio de plan con el importe proporcional.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
tarif *"solo" | "team" | "enterprise"
abrechnung *"jaehrlich" | "monatlich"
plaetze *Entero≥ 1 | ≤ 10000

Respuesta

CampoTipoNota
waehrungTexto
anteiligCentEntero
rechnungCentEntero
steuerCentEntero
sofortCentEntero
faelligAmTexto o null
imTesttrue | false

GET/v1/abo/rechnungen

Las facturas de VentionDesk al espacio de trabajo.

Acceso propietario

Respuesta

CampoTipoNota
rechnungenLista de Objeto

POST/v1/abo/resume

Retirar una cancelación mientras el periodo sigue en curso.

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
nonce *Textopatrón fijo

Respuesta

CampoTipoNota
angenommentrue
ausstehendtrue | falsepuede faltar
hinweisTextopuede faltar

GET/v1/abo/verlauf

Historial de la suscripción: alta, cambios, cancelación.

Acceso propietario

Respuesta

CampoTipoNota
eintraegeLista de Objeto

POST/v1/abo/zahlungsdaten

Cambiar los datos de pago en Stripe (redirige a Stripe).

Acceso propietario

Cuerpo (JSON)

CampoTipoNota
nonce *Textopatrón fijo

Respuesta

CampoTipoNota
urlURL

GET/v1/abo/zahlungsmittel

El método de pago guardado para la suscripción.

Acceso propietario

Respuesta

CampoTipoNota
zahlungsmittelObjeto o null

Entrada pública

POST/f/:publicKey

Formulario HTML en un sitio de terceros: crea un ticket (application/x-www-form-urlencoded).

Acceso clave pública del proyecto (vd_pub_…) en la URL

Respuesta

CampoTipoNota
oktrue
ticketObjeto

POST/v1/contact

Formulario de contacto del sitio web de VentionDesk (/kontakt, enlazado desde el aviso legal).

Acceso público

Respuesta

CampoTipoNota
oktrue

POST/v1/intake/reports

Aviso desde el navegador de una app del cliente, opcionalmente con captura de pantalla, con la clave pública del proyecto.

Acceso clave pública del proyecto en la cabecera x-ventiondesk-key, origen permitido

Respuesta

CampoTipoNota
oktrue
ticketObjeto

POST/v1/intake/tickets

Enviar un ticket de servidor a servidor, opcionalmente con captura de pantalla, con una clave de entrada.

Acceso clave de entrada (vd_intake_…) como Bearer

Respuesta

CampoTipoNota
oktrue
ticketObjeto

POST/v1/signup

Registro de un nuevo espacio de trabajo, incluida la cuenta del propietario.

Acceso público

Respuesta

CampoTipoNota
oktrue
emailCorreo electrónico
testphaseBisTexto
checkoutUrlURL o nullpuede faltar | Predeterminado: null

MCP

GET/.well-known/oauth-protected-resource

Metadatos del recurso protegido (RFC 9728): dirección MCP y servidor de autorización (Supabase Auth) para el inicio de sesión de una app de IA.

Acceso público

GET/.well-known/oauth-protected-resource/mcp

Los mismos metadatos bajo la ruta del recurso, para clientes que la añaden.

Acceso público

ALL/mcp

Cualquier método distinto de POST responde con 405 y Allow: POST.

Acceso público

POST/mcp

Servidor MCP sobre HTTP (sin estado): las herramientas para Claude, con una clave de agente o el token de una app de IA conectada. Sin un inicio de sesión válido, 401 con WWW-Authenticate y el camino a los metadatos.

Acceso clave de agente (vd_live_…) o token de una app de IA conectada como Bearer

Webhooks

POST/webhooks/errors/:provider/:integrationId

Webhook de un servicio de seguimiento de errores con firma en la cabecera (Sentry).

Acceso firma del proveedor

POST/webhooks/errors/:provider/:integrationId/:token

Webhook de un servicio de seguimiento de errores con el secreto en la URL (Bugsnag, Rollbar).

Acceso secreto en la URL

POST/webhooks/stripe/:orgId

Webhook de Stripe de la cuenta de Stripe propia de un espacio de trabajo: registra pagos y reembolsos de facturas.

Acceso firma Stripe-Signature

Operaciones y enlace de pago

GET/api/health

Señal de vida del servicio: responde mientras el proceso esté en marcha.

Acceso público

GET/api/health/ready

Disponibilidad: indica qué servicios están configurados; «degraded» sin base de datos.

Acceso público

GET/pay/:token

Enlace de pago de una factura: redirige (303) a la página de pago de Stripe. El enlace está en el correo de la factura y en el PDF.

Acceso token en la URL

GET/pay/:token/abgebrochen

Página de retorno cuando el pago se canceló en Stripe.

Acceso token en la URL

GET/pay/:token/danke

Página de retorno tras un pago correcto en Stripe.

Acceso token en la URL

Referencia de la API | Documentación de VentionDesk