Outputs
Add outputs to a story, edit, regenerate and check them, render a post's cards, and file or publish them to a content management system or social account.
x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$The story's outputs, newest request first
application/json- response
items*array<>curl -X GET 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs'{ "items": [ { "id": "string", "orgId": "string", "storyId": "string", "outputTemplateId": "string", "type": "web_article", "status": "pending", "attempts": 0, "generatedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "editedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateGeneratedAt": "2019-08-24T14:15:22Z", "previousContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "previousGeneratedAt": "2019-08-24T14:15:22Z", "contentVersion": 0, "textVersion": 0, "error": "string", "generatedAt": "2019-08-24T14:15:22Z", "createdBy": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedBy": "string", "updatedAt": "2019-08-24T14:15:22Z", "siblingOutputId": "string", "templateName": "string", "content": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "isStale": true, "wordCount": 0, "storyboardDurationMs": 0, "storyboardBand": "short", "createdByName": "string", "updatedByName": "string", "cmsPushCount": 0, "brandKitId": "string", "candidateInstructions": "string", "mediaFlags": [ { "item": 0, "field": "string", "reason": "unverified_quote" } ], "imageFlags": [ { "field": "string", "reason": "alt_photo_missing" } ], "quoteFlags": [ { "field": "string", "spans": [ "string" ], "reason": "dismissed_quote" } ], "claimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }, "candidateClaimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] } } ]}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$application/json- body
outputTemplateId*stringOutput template identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Output requested; generation starts asynchronously
application/json- response
id*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$orgId*stringOwning organization identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyId*stringStory this output was generated from
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputTemplateId*stringTemplate whose rules produced this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$type*stringOutput type, snapshotted from the template at creation
"web_article""x_post""instagram_post""tiktok_post""facebook_post""linkedin_post""short_form_video"status*stringGeneration status; carries no push state
"pending""generating""ready""failed"attempts*integerTransient-failure retry count for the generation pass
0 <= valuegeneratedContent*|||What the model wrote; null until the first successful generation
editedContent*|||The editor's version; null means the generated content is the effective one
candidateContent*|||A regenerated draft awaiting accept or discard; null when none is pending
candidateGeneratedAt*stringISO 8601 timestamp the pending candidate was generated; null when none is pending
date-timepreviousContent*|||The article before the last accepted regeneration replaced it; null before any accept
previousGeneratedAt*stringISO 8601 timestamp the previous draft was generated; null before any accept
date-timecontentVersion*integerHow many times the effective article has changed; advanced by a first generation, an accepted candidate and a saved edit
0 <= valuetextVersion*integerHow many times the text the claim check reads has changed; a check is outdated by an edit once this moves past the version it read
0 <= valueerror*stringFailure reason; null unless status is failed
generatedAt*stringISO 8601 timestamp of the most recent successful generation
date-timecreatedBy*stringUser who added this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$createdAt*stringISO 8601 creation timestamp
date-timeupdatedBy*stringUser who last changed this output; null when the last change was the generation pass's
^[0-7][0-9A-HJKMNP-TV-Z]{25}$updatedAt*stringISO 8601 timestamp of the most recent update
date-timesiblingOutputId?stringThe short-form video output this post's video slot links to; null when the post has no video slot
^[0-7][0-9A-HJKMNP-TV-Z]{25}$templateName*stringName of the template whose rules produced this output
content*|||Effective content: the edited version when present, otherwise the generated one
isStale*booleanWhether the story has been enriched since this output was generated
wordCount*integerWord count of the effective article body; null until content exists, and for a post
0 <= valuestoryboardDurationMs*integerTotal duration of the effective storyboard's scenes in milliseconds; null for any other type or until content exists
0 <= valuestoryboardBand*stringWhere the storyboard's total duration sits against the template's band; null for any other type or until content exists
"short""within""long"nullcreatedByName*stringDisplay name of the user who added this output
updatedByName*stringDisplay name of the user who last changed this output; null when the generation pass did
cmsPushCount*integerNumber of CMS pushes recorded for this output, so the story page can show 'filed' without an N+1
0 <= valuebrandKitId*stringId of the brand kit a short-form video or a post's cards would render in now (template kit if active, else the desk's default, else the org's); null for an article or a text-only post, until the output has a storyboard or cards, when no kit resolves, and on reads that do not resolve it
candidateInstructions*stringSteering that produced the pending candidate; null unless a candidate is pending
mediaFlags?array<>Card fields an editor should look at, on a single-output read of a post with media; absent on other reads
imageFlags?array<>Article image fields an editor should look at, on a single-output read of an article with images; absent on other reads
quoteFlags?array<>Text fields quoting words only a since-dismissed key quote holds, which the X publish and the CMS push refuse; on a single-output read only, absent on other reads
claimCheck*The article's claim check: state, trace, figure findings and acceptances
candidateClaimCheck?The pending regenerated draft's claim check; null when no draft is pending; absent on list reads
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs' \ -H 'Content-Type: application/json' \ -d '{ "outputTemplateId": "string"}'{ "id": "string", "orgId": "string", "storyId": "string", "outputTemplateId": "string", "type": "web_article", "status": "pending", "attempts": 0, "generatedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "editedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateGeneratedAt": "2019-08-24T14:15:22Z", "previousContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "previousGeneratedAt": "2019-08-24T14:15:22Z", "contentVersion": 0, "textVersion": 0, "error": "string", "generatedAt": "2019-08-24T14:15:22Z", "createdBy": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedBy": "string", "updatedAt": "2019-08-24T14:15:22Z", "siblingOutputId": "string", "templateName": "string", "content": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "isStale": true, "wordCount": 0, "storyboardDurationMs": 0, "storyboardBand": "short", "createdByName": "string", "updatedByName": "string", "cmsPushCount": 0, "brandKitId": "string", "candidateInstructions": "string", "mediaFlags": [ { "item": 0, "field": "string", "reason": "unverified_quote" } ], "imageFlags": [ { "field": "string", "reason": "alt_photo_missing" } ], "quoteFlags": [ { "field": "string", "spans": [ "string" ], "reason": "dismissed_quote" } ], "claimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }, "candidateClaimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$The output, with its effective content and derived fields
application/json- response
id*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$orgId*stringOwning organization identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyId*stringStory this output was generated from
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputTemplateId*stringTemplate whose rules produced this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$type*stringOutput type, snapshotted from the template at creation
"web_article""x_post""instagram_post""tiktok_post""facebook_post""linkedin_post""short_form_video"status*stringGeneration status; carries no push state
"pending""generating""ready""failed"attempts*integerTransient-failure retry count for the generation pass
0 <= valuegeneratedContent*|||What the model wrote; null until the first successful generation
editedContent*|||The editor's version; null means the generated content is the effective one
candidateContent*|||A regenerated draft awaiting accept or discard; null when none is pending
candidateGeneratedAt*stringISO 8601 timestamp the pending candidate was generated; null when none is pending
date-timepreviousContent*|||The article before the last accepted regeneration replaced it; null before any accept
previousGeneratedAt*stringISO 8601 timestamp the previous draft was generated; null before any accept
date-timecontentVersion*integerHow many times the effective article has changed; advanced by a first generation, an accepted candidate and a saved edit
0 <= valuetextVersion*integerHow many times the text the claim check reads has changed; a check is outdated by an edit once this moves past the version it read
0 <= valueerror*stringFailure reason; null unless status is failed
generatedAt*stringISO 8601 timestamp of the most recent successful generation
date-timecreatedBy*stringUser who added this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$createdAt*stringISO 8601 creation timestamp
date-timeupdatedBy*stringUser who last changed this output; null when the last change was the generation pass's
^[0-7][0-9A-HJKMNP-TV-Z]{25}$updatedAt*stringISO 8601 timestamp of the most recent update
date-timesiblingOutputId?stringThe short-form video output this post's video slot links to; null when the post has no video slot
^[0-7][0-9A-HJKMNP-TV-Z]{25}$templateName*stringName of the template whose rules produced this output
content*|||Effective content: the edited version when present, otherwise the generated one
isStale*booleanWhether the story has been enriched since this output was generated
wordCount*integerWord count of the effective article body; null until content exists, and for a post
0 <= valuestoryboardDurationMs*integerTotal duration of the effective storyboard's scenes in milliseconds; null for any other type or until content exists
0 <= valuestoryboardBand*stringWhere the storyboard's total duration sits against the template's band; null for any other type or until content exists
"short""within""long"nullcreatedByName*stringDisplay name of the user who added this output
updatedByName*stringDisplay name of the user who last changed this output; null when the generation pass did
cmsPushCount*integerNumber of CMS pushes recorded for this output, so the story page can show 'filed' without an N+1
0 <= valuebrandKitId*stringId of the brand kit a short-form video or a post's cards would render in now (template kit if active, else the desk's default, else the org's); null for an article or a text-only post, until the output has a storyboard or cards, when no kit resolves, and on reads that do not resolve it
candidateInstructions*stringSteering that produced the pending candidate; null unless a candidate is pending
mediaFlags?array<>Card fields an editor should look at, on a single-output read of a post with media; absent on other reads
imageFlags?array<>Article image fields an editor should look at, on a single-output read of an article with images; absent on other reads
quoteFlags?array<>Text fields quoting words only a since-dismissed key quote holds, which the X publish and the CMS push refuse; on a single-output read only, absent on other reads
claimCheck*The article's claim check: state, trace, figure findings and acceptances
candidateClaimCheck?The pending regenerated draft's claim check; null when no draft is pending; absent on list reads
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string'{ "id": "string", "orgId": "string", "storyId": "string", "outputTemplateId": "string", "type": "web_article", "status": "pending", "attempts": 0, "generatedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "editedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateGeneratedAt": "2019-08-24T14:15:22Z", "previousContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "previousGeneratedAt": "2019-08-24T14:15:22Z", "contentVersion": 0, "textVersion": 0, "error": "string", "generatedAt": "2019-08-24T14:15:22Z", "createdBy": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedBy": "string", "updatedAt": "2019-08-24T14:15:22Z", "siblingOutputId": "string", "templateName": "string", "content": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "isStale": true, "wordCount": 0, "storyboardDurationMs": 0, "storyboardBand": "short", "createdByName": "string", "updatedByName": "string", "cmsPushCount": 0, "brandKitId": "string", "candidateInstructions": "string", "mediaFlags": [ { "item": 0, "field": "string", "reason": "unverified_quote" } ], "imageFlags": [ { "field": "string", "reason": "alt_photo_missing" } ], "quoteFlags": [ { "field": "string", "spans": [ "string" ], "reason": "dismissed_quote" } ], "claimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }, "candidateClaimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$application/json- body
headline*stringArticle headline
standfirst*stringThe dek/subhead; one or two sentences under the headline
body*stringArticle body as markdown
byline*stringByline text; empty when the template asks for no byline
featuredImage?The image shown above the article; null removes it, and leaving it out keeps the stored one
images?array<>Inline images; the body places image K with a line , and slots no line names are dropped. Leaving it out keeps the stored list. At most 5 once placed
contentVersion*integerThe contentVersion this draft was edited against; the save is refused if it moved
0 <= valueEdit saved; the generated draft is unchanged
application/json- response
id*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$orgId*stringOwning organization identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyId*stringStory this output was generated from
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputTemplateId*stringTemplate whose rules produced this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$type*stringOutput type, snapshotted from the template at creation
"web_article""x_post""instagram_post""tiktok_post""facebook_post""linkedin_post""short_form_video"status*stringGeneration status; carries no push state
"pending""generating""ready""failed"attempts*integerTransient-failure retry count for the generation pass
0 <= valuegeneratedContent*|||What the model wrote; null until the first successful generation
editedContent*|||The editor's version; null means the generated content is the effective one
candidateContent*|||A regenerated draft awaiting accept or discard; null when none is pending
candidateGeneratedAt*stringISO 8601 timestamp the pending candidate was generated; null when none is pending
date-timepreviousContent*|||The article before the last accepted regeneration replaced it; null before any accept
previousGeneratedAt*stringISO 8601 timestamp the previous draft was generated; null before any accept
date-timecontentVersion*integerHow many times the effective article has changed; advanced by a first generation, an accepted candidate and a saved edit
0 <= valuetextVersion*integerHow many times the text the claim check reads has changed; a check is outdated by an edit once this moves past the version it read
0 <= valueerror*stringFailure reason; null unless status is failed
generatedAt*stringISO 8601 timestamp of the most recent successful generation
date-timecreatedBy*stringUser who added this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$createdAt*stringISO 8601 creation timestamp
date-timeupdatedBy*stringUser who last changed this output; null when the last change was the generation pass's
^[0-7][0-9A-HJKMNP-TV-Z]{25}$updatedAt*stringISO 8601 timestamp of the most recent update
date-timesiblingOutputId?stringThe short-form video output this post's video slot links to; null when the post has no video slot
^[0-7][0-9A-HJKMNP-TV-Z]{25}$templateName*stringName of the template whose rules produced this output
content*|||Effective content: the edited version when present, otherwise the generated one
isStale*booleanWhether the story has been enriched since this output was generated
wordCount*integerWord count of the effective article body; null until content exists, and for a post
0 <= valuestoryboardDurationMs*integerTotal duration of the effective storyboard's scenes in milliseconds; null for any other type or until content exists
0 <= valuestoryboardBand*stringWhere the storyboard's total duration sits against the template's band; null for any other type or until content exists
"short""within""long"nullcreatedByName*stringDisplay name of the user who added this output
updatedByName*stringDisplay name of the user who last changed this output; null when the generation pass did
cmsPushCount*integerNumber of CMS pushes recorded for this output, so the story page can show 'filed' without an N+1
0 <= valuebrandKitId*stringId of the brand kit a short-form video or a post's cards would render in now (template kit if active, else the desk's default, else the org's); null for an article or a text-only post, until the output has a storyboard or cards, when no kit resolves, and on reads that do not resolve it
candidateInstructions*stringSteering that produced the pending candidate; null unless a candidate is pending
mediaFlags?array<>Card fields an editor should look at, on a single-output read of a post with media; absent on other reads
imageFlags?array<>Article image fields an editor should look at, on a single-output read of an article with images; absent on other reads
quoteFlags?array<>Text fields quoting words only a since-dismissed key quote holds, which the X publish and the CMS push refuse; on a single-output read only, absent on other reads
claimCheck*The article's claim check: state, trace, figure findings and acceptances
candidateClaimCheck?The pending regenerated draft's claim check; null when no draft is pending; absent on list reads
curl -X PATCH 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string' \ -H 'Content-Type: application/json' \ -d '{ "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "contentVersion": 0}'{ "id": "string", "orgId": "string", "storyId": "string", "outputTemplateId": "string", "type": "web_article", "status": "pending", "attempts": 0, "generatedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "editedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateGeneratedAt": "2019-08-24T14:15:22Z", "previousContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "previousGeneratedAt": "2019-08-24T14:15:22Z", "contentVersion": 0, "textVersion": 0, "error": "string", "generatedAt": "2019-08-24T14:15:22Z", "createdBy": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedBy": "string", "updatedAt": "2019-08-24T14:15:22Z", "siblingOutputId": "string", "templateName": "string", "content": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "isStale": true, "wordCount": 0, "storyboardDurationMs": 0, "storyboardBand": "short", "createdByName": "string", "updatedByName": "string", "cmsPushCount": 0, "brandKitId": "string", "candidateInstructions": "string", "mediaFlags": [ { "item": 0, "field": "string", "reason": "unverified_quote" } ], "imageFlags": [ { "field": "string", "reason": "alt_photo_missing" } ], "quoteFlags": [ { "field": "string", "spans": [ "string" ], "reason": "dismissed_quote" } ], "claimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }, "candidateClaimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Output deleted
curl -X DELETE 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string'x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$application/json- body
instructions?stringOne-off steering for this run only; held until the candidate it produced is accepted or discarded
length <= 2000Output returned to the queue for a fresh draft
application/json- response
id*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$orgId*stringOwning organization identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyId*stringStory this output was generated from
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputTemplateId*stringTemplate whose rules produced this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$type*stringOutput type, snapshotted from the template at creation
"web_article""x_post""instagram_post""tiktok_post""facebook_post""linkedin_post""short_form_video"status*stringGeneration status; carries no push state
"pending""generating""ready""failed"attempts*integerTransient-failure retry count for the generation pass
0 <= valuegeneratedContent*|||What the model wrote; null until the first successful generation
editedContent*|||The editor's version; null means the generated content is the effective one
candidateContent*|||A regenerated draft awaiting accept or discard; null when none is pending
candidateGeneratedAt*stringISO 8601 timestamp the pending candidate was generated; null when none is pending
date-timepreviousContent*|||The article before the last accepted regeneration replaced it; null before any accept
previousGeneratedAt*stringISO 8601 timestamp the previous draft was generated; null before any accept
date-timecontentVersion*integerHow many times the effective article has changed; advanced by a first generation, an accepted candidate and a saved edit
0 <= valuetextVersion*integerHow many times the text the claim check reads has changed; a check is outdated by an edit once this moves past the version it read
0 <= valueerror*stringFailure reason; null unless status is failed
generatedAt*stringISO 8601 timestamp of the most recent successful generation
date-timecreatedBy*stringUser who added this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$createdAt*stringISO 8601 creation timestamp
date-timeupdatedBy*stringUser who last changed this output; null when the last change was the generation pass's
^[0-7][0-9A-HJKMNP-TV-Z]{25}$updatedAt*stringISO 8601 timestamp of the most recent update
date-timesiblingOutputId?stringThe short-form video output this post's video slot links to; null when the post has no video slot
^[0-7][0-9A-HJKMNP-TV-Z]{25}$templateName*stringName of the template whose rules produced this output
content*|||Effective content: the edited version when present, otherwise the generated one
isStale*booleanWhether the story has been enriched since this output was generated
wordCount*integerWord count of the effective article body; null until content exists, and for a post
0 <= valuestoryboardDurationMs*integerTotal duration of the effective storyboard's scenes in milliseconds; null for any other type or until content exists
0 <= valuestoryboardBand*stringWhere the storyboard's total duration sits against the template's band; null for any other type or until content exists
"short""within""long"nullcreatedByName*stringDisplay name of the user who added this output
updatedByName*stringDisplay name of the user who last changed this output; null when the generation pass did
cmsPushCount*integerNumber of CMS pushes recorded for this output, so the story page can show 'filed' without an N+1
0 <= valuebrandKitId*stringId of the brand kit a short-form video or a post's cards would render in now (template kit if active, else the desk's default, else the org's); null for an article or a text-only post, until the output has a storyboard or cards, when no kit resolves, and on reads that do not resolve it
candidateInstructions*stringSteering that produced the pending candidate; null unless a candidate is pending
mediaFlags?array<>Card fields an editor should look at, on a single-output read of a post with media; absent on other reads
imageFlags?array<>Article image fields an editor should look at, on a single-output read of an article with images; absent on other reads
quoteFlags?array<>Text fields quoting words only a since-dismissed key quote holds, which the X publish and the CMS push refuse; on a single-output read only, absent on other reads
claimCheck*The article's claim check: state, trace, figure findings and acceptances
candidateClaimCheck?The pending regenerated draft's claim check; null when no draft is pending; absent on list reads
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/regenerate' \ -H 'Content-Type: application/json' \ -d '{}'{ "id": "string", "orgId": "string", "storyId": "string", "outputTemplateId": "string", "type": "web_article", "status": "pending", "attempts": 0, "generatedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "editedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateGeneratedAt": "2019-08-24T14:15:22Z", "previousContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "previousGeneratedAt": "2019-08-24T14:15:22Z", "contentVersion": 0, "textVersion": 0, "error": "string", "generatedAt": "2019-08-24T14:15:22Z", "createdBy": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedBy": "string", "updatedAt": "2019-08-24T14:15:22Z", "siblingOutputId": "string", "templateName": "string", "content": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "isStale": true, "wordCount": 0, "storyboardDurationMs": 0, "storyboardBand": "short", "createdByName": "string", "updatedByName": "string", "cmsPushCount": 0, "brandKitId": "string", "candidateInstructions": "string", "mediaFlags": [ { "item": 0, "field": "string", "reason": "unverified_quote" } ], "imageFlags": [ { "field": "string", "reason": "alt_photo_missing" } ], "quoteFlags": [ { "field": "string", "spans": [ "string" ], "reason": "dismissed_quote" } ], "claimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }, "candidateClaimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$application/json- body
subject?"candidate"Check the pending regenerated draft instead of the article
"candidate"Claim check queued (or already in flight for this text); poll the output until its check leaves pending
application/json- response
id*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$orgId*stringOwning organization identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyId*stringStory this output was generated from
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputTemplateId*stringTemplate whose rules produced this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$type*stringOutput type, snapshotted from the template at creation
"web_article""x_post""instagram_post""tiktok_post""facebook_post""linkedin_post""short_form_video"status*stringGeneration status; carries no push state
"pending""generating""ready""failed"attempts*integerTransient-failure retry count for the generation pass
0 <= valuegeneratedContent*|||What the model wrote; null until the first successful generation
editedContent*|||The editor's version; null means the generated content is the effective one
candidateContent*|||A regenerated draft awaiting accept or discard; null when none is pending
candidateGeneratedAt*stringISO 8601 timestamp the pending candidate was generated; null when none is pending
date-timepreviousContent*|||The article before the last accepted regeneration replaced it; null before any accept
previousGeneratedAt*stringISO 8601 timestamp the previous draft was generated; null before any accept
date-timecontentVersion*integerHow many times the effective article has changed; advanced by a first generation, an accepted candidate and a saved edit
0 <= valuetextVersion*integerHow many times the text the claim check reads has changed; a check is outdated by an edit once this moves past the version it read
0 <= valueerror*stringFailure reason; null unless status is failed
generatedAt*stringISO 8601 timestamp of the most recent successful generation
date-timecreatedBy*stringUser who added this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$createdAt*stringISO 8601 creation timestamp
date-timeupdatedBy*stringUser who last changed this output; null when the last change was the generation pass's
^[0-7][0-9A-HJKMNP-TV-Z]{25}$updatedAt*stringISO 8601 timestamp of the most recent update
date-timesiblingOutputId?stringThe short-form video output this post's video slot links to; null when the post has no video slot
^[0-7][0-9A-HJKMNP-TV-Z]{25}$templateName*stringName of the template whose rules produced this output
content*|||Effective content: the edited version when present, otherwise the generated one
isStale*booleanWhether the story has been enriched since this output was generated
wordCount*integerWord count of the effective article body; null until content exists, and for a post
0 <= valuestoryboardDurationMs*integerTotal duration of the effective storyboard's scenes in milliseconds; null for any other type or until content exists
0 <= valuestoryboardBand*stringWhere the storyboard's total duration sits against the template's band; null for any other type or until content exists
"short""within""long"nullcreatedByName*stringDisplay name of the user who added this output
updatedByName*stringDisplay name of the user who last changed this output; null when the generation pass did
cmsPushCount*integerNumber of CMS pushes recorded for this output, so the story page can show 'filed' without an N+1
0 <= valuebrandKitId*stringId of the brand kit a short-form video or a post's cards would render in now (template kit if active, else the desk's default, else the org's); null for an article or a text-only post, until the output has a storyboard or cards, when no kit resolves, and on reads that do not resolve it
candidateInstructions*stringSteering that produced the pending candidate; null unless a candidate is pending
mediaFlags?array<>Card fields an editor should look at, on a single-output read of a post with media; absent on other reads
imageFlags?array<>Article image fields an editor should look at, on a single-output read of an article with images; absent on other reads
quoteFlags?array<>Text fields quoting words only a since-dismissed key quote holds, which the X publish and the CMS push refuse; on a single-output read only, absent on other reads
claimCheck*The article's claim check: state, trace, figure findings and acceptances
candidateClaimCheck?The pending regenerated draft's claim check; null when no draft is pending; absent on list reads
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/claim-check' \ -H 'Content-Type: application/json' \ -d '{}'{ "id": "string", "orgId": "string", "storyId": "string", "outputTemplateId": "string", "type": "web_article", "status": "pending", "attempts": 0, "generatedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "editedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateGeneratedAt": "2019-08-24T14:15:22Z", "previousContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "previousGeneratedAt": "2019-08-24T14:15:22Z", "contentVersion": 0, "textVersion": 0, "error": "string", "generatedAt": "2019-08-24T14:15:22Z", "createdBy": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedBy": "string", "updatedAt": "2019-08-24T14:15:22Z", "siblingOutputId": "string", "templateName": "string", "content": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "isStale": true, "wordCount": 0, "storyboardDurationMs": 0, "storyboardBand": "short", "createdByName": "string", "updatedByName": "string", "cmsPushCount": 0, "brandKitId": "string", "candidateInstructions": "string", "mediaFlags": [ { "item": 0, "field": "string", "reason": "unverified_quote" } ], "imageFlags": [ { "field": "string", "reason": "alt_photo_missing" } ], "quoteFlags": [ { "field": "string", "spans": [ "string" ], "reason": "dismissed_quote" } ], "claimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }, "candidateClaimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$findingKey*string1 <= lengthapplication/json- body
note*stringWhy the finding is accepted; 1 to 1000 characters
1 <= length <= 1000checkerWrong?booleanFlag the finding as the checker's mistake
Finding accepted with the editor's note
application/json- response
id*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$orgId*stringOwning organization identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyId*stringStory this output was generated from
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputTemplateId*stringTemplate whose rules produced this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$type*stringOutput type, snapshotted from the template at creation
"web_article""x_post""instagram_post""tiktok_post""facebook_post""linkedin_post""short_form_video"status*stringGeneration status; carries no push state
"pending""generating""ready""failed"attempts*integerTransient-failure retry count for the generation pass
0 <= valuegeneratedContent*|||What the model wrote; null until the first successful generation
editedContent*|||The editor's version; null means the generated content is the effective one
candidateContent*|||A regenerated draft awaiting accept or discard; null when none is pending
candidateGeneratedAt*stringISO 8601 timestamp the pending candidate was generated; null when none is pending
date-timepreviousContent*|||The article before the last accepted regeneration replaced it; null before any accept
previousGeneratedAt*stringISO 8601 timestamp the previous draft was generated; null before any accept
date-timecontentVersion*integerHow many times the effective article has changed; advanced by a first generation, an accepted candidate and a saved edit
0 <= valuetextVersion*integerHow many times the text the claim check reads has changed; a check is outdated by an edit once this moves past the version it read
0 <= valueerror*stringFailure reason; null unless status is failed
generatedAt*stringISO 8601 timestamp of the most recent successful generation
date-timecreatedBy*stringUser who added this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$createdAt*stringISO 8601 creation timestamp
date-timeupdatedBy*stringUser who last changed this output; null when the last change was the generation pass's
^[0-7][0-9A-HJKMNP-TV-Z]{25}$updatedAt*stringISO 8601 timestamp of the most recent update
date-timesiblingOutputId?stringThe short-form video output this post's video slot links to; null when the post has no video slot
^[0-7][0-9A-HJKMNP-TV-Z]{25}$templateName*stringName of the template whose rules produced this output
content*|||Effective content: the edited version when present, otherwise the generated one
isStale*booleanWhether the story has been enriched since this output was generated
wordCount*integerWord count of the effective article body; null until content exists, and for a post
0 <= valuestoryboardDurationMs*integerTotal duration of the effective storyboard's scenes in milliseconds; null for any other type or until content exists
0 <= valuestoryboardBand*stringWhere the storyboard's total duration sits against the template's band; null for any other type or until content exists
"short""within""long"nullcreatedByName*stringDisplay name of the user who added this output
updatedByName*stringDisplay name of the user who last changed this output; null when the generation pass did
cmsPushCount*integerNumber of CMS pushes recorded for this output, so the story page can show 'filed' without an N+1
0 <= valuebrandKitId*stringId of the brand kit a short-form video or a post's cards would render in now (template kit if active, else the desk's default, else the org's); null for an article or a text-only post, until the output has a storyboard or cards, when no kit resolves, and on reads that do not resolve it
candidateInstructions*stringSteering that produced the pending candidate; null unless a candidate is pending
mediaFlags?array<>Card fields an editor should look at, on a single-output read of a post with media; absent on other reads
imageFlags?array<>Article image fields an editor should look at, on a single-output read of an article with images; absent on other reads
quoteFlags?array<>Text fields quoting words only a since-dismissed key quote holds, which the X publish and the CMS push refuse; on a single-output read only, absent on other reads
claimCheck*The article's claim check: state, trace, figure findings and acceptances
candidateClaimCheck?The pending regenerated draft's claim check; null when no draft is pending; absent on list reads
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/claim-findings/string/accept' \ -H 'Content-Type: application/json' \ -d '{ "note": "string"}'{ "id": "string", "orgId": "string", "storyId": "string", "outputTemplateId": "string", "type": "web_article", "status": "pending", "attempts": 0, "generatedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "editedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateGeneratedAt": "2019-08-24T14:15:22Z", "previousContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "previousGeneratedAt": "2019-08-24T14:15:22Z", "contentVersion": 0, "textVersion": 0, "error": "string", "generatedAt": "2019-08-24T14:15:22Z", "createdBy": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedBy": "string", "updatedAt": "2019-08-24T14:15:22Z", "siblingOutputId": "string", "templateName": "string", "content": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "isStale": true, "wordCount": 0, "storyboardDurationMs": 0, "storyboardBand": "short", "createdByName": "string", "updatedByName": "string", "cmsPushCount": 0, "brandKitId": "string", "candidateInstructions": "string", "mediaFlags": [ { "item": 0, "field": "string", "reason": "unverified_quote" } ], "imageFlags": [ { "field": "string", "reason": "alt_photo_missing" } ], "quoteFlags": [ { "field": "string", "spans": [ "string" ], "reason": "dismissed_quote" } ], "claimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }, "candidateClaimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Candidate accepted; it is now the output's article
application/json- response
id*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$orgId*stringOwning organization identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyId*stringStory this output was generated from
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputTemplateId*stringTemplate whose rules produced this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$type*stringOutput type, snapshotted from the template at creation
"web_article""x_post""instagram_post""tiktok_post""facebook_post""linkedin_post""short_form_video"status*stringGeneration status; carries no push state
"pending""generating""ready""failed"attempts*integerTransient-failure retry count for the generation pass
0 <= valuegeneratedContent*|||What the model wrote; null until the first successful generation
editedContent*|||The editor's version; null means the generated content is the effective one
candidateContent*|||A regenerated draft awaiting accept or discard; null when none is pending
candidateGeneratedAt*stringISO 8601 timestamp the pending candidate was generated; null when none is pending
date-timepreviousContent*|||The article before the last accepted regeneration replaced it; null before any accept
previousGeneratedAt*stringISO 8601 timestamp the previous draft was generated; null before any accept
date-timecontentVersion*integerHow many times the effective article has changed; advanced by a first generation, an accepted candidate and a saved edit
0 <= valuetextVersion*integerHow many times the text the claim check reads has changed; a check is outdated by an edit once this moves past the version it read
0 <= valueerror*stringFailure reason; null unless status is failed
generatedAt*stringISO 8601 timestamp of the most recent successful generation
date-timecreatedBy*stringUser who added this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$createdAt*stringISO 8601 creation timestamp
date-timeupdatedBy*stringUser who last changed this output; null when the last change was the generation pass's
^[0-7][0-9A-HJKMNP-TV-Z]{25}$updatedAt*stringISO 8601 timestamp of the most recent update
date-timesiblingOutputId?stringThe short-form video output this post's video slot links to; null when the post has no video slot
^[0-7][0-9A-HJKMNP-TV-Z]{25}$templateName*stringName of the template whose rules produced this output
content*|||Effective content: the edited version when present, otherwise the generated one
isStale*booleanWhether the story has been enriched since this output was generated
wordCount*integerWord count of the effective article body; null until content exists, and for a post
0 <= valuestoryboardDurationMs*integerTotal duration of the effective storyboard's scenes in milliseconds; null for any other type or until content exists
0 <= valuestoryboardBand*stringWhere the storyboard's total duration sits against the template's band; null for any other type or until content exists
"short""within""long"nullcreatedByName*stringDisplay name of the user who added this output
updatedByName*stringDisplay name of the user who last changed this output; null when the generation pass did
cmsPushCount*integerNumber of CMS pushes recorded for this output, so the story page can show 'filed' without an N+1
0 <= valuebrandKitId*stringId of the brand kit a short-form video or a post's cards would render in now (template kit if active, else the desk's default, else the org's); null for an article or a text-only post, until the output has a storyboard or cards, when no kit resolves, and on reads that do not resolve it
candidateInstructions*stringSteering that produced the pending candidate; null unless a candidate is pending
mediaFlags?array<>Card fields an editor should look at, on a single-output read of a post with media; absent on other reads
imageFlags?array<>Article image fields an editor should look at, on a single-output read of an article with images; absent on other reads
quoteFlags?array<>Text fields quoting words only a since-dismissed key quote holds, which the X publish and the CMS push refuse; on a single-output read only, absent on other reads
claimCheck*The article's claim check: state, trace, figure findings and acceptances
candidateClaimCheck?The pending regenerated draft's claim check; null when no draft is pending; absent on list reads
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/draft/accept'{ "id": "string", "orgId": "string", "storyId": "string", "outputTemplateId": "string", "type": "web_article", "status": "pending", "attempts": 0, "generatedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "editedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateGeneratedAt": "2019-08-24T14:15:22Z", "previousContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "previousGeneratedAt": "2019-08-24T14:15:22Z", "contentVersion": 0, "textVersion": 0, "error": "string", "generatedAt": "2019-08-24T14:15:22Z", "createdBy": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedBy": "string", "updatedAt": "2019-08-24T14:15:22Z", "siblingOutputId": "string", "templateName": "string", "content": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "isStale": true, "wordCount": 0, "storyboardDurationMs": 0, "storyboardBand": "short", "createdByName": "string", "updatedByName": "string", "cmsPushCount": 0, "brandKitId": "string", "candidateInstructions": "string", "mediaFlags": [ { "item": 0, "field": "string", "reason": "unverified_quote" } ], "imageFlags": [ { "field": "string", "reason": "alt_photo_missing" } ], "quoteFlags": [ { "field": "string", "spans": [ "string" ], "reason": "dismissed_quote" } ], "claimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }, "candidateClaimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Candidate discarded; the output's article is unchanged
application/json- response
id*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$orgId*stringOwning organization identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyId*stringStory this output was generated from
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputTemplateId*stringTemplate whose rules produced this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$type*stringOutput type, snapshotted from the template at creation
"web_article""x_post""instagram_post""tiktok_post""facebook_post""linkedin_post""short_form_video"status*stringGeneration status; carries no push state
"pending""generating""ready""failed"attempts*integerTransient-failure retry count for the generation pass
0 <= valuegeneratedContent*|||What the model wrote; null until the first successful generation
editedContent*|||The editor's version; null means the generated content is the effective one
candidateContent*|||A regenerated draft awaiting accept or discard; null when none is pending
candidateGeneratedAt*stringISO 8601 timestamp the pending candidate was generated; null when none is pending
date-timepreviousContent*|||The article before the last accepted regeneration replaced it; null before any accept
previousGeneratedAt*stringISO 8601 timestamp the previous draft was generated; null before any accept
date-timecontentVersion*integerHow many times the effective article has changed; advanced by a first generation, an accepted candidate and a saved edit
0 <= valuetextVersion*integerHow many times the text the claim check reads has changed; a check is outdated by an edit once this moves past the version it read
0 <= valueerror*stringFailure reason; null unless status is failed
generatedAt*stringISO 8601 timestamp of the most recent successful generation
date-timecreatedBy*stringUser who added this output
^[0-7][0-9A-HJKMNP-TV-Z]{25}$createdAt*stringISO 8601 creation timestamp
date-timeupdatedBy*stringUser who last changed this output; null when the last change was the generation pass's
^[0-7][0-9A-HJKMNP-TV-Z]{25}$updatedAt*stringISO 8601 timestamp of the most recent update
date-timesiblingOutputId?stringThe short-form video output this post's video slot links to; null when the post has no video slot
^[0-7][0-9A-HJKMNP-TV-Z]{25}$templateName*stringName of the template whose rules produced this output
content*|||Effective content: the edited version when present, otherwise the generated one
isStale*booleanWhether the story has been enriched since this output was generated
wordCount*integerWord count of the effective article body; null until content exists, and for a post
0 <= valuestoryboardDurationMs*integerTotal duration of the effective storyboard's scenes in milliseconds; null for any other type or until content exists
0 <= valuestoryboardBand*stringWhere the storyboard's total duration sits against the template's band; null for any other type or until content exists
"short""within""long"nullcreatedByName*stringDisplay name of the user who added this output
updatedByName*stringDisplay name of the user who last changed this output; null when the generation pass did
cmsPushCount*integerNumber of CMS pushes recorded for this output, so the story page can show 'filed' without an N+1
0 <= valuebrandKitId*stringId of the brand kit a short-form video or a post's cards would render in now (template kit if active, else the desk's default, else the org's); null for an article or a text-only post, until the output has a storyboard or cards, when no kit resolves, and on reads that do not resolve it
candidateInstructions*stringSteering that produced the pending candidate; null unless a candidate is pending
mediaFlags?array<>Card fields an editor should look at, on a single-output read of a post with media; absent on other reads
imageFlags?array<>Article image fields an editor should look at, on a single-output read of an article with images; absent on other reads
quoteFlags?array<>Text fields quoting words only a since-dismissed key quote holds, which the X publish and the CMS push refuse; on a single-output read only, absent on other reads
claimCheck*The article's claim check: state, trace, figure findings and acceptances
candidateClaimCheck?The pending regenerated draft's claim check; null when no draft is pending; absent on list reads
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/draft/discard'{ "id": "string", "orgId": "string", "storyId": "string", "outputTemplateId": "string", "type": "web_article", "status": "pending", "attempts": 0, "generatedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "editedContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "candidateGeneratedAt": "2019-08-24T14:15:22Z", "previousContent": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "previousGeneratedAt": "2019-08-24T14:15:22Z", "contentVersion": 0, "textVersion": 0, "error": "string", "generatedAt": "2019-08-24T14:15:22Z", "createdBy": "string", "createdAt": "2019-08-24T14:15:22Z", "updatedBy": "string", "updatedAt": "2019-08-24T14:15:22Z", "siblingOutputId": "string", "templateName": "string", "content": { "headline": "string", "standfirst": "string", "body": "string", "byline": "string", "featuredImage": { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string" }, "images": [ { "photo": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "credit": "string", "alt": "string", "caption": "string" } ] }, "isStale": true, "wordCount": 0, "storyboardDurationMs": 0, "storyboardBand": "short", "createdByName": "string", "updatedByName": "string", "cmsPushCount": 0, "brandKitId": "string", "candidateInstructions": "string", "mediaFlags": [ { "item": 0, "field": "string", "reason": "unverified_quote" } ], "imageFlags": [ { "field": "string", "reason": "alt_photo_missing" } ], "quoteFlags": [ { "field": "string", "spans": [ "string" ], "reason": "dismissed_quote" } ], "claimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }, "candidateClaimCheck": { "state": "none", "outdatedReason": "edited", "openCount": 0, "trace": { "claims": [ { "text": "string", "status": "confirmed", "verdict": "kept", "locations": [ { "kind": "article_field", "field": "headline" } ] } ], "unsupported": [ { "location": { "kind": "article_field", "field": "headline" }, "text": "string" } ], "enrichment": { "generatedAt": "2019-08-24T14:15:22Z" } }, "figures": [ { "kind": "unconfirmed", "value": "string", "location": { "kind": "article_field", "field": "headline" }, "claimIndex": 0 } ], "acceptances": [ { "findingKey": "string", "acceptedBy": { "id": "string", "displayName": "string" }, "acceptedAt": "2019-08-24T14:15:22Z", "note": "string", "checkerWrong": true } ] }}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$The eligible photos, each with a short-lived preview URL; empty when a post's template has no media plan or an article's template has both image switches off
application/json- response
stillFormat*stringThe still format a post's candidates were cut to; null for an article, whose candidates are cut to its image sizes, and for an output whose template has no media plan
"3:4""4:5""1:1""9:16"nullitems*array<>curl -X GET 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/photo-candidates'{ "stillFormat": "3:4", "items": [ { "index": 0, "ref": { "source": "archive", "mamConfigId": "string", "itemId": "string" }, "caption": "string", "whyRelevant": "string", "entity": "string", "credit": "string", "usageTerms": [ "string" ], "width": 0, "height": 0, "fits": { "featured": true, "inline": true }, "previewUrl": "string" } ]}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$The post's rendered cards, one per card once images have been requested; empty before that
application/json- response
items*array<>curl -X GET 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/renders'{ "items": [ { "id": "string", "storyOutputId": "string", "status": "queued", "format": "3:4", "mediaIndex": 0, "contentVersion": 0, "brandKitId": "string", "assetId": "string", "error": "string", "claimedAt": "2019-08-24T14:15:22Z", "renderedAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "outdated": true, "expired": true } ]}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Every card queued to be rendered; each keeps its previous file until replaced
application/json- response
items*array<>curl -X POST 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/renders'{ "items": [ { "id": "string", "storyOutputId": "string", "status": "queued", "format": "3:4", "mediaIndex": 0, "contentVersion": 0, "brandKitId": "string", "assetId": "string", "error": "string", "claimedAt": "2019-08-24T14:15:22Z", "renderedAt": "2019-08-24T14:15:22Z", "createdAt": "2019-08-24T14:15:22Z", "updatedAt": "2019-08-24T14:15:22Z", "outdated": true, "expired": true } ]}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Every CMS push this output has made, newest first
application/json- response
items*array<>curl -X GET 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/cms-pushes'{ "items": [ { "id": "string", "orgId": "string", "storyOutputId": "string", "storyId": "string", "cmsConfigId": "string", "vendor": "arc_xp", "contentVersion": 0, "externalId": "string", "externalUrl": "string", "pushedBy": "string", "pushedAt": "2019-08-24T14:15:22Z", "unchecked": true } ]}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$application/json- body
cmsConfigId*stringCMS connection identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Draft created in the CMS and the push recorded
application/json- response
id*stringCMS push record identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$orgId*stringOwning organization identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyOutputId*stringOutput that was pushed
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyId*stringStory the pushed output belongs to; denormalized for join-free history
^[0-7][0-9A-HJKMNP-TV-Z]{25}$cmsConfigId*stringTarget CMS connection identifier; null once the connection has been deleted
^[0-7][0-9A-HJKMNP-TV-Z]{25}$vendor*stringCMS vendor snapshotted at push time
"arc_xp""wordpress"contentVersion*integerThe output's content_version at push time
0 <= valueexternalId*stringIdentifier the vendor returned for the created draft
externalUrl*stringEditor deep link built at push time; null when the vendor's response has none
pushedBy*stringUser who performed the push
^[0-7][0-9A-HJKMNP-TV-Z]{25}$pushedAt*stringISO 8601 timestamp the push completed
date-timeunchecked*booleanTrue when the push was filed while the output's claim check had failed, so this version went out without one
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/cms-pushes' \ -H 'Content-Type: application/json' \ -d '{ "cmsConfigId": "string"}'{ "id": "string", "orgId": "string", "storyOutputId": "string", "storyId": "string", "cmsConfigId": "string", "vendor": "arc_xp", "contentVersion": 0, "externalId": "string", "externalUrl": "string", "pushedBy": "string", "pushedAt": "2019-08-24T14:15:22Z", "unchecked": true}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$cmsConfigId*stringCMS connection identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Exactly the article a push to this connection would file
application/json- response
title*stringThe headline as the vendor will receive it
excerpt*stringThe standfirst as the vendor will receive it
contentHtml*stringThe rendered article body, byline paragraph included, as it will be filed
featuredImage?The article's featured image; absent when it has none
images?array<>The inline images in slot order; absent when the article has none
claimCheck*What the claim check would do to a push of this article right now: the reason it would be refused, if any
quoteCheck*The article's fields quoting words only a since-dismissed key quote holds; a push is refused while any is listed
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/cms-preview?cmsConfigId=string'{ "title": "string", "excerpt": "string", "contentHtml": "string", "featuredImage": { "alt": "string", "credit": "string", "previewUrl": "string" }, "images": [ { "alt": "string", "credit": "string", "previewUrl": "string", "slot": 0, "caption": "string" } ], "claimCheck": { "blocked": "open_findings", "openCount": 0, "unchecked": true }, "quoteCheck": { "fields": [ { "field": "string", "spans": [ "string" ] } ] }}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Every social publish this output has made, newest first
application/json- response
items*array<|>curl -X GET 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/social-publishes'{ "items": [ { "id": "string", "orgId": "string", "storyOutputId": "string", "storyId": "string", "socialConfigId": "string", "platform": "x", "contentVersion": 0, "claimedAt": "2019-08-24T14:15:22Z", "publishedBy": "string", "unchecked": true, "status": "pending" } ]}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$application/json- body
socialConfigId*stringSocial connection identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$Post published and the publish recorded
application/json- response
id*stringSocial publish record identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$orgId*stringOwning organization identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyOutputId*stringOutput that was published
^[0-7][0-9A-HJKMNP-TV-Z]{25}$storyId*stringStory the published output belongs to; denormalized for join-free history
^[0-7][0-9A-HJKMNP-TV-Z]{25}$socialConfigId*stringTarget social connection identifier; null once the connection has been deleted
^[0-7][0-9A-HJKMNP-TV-Z]{25}$platform*"x"Platform snapshotted at publish time
"x"contentVersion*integerThe output's content_version at publish time
0 <= valueclaimedAt*stringISO 8601 timestamp the publish was claimed, before the post was sent
date-timepublishedBy*stringUser who published
^[0-7][0-9A-HJKMNP-TV-Z]{25}$unchecked*booleanTrue when the publish was claimed while the output's claim check had failed, so this version went out without one
status*"pending"Claimed; the platform's post id is not recorded yet
"pending"curl -X POST 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/social-publishes' \ -H 'Content-Type: application/json' \ -d '{ "socialConfigId": "string"}'{ "id": "string", "orgId": "string", "storyOutputId": "string", "storyId": "string", "socialConfigId": "string", "platform": "x", "contentVersion": 0, "claimedAt": "2019-08-24T14:15:22Z", "publishedBy": "string", "unchecked": true, "status": "pending"}x-api-key<token>A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.
id*stringStory identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$outputId*stringStory output identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$publishId*stringSocial publish record identifier
^[0-7][0-9A-HJKMNP-TV-Z]{25}$published: the post was on the account and the record is settled; released: it was not (or the publish's connection was deleted), and the output can be published to that account again; inconclusive: the account posted more in the publish's window than one check reads, and the record stays pending
application/json- response
outcome*"published""published"publish*|curl -X POST 'https://api.nuvelics.com/api/tenant/v1/stories/string/outputs/string/social-publishes/string/check'{ "outcome": "published", "publish": { "id": "string", "orgId": "string", "storyOutputId": "string", "storyId": "string", "socialConfigId": "string", "platform": "x", "contentVersion": 0, "claimedAt": "2019-08-24T14:15:22Z", "publishedBy": "string", "unchecked": true, "status": "pending" }}