# Create an automation

`POST /v1/automations`

Recurring schedules require cron; one-time schedules require runAt; webhook automations require triggerEvent.

Required OAuth scopes: `automations:write`

## Parameters

- `Idempotency-Key` (header, string): Optional unique key. When supplied, retries with the same key and body replay the original response for 24 hours.

## Request body

- `name` (string, required)
- `prompt` (string, required)
- `effort` ("low" | "medium" | "high" | "xhigh" | "max" | null)
- `enabled` (boolean)
- `visibility` ("private" | "team")
- `trigger` ("schedule" | "webhook", required)
- `type` ("recurring" | "one_time", required)
- `cron` (string)
- `timezone` (string)
- `runAt` (string (date-time))
- `triggerProvider` ("composio")
- `triggerEvent` (string)
- `triggerApp` (string)
- `triggerConfig` (object)

## Responses

- `201`
  - `automation` (object, required)
    - `id` (string (uuid), required)
    - `name` (string, required)
    - `prompt` (string, required)
    - `effort` ("low" | "medium" | "high" | "xhigh" | "max" | null, required)
    - `enabled` (boolean, required)
    - `trigger` ("schedule" | "webhook", required)
    - `type` ("recurring" | "one_time", required)
    - `cron` (string | null, required)
    - `timezone` (string, required)
    - `runAt` (string (date-time) | null, required)
    - `nextRunAt` (string (date-time) | null, required)
    - `triggerProvider` ("composio" | null, required)
    - `triggerEvent` (string | null, required)
    - `triggerApp` (string | null, required)
    - `triggerConfig` (object | null, required)
    - `taskId` (string (uuid) | null, required)
    - `visibility` ("private" | "team", required)
    - `lastRunAt` (string (date-time) | null, required)
    - `lastStatus` ("running" | "completed" | "failed" | "skipped" | null, required)
    - `runCount` (integer, required)
    - `createdAt` (string (date-time), required)
    - `updatedAt` (string (date-time), required)
- `400`: Invalid request
- `401`: Missing or invalid Bearer credential
- `402`: Payment or subscription required
- `403`: Credential is missing a required scope
- `404`: Resource not found
- `409`: Request conflict
- `429`: Rate limit exceeded
- `500`: Internal API error
