---
title: "Start saving a card (Stripe SetupIntent for inline Elements)"
method: POST
path: "/v1/orgs/{orgId}/billing/setup-intent"
tags: ["Billing"]
---

# Start saving a card (Stripe SetupIntent for inline Elements)

`POST /v1/orgs/{orgId}/billing/setup-intent`

Returns the SetupIntent client secret the inline Elements form confirms. The dashboard's card form sends its device identification as the two optional query parameters, and the card save is judged on them: a device that puts the account on a verification hold gets 403 ACCOUNT_PENDING_VERIFICATION, or 403 VERIFICATION_UNAVAILABLE when the hold could not be recorded. The operation takes no request body, so a bare POST (the CLI, the MCP tool) is unchanged.

## Path parameters

- `orgId` string, required

## Query parameters

- `deviceFingerprint` string
- `deviceEventId` string

## Response `200`

SetupIntent client secret + publishable key

- SetupIntent
  - `clientSecret` string, required
  - `publishableKey` string, required

## Other responses

- `401` — Missing or invalid API key
- `403` — API key lacks the required scope
- `503` — A required integration (e.g. payments) is not configured

## Changes

- **2026-09-26** `24a11ebdab5e` — 2 info
  - added the new optional `query` request parameter `deviceEventId`
  - added the new optional `query` request parameter `deviceFingerprint`

[Change history](https://skmtc.dev/openrelay/apis/openrelay-api/changes/v1/orgs/:orgId/billing/setup-intent/post.md)

---

[API](https://skmtc.dev/openrelay/apis/openrelay-api.md) · [All operations](https://skmtc.dev/openrelay/apis/openrelay-api/llms.txt) · [OpenAPI document](https://skmtc.dev/openrelay/apis/openrelay-api/revisions/24a11ebdab5e?raw)
