Skip to main content
List active human members, change a plan, and set the extra usage limit. Amounts are euros. The calls use the workspace API key’s BILLING_API scope. Writes run as the key’s service account owner. This API does not invite or deactivate members. Use the User Management API for that.
Call these routes when GET /billing/v1/mode returns ai-models-included. Dedicated deployments always return bring-your-own-keys, including when Langdock manages the model keys. The other mode returns 409 with code BILLING_MODE_MISMATCH.

Base URL

Prerequisites

  • API key with the BILLING_API scope
  • The key owner is a service account that has not been deleted and has an active Admin membership
  • USER_MANAGEMENT_API on the same key when you need email, name, or an email filter

Change a plan

PUT /users/{userId}/plan takes the plan directly.
business is the other value. Setting the plan the member already has does not change the plan. Moving the member to business_max closes the pending usage request linked to that upgrade. Moving the member to business does not. A request created after the upgrade stays open. Setting business_max again retries a linked request that did not close the first time, but does not close that newer request. Without usageRequestId, the plan change is saved even if closing the request fails. The move adds a billed seat when the target plan has no free seat left. The seat change is saved before the subscription update is sent to Stripe. Read the counts on Get Seats. Pass usageRequestId as a query parameter to answer that request in the same write. The plan is kept only when the request belongs to this member, is still pending, and the move is to business_max. Otherwise nothing is written. A missing request, or one that is not this member’s, returns 404 with code NOT_FOUND. A request that is no longer pending returns 409 with code USAGE_REQUEST_NOT_PENDING. The current status is in details.status. A move that does not raise the allowance returns 409 with code USAGE_REQUEST_NOT_ANSWERED. The request stays pending. The response is the member object with extraUsagePeriodSpend set to null.
Langdock intentionally blocks browser-origin requests to protect your API key and ensure your applications remain secure. For more information, please see our guide on API Key Best Practices.