Import a full configuration snapshot, including knowledge articles
Authentication
Bearer authentication of the form Bearer <token>, where token is your auth token.
Request
Defaults to validate. Send mode: "apply" explicitly to write
anything — an omitted mode is a dry run, not an import.
validate writes nothing: it checks that the source is a readable,
supported snapshot whose configuration document would apply to this
Agent, and reports the create/update/delete counts the apply would
produce — including how many knowledge articles the full replace
would delete.
apply imports the snapshot. It is a full replace with hard deletes
and it is not atomic, so the two mistakes do not cost the same: a
caller who meant validate and got apply has destroyed an Agent’s knowledge,
while one who meant apply and got validate has lost a round trip.
The default is set accordingly.
Both are asynchronous and both need the archive uploaded: validate
also returns a job_id and an upload, and its verdict is the job’s
result.
The Agent’s client secrets, by variable name. When the AI Agent calls
your systems — an HTTP-request action hitting your order service, say
— it authenticates with these. They are the client_secret-scope
variables managed under Content > Authentication in the Agent.
Supply them because secret values never travel in the export archive.
The names the snapshot needs are listed in the export’s own secrets
block, each with a null value — fill those in and send the result
here.
They are provisioned when the import is requested, before the archive is uploaded, and never stored on the job, so a request whose upload never lands still leaves the values provisioned. A secret the snapshot needs that is neither supplied nor already on the target Agent is a warning, not a failure — the actions using it fail at runtime until someone supplies it.
Applies the snapshot with its safety gates off, and leaves the Agent needing manual repair. Never use it on an Agent serving traffic.
With include, the import normally follows every reference out of the
sections you named and brings the targets along, so a playbook that
calls a tool arrives with that tool, a handoff arrives with the
variables its messages interpolate, and a coaching entry arrives with
the action it points at. allow_unsafe_import stops all of that: only
the sections in include are applied, and every reference leaving
them — of any kind, from any section — is left dangling unless the
target Agent already has what it names.
It also drops the checks that would otherwise refuse such an import. An active playbook whose tool, variable or response references do not resolve is written anyway rather than rejected. Pre-flight blockers — a handoff whose integration is not connected on this Agent, a required client feature that is off — are reported as warnings instead of failing the job.
What lands is a broken Agent: playbooks holding unresolved {action:…}
text that no-ops at runtime, handoffs pointing at integrations that do
not exist, coaching entries whose target was never created. Nothing
repairs it later — someone fixes each reference by hand, or imports the
missing sections afterwards.
It exists for rebuilding a scratch or test Agent out of one slice of a
snapshot, where a half-wired Agent is more useful than a refused
import. Run mode: validate with the same flag first: every reference
you are about to break is listed in selection.unresolved, and every
overridden blocker appears under warnings.
Import only these sections of the snapshot. Omit to import all of it.
Anything a listed section references travels with it. Importing
playbooks also brings the articles, variables, API tools and
handoffs those playbooks use; importing handoffs brings the
variables their messages interpolate. The archive itself is not
filtered — the selection is applied when it is read.
A section you list is replaced: entities of that type absent from the snapshot are deleted, exactly as a whole-snapshot import would. A section pulled in only as a dependency is added to, never pruned — importing one playbook cannot delete a variable it does not use. Sections you neither list nor reach are untouched.
The job’s result.selection reports what came over, including any
reference that could not be resolved. Use mode: validate to see it
before applying.
allow_unsafe_import: true turns the dependency pull off, so only the
sections listed here are applied and their outbound references dangle.
Response
Accepted — for mode: validate as well, which reports its verdict as
the job’s result rather than inline. Send the archive to upload.url,
then poll the returned job_id at GET /v2/config/jobs/{job_id} for
progress, warnings, and the result.
Always waiting_for_upload: the job exists but cannot start until the
archive arrives at upload.url.
Where to send the configuration snapshot for an import.
{url, method, expires_at} — send the raw .tar.gz bytes to url with a
single PUT. expires_at is checked when the upload starts, so one begun
before it and still running after completes normally.