upsert_trigger. Both give you the full URL.
The URL is the credential
There is no signature, no secret header and no allowlist. Whoever holds the URL can fire the agent, as many times as they want. Because the URL is the whole authentication, Rerun cannot validate a third-party signature header today. Caller headers are never forwarded to the agent: they carry credentials and are trivially spoofed.Methods
A trigger declares which HTTP methods it accepts. The default isPOST alone.
GET, POST, PUT, PATCH and DELETE all reach the same handler. HEAD and OPTIONS never start a run.
Accepting
GET means a link preview, a prefetch or a crawler could fire your agent by touching the URL. Rerun filters the known ones, but keep POST unless the calling service cannot send it.What the agent receives
The agent gets the triggerbody, which is the instruction you wrote, followed by the caller payload in a <trigger_payload> block:
trigger: <slug>. Two calls are always two runs: nothing is collapsed or debounced.
Response codes
The call returns as soon as the run has started. It does not wait for the agent to finish.
That last row is deliberate. A malformed slug, a missing token, an unknown agent, a wrong token, a disabled trigger and an engine that turned the call away all answer
404, so nobody can probe which triggers exist on your account.
Passive visits
Link unfurlers, prefetchers and clipboard managers touch URLs without anyone clicking them. Rerun answers those with204 and never starts a run. The filter covers Slack, Discord, Twitter, WhatsApp, Raycast and other known agents, plus any request carrying a prefetch or preview intent header.
Pasting a trigger URL into a chat is still a leak, but it will not fire your agent by itself.
Limits
Testing
Fire it yourself withcurl:
test_trigger, which pre-checks the method and the enabled state so you get a readable error instead of a bare 404. Either way it is a real fire: it counts towards the trigger fire count.
Read the outcome with get_run, using the runId from the 202.