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:descThe response is { data, page }. Pipe it through jq .data to work on the rows.
| Flag | Description |
|---|---|
--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 exactGet
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| Command | Prints |
|---|---|
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.
Search
--query is required. The other flags are the ones list takes.
standards records search contacts --query "alice" --limit 10standards records search contacts --query "alice" --sort updatedAt:desc --count estimatedExport
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| Flag | Description |
|---|---|
--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 logo
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.comThe 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| Flag | Description |
|---|---|
--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>| Command | Effect |
|---|---|
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:
| Flag | Description |
|---|---|
--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 exactNext steps
- Documents and files: manage the pack you just created.
- Objects and records: what a record is and how filters address attributes.
- Sharing: what a reader and an editor may do, and every refusal.
- CLI: output formats, exit codes and shell pitfalls.
- Book a demo