Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.jojapi.com/llms.txt

Use this file to discover all available pages before exploring further.

As an API provider, the Studio → Subscriptions page lets you monitor every customer subscription on your APIs. From here you can transfer a customer to a different plan or cancel a subscription on their behalf.

Transferring a subscription to a different plan

You can move a customer’s active subscription to a different plan on the same API — for example, when retiring a plan, upgrading a customer, or moving them to a new pricing tier. To start a transfer, open Studio → Subscriptions, find the subscriber’s row and click Transfer. In the dialog, choose the target plan from the same API and confirm. What happens next depends on whether the target plan is paid or free:
  • Target plan is paid (a periodic plan with a price greater than zero, or a pay-as-you-go plan with any non-zero tier price): the transfer enters a pending state until the user accepts. The user has until the end of their current period to approve. During this time, both you and the user can still cancel the request. If approved, the customer’s existing subscription on the API is canceled immediately and the new paid subscription starts right away (with the charge collected from the user’s wallet first, then from their default payment method if needed).
  • Target plan is free: the user is notified but no approval is required. The transfer is automatically applied at the end of the current period — the customer’s existing subscription is canceled and the new free subscription begins seamlessly.
In both cases the user is sent an email describing the change.

Optional: cancel subscription on rejection or expiry

When you create a transfer to a paid plan, you can tick the “Cancel subscription if not approved” option in the transfer dialog. With this enabled:
  • If the user rejects the transfer, their current subscription is canceled.
  • If the user does not approve before the end of the current period, the transfer expires and their subscription is canceled.
The user is informed of this consequence in the transfer notification email — so the cancellation is never a surprise. Use this when you want to enforce a plan migration: customers must either accept the new plan or lose access to your API. If the option is not enabled (the default), an unanswered or rejected transfer simply expires and the user’s existing subscription continues unchanged.

Tracking pending transfers

While a transfer is pending, the subscription’s row in Studio → Subscriptions shows a blue “Transfer Awaiting Approval” or “Transfer Scheduled” badge. Hover the badge to see the target plan, the deadline, when the transfer was created, and whether the cancel-on-reject option was enabled. The action column changes to a Cancel Transfer button while the request is open — clicking it withdraws the request and notifies the user. Their current subscription is left as-is.

Canceling a customer subscription

You can cancel a customer’s subscription directly from Studio → Subscriptions by clicking the Cancel button on their row and confirming. This terminates the subscription immediately and notifies the user by email. Use this for cases like terms-of-service violations, fraud, or when you’ve reached an off-platform agreement to end the subscription. For routine plan migrations, prefer the transfer flow above so the customer keeps service continuity.

Single subscription per API

A user can only have one active subscription on a given API at a time. When a customer subscribes to a new plan, any existing subscriptions of theirs on that same API are automatically canceled. This applies to user-initiated subscriptions as well as transfers — so transferring a customer to plan B will cancel any other subscriptions they hold on the same API alongside the source subscription.