This article explains how to interpret error responses from the Video API and how to page through list endpoints.

Status codes

Code Meaning When you'll see it
200 OK Success Listing, fetching, or updating a resource
201 Created Resource created Creating a room
204 No Content Success, no body Deleting or closing a room
400 Bad Request Validation failed Creating a room with missing or invalid fields
401 Unauthorized Missing or invalid token Any request without a valid Authorization header
403 Forbidden Token not allowed to do this Calling a feedbacks endpoint without an Instance API Token
404 Not Found Resource doesn't exist, or isn't visible to your token Fetching a room by a token that doesn't match any room, or one that belongs to another organization
422 Unprocessable Content Request understood but rejected Submitting permanent: true when the permanent_rooms feature toggle isn't enabled

Validation errors (400)

When a request fails validation, the response body is an array of error objects, each with an attribute, a type, and a human-readable message:

[
  {
    "attribute": "name",
    "type": "blank",
    "message": "can't be blank"
  }
]

Iterate over the array — a single request can fail more than one validation at once.

Scope errors (404, not 403)

An Organization API Token only sees rooms belonging to its own organization or to that organization's doctors. Everything else answers 404 Not Found, the same response an unknown room token gets — the API does not reveal that a room exists outside your scope, so there is no 403 to catch here.

Treat a 404 on a room you expected to see as a scope problem before assuming it was deleted. See Authentication & API tokens for what each token type can reach.

Feature-gated errors (422)

Creating or updating a room with permanent: true requires the permanent_rooms feature toggle to be enabled for your tenant or organization, which is not the case by default. If the toggle isn't enabled, the API returns 422 Unprocessable Content with a different, single-object shape:

{
  "error": "Permanent rooms are not available in your current plan."
}

See Additional participants & permanent rooms for details on this feature.

The two error shapes are not interchangeable: 400 responses are a JSON array of validation errors, while this specific 422 response is a single JSON object with an error string. Branch on the status code first, then parse accordingly.

Pagination

List endpoints — GET /api/rooms and GET /api/room_feedbacks — are paginated using a page query parameter, which defaults to 1 if omitted.

Each paginated response includes these headers:

Header Description
Current-Page The current returned page
Page-Limit The maximum number of items per page (default: 20)
Total-Pages The total number of pages
Total-Count The total number of items
Link Navigation links in RFC 5988 format, with first, last, next, and prev relations

Requesting a page beyond the last page returns 200 OK with an empty rooms array rather than an error.

Worked example

curl -i "https://acme.meetone.io/api/rooms?page=2" \
  -H "Authorization: Bearer $MEETONE_API_TOKEN"
HTTP/1.1 200 OK
Current-Page: 2
Page-Limit: 20
Total-Pages: 5
Total-Count: 97
Link: <https://acme.meetone.io/api/rooms?page=1>; rel="first", <https://acme.meetone.io/api/rooms?page=5>; rel="last", <https://acme.meetone.io/api/rooms?page=3>; rel="next", <https://acme.meetone.io/api/rooms?page=1>; rel="prev"

{
  "rooms": [ ... ]
}

Follow the next and prev links from the Link header instead of incrementing the page parameter yourself. It keeps your integration working even if the pagination scheme changes.

Questions? Contact us at support@meetone.io.