Skip to content

API Reference

The Querri Public API v1 provides programmatic access to projects, dashboards, data sources, users, access policies, and more. All endpoints require qk_ API key authentication — see Authentication.

The full interactive API reference with request/response schemas is available at your Querri instance:

For local development, these are at http://localhost/api/v1/docs and http://localhost/api/v1/redoc.

https://app.querri.com/api/v1
Terminal window
Authorization: Bearer qk_live_...
X-Tenant-ID: org_...

All errors follow a consistent structure:

{
"error": {
"type": "not_found_error",
"code": "project_not_found",
"message": "No project with ID 'proj_abc123'"
}
}

Error types: authentication_error, permission_error, invalid_request_error, not_found_error, rate_limit_error, api_error.


Manage organization members. Users can be created with an external_id for idempotent upsert via your own user system.

MethodEndpointDescriptionScope
POST/usersCreate a new useradmin:users:write
GET/usersList users (supports ?external_id= filter)admin:users:read
GET/users/{user_id}Get user by IDadmin:users:read
PUT/users/external/{external_id}Get or create user by external ID (idempotent)admin:users:write
PATCH/users/{user_id}Update user role or profileadmin:users:write
DELETE/users/{user_id}Delete a useradmin:users:write

Create, manage, and execute data analysis projects.

MethodEndpointDescriptionScope
GET/projectsList projectsadmin:projects:read
POST/projectsCreate a projectadmin:projects:write
GET/projects/{project_id}Get project detailsadmin:projects:read
PUT/projects/{project_id}Update project metadataadmin:projects:write
DELETE/projects/{project_id}Delete a projectadmin:projects:write
POST/projects/{project_id}/runExecute a projectadmin:projects:write
GET/projects/{project_id}/run/statusCheck execution statusadmin:projects:read
POST/projects/{project_id}/run/cancelCancel executionadmin:projects:write
GET/projects/{project_id}/stepsList project stepsadmin:projects:read
GET/projects/{project_id}/steps/{step_id}/dataGet step result data (paginated, RLS-enforced)admin:projects:read

AI chat within projects. The stream endpoint returns Server-Sent Events (SSE).

MethodEndpointDescriptionScope
POST/projects/{project_id}/chatsCreate a new chatadmin:projects:write
GET/projects/{project_id}/chatsList chats for a projectadmin:projects:read
GET/projects/{project_id}/chats/{chat_id}Get chat messagesadmin:projects:read
DELETE/projects/{project_id}/chats/{chat_id}Delete a chatadmin:projects:write
POST/projects/{project_id}/chats/{chat_id}/streamSend message and stream AI response (SSE)admin:projects:write
GET/projects/{project_id}/chats/{chat_id}/streamResume an active streamadmin:projects:read
POST/projects/{project_id}/chats/{chat_id}/cancelCancel an active streamadmin:projects:write

The POST .../stream endpoint returns a text/event-stream response. Events use the Vercel AI SDK format:

0:"Hello "
0:"world"
e:{"finishReason":"stop"}
d:{"finishReason":"stop"}
  • 0: prefix — text chunk (JSON-encoded string)
  • e: prefix — error event
  • d: prefix — done signal

Create and manage dashboards. Includes template import/export.

MethodEndpointDescriptionScope
POST/dashboardsCreate a dashboardadmin:dashboards:write
GET/dashboardsList dashboardsadmin:dashboards:read
GET/dashboards/{dashboard_id}Get dashboard detailsadmin:dashboards:read
PATCH/dashboards/{dashboard_id}Update dashboard metadataadmin:dashboards:write
DELETE/dashboards/{dashboard_id}Delete a dashboardadmin:dashboards:write
POST/dashboards/{dashboard_id}/refreshTrigger dashboard refreshadmin:dashboards:write
GET/dashboards/{dashboard_id}/refresh/statusCheck refresh statusadmin:dashboards:read
POST/dashboards/from-templateCreate dashboard from templateadmin:dashboards:write
POST/dashboards/{dashboard_id}/export-templateExport dashboard as templateadmin:dashboards:read

Row-level security (RLS) policies control which data sources and rows users can see.

MethodEndpointDescriptionScope
POST/access/policiesCreate an access policyadmin:policies:write
GET/access/policiesList policies (supports ?name= filter)admin:policies:read
GET/access/policies/{policy_id}Get policy detailsadmin:policies:read
PATCH/access/policies/{policy_id}Update policy rulesadmin:policies:write
DELETE/access/policies/{policy_id}Delete a policyadmin:policies:write
POST/access/policies/{policy_id}/usersAssign users to policyadmin:policies:write
DELETE/access/policies/{policy_id}/users/{user_id}Remove user from policyadmin:policies:write
POST/access/resolvePreview resolved access for a user + sourceadmin:policies:read
GET/access/columnsDiscover filterable columns for a sourceadmin:policies:read

Query data sources directly. Results respect row-level security.

MethodEndpointDescriptionScope
GET/data/sourcesList available data sourcesdata:read
GET/data/sources/{source_id}Get source details and schemadata:read
GET/data/sources/{source_id}/dataRead source data (paginated)data:read
POST/data/queryExecute SQL query against a sourcedata:read

Create short-lived session tokens for embedding Querri views in iframes.

MethodEndpointDescriptionScope
POST/embed/sessionsCreate an embed sessionembed:session:create
POST/embed/sessions/refreshRefresh an expiring sessionembed:session:create
GET/embed/sessionsList active sessionsembed:session:create
DELETE/embed/sessions/{session_id}Revoke a sessionembed:session:create

Upload and manage files (CSV, Excel, JSON, etc.) for use as data sources.

MethodEndpointDescriptionScope
GET/filesList uploaded filesadmin:files:read
GET/files/{file_id}Get file metadataadmin:files:read
POST/files/uploadUpload a fileadmin:files:write
DELETE/files/{file_id}Delete a fileadmin:files:write

Manage data source connections (databases, SaaS apps, files).

MethodEndpointDescriptionScope
GET/connectorsList available connector typesadmin:sources:read
GET/sourcesList data sourcesadmin:sources:read
POST/sourcesCreate a data sourceadmin:sources:write
PATCH/sources/{source_id}Update source configurationadmin:sources:write
DELETE/sources/{source_id}Delete a data sourceadmin:sources:write
POST/sources/{source_id}/syncTrigger source syncadmin:sources:write

Manage API keys programmatically. Requires the admin:keys:manage scope.

MethodEndpointDescriptionScope
POST/keysCreate a new API keyadmin:keys:manage
GET/keysList API keysadmin:keys:manage
GET/keys/{key_id}Get key detailsadmin:keys:manage
DELETE/keys/{key_id}Revoke a keyadmin:keys:manage

Share projects and dashboards with other users in your organization.

MethodEndpointDescriptionScope
POST/projects/{project_id}/sharesShare a project with a useradmin:permissions:write
GET/projects/{project_id}/sharesList project sharesadmin:permissions:read
DELETE/projects/{project_id}/shares/{user_id}Revoke project shareadmin:permissions:write
POST/dashboards/{dashboard_id}/sharesShare a dashboard with a useradmin:permissions:write
GET/dashboards/{dashboard_id}/sharesList dashboard sharesadmin:permissions:read
DELETE/dashboards/{dashboard_id}/shares/{user_id}Revoke dashboard shareadmin:permissions:write

View organization and per-user usage metrics.

MethodEndpointDescriptionScope
GET/usageOrganization usage summaryadmin:usage:read
GET/usage/users/{user_id}Per-user usage metricsadmin:usage:read

Query the audit log for security and compliance.

MethodEndpointDescriptionScope
GET/audit/eventsQuery audit log eventsadmin:audit:read

List endpoints return paginated results:

{
"data": [...],
"total": 142,
"page": 1,
"page_size": 50,
"has_more": true
}

Use ?page=2&page_size=50 to navigate. Maximum page size is 200.