For the complete documentation index, see llms.txt. Every page is also served as Markdown at its URL followed by .md.

standards
RecordsCLI

Records

Read, search, write, move and delete records of any object, and attach a local file to one of them, from a terminal.


standards records covers CRUD and full-text search on every object your key can read, records attach-document uploads a file onto a record in one call (see Files and documents), and records access shares a private record with other members.

List

standards records list contacts --limit 20 --sort createdAt:desc

The response is { data, page }. Pipe it through jq .data to work on the rows.

FlagDescription
--limit <n>Page size.
--offset <n>Rows to skip.
--sort <rule>One rule, attribute:direction. Direction defaults to asc.
--filter <json>The filter tree as JSON, passed as-is.
--fields <names>Comma-separated reference attributes to hydrate. "" hydrates none; omit the flag for all.
--count <mode>none, estimated or exact. Omit it and page.total is null.
standards records list contacts --filter '{"combinator":"and","rules":[{"attribute":"status","operator":"is","value":"active"}]}' --count exact

Get

standards records get contacts <recordId>

Create

standards records create contacts --data '{"firstName":"Alice","email":"[email protected]"}'

Single-quote the JSON so the shell keeps the double quotes.

On a hierarchical object, --parent <id> creates the record under that parent. A parent is set only at creation: update refuses it, and move changes it.

standards records create notes --data '{"title":"Kickoff"}' --parent <parentRecordId>

Update

update sends a PUT. The API validates the merged record, so send only the attributes that change.

standards records update contacts <recordId> --data '{"firstName":"Alicia"}'

Delete

standards records delete contacts <recordId>

The command prints Record <id> deleted. and nothing else.

To see what a delete would take first, deletion-count counts it for up to 100 records. It answers { incomingReferences, descendants }: the links from other records the delete would break, and the sub-records beyond the ones you name that would go to the trash with them.

standards records deletion-count notes <recordId> <otherRecordId>

Move a record

On a hierarchical object, move puts a record and its sub-records under another parent, and move-impact shows first who would gain and lose access. Both take exactly one of --parent <id> or --top-level: neither, or both, is refused before a request is sent.

standards records move-impact notes <recordId> --parent <newParentId>
standards records move notes <recordId> --parent <newParentId>
standards records move notes <recordId> --top-level
CommandPrints
move-impact <object> <id>The impact: added, removed and roleChanged actor ids, workspaceBefore, workspaceAfter, and subtreeSize, the record and its sub-records.
move <object> <id>The moved record.

The subtree takes the access of its new top-level record. move does not send the impact back, so it is not refused when the sharing changed after move-impact was read: run the two back to back. Who may move a record, and every refusal, is on Sharing.

--query is required. The other flags are the ones list takes.

standards records search contacts --query "alice" --limit 10
standards records search contacts --query "alice" --sort updatedAt:desc --count estimated

Export

Download the records as CSV, with the columns you name, in that order. --columns is required; the filter and sort flags are the ones list takes.

standards records export deals --columns name,stage,amount --sort name:asc -o deals.csv
FlagDescription
--columns <list>Comma-separated attribute names, in order.
--query <q>Full-text query.
--filter <json>The filter tree as JSON, passed as-is.
--sort <attr:dir>One rule, attribute:direction.
--timezone <zone>IANA time zone dates and times are written in, and @today resolved in. Default: this machine's zone.
-o, --output <file>Write to a file. Without it the CSV goes to stdout.

Besides the object's attributes, --columns accepts the four system columns createdAt, updatedAt, createdBy and lastUpdatedBy. The times are written as YYYY-MM-DD HH:mm in --timezone, and the actors by display name. Any other name fails with Unknown export columns, and nothing is written.

An export covers at most 100 000 records. A larger match prints the EXPORT_TOO_LARGE error, writes nothing and exits non-zero: narrow it with --filter and run it again.

Set a record's image to the logo of a company's domain. The domain can be a website or a bare domain: https://www.Acme.com reads as acme.com.

standards records set-logo companies <recordId> acme.com

The logo counts as an image a person chose, so no later change to the record's data replaces it. The record's icon and any previous image are removed. When the domain is not one, or no logo is known for it, the command prints SCHEMA_VALIDATION_FAILED and exits non-zero.

Attach a document

Upload a local file and attach it to a record in one call.

standards records attach-document contacts <recordId> --file ./contract.pdf
FlagDescription
--file <path>Required. The local file to upload.
--attribute <name>The document attribute to attach to.
--parent-id <folderId>The folder to place the document in.
--title <title>Document title. Defaults to the file name.
standards records attach-document contacts <recordId> --file ./contract.pdf --attribute contract --title "Signed contract"

The response is the created document. Read its files and text with Documents and files.

Access

Share a private record with named members of the workspace, each as a reader or an editor. See Sharing for what each level allows.

standards records access list deals <recordId>
standards records access grant deals <recordId> <actorId> --role reader
standards records access revoke deals <recordId> <actorId>
standards records access clear deals <recordId>
CommandEffect
list <object> <id>Prints the audience: { recordId, visibility, ownedBy, viewerAccess, grants }. viewerAccess is what you may do with the record: owner, editor, reader or workspace.
grant <object> <id> <actorId> --role <role>Shares the record, or changes the member's role. --role is required: reader or editor. Any other value is refused before a request is sent.
revoke <object> <id> <actorId>Removes the share. Removing a share that does not exist changes nothing.
clear <object> <id>Removes every manual share: the record is private again.

grant, revoke and clear print the audience after the change. Only the owner or an editor of a private record can share it, and a workspace record is refused with RECORD_GRANT_ON_WORKSPACE.

Meetings of a record

standards meetings for-record <recordId> lists the meetings a record's email addresses appear in. It takes the filters of meetings list (--search, --since, --before, --addresses, --order, --limit, --offset), plus:

FlagDescription
--email-attributes <ids>Comma-separated email attribute IDs to match participants on.
--count <mode>estimated or exact adds total, the number of calls the record's meetings tab lists, and totalIsExact, false when total is a lower bound. none returns total: null. Omit it and the response has no total: counting reads every linked meeting.
standards meetings for-record <recordId> --email-attributes <attributeId> --count exact

Next steps