diff --git a/api-reference/agents.mdx b/api-reference/agents.mdx index 5c66938..e23428d 100644 --- a/api-reference/agents.mdx +++ b/api-reference/agents.mdx @@ -266,7 +266,7 @@ Provisions a new agent. Requires an active subscription unless the caller is an | `config` | object | No | Agent configuration | | `tier` | string | No | Subscription tier hint. Options: `starter`, `pro`, `enterprise`. This value is forwarded to the backend as the `plan` field (mapped to `solo`, `collective`, `label`, `network`). When omitted, the backend deployment defaults to `label`. | -The web proxy enforces agent limits based on the subscription tier (`starter`: 1, `pro`: 3, `enterprise`: 100). The backend provisioning route (`POST /api/provision`) enforces its own limits (`solo`: 1, `collective`: 3, `label`: 10, `network`: unlimited). Each plan maps to a Render instance type: `solo` → `starter` (512 MB RAM), `collective` → `standard` (2 GB RAM), `label` → `pro` (4 GB RAM), `network` → `pro_plus` (8 GB RAM). The limit cannot be overridden in the request body. +The web proxy enforces agent limits based on the subscription tier (`starter`: 1, `pro`: 3, `enterprise`: 100). The backend provisioning route (`POST /api/provision`) enforces its own limits (`solo`: 1, `collective`: 3, `label`: 10, `network`: practically unlimited). Plan resource allocations: `solo` → 2 GB RAM / 1 CPU, `collective` → 4 GB RAM / 2 CPUs, `label` → 8 GB RAM / 4 CPUs, `network` → 16 GB RAM / 4 CPUs. The limit cannot be overridden in the request body. ### Admin bypass @@ -636,7 +636,7 @@ Lifecycle operations are available at two endpoint patterns depending on which s Both patterns support the same actions. The examples below use the backend pattern. -All lifecycle operations require the Render API to be available. When the Render API is unreachable, these endpoints return `500` with an error message describing the failure. You can check availability using the [backend health endpoint](/api-reference/health#backend-health-check) — when the `render` field is `unavailable`, lifecycle operations will fail. The API itself continues to serve non-lifecycle endpoints normally. +All lifecycle operations require the Render API to be available. When the Render API is unreachable, these endpoints return `500` with an error message describing the failure. You can check availability using the [backend health endpoint](/api-reference/health#backend-health-check) — when the `docker` field is `unavailable`, lifecycle operations will fail. The API itself continues to serve non-lifecycle endpoints normally. ### Start agent @@ -1025,22 +1025,20 @@ When calling the backend provisioning service directly, the response includes ad "container": { "name": "agentbot-agent-a1b2c3d4e5", "status": "running", - "serviceId": "srv-abc123def456", - "url": "https://agentbot-agent-a1b2c3d4e5.onrender.com" + "port": 19000, + "gatewayUrl": "http://127.0.0.1:19000" } } ``` -The `container` object is included when the backend successfully creates a Render service for the agent. If service creation fails (for example, when the Render API is unavailable), provisioning still succeeds and the `container` field is omitted. The agent can operate using API-side processing until the service becomes available. You can check Render API availability using the [backend health endpoint](/api-reference/health#backend-health-check). +The `container` object is included when the backend successfully creates a service for the agent. If service creation fails (for example, when the Render API is unavailable), provisioning still succeeds and the `container` field is omitted. The agent can operate using API-side processing until the service becomes available. You can check Render API availability using the [backend health endpoint](/api-reference/health#backend-health-check). | Field | Type | Description | |-------|------|-------------| -| `container.name` | string | Render service name | +| `container.name` | string | Service container name | | `container.status` | string | Service status (for example, `running`, `suspended`) | -| `container.serviceId` | string | Render service identifier | -| `container.url` | string | Public URL of the deployed Render service | - -The following `container` response fields are deprecated and no longer returned: `port`, `gatewayUrl`. Agents are now provisioned as Render web services with a public URL instead of local Docker containers with mapped ports. +| `container.port` | number | Host port mapped to the agent's internal gateway port (`18789`) | +| `container.gatewayUrl` | string | Local gateway URL in the format `http://127.0.0.1:` | ### Errors @@ -1049,7 +1047,7 @@ When calling the backend provisioning service directly, the response includes ad | 400 | At least one channel token required (Telegram, WhatsApp, or Discord), or invalid `aiProvider` value | | 400 | Invalid plan value. The `plan` field must be one of `solo`, `collective`, `label`, or `network`. Unrecognized values (including the default `free`) return this error. | | 402 | Active subscription required. Returned when a valid plan is specified but no Stripe subscription ID is provided and the caller is not an admin or tester. The response body includes a `code` field set to `PAYMENT_REQUIRED`. | -| 402 | Agent limit reached for your plan. The response body includes a `code` field set to `AGENT_LIMIT_REACHED`, along with `current` (current agent count) and `limit` (maximum allowed) fields. Provisioning limits: `solo` 1, `collective` 3, `label` 10, `network` unlimited. | +| 402 | Agent limit reached for your plan. The response body includes a `code` field set to `AGENT_LIMIT_REACHED`, along with `current` (current agent count) and `limit` (maximum allowed) fields. Provisioning limits: `solo` 1, `collective` 3, `label` 10, `network` practically unlimited. | | 500 | Internal server error | | 502 | Provisioning service unavailable or returned an error. All backend URLs failed or returned non-success responses. | | 503 | Provisioning is temporarily disabled (kill switch active) | @@ -1081,7 +1079,7 @@ The `aiProviderConfig` object returned in the provision response uses different | `gemini` | `gemini-2.0-flash` | `https://generativelanguage.googleapis.com/v1beta/models` | | `groq` | `mixtral-8x7b-32768` | `https://api.groq.com/openai/v1` | | `anthropic` | `claude-3-sonnet-20240229` | `https://api.anthropic.com/v1` | -| `openai` | `openai/gpt-4o` | `https://api.openai.com/v1` | +| `openai` | `gpt-4o` | `https://api.openai.com/v1` | | `minimax` | `MiniMax/MiniMax-Text-01` | `https://api.minimax.chat/v1` | Each provider includes a fallback model in the service config that is used automatically when the primary model is unavailable or returns an error. diff --git a/api-reference/ai.mdx b/api-reference/ai.mdx index c18703b..2d06f7e 100644 --- a/api-reference/ai.mdx +++ b/api-reference/ai.mdx @@ -270,14 +270,14 @@ Each subscription plan grants access to a specific set of AI models. The chat en | Plan | Price | Models | Provision limit | Skill limit | A2A messages/day | |------|-------|--------|-----------------|-------------|------------------| -| `solo` | £29/mo | `openai/gpt-4o-mini`, `openai/gpt-4o`, `google/gemini-2.0-flash`, `anthropic/claude-3.5-sonnet`, `xiaomi/mimo-v2-pro` | 1 | 10 | 500 | -| `collective` | £69/mo | `openai/gpt-4o-mini`, `openai/gpt-4o`, `openai/gpt-4-turbo`, `google/gemini-2.0-flash`, `anthropic/claude-3.5-sonnet`, `anthropic/claude-3-opus`, `xiaomi/mimo-v2-pro` | 3 | 25 | 2,000 | -| `label` | £149/mo | `openai/gpt-4o-mini`, `google/gemini-2.0-flash`, `xiaomi/mimo-v2-pro` | 10 | 3 | 100 | -| `network` | £499/mo | All models | Unlimited | 100 | 10,000 | +| `label` | £29/mo | `openai/gpt-4o-mini`, `google/gemini-2.0-flash`, `xiaomi/mimo-v2-pro` | 1 | 3 | 100 | +| `solo` | £79/mo | `openai/gpt-4o-mini`, `openai/gpt-4o`, `google/gemini-2.0-flash`, `anthropic/claude-3.5-sonnet`, `xiaomi/mimo-v2-pro` | 3 | 10 | 500 | +| `collective` | £199/mo | `openai/gpt-4o-mini`, `openai/gpt-4o`, `openai/gpt-4-turbo`, `google/gemini-2.0-flash`, `anthropic/claude-3.5-sonnet`, `anthropic/claude-3-opus`, `xiaomi/mimo-v2-pro` | 10 | 25 | 2,000 | +| `network` | £499/mo | All models | 100 | 100 | 10,000 | Admin users are automatically granted `network`-level access regardless of their subscription plan. -The plan middleware enforces model access based on the `x-user-plan` header. The `label` plan has the smallest model set (3 models) despite having a higher provision limit (10 agents) than `solo`. This is because `label` is designed for label operations where fewer model choices are needed but more agents are required. +The plan middleware enforces model access based on the `x-user-plan` header. The `label` plan has the smallest model set (3 models) and is the entry-level tier designed for basic operations. The `solo` plan offers more models and a higher skill limit for individual users. ## Model fallbacks diff --git a/api-reference/health.mdx b/api-reference/health.mdx index cb85855..bbe13c1 100644 --- a/api-reference/health.mdx +++ b/api-reference/health.mdx @@ -94,8 +94,9 @@ No authentication required. Returns backend service status including Render API { "status": "ok", "timestamp": "2026-03-19T00:00:00Z", - "render": "available", - "provisioning": "enabled" + "docker": "available", + "provisioning": "enabled", + "provider": "render" } ``` @@ -103,10 +104,9 @@ No authentication required. Returns backend service status including Render API |-------|------|-------------| | `status` | string | Always `ok` when the backend is running | | `timestamp` | string | ISO 8601 timestamp of the health check | -| `render` | string | Render API availability. `available` when the Render API is reachable, `unavailable` otherwise. | +| `docker` | string | Provisioning infrastructure availability. `available` when the Render API is reachable, `unavailable` otherwise. Despite the field name, this checks the Render API — the name is a legacy artifact from when agents ran as local Docker containers. | | `provisioning` | string | Agent provisioning capability. `enabled` when the Render API is available, `disabled` otherwise. | - -The `docker` field is deprecated and no longer returned. Use the `render` field instead to check provisioning infrastructure availability. +| `provider` | string | Infrastructure provider. Always `render`. | ### Response when Render API is unavailable @@ -116,8 +116,9 @@ When the Render API is not reachable, the health endpoint still returns HTTP `20 { "status": "ok", "timestamp": "2026-03-19T00:00:00Z", - "render": "unavailable", - "provisioning": "disabled" + "docker": "unavailable", + "provisioning": "disabled", + "provider": "render" } ```