Skip to content
WP EngineDocumentation

List agents

GET
/v1/agents
<?php
$client = new \GuzzleHttp\Client();
$response = $client->request('GET', 'https://api.ai.wpengine.com/v1/agents?project_id=example&page_size=20', [
'headers' => [
'Authorization' => 'Bearer <token>',
],
]);
echo $response->getBody();

Returns a paginated list of agents under project_id, newest first. Each entry is the full AgentResponse shape — the same fields returned by GET /v1/agents/{agent_id}. Soft-deleted rows are excluded. Agents can be filtered by metadata key/value pairs. Pagination is keyset-based: clients pass back the opaque next_page cursor from the previous response as the next_page query parameter to fetch the following page. Accepts a service-token bearer authenticating a site (the project must belong to the site’s account) or an API key scoped to project_id.

project_id
required
string

The project to list agents for. The caller must be authorized for it.

page_size
integer
default: 20 >= 1 <= 100

Maximum number of agents returned per page. Default 20, maximum 100.

next_page
string

Opaque pagination cursor from a previous response’s next_page field. Round-trip it verbatim.

metadata_key
string

Metadata key to filter by. Must be provided with metadata_value.

metadata_value
string

Metadata value to filter by. Must be provided with metadata_key.

A list of agents

Media typeapplication/json
object
data
required
Array<object>
object
id
required

Unique identifier for the agent.

string
type
required
string
Allowed values: agent
project_id
required

The project the agent belongs to.

string
name
required
string
model
required
string
description
string
system_prompt

User prompt template (site prompt). On an agent with a profile this is the profile’s current prompt.

string
profile

Server-owned profile the agent follows (see CreateAgentRequest.profile). Omitted when the client owns every field.

string
managed_fields

Fields owned by the agent’s profile, which the client cannot write. Omitted when the agent has no profile.

Array<string>
allowed_models

Models the agent’s profile allows as a model choice. Omitted when the agent has no profile.

Array<string>
temperature
number format: float
max_tokens

Output-token limit per turn (see CreateAgentRequest.max_tokens). Omitted when unset on the agent.

integer
reasoning_effort

Catalog-native reasoning effort stored on the agent. Omitted when unset. Allowed values follow the agent’s current model on GET /v1/models.

string
scopes

Permission scopes the agent operates under (round-trips the request value).

Array<string>
settings

Feature toggles for the agent (round-trips the request value).

object
key
additional properties
any
mcp_servers
Array<object>
object
key
additional properties
any
tools

Tool declarations (client tools, knowledge_base grounding entries, and echo/random_number evaluation tool opt-ins) round-tripped from the request.

Array
One of: discriminator: type
object
type

Discriminator for the tools[] union. Omit for a plain client tool (the default); custom is the only value this schema accepts.

string
Allowed values: custom
name

Unique tool name. Must be unique within the agent’s tools array (across every entry, regardless of type). Always present for tools created since name validation was added; may be absent on an agent whose tools were stored before that validation existed.

string
<= 64 characters /^[a-zA-Z0-9_-]{1,64}$/
description

Human-readable description of what the tool does.

string
input_schema

JSON Schema defining the tool’s input parameters.

object
label

Optional short human-readable name for the tool, used alongside name and description when the gateway matches a search query against deferred tools. Supply it when the tool’s name is a slug whose wording a natural-language query would not contain.

string
<= 64 characters
defer_loading

When true, the tool is declared but kept out of the model’s tool list until it is needed, so a large catalogue costs no context up front. The gateway offers the agent a search over the deferred tools and loads the matches, and a deferred tool the model names directly is loaded on demand. Once loaded, its input is enforced strictly against its schema — unlike a non-deferred tool, which keeps today’s lenient handling — so a malformed call is rejected with a model-readable error instead of failing downstream. Leave false (the default) for tools that must be callable from the first turn.

boolean
skills
Array<object>
object
key
additional properties
any
metadata

User-supplied string metadata. Reserved keys (“scopes”, “settings”) are surfaced on their own top-level fields rather than appearing here.

object
key
additional properties
string
<= 512 characters
created_at
required
string format: date-time
updated_at
string format: date-time
nullable
next_page

Opaque cursor for the next page. Omit (or empty) when no more results. Pass back verbatim as the next_page query parameter on the next request.

string
Example
{
"data": [
{
"type": "agent",
"managed_fields": [
"model",
"system_prompt"
],
"tools": [
{
"type": "custom",
"defer_loading": false
}
]
}
]
}

Invalid request body or parameters

Media typeapplication/json
object
error
required
object
message
required
string
type
required
string
code
required
integer
request_id
required

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.

string
Example
{
"error": {
"type": "invalid_request_error",
"request_id": "80f1e2c3a4b5c6d7e8f9a0b1c2d3e4f5"
}
}

Missing or invalid bearer token

Media typeapplication/json
object
error
required
object
message
required
string
type
required
string
code
required
integer
request_id
required

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.

string
Example
{
"error": {
"type": "invalid_request_error",
"request_id": "80f1e2c3a4b5c6d7e8f9a0b1c2d3e4f5"
}
}
WWW-Authenticate
string
Example
Bearer realm="ai-services"

The token is valid, but the request is forbidden. Error type “permission_error” means the token’s scope/permission is insufficient or the authenticated user is not authorized for the target account; “entitlement_required” means the account lacks the required product entitlement; and “account_required” means no billing account could be resolved. On /v1/chat/completions when content moderation is enabled, and on /v1/sessions/{session_id}/events, 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.

Media typeapplication/json
object
error
required
object
message
required
string
type
required
string
code
required
integer
request_id
required

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.

string
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.

Media typetext/html
string

The server encountered an unexpected error while handling the request. Safe to retry once; if it persists, the cause is server-side and the request payload was not the problem.

Media typeapplication/json
object
error
required
object
message
required
string
type
required
string
code
required
integer
request_id
required

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.

string
Example
{
"error": {
"type": "invalid_request_error",
"request_id": "80f1e2c3a4b5c6d7e8f9a0b1c2d3e4f5"
}
}

A required dependency is temporarily unavailable. Retry after a short delay with exponential back-off. An entitlement lookup failure uses error type “entitlement_unavailable”.

Media typeapplication/json
object
error
required
object
message
required
string
type
required
string
code
required
integer
request_id
required

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.

string
Example
{
"error": {
"type": "invalid_request_error",
"request_id": "80f1e2c3a4b5c6d7e8f9a0b1c2d3e4f5"
}
}