Content items for this project
The editorial pieces produced for this project, paginated — their topic, the formats derived from them, and the production status of each.
The editorial pieces produced for this project, paginated — their topic, the formats derived from them, and the production status of each.
These are produced pieces, not the crawled pages of GET /audits/content. The two are different populations and they do not overlap: this endpoint lists what the content engine wrote, the other counts what the crawler found on the site. A project that has audited sixty-eight pages and produced nothing returns an empty list here — that is an accurate answer, not an error.
This is the list behind GET /contents/{contentId}. It carries enough to choose a piece, not the piece's body.
/v1/projects/{projectId}/contentsAuthorization
agent-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
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.
uuidQuery Parameters
Items per page. Values above 50 are silently reduced to 50 — the response is not an error, it is simply shorter than asked. Read the returned length rather than assuming it.
1 <= value <= 5020Page to read, 1-based.
1 <= value1Response 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/contents" \ -H "Authorization: Bearer <token>"{ "contents": [ { "topic": { "id": "6b1d8e35-4c70-4a92-8f16-2d9c7a0b5e48", "projectId": "8f14e45f-ea0e-4b1e-9b7a-2c3d4e5f6071", "title": "Why an incomplete Google listing costs calls", "description": "How the three fields readers check before calling — hours, photos, answered reviews — decide whether a listing converts.", "strategic_note": "Ranks for the queries the audit found unanswered, and the proof is already on hand.", "marketing_goal": "Get a first audit request from a local business owner", "target_problem": "People find me but never call", "keywords": [ "fiche google incomplète", "visibilité locale artisan" ], "intent": "informationnelle", "persona": "P1 restaurateur", "category": "actionable_advice", "cluster": "visibilité locale", "funnelStage": "TOFU", "personaRelevance": { "P1 restaurateur": 0.82, "P2 artisan": 0.47 }, "recommendedFormats": [ "how_to", "checklist" ], "recommendedCTA": "Check your own listing in two minutes", "seoTitle": "Incomplete Google listing: the 3 fields that cost you calls", "status": "approved", "archivedAt": "2026-09-12T16:20:05.000Z", "archiveReason": "Covered by a piece published in July; keeping both would split the same query.", "createdAt": "2026-08-30T10:22:41.000Z", "updatedAt": "2026-09-19T04:31:52.000Z" }, "topicId": "6b1d8e35-4c70-4a92-8f16-2d9c7a0b5e48", "canonicalTitle": "Why an incomplete Google listing costs calls", "clusterName": "visibilité locale", "pillarName": "SEO local", "personaLabel": "P1 restaurateur", "category": "actionable_advice", "centralMessage": "Three fields decide whether a listing gets called.", "selectedAngle": "show_common_mistake", "desiredImpact": "motivate_to_act", "targetProblem": "People find me but never call", "marketingGoal": "Get a first audit request from a local business owner", "possibleAngles": [ "show_common_mistake", "propose_solution", "illustrate_with_example" ], "recommendedFormats": [ "how_to", "checklist" ], "keywords": [ "fiche google incomplète", "visibilité locale artisan" ], "strategicNote": "Lead with the search that ends without a call; the audit has the figure.", "recommendedStructure": [ "What a reader checks first", "What a complete listing changes", "What the numbers say" ], "recommendedPhrases": [ "dit autrement", "ce que ça change concrètement" ], "recommendedCTA": "Check your own listing in two minutes", "intent": "informationnelle", "funnelStage": "TOFU", "generationProvenance": { "sourceType": "ai-assisted", "auditAligned": true }, "generationStatus": "ready", "formats": [ { "id": "f1c07a49-3b82-4d16-9a5e-8c4d2b6f7013", "contentId": "d94b2f60-1a77-4c85-9e13-6b0f2a7c8d41", "format": "how_to", "status": "published", "platform": "linkedin", "format_family": "long_form", "format_variant": "article", "title": "Incomplete Google listing: the three fields that cost you calls", "subtitle": "What a reader checks before picking up the phone", "summary": "Opening hours, photos and answered reviews decide the call. Here is how to check each one.", "createdAt": "2026-09-16T11:52:44.000Z", "updatedAt": "2026-09-24T08:15:27.000Z" } ] } ], "pagination": { "page": 1, "pageSize": 20, "totalPages": 3, "totalItems": 47 }}Generated from the capability registry — API version 1, 18 paths, from 4815355 (2026-10-12).