properties are property names. When writing, you can use either the property name or its ID as the key.
Rich text items
title and rich_text are arrays of rich text items.
When reading
type is text, mention, or equation. mention.type is user, page, database, date, or custom_emoji. A mention of a document or database the integration can’t read has plain_text set to Untitled. A person mention read by an integration with user information set to None is @Anonymous.
Long text comes back as several items of up to 2,000 characters, so rich_text[0] holds only the first part. Join every item to read the whole text.
When writing
- Links accept http(s), mailto, and document-relative addresses. Anything else returns 400
Invalid URL for link. - An item holds up to 2,000 characters, and an array up to 100 items. See Values and request size.
- Items with the same formatting are merged when stored. Reading returns them split every 2,000 characters.
- You can write rich text items back as you read them. Person mentions are the exception: send only
{ "id": "..." }. - A mention with an unknown document ID returns 200 and reads back as an
Untitleddocument mention. An item with an unknown custom emoji ID is dropped. - Empty text items aren’t stored.
- A date mention whose end is earlier than its start loses the end.
Writable properties
Read-only properties
formula, rollup, unique_id, created_time, created_by, last_edited_time, last_edited_by, and button can’t be written. Writing them returns 400.
Session, linked pages, and PR properties don’t appear in responses.
Options
- When both
idandnameare sent,idwins. An unknownidreturns 400. - Names are trimmed and matched case-insensitively.
- If no name matches,
selectandmulti_selectcreate a new option. If the write fails, the new option isn’t kept. - A name with a comma returns 400.
- A color has to be one of
default,gray,brown,orange,yellow,green,blue,purple,pink, orred. Sending a different color for an existing option returns 400. statusdoesn’t create options. An unknown name returns 400.
Dates
When reading,time_zone is always null. Values with a time include an offset.
- An end earlier than the start returns 400, including when the start and end have different offsets. Times with no offset and date-only values are compared as UTC.
- To send
time_zone, both start and end need a time, with no offset or a zero offset. - Values with a time are normalized to one offset: the start’s offset if the start has a time (
+00:00if it has none), otherwise the end’s offset. - An invalid date returns 400
... date.start should be a valid ISO 8601 date string ...
People
- Sending a user object as read returns 400. Send
{ "id": "..." }. - An unknown ID or a group returns 404
Could not find user with ID: ... - Going over a property’s person limit returns 400
The request failed validation. Error: Invalid value for property with limit - People already in the property aren’t checked again. An integration with user information set to None can’t send people at all.
Relations
- A write replaces the whole value. A row response returns at most 25 relations, so if
has_moreistrue, read them all first with Retrieve a property value. - An ID for a row the integration can’t read returns 404.
- Only top-level rows of the target database are kept. Rows of other readable databases and subpages are silently dropped.
- Existing relations the integration can’t see are kept.
- Sending more than one value to a property limited to 1 returns 400
Relation property ... has a limit of 1, but ... values were provided. - Adding or removing a row of a database with a task agent attached returns 403.