/wp-json/) using an application password. Once connected, Semji’s AI agents can list, read, create, and update content on your site — built-in posts and pages as well as custom post types (FAQ, news, landing pages, …) — fill your Advanced Custom Fields (ACF), file articles in the right categories, tags, and custom taxonomies, and update your SEO titles and meta descriptions whatever your SEO plugin (Yoast SEO, Rank Math, or SEOPress). Each action can be toggled individually.
Compatible from WordPress 5.6.
Prerequisites
- WordPress 5.6 or newer — application passwords became a core feature in 5.6.
- A site served over HTTPS and reachable from the public internet. Private or reserved addresses (localhost,
10.x,192.168.x, …) are rejected. - The REST API enabled at
https://your-site.com/wp-json/. It is on by default, but some security plugins disable it. - A WordPress user allowed to manage posts (Author role or higher — use Editor if agents should be able to update any post).
- If a firewall, WAF, or anti-bot protection (Cloudflare, Akamai, Sucuri, …) sits in front of your site, it must allow Semji’s IP addresses — see Firewalls, Cloudflare, and IP allowlisting.
- You are a workspace owner in Semji. The connection is shared with the whole workspace.
Step 1 — Create an application password in WordPress
Open the user profile
Create the application password
Semji, and click Add New Application Password.Copy the generated password
xxxx xxxx xxxx xxxx xxxx xxxx. Copy it now — you can paste it into Semji
with or without the spaces.Step 2 — Connect from Semji
Open the CMS integrations
Enter your credentials
- Site URL — the canonical HTTPS URL of your site, e.g.
https://your-site.com. Semji does not follow redirects, so use the exact URL your site resolves to (wwwvs non-wwwmatters — see troubleshooting). - Email or username — the WordPress login or email address of the user who owns the application password. WordPress accepts either: it matches the username first, then falls back to the email address.
- Application password — the password generated in step 1.
GET /wp-json/wp/v2/users/me on your site with these credentials, and
detects which SEO plugin your site runs.Pick the WordPress tools
Activate
What Semji can do once connected
Supported SEO plugins
Semji detects your SEO plugin automatically — no configuration to pick a provider. Detection reads the namespaces advertised by your REST API index (/wp-json/), and falls back to inspecting the SEO fields exposed on your
posts when a security plugin filters the index. The SEO title and meta
description are then read and written through the detected plugin’s own
fields:
Enable SEO title and meta description updates
Whether a prerequisite is needed depends on your SEO plugin and its version:- Yoast SEO 28.1 and newer — nothing to do. Recent Yoast versions expose their SEO title and meta description fields to the REST API out of the box, and Semji can update them right away.
- Older Yoast SEO, Rank Math, and SEOPress — these store the SEO title and meta description in protected custom fields that the REST API does not accept writes on by default. A small PHP snippet must register the fields with the REST API first.
edit_posts capability) can modify the fields — the same
permission level as editing the post itself.
- From the WordPress admin
- On the server
Install the plugin
Create the snippet
Semji — SEO fields REST support, and paste the code
below. It starts without the opening <?php line — Code Snippets adds
it itself.Run it everywhere and activate
Verify the fields are exposed
Whichever option you chose, call your REST API with the same credentials Semji uses, on any post ID, checking your plugin’s meta description field (here Rank Math — swap in the field from the table above for Yoast SEO or SEOPress):"") — means the field is exposed and Semji
can update it. null means the code is not running yet.
Expose ACF fields to Semji
Many WordPress sites structure their content with Advanced Custom Fields (ACF) — for example a FAQ custom post type whose question and answer live in dedicated fields rather than in the post body. Semji’s agents handle those fields natively: Read posts returns a post’s ACF values, and Create posts / Update posts fill them. This only works for fields visible through the REST API, and ACF does not expose field groups by default: out of the box theacf key is absent from
your site’s REST responses, so agents cannot see the fields — let alone fill
them — and will tell you so during a publication.
Unlike the SEO fields above, no PHP snippet is needed: ACF (free and Pro,
version 5.11 or newer) ships native REST API support behind a single setting.
The Secure Custom Fields fork offers the same setting.
Enable “Show in REST API” on the field group
The setting lives on the field group, not on each individual field:Open the field group
Enable Show in REST API
Repeat for each field group
'show_in_rest' => true to register_post_type().Verify the fields are exposed
Call your REST API with the same credentials Semji uses, on any existing item — swapfaq for the rest base of your content type (posts for built-in
posts):
null means the field group is
not exposed yet.
Help agents fill the fields correctly
The REST API carries only field names and values: the labels and instructions you see in wp-admin stay invisible to agents. Agents discover a type’s fields by reading an existing item, so a few habits make the fills reliable:- Use descriptive field names — an agent understands
answer_short; it can only guess atfield_2. - Keep at least one well-filled item of each content type: agents read it to learn which field holds what, and the expected value shape (plain text vs HTML, media ID for an image field, …).
- Brief the agent — when field names are ambiguous, say what each field is for in your instructions; the agent will map its content accordingly.
Manage or disconnect
From Settings → Integrations → CMS, the WordPress row offers:- Manage tools — enable or disable each of the six tools.
- Disconnect — remove the integration for the whole workspace.
Firewalls, Cloudflare, and IP allowlisting
Semji’s servers call your WordPress REST API directly. If your site sits behind Cloudflare or another WAF, you must allow those calls or the connection will fail. Semji’s servers reach the internet through a fixed set of outbound IP addresses. If a firewall, WAF, or anti-bot protection (Cloudflare, Akamai, Sucuri, …) sits in front of your site, it can block Semji’s requests — typically with a403 Forbidden — before they ever reach your CMS, even when your credentials are correct.
Allow the following Semji IP addresses:
/wp-json/.
Troubleshooting
"Invalid WordPress credentials. Check the email or username and the application password."
"Invalid WordPress credentials. Check the email or username and the application password."
401 or 403. Either the login (email or username)
or application password is wrong or was revoked, application passwords are disabled on
the site, or — very commonly — a WAF or anti-bot layer (Cloudflare,
Wordfence, …) is blocking Semji before the request reaches WordPress. See
Firewalls, Cloudflare, and IP
allowlisting."Could not connect to the WordPress site. Check credentials and site URL."
"Could not connect to the WordPress site. Check credentials and site URL."
- The URL redirects. Semji follows no redirects: if
https://example.comredirects tohttps://www.example.com, enter thewwwURL. Same for HTTP→HTTPS or trailing-path redirects. - The REST API is not served —
/wp-json/returns 404 (REST API disabled by a plugin, or permalink/rewrite issues on the server). - The site is unreachable — DNS failure, host down, or the domain resolves to a private network address.
- The site is too slow — responses must arrive within 10 seconds.
URL validation errors before submitting
URL validation errors before submitting
- “Please enter a valid URL.” — the value does not parse as a URL.
- “The site URL must start with https://.” — HTTP sites cannot be connected.
- “The site URL points to a private or reserved address, which is not allowed.” — localhost and private-network hosts are rejected; the site must be publicly reachable.
An agent reports a WordPress error after the connection worked
An agent reports a WordPress error after the connection worked
- “WordPress authentication failed. Please check the credentials in the integration settings.” — the application password was revoked or changed since connection. Reconnect with a fresh one.
- “No WordPress integration configured for this workspace.” — the integration was disconnected; a workspace owner must reconnect it.
- “The post was updated, but its SEO metadata was NOT: no supported SEO plugin (Yoast SEO, Rank Math or SEOPress) was detected…” — Semji found neither Yoast SEO, Rank Math, nor SEOPress on the site. Activate one of them, or if one is already active, apply the prerequisite configuration so its fields are visible through the REST API.
- “The SEO metadata was NOT saved: this WordPress site runs … but does not expose its … field(s) for writing through the REST API…” — the site does not accept REST API writes on your SEO plugin’s fields yet. Apply the prerequisite configuration described in Enable SEO title and meta description updates. The rest of the post update was applied.
An agent says it cannot see or fill the ACF fields of a content type
An agent says it cannot see or fill the ACF fields of a content type
acf key is
absent from your site’s REST responses and agents cannot read or write
those fields. Enable Show in REST API on the field group — see
Expose ACF fields to Semji. If the content
type itself does not show up when the agent lists post types, the post
type also needs to be visible in the REST API (same section).Related
- Sync drafts to your CMS — API-based publishing flow, if you prefer to drive the sync yourself.