BrenzuriStart free
Objects
Reference

Objects

Fields are camelCase. A field that is not set is omitted, not null.

On this page

These tables are written from the data types the engine encodes, and a test compares the field names to them, so a field added in the engine fails the build until it is documented here.

  • Field names are camelCase.
  • A field that is not set is omitted. Fields marked optional can be missing; every other field is always present.
  • Ids are strings. Articles, claims, sources, briefs and jobs use upper-case UUIDs; sites, brands, illustrations and webhooks use lower-case. In addingLanguages the job and brief ids are lower-case. Compare them without regard to case.
  • Dates are ISO 8601 in UTC, except analysedAt and pausedAt on a site, which are yyyy-MM-dd.

Enumerations#

FieldValues
status of an articledraft, generating, needsReview, approved, published, held, archived
origin of an articlemanual, beat, agent, schedule
state of a claimcorroborated, singleSource, circular, disputed, parallel
purpose of a briefnews, explainer, background, roundup, press, blog
tone of a briefneutral, explanatory, formal, conversational
length of a briefshort, standard, long
structure of a briefibc, list, qa
illustration of a briefgenerate, upload, none
status of a sitereading, ready, failed, paused
status of a deliverydelivered, held, retrying, cancelled
outcome of a deliverypublished, draft, awaitingApproval
status of a house styledraft, confirmed, off, superseded
status of an illustrationready, skipped, generating, failed
kind of a part of an estimatearticle, version
mode of a paragraph rewriteshorter, longer, tone
target of an exportmarkdown, pdf, docx
status of a jobqueued, running, paused, done, failed, cancelled
kind of a job (a key or an agent sees article and site)article, preview, beat, site, dryRun
kind of a connectionwordpress, webhook
publishPolicy of a connection (auto is refused)draft, auto, approval

Objects#

Article

Engine type ArticleDTO

Returned by GET /articles/{id} and by every edit. For a key or an agent comments is always [] and delivery is never present.

FieldTypeDescription
idstringUpper-case UUID.
statusstringdraft, generating, needsReview, approved, published, held or archived.
titlestringArticle title.
leadstringThe opening sentence or paragraph.
languagestringThe language this article is written in: a language code such as en, or bhs for Bosnian/Croatian/Serbian. A language version is an article of its own and has its own language; see Language versions.
wordsintegerWord count of the text.
paragraphsParagraph[]The text flattened into numbered units. Headings, list items and table rows count as units; a heading carries a ## or ### prefix.
sourcesSource[]Every source the article was written from.
claimsClaim[]Every claim with its state. A claim whose state is not corroborated is flagged.
qualityQualityCheck[]Checks run on the finished text.
versionsVersion[]The version history. Each entry names who made it.
commentsobject[]Review comments. Always [] for a key or an agent.
labelLabelDerived from the approval record of the current version. Never settable.
brandNamestringThe voice the article was written in.
siteIdoptionalstringLower-case UUID of the site. Absent for an article with no site.
originstringmanual, beat, agent or schedule.
bystringWho started it, for example Maya Chen · via agent.
archivedoptionalobject{ at, by, agent? }, present when the article is archived.
feedbackAskedoptionalbooleanWhether the workspace has been asked for feedback on this version.
runoptionalRunPresent while status is generating: the job that is writing it.
blocksoptionalBlock[]The same text as structured blocks: headings, paragraphs, lists and tables, with claim ids.
deckoptionalstringThe standfirst under the title.
deliveryoptionalobjectWhere the article last went. Human sessions only; a key never receives it.
internalLinksoptionalobject[]Links to the site’s own pages: { id, n, anchor, url, title }.
illustrationoptionalIllustrationThe article illustration, when it has one. A language version has none of its own.
primaryArticleIdoptionalstringUpper-case UUID of the article this one is a language version of. Absent on an article that was written from a brief.
languageVersionsoptionalLanguageVersion[]The article written from the brief and all its language versions, the article first and then the versions in the order of the supported list. Present on the article and on each of its versions, and only when there are at least two.
addingLanguagesoptionalAddingLanguagesPresent on an article written from a brief while a job that adds language versions is queued, running or paused.
  • IDs are not cased consistently. Article, claim, source, brief and job ids are upper-case UUID strings; site, brand and illustration ids are lower-case. Routes accept either; compare case-insensitively.
  • A field that is not set is omitted from the JSON. It is never null.
JSON
{
  "id": "9F3B1C2A-6D4E-4B7A-8C15-2E0A7D91B3F4",
  "status": "needsReview",
  "title": "Ferry operators agree on a single timetable for the northern route",
  "lead": "Three ferry operators will publish one shared timetable for the northern route from 3 November.",
  "language": "en",
  "words": 412,
  "paragraphs": [
    {
      "n": 1,
      "text": "Three ferry operators will publish one shared timetable for the northern route from 3 November, the harbour authority said.",
      "claimIds": [
        "E1A7C3B9-0D42-4F58-96AE-3B1C8D7F2045"
      ]
    },
    {
      "n": 2,
      "text": "## What changes for commuters",
      "claimIds": []
    },
    {
      "n": 3,
      "text": "Commuters will see 14 daily crossings instead of 9, and a single fare table applies on all of them.",
      "claimIds": [
        "4B90D6E2-A317-4C8B-B5F0-7E2A19C3D864",
        "A63F2E58-9C10-47DB-8E3A-D5B07C41F192"
      ]
    }
  ],
  "blocks": [
    {
      "n": 1,
      "text": "Three ferry operators will publish one shared timetable for the northern route from 3 November, the harbour authority said.",
      "claimIds": [
        "E1A7C3B9-0D42-4F58-96AE-3B1C8D7F2045"
      ]
    },
    {
      "kind": "heading",
      "level": 2,
      "text": "What changes for commuters",
      "n": 2,
      "claimIds": []
    },
    {
      "n": 3,
      "text": "Commuters will see 14 daily crossings instead of 9, and a single fare table applies on all of them.",
      "claimIds": [
        "4B90D6E2-A317-4C8B-B5F0-7E2A19C3D864",
        "A63F2E58-9C10-47DB-8E3A-D5B07C41F192"
      ]
    }
  ],
  "sources": [
    {
      "id": "71C2E9A0-B4D8-4536-9F1E-A08D3C56B7E4",
      "origin": "harbour-authority.example",
      "title": "Northern route: one timetable from 3 November",
      "url": "https://harbour-authority.example/news/northern-route-timetable",
      "score": 75,
      "official": false,
      "contributed": "Contributed: 2 claims",
      "soleForClaims": 1
    },
    {
      "id": "D90B5F13-2E67-4A8C-B1D4-6C3E7A0F5982",
      "origin": "coast-gazette.example",
      "title": "Ferries to share a timetable",
      "url": "https://coast-gazette.example/transport/ferries-share-timetable",
      "score": 75,
      "official": false,
      "contributed": "Contributed: 2 claims",
      "soleForClaims": 0
    }
  ],
  "claims": [
    {
      "id": "E1A7C3B9-0D42-4F58-96AE-3B1C8D7F2045",
      "text": "The shared timetable starts on 3 November.",
      "state": "corroborated",
      "originCount": 2,
      "sourceIds": [
        "71C2E9A0-B4D8-4536-9F1E-A08D3C56B7E4",
        "D90B5F13-2E67-4A8C-B1D4-6C3E7A0F5982"
      ],
      "paragraph": 1,
      "keptFlag": false
    },
    {
      "id": "4B90D6E2-A317-4C8B-B5F0-7E2A19C3D864",
      "text": "The route will have 14 daily crossings instead of 9.",
      "state": "singleSource",
      "originCount": 1,
      "sourceIds": [
        "71C2E9A0-B4D8-4536-9F1E-A08D3C56B7E4"
      ],
      "paragraph": 3,
      "keptFlag": false
    },
    {
      "id": "A63F2E58-9C10-47DB-8E3A-D5B07C41F192",
      "text": "A single fare table applies on all crossings.",
      "state": "corroborated",
      "originCount": 2,
      "sourceIds": [
        "71C2E9A0-B4D8-4536-9F1E-A08D3C56B7E4",
        "D90B5F13-2E67-4A8C-B1D4-6C3E7A0F5982"
      ],
      "paragraph": 3,
      "keptFlag": false
    }
  ],
  "quality": [
    {
      "id": "q-readback",
      "name": "Read back against the sources",
      "verdict": "passed",
      "detail": "Every figure and quote in the text appears in a source."
    },
    {
      "id": "q-length",
      "name": "Length",
      "verdict": "warning",
      "detail": "412 words."
    }
  ],
  "versions": [
    {
      "n": 1,
      "label": "Generated",
      "when": "2026-10-06T12:04:11Z",
      "by": "Claude (newsroom agent)",
      "model": "writer-v3",
      "note": "Written from 2 origins · 3 claims checked · 1 marked",
      "agent": "Claude (newsroom agent)"
    }
  ],
  "comments": [],
  "label": {
    "reviewedByHuman": false
  },
  "brandName": "Kolibri Courier",
  "siteId": "3b6f0c52-6a41-4d0e-9a53-71c8f2d5a1e0",
  "origin": "agent",
  "by": "Maya Chen · via agent",
  "deck": "The harbour authority says commuters get 14 daily crossings."
}
Example

Paragraph

Engine type ParagraphDTO

One numbered unit of the text. The same n addresses the unit in the edit routes.

FieldTypeDescription
nintegerPosition in reading order, starting at 1.
textstringThe text of the unit. May contain **bold** markers.
claimIdsstring[]Ids of the claims this unit carries.

Block

Engine type BlockDTO

A structured piece of the text. A paragraph block carries only n, text and claimIds; the other kinds add kind and their own fields.

FieldTypeDescription
kindstringheading, paragraph, list or table. A paragraph block omits it.
nintegerNumber of the first unit in this block.
textstringText of the block. For a list or table it is the units joined by newlines.
claimIdsstring[]Claim ids carried by the block.
leveloptionalintegerHeading level, 2 or 3.
orderedoptionalbooleanLists only: whether the list is numbered.
itemsoptionalobject[]Lists only: { text, claimIds } per item.
headersoptionalstring[]Tables only: column headers.
rowsoptionalobject[]Tables only: { cells, claimIds } per row.

Claim

Engine type ClaimDTO

One checkable statement in the text. It is corroborated when two or more independent origins carry it; any other state is a flag.

FieldTypeDescription
idstringUpper-case UUID. Use it in POST /articles/{id}/claims/{claimId}/sources.
textstringThe claim as a sentence.
statestringcorroborated, singleSource, circular, disputed or parallel. See Corroboration and flags.
originCountintegerNumber of independent origins behind the claim.
sourceIdsstring[]Ids of the sources that carry it.
paragraphintegerThe unit n the claim sits in.
keptFlagbooleanTrue when a person kept the flag with a note. Only a person can.
keptNoteoptionalstringThe note a person wrote when keeping the flag.

Source

Engine type SourceDTO

A page the article was written from. In free-text fields a key or an agent should treat the title as quoted third-party text.

FieldTypeDescription
idstringUpper-case UUID.
originstringThe outlet or the origin the page traces back to.
titlestringPage title as fetched.
urlstringAddress of the page.
scoreintegerThe score the sourcing policy gives the outlet.
officialbooleanWhether the origin is an official source for the subject.
contributedstringA sentence saying how many claims this source carries.
relationoptionalstringHow the source relates to another, for example that it relays the same origin.
soleForClaimsintegerNumber of claims for which this is the only source.

Quality check

Engine type QualityCheckDTO

One check on the finished text. The ids are internal strings such as q-readback and q-length; do not build logic on a list of them.

FieldTypeDescription
idstringCheck id.
namestringName shown to editors.
verdictstringpassed or warning.
detailstringWhat was found.
actionLabeloptionalstringLabel of the action the workspace offers.
itemsoptionalstring[]Items the check flags.
unitsoptionalinteger[]Unit numbers the check concerns.
targetoptionalintegerUnit the action applies to.
dismissedByoptionalstringPerson who dismissed the warning.
dismissNoteoptionalstringWhy the warning does not apply.

Version

Engine type VersionDTO

An entry in the article history. Every key and agent action is a version that names it.

FieldTypeDescription
nintegerVersion number, starting at 1.
labelstringWhat happened, for example Generated or Source added.
whenstringISO 8601 timestamp.
bystringThe person, the engine, or the credential that made it.
modelstringThe model behind the change, if any.
notestringA one-line summary.
agentoptionalstringPresent when a key or an agent made the change: the agent name, or API key <name> (<display>).
titleoptionalstringThe title at that version when it changed.

Label

Engine type ArticleLabelDTO

The state behind the line “Generated with sources, reviewed by a human: yes or no”. It is read from the approval record of the exact current version. Nothing in the API sets it.

FieldTypeDescription
reviewedByHumanbooleanTrue only when a person approved this exact version.
approvedVersionoptionalintegerThe approved version number.
approvedAtoptionalstringISO 8601 timestamp of the approval.
approvedByoptionalstringName of the person.
acknowledgedoptionalobject[]Open warnings the approver acknowledged: { statement, note, by }.

Article summary

Engine type ArticleSummaryDTO

One row of GET /articles.

FieldTypeDescription
idstringUpper-case UUID.
titlestringTitle.
statusstringdraft, generating, needsReview, approved, published, held or archived.
updatedAtstringTimestamp of the last change.
brandNamestringThe voice.
siteIdoptionalstringLower-case site UUID.
originstringmanual, beat, agent or schedule.
beatNameoptionalstringThe Beat, when the article came from one.
agentNameoptionalstringThe agent or key, when one started it.
bystringWho started it.
flaggedClaimsintegerNumber of claims whose state is not corroborated.
wordsintegerWord count.
languagestringLanguage code of this article.
runoptionalRunPresent while the article is generating.
primaryArticleIdoptionalstringUpper-case UUID of the article this one is a language version of. A version is listed as a row of its own. Absent on an article written from a brief.

Run

Engine type ArticleRunDTO

The job that is writing an article.

FieldTypeDescription
jobIdstringJob id for the event stream.
statusstringJob status.
briefIdoptionalstringThe brief the job was started from.

Illustration

Engine type ArticleIllustrationDTO

The picture on an article. It is always labelled as AI-generated. See House-style illustrations.

FieldTypeDescription
idstringLower-case UUID.
statusstringready, skipped, generating or failed.
urloptionalstringRelative path of the image, only when status is ready. Fetch it with the same key.
altTextstringAlternative text written for the picture.
captionoptionalstringCaption from the site’s caption pattern, with its plate number.
labelstringAlways AI-generated.
styleLabelstringWhich style made it: the site’s house style or abstract editorial.
reasonoptionalstringWhy it was skipped or failed.
regeneratingbooleanTrue while a new picture is being made.
lastFailureoptionalstringWhy the last regeneration failed.
regenerationsLeftoptionalintegerNew pictures still allowed today for this article and workspace, whichever is lower.

Language version

Engine type LanguageVersionDTO

One entry of languageVersions on an article: the article itself or one of its language versions. Each is an article with its own approval, so approved is that article’s own.

FieldTypeDescription
languagestringLanguage code.
articleIdstringUpper-case UUID of that article. Read it with GET /articles/{id}.
statusstringdraft, generating, needsReview, approved, published, held or archived: the status of that article.
approvedbooleanTrue only when a person approved the current version of that article.
JSON
[
  {
    "language": "en",
    "articleId": "9F3B1C2A-6D4E-4B7A-8C15-2E0A7D91B3F4",
    "status": "approved",
    "approved": true
  },
  {
    "language": "es",
    "articleId": "1B7E4D90-3C52-4A18-9F6D-C80A2E5B7143",
    "status": "needsReview",
    "approved": false
  }
]
Example

Adding languages

Engine type ArticleAddingDTO

The addingLanguages of an article while POST /articles/{id}/languages is writing versions for it.

FieldTypeDescription
jobIdstringLower-case job id. Follow it on GET /jobs/{id}/events.
statusstringqueued, running or paused.
briefIdoptionalstringLower-case id of the brief the article was written from.
languagesstring[]The language codes being added, in the order asked.

Brief

Engine type BriefDTO

What one article is asked to be. Created with POST /briefs, where every field is optional.

FieldTypeDescription
idstringUpper-case UUID.
brandIdoptionalstringVoice profile id.
siteIdoptionalstringLower-case site UUID. A site-bound key gets its own site by default.
topicstringWhat the article is about. Not validated as non-empty when the brief is created.
anglestringWhat the piece should focus on. Default empty.
useUrlsstring[]Pages to read first.
excludeDomainsstring[]Domains to leave out.
purposestringnews, explainer, background, roundup, press or blog. Default explainer.
audiencestringWho the article is for. Default empty.
regionstringUp to 60 characters. Default Global.
languagestringThe language of the article, or the article and its language versions joined by +, as en+es+de: the first code is the article, each other code is a version of it. Default en. One code is accepted as it is, whatever it is, as long as it has no spaces. With + every code must be one of the 22 supported languages, each once, and is lower-cased; anything else is refused with 422 invalid_language.
tonestringneutral, explanatory, formal or conversational. Default neutral.
lengthstringshort, standard or long. A long article costs 2 credits. Default standard.
targetWordsintegerClamped to 300–3000. Default 900.
structurestringibc, list or qa. Default ibc.
keywordsstring[]Keywords for the SEO fields.
mustAppearstring[]Up to 10 phrases of up to 200 characters each.
preferDomainsstring[]Domains to prefer when sources are chosen.
illustrationstringgenerate, upload or none. Default none. Only generate adds the illustrating step.
imageStyleoptionalstringStored; the pipeline does not read it.
imageFormatoptionalstringStored; the pipeline does not read it.
seobooleanWhether to write the SEO fields. Default true.
JSON
{
  "id": "5D2E8A14-7B3C-4F69-A0D1-9C46E3B7F208",
  "siteId": "3b6f0c52-6a41-4d0e-9a53-71c8f2d5a1e0",
  "topic": "Ferry operators agree on a single timetable for the northern route",
  "angle": "What changes for commuters from November",
  "useUrls": [],
  "excludeDomains": [],
  "purpose": "news",
  "audience": "",
  "region": "Global",
  "language": "en",
  "tone": "neutral",
  "length": "standard",
  "targetWords": 900,
  "structure": "ibc",
  "keywords": [],
  "mustAppear": [
    "the November start date"
  ],
  "preferDomains": [],
  "illustration": "none",
  "seo": true
}
Example

Estimate

Engine type EstimateResponse

What starting the brief would cost. The balance is never shown; only whether it is enough.

FieldTypeDescription
creditsinteger1 for a standard article, 2 for a long one, and 1 more for each language version.
partsobject[]What the credits are made of, in order: { label, credits, kind }, where kind is article or version. A version is labelled by language, for example Spanish version. The credits of the parts add up to credits.
stepsobject[]The steps the job will run: { id, name, estMs }. Each language version adds its own write-, seo- (only when the brief asks for the SEO fields) and qa- steps, after the steps of the article.
enoughbooleanTrue when the trial has not ended, the balance covers the credits, and, for a credential, today’s spend plus these credits is within its daily cap.
JSON
{
  "credits": 1,
  "parts": [
    {
      "label": "Article",
      "credits": 1,
      "kind": "article"
    }
  ],
  "steps": [
    {
      "id": "find",
      "name": "Searching your domains",
      "estMs": 14200
    },
    {
      "id": "group",
      "name": "Grouping by origin",
      "estMs": 6100
    },
    {
      "id": "read",
      "name": "Reading one page per origin",
      "estMs": 39400
    },
    {
      "id": "check",
      "name": "Checking claims across origins",
      "estMs": 30800
    },
    {
      "id": "write",
      "name": "Writing",
      "estMs": 48000
    },
    {
      "id": "seo",
      "name": "Writing the SEO fields",
      "estMs": 4000
    },
    {
      "id": "qa",
      "name": "Reading the finished text back",
      "estMs": 9000
    }
  ],
  "enough": true
}
Example

Started job

Engine type StartJobResponse

The answer to POST /articles. The article exists at once, in generating.

FieldTypeDescription
articleIdstringThe article being written.
jobIdstringThe job. Follow it on GET /jobs/{id}/events.
creditsHeldintegerCredits held until the job finishes or fails. A language version holds one more credit each; the ones that are skipped or fail are released when the job ends.
briefIdoptionalstringThe brief it was started from.
stepsoptionalobject[]The steps the job will run: { id, name, estMs }. Present on POST /articles and POST /articles/{id}/languages; not on writing a column.
JSON
{
  "articleId": "9F3B1C2A-6D4E-4B7A-8C15-2E0A7D91B3F4",
  "jobId": "C8A41E07-52B9-4D36-8F1A-0B7E9D3C6A25",
  "creditsHeld": 1,
  "briefId": "5D2E8A14-7B3C-4F69-A0D1-9C46E3B7F208",
  "steps": [
    {
      "id": "find",
      "name": "Searching your domains",
      "estMs": 14200
    },
    {
      "id": "group",
      "name": "Grouping by origin",
      "estMs": 6100
    },
    {
      "id": "read",
      "name": "Reading one page per origin",
      "estMs": 39400
    },
    {
      "id": "check",
      "name": "Checking claims across origins",
      "estMs": 30800
    },
    {
      "id": "write",
      "name": "Writing",
      "estMs": 48000
    },
    {
      "id": "seo",
      "name": "Writing the SEO fields",
      "estMs": 4000
    },
    {
      "id": "qa",
      "name": "Reading the finished text back",
      "estMs": 9000
    }
  ]
}
Example

Job event

Engine type JobEventDTO

One JSON object per data: line of the event stream.

FieldTypeDescription
kindstringstep, done, failed, refunded or ping.
stepIdoptionalstringFor an article: find, group, read, check, write, seo, qa or illustrate, and for a language version write-, seo- or qa- followed by the language code, as write-es. A job that adds languages starts with sources. For a site read: read, describe, style, plan or ready.
statusoptionalstringStep status: todo, running, done or failed.
summaryoptionalstringOne line about the step.
detailsoptionalobject[]{ text, tag, tagLabel? } where tag is ok, flag, warn or info.
msoptionalintegerHow long the step took.
articleIdoptionalstringOn done: the finished article.
messageoptionalstringOn failed: what went wrong.
optionaloptionalbooleanOn failed: whether the step may be skipped.
creditsoptionalintegerOn refunded: credits released.
reasonoptionalstringOn failed: a machine reason such as provider_gave_up. On refunded: unused when the job finished and the credits of the language versions that were skipped, failed or came back empty were released; the stream carries on and a done follows.
queuedoptionalintegerOn ping: position in the queue while the job waits.
  • A finished job ends with {"articleId":"9F3B1C2A-6D4E-4B7A-8C15-2E0A7D91B3F4","kind":"done"}.
JSON
{
  "details": [
    {
      "tag": "ok",
      "text": "2 independent origins"
    }
  ],
  "kind": "step",
  "ms": 6120,
  "status": "done",
  "stepId": "group",
  "summary": "5 results · 2 origins"
}
Example

Site summary

Engine type SiteSummaryDTO

One row of GET /sites.

FieldTypeDescription
idstringLower-case UUID.
domainstringThe site’s domain.
siteNamestringName of the site.
statusstringreading, ready, failed or paused.
failureoptionalstringWhy the read failed.
analysedAtoptionalstringDate of the last read.
offeredTopicsintegerColumns the site is offered.
cadenceoptionalstringThe proposed schedule.
articleCountintegerArticles on the site.
needsReviewCountintegerArticles waiting for a person.
brandIdoptionalstringVoice profile.
thumbnailUrloptionalstringPath of the site thumbnail. Not reachable with a key.
pausedAtoptionalstringDate the site was paused.
freeColumnAvailableoptionalbooleanNever present for a key or an agent.

Site

Engine type SiteDTO

What Brenzuri learned from reading a site, and what is being written for it. delivery and freeColumnAvailable are never present for a key or an agent. Nested objects other than plan, voice, writing, written, linkPages and houseStyle are shaped like their screens and are not listed here.

FieldTypeDescription
idstringLower-case UUID.
domainstringDomain.
siteNamestringName.
statusstringreading, ready, failed or paused.
failureoptionalstringWhy the last read failed.
analysedAtoptionalstringDate of the last read.
guessedKindoptionalstringWhat kind of workspace the site looks like.
voiceoptionalVoiceThe voice drafted from the site’s pages.
samplesobject[]Pages the voice was drafted from: { url, title, publishedAt? }.
planoptionalSitePlanThe proposed columns and schedule.
brandIdoptionalstringVoice profile id.
jobIdoptionalstringWhile reading: the job to follow.
setupobject[]Setup steps and whether each is done.
thumbnailUrloptionalstringNot reachable with a key.
pausedAtoptionalstringDate paused.
pausedByoptionalstringWho paused it.
scheduleoptionalobjectThe schedule, when one is set.
deliveryoptionalobjectNever present for a key or an agent.
freeColumnAvailableoptionalbooleanNever present for a key or an agent.
unmatchedSourcesintegerYour own sources that match no column.
voiceDraftedFromobject{ count, samples[] } of the pages the voice came from.
voiceDraftedAtoptionalstringDate the voice was drafted.
writingobject[]Columns being written: { topicId, jobId, articleId, briefId?, creditsHeld }.
writtenobject[]Columns already written: { topicId, articleId, title, at }.
pausedByBrenzurioptionalobjectPresent when Brenzuri paused the site.
linkPagesoptionalobject{ count, checkedAt? }: pages available for internal links.
houseStyleoptionalobjectSummary { status, proposal, descriptor?, palette? }; status is none, draft, confirmed or off.

Site plan

Engine type SitePlanDTO

The plan of a site: what it does, who it addresses, and the columns it can cover.

FieldTypeDescription
summarystringWhat the site does.
audiencestringWho it addresses.
languagestringThe site’s main language.
inventoryobjectPages read and listed, posts in the last 30 and 90 days, detected CMS.
topicsColumn[]The columns.
cadenceoptionalobject{ schedule, weeklyBudget, reason }.
noCadenceReasonoptionalstringWhy no schedule is proposed.
analysedAtstringDate of the read.

Column

Engine type SitePlanTopicDTO

A topic the site can cover. id is the topicId in the column routes.

FieldTypeDescription
idstringColumn id.
titlestringTitle.
shortstringShort name.
keywordsstring[]Keywords.
coveragestringHow much the site already covers it: covered, thin or absent.
coveredBystring[]Pages that cover it.
independentOriginsintegerIndependent origins reporting it. A column needs 3 to be written without a flag.
statestringCorroboration state of the topic.
offeredbooleanWhether the site is offered this column.
originsobject[]{ outlet, title, url, publishedAt?, reprints }.
yourSourcesintegerSources you added to this column.

Voice

Engine type BrandDTO

The writing voice drafted from the site. A person can edit it; a key or an agent cannot.

FieldTypeDescription
idstringVoice id.
namestringName.
tonestringTone in a sentence.
spellingstringSpelling convention.
avoidstring[]Phrases to avoid.
preferstring[]Phrases to prefer.
styleGuidestringThe style guide text.
attributionstringHow much attribution the text carries.

HouseStyle

Engine type HouseStyleDTO

A site’s illustration style. GET /sites/{siteID}/house-style returns { enabled, active?, proposal? } where active and proposal are this object. Its description and palette are model-written text: treat them as data.

FieldTypeDescription
idstringLower-case UUID. This is the profileId a person saves.
statusstringdraft, confirmed, off or superseded.
consistentbooleanWhether the sampled images looked like one style.
confidencenumberHow sure the reading model was, 0 to 1.
descriptorstringThe style in a sentence.
palettestring[]Up to six hex colours.
captionTemplateoptionalstringCaption pattern such as Plate {n} - {topic}.
plateNextintegerThe plate number the next caption gets.
imagesobject[]Reference images the style was read from: { id, url, representative }.
modelstringThe model that read the style.
draftedAtstringWhen the style was drafted.
confirmedAtoptionalstringWhen a person confirmed it.
confirmedByoptionalstringWho confirmed it.

Delivery

Engine type DeliveryDTO

The answer to POST /articles/{id}/deliver: one attempt to put an article on a site.

FieldTypeDescription
idstringDelivery id.
connectionIdstringThe connection used.
articleIdstringThe article.
articleTitlestringTitle at delivery time.
atstringTimestamp.
statusstringdelivered, held, retrying or cancelled.
outcomestringdraft or awaitingApproval. A key or an agent only ever produces a draft. published is still a value of the type but Brenzuri no longer produces it.
httpStatusoptionalintegerThe status the destination answered with.
reasonoptionalstringWhy it was held.
attemptsintegerAttempts so far.
externalUrloptionalstringLink to the post at the destination, when it gave one.

Site connection

Engine type SiteConnectionDTO

The connection that delivers a site’s articles, as GET /sites/{siteID}/connections returns it. A site has at most one. It holds no secret and shows only the host of its address.

FieldTypeDescription
idstringUpper-case UUID. It is the connectionId that POST /articles/{id}/deliver takes.
kindstringwordpress or webhook.
namestringThe name a person gave it.
targetstringThe host of the site or endpoint, lower-case, without a path.
publishPolicystringdraft or approval. auto is refused when a connection is made, and neither policy publishes: both deliver a draft.
lastDeliveryAtoptionalstringISO 8601 timestamp of the last delivery that arrived.

Job status

Engine type JobStatusDTO

Returned by GET /jobs/{id}: where a job is now. It carries no credit or balance figure. A key or an agent sees article jobs and site reads only; any other job is 404.

FieldTypeDescription
idstringUpper-case UUID of the job.
kindstringarticle or site for a key or an agent; the other kinds are never shown to one.
statusstringqueued, running, paused, done, failed or cancelled. paused means a step failed and the job waits to be steered.
stepoptionalstringThe id of the step running or failed, or the next one to run. Absent once the job has settled.
stepIndexintegerHow many steps the job has finished.
stepsJobStep[]Every step with its status, in order.
startedAtstringISO 8601 timestamp.
finishedAtoptionalstringISO 8601 timestamp, once the job has settled.
articleIdoptionalstringThe article an article job is writing.
erroroptionalJobFailurePresent when the job is cancelled, or failed or paused with a known cause.

Job step

Engine type JobStatusStep

One entry of steps in a job status.

FieldTypeDescription
idstringStep id: find, group, read, check, write, seo, qa, illustrate for an article, with write-, seo- and qa- and a language code for each language version, and sources for a job that adds languages; read, describe, style, plan, ready for a site read.
nameoptionalstringThe name the interface shows. Absent for a step that is not in the plan.
statusstringtodo, running, done or failed.
optionalbooleanWhether the step can be skipped when it fails.

Job failure

Engine type JobStatusFailure

The error of a job status.

FieldTypeDescription
codestringcancelled, or the cause: fetch_timeout, too_few_origins, model_timeout, provider_error or other.
messagestringA sentence about what happened.