# Clients (/docs/reseller/your-clients/clients)

> Create client accounts, set what each one can do, block or restore them, and release them, all with your reseller key.

A client is a full account under yours. It has its own balance, agents, numbers, and
users, and it can sign in to its own dashboard. You set what it can do and what it
pays.

Every call on this page uses your reseller key. The client is named by `user_id` or
`organization_id`, and only one of your own clients is accepted.

## Create a client [#create-a-client]

One call creates the user and its account together, and links it to you.

```http
POST /api/v1/reseller/users/add
```

| Field | Required | Meaning |
|---|---|---|
| `name` | yes | The client's name |
| `email` | yes | Used as the login |
| `phone` | yes | Phone number |
| `password` | yes | Account password |
| `cost_per_min` | no | What the client pays per minute. Applied to both the basic and premium model rate |
| `welcome_minutes_to_credit` | no | Minutes credited on signup |
| `concurrent_call_limit` | no | Maximum simultaneous calls for this client |
| `expiry_date` | no | Account expiry, `YYYY-MM-DD` |
| `user_currency` | no | ISO 4217 code, such as `USD` or `INR` |

The response returns the new `user_id` and `organization_id`, the starting balance, and
the rate you set.

  `cost_per_min` must be at least what you pay, for both rates. A lower value is
  refused rather than quietly costing you money on every call the client makes.
  `welcome_minutes_to_credit` is capped the same way, at the minutes your own balance
  can cover.

## List your clients [#list-your-clients]

```http
GET /api/v1/reseller/organizations
```

Returns every client under your account with its balance, rate, concurrency limit, and
users. Each user's active keys are listed by `id` and `name` only. No key secret is ever
returned by a listing.

## Set what a client can do [#set-what-a-client-can-do]

**Dashboard menus.** Turn areas of the client's own dashboard on and off. Only the flags
you pass change, and flags outside your own permissions are ignored rather than
escalating.

```http
POST /api/v1/reseller/users/access-control

{ "user_id": 1234, "dashboard_menu_access": { "is_bots_menu_access": true } }
```

**Expiry.** Set a date the account stops working, or clear it. Pass `null` to remove an
existing expiry.

```http
POST /api/v1/reseller/users/expiry

{ "user_id": 1234, "expiry_date": "2026-12-31" }
```

**Concurrency.** How many calls the client can run at once. `new_limit` is the absolute
number you want, not a change to the current one.

```http
POST /api/v1/reseller/concurrency

{ "child_organization_id": 5678, "new_limit": 5 }
```

  Assigning concurrency is free and never fails for lack of capacity, but your own limit
  is the total the whole family competes for at dial time. Give five clients ten each
  while you hold twenty, and the twenty-first simultaneous call is refused.

## Stop a client [#stop-a-client]

**Block and restore.** Blocking is instant and reversible. The client is signed out and
its API keys stop at once, and nothing is deleted. Its numbers, campaigns, and history
stay intact.

```http
POST /api/v1/reseller/users/access

{ "blocked": true, "user_id": 1234 }
```

Name either one user with `user_id` or a whole account with `organization_id`. Add
`"detach_numbers": true` with `organization_id` to also detach the account's numbers from
their agents, so nothing answers inbound on them. The previous agents come back in the
response so the detach can be undone.

Restore with `"blocked": false`. Restoring lifts only the blocks you placed, and clears
an expiry that ran out while the client was blocked. If a client was blocked by its own
admin, or is expired, restore leaves it alone.

```http
POST /api/v1/reseller/users/access

{ "blocked": false, "organization_id": 5678 }
```

**Release.** Releasing ends the relationship for good. Unlike blocking, it cannot be
undone. It reverts the balance you funded, detaches every number and takes back the ones
you bought, unlinks the account, and retires its logins so the same email can sign up
fresh.

Preview what a release would do first. It changes nothing:

```http
GET /api/v1/reseller/clients/release-preview?organization_id=5678
```

The preview returns the balance and the share that comes back, each number and whether it
returns to you, the users, and whether the client still has a live subscription. A
release is refused while a subscription is active.

```http
POST /api/v1/reseller/clients/release

{ "organization_id": 5678 }
```

## Next [#next]

- [Client API keys](/docs/reseller/your-clients/client-api-keys): give a client its own key.
- [Act as a client](/docs/reseller/your-clients/acting-as-clients): run any call on a client's account.
- [Credits](/docs/reseller/your-business/credits): fund a client and track your margin.