User management
Overview
Paid keeps three things separate:
- Customers are billed.
- Orders define how many seats exist.
- Users can be assigned to those seats.
That separation is the important part of the model:
- Creating or updating a user does not create billable seats.
- Changing a seat assignment does not change billing quantity.
- Changing billed seat count happens through the order or checkout flow.
If you understand those rules, the API is straightforward.
How users and seats work
A user is an identity within a customer account. A seat is a billable slot created from an order’s seat quantity. Users can occupy seats, but they do not create them.
This means:
- A customer can have users without assigning them to seats yet.
- A customer can have purchased seats that are still unassigned.
- You increase or decrease the number of seats by changing the order, not by creating or deleting users.
- You reflect who is using those seats by assigning or unassigning users.
In practice, most integrations use the API in this order:
- Create or update the customer.
- Create the order or checkout that defines the billed seat quantity.
- Upsert users by your own external IDs.
- List the seats created for that order.
- Assign or unassign users from those seats.
Customers, users, and seats
Customer
The customer is the account that owns the order and is billed for it.
User
A user is an identity within that customer. Use your own stable external IDs. You do not need to store Paid UUIDs.
Seat
A seat is created from an order’s seat-based quantity. Seats are listed and managed separately from the order.
Operationally:
- Change the order or checkout to change billed seat count.
- Change seat assignments to change occupancy.
Step 1: Create the customer
Create the customer that will own the users, seats, and order. See the Customers API for the full reference.
If the customer already exists, use its existing external ID in the endpoints below.
Step 2: Create the billed seats through an order
Seats come from order quantity, not from user creation.
For seat-based products, the order is the source of truth for billable seat count. The order creates the pool of seats that can later be assigned to users.
Choose one of these entry points:
- Use checkout when the customer is purchasing or upgrading in a customer-facing flow.
- Use direct order creation when your system provisions billing server-to-server.
When the order is created, Paid creates the seats for that order.
Step 3: Upsert users explicitly
Once the customer exists, create or update users explicitly. This keeps identity lifecycle separate from billing quantity.
Create or update a user with customer external ID and user external ID.
Example response:
This endpoint is idempotent. Re-sending the same user updates the existing record.
If you send "status": "deactivated" for an existing user, that user is deactivated and any current seat assignments are removed automatically.
Step 4: List seats on the order
List seats on the order to find assignable seat IDs.
You can also filter by product and status:
Example seat:
Use the seat id returned here when assigning or unassigning a seat.
Step 5: Assign or unassign a single seat
After you have both users and seats, connect them by assigning users to seat IDs.
Assign a seat to a user:
Unassign a seat:
Assigning or unassigning a seat changes occupancy only. It does not change the billed quantity on the order.
Step 6: Assign seats in batch
Use batch assignment for admin tooling, bulk sync jobs, or provisioning workflows.
You can also unassign in batch by setting "userExternalId": null on any entry.
Edge cases and behavior
- A user must belong to the same customer as the order.
- Deactivated users cannot be assigned to seats.
- Assigning a user to a new seat for the same seat-based line should not silently duplicate occupancy.
- Unassigning a seat does not reduce what the customer is billed for.
- Creating a user does not automatically create new billed seats.
Recommended integration flow
For most integrations, the lifecycle looks like this:
- Upsert the customer when the account is created in your product.
- Create the initial order or checkout when the customer purchases seats.
- Upsert users whenever users are invited, imported, or changed in your app.
- Assign those users to seats as part of provisioning.
- Update the order when the customer buys more or fewer seats.