API referenceAgents APIDeploymentsCreate

Create a deployment

⚠️
Preview — this feature is being built; the design below is the spec.
POST https://app.syntic.ai/v1/deployments

Start agent sessions automatically, on a schedule or when an event arrives. Each firing creates a normal session whose first message is input_template with its placeholders filled in. For webhook deployments the response also contains trigger_url and signing_secret, shown only once.

For how this fits into a full workflow, see Scheduled and triggered runs.

Headers

HeaderRequiredValue
AuthorizationYesBearer <key>: a private inference key (sk_live_...). See Authentication.
syntic-betaYes, while in previewagents-2026-11-01. Without it the call fails with 400 beta_required. See Versioning.
Content-TypeYesapplication/json
Idempotency-KeyNoUp to 255 characters. Retrying with the same key within 24 hours returns the first result instead of creating a duplicate. See Idempotency.

Body parameters

ParameterTypeRequiredNotes
namestringYesUnique in the workspace.
agent_idstringYesAn active agent.
agent_versioninteger or nullNoPin a version; null uses the latest at firing time.
triggerobjectYes{type: "schedule", cron, timezone}, {type: "webhook"} or {type: "manual"}.
input_templatestringYesFirst user message of each session, with placeholders such as {{run.date}} and {{payload.order_id}}. Up to 20,000 characters.
session_optionsobjectNomemory_scope, environment_id, limits, metadata for each session.
concurrencystringNoskip_if_running (default), queue or allow.

Response

201 Created, Content-Type: application/json

{
  "id": "dep_01JC9E2G4J6L8N0Q2S4U",
  "type": "deployment",
  "name": "daily-ticket-digest",
  "agent_id": "agt_01JC4R8W6Q2N9X3T5V7Y",
  "agent_version": null,
  "status": "active",
  "trigger": {
    "type": "schedule",
    "cron": "0 7 * * 1-5",
    "timezone": "Europe/London"
  },
  "input_template": "Summarise the support tickets opened on {{run.date_previous_day}}. Post the digest to #support-leads.",
  "session_options": {
    "memory_scope": "team:support",
    "limits": {
      "max_turns": 20
    }
  },
  "concurrency": "skip_if_running",
  "next_run_at": "2026-11-06T07:00:00Z",
  "last_run": null,
  "created_at": "2026-11-01T12:00:00Z"
}

Examples

curl -sS https://app.syntic.ai/v1/deployments \
  -H "Authorization: Bearer $SYNTIC_API_KEY" \
  -H "syntic-beta: agents-2026-11-01" \
  -H "Idempotency-Key: 8d6f0c1e-4b2a-4a57-9f0e-2f1d3c4b5a69" \
  -H "Content-Type: application/json" \
  -d '{
      "name": "daily-ticket-digest",
      "agent_id": "agt_01JC4R8W6Q2N9X3T5V7Y",
      "trigger": {
        "type": "schedule",
        "cron": "0 7 * * 1-5",
        "timezone": "Europe/London"
      },
      "input_template": "Summarise the support tickets opened on {{run.date_previous_day}}. Post the digest to #support-leads.",
      "session_options": {
        "memory_scope": "team:support"
      }
    }'

Errors

Errors use the error envelope and carry a request_id. Codes specific to this operation:

StatustypecodeWhen
400invalid_request_errorbeta_requiredThe syntic-beta header is missing.
400invalid_request_errorinvalid_cronUnparseable, or fires more often than every 5 minutes.
400invalid_request_errorunknown_timezoneNot an IANA time zone.
400invalid_request_errorinvalid_templateUnclosed or unknown placeholder.
409conflict_erroragent_archivedThe agent is archived.
409conflict_errorname_takenAnother deployment uses this name.
401authentication_errorinvalid_api_keyThe key is missing, unknown, revoked or expired.
429rate_limit_errorrate_limitedToo many requests; wait for Retry-After. See Rate-limit headers.
Was this page helpful?