Run a valid notion.create_row call through the same SDK surface used by every toolkit.

Minimal tool call

ts
import { Eyeball } from "@eyeball/sdk";

const eyeball = new Eyeball({
  apiKey: process.env.EYEBALL_API_KEY!,
  baseUrl: process.env.EYEBALL_EXECUTOR_URL!,
});

const output = await eyeball.tools.run(
  "notion.create_row",
  {
  "documentId": "example_documentId",
  "values": {}
},
  { userId: "demo_user",
  idempotencyKey: "docs:notion.create_row:demo-1" },
);
console.log(output);

The model receives canonical output. Your application retains the execution envelope through tools.execute or the execution APIs when it needs IDs, status, versions, and latency.

Supported canonical tools

ToolPurposeExecutionEffectVersion
notion.create_rowCreate one row or record with named field values. This adds externally visible data to the selected table or database.sync or asyncmutation1.0.0
notion.delete_rowDelete or archive one row or record. This is destructive and may remove externally visible data.sync or asyncdestructive mutation1.0.0
notion.get_rowRetrieve one row or record by its provider identifier.sync or asyncread1.0.0
notion.list_rowsList rows or records from a database table, worksheet, or view. Use search_rows when a provider-side filter is required.sync or asyncread1.0.0
notion.list_tablesList worksheets, tables, collections, or database views in a spreadsheet or database document.sync or asyncread1.0.0
notion.search_rowsFilter rows using a provider-supported structured expression or free-text query and return normalized records.sync or asyncread1.0.0
notion.update_rowUpdate named values on an existing row or record. Repeating the same values has no additional effect.sync or asyncmutation1.0.0

Only the rows above are implemented. A capability tool omitted by this manifest returns not_supported; eyeball never synthesizes provider parity.

Supported canonical triggers

This manifest does not implement a canonical trigger.

Input and output schemas

notion.create_row

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:create_row:1.0.0:notion",
  "type": "object",
  "description": "Target container and values for the new row.",
  "additionalProperties": false,
  "required": [
    "documentId",
    "values"
  ],
  "properties": {
    "documentId": {
      "type": "string",
      "description": "Provider identifier of the database, base, workbook, or equivalent document.",
      "minLength": 1
    },
    "tableId": {
      "type": "string",
      "description": "Table, worksheet, collection, or view identifier when the provider requires one.",
      "minLength": 1
    },
    "values": {
      "type": "object",
      "description": "Values for the new row.",
      "additionalProperties": true
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:create_row:output:1.0.0:notion",
  "type": "object",
  "description": "The newly created row.",
  "additionalProperties": false,
  "required": [
    "row"
  ],
  "properties": {
    "row": {
      "type": "object",
      "description": "A normalized row or database record.",
      "additionalProperties": false,
      "required": [
        "rowId",
        "values"
      ],
      "properties": {
        "rowId": {
          "type": "string",
          "description": "Provider identifier of the row or record.",
          "minLength": 1
        },
        "values": {
          "type": "object",
          "description": "Field names and values stored on the row.",
          "additionalProperties": true
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "description": "Creation timestamp when the provider exposes it."
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "description": "Most recent update timestamp when exposed."
        }
      }
    }
  }
}
notion.delete_row

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:delete_row:1.0.0:notion",
  "type": "object",
  "description": "Target container and row identifier.",
  "additionalProperties": false,
  "required": [
    "documentId",
    "rowId"
  ],
  "properties": {
    "documentId": {
      "type": "string",
      "description": "Provider identifier of the database, base, workbook, or equivalent document.",
      "minLength": 1
    },
    "tableId": {
      "type": "string",
      "description": "Table, worksheet, collection, or view identifier when the provider requires one.",
      "minLength": 1
    },
    "rowId": {
      "type": "string",
      "description": "Provider identifier of the row or record.",
      "minLength": 1
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:delete_row:output:1.0.0:notion",
  "type": "object",
  "description": "Deletion acknowledgement.",
  "additionalProperties": false,
  "required": [
    "rowId",
    "deleted"
  ],
  "properties": {
    "rowId": {
      "type": "string",
      "description": "Provider identifier of the deleted row.",
      "minLength": 1
    },
    "deleted": {
      "type": "boolean",
      "const": true,
      "description": "Whether deletion completed."
    }
  }
}
notion.get_row

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:get_row:1.0.0:notion",
  "type": "object",
  "description": "Target container and row identifier.",
  "additionalProperties": false,
  "required": [
    "documentId",
    "rowId"
  ],
  "properties": {
    "documentId": {
      "type": "string",
      "description": "Provider identifier of the database, base, workbook, or equivalent document.",
      "minLength": 1
    },
    "tableId": {
      "type": "string",
      "description": "Table, worksheet, collection, or view identifier when the provider requires one.",
      "minLength": 1
    },
    "rowId": {
      "type": "string",
      "description": "Provider identifier of the row or record.",
      "minLength": 1
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:get_row:output:1.0.0:notion",
  "type": "object",
  "description": "The requested row.",
  "additionalProperties": false,
  "required": [
    "row"
  ],
  "properties": {
    "row": {
      "type": "object",
      "description": "A normalized row or database record.",
      "additionalProperties": false,
      "required": [
        "rowId",
        "values"
      ],
      "properties": {
        "rowId": {
          "type": "string",
          "description": "Provider identifier of the row or record.",
          "minLength": 1
        },
        "values": {
          "type": "object",
          "description": "Field names and values stored on the row.",
          "additionalProperties": true
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "description": "Creation timestamp when the provider exposes it."
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "description": "Most recent update timestamp when exposed."
        }
      }
    }
  }
}
notion.list_rows

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:list_rows:1.0.0:notion",
  "type": "object",
  "description": "Row container and pagination selectors.",
  "additionalProperties": false,
  "required": [
    "documentId"
  ],
  "properties": {
    "documentId": {
      "type": "string",
      "description": "Provider identifier of the database, base, workbook, or equivalent document.",
      "minLength": 1
    },
    "tableId": {
      "type": "string",
      "description": "Table, worksheet, collection, or view identifier when the provider requires one.",
      "minLength": 1
    },
    "pageSize": {
      "type": "integer",
      "description": "Maximum number of rows to return in one page.",
      "minimum": 1,
      "maximum": 100,
      "default": 50
    },
    "pageToken": {
      "type": "string",
      "description": "Opaque continuation token from a previous row page.",
      "minLength": 1
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:list_rows:output:1.0.0:notion",
  "type": "object",
  "description": "One page of normalized rows.",
  "additionalProperties": false,
  "required": [
    "rows"
  ],
  "properties": {
    "rows": {
      "type": "array",
      "description": "Rows in this page.",
      "items": {
        "type": "object",
        "description": "A normalized row or database record.",
        "additionalProperties": false,
        "required": [
          "rowId",
          "values"
        ],
        "properties": {
          "rowId": {
            "type": "string",
            "description": "Provider identifier of the row or record.",
            "minLength": 1
          },
          "values": {
            "type": "object",
            "description": "Field names and values stored on the row.",
            "additionalProperties": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Creation timestamp when the provider exposes it."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Most recent update timestamp when exposed."
          }
        }
      }
    },
    "nextPageToken": {
      "type": "string",
      "description": "Opaque token to request the next page of rows; absent when the result is complete.",
      "minLength": 1
    }
  }
}
notion.list_tables

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:list_tables:1.0.0:notion",
  "type": "object",
  "description": "Document and pagination selectors.",
  "additionalProperties": false,
  "required": [
    "documentId"
  ],
  "properties": {
    "documentId": {
      "type": "string",
      "description": "Provider identifier of the database, base, workbook, or equivalent document.",
      "minLength": 1
    },
    "pageSize": {
      "type": "integer",
      "description": "Maximum number of tables to return in one page.",
      "minimum": 1,
      "maximum": 100,
      "default": 50
    },
    "pageToken": {
      "type": "string",
      "description": "Opaque continuation token from a previous table page.",
      "minLength": 1
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:list_tables:output:1.0.0:notion",
  "type": "object",
  "description": "One page of tables, worksheets, collections, or views.",
  "additionalProperties": false,
  "required": [
    "tables"
  ],
  "properties": {
    "tables": {
      "type": "array",
      "description": "Tables available in the selected document.",
      "items": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "tableId",
          "name"
        ],
        "properties": {
          "tableId": {
            "type": "string",
            "description": "Provider identifier of the table or worksheet.",
            "minLength": 1
          },
          "name": {
            "type": "string",
            "description": "Table or worksheet display name.",
            "minLength": 1
          },
          "index": {
            "type": "integer",
            "minimum": 0,
            "description": "Zero-based display position when exposed."
          },
          "rowCount": {
            "type": "integer",
            "minimum": 0,
            "description": "Configured or observed row count."
          },
          "columnCount": {
            "type": "integer",
            "minimum": 0,
            "description": "Configured or observed column count."
          }
        }
      }
    },
    "nextPageToken": {
      "type": "string",
      "description": "Opaque token to request the next page of tables; absent when the result is complete.",
      "minLength": 1
    }
  }
}
notion.search_rows

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:search_rows:1.0.0:notion",
  "type": "object",
  "description": "Target container, filter, and pagination selectors.",
  "additionalProperties": false,
  "required": [
    "documentId"
  ],
  "properties": {
    "documentId": {
      "type": "string",
      "description": "Provider identifier of the database, base, workbook, or equivalent document.",
      "minLength": 1
    },
    "tableId": {
      "type": "string",
      "description": "Table, worksheet, collection, or view identifier when the provider requires one.",
      "minLength": 1
    },
    "query": {
      "type": "string",
      "description": "Free-text row search query.",
      "minLength": 1
    },
    "filter": {
      "type": "object",
      "description": "Provider-supported structured filter expression.",
      "additionalProperties": true
    },
    "pageSize": {
      "type": "integer",
      "description": "Maximum number of matching rows to return in one page.",
      "minimum": 1,
      "maximum": 100,
      "default": 50
    },
    "pageToken": {
      "type": "string",
      "description": "Opaque continuation token from a previous matching row page.",
      "minLength": 1
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:search_rows:output:1.0.0:notion",
  "type": "object",
  "description": "One page of rows matching the query.",
  "additionalProperties": false,
  "required": [
    "rows"
  ],
  "properties": {
    "rows": {
      "type": "array",
      "description": "Matching rows.",
      "items": {
        "type": "object",
        "description": "A normalized row or database record.",
        "additionalProperties": false,
        "required": [
          "rowId",
          "values"
        ],
        "properties": {
          "rowId": {
            "type": "string",
            "description": "Provider identifier of the row or record.",
            "minLength": 1
          },
          "values": {
            "type": "object",
            "description": "Field names and values stored on the row.",
            "additionalProperties": true
          },
          "createdAt": {
            "type": "string",
            "format": "date-time",
            "description": "Creation timestamp when the provider exposes it."
          },
          "updatedAt": {
            "type": "string",
            "format": "date-time",
            "description": "Most recent update timestamp when exposed."
          }
        }
      }
    },
    "nextPageToken": {
      "type": "string",
      "description": "Opaque token to request the next page of matching rows; absent when the result is complete.",
      "minLength": 1
    }
  }
}
notion.update_row

Input schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:update_row:1.0.0:notion",
  "type": "object",
  "description": "Target row and replacement field values.",
  "additionalProperties": false,
  "required": [
    "documentId",
    "rowId",
    "values"
  ],
  "properties": {
    "documentId": {
      "type": "string",
      "description": "Provider identifier of the database, base, workbook, or equivalent document.",
      "minLength": 1
    },
    "tableId": {
      "type": "string",
      "description": "Table, worksheet, collection, or view identifier when the provider requires one.",
      "minLength": 1
    },
    "rowId": {
      "type": "string",
      "description": "Provider identifier of the row or record.",
      "minLength": 1
    },
    "values": {
      "type": "object",
      "description": "Fields to merge into the existing row.",
      "additionalProperties": true
    }
  }
}

Output schema

JSON
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "urn:eyeball:spreadsheets_databases:update_row:output:1.0.0:notion",
  "type": "object",
  "description": "The updated row.",
  "additionalProperties": false,
  "required": [
    "row"
  ],
  "properties": {
    "row": {
      "type": "object",
      "description": "A normalized row or database record.",
      "additionalProperties": false,
      "required": [
        "rowId",
        "values"
      ],
      "properties": {
        "rowId": {
          "type": "string",
          "description": "Provider identifier of the row or record.",
          "minLength": 1
        },
        "values": {
          "type": "object",
          "description": "Field names and values stored on the row.",
          "additionalProperties": true
        },
        "createdAt": {
          "type": "string",
          "format": "date-time",
          "description": "Creation timestamp when the provider exposes it."
        },
        "updatedAt": {
          "type": "string",
          "format": "date-time",
          "description": "Most recent update timestamp when exposed."
        }
      }
    }
  }
}

Authentication

PropertyValue
Auth classoauth2
Required scopesNone
Optional scopesNone
Credential fieldsNone

Credentials are resolved inside the executor by CredentialProvider. They never belong in tool input, x_provider, model context, logs, or execution output.

Provider-specific extensions

This manifest declares no provider-specific schema extensions. Use only canonical fields.

Provider differences may appear only under x_provider.notion and only when the schema above declares them.

Sync and async behavior

All tools are synchronous by nature, but callers may choose mode: "async" to queue them.

Mutations require a stable Idempotency-Key. The TypeScript SDK accepts it as idempotencyKey; it is never part of the JSON request body.

REST example

Bash
curl "$EYEBALL_EXECUTOR_URL/v1/execute" \
  -H "Authorization: Bearer $EYEBALL_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: docs:notion.create_row:demo-1' \
  --data '{"tool":"notion.create_row","userId":"demo_user","input":{"documentId":"example_documentId","values":{}},"mode":"sync"}'

Mock support

Point EYEBALL_EXECUTOR_URL at a mock-configured executor to run through the real catalog, validation, credential seam, adapter, normalized errors, and execution records with no Notion account. Mock selection changes the executor endpoint and trusted provider base-URL configuration, never the execute request.

Limitations

  • This page describes the manifest's explicit P0 subset, not every operation offered by the provider.
  • Provider account policy, consent UI, quota details, and current wire compatibility still require a real-provider certification pass.
  • Fields outside the canonical schemas and declared x_provider extensions are rejected.

Versions

ContractVersion
Runtime catalog1.1
Manifest catalog1.0
Manifest schema1.0
Sourceactivepieces-bridge
TierP0
Capabilitiesspreadsheets_databases

Next

Use Testing with mocks to exercise this toolkit before connecting a live provider account.