Skip to main content

Security Deposits API

Create a card authorization link for a booking, send it through your own guest communication system, and synchronize its status using signed webhooks. All endpoints require an OAuth bearer token. Use billing.write to create, capture, or release deposits and billing.read to retrieve them.
The response contains an authorization_url. Send this URL to the guest. Repeating the request with the same Idempotency-Key returns the original deposit instead of creating a duplicate.

Retrieve deposits

The list endpoint also accepts status and per_page. Available statuses are pending, authorized, partially_captured, captured, released, expired, and failed.

Dashboard labels and authorization attempts

The dashboard uses more descriptive labels without changing these API status values: Authorization-attempt metadata is provider-confirmed where available. Its absence does not prove that a customer has never opened a link. The new dashboard labels are not accepted as status query parameters; use the API values above.

Capture or release

Capture the full remaining amount by omitting amount, or capture part of it:
Release the remaining card authorization:
Stripe deposits currently support one final capture. Capturing €150 from a €350 authorization charges €150, releases €200, and returns status captured with captured_amount equal to 150.00. The difference between amount and captured_amount is not available for a second capture. Do not infer a remaining authorization by subtracting these fields. Attempts to capture a locally finalized deposit return HTTP 409.
Stripe deposit captures have a 0% PayRequest platform fee. Stripe processing fees apply separately. See Security Deposits for dashboard steps, status explanations, and examples.

Webhook events

PayRequest sends deposit.created, deposit.authorized, deposit.partially_captured, deposit.captured, deposit.released, deposit.expired, and deposit.failed to the webhook URL configured under Settings β†’ API & MCP. A final partial Stripe capture emits deposit.captured, not a promise that another capture remains available. Updates to pending authorization-attempt metadata do not introduce new deposit webhook event names. Retrieve the deposit to read the latest metadata. Verify the X-PayRequest-Signature header using the configured webhook secret. The signature format is sha256= followed by the HMAC-SHA256 digest of the raw request body. The X-PayRequest-Event header contains the event name.
Card authorizations expire. Create the link close enough to check-in for the selected payment provider’s authorization window.