Base URL
/v1/.
Headers
Responses
Successful responses carry arequest_id at the top level, different for each request. Include it when you contact support. Response examples in these docs use example values.
Errors
Errors use this format.additional_data appears only when there’s something to add.
The server checks the path and method, then JSON, authentication, version, and body values.
Pagination
List responses use this format.page_sizeis 1 to 100, and the default is 100.- If
has_moreistrue, sendnext_cursorasstart_cursorin the next request. - A cursor only works for its own query. Sending it to a query with a different filter or sort returns 400.
IDs
A database and its data source have the same ID. Property IDs and option IDs are in the Retrieve a data source response.
IDs in paths and relations aren’t format-checked, so a malformed ID returns the same 404 as an ID that doesn’t exist.
Timestamps
created_time and last_edited_time are in UTC and truncated to the minute. created_time and last_edited_time filters compare against these values. Formula now() and date filters such as today and this week also use UTC.
Reserved user IDs
created_by and last_edited_by can hold these values.
Select properties
POST /v1/data_sources/{id}/query, GET /v1/pages/{id}, and POST /v1/search accept a filter_properties query string. Repeat it with property names or IDs to include only those properties. filter_properties[] also works.
Could not find property with name or id: ... for queries and page reads. Search skips it. Subpages only have the title.
File URLs
URLs for files properties, file blocks, and uploaded icons and covers are signed and expire after 1 hour. Checkexpiry_time and read again for a new URL.
Unavailable endpoints
These endpoints don’t exist and return 400invalid_request_url.
Passing
file_upload to a file, icon, or cover returns 404. max_file_upload_size_in_bytes in GET /v1/users/me is 0.