Promote Project
Authentication
Enter your API key with the Bearer prefix, e.g. ‘Bearer sk_…’.
Enter your API key with the Bearer prefix, e.g. ‘Bearer sk_…’.
Copy this project’s configuration into another project in the same workspace, creating equivalent resources there. Use it to move a staging environment into production, or to seed one client’s project from another’s.
Copied: agents with every setting (prompt, voice, model, memory and consent settings, builtin tools, tool and knowledge-base bindings, the draft and published flow versions, test definitions), tool definitions, knowledge bases with their folders (URL sources are re-imported in the target through the normal import path, so the response lists the import jobs to poll), audio assets (the object is copied), and the webhook endpoints scoped to the source.
Never copied: vault credentials, API keys and service accounts, phone
numbers and SIP trunks, conversations, callers, memories, call and
test history, batch calls, member grants, spend limits, uploaded or
pasted knowledge-base documents, and every secret. A copied tool or
agent that referenced a credential has the reference cleared, every
server-minted signing secret is minted fresh, and each such item is
listed under needs_attention so nothing is silently half-configured.
A copy keeps its name. Where the target already holds a resource of
the same kind and name, the copy is suffixed (name (2), or name_2
for tools) and listed under needs_attention with reason renamed;
a target tool whose definition is identical to the source’s is bound
instead of duplicated and appears under reused.
The copy runs in one transaction. A project holding more than 200
resources (agents, tools, knowledge bases, URL sources, audio assets,
webhook endpoints and tests together) answers 409 project_too_large_to_promote. Send an Idempotency-Key header to
make a retry safe: the first manifest is replayed rather than the
project copied twice. Both projects must be reachable to the caller;
a project-pinned credential cannot promote.
A client-generated key (an opaque string, max 255 chars) that makes a
side-effect POST safe to retry: the server runs the operation exactly
once and replays the first response (its status and body) for 24 hours.
Reusing a key with a different request body, or while the first request
is still in flight, returns 409 idempotency_conflict. A replayed
response carries the Idempotent-Replayed: true header.
Unique identifier for this request, present on every response (2xx and
non-2xx alike). If the caller sends a Speechify-Request-Id request
header the server echoes it back (sanitized and length-capped) so one
logical request can be traced end-to-end; otherwise the server generates
a fresh value. Log it on every response and quote it in support requests
request_id field in the error
envelope.The legacy alias X-Request-ID carries the same value and is still
accepted on requests, until 2027-07-24. Prefer the un-prefixed name
(RFC 6648).