Skip to main content

Command reference

The commands​

CommandWhat it does
webhooks:preflightCheck that the database the persistent layers store their tables in is supported, that the schema agrees with the configuration, and — while the receiving layer is on — that every inbound client config can actually verify a delivery. Prints the connection it resolved.
webhooks:partition-maintenanceProvision upcoming delivery-log partitions and drop those past the retention window.
webhooks:revoke-rotated-secretsClear every endpoint secret whose rotation window has closed, so it can no longer sign or verify.
webhooks:reencryptEncrypt the endpoint secrets and the outbox entries again under the current APP_KEY, so a previous key can be removed. Run it after a key rotation; the steps are on the security page. Exits with 1 for a value no configured key decrypts.
webhooks:refresh-endpoint-healthRecompute and cache the health score of every active endpoint.
webhooks:refresh-metricsRefresh the hourly delivery-metrics materialized view the dashboard reads.
webhooks:outboxSend the entries of the transactional outbox that are due. With server.outbox.enabled off it says so and sends nothing.
webhooks:egress-ipsPrint the published egress-IP allowlist consumers should add to their firewall.
webhooks:asyncapiGenerate an AsyncAPI 3.0 document from the event catalog.
webhooks:ed25519-keygenGenerate an Ed25519 keypair for asymmetric signing (v1a).
webhooks:prune-orphaned-payloadsDelete offloaded payload objects no delivery-log or call-log row still references.
webhooks:import-callsBackfill the webhook_calls log from an inbound-webhook table you used before this package (idempotent).

Options​

webhooks:preflight
--connection= The database connection to check (defaults to the one the package stores
its tables on: webhooks.database.connection, else the app default)

webhooks:egress-ips
--format=json Output format — json (default), txt or md

webhooks:asyncapi [path]
path File to write the document to; omit to print to stdout
--format=json Output format — json (default) or yaml (yaml requires symfony/yaml)
--title= Document title (defaults to the app name)
--doc-version= Document version (default 1.0.0)

webhooks:prune-orphaned-payloads
--disk= The Storage disk to sweep (defaults to the Server offload disk)
--dry-run Report what would be deleted without deleting anything

webhooks:import-calls
--source= The value written to the source column. Defaults to each row's own
producer-name column; pass this to force one source for every
imported row, and to keep two imports apart.
--from-table= The table to read from (default webhook_calls)
--from-connection= The connection that table lives on (defaults to the app default)
--from-id=id The source column holding each row's primary key
--from-source=name The source column naming the producer a row came from
--from-payload=payload The source column holding the decoded JSON body
--from-headers=headers The source column holding the request headers as JSON
--from-error=exception The column recording a failure; its PRESENCE marks the row failed
--from-created-at=created_at The column holding when each row was received; a source
without it imports every row dated at the import, and says so
--from-updated-at=updated_at The column holding when each row last changed
--from-timezone= The zone a timestamp without an offset was written in (defaults to
app.timezone, which is what Eloquent's timestamps() write; pass UTC
for a table that stores UTC)
--chunk=1000 How many source rows to read per batch (bounds memory on a big backlog)
--dry-run Report what would be imported without writing anything

What runs on a schedule​

Registered only while webhooks.schedule.enabled is true (the default) — see Scheduled maintenance.

CommandCadenceRegistered by
webhooks:partition-maintenancedailythe Platform layer
webhooks:revoke-rotated-secretshourly, without overlappingthe Platform layer
webhooks:refresh-endpoint-healthplatform.health.refresh (default every fifteen minutes), without overlappingonly while platform.health.enabled
webhooks:refresh-metricsdashboard.metrics.refresh (default every five minutes), without overlappingthe Dashboard layer
model:prune on WebhookCalldailythe Client layer
model:prune on WebhookServerDeliverydailyonly while server.persistence.enabled
webhooks:outboxevery minute, without overlappingonly while server.outbox.enabled
model:prune on WebhookOutboxEntrydailyonly while server.outbox.enabled

An unknown cadence token falls back to the documented default rather than silently never running.

webhooks:prune-orphaned-payloads is deliberately not auto-scheduled: retention prunes rows, and the offloaded objects are content-addressed, so reclaiming them is a decision you make (a disk lifecycle policy is the other supported route). See Reliability.