> ## Documentation Index
> Fetch the complete documentation index at: https://api.scalysis.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Limits & rules

> Follow these rules to run Scalysis safely in production.

Read this before you go live.

## Call speed

Send at most **1 call per second** per account. This applies to `POST /calls/trigger` and campaign requests. Put calls in your own queue and send them one by one.

## Concurrency

Concurrency is how many calls can be live at the same time. It is set **per account** by Scalysis, not per API key or per campaign.

* To know your limit, check your dashboard or email [contact@scalysis.com](mailto:contact@scalysis.com).
* All your campaigns share the same lines. `maxConcurrency` on a campaign cannot go above the free lines.
* If no line is free when you start or resume a campaign, you get `400` with `error_code: CONCURRENCY_POOL_EXHAUSTED`. The response shows `pool_free` and `pool_limit`. Wait, or pause another campaign, then try again.

## Balance

Calls need money in your wallet. When it runs out, every call request returns status `402`:

```json theme={null}
{ "success": false, "error": "Your balance has run out. Recharge to continue.", "error_code": "INSUFFICIENT_BALANCE" }
```

Check your balance before sending a large batch:

```bash theme={null}
curl https://app.scalysis.com/api/v1/balance \
  -H "Authorization: Bearer YOUR_API_KEY"
```

## Retries

Each `POST /calls/trigger` creates a **new** order and a **new** call. If you send the same request twice, the customer gets called twice.

* `400`, `401`, `404`: something is wrong with the request. Fix it. Do not retry as-is.
* `402`: recharge first, then send again.
* `502` or a timeout: the order may already exist. Check with the `order_id` (or your own `orderNumber`) before sending again.

Save the `order_id` from every response.

## Campaign size

At most **2000 contacts** per `POST /campaigns` request. For more, split into several campaigns.

## Calling hours

Campaigns call between **9:00 AM and 8:00 PM IST**, every day, unless your account has different hours. Contacts outside this window wait for the next slot.

`POST /calls/trigger` dials right away. Only send it during hours your customers expect a call.

## Phone numbers

Send the full number with country code, like `+911234567899`. One number per contact.

## Field limits

| Field | Max length |
| - | - |
| `customerAddress` | 4000 characters |
| `orderNotes` | 8000 characters |
| `campaignName` | 200 characters |

## Getting results

Calls take time. Use the [agent webhook](https://api.scalysis.com/webhooks/agent-webhook.md) to get results as soon as a call ends. If you poll `GET /orders/{orderId}/outcome` instead, wait at least **15 seconds** between checks.

## API keys

* Keep keys on your server only.
* A deleted key stops working right away. Calls already started still finish.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.