Skip to main content
If you run Caylex on behalf of your own customers (a multi-tenant SaaS pattern), you’ll often want one project per customer, each pre-loaded with the same servers, navigators, and tool-permission policy. Rather than building each one by hand in the Caylex Platform UI — or scripting the half-dozen calls it takes — you can stand up a model project once and clone it for every customer with a single request.

Clone a project in one call

POST /projects/from-seed takes a reference to a seed (model) project and a new project name, then does everything needed to stand up an equivalent project:
  1. Creates the new project (409 if the name is already taken — names are unique per tenant).
  2. Connects the same servers as the seed project.
  3. Connects the same navigators as the seed project.
  4. Copies each navigator’s tool-permission policy onto the new navigator instances.
  5. Mints a runtime API key for each new navigator instance and returns it (shown once).

Request

Response

The navigator_instance_id and server_instance_id values are the handles for any follow-up calls (tool permissions, key rotation, pausing a server, etc.). Each navigator’s api_key is returned only once — store it immediately.
The api_key values are shown only in this response. Capture them and store them in your secret manager keyed by customer + navigator. The runtime API key is what your agent submits to Caylex on each tool call to identify which navigator to use — see Connecting your agent.

Example

provision_from_seed.py
The call returns 409 if a project with that name already exists, so the loop above is safe to re-run — already-provisioned customers are skipped.
Servers with user-level authentication only need to be connected — each end user still authenticates individually at runtime via auth links or in-chat authentication. Connecting the server does not grant access to anyone’s data.
The endpoint runs its steps incrementally rather than as a single transaction. If a later step fails after the project is created, the project will exist (so a retry hits the 409 path) — finish the setup with the granular endpoints below, or delete the project and retry.

Under the hood: the granular endpoints

from-seed wraps the procedures below. You don’t need them for the common case, but expand any step to see exactly what it does — useful if you want finer control, or to apply one piece (like copying permissions) to projects that already exist.
Servers and navigators are defined once at the tenant level. Adding one to a project creates an instance (a server instance or navigator instance). To replicate a seed project, connect the same tenant-level servers and navigators to the new project.
The connection endpoints replace the full set of projects a server or navigator is connected to. To add a project without detaching the resource from others, GET the current connections, append the new project, and POST the union.
connect_servers_navigators.py
Connecting a navigator creates a navigator instance, but it has no runtime key yet — and your agent needs a navigator API key (ck_…) to connect. from-seed mints one per navigator automatically; to do it yourself (or to rotate keys later):
See the full recipe → Generate Navigator API Keys.
Tool permissions are configured per navigator instance (always_execute, require_approval, or disabled). from-seed copies the seed navigator’s policy onto each new navigator instance. To replicate a policy across projects that already exist:Because tools belong to tenant-level servers, a tool’s tool_id is stable across projects that share that server — so copying is a tool_id → mode mapping.See the full recipe → Copy Tool Permissions Across Projects.

Next steps

Generate navigator API keys

Rotate or mint additional runtime keys for a navigator instance.

Copy tool permissions

Replicate a navigator’s tool-permission policy onto existing projects.

Managing users

Add end users to each customer project and generate their auth links.

REST API Reference

Full request/response schemas for every endpoint used here.