createdAt first.offset + limit,total (matching row count) outside data, with no nextCursor / hasMore fields.total; there is no need to infer the last page from "returned fewer than limit".limit and offset silently fall back to defaults; limit is clamped to [1, 50] and offset is clamped to >= 0; this does not produce an error.{ status, code, message, requestId? }. code is always the parent code — sub codes only change message and never appear in the body. requestId is present only on reportable-tier errors, so use the X-Vocu-App-Request-Id response header when troubleshooting (it is written unconditionally on every response). See the "Errors" document for the full code reference.