@usethrottle/mcp 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"generatedAt":"2026-07-29T03:04:46.206Z","operations":[{"method":"GET","path":"/health","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/ready","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/internal/sentry-smoke","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/unsubscribe","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/unsubscribe/apply","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/organizations","pathParams":[],"queryParams":[],"bodyFields":null,"description":"List organizations"},{"method":"POST","path":"/api/v1/organizations","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"slug","required":true,"type":"string"},{"name":"settings","required":false,"type":"object"}],"description":"Create an organization"},{"method":"GET","path":"/api/v1/organizations/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get organization by ID"},{"method":"PATCH","path":"/api/v1/organizations/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Update an organization"},{"method":"GET","path":"/api/v1/stores","pathParams":[],"queryParams":[],"bodyFields":null,"description":"List all stores for the organization"},{"method":"POST","path":"/api/v1/stores","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"slug","required":true,"type":"string","description":"URL-safe identifier, unique per organization"},{"name":"currency","required":false,"type":"string","description":"ISO 4217 currency code"},{"name":"settings","required":false,"type":"object"}],"description":"Create a new store under the organization"},{"method":"GET","path":"/api/v1/stores/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a store by ID"},{"method":"PATCH","path":"/api/v1/stores/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"name","required":false,"type":"string"},{"name":"currency","required":false,"type":"string","description":"ISO 4217 currency code"},{"name":"settings","required":false,"type":"object"},{"name":"isActive","required":false,"type":"boolean","description":"Deactivate a store without deleting it"}],"description":"Update a store (name, currency, settings, active status)"},{"method":"GET","path":"/api/v1/customers","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"applicationId","required":false,"type":"string"},{"name":"email","required":false,"type":"string"},{"name":"identity","required":false,"type":"string","enum":["linked","unlinked"]},{"name":"q","required":false,"type":"string","description":"Search email, name, phone, external ids, or metadata."}],"bodyFields":null,"description":"List customers with cursor pagination"},{"method":"POST","path":"/api/v1/customers","pathParams":[],"queryParams":[],"bodyFields":[{"name":"applicationId","required":false,"type":"string"},{"name":"email","required":true,"type":"string"},{"name":"externalId","required":false,"type":"string"},{"name":"firstName","required":false,"type":"string"},{"name":"lastName","required":false,"type":"string"},{"name":"phone","required":false,"type":"string"},{"name":"acceptsMarketing","required":false,"type":"boolean"},{"name":"netN","required":false,"type":"integer"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Create a new customer"},{"method":"GET","path":"/api/v1/customers/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a customer by ID"},{"method":"PATCH","path":"/api/v1/customers/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"email","required":false,"type":"string"},{"name":"externalId","required":false,"type":"string"},{"name":"firstName","required":false,"type":"string"},{"name":"lastName","required":false,"type":"string"},{"name":"phone","required":false,"type":"string"},{"name":"acceptsMarketing","required":false,"type":"boolean"},{"name":"netN","required":false,"type":"integer"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a customer"},{"method":"DELETE","path":"/api/v1/customers/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Delete a customer"},{"method":"GET","path":"/api/v1/customers/by-external/{externalId}","pathParams":["externalId"],"queryParams":[],"bodyFields":null,"description":"Look up a customer by the merchant's own externalId (set when the customer was created). Useful for merchant backends that key their user table off their own IDs and don't store the throttle customerId."},{"method":"POST","path":"/api/v1/customers/{id}/anonymize","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Anonymize a customer (soft GDPR delete): tombstone the customer + address PII in place while keeping order/payment/subscription history. Irreversible."},{"method":"GET","path":"/api/v1/customers/{id}/addresses","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List addresses for a customer"},{"method":"POST","path":"/api/v1/customers/{id}/addresses","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"label","required":false,"type":"string"},{"name":"firstName","required":false,"type":"string"},{"name":"lastName","required":false,"type":"string"},{"name":"company","required":false,"type":"string"},{"name":"addressLine1","required":true,"type":"string"},{"name":"addressLine2","required":false,"type":"string"},{"name":"city","required":true,"type":"string"},{"name":"stateProvince","required":false,"type":"string"},{"name":"postalCode","required":false,"type":"string"},{"name":"countryCode","required":true,"type":"string","description":"ISO 3166-1 alpha-2"},{"name":"phone","required":false,"type":"string"},{"name":"isDefault","required":false,"type":"boolean"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Add an address to a customer"},{"method":"PATCH","path":"/api/v1/customers/{customerId}/addresses/{id}","pathParams":["customerId","id"],"queryParams":[],"bodyFields":[{"name":"label","required":false,"type":"string"},{"name":"firstName","required":false,"type":"string"},{"name":"lastName","required":false,"type":"string"},{"name":"company","required":false,"type":"string"},{"name":"addressLine1","required":false,"type":"string"},{"name":"addressLine2","required":false,"type":"string"},{"name":"city","required":false,"type":"string"},{"name":"stateProvince","required":false,"type":"string"},{"name":"postalCode","required":false,"type":"string"},{"name":"countryCode","required":false,"type":"string","description":"ISO 3166-1 alpha-2"},{"name":"phone","required":false,"type":"string"},{"name":"isDefault","required":false,"type":"boolean"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a customer address"},{"method":"DELETE","path":"/api/v1/customers/{customerId}/addresses/{id}","pathParams":["customerId","id"],"queryParams":[],"bodyFields":null,"description":"Delete a customer address"},{"method":"GET","path":"/api/v1/customers/{id}/payment-methods","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List payment methods for a customer"},{"method":"POST","path":"/api/v1/customers/{id}/payment-methods","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"processor","required":true,"type":"string"},{"name":"processorToken","required":true,"type":"string"},{"name":"methodType","required":true,"type":"string","enum":["card","bank_account","wallet"]},{"name":"cardBrand","required":false,"type":"string"},{"name":"cardLastFour","required":false,"type":"string"},{"name":"cardExpMonth","required":false,"type":"integer"},{"name":"cardExpYear","required":false,"type":"integer"},{"name":"isDefault","required":false,"type":"boolean"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Add a payment method to a customer"},{"method":"GET","path":"/api/v1/customers/{customerId}/payment-methods/{id}","pathParams":["customerId","id"],"queryParams":[],"bodyFields":null,"description":"Get a customer payment method"},{"method":"PATCH","path":"/api/v1/customers/{customerId}/payment-methods/{id}","pathParams":["customerId","id"],"queryParams":[],"bodyFields":[{"name":"isDefault","required":false,"type":"boolean"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a customer payment method"},{"method":"DELETE","path":"/api/v1/customers/{customerId}/payment-methods/{id}","pathParams":["customerId","id"],"queryParams":[],"bodyFields":null,"description":"Delete a customer payment method"},{"method":"POST","path":"/api/v1/customers/{customerId}/payment-methods/{id}/pause","pathParams":["customerId","id"],"queryParams":[],"bodyFields":null,"description":"Pause a customer payment method"},{"method":"POST","path":"/api/v1/customers/{customerId}/payment-methods/{id}/resume","pathParams":["customerId","id"],"queryParams":[],"bodyFields":null,"description":"Resume a customer payment method"},{"method":"POST","path":"/api/v1/payment-methods/client-token","pathParams":[],"queryParams":[],"bodyFields":[{"name":"customerId","required":true,"type":"string"}],"summary":"Mint a customer-scoped client token for browser payment-method management"},{"method":"GET","path":"/api/v1/me/payment-methods","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List the authenticated customer's saved payment methods"},{"method":"PATCH","path":"/api/v1/me/payment-methods/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"isDefault","required":true,"type":"boolean","enum":["true"]}],"summary":"Set a saved payment method as default"},{"method":"DELETE","path":"/api/v1/me/payment-methods/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Remove a saved payment method"},{"method":"POST","path":"/api/v1/me/payment-methods/embed-token","pathParams":[],"queryParams":[],"bodyFields":[{"name":"currency","required":false,"type":"string"}],"summary":"Mint a Gr4vy add-only vault embed token scoped to the authenticated customer"},{"method":"POST","path":"/api/v1/me/payment-methods/confirm","pathParams":[],"queryParams":[],"bodyFields":[{"name":"transactionId","required":true,"type":"string"}],"summary":"Record a card vaulted via the add-card embed"},{"method":"POST","path":"/api/v1/carts","pathParams":[],"queryParams":[],"bodyFields":[{"name":"applicationId","required":false,"type":"string"},{"name":"customerId","required":false,"type":"string"},{"name":"customerEmail","required":false,"type":"string"},{"name":"currency","required":false,"type":"string"},{"name":"netN","required":false,"type":"integer"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Create a new cart"},{"method":"GET","path":"/api/v1/carts/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a cart by ID (includes line items)"},{"method":"PATCH","path":"/api/v1/carts/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"customerId","required":false,"type":"string"},{"name":"customerEmail","required":false,"type":"string"},{"name":"billingAddress","required":false,"type":"object"},{"name":"shippingAddress","required":false,"type":"object"},{"name":"notes","required":false,"type":"string"},{"name":"netN","required":false,"type":"integer"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a cart"},{"method":"POST","path":"/api/v1/carts/{id}/items","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"type","required":false,"type":"string","enum":["product","subscription","service","ticket","donation","custom"]},{"name":"referenceId","required":false,"type":"string"},{"name":"name","required":true,"type":"string"},{"name":"description","required":false,"type":"string"},{"name":"unitPrice","required":true,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"quantity","required":false,"type":"integer"},{"name":"taxAmount","required":false,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"discountAmount","required":false,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"imageUrl","required":false,"type":"string","description":"Product image. Accepts an absolute http(s) URL or a relative path (e.g. \"/images/x.png\"); relative paths are resolved against the application storefront base URL (PUT /v1/embed-config { storefrontBaseUrl }, falling back to the first allowedOrigin)."},{"name":"requiresShipping","required":false,"type":"boolean","description":"Whether this item is physically shippable. For external/ad-hoc catalogs with no Throttle product behind the item. Omit to infer from `type` (everything except `service` ships); set explicitly to force-include or force-exclude the item from `calculated` shipping."},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Add a line item to a cart"},{"method":"PATCH","path":"/api/v1/carts/{cartId}/items/{id}","pathParams":["cartId","id"],"queryParams":[],"bodyFields":[{"name":"quantity","required":false,"type":"integer"},{"name":"unitPrice","required":false,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"taxAmount","required":false,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"discountAmount","required":false,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a line item"},{"method":"DELETE","path":"/api/v1/carts/{cartId}/items/{id}","pathParams":["cartId","id"],"queryParams":[],"bodyFields":null,"description":"Remove a line item from a cart"},{"method":"POST","path":"/api/v1/carts/{id}/checkout","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Convert the cart to a draft order. Legacy alias for /finalize — same handler, identical semantics. New integrations should call /finalize instead."},{"method":"POST","path":"/api/v1/carts/{id}/finalize","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Finalize a cart by converting it to a draft order (status=draft). To collect payment, mint a checkout session against the resulting order afterwards."},{"method":"POST","path":"/api/v1/carts/{id}/merge","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/carts/{id}/apply-discount","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"code","required":true,"type":"string"}],"description":"Apply a discount code to a cart"},{"method":"DELETE","path":"/api/v1/carts/{id}/discount","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Remove discount code from a cart"},{"method":"POST","path":"/api/v1/carts/{id}/shipping","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"methodId","required":true,"type":"string"},{"name":"displayName","required":true,"type":"string"},{"name":"rateAmount","required":true,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"currency","required":false,"type":"string"},{"name":"carrier","required":false,"type":"string"},{"name":"serviceCode","required":false,"type":"string"},{"name":"estimatedDeliveryDays","required":false,"type":"integer"}],"description":"Select a shipping method for a cart"},{"method":"DELETE","path":"/api/v1/carts/{id}/shipping","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Clear the selected shipping method from a cart"},{"method":"PUT","path":"/api/v1/carts/{id}/tax-lines","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"lines","required":true,"type":"object[]"}],"description":"Replace all tax lines on a cart"},{"method":"DELETE","path":"/api/v1/carts/{id}/tax-lines","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Clear all tax lines from a cart"},{"method":"GET","path":"/api/v1/carts/{id}/events","pathParams":["id"],"queryParams":[{"name":"sinceSequence","required":false,"type":"integer"},{"name":"limit","required":false,"type":"integer"}],"bodyFields":null,"description":"List audit events for a cart"},{"method":"GET","path":"/api/v1/abandoned-carts","pathParams":[],"queryParams":[{"name":"limit","required":false,"type":"integer"},{"name":"cursor","required":false,"type":"string"}],"bodyFields":null,"summary":"List abandoned carts (most-recently abandoned first)."},{"method":"GET","path":"/api/v1/abandoned-carts/summary","pathParams":[],"queryParams":[{"name":"sinceDays","required":false,"type":"integer"}],"bodyFields":null,"summary":"Abandoned-cart summary metrics over a trailing window."},{"method":"POST","path":"/api/v1/cart-sessions","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/cart-sessions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/cart-sessions/{id}/items","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"PATCH","path":"/api/v1/cart-sessions/{id}/items/{itemId}","pathParams":["id","itemId"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/cart-sessions/{id}/items/{itemId}","pathParams":["id","itemId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/cart-sessions/{id}/shipping","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/cart-sessions/{id}/shipping","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/cart-sessions/{id}/discount","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/cart-sessions/{id}/discount","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/cart-sessions/{id}/checkout-session","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/config","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/quote-tokens","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/quote-tokens","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/shipping-tax/quote-tokens/{tokenId}","pathParams":["tokenId"],"queryParams":[],"bodyFields":null},{"method":"PUT","path":"/api/v1/shipping-tax/config/draft","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/config/publish","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/quotes","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/carts/{cartId}/calculate","pathParams":["cartId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/external-snapshots","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/shipping-providers/available","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/tax-providers/available","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/shipping-providers","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/shipping-providers","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/tax-providers","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/tax-providers","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/shipping-providers/{id}/verify","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/tax-providers/{id}/verify","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/shipping-providers/{id}/primary","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/tax-providers/{id}/primary","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/shipping-tax/shipping-providers/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/shipping-tax/tax-providers/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/orders","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"status","required":false,"type":"string","enum":["draft","pending","processing","partially_fulfilled","completed","cancelled","closed"]},{"name":"paymentStatus","required":false,"type":"string","enum":["pending","authorized","captured","partially_refunded","refunded","failed","voided"]},{"name":"type","required":false,"type":"string","enum":["one_time","recurring","mixed"]},{"name":"source","required":false,"type":"string","enum":["web","mobile","pos","api","subscription_engine"]},{"name":"q","required":false,"type":"string","description":"Search order id, number, source, status, or metadata."},{"name":"customerId","required":false,"type":"string"}],"bodyFields":null,"description":"List orders with cursor pagination"},{"method":"POST","path":"/api/v1/orders","pathParams":[],"queryParams":[],"bodyFields":[{"name":"customerId","required":false,"type":"string"},{"name":"currency","required":false,"type":"string"},{"name":"source","required":false,"type":"string","enum":["web","mobile","pos","api"]},{"name":"billingAddress","required":false,"type":"object"},{"name":"shippingAddress","required":false,"type":"object"},{"name":"notes","required":false,"type":"string"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"},{"name":"lineItems","required":false,"type":"object[]"}],"description":"Create a new order (draft)"},{"method":"GET","path":"/api/v1/orders/export.csv","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Export orders (respecting list filters) as a CSV attachment. Capped at 10,000 rows."},{"method":"GET","path":"/api/v1/orders/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get an order by ID (includes line items)"},{"method":"PATCH","path":"/api/v1/orders/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"billingAddress","required":false,"type":"object"},{"name":"shippingAddress","required":false,"type":"object"},{"name":"notes","required":false,"type":"string"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update order fields (addresses, notes, metadata)"},{"method":"POST","path":"/api/v1/orders/{id}/checkout","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Initiate checkout (draft -> pending)"},{"method":"POST","path":"/api/v1/orders/{id}/authorize","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"paymentId","required":true,"type":"string"}],"description":"Mark payment as authorized (pending -> processing)"},{"method":"POST","path":"/api/v1/orders/{id}/capture","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"paymentId","required":true,"type":"string"}],"description":"Mark payment as captured (pending -> processing)"},{"method":"POST","path":"/api/v1/orders/{id}/cancel","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"reason","required":false,"type":"string"},{"name":"refundCapturedPayments","required":false,"type":"boolean"}],"description":"Cancel an order. Authorized payments are always voided; captured payments are refunded when refundCapturedPayments is true."},{"method":"POST","path":"/api/v1/orders/{id}/complete","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Complete an order (processing -> completed)"},{"method":"POST","path":"/api/v1/orders/{id}/close","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Close a completed order"},{"method":"GET","path":"/api/v1/orders/{id}/payments","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List payments for an order"},{"method":"POST","path":"/api/v1/orders/{id}/payments","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"processor","required":false,"type":"string"},{"name":"amount","required":true,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"currency","required":false,"type":"string"},{"name":"method","required":false,"type":"string","enum":["card","bank_transfer","wallet","cash","external","manual","net30"]},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Create a payment for an order"},{"method":"GET","path":"/api/v1/orders/{id}/payments/{paymentId}","pathParams":["id","paymentId"],"queryParams":[],"bodyFields":null,"description":"Get a specific payment for an order"},{"method":"GET","path":"/api/v1/payments/{id}/transactions","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List transactions for a payment"},{"method":"GET","path":"/api/v1/payments","pathParams":[],"queryParams":[{"name":"method","required":false,"type":"string"},{"name":"status","required":false},{"name":"limit","required":false,"type":"string"},{"name":"cursor","required":false,"type":"string"},{"name":"aging","required":false,"type":"string","enum":["0_30","31_60","61_90","90_plus"]},{"name":"order_id","required":false,"type":"string"},{"name":"due_from","required":false,"type":"string"},{"name":"due_to","required":false,"type":"string"},{"name":"amount_min","required":false,"type":"string"},{"name":"amount_max","required":false,"type":"string"}],"bodyFields":null,"summary":"List payments for the calling merchant."},{"method":"GET","path":"/api/v1/payments/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Get a payment by id."},{"method":"POST","path":"/api/v1/orders/{id}/refund","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"amount","required":false,"type":"integer","description":"Partial refund amount (defaults to full amount)"},{"name":"reason","required":false,"type":"string"}],"description":"Refund the captured payment on an order"},{"method":"POST","path":"/api/v1/payments/{id}/authorize","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Authorize a payment (pending -> authorized)"},{"method":"POST","path":"/api/v1/payments/{id}/capture","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"amount","required":false,"type":"integer","description":"Partial capture amount (defaults to full amount)"}],"description":"Capture a payment (authorized -> captured)"},{"method":"POST","path":"/api/v1/payments/{id}/void","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Void an authorized payment"},{"method":"POST","path":"/api/v1/payments/{id}/refund","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"amount","required":false,"type":"integer","description":"Partial refund amount (defaults to full amount)"},{"name":"reason","required":false,"type":"string"}],"description":"Refund a captured payment (full or partial)"},{"method":"POST","path":"/api/v1/payments/{id}/invoice/resend","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Resend the Net-N invoice email to the customer."},{"method":"GET","path":"/api/v1/payments/{id}/invoice-pdf","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Get a signed download URL for a Net30 invoice PDF."},{"method":"GET","path":"/api/v1/invoices","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Pagination cursor"},{"name":"limit","required":false,"type":"integer"},{"name":"sort","required":false,"type":"string","enum":["asc","desc"]},{"name":"status","required":false,"type":"string","enum":["paid","open","refunded","partially_refunded","void"]},{"name":"type","required":false,"type":"string","enum":["order","net30","subscription"]},{"name":"sourceId","required":false,"type":"string","description":"Filter to invoices for a specific source: the payment id for order/net30 invoices, or the subscription invoice id for subscription invoices."}],"bodyFields":null,"summary":"List invoices","description":"List all invoices for the application across all customers and payment source types. Requires invoices:read scope."},{"method":"GET","path":"/api/v1/customers/{customerId}/invoices","pathParams":["customerId"],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Pagination cursor"},{"name":"limit","required":false,"type":"integer"},{"name":"sort","required":false,"type":"string","enum":["asc","desc"]},{"name":"status","required":false,"type":"string","enum":["paid","open","refunded","partially_refunded","void"]},{"name":"type","required":false,"type":"string","enum":["order","net30","subscription"]},{"name":"sourceId","required":false,"type":"string","description":"Filter to invoices for a specific source: the payment id for order/net30 invoices, or the subscription invoice id for subscription invoices."}],"bodyFields":null,"summary":"List invoices for a customer","description":"List all invoices scoped to a specific customer. Requires invoices:read scope."},{"method":"GET","path":"/api/v1/invoices/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Get invoice","description":"Fetch a single invoice by ID. Requires invoices:read scope."},{"method":"GET","path":"/api/v1/invoices/{id}/download","pathParams":["id"],"queryParams":[{"name":"format","required":false,"type":"string","enum":["json"]}],"bodyFields":null,"summary":"Download invoice PDF","description":"Returns a 302 redirect to a short-lived signed S3 URL for the invoice PDF. Pass ?format=json to receive the URL as JSON instead. Requires invoices:read scope."},{"method":"GET","path":"/api/v1/orders/{orderId}/fulfillments","pathParams":["orderId"],"queryParams":[],"bodyFields":null,"description":"List fulfillments for an order"},{"method":"POST","path":"/api/v1/orders/{orderId}/fulfillments","pathParams":["orderId"],"queryParams":[],"bodyFields":[{"name":"type","required":true,"type":"string","enum":["shipment","digital","access_grant","service","in_person","custom"]},{"name":"lineItemIds","required":true,"type":"object[]"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Create a fulfillment for an order"},{"method":"GET","path":"/api/v1/orders/{orderId}/fulfillments/{id}","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Get a fulfillment by ID (includes type-specific details)"},{"method":"POST","path":"/api/v1/orders/{orderId}/fulfillments/{id}/processing","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Mark fulfillment as processing"},{"method":"POST","path":"/api/v1/orders/{orderId}/fulfillments/{id}/complete","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Mark fulfillment as completed"},{"method":"POST","path":"/api/v1/orders/{orderId}/fulfillments/{id}/cancel","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Cancel a fulfillment"},{"method":"PATCH","path":"/api/v1/orders/{orderId}/fulfillments/{id}/shipment","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Update shipment details for a fulfillment"},{"method":"PATCH","path":"/api/v1/orders/{orderId}/fulfillments/{id}/digital","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Update digital delivery details"},{"method":"PATCH","path":"/api/v1/orders/{orderId}/fulfillments/{id}/access","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Update access grant details"},{"method":"PATCH","path":"/api/v1/orders/{orderId}/fulfillments/{id}/service","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Update service delivery details"},{"method":"GET","path":"/api/v1/subscriptions","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"customerId","required":false,"type":"string"},{"name":"externalCustomerId","required":false,"type":"string","description":"Filter by the merchant's own customer ID (the value passed as externalId on customer creation). Server resolves to the throttle customerId before filtering. Mutually exclusive with customerId."},{"name":"status","required":false,"type":"string","enum":["active","paused","cancelled","past_due","trialing"]},{"name":"interval","required":false,"type":"string","enum":["weekly","monthly","quarterly","yearly"]},{"name":"q","required":false,"type":"string","description":"Search subscription id, customer id, plan reference, plan name, status, interval, and metadata."}],"bodyFields":null,"description":"List subscriptions with cursor pagination"},{"method":"POST","path":"/api/v1/subscriptions","pathParams":[],"queryParams":[],"bodyFields":[{"name":"applicationId","required":false,"type":"string","description":"Optional application ID override (resolved from auth context when absent)"},{"name":"customerId","required":true,"type":"string","description":"ID of the customer to subscribe"},{"name":"planReference","required":true,"type":"string","description":"Your plan identifier (e.g. \"pro_monthly\")"},{"name":"planName","required":false,"type":"string","description":"Human-readable plan name shown on invoices"},{"name":"interval","required":true,"type":"string","description":"Billing interval","enum":["weekly","monthly","quarterly","yearly"]},{"name":"amount","required":true,"type":"integer","description":"Subscription amount in the smallest currency unit (e.g. cents)"},{"name":"currency","required":false,"type":"string","description":"ISO 4217 currency code (defaults to USD)"},{"name":"currentPeriodStart","required":true,"description":"ISO 8601 start of the current billing period"},{"name":"currentPeriodEnd","required":true,"description":"ISO 8601 end of the current billing period"},{"name":"trialEnd","required":false,"description":"ISO 8601 date-time when the trial ends (omit if no trial)"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata stored with the subscription"}],"description":"Create a new subscription"},{"method":"GET","path":"/api/v1/subscriptions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a subscription by ID"},{"method":"PATCH","path":"/api/v1/subscriptions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"planReference","required":false,"type":"string"},{"name":"planName","required":false,"type":"string"},{"name":"interval","required":false,"type":"string","enum":["weekly","monthly","quarterly","yearly"]},{"name":"amount","required":false,"type":"integer","description":"Amount in cents"},{"name":"metadata","required":false,"type":"object"}],"description":"Update a subscription (plan change, amount, interval)"},{"method":"GET","path":"/api/v1/subscriptions/{id}/invoices","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/subscriptions/{id}/pause","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Pause an active subscription"},{"method":"POST","path":"/api/v1/subscriptions/{id}/resume","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Resume a paused subscription"},{"method":"POST","path":"/api/v1/subscriptions/{id}/change-plan","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"planReference","required":true,"type":"string","description":"Your plan identifier for the new plan"},{"name":"planName","required":false,"type":"string","description":"Human-readable name for the new plan"},{"name":"interval","required":true,"type":"string","description":"Billing interval for the new plan","enum":["weekly","monthly","quarterly","yearly"]},{"name":"amount","required":true,"type":"integer","description":"Amount in the smallest currency unit (e.g. cents)"},{"name":"effective","required":true,"type":"string","description":"When the plan change takes effect","enum":["now","period_end"]}],"description":"Schedule or apply a plan change on a subscription"},{"method":"POST","path":"/api/v1/subscriptions/{id}/change-quantity","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"quantity","required":true,"type":"integer","description":"New seat count"},{"name":"effective","required":true,"type":"string","description":"When the seat change takes effect","enum":["now","period_end"]}],"description":"Change the seat quantity on a subscription (immediate prorated, or deferred to period end)"},{"method":"DELETE","path":"/api/v1/subscriptions/{id}/pending-change","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Cancel a pending scheduled plan change on a subscription"},{"method":"POST","path":"/api/v1/subscriptions/{id}/cancel","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"atPeriodEnd","required":false,"type":"boolean","description":"If true, cancels at the end of the current billing period"}],"description":"Cancel a subscription (immediately or at period end)"},{"method":"GET","path":"/api/v1/subscriptions/{id}/usage","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List usage items for the subscription's current billing period."},{"method":"POST","path":"/api/v1/subscriptions/{id}/usage","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"kind","required":true,"type":"string"},{"name":"unitCount","required":true,"type":"integer"},{"name":"unitPriceCents","required":true,"type":"integer"}],"description":"Record (upsert) a usage item for the subscription's current billing period."},{"method":"POST","path":"/api/v1/subscriptions/eligibility-check","pathParams":[],"queryParams":[],"bodyFields":[{"name":"paymentMethodId","required":true,"type":"string","description":"customerPaymentMethods row id. Must belong to the authenticated merchant. The server resolves the card fingerprint internally."}],"description":"Pre-flight check whether a payment method is eligible for a free trial on this merchant. Card fingerprint match against any prior subscription with a trialEnd blocks the trial."},{"method":"GET","path":"/api/v1/discounts","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"isActive","required":false,"type":"boolean"},{"name":"code","required":false,"type":"string"},{"name":"type","required":false,"type":"string","enum":["percentage","fixed_amount"]},{"name":"q","required":false,"type":"string","description":"Search discount code, name, type, or metadata."},{"name":"sort","required":false,"type":"string","description":"Sort by creation time.","enum":["asc","desc"]}],"bodyFields":null,"description":"List discounts with cursor pagination"},{"method":"POST","path":"/api/v1/discounts","pathParams":[],"queryParams":[],"bodyFields":[{"name":"code","required":false,"type":"string","description":"Leave empty for automatic discounts"},{"name":"name","required":true,"type":"string"},{"name":"type","required":true,"type":"string","enum":["percentage","fixed_amount"]},{"name":"value","required":true,"type":"integer","description":"Percentage as a whole number (25 = 25%) or fixed amount in minor units"},{"name":"conditions","required":false,"type":"object","description":"e.g. { minOrder: 5000 }"},{"name":"usageLimit","required":false,"type":"integer"},{"name":"maxRedemptionsPerCustomer","required":false,"type":"integer|null","description":"Per-customer redemption limit. Use null for unlimited."},{"name":"startsAt","required":false,"type":"string"},{"name":"endsAt","required":false,"type":"string"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Create a new discount"},{"method":"GET","path":"/api/v1/discounts/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a discount by ID"},{"method":"PATCH","path":"/api/v1/discounts/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"code","required":false,"type":"string|null","description":"Leave null for automatic discounts"},{"name":"name","required":false,"type":"string"},{"name":"type","required":false,"type":"string","enum":["percentage","fixed_amount"]},{"name":"value","required":false,"type":"integer"},{"name":"conditions","required":false,"type":"object"},{"name":"usageLimit","required":false,"type":"integer|null"},{"name":"maxRedemptionsPerCustomer","required":false,"type":"integer|null","description":"Per-customer redemption limit. Use null for unlimited."},{"name":"isActive","required":false,"type":"boolean"},{"name":"startsAt","required":false,"type":"string|null"},{"name":"endsAt","required":false,"type":"string|null"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a discount"},{"method":"DELETE","path":"/api/v1/discounts/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Delete a discount"},{"method":"POST","path":"/api/v1/discounts/validate","pathParams":[],"queryParams":[],"bodyFields":[{"name":"code","required":true,"type":"string"},{"name":"orderTotal","required":true,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"customerId","required":false,"type":"string"}],"description":"Validate a discount code against an order total"},{"method":"POST","path":"/api/v1/discounts/preview","pathParams":[],"queryParams":[],"bodyFields":[{"name":"code","required":true,"type":"string"},{"name":"currency","required":true,"type":"string"},{"name":"subtotal","required":true,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"customerId","required":false,"type":"string"},{"name":"lineItems","required":false,"type":"object[]"}],"description":"Preview a discount code against a subtotal without mutating a cart"},{"method":"GET","path":"/api/v1/quotes","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"status","required":false,"type":"string","description":"Comma-separated status filter, e.g. proposed,accepted"},{"name":"q","required":false,"type":"string","description":"Search quote number, customer email, or buyer reference"},{"name":"assignedMemberId","required":false,"type":"string"},{"name":"customerId","required":false,"type":"string"}],"bodyFields":null,"description":"List quotes with cursor pagination"},{"method":"POST","path":"/api/v1/quotes","pathParams":[],"queryParams":[],"bodyFields":[{"name":"status","required":false,"type":"string","enum":["draft","requested"]},{"name":"customerId","required":false,"type":"string|null"},{"name":"customerEmail","required":false,"type":"string|null"},{"name":"buyerReference","required":false,"type":"string|null"},{"name":"source","required":false,"type":"string","enum":["dashboard","api"]},{"name":"assignedMemberId","required":false,"type":"string|null"},{"name":"currency","required":false,"type":"string"},{"name":"internalNotes","required":false,"type":"string|null"},{"name":"items","required":false,"type":"object[]"},{"name":"paymentTerms","required":false,"type":"object","description":"pay_in_full | net_terms (netN 1-365) | deposit_balance (deposit percent/fixed + balanceNetN)"},{"name":"expiresAt","required":false,"type":"string|null"},{"name":"buyerNote","required":false,"type":"string|null"},{"name":"leadTime","required":false,"type":"string|null"},{"name":"shippingMode","required":false,"type":"string","enum":["none","flat","checkout_calculated","free"]},{"name":"shippingFlatAmount","required":false,"type":"integer|null"},{"name":"metadata","required":false,"type":"object"}],"description":"Create a quote (draft, or requested for RFQ intake)"},{"method":"GET","path":"/api/v1/quotes/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a quote with revisions, comments, and timeline (merchant view)"},{"method":"PATCH","path":"/api/v1/quotes/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"assignedMemberId","required":false,"type":"string|null"},{"name":"customerId","required":false,"type":"string|null"},{"name":"customerEmail","required":false,"type":"string|null"},{"name":"buyerReference","required":false,"type":"string|null"},{"name":"internalNotes","required":false,"type":"string|null"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"},{"name":"status","required":false,"type":"string","enum":["archived"]}],"description":"Update quote assignment, linkage, internal notes, or archive it"},{"method":"POST","path":"/api/v1/quotes/{id}/revisions","pathParams":["id"],"queryParams":[],"bodyFields":[],"description":"Start a new working revision cloned from the latest issued revision"},{"method":"PATCH","path":"/api/v1/quotes/{id}/revisions/{revId}","pathParams":["id","revId"],"queryParams":[],"bodyFields":[{"name":"items","required":false,"type":"object[]"},{"name":"paymentTerms","required":false,"type":"object","description":"pay_in_full | net_terms (netN 1-365) | deposit_balance (deposit percent/fixed + balanceNetN)"},{"name":"expiresAt","required":false,"type":"string|null"},{"name":"buyerNote","required":false,"type":"string|null"},{"name":"leadTime","required":false,"type":"string|null"},{"name":"shippingMode","required":false,"type":"string","enum":["none","flat","checkout_calculated","free"]},{"name":"shippingFlatAmount","required":false,"type":"integer|null"},{"name":"metadata","required":false,"type":"object"},{"name":"changeSummary","required":false,"type":"string|null"}],"description":"Edit the working revision (items, terms, expiry, notes)"},{"method":"POST","path":"/api/v1/quotes/{id}/issue","pathParams":["id"],"queryParams":[],"bodyFields":[],"description":"Freeze the working revision, supersede the prior one, and propose the quote"},{"method":"POST","path":"/api/v1/quotes/{id}/rotate-link","pathParams":["id"],"queryParams":[],"bodyFields":[],"description":"Rotate the buyer link token (invalidates the old link)"},{"method":"POST","path":"/api/v1/quotes/{id}/comments","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"body","required":true,"type":"string"},{"name":"visibility","required":false,"type":"string","enum":["shared","internal"]},{"name":"revisionId","required":false,"type":"string|null"}],"description":"Add a merchant comment (shared with the buyer, or internal)"},{"method":"POST","path":"/api/v1/carts/{id}/request-quote","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"buyerReference","required":false,"type":"string|null"},{"name":"note","required":false,"type":"string|null"}],"description":"Snapshot a cart's lines into a requested quote (the cart is unchanged)"},{"method":"POST","path":"/api/v1/quotes/{id}/accept","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"revisionId","required":true,"type":"string"},{"name":"acceptedByName","required":true,"type":"string"},{"name":"acceptedByEmail","required":true,"type":"string"},{"name":"buyerReference","required":false,"type":"string|null"},{"name":"itemSelections","required":false,"type":"object[]"},{"name":"reason","required":false,"type":"string|null"}],"description":"Record a rep-given acceptance (phone/email deal) and start checkout (spec §8, §9)"},{"method":"GET","path":"/api/v1/quote-links/{token}","pathParams":["token"],"queryParams":[],"bodyFields":null,"description":"Get a quote by its buyer link token (public, buyer-shaped)"},{"method":"POST","path":"/api/v1/quote-links/{token}/view","pathParams":["token"],"queryParams":[],"bodyFields":[],"description":"Record a buyer view of the quote link (throttled quote.viewed webhook)"},{"method":"POST","path":"/api/v1/quote-links/{token}/comments","pathParams":["token"],"queryParams":[],"bodyFields":[{"name":"authorName","required":false,"type":"string|null"},{"name":"authorEmail","required":false,"type":"string|null"},{"name":"body","required":true,"type":"string"}],"description":"Add a buyer comment (always shared)"},{"method":"POST","path":"/api/v1/quote-links/{token}/request-revision","pathParams":["token"],"queryParams":[],"bodyFields":[{"name":"authorName","required":false,"type":"string|null"},{"name":"authorEmail","required":false,"type":"string|null"},{"name":"message","required":false,"type":"string|null"}],"description":"Ask for changes instead of accepting the current proposal"},{"method":"POST","path":"/api/v1/quote-links/{token}/decline","pathParams":["token"],"queryParams":[],"bodyFields":[{"name":"authorName","required":false,"type":"string|null"},{"name":"authorEmail","required":false,"type":"string|null"},{"name":"reason","required":false,"type":"string|null"}],"description":"Decline the quote"},{"method":"POST","path":"/api/v1/quote-links/{token}/accept","pathParams":["token"],"queryParams":[],"bodyFields":[{"name":"revisionId","required":true,"type":"string"},{"name":"acceptedByName","required":true,"type":"string"},{"name":"acceptedByEmail","required":true,"type":"string"},{"name":"buyerReference","required":false,"type":"string|null"},{"name":"itemSelections","required":false,"type":"object[]"}],"description":"Accept the quote and start checkout (spec §8)"},{"method":"GET","path":"/api/v1/quote-links/{token}/pdf","pathParams":["token"],"queryParams":[],"bodyFields":null,"description":"Download the quote PDF (302 redirect to a short-lived signed URL; lazy-rendered from the frozen issued revision)"},{"method":"GET","path":"/api/v1/quote-request-forms","pathParams":[],"queryParams":[],"bodyFields":null,"description":"List RFQ intake forms for the application + environment"},{"method":"POST","path":"/api/v1/quote-request-forms","pathParams":[],"queryParams":[],"bodyFields":[{"name":"slug","required":true,"type":"string"},{"name":"title","required":false,"type":"string|null"},{"name":"introText","required":false,"type":"string|null"},{"name":"successMessage","required":false,"type":"string|null"},{"name":"redirectUrl","required":false,"type":"string|null","description":"Must be http(s)"},{"name":"fields","required":false,"type":"object"}],"description":"Create a hosted RFQ intake form (token revealed once)"},{"method":"PATCH","path":"/api/v1/quote-request-forms/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"isActive","required":false,"type":"boolean"},{"name":"title","required":false,"type":"string|null"},{"name":"introText","required":false,"type":"string|null"},{"name":"successMessage","required":false,"type":"string|null"},{"name":"redirectUrl","required":false,"type":"string|null","description":"Must be http(s)"},{"name":"fields","required":false,"type":"object"}],"description":"Update an RFQ intake form (activate/deactivate, texts, fields)"},{"method":"POST","path":"/api/v1/quote-request-forms/{id}/rotate-token","pathParams":["id"],"queryParams":[],"bodyFields":[],"description":"Rotate the form token (old URL 404s immediately; new token revealed once)"},{"method":"GET","path":"/api/v1/quote-request-forms/{token}/public","pathParams":["token"],"queryParams":[],"bodyFields":null,"description":"Public form config for the hosted RFQ page (token-authenticated)"},{"method":"POST","path":"/api/v1/quote-requests","pathParams":[],"queryParams":[],"bodyFields":[{"name":"formToken","required":true,"type":"string"},{"name":"email","required":true,"type":"string"},{"name":"name","required":false,"type":"string|null"},{"name":"companyName","required":false,"type":"string|null"},{"name":"phone","required":false,"type":"string|null"},{"name":"buyerReference","required":false,"type":"string|null"},{"name":"message","required":true,"type":"string"},{"name":"website","required":false,"type":"string|null","description":"Honeypot — must be empty"},{"name":"formLoadedAt","required":false,"type":"number","description":"Client mount time (ms epoch); min fill time enforced"},{"name":"turnstileToken","required":false,"type":"string"}],"description":"Public RFQ submission (honeypot + min-fill-time + rate limit + optional Turnstile)"},{"method":"GET","path":"/api/v1/webhooks","pathParams":[],"queryParams":[],"bodyFields":null,"description":"List all webhooks for the organization. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"POST","path":"/api/v1/webhooks","pathParams":[],"queryParams":[],"bodyFields":[{"name":"url","required":true,"type":"string"},{"name":"events","required":true,"type":"string[]","description":"Event types (e.g. [\"order.created\", \"payment.captured\"])"},{"name":"secret","required":false,"type":"string","description":"HMAC secret (auto-generated if omitted)"},{"name":"description","required":false,"type":"string"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Register a new webhook. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"GET","path":"/api/v1/webhooks/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a webhook by ID. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"PATCH","path":"/api/v1/webhooks/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"url","required":false,"type":"string"},{"name":"events","required":false,"type":"string[]"},{"name":"isActive","required":false,"type":"boolean"},{"name":"description","required":false,"type":"string"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a webhook. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"DELETE","path":"/api/v1/webhooks/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Delete a webhook. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"GET","path":"/api/v1/webhooks/{id}/deliveries","pathParams":["id"],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"status","required":false,"type":"string","enum":["pending","success","failed","dead_letter"]}],"bodyFields":null,"description":"List delivery attempts for a webhook. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"POST","path":"/api/v1/webhooks/{webhookId}/deliveries/{id}/retry","pathParams":["webhookId","id"],"queryParams":[],"bodyFields":null,"description":"Retry a failed webhook delivery. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"GET","path":"/api/v1/extensions","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"q","required":false,"type":"string"},{"name":"installable","required":false,"type":"string","enum":["true","false"]},{"name":"lifecycle","required":false,"type":"string","enum":["draft","private","public"]}],"bodyFields":null,"description":"List available extensions"},{"method":"POST","path":"/api/v1/extensions","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"slug","required":true,"type":"string"},{"name":"description","required":false,"type":"string"},{"name":"version","required":false,"type":"string"},{"name":"author","required":false,"type":"string"},{"name":"iconUrl","required":false,"type":"string"},{"name":"homepageUrl","required":false,"type":"string"},{"name":"scopes","required":true,"type":"string[]","description":"Permission scopes the extension requires"},{"name":"eventSubscriptions","required":false,"type":"string[]","description":"Webhook event types the extension subscribes to"},{"name":"iframeUrl","required":false,"type":"string","description":"HTTPS URL to embed as an iframe panel in the dashboard"},{"name":"webhookUrl","required":false,"type":"string","description":"HTTPS endpoint that receives subscribed events"},{"name":"configSchema","required":false,"type":"object","description":"JSON Schema defining accepted configuration"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Register a new extension"},{"method":"GET","path":"/api/v1/extensions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get extension by ID"},{"method":"PATCH","path":"/api/v1/extensions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"name","required":false,"type":"string"},{"name":"description","required":false,"type":"string"},{"name":"version","required":false,"type":"string"},{"name":"author","required":false,"type":"string"},{"name":"iconUrl","required":false,"type":"string"},{"name":"homepageUrl","required":false,"type":"string"},{"name":"scopes","required":false,"type":"string[]"},{"name":"eventSubscriptions","required":false,"type":"string[]"},{"name":"iframeUrl","required":false,"type":"string"},{"name":"webhookUrl","required":false,"type":"string"},{"name":"configSchema","required":false,"type":"object"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update extension metadata"},{"method":"DELETE","path":"/api/v1/extensions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Delete an extension"},{"method":"GET","path":"/api/v1/extensions/{id}/versions","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List versions for an extension, ordered newest first"},{"method":"POST","path":"/api/v1/extensions/{id}/versions","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"version","required":true,"type":"string","description":"Semantic version string, e.g. \"1.2.0\""},{"name":"changelog","required":false,"type":"string","description":"Human-readable changelog for this version"}],"description":"Create a new draft version of an extension by snapshotting the current working-copy manifest"},{"method":"POST","path":"/api/v1/extensions/{id}/versions/{vid}/publish","pathParams":["id","vid"],"queryParams":[],"bodyFields":null,"description":"Publish a draft version of an extension"},{"method":"POST","path":"/api/v1/extensions/{id}/lifecycle","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"lifecycle","required":true,"type":"string","enum":["draft","private","public"]}],"description":"Update the lifecycle state of an extension (draft → private → public)"},{"method":"POST","path":"/api/v1/extensions/{id}/install","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"versionId","required":false,"type":"string","description":"Specific version to pin. Omit to use the latest published version."},{"name":"config","required":false,"type":"object","description":"Configuration values for this installation"}],"description":"Install an extension for the organization. Returns a one-time API key."},{"method":"POST","path":"/api/v1/extensions/{id}/uninstall","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Uninstall an extension (deactivates API key and webhooks)"},{"method":"POST","path":"/api/v1/extensions/{id}/suspend","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Suspend an installed extension (deactivates API key and webhooks, can be reinstalled)"},{"method":"PATCH","path":"/api/v1/installations/{id}/config","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"config","required":true,"type":"object"}],"description":"Update configuration for an installed extension"},{"method":"GET","path":"/api/v1/installations","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"status","required":false,"type":"string","enum":["active","suspended","uninstalled"]}],"bodyFields":null,"description":"List installed extensions for the organization"},{"method":"POST","path":"/api/v1/installations/{id}/upgrade","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"targetVersionId","required":true,"type":"string","description":"ID of the target extension version to upgrade to"},{"name":"acknowledgedNewScopes","required":false,"type":"boolean","description":"Set to true to consent to new scopes added by the target version"}],"description":"Upgrade an installation to a target version. Returns 409 if the new version adds scopes that require consent."},{"method":"POST","path":"/api/v1/installations/{id}/launch-token","pathParams":["id"],"queryParams":[],"bodyFields":[],"description":"Mint a short-lived RS256 session JWT for an iframe extension. The token carries full installation context and expires in 10 minutes. Re-calling this endpoint refreshes the token (no separate refresh route)."},{"method":"GET","path":"/api/v1/installations/{id}/deliveries","pathParams":["id"],"queryParams":[{"name":"limit","required":false,"type":"integer"},{"name":"offset","required":false,"type":"integer"}],"bodyFields":null,"description":"List webhook deliveries for an extension installation (most recent first)"},{"method":"POST","path":"/api/v1/installations/{id}/deliveries/{deliveryId}/replay","pathParams":["id","deliveryId"],"queryParams":[],"bodyFields":[],"description":"Replay a webhook delivery for an extension installation"},{"method":"POST","path":"/api/v1/installations/{id}/test","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Send a verification ping to an extension installation webhook endpoint"},{"method":"GET","path":"/api/v1/extensions/{id}/listing","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"PUT","path":"/api/v1/extensions/{id}/listing","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/extensions/{id}/readiness","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/extensions/{id}/reviews","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/extensions/{id}/reviews","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/extensions/{id}/reviews/{sid}","pathParams":["id","sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/extensions/{id}/reviews/{sid}/comments","pathParams":["id","sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/extensions/{id}/reviews/{sid}/withdraw","pathParams":["id","sid"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/publisher/terms","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/publisher/accept-terms","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/extensions/domains","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/extensions/domains","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/extensions/domains/{id}/verify","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/affiliates/me/code","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get or create affiliate code"},{"method":"POST","path":"/api/v1/affiliates/me/code/regenerate","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Regenerate affiliate code"},{"method":"GET","path":"/api/v1/affiliates/me/stats","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get affiliate stats"},{"method":"GET","path":"/api/v1/affiliates/me/signups","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List referred signups"},{"method":"POST","path":"/api/v1/partner/applications","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Apply for partner status"},{"method":"GET","path":"/api/v1/partner/me/profile","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get partner profile"},{"method":"GET","path":"/api/v1/partner/me/referrals","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List partner referrals"},{"method":"GET","path":"/api/v1/partner/me/seats","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List partner seats in client workspaces"},{"method":"GET","path":"/api/v1/partner/me/commissions","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get commission stats"},{"method":"POST","path":"/api/v1/partner/trials","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Create trial for client"},{"method":"POST","path":"/api/v1/partner/trials/{referralId}/promote","pathParams":["referralId"],"queryParams":[],"bodyFields":null,"summary":"Hand off client workspace to client ownership"},{"method":"POST","path":"/api/v1/partner/trials/{referralId}/claim-billing","pathParams":["referralId"],"queryParams":[],"bodyFields":null,"summary":"Partner claims billing responsibility"},{"method":"GET","path":"/api/v1/partner-seats","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List partner seats on this workspace"},{"method":"PATCH","path":"/api/v1/partner-seats/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Update seat permissions"},{"method":"DELETE","path":"/api/v1/partner-seats/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Remove a partner seat"},{"method":"GET","path":"/api/v1/events/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a single event by ID"},{"method":"GET","path":"/api/v1/events","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"type","required":false,"type":"string","description":"Filter by event type"},{"name":"entityType","required":false,"type":"string","description":"Filter by entity type"},{"name":"entityId","required":false,"type":"string","description":"Filter by entity ID"}],"bodyFields":null,"description":"List events (immutable audit log)"},{"method":"GET","path":"/api/v1/scopes","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/event-types","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/.well-known/extension-jwks.json","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/checkout/sessions","pathParams":[],"queryParams":[],"bodyFields":[{"name":"applicationId","required":true,"type":"string"},{"name":"cartId","required":false,"type":"string"},{"name":"externalCartId","required":false,"type":"string"},{"name":"customerEmail","required":false,"type":"string"},{"name":"customer","required":false,"type":"object"},{"name":"returnUrl","required":true,"type":"string"},{"name":"cancelUrl","required":true,"type":"string"},{"name":"allowedMethods","required":false,"type":"string[]"},{"name":"paymentTerms","required":false,"type":"object"},{"name":"recurring","required":false,"type":"object"},{"name":"collect","required":false,"type":"object"},{"name":"metadata","required":false,"type":"object"},{"name":"discountCode","required":false,"type":"string"},{"name":"clientContext","required":false,"type":"object"}],"description":"Create a new hosted checkout session"},{"method":"GET","path":"/api/v1/checkout/sessions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a checkout session by ID"},{"method":"DELETE","path":"/api/v1/checkout/sessions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Cancel a checkout session"},{"method":"GET","path":"/api/v1/checkout-sessions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a customer-facing checkout session by ID (public)"},{"method":"GET","path":"/api/v1/checkout-sessions/{id}/embed-config","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get customer-facing embed config by checkout session ID (public)"},{"method":"GET","path":"/api/v1/checkout-sessions/{id}/cart","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a customer-facing checkout session cart by session ID (public)"},{"method":"POST","path":"/api/v1/checkout-sessions/{id}/calculate","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Calculate customer-facing checkout session totals by session ID (public)"},{"method":"POST","path":"/api/v1/checkout-sessions/{id}/discount","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Apply a customer-facing checkout discount by session ID (public)"},{"method":"DELETE","path":"/api/v1/checkout-sessions/{id}/discount","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Remove a customer-facing checkout discount by session ID (public)"},{"method":"POST","path":"/api/v1/checkout/sessions/{id}/complete","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"email","required":false,"type":"string"},{"name":"shippingAddress","required":false,"type":"object"},{"name":"billingAddress","required":false,"type":"object"},{"name":"billingSameAsShipping","required":false,"type":"boolean"},{"name":"paymentMethod","required":true,"type":"string","enum":["net30","card","embedded"]},{"name":"netDays","required":false,"type":"integer"},{"name":"termsAccepted","required":false,"type":"boolean"},{"name":"termsSnapshot","required":false,"type":"string"},{"name":"invoiceNumber","required":false,"type":"string"},{"name":"net30Acceptance","required":false,"type":"object"},{"name":"paymentToken","required":false,"type":"string"},{"name":"processorCheckoutSessionId","required":false,"type":"string"},{"name":"processorTransactionId","required":false,"type":"string"},{"name":"clientContext","required":false,"type":"object"}],"description":"Complete a checkout session"},{"method":"POST","path":"/api/v1/checkout-sessions/{id}/complete","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"email","required":false,"type":"string"},{"name":"shippingAddress","required":false,"type":"object"},{"name":"billingAddress","required":false,"type":"object"},{"name":"billingSameAsShipping","required":false,"type":"boolean"},{"name":"paymentMethod","required":true,"type":"string","enum":["net30","card","embedded"]},{"name":"netDays","required":false,"type":"integer"},{"name":"termsAccepted","required":false,"type":"boolean"},{"name":"termsSnapshot","required":false,"type":"string"},{"name":"invoiceNumber","required":false,"type":"string"},{"name":"net30Acceptance","required":false,"type":"object"},{"name":"paymentToken","required":false,"type":"string"},{"name":"processorCheckoutSessionId","required":false,"type":"string"},{"name":"processorTransactionId","required":false,"type":"string"},{"name":"clientContext","required":false,"type":"object"}],"description":"Public customer-facing complete"},{"method":"POST","path":"/api/v1/providers/{provider}/webhooks/{connectionId}","pathParams":["provider","connectionId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/payment-providers/{provider}/webhooks","pathParams":["provider"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/payment-providers/{provider}/webhooks/{connectionId}","pathParams":["provider","connectionId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/checkout-sessions/embed-token","pathParams":[],"queryParams":[],"bodyFields":[{"name":"amount","required":true,"type":"integer","description":"Amount in minor units (e.g. cents)"},{"name":"currency","required":true,"type":"string","description":"ISO 4217 currency code"},{"name":"country","required":false,"type":"string","description":"ISO 3166-1 alpha-2 country code"},{"name":"externalCartId","required":false,"type":"string","description":"Optional external cart reference"},{"name":"buyerExternalIdentifier","required":false,"type":"string","description":"Optional Gr4vy buyer external identifier. When set, Gr4vy associates the resulting stored payment method with this buyer so future charges can reference it by id. Required for the platform-billing card-vault flow; omitted for one-shot checkout sessions."},{"name":"recurring","required":false,"type":"boolean","description":"When true, this embed captures a card for recurring/merchant-initiated billing: the Gr4vy widget is rendered with paymentSource=recurring + store=true (card-only, vaulted) and the buyer is pinned for re-mint. Requires buyerExternalIdentifier. Defaults to false (one-shot payment showing all enabled methods)."},{"name":"addCard","required":false,"type":"boolean","description":"When true (with recurring), the embed is a pure add-a-card flow: checkout-web renders the Gr4vy widget with display='addOnly' (just a new-card form, no stored methods, no checkout framing) and stores the card for the pinned buyer. Use for 'manage payment methods → add card'. Defaults to false."}],"description":"Mint a Gr4vy Embed token for card capture. The token is scoped to a server-side checkout session."},{"method":"GET","path":"/api/v1/checkout-sessions/{id}/embed-token","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Re-mint a Gr4vy Embed JWT for an existing throttle checkout session. Anonymous; the session id is the only secret needed."},{"method":"GET","path":"/api/v1/api-keys","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List API keys for the calling merchant"},{"method":"POST","path":"/api/v1/api-keys","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"scopes","required":true,"type":"string[]"}],"summary":"Create a new API key (Clerk JWT only)"},{"method":"DELETE","path":"/api/v1/api-keys/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Revoke (soft-delete) an API key"},{"method":"POST","path":"/api/v1/api-keys/{id}/rotate","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"overlapHours","required":false,"type":"integer"}],"summary":"Rotate an API key with an overlap window (Clerk JWT only)"},{"method":"GET","path":"/api/v1/merchants/me","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get current merchant"},{"method":"PATCH","path":"/api/v1/merchants/me","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":false,"type":"string"},{"name":"logoUrl","required":false,"type":"null"}],"summary":"Update merchant display name. Pass `logoUrl: null` to clear the logo. To set a logo, use POST /v1/merchants/me/logo."},{"method":"GET","path":"/api/v1/checkout-sessions/{id}/payment-methods","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"List payment methods available for a checkout session (public)"},{"method":"GET","path":"/api/v1/connectors","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List configured connectors for the calling merchant"},{"method":"POST","path":"/api/v1/connectors","pathParams":[],"queryParams":[],"bodyFields":[{"name":"paymentServiceDefinitionId","required":true,"type":"string"},{"name":"displayName","required":true,"type":"string"},{"name":"fields","required":true,"type":"object[]"},{"name":"acceptedCountries","required":false,"type":"string[]"},{"name":"acceptedCurrencies","required":false,"type":"string[]"},{"name":"active","required":false,"type":"boolean"}],"summary":"Create a new connector for the calling merchant"},{"method":"GET","path":"/api/v1/connectors/available","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List available connector types"},{"method":"GET","path":"/api/v1/connectors/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Get a configured connector by id"},{"method":"PATCH","path":"/api/v1/connectors/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"paymentServiceDefinitionId","required":false,"type":"string"},{"name":"displayName","required":false,"type":"string"},{"name":"fields","required":false,"type":"object[]"},{"name":"acceptedCountries","required":false,"type":"string[]"},{"name":"acceptedCurrencies","required":false,"type":"string[]"},{"name":"active","required":false,"type":"boolean"}],"summary":"Update a connector for the calling merchant"},{"method":"DELETE","path":"/api/v1/connectors/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Delete a connector for the calling merchant"},{"method":"GET","path":"/api/v1/payment-routing","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the card-transaction routing config"},{"method":"PUT","path":"/api/v1/payment-routing","pathParams":[],"queryParams":[],"bodyFields":[{"name":"defaultCascade","required":true,"type":"string[]"},{"name":"rules","required":true,"type":"object[]"}],"summary":"Replace the card-transaction routing config"},{"method":"GET","path":"/api/v1/routing-connectors","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List connectors eligible for a routing cascade"},{"method":"GET","path":"/api/v1/routing-payment-methods","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List Gr4vy payment methods available to routing/decline rules"},{"method":"GET","path":"/api/v1/other-routing","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the non-card (redirect-transaction) routing config"},{"method":"PUT","path":"/api/v1/other-routing","pathParams":[],"queryParams":[],"bodyFields":[{"name":"rules","required":true,"type":"object[]"}],"summary":"Replace the non-card routing config"},{"method":"GET","path":"/api/v1/card-decline","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the card-transaction decline rules"},{"method":"PUT","path":"/api/v1/card-decline","pathParams":[],"queryParams":[],"bodyFields":[{"name":"rules","required":true,"type":"object[]"}],"summary":"Replace the card-transaction decline rules"},{"method":"GET","path":"/api/v1/other-decline","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the non-card (other) decline rules"},{"method":"PUT","path":"/api/v1/other-decline","pathParams":[],"queryParams":[],"bodyFields":[{"name":"rules","required":true,"type":"object[]"}],"summary":"Replace the non-card (other) decline rules"},{"method":"POST","path":"/api/v1/connectors/stripe/install-link","pathParams":[],"queryParams":[],"bodyFields":[],"summary":"Begin Stripe one-click connect"},{"method":"POST","path":"/api/v1/connectors/stripe/connect-key","pathParams":[],"queryParams":[],"bodyFields":[{"name":"secretKey","required":true,"type":"string"}],"summary":"Complete Stripe connect by pasting the restricted key"},{"method":"POST","path":"/api/v1/connectors/stripe/finalize","pathParams":[],"queryParams":[],"bodyFields":[{"name":"accountId","required":true,"type":"string"},{"name":"stripeUserId","required":true,"type":"string"},{"name":"state","required":true,"type":"string"},{"name":"installSignature","required":true,"type":"string"},{"name":"livemode","required":true,"type":"boolean"},{"name":"extraFields","required":false,"type":"object"}],"summary":"Finalize Stripe one-click connect"},{"method":"POST","path":"/api/v1/stripe-app/webhooks","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Inbound Stripe App webhook (uninstall handling)"},{"method":"GET","path":"/api/v1/payment-methods","pathParams":[],"queryParams":[{"name":"customerId","required":false,"type":"string"},{"name":"cartTotal","required":false,"type":"integer"}],"bodyFields":null,"summary":"List active payment methods derived from configured connectors"},{"method":"GET","path":"/api/v1/bigcommerce/connections","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List BigCommerce connections for the calling merchant"},{"method":"POST","path":"/api/v1/bigcommerce/connect","pathParams":[],"queryParams":[],"bodyFields":[{"name":"storeHash","required":true,"type":"string"},{"name":"accessToken","required":true,"type":"string"}],"summary":"Connect a BC store via static credentials"},{"method":"POST","path":"/api/v1/bigcommerce/connections/{id}/retry","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Retry webhook registration for a setup_failed connection"},{"method":"DELETE","path":"/api/v1/bigcommerce/connections/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Disconnect a BC store (soft-delete; 90-day cron hard-deletes after retention)"},{"method":"GET","path":"/api/v1/webhook-endpoints","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List configured outbound webhook endpoints"},{"method":"POST","path":"/api/v1/webhook-endpoints","pathParams":[],"queryParams":[],"bodyFields":[{"name":"url","required":true,"type":"string"},{"name":"enabledEvents","required":true,"type":"string[]"}],"summary":"Create an outbound webhook endpoint"},{"method":"GET","path":"/api/v1/webhook-endpoints/coverage","pathParams":[],"queryParams":[{"name":"days","required":false,"type":"integer"}],"bodyFields":null,"summary":"Event types emitted recently with no active subscriber","description":"Reports subscribable event types this application emitted in the lookback window that no active webhook endpoint is subscribed to. Use it to catch handlers wired up for events that can never arrive."},{"method":"PATCH","path":"/api/v1/webhook-endpoints/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"url","required":false,"type":"string"},{"name":"enabledEvents","required":false,"type":"string[]"},{"name":"isActive","required":false,"type":"boolean"}],"summary":"Update a webhook endpoint (URL, events, or active flag)"},{"method":"DELETE","path":"/api/v1/webhook-endpoints/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Soft-delete a webhook endpoint (sets deletedAt; excludes from list and dispatch)"},{"method":"POST","path":"/api/v1/webhook-endpoints/{id}/rotate-secret","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Rotate the signing secret for a webhook endpoint (reveal-once)."},{"method":"GET","path":"/api/v1/webhook-deliveries","pathParams":[],"queryParams":[{"name":"endpointId","required":false,"type":"string"},{"name":"orderId","required":false,"type":"string"},{"name":"limit","required":false,"type":"integer"},{"name":"offset","required":false,"type":"integer"}],"bodyFields":null,"summary":"Recent webhook delivery attempts (debug / audit log). Paginated via limit + offset."},{"method":"GET","path":"/api/v1/webhook-deliveries/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Fetch a single webhook delivery (full envelope + signature scheme) for debugging."},{"method":"POST","path":"/api/v1/webhook-endpoints/{id}/test","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"eventType","required":false,"type":"string","enum":["cart.created","cart.updated","cart.item_added","cart.item_updated","cart.item_removed","cart.shipping_selected","cart.shipping_cleared","cart.discount_applied","cart.discount_removed","cart.tax_recomputed","cart.checkout_started","cart.converted","cart.abandoned","cart.merged","order.created","order.updated","order.completed","order.cancelled","order.closed","order.sync_failed","order.sync_conflict","return.created","return.updated","quote.requested","quote.proposed","quote.viewed","quote.comment_added","quote.revision_requested","quote.declined","quote.accepted","quote.converted","payment.pending","payment.authorized","payment.captured","payment.failed","payment.voided","payment.refunded","payment.partially_refunded","payment.refund_failed","payment.vaulted","payment.disputed","payment.dispute_cleared","fulfillment.created","fulfillment.completed","fulfillment.cancelled","fulfillment.shipment.shipped","fulfillment.shipment.delivered","fulfillment.digital.delivered","subscription.created","subscription.activated","subscription.updated","subscription.plan_changed","subscription.plan_change_scheduled","subscription.paused","subscription.resumed","subscription.cancelled","subscription.renewed","subscription.past_due","subscription.payment_failed","subscription.backup_pm_used","subscription.create_failed","subscription.trial_blocked","discount.applied","discount.removed","customer.created","customer.updated","customer.deleted","customer.payment_method_added","customer.payment_method_removed","invoice.past_due","shipping_tax.provider_connection.unhealthy","workspace.payment_method.added","workspace.payment_method.removed","workspace.payment_method.default_changed","workspace.payment_method.backup_set","workspace.payment_method.backup_used","workspace.platform_charge.succeeded","workspace.platform_charge.failed","workspace.trial_expired"]},{"name":"data","required":false,"type":"object"}],"summary":"Send a synthetic, signed test delivery to this endpoint."},{"method":"POST","path":"/api/v1/webhook-deliveries/{id}/replay","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Replay a delivery (re-fires same payload with new signature)."},{"method":"POST","path":"/api/v1/merchants/me/external-cart-ack","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Mark this merchant as a non-BC (\"external cart\") merchant so onboarding can complete."},{"method":"POST","path":"/api/v1/merchants/me/finish-onboarding","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Mark the merchant as having finished the onboarding wizard."},{"method":"PATCH","path":"/api/v1/merchants/me/settings/net30","pathParams":[],"queryParams":[],"bodyFields":[{"name":"enabled","required":false,"type":"boolean"},{"name":"invoicePrefix","required":false,"type":"string"},{"name":"defaultNetDays","required":false,"type":"integer"},{"name":"termsText","required":false,"type":"string|null"}],"summary":"Update Net30 invoice billing settings."},{"method":"POST","path":"/api/v1/merchants/me/logo","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Upload a merchant logo (multipart/form-data, field: logo)."},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/applications/{applicationId}/logo","pathParams":["workspaceId","applicationId"],"queryParams":[],"bodyFields":null,"summary":"Upload an application logo."},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}/applications/{applicationId}/logo","pathParams":["workspaceId","applicationId"],"queryParams":[],"bodyFields":null,"summary":"Delete an application logo."},{"method":"POST","path":"/api/v1/email/asset-upload","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Upload an image asset for inline use in an email template (multipart, field: file)."},{"method":"POST","path":"/api/v1/extensions/icon-upload","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Upload an extension icon (multipart/form-data, field: file)."},{"method":"POST","path":"/api/v1/extensions/screenshot-upload","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Upload a marketplace listing screenshot (multipart/form-data, field: file)."},{"method":"GET","path":"/api/v1/assets/{*}","pathParams":["*"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/audit-log","pathParams":[],"queryParams":[{"name":"limit","required":false,"type":"integer"},{"name":"environmentId","required":false,"type":"string"}],"bodyFields":null,"summary":"Recent admin actions taken on this merchant"},{"method":"POST","path":"/api/v1/fulfillments/{id}/digital/upload","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/fulfillments/{id}/digital/download","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/payments/{id}/invoice/download","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/net30/connection","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the calling merchant's Net30 connection"},{"method":"POST","path":"/api/v1/net30/connection","pathParams":[],"queryParams":[],"bodyFields":[{"name":"invoicePrefix","required":true,"type":"string"},{"name":"defaultNetDays","required":true,"type":"integer"},{"name":"termsText","required":false,"type":"string|null"},{"name":"maxOrderTotal","required":false,"type":"number|null"},{"name":"enabled","required":true,"type":"boolean"}],"summary":"Create the calling merchant's Net30 connection"},{"method":"PATCH","path":"/api/v1/net30/connection/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"invoicePrefix","required":false,"type":"string"},{"name":"defaultNetDays","required":false,"type":"integer"},{"name":"termsText","required":false,"type":"string|null"},{"name":"maxOrderTotal","required":false,"type":"number|null"},{"name":"enabled","required":false,"type":"boolean"}],"summary":"Update the calling merchant's Net30 connection"},{"method":"DELETE","path":"/api/v1/net30/connection/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Soft-delete (disable) the calling merchant's Net30 connection"},{"method":"GET","path":"/api/v1/net30/eligible-customers","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List the calling merchant's Net30 eligible customers"},{"method":"POST","path":"/api/v1/net30/eligible-customers","pathParams":[],"queryParams":[],"bodyFields":[{"name":"customerId","required":true,"type":"string"},{"name":"notes","required":false,"type":"string"}],"summary":"Add a customer to the Net30 eligible allowlist"},{"method":"DELETE","path":"/api/v1/net30/eligible-customers/{customerId}","pathParams":["customerId"],"queryParams":[],"bodyFields":null,"summary":"Remove a customer from the Net30 eligible allowlist"},{"method":"PATCH","path":"/api/v1/payments/{id}/notes","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"notes","required":true,"type":"string|null"}],"summary":"Update free-text notes on a payment (5000 char max)."},{"method":"POST","path":"/api/v1/payments/{id}/dispute","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"reason","required":true,"type":"string"}],"summary":"Open a dispute on a Net30 payment."},{"method":"POST","path":"/api/v1/payments/{id}/dispute/clear","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Clear an open dispute on a payment (leaves reason + opened_at for audit)."},{"method":"POST","path":"/api/v1/payments/{id}/backdate-due-date","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"daysPastDue","required":true,"type":"integer"}],"summary":"Backdate metadata.dueDate so a Net-N invoice falls into a specific aging bucket. Demo/test tool only."},{"method":"GET","path":"/api/v1/invoices/aging","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"AR aging report: outstanding Net30 payments bucketed by days past due."},{"method":"GET","path":"/api/v1/analytics/orders-timeseries","pathParams":[],"queryParams":[{"name":"days","required":false,"type":"string"}],"bodyFields":null,"summary":"Daily order count + captured gross revenue over a trailing window (default 30 days, max 365)."},{"method":"GET","path":"/api/v1/orders/{id}/returns","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"List an order's returns."},{"method":"POST","path":"/api/v1/orders/{id}/returns","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"items","required":true,"type":"object[]"},{"name":"reason","required":false,"type":"string"},{"name":"restock","required":false,"type":"boolean"}],"summary":"Open a return (RMA) against an order for a subset of its line items."},{"method":"GET","path":"/api/v1/returns/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Get a return and its items."},{"method":"POST","path":"/api/v1/returns/{id}/transition","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"action","required":true,"type":"string","enum":["approve","reject","receive","complete","cancel"]}],"summary":"Transition a return: approve | reject | receive | complete | cancel."},{"method":"POST","path":"/api/v1/returns/{id}/exchange","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"items","required":true,"type":"object[]"}],"summary":"Complete a return as an exchange: create a replacement order for the swapped items and settle the price difference (charge if more, refund if less)."},{"method":"PATCH","path":"/api/v1/orders/{id}/line-items","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"add","required":false,"type":"object[]"},{"name":"update","required":false,"type":"object[]"},{"name":"remove","required":false,"type":"string[]"}],"summary":"Add, update, or remove line items on an order. On a captured order the total delta is charged (increase) or refunded (decrease) automatically."},{"method":"GET","path":"/api/v1/embed-config","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the merchant embed config (allowlisted parent origins + branding)"},{"method":"PUT","path":"/api/v1/embed-config","pathParams":[],"queryParams":[],"bodyFields":[{"name":"allowedOrigins","required":false,"type":"string[]"},{"name":"primaryColor","required":false,"type":"string"},{"name":"logoUrl","required":false,"type":"string"},{"name":"merchantName","required":false,"type":"string"},{"name":"storefrontBaseUrl","required":false,"type":"string|null","description":"Absolute base URL of your storefront (e.g. \"https://yourstore.com\"). Relative line-item imageUrls are resolved against it. Pass null to clear; when unset, the first allowedOrigin is used."},{"name":"cartRecoveryUrlTemplate","required":false,"type":"string|null","description":"Absolute https URL template used to build the recovery link in abandoned-cart emails. Must contain a \"{cartId}\" placeholder, e.g. \"https://yourstore.com/cart?c={cartId}\". Pass null to clear; when unset, abandoned carts are recovered via the cart.abandoned webhook only (no recovery email)."},{"name":"cartAbandonmentThresholdMinutes","required":false,"type":"integer|null","description":"Minutes of inactivity before an open/checkout cart is treated as abandoned by the sweep. Range 15–129600 (90 days). Pass null to clear; when unset, the platform default of 1440 (24h) applies."}],"summary":"Update the merchant embed config"},{"method":"GET","path":"/api/v1/tracking-settings","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get per-environment analytics tracking settings (secrets masked)"},{"method":"PUT","path":"/api/v1/tracking-settings","pathParams":[],"queryParams":[],"bodyFields":[{"name":"ga4MeasurementId","required":false,"type":"string|null"},{"name":"metaPixelId","required":false,"type":"string|null"},{"name":"ga4ApiSecret","required":false,"type":"string|null"},{"name":"metaCapiAccessToken","required":false,"type":"string|null"},{"name":"serverSideEnabled","required":false,"type":"boolean"},{"name":"requireConsent","required":false,"type":"boolean"}],"summary":"Update per-environment analytics tracking settings. Omitted fields are unchanged; empty string clears a field."},{"method":"POST","path":"/v1/clerk/webhooks/user-created","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Clerk user.created webhook (Svix-verified)"},{"method":"POST","path":"/v1/resend/webhooks","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/email/templates","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List all email template definitions with merchant overrides"},{"method":"GET","path":"/api/v1/email/templates/{key}","pathParams":["key"],"queryParams":[],"bodyFields":null,"summary":"Get a single email template definition with merchant override"},{"method":"PUT","path":"/api/v1/email/templates/{key}","pathParams":["key"],"queryParams":[],"bodyFields":null,"summary":"Upsert a merchant override for an email template"},{"method":"DELETE","path":"/api/v1/email/templates/{key}","pathParams":["key"],"queryParams":[],"bodyFields":null,"summary":"Delete merchant override for an email template (reset to default)"},{"method":"POST","path":"/api/v1/email/templates/{key}/preview","pathParams":["key"],"queryParams":[],"bodyFields":null,"summary":"Render a template with sample data for preview"},{"method":"POST","path":"/api/v1/email/test-send","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Send a test email to the authenticated admin (bypasses opt-out + cooldown)"},{"method":"GET","path":"/api/v1/applications/{applicationId}/email/templates","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"List application email template definitions with application overrides"},{"method":"GET","path":"/api/v1/applications/{applicationId}/email/templates/{key}","pathParams":["applicationId","key"],"queryParams":[],"bodyFields":null,"summary":"Get an application email template definition with application override"},{"method":"PUT","path":"/api/v1/applications/{applicationId}/email/templates/{key}","pathParams":["applicationId","key"],"queryParams":[],"bodyFields":null,"summary":"Upsert an application override for an email template"},{"method":"DELETE","path":"/api/v1/applications/{applicationId}/email/templates/{key}","pathParams":["applicationId","key"],"queryParams":[],"bodyFields":null,"summary":"Delete application override for an email template"},{"method":"POST","path":"/api/v1/applications/{applicationId}/email/templates/{key}/preview","pathParams":["applicationId","key"],"queryParams":[],"bodyFields":null,"summary":"Render an application template with sample data for preview"},{"method":"POST","path":"/api/v1/applications/{applicationId}/email/test-send","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Send an application-scoped test email to the authenticated admin"},{"method":"GET","path":"/api/v1/applications/{applicationId}/email/messages","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"List recent email messages for the application"},{"method":"GET","path":"/api/v1/email/messages","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List recent email messages for the merchant"},{"method":"GET","path":"/api/v1/merchants/me/email-settings","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get workspace email settings"},{"method":"PATCH","path":"/api/v1/merchants/me/email-settings","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Update workspace email settings"},{"method":"PATCH","path":"/api/v1/merchants/me/members/{id}/preferences","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Update per-member email preferences"},{"method":"GET","path":"/api/v1/applications/{applicationId}/email-settings","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Get application email settings"},{"method":"PATCH","path":"/api/v1/applications/{applicationId}/email-settings","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Update application email settings"},{"method":"GET","path":"/api/v1/email/sender-domain","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the current custom sending domain state"},{"method":"POST","path":"/api/v1/email/sender-domain","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Register a custom sending domain via Resend"},{"method":"DELETE","path":"/api/v1/email/sender-domain","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Disconnect and remove the custom sending domain"},{"method":"POST","path":"/api/v1/email/sender-domain/verify","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Trigger a domain verification check via Resend"},{"method":"GET","path":"/api/v1/applications/{applicationId}/email/sender-domain","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Get the current application custom sending domain state"},{"method":"POST","path":"/api/v1/applications/{applicationId}/email/sender-domain","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Register an application custom sending domain via Resend"},{"method":"DELETE","path":"/api/v1/applications/{applicationId}/email/sender-domain","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Disconnect and remove the application custom sending domain"},{"method":"POST","path":"/api/v1/applications/{applicationId}/email/sender-domain/verify","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Trigger an application domain verification check via Resend"},{"method":"GET","path":"/api/v1/merchants/me/invites","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"[legacy] List merchant team members"},{"method":"POST","path":"/api/v1/merchants/me/invites","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"[legacy] Invite a team member (delegates to team-service)"},{"method":"POST","path":"/api/v1/merchants/me/invites/{id}/resend","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"[legacy] Resend an invite"},{"method":"POST","path":"/api/v1/merchants/me/invites/{id}/revoke","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"[legacy] Revoke an invite or remove a member"},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/invites","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/invites","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null,"summary":"Create a team invite"},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/invites/{id}/resend","pathParams":["workspaceId","id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/invites/{id}/revoke","pathParams":["workspaceId","id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/invites/accept","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/invites/pending","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/members","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/members/me","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null},{"method":"PATCH","path":"/api/v1/workspaces/{workspaceId}/members/{memberId}","pathParams":["workspaceId","memberId"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}/members/{memberId}","pathParams":["workspaceId","memberId"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}/members/{memberId}/applications/{applicationId}","pathParams":["workspaceId","memberId","applicationId"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/auth/permissions","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/notifications/unread-count","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/notifications","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/notifications/{id}/read","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/notifications/{id}/unread","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/notifications/{id}/archive","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/notifications/read-all","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/me/preferences","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"PATCH","path":"/api/v1/me/preferences","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces/{wsId}/support/tickets","pathParams":["wsId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{wsId}/support/tickets","pathParams":["wsId"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces/{wsId}/support/tickets/{id}","pathParams":["wsId","id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{wsId}/support/tickets/{id}/comments","pathParams":["wsId","id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{wsId}/support/tickets/{id}/read","pathParams":["wsId","id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces/{wsId}/support/unread-count","pathParams":["wsId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{wsId}/support/attachments/presign","pathParams":["wsId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{wsId}/support/attachments/{attachmentId}/confirm","pathParams":["wsId","attachmentId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/support/dispatch-webhook","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces","pathParams":[],"queryParams":[],"bodyFields":null,"description":"List workspaces the authenticated user is a member of"},{"method":"POST","path":"/api/v1/workspaces","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"slug","required":true,"type":"string","description":"URL-safe identifier, globally unique"},{"name":"email","required":false,"type":"string","description":"Owner email (used for member row); falls back to empty string if omitted"}],"description":"Create a new workspace; the calling user becomes owner"},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null,"description":"Get a single workspace by ID (must be a member)"},{"method":"PATCH","path":"/api/v1/workspaces/{workspaceId}","pathParams":["workspaceId"],"queryParams":[],"bodyFields":[{"name":"name","required":false,"type":"string"},{"name":"slug","required":false,"type":"string"}],"description":"Update workspace name or slug (must be a member)"},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}","pathParams":["workspaceId"],"queryParams":[{"name":"force","required":false,"type":"string","enum":["true","false"]}],"bodyFields":null,"description":"Delete a workspace (must be a member; pass ?force=true to cascade-delete applications)"},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/environments","pathParams":["workspaceId"],"queryParams":[{"name":"includeArchived","required":false,"type":"string","enum":["true","false"]}],"bodyFields":null,"description":"List workspace environments"},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/environments","pathParams":["workspaceId"],"queryParams":[],"bodyFields":[{"name":"slug","required":true,"type":"string"},{"name":"name","required":true,"type":"string"}],"description":"Create a custom non-production sandbox environment"},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}/environments/{environmentId}","pathParams":["workspaceId","environmentId"],"queryParams":[],"bodyFields":null,"description":"Archive a custom workspace environment"},{"method":"POST","path":"/api/v1/workspaces/{id}/go-live","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"acceptedProductionTermsAt","required":true,"type":"string"}],"summary":"Flip a sandbox workspace to production. Multi-precondition gated."},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/applications","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null,"description":"List applications in a workspace (must be a member)"},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/applications","pathParams":["workspaceId"],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"slug","required":true,"type":"string","description":"URL-safe identifier, unique within the workspace"},{"name":"currency","required":false,"type":"string"},{"name":"displayName","required":false,"type":"string|null"},{"name":"brandColor","required":false,"type":"string|null"},{"name":"allowedOrigins","required":false,"type":"string[]"}],"description":"Create a new application in a workspace (must be a member)"},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/applications/{applicationId}","pathParams":["workspaceId","applicationId"],"queryParams":[],"bodyFields":null,"description":"Get a single application by ID (must be a workspace member)"},{"method":"PATCH","path":"/api/v1/workspaces/{workspaceId}/applications/{applicationId}","pathParams":["workspaceId","applicationId"],"queryParams":[],"bodyFields":[{"name":"name","required":false,"type":"string"},{"name":"slug","required":false,"type":"string"},{"name":"currency","required":false,"type":"string"},{"name":"isActive","required":false,"type":"boolean"},{"name":"displayName","required":false,"type":"string|null"},{"name":"brandColor","required":false,"type":"string|null"},{"name":"allowedOrigins","required":false,"type":"string[]"}],"description":"Update application name, slug, currency, or isActive (must be a workspace member)"},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}/applications/{applicationId}","pathParams":["workspaceId","applicationId"],"queryParams":[],"bodyFields":null,"description":"Delete an application (must be a workspace member)"},{"method":"GET","path":"/api/v1/billing/state","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/billing/subscribe","pathParams":[],"queryParams":[],"bodyFields":[{"name":"paymentMethodToken","required":false,"type":"string"}]},{"method":"POST","path":"/api/v1/billing/cancel","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/billing/resume","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/payment-methods","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/billing/payment-methods","pathParams":[],"queryParams":[],"bodyFields":[{"name":"paymentMethodToken","required":true,"type":"string"}]},{"method":"PATCH","path":"/api/v1/billing/payment-methods/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"role","required":true,"type":"string","enum":["primary","backup"]}]},{"method":"DELETE","path":"/api/v1/billing/payment-methods/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/billing/gr4vy-embed-token","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/provider-status","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/invoices","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/invoices/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/invoices/{id}/receipt.pdf","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/plan-history","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/overview","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/platform-revenue","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/platform-billing/run-renewal","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/platform-billing/run-dunning","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/extend-trial","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/promote-partner","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/partner-applications","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/partner-applications/{id}/reject","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/demote-partner","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/force-tier-override","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/refund-charge","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/cancel-immediately","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/bring-legacy-into-billing","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/suspend","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/reactivate","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/audit-log","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/me/staff-status","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/staff","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/staff","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/admin/staff/{email}","pathParams":["email"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}/payment-methods","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}/invoices","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}/usage","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}/subscription-timeline","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}/members","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"PATCH","path":"/api/v1/admin/workspaces/{id}/members/{memberId}","pathParams":["id","memberId"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/admin/workspaces/{id}/members/{memberId}","pathParams":["id","memberId"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/extensions/reviews","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/extensions/reviews/{sid}","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/claim","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/comments","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/install-candidate","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/uninstall-candidate","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/approve","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/request-changes","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/reject","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/{id}/unpublish","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/whoami","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Identify the calling credential","description":"Returns the credential type, granted scopes, and the workspace, application and environment the credential is pinned to. Requires authentication but no particular scope."}]}
1
+ {"generatedAt":"2026-08-01T21:35:56.741Z","operations":[{"method":"GET","path":"/health","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/ready","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/internal/sentry-smoke","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/unsubscribe","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/unsubscribe/apply","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/organizations","pathParams":[],"queryParams":[],"bodyFields":null,"description":"List organizations"},{"method":"POST","path":"/api/v1/organizations","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"slug","required":true,"type":"string"},{"name":"settings","required":false,"type":"object"}],"description":"Create an organization"},{"method":"GET","path":"/api/v1/organizations/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get organization by ID"},{"method":"PATCH","path":"/api/v1/organizations/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Update an organization"},{"method":"GET","path":"/api/v1/stores","pathParams":[],"queryParams":[],"bodyFields":null,"description":"List all stores for the organization"},{"method":"POST","path":"/api/v1/stores","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"slug","required":true,"type":"string","description":"URL-safe identifier, unique per organization"},{"name":"currency","required":false,"type":"string","description":"ISO 4217 currency code"},{"name":"settings","required":false,"type":"object"}],"description":"Create a new store under the organization"},{"method":"GET","path":"/api/v1/stores/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a store by ID"},{"method":"PATCH","path":"/api/v1/stores/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"name","required":false,"type":"string"},{"name":"currency","required":false,"type":"string","description":"ISO 4217 currency code"},{"name":"settings","required":false,"type":"object"},{"name":"isActive","required":false,"type":"boolean","description":"Deactivate a store without deleting it"}],"description":"Update a store (name, currency, settings, active status)"},{"method":"GET","path":"/api/v1/customers","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"applicationId","required":false,"type":"string"},{"name":"email","required":false,"type":"string"},{"name":"identity","required":false,"type":"string","enum":["linked","unlinked"]},{"name":"q","required":false,"type":"string","description":"Search email, name, phone, external ids, or metadata."}],"bodyFields":null,"description":"List customers with cursor pagination"},{"method":"POST","path":"/api/v1/customers","pathParams":[],"queryParams":[],"bodyFields":[{"name":"applicationId","required":false,"type":"string"},{"name":"email","required":true,"type":"string"},{"name":"externalId","required":false,"type":"string"},{"name":"firstName","required":false,"type":"string"},{"name":"lastName","required":false,"type":"string"},{"name":"phone","required":false,"type":"string"},{"name":"acceptsMarketing","required":false,"type":"boolean"},{"name":"netN","required":false,"type":"integer"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Create a new customer"},{"method":"GET","path":"/api/v1/customers/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a customer by ID"},{"method":"PATCH","path":"/api/v1/customers/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"email","required":false,"type":"string"},{"name":"externalId","required":false,"type":"string"},{"name":"firstName","required":false,"type":"string"},{"name":"lastName","required":false,"type":"string"},{"name":"phone","required":false,"type":"string"},{"name":"acceptsMarketing","required":false,"type":"boolean"},{"name":"netN","required":false,"type":"integer"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a customer"},{"method":"DELETE","path":"/api/v1/customers/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Delete a customer"},{"method":"GET","path":"/api/v1/customers/by-external/{externalId}","pathParams":["externalId"],"queryParams":[],"bodyFields":null,"description":"Look up a customer by the merchant's own externalId (set when the customer was created). Useful for merchant backends that key their user table off their own IDs and don't store the throttle customerId."},{"method":"POST","path":"/api/v1/customers/{id}/anonymize","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Anonymize a customer (soft GDPR delete): tombstone the customer + address PII in place while keeping order/payment/subscription history. Irreversible."},{"method":"GET","path":"/api/v1/customers/{id}/addresses","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List addresses for a customer"},{"method":"POST","path":"/api/v1/customers/{id}/addresses","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"label","required":false,"type":"string"},{"name":"firstName","required":false,"type":"string"},{"name":"lastName","required":false,"type":"string"},{"name":"company","required":false,"type":"string"},{"name":"addressLine1","required":true,"type":"string"},{"name":"addressLine2","required":false,"type":"string"},{"name":"city","required":true,"type":"string"},{"name":"stateProvince","required":false,"type":"string"},{"name":"postalCode","required":false,"type":"string"},{"name":"countryCode","required":true,"type":"string","description":"ISO 3166-1 alpha-2"},{"name":"phone","required":false,"type":"string"},{"name":"isDefault","required":false,"type":"boolean"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Add an address to a customer"},{"method":"PATCH","path":"/api/v1/customers/{customerId}/addresses/{id}","pathParams":["customerId","id"],"queryParams":[],"bodyFields":[{"name":"label","required":false,"type":"string"},{"name":"firstName","required":false,"type":"string"},{"name":"lastName","required":false,"type":"string"},{"name":"company","required":false,"type":"string"},{"name":"addressLine1","required":false,"type":"string"},{"name":"addressLine2","required":false,"type":"string"},{"name":"city","required":false,"type":"string"},{"name":"stateProvince","required":false,"type":"string"},{"name":"postalCode","required":false,"type":"string"},{"name":"countryCode","required":false,"type":"string","description":"ISO 3166-1 alpha-2"},{"name":"phone","required":false,"type":"string"},{"name":"isDefault","required":false,"type":"boolean"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a customer address"},{"method":"DELETE","path":"/api/v1/customers/{customerId}/addresses/{id}","pathParams":["customerId","id"],"queryParams":[],"bodyFields":null,"description":"Delete a customer address"},{"method":"GET","path":"/api/v1/customers/{id}/payment-methods","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List payment methods for a customer"},{"method":"POST","path":"/api/v1/customers/{id}/payment-methods","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"processor","required":true,"type":"string"},{"name":"processorToken","required":true,"type":"string"},{"name":"methodType","required":true,"type":"string","enum":["card","bank_account","wallet"]},{"name":"cardBrand","required":false,"type":"string"},{"name":"cardLastFour","required":false,"type":"string"},{"name":"cardExpMonth","required":false,"type":"integer"},{"name":"cardExpYear","required":false,"type":"integer"},{"name":"isDefault","required":false,"type":"boolean"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Add a payment method to a customer"},{"method":"GET","path":"/api/v1/customers/{customerId}/payment-methods/{id}","pathParams":["customerId","id"],"queryParams":[],"bodyFields":null,"description":"Get a customer payment method"},{"method":"PATCH","path":"/api/v1/customers/{customerId}/payment-methods/{id}","pathParams":["customerId","id"],"queryParams":[],"bodyFields":[{"name":"isDefault","required":false,"type":"boolean"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a customer payment method"},{"method":"DELETE","path":"/api/v1/customers/{customerId}/payment-methods/{id}","pathParams":["customerId","id"],"queryParams":[],"bodyFields":null,"description":"Delete a customer payment method"},{"method":"POST","path":"/api/v1/customers/{customerId}/payment-methods/{id}/pause","pathParams":["customerId","id"],"queryParams":[],"bodyFields":null,"description":"Pause a customer payment method"},{"method":"POST","path":"/api/v1/customers/{customerId}/payment-methods/{id}/resume","pathParams":["customerId","id"],"queryParams":[],"bodyFields":null,"description":"Resume a customer payment method"},{"method":"POST","path":"/api/v1/payment-methods/client-token","pathParams":[],"queryParams":[],"bodyFields":[{"name":"customerId","required":true,"type":"string"}],"summary":"Mint a customer-scoped client token for browser payment-method management"},{"method":"GET","path":"/api/v1/me/payment-methods","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List the authenticated customer's saved payment methods"},{"method":"PATCH","path":"/api/v1/me/payment-methods/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"isDefault","required":true,"type":"boolean","enum":["true"]}],"summary":"Set a saved payment method as default"},{"method":"DELETE","path":"/api/v1/me/payment-methods/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Remove a saved payment method"},{"method":"POST","path":"/api/v1/me/payment-methods/embed-token","pathParams":[],"queryParams":[],"bodyFields":[{"name":"currency","required":false,"type":"string"}],"summary":"Mint a Gr4vy add-only vault embed token scoped to the authenticated customer"},{"method":"POST","path":"/api/v1/me/payment-methods/confirm","pathParams":[],"queryParams":[],"bodyFields":[{"name":"transactionId","required":true,"type":"string"}],"summary":"Record a card vaulted via the add-card embed"},{"method":"POST","path":"/api/v1/carts","pathParams":[],"queryParams":[],"bodyFields":[{"name":"applicationId","required":false,"type":"string"},{"name":"customerId","required":false,"type":"string"},{"name":"customerEmail","required":false,"type":"string"},{"name":"currency","required":false,"type":"string"},{"name":"netN","required":false,"type":"integer"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Create a new cart"},{"method":"GET","path":"/api/v1/carts/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a cart by ID (includes line items)"},{"method":"PATCH","path":"/api/v1/carts/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"customerId","required":false,"type":"string"},{"name":"customerEmail","required":false,"type":"string"},{"name":"billingAddress","required":false,"type":"object"},{"name":"shippingAddress","required":false,"type":"object"},{"name":"notes","required":false,"type":"string"},{"name":"netN","required":false,"type":"integer"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a cart"},{"method":"POST","path":"/api/v1/carts/{id}/items","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"type","required":false,"type":"string","enum":["product","subscription","service","ticket","donation","custom"]},{"name":"referenceId","required":false,"type":"string"},{"name":"name","required":true,"type":"string"},{"name":"description","required":false,"type":"string"},{"name":"unitPrice","required":true,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"quantity","required":false,"type":"integer"},{"name":"taxAmount","required":false,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"discountAmount","required":false,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"imageUrl","required":false,"type":"string","description":"Product image. Accepts an absolute http(s) URL or a relative path (e.g. \"/images/x.png\"); relative paths are resolved against the application storefront base URL (PUT /v1/embed-config { storefrontBaseUrl }, falling back to the first allowedOrigin)."},{"name":"requiresShipping","required":false,"type":"boolean","description":"Whether this item is physically shippable. For external/ad-hoc catalogs with no Throttle product behind the item. Omit to infer from `type` (everything except `service` ships); set explicitly to force-include or force-exclude the item from `calculated` shipping."},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Add a line item to a cart"},{"method":"PATCH","path":"/api/v1/carts/{cartId}/items/{id}","pathParams":["cartId","id"],"queryParams":[],"bodyFields":[{"name":"quantity","required":false,"type":"integer"},{"name":"unitPrice","required":false,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"taxAmount","required":false,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"discountAmount","required":false,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a line item"},{"method":"DELETE","path":"/api/v1/carts/{cartId}/items/{id}","pathParams":["cartId","id"],"queryParams":[],"bodyFields":null,"description":"Remove a line item from a cart"},{"method":"POST","path":"/api/v1/carts/{id}/checkout","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Convert the cart to a draft order. Legacy alias for /finalize — same handler, identical semantics. New integrations should call /finalize instead."},{"method":"POST","path":"/api/v1/carts/{id}/finalize","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Finalize a cart by converting it to a draft order (status=draft). To collect payment, mint a checkout session against the resulting order afterwards."},{"method":"POST","path":"/api/v1/carts/{id}/merge","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/carts/{id}/apply-discount","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"code","required":true,"type":"string"}],"description":"Apply a discount code to a cart"},{"method":"DELETE","path":"/api/v1/carts/{id}/discount","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Remove discount code from a cart"},{"method":"POST","path":"/api/v1/carts/{id}/shipping","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"methodId","required":true,"type":"string"},{"name":"displayName","required":true,"type":"string"},{"name":"rateAmount","required":true,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"currency","required":false,"type":"string"},{"name":"carrier","required":false,"type":"string"},{"name":"serviceCode","required":false,"type":"string"},{"name":"estimatedDeliveryDays","required":false,"type":"integer"}],"description":"Select a shipping method for a cart"},{"method":"DELETE","path":"/api/v1/carts/{id}/shipping","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Clear the selected shipping method from a cart"},{"method":"PUT","path":"/api/v1/carts/{id}/tax-lines","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"lines","required":true,"type":"object[]"}],"description":"Replace all tax lines on a cart"},{"method":"DELETE","path":"/api/v1/carts/{id}/tax-lines","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Clear all tax lines from a cart"},{"method":"GET","path":"/api/v1/carts/{id}/events","pathParams":["id"],"queryParams":[{"name":"sinceSequence","required":false,"type":"integer"},{"name":"limit","required":false,"type":"integer"}],"bodyFields":null,"description":"List audit events for a cart"},{"method":"GET","path":"/api/v1/abandoned-carts","pathParams":[],"queryParams":[{"name":"limit","required":false,"type":"integer"},{"name":"cursor","required":false,"type":"string"}],"bodyFields":null,"summary":"List abandoned carts (most-recently abandoned first)."},{"method":"GET","path":"/api/v1/abandoned-carts/summary","pathParams":[],"queryParams":[{"name":"sinceDays","required":false,"type":"integer"}],"bodyFields":null,"summary":"Abandoned-cart summary metrics over a trailing window."},{"method":"POST","path":"/api/v1/cart-sessions","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/cart-sessions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/cart-sessions/{id}/items","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"PATCH","path":"/api/v1/cart-sessions/{id}/items/{itemId}","pathParams":["id","itemId"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/cart-sessions/{id}/items/{itemId}","pathParams":["id","itemId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/cart-sessions/{id}/shipping","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/cart-sessions/{id}/shipping","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/cart-sessions/{id}/discount","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/cart-sessions/{id}/discount","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/cart-sessions/{id}/checkout-session","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/config","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/quote-tokens","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/quote-tokens","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/shipping-tax/quote-tokens/{tokenId}","pathParams":["tokenId"],"queryParams":[],"bodyFields":null},{"method":"PUT","path":"/api/v1/shipping-tax/config/draft","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/config/publish","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/quotes","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/carts/{cartId}/calculate","pathParams":["cartId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/external-snapshots","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/shipping-providers/available","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/tax-providers/available","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/shipping-providers","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/shipping-providers","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/shipping-tax/tax-providers","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/tax-providers","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/shipping-providers/{id}/verify","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/tax-providers/{id}/verify","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/shipping-providers/{id}/primary","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/shipping-tax/tax-providers/{id}/primary","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/shipping-tax/shipping-providers/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/shipping-tax/tax-providers/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/orders","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"status","required":false,"type":"string","enum":["draft","pending","processing","partially_fulfilled","completed","cancelled","closed"]},{"name":"paymentStatus","required":false,"type":"string","enum":["pending","authorized","captured","partially_refunded","refunded","failed","voided"]},{"name":"type","required":false,"type":"string","enum":["one_time","recurring","mixed"]},{"name":"source","required":false,"type":"string","enum":["web","mobile","pos","api","subscription_engine"]},{"name":"q","required":false,"type":"string","description":"Search order id, number, source, status, or metadata."},{"name":"customerId","required":false,"type":"string"}],"bodyFields":null,"description":"List orders with cursor pagination"},{"method":"POST","path":"/api/v1/orders","pathParams":[],"queryParams":[],"bodyFields":[{"name":"customerId","required":false,"type":"string"},{"name":"currency","required":false,"type":"string"},{"name":"source","required":false,"type":"string","enum":["web","mobile","pos","api"]},{"name":"billingAddress","required":false,"type":"object"},{"name":"shippingAddress","required":false,"type":"object"},{"name":"notes","required":false,"type":"string"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"},{"name":"lineItems","required":false,"type":"object[]"}],"description":"Create a new order (draft)"},{"method":"GET","path":"/api/v1/orders/export.csv","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Export orders (respecting list filters) as a CSV attachment. Capped at 10,000 rows."},{"method":"GET","path":"/api/v1/orders/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get an order by ID (includes line items)"},{"method":"PATCH","path":"/api/v1/orders/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"billingAddress","required":false,"type":"object"},{"name":"shippingAddress","required":false,"type":"object"},{"name":"notes","required":false,"type":"string"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update order fields (addresses, notes, metadata)"},{"method":"POST","path":"/api/v1/orders/{id}/checkout","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Initiate checkout (draft -> pending)"},{"method":"POST","path":"/api/v1/orders/{id}/authorize","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"paymentId","required":true,"type":"string"}],"description":"Mark payment as authorized (pending -> processing)"},{"method":"POST","path":"/api/v1/orders/{id}/capture","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"paymentId","required":true,"type":"string"}],"description":"Mark payment as captured (pending -> processing)"},{"method":"POST","path":"/api/v1/orders/{id}/cancel","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"reason","required":false,"type":"string"},{"name":"refundCapturedPayments","required":false,"type":"boolean"}],"description":"Cancel an order. Authorized payments are always voided; captured payments are refunded when refundCapturedPayments is true."},{"method":"POST","path":"/api/v1/orders/{id}/complete","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Complete an order (processing -> completed)"},{"method":"POST","path":"/api/v1/orders/{id}/close","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Close a completed order"},{"method":"GET","path":"/api/v1/orders/{id}/payments","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List payments for an order"},{"method":"POST","path":"/api/v1/orders/{id}/payments","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"processor","required":false,"type":"string"},{"name":"amount","required":true,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"currency","required":false,"type":"string"},{"name":"method","required":false,"type":"string","enum":["card","bank_transfer","wallet","cash","external","manual","net30"]},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Create a payment for an order"},{"method":"GET","path":"/api/v1/orders/{id}/payments/{paymentId}","pathParams":["id","paymentId"],"queryParams":[],"bodyFields":null,"description":"Get a specific payment for an order"},{"method":"GET","path":"/api/v1/payments/{id}/transactions","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List transactions for a payment"},{"method":"GET","path":"/api/v1/payments","pathParams":[],"queryParams":[{"name":"method","required":false,"type":"string"},{"name":"status","required":false},{"name":"limit","required":false,"type":"string"},{"name":"cursor","required":false,"type":"string"},{"name":"aging","required":false,"type":"string","enum":["0_30","31_60","61_90","90_plus"]},{"name":"order_id","required":false,"type":"string"},{"name":"due_from","required":false,"type":"string"},{"name":"due_to","required":false,"type":"string"},{"name":"amount_min","required":false,"type":"string"},{"name":"amount_max","required":false,"type":"string"}],"bodyFields":null,"summary":"List payments for the calling merchant."},{"method":"GET","path":"/api/v1/payments/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Get a payment by id."},{"method":"POST","path":"/api/v1/orders/{id}/refund","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"amount","required":false,"type":"integer","description":"Partial refund amount (defaults to full amount)"},{"name":"reason","required":false,"type":"string"}],"description":"Refund the captured payment on an order"},{"method":"POST","path":"/api/v1/payments/{id}/authorize","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Authorize a payment (pending -> authorized)"},{"method":"POST","path":"/api/v1/payments/{id}/capture","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"amount","required":false,"type":"integer","description":"Partial capture amount (defaults to full amount)"}],"description":"Capture a payment (authorized -> captured)"},{"method":"POST","path":"/api/v1/payments/{id}/void","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Void an authorized payment"},{"method":"POST","path":"/api/v1/payments/{id}/refund","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"amount","required":false,"type":"integer","description":"Partial refund amount (defaults to full amount)"},{"name":"reason","required":false,"type":"string"}],"description":"Refund a captured payment (full or partial)"},{"method":"POST","path":"/api/v1/payments/{id}/invoice/resend","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Resend the Net-N invoice email to the customer."},{"method":"GET","path":"/api/v1/payments/{id}/invoice-pdf","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Get a signed download URL for a Net30 invoice PDF."},{"method":"GET","path":"/api/v1/invoices","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Pagination cursor"},{"name":"limit","required":false,"type":"integer"},{"name":"sort","required":false,"type":"string","enum":["asc","desc"]},{"name":"status","required":false,"type":"string","enum":["paid","open","refunded","partially_refunded","void"]},{"name":"type","required":false,"type":"string","enum":["order","net30","subscription"]},{"name":"sourceId","required":false,"type":"string","description":"Filter to invoices for a specific source: the payment id for order/net30 invoices, or the subscription invoice id for subscription invoices."}],"bodyFields":null,"summary":"List invoices","description":"List all invoices for the application across all customers and payment source types. Requires invoices:read scope."},{"method":"GET","path":"/api/v1/customers/{customerId}/invoices","pathParams":["customerId"],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Pagination cursor"},{"name":"limit","required":false,"type":"integer"},{"name":"sort","required":false,"type":"string","enum":["asc","desc"]},{"name":"status","required":false,"type":"string","enum":["paid","open","refunded","partially_refunded","void"]},{"name":"type","required":false,"type":"string","enum":["order","net30","subscription"]},{"name":"sourceId","required":false,"type":"string","description":"Filter to invoices for a specific source: the payment id for order/net30 invoices, or the subscription invoice id for subscription invoices."}],"bodyFields":null,"summary":"List invoices for a customer","description":"List all invoices scoped to a specific customer. Requires invoices:read scope."},{"method":"GET","path":"/api/v1/invoices/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Get invoice","description":"Fetch a single invoice by ID. Requires invoices:read scope."},{"method":"GET","path":"/api/v1/invoices/{id}/download","pathParams":["id"],"queryParams":[{"name":"format","required":false,"type":"string","enum":["json"]}],"bodyFields":null,"summary":"Download invoice PDF","description":"Returns a 302 redirect to a short-lived signed S3 URL for the invoice PDF. Pass ?format=json to receive the URL as JSON instead. Requires invoices:read scope."},{"method":"GET","path":"/api/v1/orders/{orderId}/fulfillments","pathParams":["orderId"],"queryParams":[],"bodyFields":null,"description":"List fulfillments for an order"},{"method":"POST","path":"/api/v1/orders/{orderId}/fulfillments","pathParams":["orderId"],"queryParams":[],"bodyFields":[{"name":"type","required":true,"type":"string","enum":["shipment","digital","access_grant","service","in_person","custom"]},{"name":"lineItemIds","required":true,"type":"object[]"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Create a fulfillment for an order"},{"method":"GET","path":"/api/v1/orders/{orderId}/fulfillments/{id}","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Get a fulfillment by ID (includes type-specific details)"},{"method":"POST","path":"/api/v1/orders/{orderId}/fulfillments/{id}/processing","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Mark fulfillment as processing"},{"method":"POST","path":"/api/v1/orders/{orderId}/fulfillments/{id}/complete","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Mark fulfillment as completed"},{"method":"POST","path":"/api/v1/orders/{orderId}/fulfillments/{id}/cancel","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Cancel a fulfillment"},{"method":"PATCH","path":"/api/v1/orders/{orderId}/fulfillments/{id}/shipment","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Update shipment details for a fulfillment"},{"method":"PATCH","path":"/api/v1/orders/{orderId}/fulfillments/{id}/digital","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Update digital delivery details"},{"method":"PATCH","path":"/api/v1/orders/{orderId}/fulfillments/{id}/access","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Update access grant details"},{"method":"PATCH","path":"/api/v1/orders/{orderId}/fulfillments/{id}/service","pathParams":["orderId","id"],"queryParams":[],"bodyFields":null,"description":"Update service delivery details"},{"method":"GET","path":"/api/v1/subscriptions","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"customerId","required":false,"type":"string"},{"name":"externalCustomerId","required":false,"type":"string","description":"Filter by the merchant's own customer ID (the value passed as externalId on customer creation). Server resolves to the throttle customerId before filtering. Mutually exclusive with customerId."},{"name":"status","required":false,"type":"string","enum":["active","paused","cancelled","past_due","trialing"]},{"name":"interval","required":false,"type":"string","enum":["weekly","monthly","quarterly","yearly"]},{"name":"q","required":false,"type":"string","description":"Search subscription id, customer id, plan reference, plan name, status, interval, and metadata."}],"bodyFields":null,"description":"List subscriptions with cursor pagination"},{"method":"POST","path":"/api/v1/subscriptions","pathParams":[],"queryParams":[],"bodyFields":[{"name":"applicationId","required":false,"type":"string","description":"Optional application ID override (resolved from auth context when absent)"},{"name":"customerId","required":true,"type":"string","description":"ID of the customer to subscribe"},{"name":"planReference","required":true,"type":"string","description":"Your plan identifier (e.g. \"pro_monthly\")"},{"name":"planName","required":false,"type":"string","description":"Human-readable plan name shown on invoices"},{"name":"interval","required":true,"type":"string","description":"Billing interval","enum":["weekly","monthly","quarterly","yearly"]},{"name":"amount","required":true,"type":"integer","description":"Subscription amount in the smallest currency unit (e.g. cents)"},{"name":"currency","required":false,"type":"string","description":"ISO 4217 currency code (defaults to USD)"},{"name":"currentPeriodStart","required":true,"description":"ISO 8601 start of the current billing period"},{"name":"currentPeriodEnd","required":true,"description":"ISO 8601 end of the current billing period"},{"name":"trialEnd","required":false,"description":"ISO 8601 date-time when the trial ends (omit if no trial)"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata stored with the subscription"}],"description":"Create a new subscription"},{"method":"GET","path":"/api/v1/subscriptions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a subscription by ID"},{"method":"PATCH","path":"/api/v1/subscriptions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"planReference","required":false,"type":"string"},{"name":"planName","required":false,"type":"string"},{"name":"interval","required":false,"type":"string","enum":["weekly","monthly","quarterly","yearly"]},{"name":"amount","required":false,"type":"integer","description":"Amount in cents"},{"name":"metadata","required":false,"type":"object"}],"description":"Update a subscription (plan change, amount, interval)"},{"method":"GET","path":"/api/v1/subscriptions/{id}/invoices","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/subscriptions/{id}/pause","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Pause an active subscription"},{"method":"POST","path":"/api/v1/subscriptions/{id}/resume","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Resume a paused subscription"},{"method":"POST","path":"/api/v1/subscriptions/{id}/change-plan","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"planReference","required":true,"type":"string","description":"Your plan identifier for the new plan"},{"name":"planName","required":false,"type":"string","description":"Human-readable name for the new plan"},{"name":"interval","required":true,"type":"string","description":"Billing interval for the new plan","enum":["weekly","monthly","quarterly","yearly"]},{"name":"amount","required":true,"type":"integer","description":"Amount in the smallest currency unit (e.g. cents)"},{"name":"effective","required":true,"type":"string","description":"When the plan change takes effect","enum":["now","period_end"]}],"description":"Schedule or apply a plan change on a subscription"},{"method":"POST","path":"/api/v1/subscriptions/{id}/change-quantity","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"quantity","required":true,"type":"integer","description":"New seat count"},{"name":"effective","required":true,"type":"string","description":"When the seat change takes effect","enum":["now","period_end"]}],"description":"Change the seat quantity on a subscription (immediate prorated, or deferred to period end)"},{"method":"DELETE","path":"/api/v1/subscriptions/{id}/pending-change","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Cancel a pending scheduled plan change on a subscription"},{"method":"POST","path":"/api/v1/subscriptions/{id}/cancel","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"atPeriodEnd","required":false,"type":"boolean","description":"If true, cancels at the end of the current billing period"}],"description":"Cancel a subscription (immediately or at period end)"},{"method":"GET","path":"/api/v1/subscriptions/{id}/usage","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List usage items for the subscription's current billing period."},{"method":"POST","path":"/api/v1/subscriptions/{id}/usage","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"kind","required":true,"type":"string"},{"name":"unitCount","required":true,"type":"integer"},{"name":"unitPriceCents","required":true,"type":"integer"}],"description":"Record (upsert) a usage item for the subscription's current billing period."},{"method":"POST","path":"/api/v1/subscriptions/eligibility-check","pathParams":[],"queryParams":[],"bodyFields":[{"name":"paymentMethodId","required":true,"type":"string","description":"customerPaymentMethods row id. Must belong to the authenticated merchant. The server resolves the card fingerprint internally."}],"description":"Pre-flight check whether a payment method is eligible for a free trial on this merchant. Card fingerprint match against any prior subscription with a trialEnd blocks the trial."},{"method":"GET","path":"/api/v1/discounts","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"isActive","required":false,"type":"boolean"},{"name":"code","required":false,"type":"string"},{"name":"type","required":false,"type":"string","enum":["percentage","fixed_amount"]},{"name":"q","required":false,"type":"string","description":"Search discount code, name, type, or metadata."},{"name":"sort","required":false,"type":"string","description":"Sort by creation time.","enum":["asc","desc"]}],"bodyFields":null,"description":"List discounts with cursor pagination"},{"method":"POST","path":"/api/v1/discounts","pathParams":[],"queryParams":[],"bodyFields":[{"name":"code","required":false,"type":"string","description":"Leave empty for automatic discounts"},{"name":"name","required":true,"type":"string"},{"name":"type","required":true,"type":"string","enum":["percentage","fixed_amount"]},{"name":"value","required":true,"type":"integer","description":"Percentage as a whole number (25 = 25%) or fixed amount in minor units"},{"name":"conditions","required":false,"type":"object","description":"e.g. { minOrder: 5000 }"},{"name":"usageLimit","required":false,"type":"integer"},{"name":"maxRedemptionsPerCustomer","required":false,"type":"integer|null","description":"Per-customer redemption limit. Use null for unlimited."},{"name":"startsAt","required":false,"type":"string"},{"name":"endsAt","required":false,"type":"string"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Create a new discount"},{"method":"GET","path":"/api/v1/discounts/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a discount by ID"},{"method":"PATCH","path":"/api/v1/discounts/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"code","required":false,"type":"string|null","description":"Leave null for automatic discounts"},{"name":"name","required":false,"type":"string"},{"name":"type","required":false,"type":"string","enum":["percentage","fixed_amount"]},{"name":"value","required":false,"type":"integer"},{"name":"conditions","required":false,"type":"object"},{"name":"usageLimit","required":false,"type":"integer|null"},{"name":"maxRedemptionsPerCustomer","required":false,"type":"integer|null","description":"Per-customer redemption limit. Use null for unlimited."},{"name":"isActive","required":false,"type":"boolean"},{"name":"startsAt","required":false,"type":"string|null"},{"name":"endsAt","required":false,"type":"string|null"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a discount"},{"method":"DELETE","path":"/api/v1/discounts/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Delete a discount"},{"method":"POST","path":"/api/v1/discounts/validate","pathParams":[],"queryParams":[],"bodyFields":[{"name":"code","required":true,"type":"string"},{"name":"orderTotal","required":true,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"customerId","required":false,"type":"string"}],"description":"Validate a discount code against an order total"},{"method":"POST","path":"/api/v1/discounts/preview","pathParams":[],"queryParams":[],"bodyFields":[{"name":"code","required":true,"type":"string"},{"name":"currency","required":true,"type":"string"},{"name":"subtotal","required":true,"type":"integer","description":"Amount in cents (e.g. 1999 = $19.99)"},{"name":"customerId","required":false,"type":"string"},{"name":"lineItems","required":false,"type":"object[]"}],"description":"Preview a discount code against a subtotal without mutating a cart"},{"method":"GET","path":"/api/v1/quotes","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"status","required":false,"type":"string","description":"Comma-separated status filter, e.g. proposed,accepted"},{"name":"q","required":false,"type":"string","description":"Search quote number, customer email, or buyer reference"},{"name":"assignedMemberId","required":false,"type":"string"},{"name":"customerId","required":false,"type":"string"}],"bodyFields":null,"description":"List quotes with cursor pagination"},{"method":"POST","path":"/api/v1/quotes","pathParams":[],"queryParams":[],"bodyFields":[{"name":"status","required":false,"type":"string","enum":["draft","requested"]},{"name":"customerId","required":false,"type":"string|null"},{"name":"customerEmail","required":false,"type":"string|null"},{"name":"buyerReference","required":false,"type":"string|null"},{"name":"source","required":false,"type":"string","enum":["dashboard","api"]},{"name":"assignedMemberId","required":false,"type":"string|null"},{"name":"currency","required":false,"type":"string"},{"name":"internalNotes","required":false,"type":"string|null"},{"name":"items","required":false,"type":"object[]"},{"name":"paymentTerms","required":false,"type":"object","description":"pay_in_full | net_terms (netN 1-365) | deposit_balance (deposit percent/fixed + balanceNetN)"},{"name":"expiresAt","required":false,"type":"string|null"},{"name":"buyerNote","required":false,"type":"string|null"},{"name":"leadTime","required":false,"type":"string|null"},{"name":"shippingMode","required":false,"type":"string","enum":["none","flat","checkout_calculated","free"]},{"name":"shippingFlatAmount","required":false,"type":"integer|null"},{"name":"metadata","required":false,"type":"object"}],"description":"Create a quote (draft, or requested for RFQ intake)"},{"method":"GET","path":"/api/v1/quotes/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a quote with revisions, comments, and timeline (merchant view)"},{"method":"PATCH","path":"/api/v1/quotes/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"assignedMemberId","required":false,"type":"string|null"},{"name":"customerId","required":false,"type":"string|null"},{"name":"customerEmail","required":false,"type":"string|null"},{"name":"buyerReference","required":false,"type":"string|null"},{"name":"internalNotes","required":false,"type":"string|null"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"},{"name":"status","required":false,"type":"string","enum":["archived"]}],"description":"Update quote assignment, linkage, internal notes, or archive it"},{"method":"POST","path":"/api/v1/quotes/{id}/revisions","pathParams":["id"],"queryParams":[],"bodyFields":[],"description":"Start a new working revision cloned from the latest issued revision"},{"method":"PATCH","path":"/api/v1/quotes/{id}/revisions/{revId}","pathParams":["id","revId"],"queryParams":[],"bodyFields":[{"name":"items","required":false,"type":"object[]"},{"name":"paymentTerms","required":false,"type":"object","description":"pay_in_full | net_terms (netN 1-365) | deposit_balance (deposit percent/fixed + balanceNetN)"},{"name":"expiresAt","required":false,"type":"string|null"},{"name":"buyerNote","required":false,"type":"string|null"},{"name":"leadTime","required":false,"type":"string|null"},{"name":"shippingMode","required":false,"type":"string","enum":["none","flat","checkout_calculated","free"]},{"name":"shippingFlatAmount","required":false,"type":"integer|null"},{"name":"metadata","required":false,"type":"object"},{"name":"changeSummary","required":false,"type":"string|null"}],"description":"Edit the working revision (items, terms, expiry, notes)"},{"method":"POST","path":"/api/v1/quotes/{id}/issue","pathParams":["id"],"queryParams":[],"bodyFields":[],"description":"Freeze the working revision, supersede the prior one, and propose the quote"},{"method":"POST","path":"/api/v1/quotes/{id}/rotate-link","pathParams":["id"],"queryParams":[],"bodyFields":[],"description":"Rotate the buyer link token (invalidates the old link)"},{"method":"POST","path":"/api/v1/quotes/{id}/comments","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"body","required":true,"type":"string"},{"name":"visibility","required":false,"type":"string","enum":["shared","internal"]},{"name":"revisionId","required":false,"type":"string|null"}],"description":"Add a merchant comment (shared with the buyer, or internal)"},{"method":"POST","path":"/api/v1/carts/{id}/request-quote","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"buyerReference","required":false,"type":"string|null"},{"name":"note","required":false,"type":"string|null"}],"description":"Snapshot a cart's lines into a requested quote (the cart is unchanged)"},{"method":"POST","path":"/api/v1/quotes/{id}/accept","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"revisionId","required":true,"type":"string"},{"name":"acceptedByName","required":true,"type":"string"},{"name":"acceptedByEmail","required":true,"type":"string"},{"name":"buyerReference","required":false,"type":"string|null"},{"name":"itemSelections","required":false,"type":"object[]"},{"name":"reason","required":false,"type":"string|null"}],"description":"Record a rep-given acceptance (phone/email deal) and start checkout (spec §8, §9)"},{"method":"GET","path":"/api/v1/quote-links/{token}","pathParams":["token"],"queryParams":[],"bodyFields":null,"description":"Get a quote by its buyer link token (public, buyer-shaped)"},{"method":"POST","path":"/api/v1/quote-links/{token}/view","pathParams":["token"],"queryParams":[],"bodyFields":[],"description":"Record a buyer view of the quote link (throttled quote.viewed webhook)"},{"method":"POST","path":"/api/v1/quote-links/{token}/comments","pathParams":["token"],"queryParams":[],"bodyFields":[{"name":"authorName","required":false,"type":"string|null"},{"name":"authorEmail","required":false,"type":"string|null"},{"name":"body","required":true,"type":"string"}],"description":"Add a buyer comment (always shared)"},{"method":"POST","path":"/api/v1/quote-links/{token}/request-revision","pathParams":["token"],"queryParams":[],"bodyFields":[{"name":"authorName","required":false,"type":"string|null"},{"name":"authorEmail","required":false,"type":"string|null"},{"name":"message","required":false,"type":"string|null"}],"description":"Ask for changes instead of accepting the current proposal"},{"method":"POST","path":"/api/v1/quote-links/{token}/decline","pathParams":["token"],"queryParams":[],"bodyFields":[{"name":"authorName","required":false,"type":"string|null"},{"name":"authorEmail","required":false,"type":"string|null"},{"name":"reason","required":false,"type":"string|null"}],"description":"Decline the quote"},{"method":"POST","path":"/api/v1/quote-links/{token}/accept","pathParams":["token"],"queryParams":[],"bodyFields":[{"name":"revisionId","required":true,"type":"string"},{"name":"acceptedByName","required":true,"type":"string"},{"name":"acceptedByEmail","required":true,"type":"string"},{"name":"buyerReference","required":false,"type":"string|null"},{"name":"itemSelections","required":false,"type":"object[]"}],"description":"Accept the quote and start checkout (spec §8)"},{"method":"GET","path":"/api/v1/quote-links/{token}/pdf","pathParams":["token"],"queryParams":[],"bodyFields":null,"description":"Download the quote PDF (302 redirect to a short-lived signed URL; lazy-rendered from the frozen issued revision)"},{"method":"GET","path":"/api/v1/quote-request-forms","pathParams":[],"queryParams":[],"bodyFields":null,"description":"List RFQ intake forms for the application + environment"},{"method":"POST","path":"/api/v1/quote-request-forms","pathParams":[],"queryParams":[],"bodyFields":[{"name":"slug","required":true,"type":"string"},{"name":"title","required":false,"type":"string|null"},{"name":"introText","required":false,"type":"string|null"},{"name":"successMessage","required":false,"type":"string|null"},{"name":"redirectUrl","required":false,"type":"string|null","description":"Must be http(s)"},{"name":"fields","required":false,"type":"object"}],"description":"Create a hosted RFQ intake form (token revealed once)"},{"method":"PATCH","path":"/api/v1/quote-request-forms/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"isActive","required":false,"type":"boolean"},{"name":"title","required":false,"type":"string|null"},{"name":"introText","required":false,"type":"string|null"},{"name":"successMessage","required":false,"type":"string|null"},{"name":"redirectUrl","required":false,"type":"string|null","description":"Must be http(s)"},{"name":"fields","required":false,"type":"object"}],"description":"Update an RFQ intake form (activate/deactivate, texts, fields)"},{"method":"POST","path":"/api/v1/quote-request-forms/{id}/rotate-token","pathParams":["id"],"queryParams":[],"bodyFields":[],"description":"Rotate the form token (old URL 404s immediately; new token revealed once)"},{"method":"GET","path":"/api/v1/quote-request-forms/{token}/public","pathParams":["token"],"queryParams":[],"bodyFields":null,"description":"Public form config for the hosted RFQ page (token-authenticated)"},{"method":"POST","path":"/api/v1/quote-requests","pathParams":[],"queryParams":[],"bodyFields":[{"name":"formToken","required":true,"type":"string"},{"name":"email","required":true,"type":"string"},{"name":"name","required":false,"type":"string|null"},{"name":"companyName","required":false,"type":"string|null"},{"name":"phone","required":false,"type":"string|null"},{"name":"buyerReference","required":false,"type":"string|null"},{"name":"message","required":true,"type":"string"},{"name":"website","required":false,"type":"string|null","description":"Honeypot — must be empty"},{"name":"formLoadedAt","required":false,"type":"number","description":"Client mount time (ms epoch); min fill time enforced"},{"name":"turnstileToken","required":false,"type":"string"}],"description":"Public RFQ submission (honeypot + min-fill-time + rate limit + optional Turnstile)"},{"method":"GET","path":"/api/v1/webhooks","pathParams":[],"queryParams":[],"bodyFields":null,"description":"List all webhooks for the organization. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"POST","path":"/api/v1/webhooks","pathParams":[],"queryParams":[],"bodyFields":[{"name":"url","required":true,"type":"string"},{"name":"events","required":true,"type":"string[]","description":"Event types (e.g. [\"order.created\", \"payment.captured\"])"},{"name":"secret","required":false,"type":"string","description":"HMAC secret (auto-generated if omitted)"},{"name":"description","required":false,"type":"string"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Register a new webhook. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"GET","path":"/api/v1/webhooks/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a webhook by ID. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"PATCH","path":"/api/v1/webhooks/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"url","required":false,"type":"string"},{"name":"events","required":false,"type":"string[]"},{"name":"isActive","required":false,"type":"boolean"},{"name":"description","required":false,"type":"string"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update a webhook. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"DELETE","path":"/api/v1/webhooks/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Delete a webhook. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"GET","path":"/api/v1/webhooks/{id}/deliveries","pathParams":["id"],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"status","required":false,"type":"string","enum":["pending","success","failed","dead_letter"]}],"bodyFields":null,"description":"List delivery attempts for a webhook. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"POST","path":"/api/v1/webhooks/{webhookId}/deliveries/{id}/retry","pathParams":["webhookId","id"],"queryParams":[],"bodyFields":null,"description":"Retry a failed webhook delivery. DEPRECATED — use POST /api/v1/webhook-endpoints (signed, Stripe-style) instead. This legacy endpoint no longer delivers events."},{"method":"GET","path":"/api/v1/extensions","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"q","required":false,"type":"string"},{"name":"installable","required":false,"type":"string","enum":["true","false"]},{"name":"lifecycle","required":false,"type":"string","enum":["draft","private","public"]}],"bodyFields":null,"description":"List available extensions"},{"method":"POST","path":"/api/v1/extensions","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"slug","required":true,"type":"string"},{"name":"description","required":false,"type":"string"},{"name":"version","required":false,"type":"string"},{"name":"author","required":false,"type":"string"},{"name":"iconUrl","required":false,"type":"string"},{"name":"homepageUrl","required":false,"type":"string"},{"name":"scopes","required":true,"type":"string[]","description":"Permission scopes the extension requires"},{"name":"eventSubscriptions","required":false,"type":"string[]","description":"Webhook event types the extension subscribes to"},{"name":"iframeUrl","required":false,"type":"string","description":"HTTPS URL to embed as an iframe panel in the dashboard"},{"name":"webhookUrl","required":false,"type":"string","description":"HTTPS endpoint that receives subscribed events"},{"name":"configSchema","required":false,"type":"object","description":"JSON Schema defining accepted configuration"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Register a new extension"},{"method":"GET","path":"/api/v1/extensions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get extension by ID"},{"method":"PATCH","path":"/api/v1/extensions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"name","required":false,"type":"string"},{"name":"description","required":false,"type":"string"},{"name":"version","required":false,"type":"string"},{"name":"author","required":false,"type":"string"},{"name":"iconUrl","required":false,"type":"string"},{"name":"homepageUrl","required":false,"type":"string"},{"name":"scopes","required":false,"type":"string[]"},{"name":"eventSubscriptions","required":false,"type":"string[]"},{"name":"iframeUrl","required":false,"type":"string"},{"name":"webhookUrl","required":false,"type":"string"},{"name":"configSchema","required":false,"type":"object"},{"name":"metadata","required":false,"type":"object","description":"Arbitrary key-value metadata"}],"description":"Update extension metadata"},{"method":"DELETE","path":"/api/v1/extensions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Delete an extension"},{"method":"GET","path":"/api/v1/extensions/{id}/versions","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"List versions for an extension, ordered newest first"},{"method":"POST","path":"/api/v1/extensions/{id}/versions","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"version","required":true,"type":"string","description":"Semantic version string, e.g. \"1.2.0\""},{"name":"changelog","required":false,"type":"string","description":"Human-readable changelog for this version"}],"description":"Create a new draft version of an extension by snapshotting the current working-copy manifest"},{"method":"POST","path":"/api/v1/extensions/{id}/versions/{vid}/publish","pathParams":["id","vid"],"queryParams":[],"bodyFields":null,"description":"Publish a draft version of an extension"},{"method":"POST","path":"/api/v1/extensions/{id}/lifecycle","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"lifecycle","required":true,"type":"string","enum":["draft","private","public"]}],"description":"Update the lifecycle state of an extension (draft → private → public)"},{"method":"POST","path":"/api/v1/extensions/{id}/install","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"versionId","required":false,"type":"string","description":"Specific version to pin. Omit to use the latest published version."},{"name":"config","required":false,"type":"object","description":"Configuration values for this installation"}],"description":"Install an extension for the organization. Returns a one-time API key."},{"method":"POST","path":"/api/v1/extensions/{id}/uninstall","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Uninstall an extension (deactivates API key and webhooks)"},{"method":"POST","path":"/api/v1/extensions/{id}/suspend","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Suspend an installed extension (deactivates API key and webhooks, can be reinstalled)"},{"method":"PATCH","path":"/api/v1/installations/{id}/config","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"config","required":true,"type":"object"}],"description":"Update configuration for an installed extension"},{"method":"GET","path":"/api/v1/installations","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"status","required":false,"type":"string","enum":["active","suspended","uninstalled"]}],"bodyFields":null,"description":"List installed extensions for the organization"},{"method":"POST","path":"/api/v1/installations/{id}/upgrade","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"targetVersionId","required":true,"type":"string","description":"ID of the target extension version to upgrade to"},{"name":"acknowledgedNewScopes","required":false,"type":"boolean","description":"Set to true to consent to new scopes added by the target version"}],"description":"Upgrade an installation to a target version. Returns 409 if the new version adds scopes that require consent."},{"method":"POST","path":"/api/v1/installations/{id}/launch-token","pathParams":["id"],"queryParams":[],"bodyFields":[],"description":"Mint a short-lived RS256 session JWT for an iframe extension. The token carries full installation context and expires in 10 minutes. Re-calling this endpoint refreshes the token (no separate refresh route)."},{"method":"GET","path":"/api/v1/installations/{id}/deliveries","pathParams":["id"],"queryParams":[{"name":"limit","required":false,"type":"integer"},{"name":"offset","required":false,"type":"integer"}],"bodyFields":null,"description":"List webhook deliveries for an extension installation (most recent first)"},{"method":"POST","path":"/api/v1/installations/{id}/deliveries/{deliveryId}/replay","pathParams":["id","deliveryId"],"queryParams":[],"bodyFields":[],"description":"Replay a webhook delivery for an extension installation"},{"method":"POST","path":"/api/v1/installations/{id}/test","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Send a verification ping to an extension installation webhook endpoint"},{"method":"GET","path":"/api/v1/extensions/{id}/listing","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"PUT","path":"/api/v1/extensions/{id}/listing","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/extensions/{id}/readiness","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/extensions/{id}/reviews","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/extensions/{id}/reviews","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/extensions/{id}/reviews/{sid}","pathParams":["id","sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/extensions/{id}/reviews/{sid}/comments","pathParams":["id","sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/extensions/{id}/reviews/{sid}/withdraw","pathParams":["id","sid"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/publisher/terms","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/publisher/accept-terms","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/extensions/domains","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/extensions/domains","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/extensions/domains/{id}/verify","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/affiliates/me/code","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get or create affiliate code"},{"method":"POST","path":"/api/v1/affiliates/me/code/regenerate","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Regenerate affiliate code"},{"method":"GET","path":"/api/v1/affiliates/me/stats","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get affiliate stats"},{"method":"GET","path":"/api/v1/affiliates/me/signups","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List referred signups"},{"method":"POST","path":"/api/v1/partner/applications","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Apply for partner status"},{"method":"GET","path":"/api/v1/partner/me/profile","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get partner profile"},{"method":"GET","path":"/api/v1/partner/me/referrals","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List partner referrals"},{"method":"GET","path":"/api/v1/partner/me/seats","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List partner seats in client workspaces"},{"method":"GET","path":"/api/v1/partner/me/commissions","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get commission stats"},{"method":"POST","path":"/api/v1/partner/trials","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Create trial for client"},{"method":"POST","path":"/api/v1/partner/trials/{referralId}/promote","pathParams":["referralId"],"queryParams":[],"bodyFields":null,"summary":"Hand off client workspace to client ownership"},{"method":"POST","path":"/api/v1/partner/trials/{referralId}/claim-billing","pathParams":["referralId"],"queryParams":[],"bodyFields":null,"summary":"Partner claims billing responsibility"},{"method":"GET","path":"/api/v1/partner-seats","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List partner seats on this workspace"},{"method":"PATCH","path":"/api/v1/partner-seats/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Update seat permissions"},{"method":"DELETE","path":"/api/v1/partner-seats/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Remove a partner seat"},{"method":"GET","path":"/api/v1/events/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a single event by ID"},{"method":"GET","path":"/api/v1/events","pathParams":[],"queryParams":[{"name":"cursor","required":false,"type":"string","description":"Cursor for pagination (last item ID)"},{"name":"limit","required":false,"type":"integer","description":"Number of items per page"},{"name":"type","required":false,"type":"string","description":"Filter by event type"},{"name":"entityType","required":false,"type":"string","description":"Filter by entity type"},{"name":"entityId","required":false,"type":"string","description":"Filter by entity ID"}],"bodyFields":null,"description":"List events (immutable audit log)"},{"method":"GET","path":"/api/v1/scopes","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/event-types","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/.well-known/extension-jwks.json","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/checkout/sessions","pathParams":[],"queryParams":[],"bodyFields":[{"name":"applicationId","required":true,"type":"string"},{"name":"cartId","required":false,"type":"string"},{"name":"externalCartId","required":false,"type":"string"},{"name":"customerEmail","required":false,"type":"string"},{"name":"customer","required":false,"type":"object"},{"name":"returnUrl","required":true,"type":"string"},{"name":"cancelUrl","required":true,"type":"string"},{"name":"allowedMethods","required":false,"type":"string[]"},{"name":"paymentTerms","required":false,"type":"object"},{"name":"recurring","required":false,"type":"object"},{"name":"collect","required":false,"type":"object"},{"name":"metadata","required":false,"type":"object"},{"name":"discountCode","required":false,"type":"string"},{"name":"clientContext","required":false,"type":"object"}],"description":"Create a new hosted checkout session"},{"method":"GET","path":"/api/v1/checkout/sessions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a checkout session by ID"},{"method":"DELETE","path":"/api/v1/checkout/sessions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Cancel a checkout session"},{"method":"GET","path":"/api/v1/checkout-sessions/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a customer-facing checkout session by ID (public)"},{"method":"GET","path":"/api/v1/checkout-sessions/{id}/embed-config","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get customer-facing embed config by checkout session ID (public)"},{"method":"GET","path":"/api/v1/checkout-sessions/{id}/cart","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Get a customer-facing checkout session cart by session ID (public)"},{"method":"POST","path":"/api/v1/checkout-sessions/{id}/calculate","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Calculate customer-facing checkout session totals by session ID (public)"},{"method":"POST","path":"/api/v1/checkout-sessions/{id}/discount","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Apply a customer-facing checkout discount by session ID (public)"},{"method":"DELETE","path":"/api/v1/checkout-sessions/{id}/discount","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Remove a customer-facing checkout discount by session ID (public)"},{"method":"POST","path":"/api/v1/checkout/sessions/{id}/complete","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"email","required":false,"type":"string"},{"name":"shippingAddress","required":false,"type":"object"},{"name":"billingAddress","required":false,"type":"object"},{"name":"billingSameAsShipping","required":false,"type":"boolean"},{"name":"paymentMethod","required":true,"type":"string","enum":["net30","card","embedded"]},{"name":"netDays","required":false,"type":"integer"},{"name":"termsAccepted","required":false,"type":"boolean"},{"name":"termsSnapshot","required":false,"type":"string"},{"name":"invoiceNumber","required":false,"type":"string"},{"name":"net30Acceptance","required":false,"type":"object"},{"name":"paymentToken","required":false,"type":"string"},{"name":"processorCheckoutSessionId","required":false,"type":"string"},{"name":"processorTransactionId","required":false,"type":"string"},{"name":"clientContext","required":false,"type":"object"}],"description":"Complete a checkout session"},{"method":"POST","path":"/api/v1/checkout-sessions/{id}/complete","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"email","required":false,"type":"string"},{"name":"shippingAddress","required":false,"type":"object"},{"name":"billingAddress","required":false,"type":"object"},{"name":"billingSameAsShipping","required":false,"type":"boolean"},{"name":"paymentMethod","required":true,"type":"string","enum":["net30","card","embedded"]},{"name":"netDays","required":false,"type":"integer"},{"name":"termsAccepted","required":false,"type":"boolean"},{"name":"termsSnapshot","required":false,"type":"string"},{"name":"invoiceNumber","required":false,"type":"string"},{"name":"net30Acceptance","required":false,"type":"object"},{"name":"paymentToken","required":false,"type":"string"},{"name":"processorCheckoutSessionId","required":false,"type":"string"},{"name":"processorTransactionId","required":false,"type":"string"},{"name":"clientContext","required":false,"type":"object"}],"description":"Public customer-facing complete"},{"method":"POST","path":"/api/v1/providers/{provider}/webhooks/{connectionId}","pathParams":["provider","connectionId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/payment-providers/{provider}/webhooks","pathParams":["provider"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/payment-providers/{provider}/webhooks/{connectionId}","pathParams":["provider","connectionId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/checkout-sessions/embed-token","pathParams":[],"queryParams":[],"bodyFields":[{"name":"amount","required":true,"type":"integer","description":"Amount in minor units (e.g. cents)"},{"name":"currency","required":true,"type":"string","description":"ISO 4217 currency code"},{"name":"country","required":false,"type":"string","description":"ISO 3166-1 alpha-2 country code"},{"name":"externalCartId","required":false,"type":"string","description":"Optional external cart reference"},{"name":"buyerExternalIdentifier","required":false,"type":"string","description":"Optional Gr4vy buyer external identifier. When set, Gr4vy associates the resulting stored payment method with this buyer so future charges can reference it by id. Required for the platform-billing card-vault flow; omitted for one-shot checkout sessions."},{"name":"recurring","required":false,"type":"boolean","description":"When true, this embed captures a card for recurring/merchant-initiated billing: the Gr4vy widget is rendered with paymentSource=recurring + store=true (card-only, vaulted) and the buyer is pinned for re-mint. Requires buyerExternalIdentifier. Defaults to false (one-shot payment showing all enabled methods)."},{"name":"addCard","required":false,"type":"boolean","description":"When true (with recurring), the embed is a pure add-a-card flow: checkout-web renders the Gr4vy widget with display='addOnly' (just a new-card form, no stored methods, no checkout framing) and stores the card for the pinned buyer. Use for 'manage payment methods → add card'. Defaults to false."}],"description":"Mint a Gr4vy Embed token for card capture. The token is scoped to a server-side checkout session."},{"method":"GET","path":"/api/v1/checkout-sessions/{id}/embed-token","pathParams":["id"],"queryParams":[],"bodyFields":null,"description":"Re-mint a Gr4vy Embed JWT for an existing throttle checkout session. Anonymous; the session id is the only secret needed."},{"method":"GET","path":"/api/v1/api-keys","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List API keys for the calling merchant"},{"method":"POST","path":"/api/v1/api-keys","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"scopes","required":true,"type":"string[]"}],"summary":"Create a new API key (Clerk JWT only)"},{"method":"DELETE","path":"/api/v1/api-keys/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Revoke (soft-delete) an API key"},{"method":"POST","path":"/api/v1/api-keys/{id}/rotate","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"overlapHours","required":false,"type":"integer"}],"summary":"Rotate an API key with an overlap window (Clerk JWT only)"},{"method":"GET","path":"/api/v1/merchants/me","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get current merchant"},{"method":"PATCH","path":"/api/v1/merchants/me","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":false,"type":"string"},{"name":"logoUrl","required":false,"type":"null"}],"summary":"Update merchant display name. Pass `logoUrl: null` to clear the logo. To set a logo, use POST /v1/merchants/me/logo."},{"method":"GET","path":"/api/v1/checkout-sessions/{id}/payment-methods","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"List payment methods available for a checkout session (public)"},{"method":"GET","path":"/api/v1/connectors","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List configured connectors for the calling merchant"},{"method":"POST","path":"/api/v1/connectors","pathParams":[],"queryParams":[],"bodyFields":[{"name":"paymentServiceDefinitionId","required":true,"type":"string"},{"name":"displayName","required":true,"type":"string"},{"name":"fields","required":true,"type":"object[]"},{"name":"acceptedCountries","required":false,"type":"string[]"},{"name":"acceptedCurrencies","required":false,"type":"string[]"},{"name":"active","required":false,"type":"boolean"}],"summary":"Create a new connector for the calling merchant"},{"method":"GET","path":"/api/v1/connectors/available","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List available connector types"},{"method":"GET","path":"/api/v1/connectors/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Get a configured connector by id"},{"method":"PATCH","path":"/api/v1/connectors/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"paymentServiceDefinitionId","required":false,"type":"string"},{"name":"displayName","required":false,"type":"string"},{"name":"fields","required":false,"type":"object[]"},{"name":"acceptedCountries","required":false,"type":"string[]"},{"name":"acceptedCurrencies","required":false,"type":"string[]"},{"name":"active","required":false,"type":"boolean"}],"summary":"Update a connector for the calling merchant"},{"method":"DELETE","path":"/api/v1/connectors/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Delete a connector for the calling merchant"},{"method":"GET","path":"/api/v1/payment-routing","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the card-transaction routing config"},{"method":"PUT","path":"/api/v1/payment-routing","pathParams":[],"queryParams":[],"bodyFields":[{"name":"defaultCascade","required":true,"type":"string[]"},{"name":"rules","required":true,"type":"object[]"}],"summary":"Replace the card-transaction routing config"},{"method":"GET","path":"/api/v1/routing-connectors","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List connectors eligible for a routing cascade"},{"method":"GET","path":"/api/v1/routing-payment-methods","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List Gr4vy payment methods available to routing/decline rules"},{"method":"GET","path":"/api/v1/other-routing","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the non-card (redirect-transaction) routing config"},{"method":"PUT","path":"/api/v1/other-routing","pathParams":[],"queryParams":[],"bodyFields":[{"name":"rules","required":true,"type":"object[]"}],"summary":"Replace the non-card routing config"},{"method":"GET","path":"/api/v1/card-decline","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the card-transaction decline rules"},{"method":"PUT","path":"/api/v1/card-decline","pathParams":[],"queryParams":[],"bodyFields":[{"name":"rules","required":true,"type":"object[]"}],"summary":"Replace the card-transaction decline rules"},{"method":"GET","path":"/api/v1/other-decline","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the non-card (other) decline rules"},{"method":"PUT","path":"/api/v1/other-decline","pathParams":[],"queryParams":[],"bodyFields":[{"name":"rules","required":true,"type":"object[]"}],"summary":"Replace the non-card (other) decline rules"},{"method":"POST","path":"/api/v1/connectors/stripe/install-link","pathParams":[],"queryParams":[],"bodyFields":[],"summary":"Begin Stripe one-click connect"},{"method":"POST","path":"/api/v1/connectors/stripe/connect-key","pathParams":[],"queryParams":[],"bodyFields":[{"name":"secretKey","required":true,"type":"string"}],"summary":"Complete Stripe connect by pasting the restricted key"},{"method":"POST","path":"/api/v1/connectors/stripe/finalize","pathParams":[],"queryParams":[],"bodyFields":[{"name":"accountId","required":true,"type":"string"},{"name":"stripeUserId","required":true,"type":"string"},{"name":"state","required":true,"type":"string"},{"name":"installSignature","required":true,"type":"string"},{"name":"livemode","required":true,"type":"boolean"},{"name":"extraFields","required":false,"type":"object"}],"summary":"Finalize Stripe one-click connect"},{"method":"POST","path":"/api/v1/stripe-app/webhooks","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Inbound Stripe App webhook (uninstall handling)"},{"method":"GET","path":"/api/v1/payment-methods","pathParams":[],"queryParams":[{"name":"customerId","required":false,"type":"string"},{"name":"cartTotal","required":false,"type":"integer"}],"bodyFields":null,"summary":"List active payment methods derived from configured connectors"},{"method":"GET","path":"/api/v1/bigcommerce/connections","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List BigCommerce connections for the calling merchant"},{"method":"POST","path":"/api/v1/bigcommerce/connect","pathParams":[],"queryParams":[],"bodyFields":[{"name":"storeHash","required":true,"type":"string"},{"name":"accessToken","required":true,"type":"string"}],"summary":"Connect a BC store via static credentials"},{"method":"POST","path":"/api/v1/bigcommerce/connections/{id}/retry","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Retry webhook registration for a setup_failed connection"},{"method":"DELETE","path":"/api/v1/bigcommerce/connections/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Disconnect a BC store (soft-delete; 90-day cron hard-deletes after retention)"},{"method":"GET","path":"/api/v1/webhook-endpoints","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List configured outbound webhook endpoints"},{"method":"POST","path":"/api/v1/webhook-endpoints","pathParams":[],"queryParams":[],"bodyFields":[{"name":"url","required":true,"type":"string"},{"name":"enabledEvents","required":true,"type":"string[]"}],"summary":"Create an outbound webhook endpoint"},{"method":"GET","path":"/api/v1/webhook-endpoints/coverage","pathParams":[],"queryParams":[{"name":"days","required":false,"type":"integer"}],"bodyFields":null,"summary":"Event types emitted recently with no active subscriber","description":"Reports subscribable event types this application emitted in the lookback window that no active webhook endpoint is subscribed to. Use it to catch handlers wired up for events that can never arrive."},{"method":"PATCH","path":"/api/v1/webhook-endpoints/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"url","required":false,"type":"string"},{"name":"enabledEvents","required":false,"type":"string[]"},{"name":"isActive","required":false,"type":"boolean"}],"summary":"Update a webhook endpoint (URL, events, or active flag)"},{"method":"DELETE","path":"/api/v1/webhook-endpoints/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Soft-delete a webhook endpoint (sets deletedAt; excludes from list and dispatch)"},{"method":"POST","path":"/api/v1/webhook-endpoints/{id}/rotate-secret","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Rotate the signing secret for a webhook endpoint (reveal-once)."},{"method":"GET","path":"/api/v1/webhook-deliveries","pathParams":[],"queryParams":[{"name":"endpointId","required":false,"type":"string"},{"name":"orderId","required":false,"type":"string"},{"name":"limit","required":false,"type":"integer"},{"name":"offset","required":false,"type":"integer"}],"bodyFields":null,"summary":"Recent webhook delivery attempts (debug / audit log). Paginated via limit + offset."},{"method":"GET","path":"/api/v1/webhook-deliveries/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Fetch a single webhook delivery (full envelope + signature scheme) for debugging."},{"method":"POST","path":"/api/v1/webhook-endpoints/{id}/test","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"eventType","required":false,"type":"string","enum":["cart.created","cart.updated","cart.item_added","cart.item_updated","cart.item_removed","cart.shipping_selected","cart.shipping_cleared","cart.discount_applied","cart.discount_removed","cart.tax_recomputed","cart.checkout_started","cart.converted","cart.abandoned","cart.merged","order.created","order.updated","order.completed","order.cancelled","order.closed","order.sync_failed","order.sync_conflict","return.created","return.updated","quote.requested","quote.proposed","quote.viewed","quote.comment_added","quote.revision_requested","quote.declined","quote.accepted","quote.converted","payment.pending","payment.authorized","payment.captured","payment.failed","payment.voided","payment.refunded","payment.partially_refunded","payment.refund_failed","payment.vaulted","payment.disputed","payment.dispute_cleared","fulfillment.created","fulfillment.completed","fulfillment.cancelled","fulfillment.shipment.shipped","fulfillment.shipment.delivered","fulfillment.digital.delivered","subscription.created","subscription.activated","subscription.updated","subscription.plan_changed","subscription.plan_change_scheduled","subscription.paused","subscription.resumed","subscription.cancelled","subscription.renewed","subscription.past_due","subscription.payment_failed","subscription.backup_pm_used","subscription.create_failed","subscription.trial_blocked","discount.applied","discount.removed","customer.created","customer.updated","customer.deleted","customer.payment_method_added","customer.payment_method_removed","invoice.past_due","shipping_tax.provider_connection.unhealthy","workspace.payment_method.added","workspace.payment_method.removed","workspace.payment_method.default_changed","workspace.payment_method.backup_set","workspace.payment_method.backup_used","workspace.platform_charge.succeeded","workspace.platform_charge.failed","workspace.trial_expired"]},{"name":"data","required":false,"type":"object"}],"summary":"Send a synthetic, signed test delivery to this endpoint."},{"method":"POST","path":"/api/v1/webhook-deliveries/{id}/replay","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Replay a delivery (re-fires same payload with new signature)."},{"method":"POST","path":"/api/v1/merchants/me/external-cart-ack","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Mark this merchant as a non-BC (\"external cart\") merchant so onboarding can complete."},{"method":"POST","path":"/api/v1/merchants/me/finish-onboarding","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Mark the merchant as having finished the onboarding wizard."},{"method":"PATCH","path":"/api/v1/merchants/me/settings/net30","pathParams":[],"queryParams":[],"bodyFields":[{"name":"enabled","required":false,"type":"boolean"},{"name":"invoicePrefix","required":false,"type":"string"},{"name":"defaultNetDays","required":false,"type":"integer"},{"name":"termsText","required":false,"type":"string|null"}],"summary":"Update Net30 invoice billing settings."},{"method":"POST","path":"/api/v1/merchants/me/logo","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Upload a merchant logo (multipart/form-data, field: logo)."},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/applications/{applicationId}/logo","pathParams":["workspaceId","applicationId"],"queryParams":[],"bodyFields":null,"summary":"Upload an application logo."},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}/applications/{applicationId}/logo","pathParams":["workspaceId","applicationId"],"queryParams":[],"bodyFields":null,"summary":"Delete an application logo."},{"method":"POST","path":"/api/v1/email/asset-upload","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Upload an image asset for inline use in an email template (multipart, field: file)."},{"method":"POST","path":"/api/v1/extensions/icon-upload","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Upload an extension icon (multipart/form-data, field: file)."},{"method":"POST","path":"/api/v1/extensions/screenshot-upload","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Upload a marketplace listing screenshot (multipart/form-data, field: file)."},{"method":"GET","path":"/api/v1/assets/{*}","pathParams":["*"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/audit-log","pathParams":[],"queryParams":[{"name":"limit","required":false,"type":"integer"},{"name":"environmentId","required":false,"type":"string"}],"bodyFields":null,"summary":"Recent admin actions taken on this merchant"},{"method":"POST","path":"/api/v1/fulfillments/{id}/digital/upload","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/fulfillments/{id}/digital/download","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/payments/{id}/invoice/download","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/net30/connection","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the calling merchant's Net30 connection"},{"method":"POST","path":"/api/v1/net30/connection","pathParams":[],"queryParams":[],"bodyFields":[{"name":"invoicePrefix","required":true,"type":"string"},{"name":"defaultNetDays","required":true,"type":"integer"},{"name":"termsText","required":false,"type":"string|null"},{"name":"maxOrderTotal","required":false,"type":"number|null"},{"name":"enabled","required":true,"type":"boolean"}],"summary":"Create the calling merchant's Net30 connection"},{"method":"PATCH","path":"/api/v1/net30/connection/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"invoicePrefix","required":false,"type":"string"},{"name":"defaultNetDays","required":false,"type":"integer"},{"name":"termsText","required":false,"type":"string|null"},{"name":"maxOrderTotal","required":false,"type":"number|null"},{"name":"enabled","required":false,"type":"boolean"}],"summary":"Update the calling merchant's Net30 connection"},{"method":"DELETE","path":"/api/v1/net30/connection/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Soft-delete (disable) the calling merchant's Net30 connection"},{"method":"GET","path":"/api/v1/net30/eligible-customers","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List the calling merchant's Net30 eligible customers"},{"method":"POST","path":"/api/v1/net30/eligible-customers","pathParams":[],"queryParams":[],"bodyFields":[{"name":"customerId","required":true,"type":"string"},{"name":"notes","required":false,"type":"string"}],"summary":"Add a customer to the Net30 eligible allowlist"},{"method":"DELETE","path":"/api/v1/net30/eligible-customers/{customerId}","pathParams":["customerId"],"queryParams":[],"bodyFields":null,"summary":"Remove a customer from the Net30 eligible allowlist"},{"method":"PATCH","path":"/api/v1/payments/{id}/notes","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"notes","required":true,"type":"string|null"}],"summary":"Update free-text notes on a payment (5000 char max)."},{"method":"POST","path":"/api/v1/payments/{id}/dispute","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"reason","required":true,"type":"string"}],"summary":"Open a dispute on a Net30 payment."},{"method":"POST","path":"/api/v1/payments/{id}/dispute/clear","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Clear an open dispute on a payment (leaves reason + opened_at for audit)."},{"method":"POST","path":"/api/v1/payments/{id}/backdate-due-date","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"daysPastDue","required":true,"type":"integer"}],"summary":"Backdate metadata.dueDate so a Net-N invoice falls into a specific aging bucket. Demo/test tool only."},{"method":"GET","path":"/api/v1/invoices/aging","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"AR aging report: outstanding Net30 payments bucketed by days past due."},{"method":"GET","path":"/api/v1/analytics/orders-timeseries","pathParams":[],"queryParams":[{"name":"days","required":false,"type":"string"}],"bodyFields":null,"summary":"Daily order count + captured gross revenue over a trailing window (default 30 days, max 365)."},{"method":"GET","path":"/api/v1/orders/{id}/returns","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"List an order's returns."},{"method":"POST","path":"/api/v1/orders/{id}/returns","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"items","required":true,"type":"object[]"},{"name":"reason","required":false,"type":"string"},{"name":"restock","required":false,"type":"boolean"}],"summary":"Open a return (RMA) against an order for a subset of its line items."},{"method":"GET","path":"/api/v1/returns/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Get a return and its items."},{"method":"POST","path":"/api/v1/returns/{id}/transition","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"action","required":true,"type":"string","enum":["approve","reject","receive","complete","cancel"]}],"summary":"Transition a return: approve | reject | receive | complete | cancel."},{"method":"POST","path":"/api/v1/returns/{id}/exchange","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"items","required":true,"type":"object[]"}],"summary":"Complete a return as an exchange: create a replacement order for the swapped items and settle the price difference (charge if more, refund if less)."},{"method":"PATCH","path":"/api/v1/orders/{id}/line-items","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"add","required":false,"type":"object[]"},{"name":"update","required":false,"type":"object[]"},{"name":"remove","required":false,"type":"string[]"}],"summary":"Add, update, or remove line items on an order. On a captured order the total delta is charged (increase) or refunded (decrease) automatically."},{"method":"GET","path":"/api/v1/embed-config","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the merchant embed config (allowlisted parent origins + branding)"},{"method":"PUT","path":"/api/v1/embed-config","pathParams":[],"queryParams":[],"bodyFields":[{"name":"allowedOrigins","required":false,"type":"string[]"},{"name":"primaryColor","required":false,"type":"string"},{"name":"logoUrl","required":false,"type":"string"},{"name":"merchantName","required":false,"type":"string"},{"name":"storefrontBaseUrl","required":false,"type":"string|null","description":"Absolute base URL of your storefront (e.g. \"https://yourstore.com\"). Relative line-item imageUrls are resolved against it. Pass null to clear; when unset, the first allowedOrigin is used."},{"name":"cartRecoveryUrlTemplate","required":false,"type":"string|null","description":"Absolute https URL template used to build the recovery link in abandoned-cart emails. Must contain a \"{cartId}\" placeholder, e.g. \"https://yourstore.com/cart?c={cartId}\". Pass null to clear; when unset, abandoned carts are recovered via the cart.abandoned webhook only (no recovery email)."},{"name":"cartAbandonmentThresholdMinutes","required":false,"type":"integer|null","description":"Minutes of inactivity before an open/checkout cart is treated as abandoned by the sweep. Range 15–129600 (90 days). Pass null to clear; when unset, the platform default of 1440 (24h) applies."}],"summary":"Update the merchant embed config"},{"method":"GET","path":"/api/v1/tracking-settings","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get per-environment analytics tracking settings (secrets masked)"},{"method":"PUT","path":"/api/v1/tracking-settings","pathParams":[],"queryParams":[],"bodyFields":[{"name":"ga4MeasurementId","required":false,"type":"string|null"},{"name":"metaPixelId","required":false,"type":"string|null"},{"name":"ga4ApiSecret","required":false,"type":"string|null"},{"name":"metaCapiAccessToken","required":false,"type":"string|null"},{"name":"serverSideEnabled","required":false,"type":"boolean"},{"name":"requireConsent","required":false,"type":"boolean"}],"summary":"Update per-environment analytics tracking settings. Omitted fields are unchanged; empty string clears a field."},{"method":"POST","path":"/v1/clerk/webhooks/user-created","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Clerk user.created webhook (Svix-verified)"},{"method":"POST","path":"/v1/resend/webhooks","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/email/templates","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List all email template definitions with merchant overrides"},{"method":"GET","path":"/api/v1/email/templates/{key}","pathParams":["key"],"queryParams":[],"bodyFields":null,"summary":"Get a single email template definition with merchant override"},{"method":"PUT","path":"/api/v1/email/templates/{key}","pathParams":["key"],"queryParams":[],"bodyFields":null,"summary":"Upsert a merchant override for an email template"},{"method":"DELETE","path":"/api/v1/email/templates/{key}","pathParams":["key"],"queryParams":[],"bodyFields":null,"summary":"Delete merchant override for an email template (reset to default)"},{"method":"POST","path":"/api/v1/email/templates/{key}/preview","pathParams":["key"],"queryParams":[],"bodyFields":null,"summary":"Render a template with sample data for preview"},{"method":"POST","path":"/api/v1/email/test-send","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Send a test email to the authenticated admin (bypasses opt-out + cooldown)"},{"method":"GET","path":"/api/v1/applications/{applicationId}/email/templates","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"List application email template definitions with application overrides"},{"method":"GET","path":"/api/v1/applications/{applicationId}/email/templates/{key}","pathParams":["applicationId","key"],"queryParams":[],"bodyFields":null,"summary":"Get an application email template definition with application override"},{"method":"PUT","path":"/api/v1/applications/{applicationId}/email/templates/{key}","pathParams":["applicationId","key"],"queryParams":[],"bodyFields":null,"summary":"Upsert an application override for an email template"},{"method":"DELETE","path":"/api/v1/applications/{applicationId}/email/templates/{key}","pathParams":["applicationId","key"],"queryParams":[],"bodyFields":null,"summary":"Delete application override for an email template"},{"method":"POST","path":"/api/v1/applications/{applicationId}/email/templates/{key}/preview","pathParams":["applicationId","key"],"queryParams":[],"bodyFields":null,"summary":"Render an application template with sample data for preview"},{"method":"POST","path":"/api/v1/applications/{applicationId}/email/test-send","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Send an application-scoped test email to the authenticated admin"},{"method":"GET","path":"/api/v1/applications/{applicationId}/email/messages","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"List recent email messages for the application"},{"method":"GET","path":"/api/v1/email/messages","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"List recent email messages for the merchant"},{"method":"GET","path":"/api/v1/merchants/me/email-settings","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get workspace email settings"},{"method":"PATCH","path":"/api/v1/merchants/me/email-settings","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Update workspace email settings"},{"method":"PATCH","path":"/api/v1/merchants/me/members/{id}/preferences","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"Update per-member email preferences"},{"method":"GET","path":"/api/v1/applications/{applicationId}/email-settings","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Get application email settings"},{"method":"PATCH","path":"/api/v1/applications/{applicationId}/email-settings","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Update application email settings"},{"method":"GET","path":"/api/v1/email/sender-domain","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Get the current custom sending domain state"},{"method":"POST","path":"/api/v1/email/sender-domain","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Register a custom sending domain via Resend"},{"method":"DELETE","path":"/api/v1/email/sender-domain","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Disconnect and remove the custom sending domain"},{"method":"POST","path":"/api/v1/email/sender-domain/verify","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Trigger a domain verification check via Resend"},{"method":"GET","path":"/api/v1/applications/{applicationId}/email/sender-domain","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Get the current application custom sending domain state"},{"method":"POST","path":"/api/v1/applications/{applicationId}/email/sender-domain","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Register an application custom sending domain via Resend"},{"method":"DELETE","path":"/api/v1/applications/{applicationId}/email/sender-domain","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Disconnect and remove the application custom sending domain"},{"method":"POST","path":"/api/v1/applications/{applicationId}/email/sender-domain/verify","pathParams":["applicationId"],"queryParams":[],"bodyFields":null,"summary":"Trigger an application domain verification check via Resend"},{"method":"GET","path":"/api/v1/merchants/me/invites","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"[legacy] List merchant team members"},{"method":"POST","path":"/api/v1/merchants/me/invites","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"[legacy] Invite a team member (delegates to team-service)"},{"method":"POST","path":"/api/v1/merchants/me/invites/{id}/resend","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"[legacy] Resend an invite"},{"method":"POST","path":"/api/v1/merchants/me/invites/{id}/revoke","pathParams":["id"],"queryParams":[],"bodyFields":null,"summary":"[legacy] Revoke an invite or remove a member"},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/invites","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/invites","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null,"summary":"Create a team invite"},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/invites/{id}/resend","pathParams":["workspaceId","id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/invites/{id}/revoke","pathParams":["workspaceId","id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/invites/accept","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/invites/pending","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/members","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/members/me","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null},{"method":"PATCH","path":"/api/v1/workspaces/{workspaceId}/members/{memberId}","pathParams":["workspaceId","memberId"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}/members/{memberId}","pathParams":["workspaceId","memberId"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}/members/{memberId}/applications/{applicationId}","pathParams":["workspaceId","memberId","applicationId"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/auth/permissions","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/notifications/unread-count","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/notifications","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/notifications/{id}/read","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/notifications/{id}/unread","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/notifications/{id}/archive","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/notifications/read-all","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/me/preferences","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"PATCH","path":"/api/v1/me/preferences","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces/{wsId}/support/tickets","pathParams":["wsId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{wsId}/support/tickets","pathParams":["wsId"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces/{wsId}/support/tickets/{id}","pathParams":["wsId","id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{wsId}/support/tickets/{id}/comments","pathParams":["wsId","id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{wsId}/support/tickets/{id}/read","pathParams":["wsId","id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces/{wsId}/support/unread-count","pathParams":["wsId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{wsId}/support/attachments/presign","pathParams":["wsId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/workspaces/{wsId}/support/attachments/{attachmentId}/confirm","pathParams":["wsId","attachmentId"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/support/dispatch-webhook","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/workspaces","pathParams":[],"queryParams":[],"bodyFields":null,"description":"List workspaces the authenticated user is a member of"},{"method":"POST","path":"/api/v1/workspaces","pathParams":[],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"slug","required":true,"type":"string","description":"URL-safe identifier, globally unique"},{"name":"email","required":false,"type":"string","description":"Owner email (used for member row); falls back to empty string if omitted"}],"description":"Create a new workspace; the calling user becomes owner"},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null,"description":"Get a single workspace by ID (must be a member)"},{"method":"PATCH","path":"/api/v1/workspaces/{workspaceId}","pathParams":["workspaceId"],"queryParams":[],"bodyFields":[{"name":"name","required":false,"type":"string"},{"name":"slug","required":false,"type":"string"}],"description":"Update workspace name or slug (must be a member)"},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}","pathParams":["workspaceId"],"queryParams":[{"name":"force","required":false,"type":"string","enum":["true","false"]}],"bodyFields":null,"description":"Delete a workspace (must be a member; pass ?force=true to cascade-delete applications)"},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/environments","pathParams":["workspaceId"],"queryParams":[{"name":"includeArchived","required":false,"type":"string","enum":["true","false"]}],"bodyFields":null,"description":"List workspace environments"},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/environments","pathParams":["workspaceId"],"queryParams":[],"bodyFields":[{"name":"slug","required":true,"type":"string"},{"name":"name","required":true,"type":"string"}],"description":"Create a custom non-production sandbox environment"},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}/environments/{environmentId}","pathParams":["workspaceId","environmentId"],"queryParams":[],"bodyFields":null,"description":"Archive a custom workspace environment"},{"method":"POST","path":"/api/v1/workspaces/{id}/go-live","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"acceptedProductionTermsAt","required":true,"type":"string"}],"summary":"Flip a sandbox workspace to production. Multi-precondition gated."},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/applications","pathParams":["workspaceId"],"queryParams":[],"bodyFields":null,"description":"List applications in a workspace (must be a member)"},{"method":"POST","path":"/api/v1/workspaces/{workspaceId}/applications","pathParams":["workspaceId"],"queryParams":[],"bodyFields":[{"name":"name","required":true,"type":"string"},{"name":"slug","required":true,"type":"string","description":"URL-safe identifier, unique within the workspace"},{"name":"currency","required":false,"type":"string"},{"name":"displayName","required":false,"type":"string|null"},{"name":"brandColor","required":false,"type":"string|null"},{"name":"allowedOrigins","required":false,"type":"string[]"}],"description":"Create a new application in a workspace (must be a member)"},{"method":"GET","path":"/api/v1/workspaces/{workspaceId}/applications/{applicationId}","pathParams":["workspaceId","applicationId"],"queryParams":[],"bodyFields":null,"description":"Get a single application by ID (must be a workspace member)"},{"method":"PATCH","path":"/api/v1/workspaces/{workspaceId}/applications/{applicationId}","pathParams":["workspaceId","applicationId"],"queryParams":[],"bodyFields":[{"name":"name","required":false,"type":"string"},{"name":"slug","required":false,"type":"string"},{"name":"currency","required":false,"type":"string"},{"name":"isActive","required":false,"type":"boolean"},{"name":"displayName","required":false,"type":"string|null"},{"name":"brandColor","required":false,"type":"string|null"},{"name":"allowedOrigins","required":false,"type":"string[]"}],"description":"Update application name, slug, currency, or isActive (must be a workspace member)"},{"method":"DELETE","path":"/api/v1/workspaces/{workspaceId}/applications/{applicationId}","pathParams":["workspaceId","applicationId"],"queryParams":[],"bodyFields":null,"description":"Delete an application (must be a workspace member)"},{"method":"GET","path":"/api/v1/billing/state","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/billing/subscribe","pathParams":[],"queryParams":[],"bodyFields":[{"name":"paymentMethodToken","required":false,"type":"string"}]},{"method":"POST","path":"/api/v1/billing/cancel","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/billing/resume","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/payment-methods","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/billing/payment-methods","pathParams":[],"queryParams":[],"bodyFields":[{"name":"paymentMethodToken","required":true,"type":"string"}]},{"method":"PATCH","path":"/api/v1/billing/payment-methods/{id}","pathParams":["id"],"queryParams":[],"bodyFields":[{"name":"role","required":true,"type":"string","enum":["primary","backup"]}]},{"method":"DELETE","path":"/api/v1/billing/payment-methods/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/billing/gr4vy-embed-token","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/provider-status","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/invoices","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/invoices/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/invoices/{id}/receipt.pdf","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/plan-history","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/overview","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/billing/platform-revenue","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/platform-billing/run-renewal","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/platform-billing/run-dunning","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/extend-trial","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/promote-partner","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/partner-applications","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/partner-applications/{id}/reject","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/demote-partner","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/force-tier-override","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/refund-charge","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/cancel-immediately","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/bring-legacy-into-billing","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/suspend","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/workspaces/{id}/reactivate","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/audit-log","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/me/staff-status","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/staff","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/staff","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/admin/staff/{email}","pathParams":["email"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}/payment-methods","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}/invoices","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}/usage","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}/subscription-timeline","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/workspaces/{id}/members","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"PATCH","path":"/api/v1/admin/workspaces/{id}/members/{memberId}","pathParams":["id","memberId"],"queryParams":[],"bodyFields":null},{"method":"DELETE","path":"/api/v1/admin/workspaces/{id}/members/{memberId}","pathParams":["id","memberId"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/extensions/reviews","pathParams":[],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/admin/extensions/reviews/{sid}","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/claim","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/comments","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/install-candidate","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/uninstall-candidate","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/approve","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/request-changes","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/reviews/{sid}/reject","pathParams":["sid"],"queryParams":[],"bodyFields":null},{"method":"POST","path":"/api/v1/admin/extensions/{id}/unpublish","pathParams":["id"],"queryParams":[],"bodyFields":null},{"method":"GET","path":"/api/v1/whoami","pathParams":[],"queryParams":[],"bodyFields":null,"summary":"Identify the calling credential","description":"Returns the credential type, granted scopes, and the workspace, application and environment the credential is pinned to. Requires authentication but no particular scope."}]}