# Query Notion data source

Canonical URL: https://docs.fuse.init.inc/integrations/notion/actions/data_sources.query

Query pages in a Notion data source with bounded property filters.

Action ID: `data_sources.query`
Provider: Notion (`notion`)
Contract version: 1

## Risk and exposure

- Risk: Read
- Idempotency: Safe — Safe to retry without coordination; repeats do not create additional side effects.
- Availability: Default
- Exposure: REST, SDK, MCP
- MCP hints: readOnly=true, destructive=false, idempotent=true, openWorld=true

## Required scopes

- `read_content`

## Input schema fields

- `data_source_id`
- `filter`
- `filter.and`
- `filter.and[]`
- `filter.and[].property`
- `filter.and[].title`
- `filter.and[].title.equals`
- `filter.and[].title.does_not_equal`
- `filter.and[].title.contains`
- `filter.and[].title.does_not_contain`
- `filter.and[].title.starts_with`
- `filter.and[].title.ends_with`
- `filter.and[].title.is_empty`
- `filter.and[].title.is_not_empty`
- `filter.and[].rich_text`
- `filter.and[].rich_text.equals`
- `filter.and[].rich_text.does_not_equal`
- `filter.and[].rich_text.contains`
- `filter.and[].rich_text.does_not_contain`
- `filter.and[].rich_text.starts_with`
- `filter.and[].rich_text.ends_with`
- `filter.and[].rich_text.is_empty`
- `filter.and[].rich_text.is_not_empty`
- `filter.and[].url`
- `filter.and[].url.equals`
- `filter.and[].url.does_not_equal`
- `filter.and[].url.contains`
- `filter.and[].url.does_not_contain`
- `filter.and[].url.starts_with`
- `filter.and[].url.ends_with`
- `filter.and[].url.is_empty`
- `filter.and[].url.is_not_empty`
- `filter.and[].email`
- `filter.and[].email.equals`
- `filter.and[].email.does_not_equal`
- `filter.and[].email.contains`
- `filter.and[].email.does_not_contain`
- `filter.and[].email.starts_with`
- `filter.and[].email.ends_with`
- `filter.and[].email.is_empty`
- `filter.and[].email.is_not_empty`
- `filter.and[].phone_number`
- `filter.and[].phone_number.equals`
- `filter.and[].phone_number.does_not_equal`
- `filter.and[].phone_number.contains`
- `filter.and[].phone_number.does_not_contain`
- `filter.and[].phone_number.starts_with`
- `filter.and[].phone_number.ends_with`
- `filter.and[].phone_number.is_empty`
- `filter.and[].phone_number.is_not_empty`
- `filter.and[].number`
- `filter.and[].number.equals`
- `filter.and[].number.does_not_equal`
- `filter.and[].number.greater_than`
- `filter.and[].number.less_than`
- `filter.and[].number.greater_than_or_equal_to`
- `filter.and[].number.less_than_or_equal_to`
- `filter.and[].number.is_empty`
- `filter.and[].number.is_not_empty`
- `filter.and[].checkbox`
- `filter.and[].checkbox.equals`
- `filter.and[].select`
- `filter.and[].select.equals`
- `filter.and[].select.does_not_equal`
- `filter.and[].select.is_empty`
- `filter.and[].select.is_not_empty`
- `filter.and[].status`
- `filter.and[].status.equals`
- `filter.and[].status.does_not_equal`
- `filter.and[].status.is_empty`
- `filter.and[].status.is_not_empty`
- `filter.and[].date`
- `filter.and[].date.equals`
- `filter.and[].date.before`
- `filter.and[].date.after`
- `filter.and[].date.on_or_before`
- `filter.and[].date.on_or_after`
- `filter.and[].date.is_empty`
- `filter.and[].date.is_not_empty`
- `filter.or`
- `filter.or[]`
- `filter.or[].property`
- `filter.or[].title`
- `filter.or[].title.equals`
- `filter.or[].title.does_not_equal`
- `filter.or[].title.contains`
- `filter.or[].title.does_not_contain`
- `filter.or[].title.starts_with`
- `filter.or[].title.ends_with`
- `filter.or[].title.is_empty`
- `filter.or[].title.is_not_empty`
- `filter.or[].rich_text`
- `filter.or[].rich_text.equals`
- `filter.or[].rich_text.does_not_equal`
- `filter.or[].rich_text.contains`
- `filter.or[].rich_text.does_not_contain`
- `filter.or[].rich_text.starts_with`
- `filter.or[].rich_text.ends_with`
- `filter.or[].rich_text.is_empty`
- `filter.or[].rich_text.is_not_empty`
- `filter.or[].url`
- `filter.or[].url.equals`
- `filter.or[].url.does_not_equal`
- `filter.or[].url.contains`
- `filter.or[].url.does_not_contain`
- `filter.or[].url.starts_with`
- `filter.or[].url.ends_with`
- `filter.or[].url.is_empty`
- `filter.or[].url.is_not_empty`
- `filter.or[].email`
- `filter.or[].email.equals`
- `filter.or[].email.does_not_equal`
- `filter.or[].email.contains`
- `filter.or[].email.does_not_contain`
- `filter.or[].email.starts_with`
- `filter.or[].email.ends_with`
- `filter.or[].email.is_empty`
- `filter.or[].email.is_not_empty`
- `filter.or[].phone_number`
- `filter.or[].phone_number.equals`
- `filter.or[].phone_number.does_not_equal`
- `filter.or[].phone_number.contains`
- `filter.or[].phone_number.does_not_contain`
- `filter.or[].phone_number.starts_with`
- `filter.or[].phone_number.ends_with`
- `filter.or[].phone_number.is_empty`
- `filter.or[].phone_number.is_not_empty`
- `filter.or[].number`
- `filter.or[].number.equals`
- `filter.or[].number.does_not_equal`
- `filter.or[].number.greater_than`
- `filter.or[].number.less_than`
- `filter.or[].number.greater_than_or_equal_to`
- `filter.or[].number.less_than_or_equal_to`
- `filter.or[].number.is_empty`
- `filter.or[].number.is_not_empty`
- `filter.or[].checkbox`
- `filter.or[].checkbox.equals`
- `filter.or[].select`
- `filter.or[].select.equals`
- `filter.or[].select.does_not_equal`
- `filter.or[].select.is_empty`
- `filter.or[].select.is_not_empty`
- `filter.or[].status`
- `filter.or[].status.equals`
- `filter.or[].status.does_not_equal`
- `filter.or[].status.is_empty`
- `filter.or[].status.is_not_empty`
- `filter.or[].date`
- `filter.or[].date.equals`
- `filter.or[].date.before`
- `filter.or[].date.after`
- `filter.or[].date.on_or_before`
- `filter.or[].date.on_or_after`
- `filter.or[].date.is_empty`
- `filter.or[].date.is_not_empty`
- `filter.property`
- `filter.title`
- `filter.title.equals`
- `filter.title.does_not_equal`
- `filter.title.contains`
- `filter.title.does_not_contain`
- `filter.title.starts_with`
- `filter.title.ends_with`
- `filter.title.is_empty`
- `filter.title.is_not_empty`
- `filter.rich_text`
- `filter.rich_text.equals`
- `filter.rich_text.does_not_equal`
- `filter.rich_text.contains`
- `filter.rich_text.does_not_contain`
- `filter.rich_text.starts_with`
- `filter.rich_text.ends_with`
- `filter.rich_text.is_empty`
- `filter.rich_text.is_not_empty`
- `filter.url`
- `filter.url.equals`
- `filter.url.does_not_equal`
- `filter.url.contains`
- `filter.url.does_not_contain`
- `filter.url.starts_with`
- `filter.url.ends_with`
- `filter.url.is_empty`
- `filter.url.is_not_empty`
- `filter.email`
- `filter.email.equals`
- `filter.email.does_not_equal`
- `filter.email.contains`
- `filter.email.does_not_contain`
- `filter.email.starts_with`
- `filter.email.ends_with`
- `filter.email.is_empty`
- `filter.email.is_not_empty`
- `filter.phone_number`
- `filter.phone_number.equals`
- `filter.phone_number.does_not_equal`
- `filter.phone_number.contains`
- `filter.phone_number.does_not_contain`
- `filter.phone_number.starts_with`
- `filter.phone_number.ends_with`
- `filter.phone_number.is_empty`
- `filter.phone_number.is_not_empty`
- `filter.number`
- `filter.number.equals`
- `filter.number.does_not_equal`
- `filter.number.greater_than`
- `filter.number.less_than`
- `filter.number.greater_than_or_equal_to`
- `filter.number.less_than_or_equal_to`
- `filter.number.is_empty`
- `filter.number.is_not_empty`
- `filter.checkbox`
- `filter.checkbox.equals`
- `filter.select`
- `filter.select.equals`
- `filter.select.does_not_equal`
- `filter.select.is_empty`
- `filter.select.is_not_empty`
- `filter.status`
- `filter.status.equals`
- `filter.status.does_not_equal`
- `filter.status.is_empty`
- `filter.status.is_not_empty`
- `filter.date`
- `filter.date.equals`
- `filter.date.before`
- `filter.date.after`
- `filter.date.on_or_before`
- `filter.date.on_or_after`
- `filter.date.is_empty`
- `filter.date.is_not_empty`
- `start_cursor`
- `page_size`
- `is_archived`
- `timestamp_filter`
- `timestamp_filter.timestamp`
- `timestamp_filter.on_or_after`
- `timestamp_filter.after`
- `timestamp_filter.on_or_before`
- `timestamp_filter.before`
- `sorts`
- `sorts[]`
- `sorts[].property`
- `sorts[].timestamp`
- `sorts[].direction`

## Output schema fields

- `results`
- `results[]`
- `results[].id`
- `results[].object`
- `results[].url`
- `results[].in_trash`
- `results[].created_at`
- `results[].updated_at`
- `results[].title`
- `results[].parent`
- `results[].parent.type`
- `results[].parent.page_id`
- `results[].parent.database_id`
- `results[].parent.data_source_id`
- `results[].parent.workspace`
- `results[].properties`
- `results[].properties[]`
- `results[].properties[].name`
- `results[].properties[].type`
- `results[].properties[].id`
- `results[].properties[].has_more`
- `results[].properties[].value`
- `next_cursor`
- `has_more`
- `request_status`
- `request_status.type`
- `request_status.incomplete_reason`

Provider overview: https://docs.fuse.init.inc/integrations/notion
Actions index: https://docs.fuse.init.inc/integrations/notion/actions
Exact canonical JSON contract: https://docs.fuse.init.inc/api/catalog/v1/providers/notion/actions/data_sources.query
Deployment-effective discovery: https://api.fuse.init.inc/v1/tenants/%7Btenant_id%7D/providers/notion/actions
