---
title: "Create a channel trigger"
method: POST
path: "/v1/channel-feeds"
tags: ["channel-feeds"]
---

# Create a channel trigger

`POST /v1/channel-feeds`

## Request

- Base URL: `https://api.patricia.app` (the document declares no server; this is the origin it was published from)
- URL: `https://api.patricia.app/v1/channel-feeds`
- Auth: HTTP bearer

## Headers

- `X-Tenant-Id` string, nullable

## Request body

- TriggerCreateRequest: Create or explicitly replace one channel event trigger.
  - `source` string, required
  - `event` string, required
  - `channel_external_id` string, required
  - `action` 'announce' | 'agent', required
  - `instruction` string, nullable
  - `template` string, nullable
  - `filter` string, nullable
  - `conditions` TriggerConditionInput[], nullable
    - `field` string, required
    - `value` string, required
  - `replace` boolean
  - `declaration` CreationDeclaration
    - `task` TaskDeclaration, required
      - `purpose` string, required: One plain sentence.
      - `deliverables` string[]: Short plain phrases.
      - `lines` DeclaredLine[], required: In order; repeat entries for repeats.
        - `tool_name` string, required: Exact.
        - `pins` object: Targets; omit varying args.
        - `targets` object[]: Arg map/target instead of pins.
        - `short_summary` string, nullable
        - `call_arguments` object, nullable: Exact planned args.
    - `arguments` object
    - `reads` CreationReadScope[]
      - `tool_name` string, required
      - `principal_key` string, required
      - `source` string, required
    - `lines` CreationPermissionLineInput[], nullable
      - `tool_name` string, required
      - `arguments` object, required
      - `reads` CreationReadScope[]
        - `tool_name` string, required
        - `principal_key` string, required
        - `source` string, required
      - `item_binding` CreationItemBindingInput
        - `kind` 'none' | 'selected_target' | 'source_item'
        - `read_tool_name` string, nullable
        - `target_argument` string, nullable
        - `resource_namespace` string, nullable
      - `call_cap` integer
      - `item_cap` integer
    - `max_writes_per_run` integer
  - `status` 'active' | 'stopped'

## Response `201`

Successful Response

- TriggerCreateResponse
  - `id` string, uuid, required
  - `action` 'announce' | 'agent', required
  - `status` 'active' | 'stopped', required
  - `source` string, required
  - `source_label` string, required
  - `source_connected` boolean, nullable
  - `event` string, required
  - `event_label` string, required
  - `narrowing` TriggerNarrowing[], required
    - `field` string, required
    - `label` string, required
    - `kind` string, required
    - `value` string, required
    - `display_value` string, required
  - `instruction` string, nullable, required
  - `template` string, required
  - `channel_name` string, nullable, required
  - `channel_external_id` string, required
  - `platform_code` string, required
  - `armed_by` string, nullable, required
  - `runs_as_caller` boolean, required
  - `armed_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `total_fires` integer, required
  - `last_fired_at` string, date-time, nullable, required
  - `failed_fires` integer, required
  - `last_failed_at` string, date-time, nullable, required
  - `creation_offer` CreationAttemptStatus: One permission-setup attempt for a saved task.
    - `attempt_id` string, uuid, required
    - `source_kind` 'task_cron' | 'event_trigger', required
    - `source_id` string, uuid, required
    - `state` 'unclaimed' | 'claimed' | 'completed' | 'failed' | 'superseded', required
    - `outcome` string, nullable, required
    - `candidate_id` string, uuid, nullable, required
    - `permission_active` boolean
    - `approved_permission` CreationApprovedPermission: The creator's live standing permission, separate from prepared details.
      - `grant_id` string, uuid, required
      - `tier` 'A' | 'B', required
      - `candidate_id` string, uuid, nullable, required
      - `instruction` string, required
      - `tool_names` string[], required
      - `external_account_id` string, required
      - `verified_principal` string, nullable, required
      - `fields` CreationCandidateField[], required
        - `name` string, required
        - `mode` string, required
        - `role` string, required
        - `cardinality` string, required
        - `element_type` string, nullable, required
        - `fixed` boolean, required
        - `value` unknown
        - `pin_reason` string, nullable, required
        - `max_items` integer, nullable, required
      - `reads` CreationApprovedRead[], required
        - `provider` string, required
        - `external_account_id` string, required
        - `principal_key` string, required
        - `source` string, required
      - `max_occurrences` integer, required
      - `max_actions` integer, required
      - `max_writes_per_run` integer, nullable, required
      - `expires_at` string, date-time, required
      - `lines` CreationCandidateLine[]
        - `line_id` string, required
        - `tool_name` string, required
        - `tool_ref` string, required
        - `account` CreationCandidateAccount, required
          - `provider` string, required
          - `external_account_id` string, required
          - `verified_principal` string, required
          - `connection_generation` integer, required
        - `fields` CreationCandidateField[], required
          - `name` string, required
          - `mode` string, required
          - `role` string, required
          - `cardinality` string, required
          - `element_type` string, nullable, required
          - `fixed` boolean, required
          - `value` unknown
          - `pin_reason` string, nullable, required
          - `max_items` integer, nullable, required
        - `call_cap` integer, required
        - `item_cap` integer, required
        - `item_binding` CreationItemBindingView, required
          - `kind` 'none' | 'selected_target' | 'source_item', required
          - `target_argument` string, nullable
          - `resource_namespace` string, nullable
          - `read` CreationCandidateRead
            - `account` CreationCandidateAccount, required
              - …
            - `principal_key` string, required
            - `source` string, required
          - `read_tool_ref` string, nullable
          - `read_schema_fingerprint` string, nullable
          - `extractor_code` string, nullable
          - `extractor_version` string, nullable
          - `projection_fingerprint` string, nullable
          - `toolkit_version` string, nullable
        - `normalization_changes` string[]
      - `repeat_scope` 'occurrence', nullable
      - `repeat_disclosure` string, nullable
    - `review` 'available' | 'unavailable' | 'expired', nullable

## Other responses

- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden. Inspect response body `code` for the specific reason (for example: PERMISSION_DENIED, EMAIL_NOT_VERIFIED, TENANT_ACCESS_REQUIRED, ROLE_UNRESOLVED)
- `409`: Conflict
- `422`: Validation error

---

[API](https://skmtc.dev/patricia/apis/patricia-api.md) · [All operations](https://skmtc.dev/patricia/apis/patricia-api/llms.txt) · [OpenAPI document](https://skmtc.dev/patricia/apis/patricia-api/revisions/0dfb44495ea1?raw)
