Skip to main content
Daily API errors are returned as HTTP 4xx or 5xx responses. The response body includes two fields:
  • error — a stable string identifying the error type. Use this for programmatic error handling.
  • info — a human-readable description with additional context. Treat this as debug information only; the content may change.
{
  "error": "invalid-request-error",
  "info": "bad Authorization header format"
}

HTTP status codes

StatusMeaning
200OK — request succeeded.
400Bad Request — the operation could not be performed as requested.
401Unauthorized — the API key was not valid.
403Forbidden — the API key is valid but the resource is not accessible.
404Not Found — the requested resource does not exist.
429Too Many Requests — rate limit exceeded. Back off and retry.
5xxServer Error — something unexpected happened on Daily’s side.

Error types

error valueDescription
authentication-errorThe API key is not valid.
authorization-header-errorThe Authorization header is missing or malformed.
forbidden-errorThe API key is valid but the resource is forbidden.
json-parsing-errorThe request body could not be parsed as JSON.
invalid-request-errorThe request could not be completed. Check the info field for details — common causes are missing required parameters or bad parameter values.
rate-limit-errorToo many requests in too short a window. See Authentication for limits.
server-errorAn unexpected error occurred on Daily’s side.

Pagination

List endpoints (GET /rooms, GET /recordings, etc.) return up to 100 objects per request, sorted in reverse chronological order by default. Use cursor-based pagination to page through all results. Query parameters:
ParameterDescription
limitNumber of objects to return. Max and default: 100.
starting_afterObject ID cursor. Returns objects created after this ID — use to fetch the next page.
ending_beforeObject ID cursor. Returns objects created before this ID — use to fetch a previous page. Pass the special value OLDEST to start from the oldest objects.
Examples:
# Most recent 5 rooms
curl -H "Authorization: Bearer DAILY_API_KEY" \
  "https://api.daily.co/v1/rooms?limit=5"

# 5 oldest rooms
curl -H "Authorization: Bearer DAILY_API_KEY" \
  "https://api.daily.co/v1/rooms?limit=5&ending_before=OLDEST"

# Next page after a known room ID
curl -H "Authorization: Bearer DAILY_API_KEY" \
  "https://api.daily.co/v1/rooms?limit=5&starting_after=ROOM_ID"
Fetching all results:
let rooms = await getPageOfRooms('https://api.daily.co/v1/rooms');

while (rooms.data.length > 0) {
  for (const room of rooms.data) {
    doSomethingWith(room);
  }
  const lastId = rooms.data[rooms.data.length - 1].id;
  rooms = await getPageOfRooms(`https://api.daily.co/v1/rooms?starting_after=${lastId}`);
}
created_at timestamps have one-second granularity. If multiple objects are created within the same second, list order is stabilized by id as a secondary sort key.