Skip to content
Get Started

Line Usage and Capacity

Get new-contact usage, limits, and remaining capacity for each Sendblue line

This endpoint returns the same data shown in the dashboard, including when each line is expected to have capacity again.

GET https://api.sendblue.com/api/v2/lines/usage

The response includes your account’s phone lines and any old lines you can still use during a replacement grace period. This endpoint does not accept query parameters.

Use your account’s API credentials:

Terminal window
curl "https://api.sendblue.com/api/v2/lines/usage" \
-H "sb-api-key-id: YOUR_API_KEY" \
-H "sb-api-secret-key: YOUR_API_SECRET"

You can also use an account-scoped temporary bearer token. A line-scoped token returns HTTP 403 because the response includes all of your account’s lines.

{
"status": "OK",
"enabled": true,
"lines": [
{
"phone": "+15550100001",
"state": "available",
"sampledAt": "2026-10-06T17:00:00.000Z",
"newContactLookbackDays": 30,
"hourly": {
"used": 8,
"limit": 15,
"remaining": 7,
"nextSlotAt": "2026-10-06T17:06:00.000Z"
},
"daily": {
"used": 31,
"limit": 50,
"remaining": 19,
"nextSlotAt": "2026-10-07T07:00:00.000Z",
"resetsAt": "2026-10-07T07:00:00.000Z"
},
"availableAt": null
}
]
}

Limits can differ by account and line. Use the values in the response rather than the example limits above.

Usage counts new contacts you message on each line, rather than contacts you add to your account. Dashboard messages and automations use the same limits.

A contact is new if there has been no incoming or outgoing activity on that line within the number of days returned in newContactLookbackDays. Sending to a known contact does not count toward these new-contact limits. Other sending limits and exemptions still apply.

FieldDescription
enabledWhether usage reporting is enabled for your account. When false, lines is empty.
lines[].phoneSendblue phone line in E.164 format.
stateCapacity state; see the table below.
sampledAtWhen usage was checked, as an ISO 8601 timestamp in UTC.
newContactLookbackDaysDays without activity before a contact counts as new again. This field may be omitted.
hourly.used / limit / remainingNew contacts used, the line’s limit, and capacity left in a rolling 60-minute window.
daily.used / limit / remainingNew contacts used, the line’s limit, and capacity left since the last 3 AM ET reset.
hourly.nextSlotAtWhen the oldest counted contact leaves the hourly window; null if there are none or the time is unavailable.
daily.nextSlotAtNext daily reset when daily usage is nonzero; otherwise null.
daily.resetsAtNext daily reset at 3 AM ET (America/New_York), accounting for daylight saving time.
availableAtWhen a limited line is expected to have capacity in both windows; null if it is not limited or the time is unknown.

If a limit is lowered below current usage, remaining is zero. More than one contact may need to leave the hourly window before you can message a new contact, so use availableAt rather than nextSlotAt to decide when to retry.

These times assume no further sends. A request does not reserve capacity, and other sending rules still apply.

Use Known Contacts per Line to check a contact’s status on a line before choosing which number to send from.

StateDescription
availableThe line has capacity under its active new-contact limits.
limitedThe hourly or daily limit has been reached. Check availableAt.
pausedThe line’s daily new-contact limit is zero.
not_applicableThese limits do not apply to the line, including inbound-only and free shared-line plans.
unavailableSendblue could not retrieve usage or limit settings. Retry; do not treat this as zero usage.

Fields can be null when a limit is disabled, does not apply, or could not be checked. A disabled hourly limit returns null hourly fields. A paused line returns a daily limit and remaining capacity of zero, with used: null.

If enabled is true but lines is empty, no phone lines were found. If usage is unavailable for one line, the response still includes the other lines.

HTTP StatusDescription
400Query parameters are not accepted.
401Invalid API credentials or temporary token.
403Missing authentication or a line-scoped temporary token requesting account-wide usage.
429API request rate limit exceeded.
500Sendblue could not retrieve your account’s usage. Retry; do not treat this as an account with no lines.

Responses use Cache-Control: no-store. The dashboard refreshes every 15 seconds while the page is open. If your integration polls this endpoint, handle HTTP 429 responses and slow down when rate limited.

See the API reference for the response schema.