Publicaciones
Borradores y programación en redes.
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.
Borradores y programación en redes.
Publicaciones de la marca con su estado real, calculado de sus destinos: borrador, en revisión, aprobada sin programar, programada, publicándose, publicada, parcial, con fallos, eliminada de la red o cancelada. Filtra por estado, cuenta, origen y fechas; cada destino trae hora, enlace publicado y últimas métricas.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/publishing.posts.list |
| Herramienta MCP | publishing_posts_list |
| Alcance | publishing.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | list |
Entrada
{
status?: "all" | "draft" | "in_review" | "approved_unscheduled" | "scheduled" | "published" | "failed" | "deleted" | "cancelled" // default "all" · A post matches every state one of its destinations is in; `published` includes partially published posts and excludes destinations deleted from their network, which match `deleted`.
accountId?: string // uuid
source?: "person" | "agent"
from?: string // date-time
to?: string // date-time
cursor?: string // ≤ 512 · Opaque cursor from a previous `nextCursor`.
limit?: integer // 1–50 · default 20
}Salida
{
items: Array<{
id: string // uuid
title: string | null
status: "draft" | "in_review" | "approved_unscheduled" | "scheduled" | "publishing" | "published" | "partial" | "failed" | "deleted" | "cancelled"
channels: string[]
scheduledAt: string | null // Earliest planned or proposed time among the destinations.
publishedAt: string | null // Latest confirmed publication among the destinations.
source: "person" | "agent" // `agent` when an agent drafted it for a person.
destinations: Array<{
variantId: string // uuid
accountId: string // uuid · Connected account id, as `publishing.accounts.list` returns it.
network: string // Network key: instagram, facebook_pages, threads, linkedin, tiktok, youtube, x, pinterest, bluesky, google_business_profile, wordpress, mailerlite.
account: string | null
format: string
status: string // Raw destination status: draft, in_review, approved, scheduled, preparing, publishing, processing, published, manual_pending, manual_confirmed, missed, blocked, failed, uncertain or cancelled; `deleted` when it was published and later removed from the network (from Nömad or in the network itself).
scheduledAt: string | null
publishedAt: string | null
permalink: string | null // Public link on the network; null once the post was deleted there.
deletedAt?: string | null // When a published destination was found deleted from its network.
metrics: {
observedAt: string
values: Record<string, number> // Latest counters the network reports (likes, comments, views…); keys vary per network.
}
| null
}>
reviewUrl: string // uri · Where a person reviews, approves or edits the post in Nömad. Show it to them.
updatedAt: string
}>
nextCursor: string | null
}Una publicación entera: texto base, cada destino con su texto, formato, archivos (con vista previa), programación, revisión, intentos de entrega, enlace publicado y métricas.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/publishing.posts.get |
| Herramienta MCP | publishing_posts_get |
| Alcance | publishing.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | record |
Entrada
{
postId: string // uuid
}Salida
{
id: string // uuid
title: string | null
status: "draft" | "in_review" | "approved_unscheduled" | "scheduled" | "publishing" | "published" | "partial" | "failed" | "deleted" | "cancelled"
channels: string[]
scheduledAt: string | null // Earliest planned or proposed time among the destinations.
publishedAt: string | null // Latest confirmed publication among the destinations.
source: "person" | "agent" // `agent` when an agent drafted it for a person.
destinations: Array<{
variantId: string // uuid
accountId: string // uuid · Connected account id, as `publishing.accounts.list` returns it.
network: string // Network key: instagram, facebook_pages, threads, linkedin, tiktok, youtube, x, pinterest, bluesky, google_business_profile, wordpress, mailerlite.
account: string | null
format: string
status: string // Raw destination status: draft, in_review, approved, scheduled, preparing, publishing, processing, published, manual_pending, manual_confirmed, missed, blocked, failed, uncertain or cancelled; `deleted` when it was published and later removed from the network (from Nömad or in the network itself).
scheduledAt: string | null
publishedAt: string | null
permalink: string | null // Public link on the network; null once the post was deleted there.
deletedAt?: string | null // When a published destination was found deleted from its network.
metrics: {
observedAt: string
values: Record<string, number> // Latest counters the network reports (likes, comments, views…); keys vary per network.
}
| null
title: string
text: string
inheritsText: boolean
deliveryMethod: "direct" | "manual"
options: Record<string, unknown>
media: Array<{
fileId: string // uuid
name: string | null
mimeType: string | null
role: string
altText: string | null
previewUrl: string | null // In-app thumbnail; opens for people signed in to the brand.
}>
schedule: {
kind: string
at: string | null
timezone: string
status: string
}
| null
delivery: {
jobStatus: string | null
attempts: integer // -9007199254740991–9007199254740991
lastError: string | null
updatedAt: string | null
}
}>
reviewUrl: string // uri · Where a person reviews, approves or edits the post in Nömad. Show it to them.
updatedAt: string
baseText: string
tags: string[]
revision: integer // -9007199254740991–9007199254740991
createdAt: string
createdBy: {
id: string // uuid
name: string | null
}
| null
via: {
door: string
clientId: string | null
model: string | null
}
| null // Which agent drafted it, when one did.
review: {
policy: "none" | "internal" | "internal_client"
agentPolicy: "never" | "review"
requests: Array<{
id: string // uuid
accountId: string | null
stage: "internal" | "client"
status: string
createdAt: string
decisions: Array<{
decision: string
comment: string | null
decidedAt: string | null
}>
}>
}
}Crea en una sola llamada un borrador para varias cuentas conectadas: texto base, texto propio por destino y archivos aprobados de la Biblioteca. Siempre queda en borrador, firmado como hecho por un agente, con el enlace para que una persona lo revise; devuelve los problemas de formato y la revisión de marca de cada texto. Nunca publica ni programa.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.posts.draft |
| Herramienta MCP | publishing_posts_draft |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | record |
Entrada
{
postId?: string // uuid
expectedRevision?: integer // –9007199254740991 · Required with `postId`: the `revision` from `publishing.posts.get`.
title: string // ≤ 200 · Name of the post in Nömad. Networks with a title field (YouTube, Pinterest, articles) use it unless a destination sets its own `title`.
text: string // ≤ 10000 · Base copy every destination uses unless it sets its own `text`.
tags?: string[] // ≤ 20 items · default []
fileIds?: string[] // ≤ 10 items · default [] · Approved Library files attached to every destination that does not list its own.
destinations: Array<{
accountId: string // uuid
format: "text" | "image" | "carousel" | "video" | "reel" | "story" | "document" | "poll" | "article" | "event" | "offer" | "campaign"
text?: string // ≤ 10000 · Copy for this network only; omit to use the base copy.
title?: string // ≤ 500 · Title where the network has one (YouTube, Pinterest, articles).
fileIds?: string[] // ≤ 20 items
options?: Record<string, string | number | boolean> // Network options from `publishing.formats.describe`, e.g. { "privacyStatus": "unlisted" }.
}> // ≤ 12 items
idempotencyKey?: string // ≤ 120 · Any unique string you choose per intended draft. Retrying with the same key returns the first result instead of a duplicate.
agentModel?: string // ≤ 80 · Your model name (e.g. claude-opus-4). Recorded as self-reported next to the post, so reviewers know what wrote it.
}Salida
{
ok: true
id: string // uuid
title: string
revision: integer // -9007199254740991–9007199254740991
status: "draft"
replayed: boolean // True when `idempotencyKey` matched an earlier call and nothing new was created.
readyForReview: boolean // No blocking issue: it can be sent to review.
issues: Array<{
accountId: string | null
field: string
code: string // Stable key, e.g. text_too_long, media_count_invalid, media_aspect_invalid, format_unavailable, media_check_pending, direct_publishing_unavailable. Account warnings: connection_broken, missing_permissions, connection_paused and expires_before_post (params `cause`, `renewBy`): the account needs reconnecting before the post goes out; tell the person which one and why.
severity: "error" | "warning" // Errors must be fixed before review; warnings only inform.
params?: Record<string, string | number>
}>
brandCheck: Array<{
accountId: string // uuid
ok: boolean // False when the text breaks a blocking brand or sector rule.
findings: Array<{
ruleId: string
source: string // `brand` for the Genome rules, otherwise the sector pack.
severity: "block" | "warn"
match: string
message: {
es: string
en: string
}
suggestion?: string
}>
}>
mentionSuggestions?: Array<{
network: string // Network key the handle belongs to (instagram, threads, x, tiktok, bluesky, facebook_pages, linkedin, youtube).
handle: string // Username without the @.
name: string | null // Public display name, when a lookup found the account.
verified: boolean // An official lookup found this public account recently.
uses: integer // -9007199254740991–9007199254740991 · Times the brand used it in posts, collaborators, tags or its imported history.
lastUsedAt: string | null
reason: "named_in_text" | "handle_in_text" | "used_before" // `named_in_text`: the account's name appears in the text without its @handle; `handle_in_text`: its handle appears without the @; `used_before`: the brand mentioned, tagged or collaborated with it before.
accountId: string // uuid
}> // Accounts the brand used before that the copy names without their @handle, per destination. Only proposals: tell the person and let them add the mention; never rewrite the draft on your own.
reviewUrl: string // uri · Where a person reviews, approves or edits the post in Nömad. Show it to them.
}Manda un borrador a revisión: las personas que revisan en la marca (o sus propietarios y administradores) deciden si se publica. Nunca aprueba ni publica, aunque lo pidas en nombre de un propietario. Devuelve el enlace de aprobación.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.posts.request_review |
| Herramienta MCP | publishing_posts_request_review |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | record |
Entrada
{
postId: string // uuid
accountIds?: string[] // ≤ 12 items · Account ids of the destinations to send; omit for every destination still in draft.
}Salida
{
ok: true
id: string // uuid
title: string
state: "in_review" | "needs_changes" // `needs_changes`: nothing changed; fix `issues` (errors) and ask again.
proposedAt: string | null // Time proposed to the reviewer; it only takes effect if a person approves.
timezone: string | null
reviewers: integer // -9007199254740991–9007199254740991 · People asked to decide.
agentPolicy: "never" | "review" // Brand rule for agent posts. `never` (default): a person always approves an agent post.
issues: Array<{
accountId: string | null
field: string
code: string // Stable key, e.g. text_too_long, media_count_invalid, media_aspect_invalid, format_unavailable, media_check_pending, direct_publishing_unavailable. Account warnings: connection_broken, missing_permissions, connection_paused and expires_before_post (params `cause`, `renewBy`): the account needs reconnecting before the post goes out; tell the person which one and why.
severity: "error" | "warning" // Errors must be fixed before review; warnings only inform.
params?: Record<string, string | number>
}>
reviewUrl: string // uri · Where a person reviews, approves or edits the post in Nömad. Show it to them.
}Propone una hora de publicación y manda el borrador a revisión en el mismo paso. La hora solo vale si una persona aprueba la publicación; hasta entonces no hay nada programado. Devuelve el enlace de aprobación.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.posts.schedule |
| Herramienta MCP | publishing_posts_schedule |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | record |
Entrada
{
postId: string // uuid
publishAt: string // date-time
timezone?: string // ≤ 100
accountIds?: string[] // ≤ 12 items · Account ids of the destinations to send; omit for every destination still in draft.
}Salida
{
ok: true
id: string // uuid
title: string
state: "in_review" | "needs_changes" // `needs_changes`: nothing changed; fix `issues` (errors) and ask again.
proposedAt: string | null // Time proposed to the reviewer; it only takes effect if a person approves.
timezone: string | null
reviewers: integer // -9007199254740991–9007199254740991 · People asked to decide.
agentPolicy: "never" | "review" // Brand rule for agent posts. `never` (default): a person always approves an agent post.
issues: Array<{
accountId: string | null
field: string
code: string // Stable key, e.g. text_too_long, media_count_invalid, media_aspect_invalid, format_unavailable, media_check_pending, direct_publishing_unavailable. Account warnings: connection_broken, missing_permissions, connection_paused and expires_before_post (params `cause`, `renewBy`): the account needs reconnecting before the post goes out; tell the person which one and why.
severity: "error" | "warning" // Errors must be fixed before review; warnings only inform.
params?: Record<string, string | number>
}>
reviewUrl: string // uri · Where a person reviews, approves or edits the post in Nömad. Show it to them.
}Las cuentas conectadas donde la marca puede publicar, con su salud: credenciales al día, por caducar o caducadas, si la red está activada para publicar por API, los formatos que admite y si la publicación está en pausa.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/publishing.accounts.list |
| Herramienta MCP | publishing_accounts_list |
| Alcance | publishing.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
| Widget | list |
Entrada
{}Salida
{
publishingActive: boolean // False while Nömad's publisher is switched off: drafts and reviews still work.
paused: boolean
approvalPolicy: "none" | "internal" | "internal_client"
agentPolicy: "never" | "review"
items: Array<{
accountId: string // uuid
network: string
name: string
handle: string | null
status: "connected" | "needs_attention"
credentials: "ok" | "expiring" | "expired" | "error"
credentialsExpireAt: string | null
gateActive: boolean // Nömad has certified API publishing for this network.
directPublishing: boolean
reasons: string[]
formats: string[]
timezone: string | null
paused: boolean
}>
}Lo que admite cada formato en cada cuenta conectada: límite de texto y en qué unidad, número y tipo de archivos, tamaño, proporción, duración y opciones. Léelo antes de escribir un borrador.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/publishing.formats.describe |
| Herramienta MCP | publishing_formats_describe |
| Alcance | publishing.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
accountId?: string // uuid
format?: "text" | "image" | "carousel" | "video" | "reel" | "story" | "document" | "poll" | "article" | "event" | "offer" | "campaign"
}Salida
{
items: Array<{
accountId: string // uuid
network: string
account: string | null
format: "text" | "image" | "carousel" | "video" | "reel" | "story" | "document" | "poll" | "article" | "event" | "offer" | "campaign"
status: "verified" | "candidate" | "unsupported" | "retired" // `verified`: checked against the network documentation; `candidate`: not certified yet.
directPublishing: boolean // True when Nömad can publish this format on this account by API once approved; otherwise a person publishes it by hand.
text: {
required: boolean
max: integer | null
unit: "characters" | "code_points" | "utf16_units" | "utf8_bytes" | "graphemes" | "threads_weighted" | "x_weighted" | null
}
media: {
min: integer // -9007199254740991–9007199254740991
max: integer | null
mimeTypes: string[]
maxBytes: number | null
rules: Record<string, unknown> // Every other media rule as the catalogue states it: aspect [min,max] (width/height), duration [min,max] seconds, width, fps, codecs, cover.
}
options: string[] // Network options a destination may set in `options`.
notes: string[] // Known limits not checked automatically.
}>
}Las últimas métricas de lo publicado, por publicación y sumadas por cuenta: lo publicado desde Nömad y, si está importado, el historial de la cuenta. Filtra por publicación, cuenta y fechas.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/publishing.metrics.get |
| Herramienta MCP | publishing_metrics_get |
| Alcance | publishing.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
postId?: string // uuid
accountId?: string // uuid
from?: string
to?: string
limit?: integer // 1–50 · default 20
}Salida
{
items: Array<{
origin: "nomad" | "history" // `history`: published outside Nömad and imported.
postId: string | null
variantId: string | null
accountId: string | null
network: string | null
permalink: string | null
publishedAt: string | null
observedAt: string | null
values: Record<string, number>
availability: Record<string, string>
}>
totals: Array<{
accountId: string | null
network: string | null
posts: integer // -9007199254740991–9007199254740991
values: Record<string, number>
}>
}Guarda una idea de publicación (título, texto, etiquetas y archivos aprobados) en Ideas, marcada como propuesta de un agente. Una idea es una publicación en su primera fase: sin redes, sin fecha y sin trabajo. Una persona decide si la convierte en publicación, que conserva el mismo id.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.ideas.create |
| Herramienta MCP | publishing_ideas_create |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | Nödo, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
title: string // ≤ 200
text?: string // ≤ 10000 · default ""
tags?: string[] // ≤ 20 items · default []
fileIds?: string[] // ≤ 10 items · default []
idempotencyKey?: string // ≤ 120 · Any unique string you choose per intended draft. Retrying with the same key returns the first result instead of a duplicate.
agentModel?: string // ≤ 80 · Your model name (e.g. claude-opus-4). Recorded as self-reported next to the post, so reviewers know what wrote it.
}Salida
{
ok: true
id: string // uuid
revision: integer // -9007199254740991–9007199254740991
replayed: boolean
url: string // uri
}Las ideas de publicación guardadas en la marca, las más recientes primero, con su origen. Una idea convertida en publicación sale de esta lista y sigue con el mismo id en las publicaciones.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/publishing.ideas.list |
| Herramienta MCP | publishing_ideas_list |
| Alcance | publishing.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
title: string
text: string
tags: string[]
source: "person" | "agent"
convertedPostId: string | null // Always null: an idea is a post in status `idea`, and turning it into a post keeps its id (it then appears in `publishing.posts.list`). Kept for compatibility.
createdAt: string
}>
nextCursor: string | null
}Cuentas que la marca ya ha mencionado, etiquetado o invitado como colaboradoras, por red y ordenadas por uso y recencia. Con text, las que ese texto nombra sin su @. Solo sugiere: nunca escribe en un borrador; propón la mención y que la persona decida.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/publishing.mentions.suggest |
| Herramienta MCP | publishing_mentions_suggest |
| Alcance | publishing.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
network?: string // Only this network (instagram, threads, x, tiktok, bluesky, facebook_pages, linkedin, youtube).
text?: string // ≤ 10000 · Copy to check for names written without their @handle.
query?: string // ≤ 120 · Filter by the start of a handle or name.
limit?: integer // 1–20 · default 8
}Salida
{
items: Array<{
network: string // Network key the handle belongs to (instagram, threads, x, tiktok, bluesky, facebook_pages, linkedin, youtube).
handle: string // Username without the @.
name: string | null // Public display name, when a lookup found the account.
verified: boolean // An official lookup found this public account recently.
uses: integer // -9007199254740991–9007199254740991 · Times the brand used it in posts, collaborators, tags or its imported history.
lastUsedAt: string | null
reason: "named_in_text" | "handle_in_text" | "used_before" // `named_in_text`: the account's name appears in the text without its @handle; `handle_in_text`: its handle appears without the @; `used_before`: the brand mentioned, tagged or collaborated with it before.
}>
}Lo que es cada red en la que Nömad publica, aunque la marca no la haya conectado: sus formatos, cuántos archivos y de qué tipo admite cada uno, la proporción recomendada, el límite de texto y en qué unidad se cuenta, y su política de hashtags. Para la cuenta concreta, publishing.formats.describe.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/publishing.networks.list |
| Herramienta MCP | publishing_networks_list |
| Alcance | publishing.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | Nödo, Voz, MCP, API, Chat, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
network?: string // Only this network (instagram, facebook_pages, threads, linkedin, x, tiktok, youtube, pinterest, bluesky, google_business_profile…).
}Salida
{
items: Array<{
network: string
label: string
family: "social" | "video" | "local" | "web" | "email"
clickableLinks: boolean
mentions: boolean
hashtags: {
max: integer // -9007199254740991–9007199254740991
placement: "end" | "inline" | "none"
}
formats: Array<{
format: "text" | "image" | "carousel" | "video" | "reel" | "story" | "document" | "poll" | "article" | "event" | "offer" | "campaign"
media: {
kind: "none" | "image" | "video" | "image_or_video" | "mixed" | "document"
min: integer // -9007199254740991–9007199254740991
max: integer // -9007199254740991–9007199254740991
maxSeconds?: number
}
recommendedAspect: string // Width:height to create files at, e.g. 4:5 or 9:16.
aspectRange: array // ≤ 2 items · Width / height the network accepts or crops to.
textLimit: integer | null
textUnit: "characters" | "x_weighted" | "threads_weighted" | "utf16" | "utf8_bytes" | "graphemes"
textRequired: boolean
titleLimit: integer | null
}>
}>
}Crea o guarda el borrador de una publicación con sus destinos. Devuelve la publicación y, como guía, lo que impediría programarla.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.posts.save |
| Herramienta MCP | publishing_posts_save |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
draft: Record<string, unknown> // The composer draft (`PublishingPostDraft`): id and expectedVersion to edit, title, baseText, tags, media and one variant per destination.
}Salida
{
post: {
id: string // uuid
version: integer // -9007199254740991–9007199254740991
variants: Array<{
id: string // uuid
status: string
}>
}
issues: Array<{
code: string
field: string
severity: "error" | "warning"
}>
unscheduled: boolean
}Programa los destinos de una publicación a una hora, en la cola o para publicar ya. Repetir la misma petición no vuelve a programar nada.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.variants.schedule |
| Herramienta MCP | publishing_variants_schedule |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
schedule: Record<string, unknown> // `PublishingScheduleInput`: postId, variantIds, expectedVersion, mode (fixed | queue | now), scheduledAt, timezone.
}Salida
{
scheduled: boolean
post: {
id: string // uuid
version: integer // -9007199254740991–9007199254740991
variants: Array<{
id: string // uuid
status: string
}>
}
| null
issues: Array<{
code: string
field: string
severity: "error" | "warning"
}>
}Envía destinos de una publicación a aprobar según la política de la marca. Con errores no envía nada y los devuelve.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.reviews.request |
| Herramienta MCP | publishing_reviews_request |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postId: string // uuid
variantIds: string[] // ≤ 50 items
}Salida
{
requested: boolean
reviews: Record<string, unknown>[]
issues: Array<{
code: string
field: string
severity: "error" | "warning"
}>
}Aprueba o rechaza una petición de revisión con un comentario. Solo los revisores de la marca; el equipo de Nömad nunca aprueba por la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.reviews.decide |
| Herramienta MCP | publishing_reviews_decide |
| Alcance | publishing.write |
| Rol mínimo | Lector |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
requestId: string // uuid
decision: "approved" | "rejected"
comment: string // ≤ 10000
}Salida
{
ok: true
}Añade un comentario al hilo de una publicación (interno, para el cliente o nota de Nömad) y avisa a quien corresponde.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.comments.add |
| Herramienta MCP | publishing_comments_add |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postId: string // uuid
text: string // ≤ 10000
visibility: "internal" | "client" | "nomad"
mentions?: unknown[] // ≤ 50 items · default []
inserts?: unknown[] // ≤ 20 items · default []
}Salida
{
comment: Record<string, unknown>
}Cancela o reintenta todos los destinos de las publicaciones elegidas. Una negativa no deshace las demás.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.posts.mutate |
| Herramienta MCP | publishing_posts_mutate |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
postIds: string[] // ≤ 100 items
action: "cancel" | "retry"
}Salida
{
results: Array<{
variantId: string // uuid
ok: boolean
error?: string
}>
}Cancela, reintenta o marca como publicados a mano los destinos elegidos. Cada destino responde por su cuenta.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.variants.mutate |
| Herramienta MCP | publishing_variants_mutate |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
variantIds: string[] // ≤ 100 items
action: "cancel" | "retry" | "manual_complete"
permalink?: string // ≤ 2048
}Salida
{
results: Array<{
variantId: string // uuid
ok: boolean
error?: string
}>
}Registra un destino publicado a mano, con su enlace y la hora en que salió cuando se conocen.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.variants.mark_published |
| Herramienta MCP | publishing_variants_mark_published |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postId: string // uuid
variantId: string // uuid
permalink?: string | null
publishedAt?: string | null
}Salida
{
ok: true
}Elimina publicaciones que nunca llegaron a una red (borradores, programadas, canceladas o fallidas). Una publicación ya publicada se queda en el historial de la marca, también si se retiró de la red. Una negativa no deshace las demás.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.posts.delete |
| Herramienta MCP | publishing_posts_delete |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postIds: string[] // ≤ 100 items
}Salida
{
results: Array<{
postId: string // uuid
ok: boolean
error?: string
newPostId?: string // uuid
}>
}Copia publicaciones en borradores nuevos: contenido, destinos y archivos; nunca fechas, revisiones ni entregas.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.posts.duplicate |
| Herramienta MCP | publishing_posts_duplicate |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postIds: string[] // ≤ 50 items
}Salida
{
results: Array<{
postId: string // uuid
ok: boolean
error?: string
newPostId?: string // uuid
}>
}Empieza una publicación: añade el trabajo gratuito «Post» con su tarea y devuelve la ruta que abrir. Con una idea, la convierte en esa publicación.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.posts.start_work |
| Herramienta MCP | publishing_posts_start_work |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
at?: string // date-time
tz?: string // ≤ 64
ideaPostId?: string // uuid
attemptId?: string // uuid
}Salida
{
href: string
}Asigna todos los destinos previstos de una red a una de sus cuentas conectadas. Repetirlo no cambia nada.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.planned.bind |
| Herramienta MCP | publishing_planned_bind |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
network: string // ≤ 60
connectionId: string // uuid
}Salida
{
bound: integer // -9007199254740991–9007199254740991
scheduled: integer // -9007199254740991–9007199254740991
datePassed: integer // -9007199254740991–9007199254740991
skipped: integer // -9007199254740991–9007199254740991
}Elimina de su red un destino publicado y lo registra. Solo se registra si la red lo confirma; si falla, sigue publicado.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.remote.delete |
| Herramienta MCP | publishing_remote_delete |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, Pantallas, Apps |
| Estado | Disponible |
Entrada
{
variantId: string // uuid
}Salida
{
variantId: string // uuid
postId: string // uuid
outcome: "deleted" | "already_gone" | "already_deleted"
deletedAt: string | null
}Lee los archivos adjuntos como los leerá la entrega y lanza la comprobación de los que no la tienen. Devuelve el estado de cada uno.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.media.prepare |
| Herramienta MCP | publishing_media_prepare |
| Alcance | publishing.write |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
fileIds: string[] // ≤ 50 items
start?: boolean
retry?: boolean
}Salida
{
media: Record<string, unknown>[]
}Lanza la comprobación de un archivo o una versión adaptada (medidas, encuadre, formato, fotogramas, peso). El original nunca se sobrescribe.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.media.start_job |
| Herramienta MCP | publishing_media_start_job |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
fileId: string // uuid
recipe?: {
width?: integer // -9007199254740991–9007199254740991
height?: integer // -9007199254740991–9007199254740991
fit?: "cover" | "contain"
format?: "jpeg" | "mp4"
fps?: integer // -9007199254740991–9007199254740991
maxBytes?: integer // -9007199254740991–9007199254740991
}
}Salida
{
job: Record<string, unknown>
}Acepta la versión adaptada de un archivo para usarla al publicar. El original se queda como estaba.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.media.accept_derivative |
| Herramienta MCP | publishing_media_accept_derivative |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
derivativeId: string // uuid
}Salida
{
media: Record<string, unknown>
}Guarda la política de aprobación de la marca (nadie, equipo, equipo y cliente), sus revisores y la zona horaria.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.settings.configure_policy |
| Herramienta MCP | publishing_settings_configure_policy |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
policy: Record<string, unknown> // `PublishingPolicy` as settings › Publicación edits it.
}Salida
{
policy: Record<string, unknown>
}Guarda los huecos semanales y la zona horaria de la cola de una cuenta conectada.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.settings.configure_queue |
| Herramienta MCP | publishing_settings_configure_queue |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
queue: Record<string, unknown> // `PublishingQueue`: connectionId, timezone, slots, version, ambiguousTime.
}Salida
{
queue: Record<string, unknown>
}Pausa o reanuda la publicación de toda la marca o de una cuenta. Mientras está en pausa nada sale.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.settings.pause |
| Herramienta MCP | publishing_settings_pause |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
paused: boolean
connectionId?: string // uuid
}Salida
{
policy: Record<string, unknown>
queues: Record<string, unknown>[]
}Aplica el nuevo orden de la cola de una cuenta tal como se previsualizó. Si algo cambió desde entonces, no aplica nada.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.queue.reorder |
| Herramienta MCP | publishing_queue_reorder |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
connectionId: string // uuid
variantIds: string[] // ≤ 100 items
expectedPlan: Record<string, unknown>[] // ≤ 100 items
}Salida
{
ok: true
}Crea un enlace de revisión, válido siete días, para cada correo del cliente que aún no ha decidido.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.external_reviews.issue_links |
| Herramienta MCP | publishing_external_reviews_issue_links |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
requestId: string // uuid
}Salida
{
links: Array<{
email: string
url: string
expiresAt: string
}>
}Revoca el enlace de revisión de un correo del cliente en una petición de revisión.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.external_reviews.revoke_link |
| Herramienta MCP | publishing_external_reviews_revoke_link |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
requestId: string // uuid
email: string // email · ≤ 254
}Salida
{
ok: true
}Vuelve a importar los últimos 90 días de publicaciones de una conexión de Instagram, Facebook o Threads.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.history.rerun_import |
| Herramienta MCP | publishing_history_rerun_import |
| Alcance | publishing.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
connectionId: string // uuid
}Salida
{
status: "queued" | "running"
runId: string | null
}Mueve destinos de una publicación a otra hora, como el compositor. Si el cambio cuesta una aprobación, la pide otra vez.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.calendar.reschedule |
| Herramienta MCP | publishing_calendar_reschedule |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
variantIds: string[] // ≤ 50 items
scheduledAt: string // date-time
timeZone: string // ≤ 100
}Salida
{
variants: Array<{
variantId: string // uuid
status: string
scheduledAt: string | null
}>
reviewRequested: boolean
needsApproval: boolean
}Intercambia las horas de dos publicaciones programadas. Si un paso falla, deshace los anteriores.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.calendar.swap |
| Herramienta MCP | publishing_calendar_swap |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
firstVariantId: string // uuid
secondVariantId: string // uuid
}Salida
{
variants: Array<{
variantId: string // uuid
status: string
scheduledAt: string | null
}>
reviewRequested: boolean
needsApproval: boolean
}Crea un borrador nuevo con el mismo texto, archivos y destinos, sin fecha, con el título que se elija.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.calendar.duplicate |
| Herramienta MCP | publishing_calendar_duplicate |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postId: string // uuid
title: string // ≤ 500
}Salida
{
postId: string // uuid
}La marca aprueba todos los destinos que preparó Nömad; salen a su hora.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.agency.accept |
| Herramienta MCP | publishing_agency_accept |
| Alcance | publishing.write |
| Rol mínimo | Lector |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postId: string // uuid
note?: string // ≤ 10000 · default ""
}Salida
{
state: string
}La marca guarda su cambio sobre la publicación de Nömad y la aprueba en un solo paso; puede mover la hora.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.agency.accept_with_changes |
| Herramienta MCP | publishing_agency_accept_with_changes |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
draft: Record<string, unknown> // The composer draft (`PublishingPostDraft`): id and expectedVersion to edit, title, baseText, tags, media and one variant per destination.
schedule: {
mode: "fixed" | "now"
scheduledAt?: string // date-time
timezone: string // ≤ 100
}
| null
note?: string // ≤ 10000 · default ""
}Salida
{
state: string
}La marca pide cambios en una publicación de Nömad, siempre diciendo qué cambiar; la tarea de Nömad se reabre.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.agency.request_changes |
| Herramienta MCP | publishing_agency_request_changes |
| Alcance | publishing.write |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postId: string // uuid
note: string // ≤ 10000
}Salida
{
state: string
}Nömad registra lo que dijo el cliente fuera de la app: quién, por qué canal y cuándo. Solo el equipo de Nömad.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.agency.record_approval |
| Herramienta MCP | publishing_agency_record_approval |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postId: string // uuid
decision: "approved" | "rejected"
channel: string // ≤ 40
approverName: string // ≤ 200
decidedAt: string // date-time
note: string // ≤ 10000
}Salida
{
state: string
}Crea un enlace de aprobación de una publicación para un contacto. Por correo lo envía Nömad; por WhatsApp o para copiar se comparte.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.approval_links.create |
| Herramienta MCP | publishing_approval_links_create |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postId: string // uuid
channel: "email" | "whatsapp" | "link"
email?: string | null
label?: string | null
}Salida
{
url: string
expiresAt: string
emailed: boolean
}Revoca un enlace de aprobación de una publicación; deja de funcionar al momento.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.approval_links.revoke |
| Herramienta MCP | publishing_approval_links_revoke |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postId: string // uuid
linkId: string // uuid
}Salida
{
ok: true
}Nödo propone temas para una publicación desde el plan, el briefing y lo publicado. No guarda nada.
Consume presupuesto de IA de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.writer.topics |
| Herramienta MCP | publishing_writer_topics |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId?: string | null
postId?: string | null
exclude?: string[] // ≤ 30 items
like?: {
title: string // ≤ 200
angle: string | null
source: string // ≤ 40
pillar: string | null
date: string | null
}
| null
}Salida
{
result: Record<string, unknown>
}Nödo escribe un borrador para las redes elegidas con la voz de la marca. No guarda nada: la persona elige y guarda.
Consume presupuesto de IA de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.writer.compose |
| Herramienta MCP | publishing_writer_compose |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId?: string | null
postId?: string | null
prompt: string // ≤ 2000
topic?: {
title: string // ≤ 200
angle: string | null
source: string // ≤ 40
pillar: string | null
date: string | null
}
| null
template?: string | null
goal?: string | null
length: string // ≤ 20
cta: boolean
source?: {
kind: "link"
url: string // ≤ 2048
}
| {
kind: "briefing"
}
| {
kind: "text"
text: string // ≤ 20000
}
| null
without?: string[] // ≤ 20 items · default []
connectionId: string | null
targets: Array<{
connectionId: string // ≤ 80
format: string // ≤ 40
}> // ≤ 20 items
}Salida
{
result: Record<string, unknown>
}Nödo reescribe un texto (más corto, otro tono, traducido…) respetando las reglas de la marca. No guarda nada.
Consume presupuesto de IA de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.writer.refine |
| Herramienta MCP | publishing_writer_refine |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId?: string | null
postId?: string | null
text: string // ≤ 10000
action: string // ≤ 40
instruction?: string | null
language?: string | null
subject?: string | null
connectionId: string | null
targets: Array<{
connectionId: string // ≤ 80
format: string // ≤ 40
}> // ≤ 20 items
hashtags: string[] // ≤ 20 items
}Salida
{
result: Record<string, unknown>
}Nödo adapta un texto a cada red elegida con sus reglas y la voz de la marca. No guarda nada.
Consume presupuesto de IA de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.writer.adapt |
| Herramienta MCP | publishing_writer_adapt |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId?: string | null
postId?: string | null
text: string // ≤ 10000
targets: Array<{
connectionId: string // ≤ 80
format: string // ≤ 40
}> // ≤ 20 items
}Salida
{
result: Record<string, unknown>
}Anota en una publicación guardada que Nödo ayudó a escribirla y con qué fuentes y redes.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.writer.mark_assisted |
| Herramienta MCP | publishing_writer_mark_assisted |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
postId: string // uuid
sources: string[] // ≤ 20 items
networks: string[] // ≤ 20 items
}Salida
{
recorded: boolean
}Guarda el ritmo semanal (huecos por red y pilar) de una tarea de plan editorial, con su revisión.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.editorial_plan.save_rhythm |
| Herramienta MCP | publishing_editorial_plan_save_rhythm |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
slots: unknown[] // ≤ 42 items
expectedRevision: integer // 0–9007199254740991
}Salida
{
board: Record<string, unknown>
}Guarda el plan del mes (ideas por fecha) de una tarea de plan editorial, con su revisión.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.editorial_plan.save_month |
| Herramienta MCP | publishing_editorial_plan_save_month |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
plan: unknown
expectedRevision: integer // 0–9007199254740991
}Salida
{
board: Record<string, unknown>
}Nödo sustituye el ritmo y las ideas por defecto de un plan editorial por unos propios de la marca.
Consume presupuesto de IA de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.editorial_plan.improve |
| Herramienta MCP | publishing_editorial_plan_improve |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
locale?: string // default "es"
}Salida
{
board: Record<string, unknown>
}Nödo propone un mes más equilibrado como diferencia; no se guarda nada hasta que la marca lo acepta.
Consume presupuesto de IA de la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.editorial_plan.propose_rebalance |
| Herramienta MCP | publishing_editorial_plan_propose_rebalance |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
locale?: string // default "es"
}Salida
{
plan: Record<string, unknown>
sources: Record<string, unknown>[]
}Aprueba el ritmo o el mes de un plan editorial desde su tablero. En la marca solo quien aprueba el trabajo; el equipo de Nömad aprueba por la marca.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.editorial_plan.approve |
| Herramienta MCP | publishing_editorial_plan_approve |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
part: "rhythm" | "month" | "retry"
expectedRevision: integer // 0–9007199254740991
}Salida
{
board: Record<string, unknown>
}Cambia los textos de un tema del banco de temas de la marca (tema, descripción, mensaje, gancho, categoría, etapa, red, formato, notas). Lo que no se envía no cambia.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.themes.update |
| Herramienta MCP | publishing_themes_update |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
themeId: string // uuid
changes: {
theme?: string // ≤ 500
description?: string | null
key_message?: string | null
hook_idea?: string | null
category?: string // ≤ 80
target_stage?: string // ≤ 80
recommended_network?: string | null
content_type?: string | null
production_notes?: string | null
}
}Salida
{
ok: true
changed: string[]
}Saca un tema activo del banco de temas para todo el mundo. Se puede deshacer con publishing.themes.restore.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.themes.delete |
| Herramienta MCP | publishing_themes_delete |
| Alcance | publishing.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
themeId: string // uuid
}Salida
{
ok: true
}Devuelve al banco de temas un tema eliminado.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.themes.restore |
| Herramienta MCP | publishing_themes_restore |
| Alcance | publishing.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
themeId: string // uuid
}Salida
{
ok: true
}Añade a mano un tema al banco de temas de la marca. Devuelve el tema creado.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.themes.create |
| Herramienta MCP | publishing_themes_create |
| Alcance | publishing.write |
| Rol mínimo | Miembro |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
theme: string // ≤ 500
description?: string // ≤ 4000
category?: string // ≤ 80
target_stage?: string // ≤ 80
key_message?: string // ≤ 2000
hook_idea?: string // ≤ 2000
}Salida
{
theme: {
id: string // uuid
theme: string
}
}Pide a la IA un banco de temas nuevo (full) o 60 temas más sin borrar los que hay (append). Corre en segundo plano; devuelve la generación.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.themes.generate |
| Herramienta MCP | publishing_themes_generate |
| Alcance | publishing.write |
| Rol mínimo | Admin |
| Confirmación humana | Sí |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
mode: "full" | "append"
}Salida
{
generationId: string // uuid
}Marca como fallida la última generación del banco de temas que se quedó «generando», para poder lanzar otra.
| Campo | Valor |
|---|---|
| Tipo | Escritura |
| Método HTTP | POST /api/v1/publishing.themes.reset_status |
| Herramienta MCP | publishing_themes_reset_status |
| Alcance | publishing.write |
| Rol mínimo | Admin |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{}Salida
{
ok: true
reset: boolean
}Lo que Nömad preparó y espera la aprobación de la marca, más reciente primero, sin lo que espera a otra persona que aprueba.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/publishing.posts.awaiting |
| Herramienta MCP | publishing_posts_awaiting |
| Alcance | publishing.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
limit?: integer // 1–20 · default 4
}Salida
{
items: Record<string, unknown>[]
total: integer // 0–9007199254740991
savedTimeZone: string | null
}El tablero de un paso de plan editorial: ritmo, mes, si puedes editarlo o aprobarlo y quién lo aprueba. Quien puede editar ve el primer ritmo o el mes como vista previa.
| Campo | Valor |
|---|---|
| Tipo | Lectura |
| Método HTTP | POST /api/v1/publishing.editorial_plan.board |
| Herramienta MCP | publishing_editorial_plan_board |
| Alcance | publishing.read |
| Rol mínimo | Lector |
| Confirmación humana | No |
| Puertas | API, MCP, Pantallas, Apps, Nödo |
| Estado | Disponible |
Entrada
{
taskId: string // uuid
fallbackPillars?: string[] // ≤ 6 items · default []
preview?: boolean // Staff previewing the brand as a client: edit controls are left out.
}Salida
{
board: {
canEdit: boolean
canApprove: boolean
approverNames: string[]
}
}Actualizado el 1 de enero de 1970