atmon docs

REFERENCE/API/TRIGGERS.MD

TriggersService

The inbound direction: an external app has something happen, and you hear about it. Subscribe an address, read what arrived, and replay a delivery your side missed. Delivery is at least once, with retries and a dead state, and every attempt is readable here.

Every call is a POST to https://api.atmon.ai/automaton.v1.TriggersService/<Call> with a JSON body, and authenticates with Authorization: Bearer <your project key>. Field names in JSON are lowerCamelCase, so the field written tool_slug below is toolSlug on the wire. How to call the API has the whole convention.

Calls

CallRequestResponseSummary
CreateSubscriptionCreateSubscriptionRequestCreateSubscriptionResponseRegisters an endpoint for delivery and returns its signing secret once.
ListSubscriptionsListSubscriptionsRequestListSubscriptionsResponseLists the project's subscriptions.
DeleteSubscriptionDeleteSubscriptionRequestDeleteSubscriptionResponseDeletes one subscription.
ListEventsListEventsRequestListEventsResponseLists the normalized events received for this project, filtered by toolkit, trigger, and time.
GetEventGetEventRequestGetEventResponseReads one event with its normalized payload.
ListDeliveriesListDeliveriesRequestListDeliveriesResponseLists delivery attempts for an event, a subscription, or both.
ReplayEventReplayEventRequestReplayEventResponseQueues fresh deliveries for an event to the currently matching active subscriptions, leaving the original attempt history in place so the record of what failed stays readable.
ListIngestEndpointsListIngestEndpointsRequestListIngestEndpointsResponseLists every toolkit that declares an inbound webhook, with the path a provider posts to and whether this deployment holds the secret that verifies it.

CreateSubscription

Registers an endpoint for delivery and returns its signing secret once. HTTPS is required outside loopback.

Request CreateSubscriptionRequest, response CreateSubscriptionResponse.

POST /automaton.v1.TriggersService/CreateSubscription HTTP/1.1
Host: api.atmon.ai
Authorization: Bearer amk_your_project_key
Content-Type: application/json

{
  "endpointUrl": "...",
  "toolkitSlug": "...",
  "triggerSlug": "..."
}

The response:

{
  "subscription": {
    "id": "...",
    "endpointUrl": "...",
    "toolkitSlug": "...",
    "triggerSlug": "...",
    "active": true
  },
  "signingSecret": "..."
}

ListSubscriptions

Lists the project's subscriptions. A signing secret is never returned again, so a lost secret means a new subscription.

Request ListSubscriptionsRequest, response ListSubscriptionsResponse.

POST /automaton.v1.TriggersService/ListSubscriptions HTTP/1.1
Host: api.atmon.ai
Authorization: Bearer amk_your_project_key
Content-Type: application/json

{}

The response:

{
  "subscriptions": [{
    "id": "...",
    "endpointUrl": "...",
    "toolkitSlug": "...",
    "triggerSlug": "...",
    "active": true
  }]
}

DeleteSubscription

Deletes one subscription. Events already stored are unaffected.

Request DeleteSubscriptionRequest, response DeleteSubscriptionResponse.

POST /automaton.v1.TriggersService/DeleteSubscription HTTP/1.1
Host: api.atmon.ai
Authorization: Bearer amk_your_project_key
Content-Type: application/json

{
  "id": "..."
}

The response:

{}

ListEvents

Lists the normalized events received for this project, filtered by toolkit, trigger, and time.

Request ListEventsRequest, response ListEventsResponse.

POST /automaton.v1.TriggersService/ListEvents HTTP/1.1
Host: api.atmon.ai
Authorization: Bearer amk_your_project_key
Content-Type: application/json

{
  "toolkitSlug": "...",
  "triggerSlug": "...",
  "since": "2026-01-31T09:15:00Z",
  "until": "2026-01-31T09:15:00Z",
  "pageSize": 0,
  "pageToken": "..."
}

The response:

{
  "events": [{
    "id": "...",
    "toolkitSlug": "...",
    "triggerSlug": "...",
    "entityId": "...",
    "payloadJson": "{}",
    "occurredAt": "2026-01-31T09:15:00Z",
    "receivedAt": "2026-01-31T09:15:00Z"
  }],
  "nextPageToken": "..."
}

GetEvent

Reads one event with its normalized payload.

Request GetEventRequest, response GetEventResponse.

POST /automaton.v1.TriggersService/GetEvent HTTP/1.1
Host: api.atmon.ai
Authorization: Bearer amk_your_project_key
Content-Type: application/json

{
  "id": "..."
}

The response:

{
  "event": {
    "id": "...",
    "toolkitSlug": "...",
    "triggerSlug": "...",
    "entityId": "...",
    "payloadJson": "{}",
    "occurredAt": "2026-01-31T09:15:00Z",
    "receivedAt": "2026-01-31T09:15:00Z"
  }
}

ListDeliveries

Lists delivery attempts for an event, a subscription, or both. Delivery is at-least-once: pending, delivered, or dead_letter after the last retry.

Request ListDeliveriesRequest, response ListDeliveriesResponse.

POST /automaton.v1.TriggersService/ListDeliveries HTTP/1.1
Host: api.atmon.ai
Authorization: Bearer amk_your_project_key
Content-Type: application/json

{
  "eventId": "...",
  "subscriptionId": "..."
}

The response:

{
  "deliveries": [{
    "id": "...",
    "eventId": "...",
    "subscriptionId": "...",
    "state": "...",
    "attempts": 0,
    "lastError": "...",
    "lastAttemptAt": "2026-01-31T09:15:00Z"
  }]
}

ReplayEvent

Queues fresh deliveries for an event to the currently matching active subscriptions, leaving the original attempt history in place so the record of what failed stays readable.

Request ReplayEventRequest, response ReplayEventResponse.

POST /automaton.v1.TriggersService/ReplayEvent HTTP/1.1
Host: api.atmon.ai
Authorization: Bearer amk_your_project_key
Content-Type: application/json

{
  "eventId": "..."
}

The response:

{
  "deliveries": [{
    "id": "...",
    "eventId": "...",
    "subscriptionId": "...",
    "state": "...",
    "attempts": 0,
    "lastError": "...",
    "lastAttemptAt": "2026-01-31T09:15:00Z"
  }]
}

ListIngestEndpoints

Lists every toolkit that declares an inbound webhook, with the path a provider posts to and whether this deployment holds the secret that verifies it. A read of deployment configuration rather than of project rows: the answer is the same for every project on the node, and it is here because the page that asks "what starts this" is the page that has to say when the answer is nothing.

Request ListIngestEndpointsRequest, response ListIngestEndpointsResponse.

POST /automaton.v1.TriggersService/ListIngestEndpoints HTTP/1.1
Host: api.atmon.ai
Authorization: Bearer amk_your_project_key
Content-Type: application/json

{}

The response:

{
  "endpoints": [{
    "toolkitSlug": "...",
    "path": "...",
    "scheme": "...",
    "secretEnv": "...",
    "secretSet": true
  }]
}

Messages

CreateSubscriptionRequest

FieldType#Notes
endpoint_urlstring1
toolkit_slugstring2empty subscribes to every toolkit
trigger_slugstring3requires toolkit_slug; empty takes every trigger

CreateSubscriptionResponse

FieldType#Notes
subscriptionSubscription1
signing_secretstring2signing_secret is returned once, at creation. atmon signs every delivery body with it (X-Automaton-Signature: sha256=<hex>); a lost secret is replaced by a new subscription, never recovered.

DeleteSubscriptionRequest

FieldType#Notes
idstring1

DeleteSubscriptionResponse

No fields. The call takes its scope from the authenticated project.

Delivery

Delivery is one attempt series: one event to one subscription.

FieldType#Notes
idstring1
event_idstring2
subscription_idstring3
statestring4pending | delivered | dead_letter
attemptsint325
last_errorstring6
last_attempt_atgoogle.protobuf.Timestamp7

Event

Event is one normalized inbound event, stored per receiving project.

FieldType#Notes
idstring1
toolkit_slugstring2
trigger_slugstring3the toolkit's kind: trigger tool
entity_idstring4empty when the payload does not resolve one
payload_jsonstring5normalized body per the trigger's output schema
occurred_atgoogle.protobuf.Timestamp6provider time when present, else received_at
received_atgoogle.protobuf.Timestamp7

GetEventRequest

FieldType#Notes
idstring1

GetEventResponse

FieldType#Notes
eventEvent1

IngestEndpoint

IngestEndpoint is one toolkit's inbound path and whether this deployment can verify a post to it.

The secret itself is never on this message and there is no RPC that returns it. What crosses is whether the environment variable naming it holds a value, because that single bit decides between a post being accepted and a post being refused, and an operator has no other way to read it.

FieldType#Notes
toolkit_slugstring1
pathstring2The path a provider posts to, which is /webhooks/ plus the toolkit slug.
schemestring3The verification scheme the toolkit declares, from the catalog's closed vocabulary: hmac_sha256, slack_v0, token_query.
secret_envstring4The name of the process environment variable holding the shared secret. The name is configuration and is safe to render; the value is not returned.
secret_setbool5False means every post to this path is refused rather than trusted, so the toolkit's triggers fire nothing until the deployment sets the variable.

ListDeliveriesRequest

FieldType#Notes
event_idstring1filter by event, subscription, or both
subscription_idstring2

ListDeliveriesResponse

FieldType#Notes
deliveriesrepeated Delivery1

ListEventsRequest

FieldType#Notes
toolkit_slugstring1empty lists every toolkit
trigger_slugstring2empty lists every trigger
sincegoogle.protobuf.Timestamp3inclusive lower bound on received_at
untilgoogle.protobuf.Timestamp4exclusive upper bound on received_at
page_sizeint325
page_tokenstring6

ListEventsResponse

FieldType#Notes
eventsrepeated Event1
next_page_tokenstring2

ListIngestEndpointsRequest

No fields. The call takes its scope from the authenticated project.

ListIngestEndpointsResponse

FieldType#Notes
endpointsrepeated IngestEndpoint1

ListSubscriptionsRequest

No fields. The call takes its scope from the authenticated project.

ListSubscriptionsResponse

FieldType#Notes
subscriptionsrepeated Subscription1

ReplayEventRequest

FieldType#Notes
event_idstring1

ReplayEventResponse

FieldType#Notes
deliveriesrepeated Delivery1The freshly enqueued deliveries. Replay leaves the original attempt history in place and queues new deliveries to the currently matching active subscriptions.

Subscription

Subscription is one project endpoint that wants events delivered.

FieldType#Notes
idstring1
endpoint_urlstring2HTTPS required outside loopback
toolkit_slugstring3empty matches all toolkits
trigger_slugstring4empty matches all triggers of the toolkit
activebool5