Trabajos
Trabajos, pasos y tareas de la marca.
Privacidad y analítica
Utilizamos cookies técnicas necesarias y, solo si das tu consentimiento, analítica y pixels de marketing para mejorar la web y medir campañas.
Trabajos, pasos y tareas de la marca.
Trabajos de la marca con su producto, estado, progreso y tareas que esperan a la marca. query busca en el título y en el producto.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.list |
| Herramienta MCP | works_list |
| Alcance | works.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | list |
Entrada
{
status?: "active" | "finished" | "archived" | "all" // default "active"
query?: string // ≤ 120 · Words in the work title or its product name.
cursor?: string // ≤ 512 · Opaque cursor from a previous `nextCursor`.
limit?: integer // 1–50 · default 20
}Salida
{
items: Array<{
id: string // uuid
name: string // The title; people may rename it, and some follow their content (a Post takes its first words).
productName: string | null // The product the work comes from («Post», «Plan de contenidos · Esencial»); it never changes. Null for older works without one.
status: string
statusCategory: "triage" | "backlog" | "unstarted" | "started" | "paused" | "completed" | "canceled" // Where the work stands in Nömad's status registry: unstarted, started, paused, completed or canceled.
dueDate: string | null
progress: {
done: integer // -9007199254740991–9007199254740991
total: integer // -9007199254740991–9007199254740991
}
waitingOnBrand: integer // -9007199254740991–9007199254740991 · Tasks waiting for the brand.
}>
nextCursor: string | null
}Un trabajo con sus pasos y quién tiene cada uno. detailed añade entregables y respuestas.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.get |
| Herramienta MCP | works_get |
| Alcance | works.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | record |
Entrada
{
workId: string // uuid
format?: "concise" | "detailed" // default "concise" · `concise` returns names and states only; `detailed` adds ids and full fields.
}Salida
{
id: string // uuid
name: string // The title; people may rename it, and some follow their content (a Post takes its first words).
productName: string | null // The product the work comes from («Post», «Plan de contenidos · Esencial»); it never changes. Null for older works without one.
status: string
statusCategory: "triage" | "backlog" | "unstarted" | "started" | "paused" | "completed" | "canceled" // Where the work stands in Nömad's status registry: unstarted, started, paused, completed or canceled.
dueDate: string | null
progress: {
done: integer // -9007199254740991–9007199254740991
total: integer // -9007199254740991–9007199254740991
}
waitingOnBrand: integer // -9007199254740991–9007199254740991 · Tasks waiting for the brand.
steps: Array<{
id: string // uuid
title: string
status: string // The brand-facing state: waiting_on_brand, waiting_on_brand_review, in_progress, blocked, upcoming, done, canceled or info.
statusCategory: "triage" | "backlog" | "unstarted" | "started" | "paused" | "completed" | "canceled" // The same task in Nömad's status registry (unstarted, started, paused, completed, canceled).
kind: "questionnaire" | "files" | "review" | "information"
dueDate: string | null
owner: "brand" | "nomad"
}>
}Tareas que esperan a la marca en todos sus trabajos, las más urgentes primero.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.tasks.pending |
| Herramienta MCP | works_tasks_pending |
| Alcance | works.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | list |
Entrada
{
cursor?: string // ≤ 512 · Opaque cursor from a previous `nextCursor`.
limit?: integer // 1–50 · default 20
}Salida
{
items: Array<{
id: string // uuid
workId: string // uuid
workName: string
title: string
status: string // The brand-facing state: waiting_on_brand, waiting_on_brand_review, in_progress, blocked, upcoming, done, canceled or info.
statusCategory: "triage" | "backlog" | "unstarted" | "started" | "paused" | "completed" | "canceled" // The same task in Nömad's status registry (unstarted, started, paused, completed, canceled).
kind: "questionnaire" | "files" | "review" | "information"
dueDate: string | null
}>
nextCursor: string | null
}Una tarea con su cuestionario (el de la versión contratada), borradores y entregables.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.tasks.get |
| Herramienta MCP | works_tasks_get |
| Alcance | works.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | record |
Entrada
{
taskId: string // uuid
}Salida
{
id: string // uuid
workId: string // uuid
workName: string
title: string
status: string // The brand-facing state: waiting_on_brand, waiting_on_brand_review, in_progress, blocked, upcoming, done, canceled or info.
statusCategory: "triage" | "backlog" | "unstarted" | "started" | "paused" | "completed" | "canceled" // The same task in Nömad's status registry (unstarted, started, paused, completed, canceled).
kind: "questionnaire" | "files" | "review" | "information"
dueDate: string | null
questions: Array<{
id: string
label: string
type: string
required: boolean
options?: string[]
}>
draft: Array<{
questionId: string
value: string | number | boolean | string[]
}>
deliverables: Array<{
assetId: string // uuid
name: string
version: integer // -9007199254740991–9007199254740991
}>
revision: integer // -9007199254740991–9007199254740991
}Guarda respuestas del cuestionario. Con submit la entrega y el trabajo avanza; entregar pide confirmación.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.answer |
| Herramienta MCP | works_tasks_answer |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
taskId: string // uuid
expectedRevision: integer // -9007199254740991–9007199254740991
answers: Array<{
questionId: string
value: string | number | boolean | string[]
}> // ≤ 100 items
submit?: boolean // default false
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Aprueba un entregable o pide cambios con un comentario. Solo en tareas de revisión que esperan a la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.review |
| Herramienta MCP | works_tasks_review |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
decision: "approve"
taskId: string // uuid
expectedRevision: integer // -9007199254740991–9007199254740991
}
| {
decision: "request_changes"
taskId: string // uuid
expectedRevision: integer // -9007199254740991–9007199254740991
comment: string // ≤ 4000
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Guarda lo acordado en un briefing con Nödo como las respuestas de su tarea y la entrega, y el trabajo avanza. La persona acepta el resumen en la tarjeta o lo edita en el formulario. No escribe memoria: lo aprendido se propone al cerrar el trabajo.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.briefing.accept |
| Herramienta MCP | works_briefing_accept |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | Nödo, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
taskId: string // uuid
expectedRevision: integer // -9007199254740991–9007199254740991
answers: Array<{
questionId: string
value: string | number | boolean | string[]
}> // ≤ 100 items
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Aprueba el plan editorial de un trabajo. rhythm acepta el ritmo semanal, que se guarda con el plan y se reutiliza cada mes; month aprueba el mes y escribe cada hueco (fecha y hora, red, formato e idea) en su tarea de publicación como borrador con hora propuesta. Nunca publica ni programa de verdad.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.editorial_plan.approve |
| Herramienta MCP | works_editorial_plan_approve |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | Nödo, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
taskId: string // uuid
expectedRevision: integer // 0–9007199254740991
part: "rhythm" | "month"
}Salida
{
ok: true
id?: string
revision?: integer // -9007199254740991–9007199254740991
}Empieza un trabajo a partir de un producto del Store que la marca puede empezar sin pagar (gratuito o incluido en su plan), con sus pasos. Si el producto es de pago, devuelve el enlace a su ficha; nunca cobra.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.create_from_product |
| Herramienta MCP | works_create_from_product |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | confirm |
Entrada
{
productSlug: string // ≤ 120 · Slug from store_products_search or store_recommendations_list.
originConversationId?: string // uuid · Set by Nödo itself; leave it out.
}Salida
{
ok: true
id: string // uuid
name: string
url: string // uri · The new work in the app.
}
| {
ok: false
reason: "not_in_plan"
storeUrl: string // uri
}El formulario de «Briefing con Nödo»: la misma aceptación que la tarjeta (works.briefing.accept). Las respuestas pasan a la tarea y el trabajo avanza.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.briefing.submit_form |
| Herramienta MCP | works_briefing_submit_form |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
answers: Record<string, string>
}Salida
{
ok: true
}Añade una tarea de la marca al final de un trabajo. Un trabajo que viene de una compra del Store sigue el plan de su producto y no admite tareas añadidas.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.create |
| Herramienta MCP | works_tasks_create |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
title: string // ≤ 10000
description?: string | null // default null
dueDate?: string | null // default null
}Salida
{
task: {
id: string // uuid
work_id: string // uuid
brand_id: string // uuid
title: string
}
}Elimina una tarea que la propia persona añadió al trabajo (nunca los pasos que planificó Nömad). Basta con poder añadir tareas: quien la creó la puede eliminar. Se puede deshacer durante diez minutos con works.tasks.restore_own.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.trash_own |
| Herramienta MCP | works_tasks_trash_own |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
}Salida
{
ok: true
}Devuelve al trabajo una tarea propia que la misma persona quitó hace menos de diez minutos.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.restore_own |
| Herramienta MCP | works_tasks_restore_own |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
}Salida
{
ok: true
}Guarda lo que la marca escribe en su tarea (texto, archivos ya subidos, lista y respuestas). Con final la entrega: se marca hecha y el trabajo avanza.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.input.save |
| Herramienta MCP | works_tasks_input_save |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
final?: boolean // default false
data: {
client_text?: string | null
client_files?: string[] // ≤ 30 items
client_items?: Array<{
text: string // ≤ 2000
checked: boolean
}> // ≤ 100 items
client_answers?: Record<string, string>
}
}Salida
{
ok: true
}Antes de subir un archivo a un paso de un trabajo: comprueba que el paso es de la marca, que cabe en el plan y en 50 MB, y devuelve una URL firmada de subida para una ruta que elige el servidor.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.files.prepare |
| Herramienta MCP | works_tasks_files_prepare |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | Pantallas, Apps, API |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
fileName: string // ≤ 255
fileSize: integer // –52428800
mimeType?: string // ≤ 255
}Salida
{
storagePath: string
uploadUrl: string // uri
token: string
}Un problema con un paso de un trabajo: lo que cuenta la persona se convierte en una incidencia para soporte; un tipo de paso que la app aún no sabe pintar abre una sola incidencia y avisa al equipo.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.report_issue |
| Herramienta MCP | works_tasks_report_issue |
| Alcance | works.write |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Pantallas, Apps, API |
| Estado | Disponible |
Entrada
{
workId: string // uuid
taskId: string // uuid
reason: "user_report" | "unknown_module"
moduleType?: string | null
message?: string | null
platform?: "ios" | "android" | "mac" | "web" // default "ios"
appVersion?: string | null
}Salida
{
ticketId: string | null
deduplicated: boolean
}Registra en la tarea un archivo ya subido a su carpeta (<marca>/task-files/<tarea>/) y lo guarda en la Biblioteca de la marca. Antes de guardar nada comprueba las reglas de archivos del paso; si no lo admite, el archivo no llega a la Biblioteca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.files.register |
| Herramienta MCP | works_tasks_files_register |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
storagePath: string // ≤ 1024
fileName: string // ≤ 255
fileSize: integer // –52428800
mimeType?: string // ≤ 255
}Salida
{
url: string
fileName: string
fileSize: number
mimeType: string
}Quita un archivo de la tarea. El archivo sigue en la Biblioteca de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.files.remove |
| Herramienta MCP | works_tasks_files_remove |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
fileUrl: string // ≤ 2048
}Salida
{
ok: true
}La decisión de la persona aprobadora sobre una entrega en revisión: aprobarla (la tarea se cierra y el trabajo avanza) o pedir cambios con un comentario, archivos del borrador y tarjetas del «+».
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.decide |
| Herramienta MCP | works_tasks_decide |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
decision: "approve"
taskId: string // uuid
}
| {
decision: "request_changes"
taskId: string // uuid
comment: string // ≤ 20000
extras?: {
draftId?: string
attachments?: unknown
inserts?: unknown
}
}Salida
{
ok: true
partial: {
approved: integer // -9007199254740991–9007199254740991
required: integer // -9007199254740991–9007199254740991
waitingFor: string[]
}
| null
}Borra un archivo subido al borrador de «Pedir cambios» antes de enviarlo, salvo que un comentario ya guardado lo tenga.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.comment_files.discard |
| Herramienta MCP | works_tasks_comment_files_discard |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
draftId: string // uuid
path: string // ≤ 600
}Salida
{
ok: true
}Empieza un producto del Store como trabajo. Gratis o incluido en el plan empieza directamente; con priceId (un producto de pago único) empieza ya y se paga dentro del trabajo, lo que pide gestionar el plan.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.start_from_store |
| Herramienta MCP | works_start_from_store |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
productId: string // ≤ 120
checkoutAttemptId?: string // ≤ 120
priceId?: string // ≤ 120
extras?: Array<{
lineKey: string // ≤ 200
quantity: integer // -9007199254740991–9007199254740991
}> // ≤ 50 items
originConversationId?: string // uuid
}Salida
{
workId: string // uuid
work: {
id: string // uuid
name: string
}
| null
taskError: string | null
}Cuando ninguna pregunta de la marca bloquea un trabajo, lo deja seguir: prepara sus pasos (o, en uno manual, solo quita la espera). questions_pending si aún falta alguna.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.questions.complete |
| Herramienta MCP | works_questions_complete |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
}Salida
{
taskCount: integer // -9007199254740991–9007199254740991
error: string | null
}Archiva un trabajo (sale de la lista activa) o lo devuelve. Pedir el estado que ya tiene no cambia nada.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.set_archived |
| Herramienta MCP | works_set_archived |
| Alcance | works.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
archived: boolean
}Salida
{
work: {
id: string // uuid
archived_at: string | null
archived_by: string | null
}
}Fija el título de un trabajo, o lo vacía para que vuelva a seguir su contenido. El nombre del producto no cambia nunca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.set_title |
| Herramienta MCP | works_set_title |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
title: string // ≤ 2000
}Salida
{
title: string
source: "manual" | "auto"
}Fija el título de una tarea, o lo vacía para que vuelva a seguir su contenido.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.set_title |
| Herramienta MCP | works_tasks_set_title |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
title: string // ≤ 2000
}Salida
{
title: string
source: "manual" | "auto"
}Cambia las personas que aprueban un trabajo en un lado (marca o Nömad); una lista vacía vuelve al aprobador por defecto. Quien entra recibe el aviso y las entregas que ya esperan.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.approvers.set |
| Herramienta MCP | works_approvers_set |
| Alcance | works.write |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
role: "client" | "internal"
approvers: Array<{
userId: string // uuid
required?: boolean // default true
defaultSource?: "manual" | "requester" | "brand_manager" // default "manual"
}> // ≤ 5 items
}Salida
{
viewerId?: string | null
canEdit: {
client: boolean
internal: boolean
}
}En el lado de la marca: «Basta con uno» (any) o «Todos deben aprobar» (all). Las entregas que ya esperan siguen el modo nuevo desde su próxima aprobación.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.approvers.set_mode |
| Herramienta MCP | works_approvers_set_mode |
| Alcance | works.write |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
mode: "any" | "all"
}Salida
{
viewerId?: string | null
canEdit: {
client: boolean
internal: boolean
}
}Crea, la primera vez, el borrador de la publicación de una tarea «Publicación» para quien hace ese paso; después devuelve siempre el mismo. Nunca publica.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.tasks.publication.start_draft |
| Herramienta MCP | works_tasks_publication_start_draft |
| Alcance | works.write |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
}Salida
{
postId: string // uuid
}Guarda una revisión nueva del resultado de un componente en ejecución. La marca solo entrega los componentes que son suyos.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.execution.outputs.submit |
| Herramienta MCP | works_execution_outputs_submit |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
outputKey: string
payload: Record<string, unknown>
idempotencyKey: string // uuid
}Salida
{
work_id: string
}Aprueba o rechaza (con comentario) un resultado de un componente; el trabajo sigue con lo que le toque.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.execution.outputs.review |
| Herramienta MCP | works_execution_outputs_review |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
outputId: string // uuid
decision: "approved" | "rejected"
feedback?: string // ≤ 4000
}Salida
{
work_id: string
}Guarda las respuestas del brief de ejecución de un trabajo y deja que el trabajo continúe.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.execution.brief.save |
| Herramienta MCP | works_execution_brief_save |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
answers: Record<string, unknown>
expectedVersion: integer // 0–9007199254740991
}Salida
{
work_id: string
}Hace avanzar la ejecución de un trabajo; con retryTaskId reintenta antes ese componente fallido.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.execution.resume |
| Herramienta MCP | works_execution_resume |
| Alcance | works.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
retryTaskId?: string // uuid
}Salida
{
ok: true
}Decide qué acciones puede hacer sola la ejecución de los trabajos de un producto en las conexiones de la marca (borrador, programar, publicar, enviar).
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.execution.policy.set |
| Herramienta MCP | works_execution_policy_set |
| Alcance | works.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
productId: string // uuid
enabled: boolean
allowedActions: Array<{
integrationProductId: string // uuid
operation: "create_draft" | "schedule" | "publish" | "send"
integrationId: string // uuid
}> // ≤ 50 items
}Salida
{
product_id: string
enabled: boolean
}Pausa o reanuda la ejecución de un contrato y fija su inicio y su fin.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.execution.calendar.set |
| Herramienta MCP | works_execution_calendar_set |
| Alcance | works.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
contractId: string // uuid
paused: boolean
startsAt: string | null
endsAt: string | null
}Salida
{
ok: true
}Lo que pide un paso de pago (importe con impuestos, señal o resto, estado), si quien mira puede pagarlo y, en una señal, si el resto se cobrará solo con la misma tarjeta.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.payments.get |
| Herramienta MCP | works_payments_get |
| Alcance | works.read |
| Rol mínimo | Facturación |
| Confirmación humana | No |
| Puertas | Pantallas, Apps, API |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
}Salida
{
summary: {
taskId: string
workId: string
state: string
title?: string
kind?: "partial" | "final"
percentBps?: integer | null
grossMinor?: integer // -9007199254740991–9007199254740991
currency?: string
remainingMinor?: integer // -9007199254740991–9007199254740991
}
canPay: boolean
autopay: {
available: boolean // A deposit with a later payment step in the same work.
enabled: boolean // The rest will be charged off-session with the card of this deposit.
suggested: boolean // On by default: the brand pays itself.
decided: boolean // Someone already chose on or off for this deposit.
}
| null
}Prepara el pago de un paso de pago del trabajo (el importe sale siempre del servidor) para que la persona lo confirme con Stripe.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.payments.start |
| Herramienta MCP | works_payments_start |
| Alcance | works.write |
| Rol mínimo | Facturación |
| Confirmación humana | No |
| Puertas | Pantallas, Apps |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
autopayRest?: "on" | "off" | "suggested"
}Salida
{
summary: {
taskId: string
workId: string
state: string
title?: string
kind?: "partial" | "final"
percentBps?: integer | null
grossMinor?: integer // -9007199254740991–9007199254740991
currency?: string
remainingMinor?: integer // -9007199254740991–9007199254740991
}
clientSecret: string | null
publishableKey: string
sheet?: {
publishableKey: string
customerId: string | null
customerSessionClientSecret: string | null
merchantCountryCode: "ES"
merchantDisplayName: string
googlePayEnvironment: "test" | "production"
}
| null
autopay?: {
available: boolean // A deposit with a later payment step in the same work.
enabled: boolean // The rest will be charged off-session with the card of this deposit.
suggested: boolean // On by default: the brand pays itself.
decided: boolean // Someone already chose on or off for this deposit.
}
| null
}Después de confirmar en Stripe, vuelve a leer el pago y cierra el paso si quedó pagado.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.payments.confirm |
| Herramienta MCP | works_payments_confirm |
| Alcance | works.write |
| Rol mínimo | Facturación |
| Confirmación humana | No |
| Puertas | Pantallas, Apps |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
}Salida
{
taskId: string
workId: string
state: string
title?: string
kind?: "partial" | "final"
percentBps?: integer | null
grossMinor?: integer // -9007199254740991–9007199254740991
currency?: string
remainingMinor?: integer // -9007199254740991–9007199254740991
}Equipo de Nömad: crea un enlace de pago de un paso, válido 30 días, que paga sin cuenta.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.payments.send_link |
| Herramienta MCP | works_payments_send_link |
| Alcance | works.write |
| Rol mínimo | Facturación |
| Confirmación humana | No |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
}Salida
{
url: string
expiresAt: string
summary: {
taskId: string
workId: string
state: string
title?: string
kind?: "partial" | "final"
percentBps?: integer | null
grossMinor?: integer // -9007199254740991–9007199254740991
currency?: string
remainingMinor?: integer // -9007199254740991–9007199254740991
}
}Equipo de Nömad: registra un pago recibido fuera de Stripe (transferencia, efectivo, datáfono). Mismo libro, mismo cierre del paso.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/works.payments.register |
| Herramienta MCP | works_payments_register |
| Alcance | works.write |
| Rol mínimo | Facturación |
| Confirmación humana | No |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
method: "transfer" | "cash" | "card_terminal" | "other"
reference: string | null
receivedOn: string | null
idempotencyKey: string // uuid
}Salida
{
taskId: string
workId: string
state: string
title?: string
kind?: "partial" | "final"
percentBps?: integer | null
grossMinor?: integer // -9007199254740991–9007199254740991
currency?: string
remainingMinor?: integer // -9007199254740991–9007199254740991
}Los trabajos en curso de la marca con sus pasos visibles (y, en un trabajo «Post», dónde está su publicación), los archivados, los fijados y su orden: lo que lista «Trabajos» en el menú.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.sidebar |
| Herramienta MCP | works_sidebar |
| Alcance | works.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
timeZone?: string | null
asClient?: boolean // Read as the brand sees it (a staff viewer previewing as client). Only narrows.
}Salida
{
works: Array<{
id: string
name: string
status: string | null
color: string | null
due_date: string | null
is_recurring: boolean | null
recurring_interval: string | null
archived_at: string | null
archived_by: string | null
product_name?: string | null // The product the work comes from, in the reader's language.
product_icon?: string | null // The product's icon name (`products.icon`): the kind-of-work glyph lists draw.
updated_at?: string | null
created_at?: string | null
approvalElsewhere?: boolean // Someone else approves this work: its approval steps are not the reader's to act on.
tasks?: Array<{
id: string
title: string
status: string | null
task_type?: string | null
module_type?: string | null
step_kind?: string | null
artifact_type?: string | null
completion_mode?: string | null
due_date?: string | null
max_days?: number | null
created_at?: string | null
post?: {
chip: string // Where the step's post is, as the Posts list says it: draft, in_review, approved_unscheduled, scheduled, sending, manual_pending, attention, published, deleted, cancelled or unconnected.
scheduledAt: string | null // The next time one of its destinations goes out (ISO), when one is scheduled.
}
| null // Only on the single «Publicación» step of a «Post» work whose draft exists.
}>
}>
archived: Array<{
id: string
name: string
status: string | null
color: string | null
due_date: string | null
is_recurring: boolean | null
recurring_interval: string | null
archived_at: string | null
archived_by: string | null
product_name?: string | null // The product the work comes from, in the reader's language.
product_icon?: string | null // The product's icon name (`products.icon`): the kind-of-work glyph lists draw.
updated_at?: string | null
created_at?: string | null
approvalElsewhere?: boolean // Someone else approves this work: its approval steps are not the reader's to act on.
tasks?: Array<{
id: string
title: string
status: string | null
task_type?: string | null
module_type?: string | null
step_kind?: string | null
artifact_type?: string | null
completion_mode?: string | null
due_date?: string | null
max_days?: number | null
created_at?: string | null
post?: {
chip: string // Where the step's post is, as the Posts list says it: draft, in_review, approved_unscheduled, scheduled, sending, manual_pending, attention, published, deleted, cancelled or unconnected.
scheduledAt: string | null // The next time one of its destinations goes out (ISO), when one is scheduled.
}
| null // Only on the single «Publicación» step of a «Post» work whose draft exists.
}>
}>
completed?: Array<{
id: string
name: string
status: string | null
color: string | null
due_date: string | null
is_recurring: boolean | null
recurring_interval: string | null
archived_at: string | null
archived_by: string | null
product_name?: string | null // The product the work comes from, in the reader's language.
product_icon?: string | null // The product's icon name (`products.icon`): the kind-of-work glyph lists draw.
updated_at?: string | null
created_at?: string | null
approvalElsewhere?: boolean // Someone else approves this work: its approval steps are not the reader's to act on.
tasks?: Array<{
id: string
title: string
status: string | null
task_type?: string | null
module_type?: string | null
step_kind?: string | null
artifact_type?: string | null
completion_mode?: string | null
due_date?: string | null
max_days?: number | null
created_at?: string | null
post?: {
chip: string // Where the step's post is, as the Posts list says it: draft, in_review, approved_unscheduled, scheduled, sending, manual_pending, attention, published, deleted, cancelled or unconnected.
scheduledAt: string | null // The next time one of its destinations goes out (ISO), when one is scheduled.
}
| null // Only on the single «Publicación» step of a «Post» work whose draft exists.
}>
}>
activeTotal: integer // -9007199254740991–9007199254740991
pinnedIds: string[]
pinnedOrder: string[]
workOrder: string[]
fetchedAt: number
today: string
timeZone?: string | null
}Una página de «Trabajos» tal como la pinta la app: cada trabajo con sus pasos (total, hechos, en curso), los pasos que esperan a la marca y su producto. Activos o archivados.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.screen.list |
| Herramienta MCP | works_screen_list |
| Alcance | works.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
archived?: boolean
offset?: integer // 0–100000
limit?: integer // 1–72
}Salida
{
works: Array<{
id: string // uuid
name: string
status: string
due_date: string | null
is_recurring: boolean | null
recurring_interval: string | null
archived_at: string | null
created_at: string
updated_at: string
source_product_id?: string | null
product_name?: string | null
product_icon?: string | null
task_count: number // Steps in scope: not informational, not canceled.
completed_count: number
working_count: number // Steps Nömad is working on right now.
client_pending_count: number // Open steps waiting for the brand.
}>
total: integer // -9007199254740991–9007199254740991
nextOffset: integer // -9007199254740991–9007199254740991
hasMore: boolean
error: string | null
}Un trabajo tal como lo pinta su página: la fila del trabajo, la primera página de sus pasos con quién de Nömad lleva cada uno, quién aprueba, los entregables aprobados, la suscripción de la que viene y su producto.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.screen.work |
| Herramienta MCP | works_screen_work |
| Alcance | works.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
preview?: boolean // Staff previewing the brand as a client: edit controls are left out.
}Salida
{
work: {
id: string // uuid
brand_id: string // uuid
name: string
status: string
color: string | null
due_date: string | null
source: string | null
source_product_id: string | null
is_recurring: boolean | null
recurring_interval: string | null
archived_at: string | null
archived_by: string | null
created_at: string
updated_at: string
}
tasks: {
tasks: Array<{
id: string // uuid
work_id: string // uuid
title: string
description: string | null
status: string
task_type: string | null
completion_mode: string | null
module_type: string | null
position: number | null
due_date: string | null
client_answers: unknown // Answers by question id.
client_submitted_at: string | null
output_url: string | null
template_id: string | null
updated_at: string
}>
total: integer // -9007199254740991–9007199254740991
nextOffset: integer // -9007199254740991–9007199254740991
hasMore: boolean
error: "loadFailed" | null
}
approvers: Record<string, unknown> | null
operationalDeliverables: Array<{
id: string
taskId: string
taskTitle: string
title: string
revision: integer // -9007199254740991–9007199254740991
}>
subscription: {
id: string
name: string
}
| null
productName: string | null
}Una página de los pasos de un trabajo tal como los pinta su página, en orden, con quién de Nömad lleva cada uno.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.screen.tasks |
| Herramienta MCP | works_screen_tasks |
| Alcance | works.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
offset?: integer // 0–100000
limit?: integer // 1–500
}Salida
{
work: {
id: string // uuid
brand_id: string // uuid
name: string
status: string
color: string | null
due_date: string | null
source: string | null
source_product_id: string | null
is_recurring: boolean | null
recurring_interval: string | null
archived_at: string | null
archived_by: string | null
created_at: string
updated_at: string
}
| null
tasks: {
tasks: Array<{
id: string // uuid
work_id: string // uuid
title: string
description: string | null
status: string
task_type: string | null
completion_mode: string | null
module_type: string | null
position: number | null
due_date: string | null
client_answers: unknown // Answers by question id.
client_submitted_at: string | null
output_url: string | null
template_id: string | null
updated_at: string
}>
total: integer // -9007199254740991–9007199254740991
nextOffset: integer // -9007199254740991–9007199254740991
hasMore: boolean
error: "loadFailed" | null
}
}Un paso tal como lo pinta su página: el paso, su trabajo, los pasos vecinos, quién aprueba y lo que pide su módulo (preguntas, rondas de cambios, briefing con Nödo, plan editorial, dominio, pago). Un paso de «Publicación» devuelve solo lo común: su post se lee aparte.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.screen.task |
| Herramienta MCP | works_screen_task |
| Alcance | works.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
workId: string // uuid
taskId: string // uuid
preview?: boolean // Staff previewing the brand as a client: edit controls are left out.
fallbackPillars?: string[] // ≤ 6 items · Pillars an editorial plan previews when the briefing has none (in the reader's language).
}Salida
{
kind: "task" | "publication"
work: {
id: string // uuid
brand_id: string // uuid
name: string
status: string
color: string | null
due_date: string | null
source: string | null
source_product_id: string | null
is_recurring: boolean | null
recurring_interval: string | null
archived_at: string | null
archived_by: string | null
created_at: string
updated_at: string
}
task: {
id: string // uuid
work_id: string // uuid
title: string
description: string | null
status: string
task_type: string | null
completion_mode: string | null
module_type: string | null
position: number | null
due_date: string | null
client_answers: unknown // Answers by question id.
client_submitted_at: string | null
output_url: string | null
template_id: string | null
updated_at: string
step_kind: string | null
artifact_type: string | null
accept_text: boolean | null
accept_files: boolean | null
accept_questionnaire: boolean | null
is_required: boolean | null
estimated_hours: number | null
estimated_minutes: number | null
max_days: number | null
depends_on: string[] | null
client_text: string | null
client_files: unknown // URLs of the files the brand attached.
output_text: string | null
created_at: string
}
siblings: Array<{
id: string // uuid
title: string
}>
approvers: Record<string, unknown> | null
questions?: Array<{
id: string
question: string
sort_order?: number | null
field_type?: string | null
placeholder?: string | null
is_required?: boolean | null
options?: unknown // The choices (a list) or the field's settings: `choices`, `allow_other`, lengths and file limits.
helper_text?: string | null
}>
}Lo que enseña un trabajo o un paso eliminado al abrir su enlace: su nombre, cuándo se eliminó, quién lo hizo y si puedes restaurarlo. Nada cuando no está eliminado.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/works.screen.deleted |
| Herramienta MCP | works_screen_deleted |
| Alcance | works.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Pantallas, Apps, API |
| Estado | Disponible |
Entrada
{
workId: string // uuid
taskId?: string // uuid
}Salida
{
deleted: {
entity: "work" | "task"
id: string // uuid
workId: string // uuid
name: string
deletedAt: string
deletedBy: {
id: string // uuid
name: string | null
}
| null
restorable: boolean
}
| null
}Actualizado el 1 de enero de 1970