Suggest categories and tags for content
package main
import ( "fmt" "strings" "net/http" "io")
func main() {
url := "https://api.ai.wpengine.com/v1/content/suggest-taxonomy"
payload := strings.NewReader("{ \"model\": \"google/gemini-3.5-flash\", \"content\": \"example\", \"categories\": [ \"example\" ], \"approved_tags\": [ \"example\" ], \"new_tag_confidence_threshold\": 0.5, \"context\": \"example\" }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>") req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close() body, _ := io.ReadAll(res.Body)
fmt.Println(res) fmt.Println(string(body))
}const url = 'https://api.ai.wpengine.com/v1/content/suggest-taxonomy';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"model":"google/gemini-3.5-flash","content":"example","categories":["example"],"approved_tags":["example"],"new_tag_confidence_threshold":0.5,"context":"example"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('POST', 'https://api.ai.wpengine.com/v1/content/suggest-taxonomy', [ 'body' => '{ "model": "google/gemini-3.5-flash", "content": "example", "categories": [ "example" ], "approved_tags": [ "example" ], "new_tag_confidence_threshold": 0.5, "context": "example" }', 'headers' => [ 'Authorization' => 'Bearer <token>', 'Content-Type' => 'application/json', ],]);
echo $response->getBody();curl --request POST \ --url https://api.ai.wpengine.com/v1/content/suggest-taxonomy \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "model": "google/gemini-3.5-flash", "content": "example", "categories": [ "example" ], "approved_tags": [ "example" ], "new_tag_confidence_threshold": 0.5, "context": "example" }'Analyzes content and suggests categories from a provided list and relevant tags. Tags are cross-referenced against an optional approved list and flagged as “existing” or “new”. Net-new tags are filtered by a configurable confidence threshold. Requires a valid WP Engine bearer token; API keys must carry the “chat:write” permission.
Authorizations
Section titled “Authorizations”Request Bodyrequired
Section titled “Request Bodyrequired”object
Optional model identifier. Defaults to a Gemini model when omitted.
Example
google/gemini-3.5-flashThe content to analyze for categorization and tagging.
Fixed list of categories to select from.
Optional list of pre-approved tags. Tags matching this list are flagged as “existing” in the response.
Minimum confidence for including net-new tags. Tags with source “new” below this threshold are excluded from the response.
Optional context describing the content domain (e.g. “newsroom article”, “product listing”).
Responses
Section titled “Responses”Suggested categories and tags
object
object
Category name from the provided list.
Confidence score between 0.0 and 1.0.
object
The suggested tag.
Confidence score between 0.0 and 1.0.
Whether the tag matched the approved list (“existing”) or was generated by the model (“new”).
The model used for generation.
Example
{ "tags": [ { "source": "existing" } ]}Invalid request body or parameters
object
object
Correlation ID for this request, matching the X-Request-ID response header — a 32-character trace ID behind the load balancer, otherwise a UUID. Quote it in support reports.
Example
{ "error": { "type": "invalid_request_error", "request_id": "80f1e2c3a4b5c6d7e8f9a0b1c2d3e4f5" }}Missing or invalid bearer token
object
object
Correlation ID for this request, matching the X-Request-ID response header — a 32-character trace ID behind the load balancer, otherwise a UUID. Quote it in support reports.
Example
{ "error": { "type": "invalid_request_error", "request_id": "80f1e2c3a4b5c6d7e8f9a0b1c2d3e4f5" }}Headers
Section titled “Headers”Example
Bearer realm="ai-services"The account’s credit balance is exhausted. Grant or top up credits before retrying. Distinct from 429, which is edge rate limiting.
object
object
Correlation ID for this request, matching the X-Request-ID response header — a 32-character trace ID behind the load balancer, otherwise a UUID. Quote it in support reports.
Example
{ "error": { "type": "invalid_request_error", "request_id": "80f1e2c3a4b5c6d7e8f9a0b1c2d3e4f5" }}The token is valid, but the caller is not permitted to perform this action — either its scope/permission is insufficient or the authenticated user is not authorized for the target account (error type “permission_error”). On /v1/chat/completions specifically, a 403 with error type “content_policy_violation” instead means the request content was blocked by content moderation policy; that response never identifies which filter or category matched.
object
object
Correlation ID for this request, matching the X-Request-ID response header — a 32-character trace ID behind the load balancer, otherwise a UUID. Quote it in support reports.
Example
{ "error": { "type": "invalid_request_error", "request_id": "80f1e2c3a4b5c6d7e8f9a0b1c2d3e4f5" }}Rate limit exceeded. The request was throttled at the edge; wait and retry later. The response body is a short HTML page generated by the load balancer, not a structured JSON error — clients should rely on the 429 status code rather than parsing the body.
Upstream provider returned an error
object
object
Correlation ID for this request, matching the X-Request-ID response header — a 32-character trace ID behind the load balancer, otherwise a UUID. Quote it in support reports.
Example
{ "error": { "type": "invalid_request_error", "request_id": "80f1e2c3a4b5c6d7e8f9a0b1c2d3e4f5" }}A required dependency is temporarily unavailable. Retry after a short delay with exponential back-off.
object
object
Correlation ID for this request, matching the X-Request-ID response header — a 32-character trace ID behind the load balancer, otherwise a UUID. Quote it in support reports.
Example
{ "error": { "type": "invalid_request_error", "request_id": "80f1e2c3a4b5c6d7e8f9a0b1c2d3e4f5" }}