UUpward API
v1
POST/api/public/v1/billing/cancel
Requires x-auth-token

Cancel a plan

End a plan now, or when the paid period runs out.

Before you call

  • Identify the member with x-auth-user (their pagename or your own external_id) alongside your API key.
  • The company owner's plan can't be canceled via the API — use the company billing settings.
  • Send an Idempotency-Key header (1–255 characters, new for every new cancellation) to retry safely: the same key and request returns the first result with Idempotent-Replayed: true and cancels nothing twice; the same key with a different request returns 422; a repeat while the first is still running returns 409.

When the plan ends

  • Nothing sent: ends immediately.
  • at_period_end: true: access continues until the current paid period ends.
  • effective_from: ends at that date/time; now or past = immediate, future = access until then.
  • effective_from can't be later than the current subscription's end time — anything later is set to that end time.
  • at_period_end defaults to false.
  • Send effective_from or at_period_end: true, never both (400).

Body fields

at_period_endbooleanoptional

Default: false (ends now or at effective_from). true = access continues until the current paid period ends. Do not combine with effective_from.

effective_fromstring (ISO 8601)optional

Date/time the plan ends. Optional — defaults to now. Now or past = immediate; future = access until then. Cannot be later than the current subscription's end time; a later value is set to that end time. Do not combine with at_period_end: true.

referencestringoptional

Your own reference number.

Responses

400Conflicting fieldsBoth effective_from and at_period_end were sent.
{ "success": false, "error": "Send either effective_from or at_period_end, not both." }
200OKThe cancellation is recorded.
{ "success": true, "pagename": "johndoe", "status": "canceled", "endsAt": "2026-02-05T10:00:00.000Z" }
409Company ownerThe company owner's plan cannot be canceled via the API.
{ "success": false, "error": "The company owner's plan cannot be canceled via the API; manage it from the company billing settings." }
POST/api/public/v1/billing/cancel

Default: false (ends now or at effective_from). true = access continues until the current paid period ends. Do not combine with effective_from.

Date/time the plan ends. Optional — defaults to now. Now or past = immediate; future = access until then. Cannot be later than the current subscription's end time; a later value is set to that end time. Do not combine with at_period_end: true.

Your own reference number.

ResponseNot sent yet