Upload a file for an attachment field
Upload file bytes as multipart/form-data under file and return { id, name, size, mime, key, uploadedAt }.
POST/v1/tables/{tableId}/files
Set recordId to identify the record the file will belong to; unused uploads can be swept. Write the descriptor to an attachment field in a separate ordinary record write, with the same permission check, op log, and undo as any other value. Reject descriptors not returned by this operation: key identifies an R2 object, and inventing one could name someone else’s bytes.
Requires the records:write scope. Operation files.upload. Not an MCP tool. A model cannot send bytes: a tool call is JSON, and an upload is a multipart file. Upload with the CLI (--file ./path) or from the grid, then attach the returned descriptor with an ordinary record write, which is a tool. CLI: grid82 files upload (npx grid82).
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
tableId | string | yes |
Headers
| Name | Type | Required | Description |
|---|---|---|---|
Idempotency-Key | string | no | Any unique string. Sending the same key with the same request again returns the first response (marked Idempotency-Replayed: true) instead of running it twice. Reusing it for a different request is refused with 409. Kept for 24 hours. Up to 255 characters. |
Request body
Sent as multipart/form-data.
| Field | Type | Required | Description |
|---|---|---|---|
file | string | yes | The bytes. |
recordId | string | yes | The record the file will be attached to, so an upload never attached can be swept. |
Response
Success
dataobjectrequiredRefused
errorobjectrequired