FruxonDocs
ApiTriggers

Creates a new trigger and optionally binds it to a set of agents atomically.

Creates the trigger together with any initial agent bindings supplied in the request, in a single transaction. The trigger `Kind` (schedule, webhook, or integration event) is fixed at creation — changing it later requires recreating the trigger, since each kind carries its own configuration shape.

POST
/v1/tenants/{tenant}/triggers
AuthorizationBearer <token>

JWT Authorization header using the Bearer scheme. Enter 'Bearer' [space] and then your token.

In: header

Path Parameters

tenant*string

The tenant identifier

kind?string

Discriminates between the different ways a trigger can fire an agent. Only Fruxon.Model.Triggers.TriggerKind.Schedule is implemented today; the remaining values are reserved for upcoming work on webhook and integration-event triggers and exist so the wire format stays stable as those land.

Value in"UNSPECIFIED" | "SCHEDULE" | "WEBHOOK" | "INTEGRATION_EVENT"
integrationId?string|null

Integration id (slack, github, telegram, …) when the trigger sources from one. Null for Schedule and other integration-less kinds.

integrationConfigId?string|null

Optional pin to a specific TenantIntegrationConfig — used when the trigger needs to know which workspace/bot/token to listen on.

Formatuuid
eventType?string|null

For Fruxon.Model.Triggers.TriggerKind.IntegrationEvent: the descriptor id of the event to listen for (e.g. slack.message.received). Null means "any event from this integration" — the legacy semantic preserved for backward compatibility with rows created before this field landed.

displayName?string|null
active?boolean
timeout?integer
Formatint32
Range60 <= value <= 2147483647
scheduleFrequency?string

Frequency of a schedule trigger. Wire form is UPPER_SNAKE per project convention; Unspecified = 0 is the AIP-126 zero-sentinel.

Value in"UNSPECIFIED" | "DAILY" | "WEEKLY" | "MONTHLY" | "INTERVAL"
scheduleDay?string

A day of the week, Sunday through Saturday.

Value in"sunday" | "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday"
scheduleDayOfMonth?string

Enum representing days of the month. Values are 1 to 31 and "Last".

Value in"_1" | "_2" | "_3" | "_4" | "_5" | "_6" | "_7" | "_8" | "_9" | "_10" | "_11" | "_12" | "_13" | "_14" | "_15" | "_16" | "_17" | "_18" | "_19" | "_20" | "_21" | "_22" | "_23" | "_24" | "_25" | "_26" | "_27" | "_28" | "_29" | "_30" | "_31" | "last"
scheduleHour?string|null
scheduleMinute?string|null
intervalValue?integer|null
Formatint32
intervalUnit?string

Unit for the spacing of a recurring Fruxon.Model.Jobs.ScheduleFrequency.Interval job. Wire form is UPPER_SNAKE per project convention; Unspecified = 0 is the AIP-126 zero-sentinel.

Value in"UNSPECIFIED" | "MINUTES" | "HOURS" | "DAYS"
timezone?string|null
filter?

Operator-defined content predicate on an Fruxon.Model.Triggers.TriggerKind.IntegrationEvent trigger. The structural match (integration / config / event type) decides whether an inbound event reaches a trigger at all; the filter decides whether a matched event actually fires the bound agents. A null filter — or one with no conditions — fires always, so every pre-existing trigger is unaffected. Evaluated by Fruxon.Model.Triggers.TriggerEventFilterEvaluator against the inbound payload.* envelope, once per trigger, before the binding fan-out (see Fruxon.Model.Triggers.IntegrationEventDispatcher). Stored as JSONB on the trigger and snapshotted into Fruxon.Model.Triggers.TriggerRevision.

agentIds?|null

Legacy bindings field — agent ids only, no parameter mappings. When Fruxon.Model.Triggers.CreateTriggerRequest.Bindings is non-empty, this is ignored. Kept for one release so existing CLI / dashboard clients keep working until they migrate to the structured shape. The service expands each id into a binding with an empty parameter-mapping list; the operator wires inputs explicitly on the Mappings tab.

bindings?|null

Agents to bind to this trigger on creation, with each binding's payload→parameter mappings. May be empty. When non-empty, the trigger and its bindings are created atomically — a failure mid-way leaves no orphaned trigger row. Takes precedence over Fruxon.Model.Triggers.CreateTriggerRequest.AgentIds.

[key: string]?never

Response Body

curl -X POST "https://api.fruxon.com/v1/tenants/string/triggers" \  -H "Content-Type: application/json" \  -d '{}'
{
  "id": "00000000-0000-0000-0000-000000000000",
  "kind": "SCHEDULE",
  "integrationId": "string",
  "integrationConfigId": "00000000-0000-0000-0000-000000000000",
  "eventType": "string",
  "displayName": "string",
  "active": false,
  "timeout": 0,
  "scheduleFrequency": "DAILY",
  "scheduleDay": "sunday",
  "scheduleDayOfMonth": "_1",
  "scheduleHour": "string",
  "scheduleMinute": "string",
  "intervalValue": 0,
  "intervalUnit": "MINUTES",
  "timezone": "string",
  "filter": {
    "match": "ALL",
    "conditions": [
      {
        "path": "string",
        "operator": "UNSPECIFIED",
        "value": "string",
        "values": null,
        "caseSensitive": false
      }
    ]
  },
  "createdAt": 0,
  "modifiedAt": 0,
  "lastFiredAt": 0,
  "hasWebhookKey": false,
  "webhookOwnership": "PER_BINDING",
  "agentIds": [
    "string"
  ],
  "bindings": [
    {
      "agentId": "string",
      "parameterMappings": [],
      "outputBindingId": "00000000-0000-0000-0000-000000000000",
      "outputDestination": {
        "bindingId": "00000000-0000-0000-0000-000000000000",
        "participantId": "00000000-0000-0000-0000-000000000000",
        "integrationConfigId": "00000000-0000-0000-0000-000000000000",
        "provider": "string",
        "address": "string"
      },
      "defaultOutputDestinations": []
    }
  ]
}
{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string",
  "property1": null,
  "property2": null
}
Empty
Empty