1. Create a workspace and invite your team
Qry uses invite-only account setup. An owner creates the workspace, invites teammates, and assigns owner, admin, or member access. Members can use endpoints; owners and admins manage warehouse connections, API keys, and schedules.
2. Choose a publishing path
You can either let Qry run controlled refreshes from a read-only warehouse connection, or build and test dbt models in your own repository and publish the result with the dbt-native workflow.
For managed refresh, continue with a narrowly scoped warehouse identity:
Use a credential that can read only the approved schemas, marts, or models used by the endpoint. Do not give Qry write, DDL, ownership, or account-admin privileges. Keep credentials scoped to the smallest useful dataset and rotate them through your normal secret-management process.
3. Author and publish SQL
Create an endpoint under Endpoints → Create endpoint. Give it a stable path
and write the SQL that should become the API interface. Variables use the
{{ variable_name }} form and are configured with type and validation metadata
in the endpoint editor.
Publishing compiles the SQL, queues a refresh, and activates a snapshot only after the refresh artifact has been written and verified. A failed publish does not replace the previous active snapshot.
4. Make an authenticated request
The public endpoint shape is:
GET https://api.qry.thedatadavis.com/e/<workspace-slug>/<endpoint-path>
Authorization: Bearer <qry-api-key>
For example:
curl "https://api.qry.thedatadavis.com/e/acme/customer-health?account_id=123" \
-H "Authorization: Bearer $QRY_API_KEY"
Successful responses contain data and meta:
{
"data": [{"account_id": 123, "health_score": 82}],
"meta": {
"row_count": 1,
"max_response_rows": 1000,
"page": 1,
"page_size": 1000,
"has_next_page": false,
"last_refreshed_at": "2026-07-12T12:00:00Z"
}
}
Requests start on page 1. Add page=2 to fetch the next page when
meta.has_next_page is true. The endpoint response-row limit controls the page
size, and endpoint SQL should include a deterministic ORDER BY for stable
pagination.
The generated definition is also available from the public openapi.json
document. Use it as the source for variable types, examples, and error
responses.