Skip to main content
POST
/
api
/
public
/
subscriptions
/
{subscriptionId}
/
cancel
curl -X POST "https://app.crovver.com/api/public/subscriptions/56e0d8e3-6731-4b1c-b01a-73b561b1cd47/cancel" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "externalTenantId": "workspace_123",
    "reason": "too_expensive",
    "feedback": "Would come back at a lower price point"
  }'
{
  "success": true,
  "data": {
    "subscriptionId": "56e0d8e3-6731-4b1c-b01a-73b561b1cd47",
    "status": "pending_cancel",
    "canceledAt": "2026-05-18T12:00:00Z",
    "currentPeriodEnd": "2026-06-10T05:12:21.000Z"
  }
}
Cancels a subscription. For recurring (Stripe-managed) subscriptions, the status moves to pending_cancel and access continues until the end of the current billing period. For manual billing subscriptions, the status moves to canceled immediately.

Path Parameters

subscriptionId
string
required
The Crovver subscription ID

Request Body

externalTenantId
string
required
The external tenant ID from your application. Used to verify the subscription belongs to this tenant.
reason
string
required
Cancellation reason. One of: too_expensive, missing_features, switching_provider, not_using, other
feedback
string
Optional free-text feedback from the user

Authentication

Requires a secret key (Authorization: Bearer sk_live_...) or service key (x-service-key).
curl -X POST "https://app.crovver.com/api/public/subscriptions/56e0d8e3-6731-4b1c-b01a-73b561b1cd47/cancel" \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "externalTenantId": "workspace_123",
    "reason": "too_expensive",
    "feedback": "Would come back at a lower price point"
  }'
{
  "success": true,
  "data": {
    "subscriptionId": "56e0d8e3-6731-4b1c-b01a-73b561b1cd47",
    "status": "pending_cancel",
    "canceledAt": "2026-05-18T12:00:00Z",
    "currentPeriodEnd": "2026-06-10T05:12:21.000Z"
  }
}