Skip to main content

crewship routine webhooks

Webhook commands are nested under routine (also available through the pipeline alias):
Webhooks are token-addressed triggers. An external sender POSTs the request body to the webhook’s public URL; the body is delivered as the routine’s event input. Every webhook has an HMAC signing secret (generated when you do not supply one) and every delivery must be signed. Which header carries the signature, and what the public URL looks like, is the webhook’s ingress profile, chosen once at create:

Subcommands

The full reference for every subcommand — flag tables, output columns and the receipts pages — is in crewship routine webhooks.

list

--slug filters locally to webhooks targeting that routine. --json is a deprecated alias for --format json. Machine output redacts the token and does not include the signing secret; use url when the public URL is needed.

create

The default human response prints the webhook ID, public URL (with the /github-pull-request suffix for the github profile), and rate limit, then the signing secret once; save it immediately. With --format json|yaml|ndjson, the create response includes the full API row (ingress_profile included) and public_url, including the secret returned by the server.

update

Flags: --name, --slug, --rate-limit, --inputs-template, --enabled / --enabled=false, --pin-version, --unpin, --rotate-secret. At least one is required. The URL never changes; the profile cannot be changed (the server answers 400) — create a new webhook for a different sender format.

url and delete

url accepts only the exact webhook ID and has one flag, --base-url, which overrides the server URL; it prints <base-url>/api/v1/webhooks/<token> for a crewship webhook and <base-url>/api/v1/webhooks/<token>/github-pull-request for a github one. It only works while the server still returns the token — tokens are hashed at rest and shown once, at create. delete accepts --yes to skip its interactive confirmation prompt. Both commands require authentication and a workspace.

fire

Prints Accepted (202) with the run and receipt ids, Already received (202) for a redelivery (the original run), or Ignored (200) with the reason. Any other status is the server’s error and a non-zero exit — 401 wrong secret, 404 unknown token or wrong profile, 409 delivery id reused with a different body, 413 too large, 429/503 retry. The secret and token are never echoed.

receipts

receipts list [--webhook <id>] [--source-id <id>] [--after <cursor>] and receipts get <receipt_id> read the receipts deliveries leave behind; see webhooks receipts list. All webhook commands honor the global -f/--format where the command emits a machine-readable response; list additionally supports table|json|yaml|ndjson and --json.