BrenzuriStart free
Deliver to WordPress
Guides

Deliver to WordPress

Approved articles arrive as drafts. Someone on your side presses Publish.

On this page

Brenzuri puts an approved article on your WordPress site as a draft. Someone on your side presses Publish. Brenzuri never sends a publish status.

Set it up#

In WordPress#

  1. Use a user whose role is Author or above. An Author can create posts and upload the picture; a Contributor can create drafts but not upload media, so the picture is left off (see the troubleshooting below). Make a user just for Brenzuri if you can: the name you give it appears as the author of the drafts.
  2. Open Users › Profile for that user and scroll to Application Passwords.
  3. Type a name such as “Brenzuri”, press Add New Application Password, and copy the password WordPress shows. It is shown once. Spaces in it do not matter.
  4. Check the site is reachable over https and that /wp-json/ answers. Application passwords need https, and some security plugins and hosts switch off the REST API or strip the Authorization header; those need an exception for this user.

In Brenzuri#

  1. Open Connections › New connection and choose WordPress.
  2. Name it. Enter the Site address as the address that serves /wp-json, for example https://example.com. If WordPress lives in a folder, include the folder.
  3. Enter the Username and the Application password. They are never shown again; leave them empty on a later edit to keep the stored ones.
  4. Choose a policy. Draft and Awaiting approval both deliver a draft; see below.
  5. Press Test connection. A pass says “Reached the site and authenticated. Drafts can be created.” Then Save connection and attach it to a site from the site’s Setup.

What happens, and when#

  • A person approves an article of the site in Brenzuri. The approved version is delivered to the site’s connection at once.
  • A Beat that writes for the site delivers its article unapproved.
  • A person, or a key or an agent with the export scope, can deliver by hand with POST /articles/{id}/deliver. For a key or an agent the result is always a draft.
  • A workspace rule can stop it first: approval required before export, or no export while a claim is flagged.

What arrives#

In WordPressWhat it holds
Statusdraft. Brenzuri sends no other status. When a person delivers by hand on a connection set to Awaiting approval, the delivery is marked awaiting approval in Brenzuri and is still a draft in WordPress.
TitleThe article title.
ContentThe article HTML: the title again as an <h1>, the text, and a sources note at the end with the line “Generated with sources · reviewed by a human: yes or no”. A theme that prints the post title will show the title twice; delete the <h1> or hide it in the theme.
SlugMade from the title, at most 80 characters, accents removed.
ExcerptThe deck, only once the delivered version is approved. An unapproved article arrives without an excerpt.
CategoryOne category id, only when the connection carries one. See the note above.
Featured imageThe article’s illustration, when the delivered version has one. It is added after the post exists, and on an update only when the post has no featured image of its own.
Image alt textThe picture’s alt text.
Image captionThe article caption, then “· AI-generated illustration”. With no caption, “AI-generated illustration”.

Never sent: tags, SEO fields, a canonical address, an author, a date, and any status other than draft. The one language field, lang, is sent only for an article that has language versions, and for each of them; see Language versions below.

Language versions#

Each language version of an article is its own post, delivered when that version is approved. A post of an article that has language versions, and of each version, carries lang: the language code, with bs sent for BHS. Brenzuri does nothing else with it: it does not link the posts of one article to each other in WordPress, and a site with no multilingual setup ignores the field. A version of an article a Beat wrote is a draft like everything else. A language version has no illustration of its own, so its post has no featured image from Brenzuri.

After the post is created or updated Brenzuri uploads the picture to the media library, sets its alt text and caption, and sets it as the post’s featured image. The picture is an AI-generated illustration and says so in its caption. If any of these steps fails the post is still delivered, and the delivery log says what was left out.

The picture is uploaded attached to the draft (?post=<id>), and under an opaque file name, illustration- and eight characters of the illustration’s id, for example illustration-3f9a1c7e.png. Both are deliberate. WordPress gives an attachment the status of its parent, so the picture of a draft is not listed publicly, and an upload with no parent is published on its own. The file itself is still reachable by anyone who has its address, which is why the name is random: it carries no word of the title, so nobody can read a draft’s title from the address of its picture, and nobody can guess the address.

StepWordPress request
Create or update the draftPOST /wp-json/wp/v2/posts, or /posts/{id} to update
Check the featured image, on an update onlyGET /wp-json/wp/v2/posts/{id}?_fields=featured_media&context=edit
Upload the picturePOST /wp-json/wp/v2/media?post={id}, the raw image bytes
Alt text and captionPOST /wp-json/wp/v2/media/{id}
Featured imagePOST /wp-json/wp/v2/posts/{id} with featured_media. No status is sent on this call, so a draft stays a draft.

Updates and rewrites#

  • When a person approves a rewrite of an article that Brenzuri already delivered to this connection, the delivery updates the same post instead of making a second one. A rewrite is a new article started with supersedes; the post of the article it replaces is the one updated.
  • An update replaces the title, content, slug and excerpt with the new version’s.
  • An update changes the featured image only when the illustration is a different one, and never removes one.
  • A featured image someone set by hand is kept. Before it uploads anything, an update reads the post’s current featured image. It replaces it only when the post has none, or when it is the picture Brenzuri attached itself the last time. Anything else is left alone, nothing is uploaded, and the delivery log says “Kept the post’s own featured image.” If the post cannot be read, the log says “Kept the post’s own featured image: it could not be checked.” A post that was just created is not read first.
  • A version that is not approved always makes a new post, never an update.

The two policies#

Both deliver a draft. The difference is only how Brenzuri records it, and only for a delivery a person starts by hand: with Awaiting approval the delivery log says it is awaiting approval. The delivery that follows an approval in Brenzuri, and its retries, is logged as a plain draft whichever policy the connection has. Approval in Brenzuri adds the excerpt and the reviewed label. Publishing happens in WordPress, always.

Troubleshooting#

Open Connections, choose the connection, and open its delivery log. The reason column says what happened; Test connection on the connection checks the credentials without sending an article.

What the log or the test saysCauseWhat to do
The site returned 401 or 403. Check the username and the application password.Wrong username or password, a user that may not create posts, or a host that strips the Authorization header or blocks the REST API.Make a new application password. Use a user with the Author role or above. Ask the host or the security plugin to allow /wp-json with Basic authentication for this user.
The site returned 404.The address does not serve /wp-json, or pretty permalinks are off on a host that needs them.Open the site address plus /wp-json/ in a browser. Use the address that answers, folder included. Turn on pretty permalinks in Settings › Permalinks.
destination returned 4xxWordPress refused the post: an unknown category, a field it did not accept, or a plugin.The status says which. Fix it in WordPress, then retry from the delivery log.
destination returned 429 or 5xx; queued for retryThe site or its host was busy or down.Nothing. Brenzuri tries again after 30 seconds, then with longer waits, for up to 24 hours.
could not resolve the address, could not connect, or could not connect: timed out after 10 sBrenzuri could not reach the site: DNS, a firewall, or a host that is down. Nothing was sent.Check the site is up and does not block Brenzuri’s requests. Brenzuri tries again by itself, on the same schedule as above.
timed out after 20 sThe site accepted the connection and then did not answer in time. The post may or may not have been created.Look in WordPress for a draft with this title before you retry from the log, or you may get two. Brenzuri does not retry this by itself, for that reason.
address not allowedThe site address points at a private or internal address, or an address Brenzuri does not send to.Use the public address of the site. Brenzuri never sends to a private network.
the response was too large, or the request failedThe site answered with far more than a post, or the connection failed after it was made (TLS, a closed connection).Check the certificate and that /wp-json answers normally, then retry from the log.
Kept the post’s own featured image.The post being updated has a featured image that someone set in WordPress.Nothing is wrong. Set the new picture by hand if you want it.
Delivered without the illustration: the media upload returned 401, 403 or 413The user may not upload files (a Contributor), or the site’s upload limit is below the picture’s size.Use an Author or above. Raise upload_max_filesize and post_max_size for the site; pictures are at most 4 MB.
Delivered without the illustration: the media upload did not return an idA plugin or proxy changed the answer.Check that /wp-json/wp/v2/media answers a normal upload for this user.
The picture’s alt text and caption could not be set.The picture was uploaded but updating it failed.Set the alt text and caption by hand in the media library, or deliver again.
Delivered without the featured image: the picture was uploaded but could not be set on the post.The follow-up request failed.Set the featured image by hand, or deliver again after fixing the cause.
paused by Brenzuri, or WordPress delivery paused by BrenzuriBrenzuri has paused delivery for the workspace, or for all WordPress connections.Nothing is lost. The delivery waits and goes when delivery resumes.
A newer version exists; approve it to deliver.The article changed after the version that was approved.Approve the newest version. It is delivered then.
This workspace requires an editor’s approval before export. The current version is not approved.A workspace rule.Approve the version.