Digitalyser.io for developers
API referenceEditorial

A single editorial calendar entry

One calendar entry: its framing, its production status, and the reason it failed if it did.

One calendar entry: its framing, its production status, and the reason it failed if it did.

This is the polling probe for social production. A piece moves through planned → in_production → validating → ready_to_post, or lands on rejected/failed with a failureReason. Read it until the status is terminal; there is no callback.

GET/v1/projects/{projectId}/editorial-calendar/{itemId}

Authorization

agent-token
AuthorizationBearer <token>

An agent project token. Obtained by OAuth consent for an AI client, or derived per project from an organisation service key for a machine. A scoped API key authenticates the transport but opens no capability: a capability takes its project from the credential.

In: header

Path Parameters

projectId*string

The project this call is about. A routing hint, not an authorisation. The project comes from the credential; this segment exists so multi-project code stays uniform. If it names a project outside the token, the call is refused with routing_hint_mismatch.

Formatuuid
itemId*string

The calendar entry to read. Obtained from GET /editorial-calendar, or returned by the capability that queues a piece for production.

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://app.digitalyser.io/api/v1/projects/550e8400-e29b-41d4-a716-446655440000/editorial-calendar/550e8400-e29b-41d4-a716-446655440000" \  -H "Authorization: Bearer <token>"
{  "projectId": "8f14e45f-ea0e-4b1e-9b7a-2c3d4e5f6071",  "title": "Three signs your Google listing is costing you calls",  "weekLabel": "S39",  "dayLabel": "mardi",  "plannedDate": "2026-09-29",  "format": "reel",  "status": "ready_to_post",  "personas": [    "P1 restaurateur",    "P2 artisan"  ],  "funnelStage": "TOFU",  "topicId": "6b1d8e35-4c70-4a92-8f16-2d9c7a0b5e48",  "productionBrief": {    "hook": {      "pattern": "chiffre-contre-intuitif",      "onScreen": "68% of local searches end without a call",      "spoken": "Sixty-eight percent of local searches end without a single call."    },    "scenes": [      {        "index": 2,        "duration": 4,        "onScreenText": "Three quarters of the calls never happen",        "voiceover": "Most of those searches end on a listing that answers nothing.",        "visualDescription": "Screen recording of a listing with no opening hours, zoomed on the empty field"      }    ],    "slides": [      {        "index": 3,        "role": "preuve",        "title": "What a complete listing changes",        "body": "Opening hours, photos and answered reviews: the three fields that decide whether someone calls.",        "visualDescription": "Side-by-side of the same listing before and after completion"      }    ],    "post": {      "onScreenText": "Your listing answers one question out of three",      "visualDescription": "Close-up of a phone showing an incomplete listing"    },    "caption": "Three fields decide whether someone calls you. Most listings fill one.",    "hashtags": [      "visibilitelocale",      "artisan",      "googlebusiness"    ],    "microStep": "Tester",    "cta": "Check your own listing in two minutes — link in bio.",    "heygenSceneBriefs": [      {        "scene": 2,        "prompt": "Medium shot, neutral background, calm delivery, no gestures",        "script": "Most of those searches end on a listing that answers nothing."      }    ],    "montageBrief": "Cut on the beat between scenes 2 and 3, keep the screen recording full-frame.",    "revisions": [      {        "at": "2026-09-22T11:04:37.000Z",        "hint": "The hook states a figure without naming its source."      }    ]  },  "packageAssets": {    "folder": "social/acme/S39-mardi",    "assembledAt": "2026-09-27T08:22:10.000Z",    "files": [      {        "name": "caption.txt",        "kind": "caption",        "url": "https://assets.example/social/acme/S39-mardi/visual-1.png",        "content": "Three fields decide whether someone calls you. Most listings fill one."      }    ]  },  "decisionLog": [    {      "at": "2026-09-26T14:07:52.000Z",      "source": "dashboard",      "decision": "validate",      "feedback": "Hook is good; trim the last scene by a second.",      "postUrl": "https://social.example/p/acme-S39-mardi"    }  ],  "failureReason": "The judge rejected the hook twice; production stopped rather than publish a third attempt.",  "createdAt": "2026-09-15T09:41:18.000Z",  "updatedAt": "2026-09-26T14:07:52.000Z"}

Generated from the capability registry — API version 1, 18 paths, from 4815355 (2026-10-12).

Was this page helpful?