Skip to main content
The Notra CLI is published on npm as notra and installs a notra binary. It wraps the public API (through the official TypeScript SDK) so you can script your workspace: posts, brand identities, integrations, schedules, and the full GEO surface (projects, prompts, competitors, scans, visibility, content briefs, agent readiness, AI traffic). Source: github.com/usenotra/notra-cli.

Install

You can also run any command without installing using npx notra <command> or bunx notra <command>. Verify the install:

Authentication

There are two ways to authenticate. Use the browser login when a person is at the keyboard, and an API key when the CLI runs unattended.
This starts an OAuth device authorization flow: the CLI prints a short verification code, opens the Notra sign-in page in your browser, and waits until you approve the code. Access and refresh tokens are saved to the local config file and refreshed automatically, so you do not copy any tokens by hand. The session acts as you, inside the organization you pick during sign-in. Every request is checked against the permissions attached to that session, the same way API requests are checked against key scopes.
On a remote machine or inside a container, use notra auth login --no-browser to print the verification URL instead of opening a browser.
For scripts that drive the login themselves, notra auth login --json streams newline-delimited JSON with one object per line: a pending event that carries the verification URL and code, followed by either a ready event or an error event. Sign out and remove the stored tokens:

Use an API key (headless and CI)

An API key bypasses the login entirely. Create one under API Keys in the dashboard with the scopes the job needs (see Authentication), then pass it in one of three ways:
notra init does the same thing interactively: it prompts for the key, or accepts --api-key directly.
A key only carries the scopes you selected when you created it. Commands that need a scope the key does not have fail with exit code 3.

Configuration

The local config file lives at the OS-standard config path (on macOS: ~/Library/Preferences/notra-cli-nodejs/config.json). It is created with owner-only permissions.
Config keys are api-key and base-url. Environment variables override stored values:

Output

Commands print formatted tables in a terminal and switch to JSON automatically when stdout is redirected or piped. Explicit output flags win over that automatic choice: --json always prints JSON, and notra posts get <postId> --markdown always prints Markdown.

Quickstart

Run notra <topic> --help to see every command and flag for a topic.

Posts

List with filters

--status and --content-type accept comma-separated lists. --sort is asc or desc by creation date.

Generate content

--content-type is one of changelog, blog_post, linkedin_post, or twitter_post. --lookback is one of current_day, yesterday, last_7_days, last_14_days, or last_30_days. --github-integration and --linear-integration are repeatable. --wait polls until the job finishes (--poll-interval seconds, --timeout-mins minutes); drop it to get the jobId back immediately and check later with notra posts status <jobId> --watch.

Update content

--status is draft or published.

Delete

Brand identities

Generate from a website

Update settings

Tone options: Conversational, Professional, Casual, Formal. Pass --custom-tone for a free-text tone instead. --company-name and --company-description accept an empty string to clear the value.

Integrations

Connect a repository

--branch defaults to the repository’s default branch. A token is only required for private repositories that do not have the Notra GitHub App installed.

Schedules

Manage the cron-based schedules described in Scheduled Automation.

Create a schedule

For weekly schedules pass --day-of-week (0-6, Sunday is 0); for monthly schedules pass --day-of-month (1-31). --output-type is one of changelog, blog_post, linkedin_post, or twitter_post; image schedules are not available from the CLI yet, so create those in the dashboard or through POST /v1/schedules. --repository is repeatable. Add --brand-voice <brandIdentityId> to pin a brand identity and --auto-publish to publish changelogs and blog posts instead of saving drafts. Times are in UTC.

From a JSON file

The JSON body matches the POST /v1/schedules request shape. When --config-file is set, all other flags are ignored.

GEO

GEO commands are scoped to a project. Run notra geo projects list first to find the project ID, then pass it as the first argument to the other commands. Project-scoped commands need a plan that includes GEO. Examples:
Scans, sequence runs, and content briefs use billed AI credits. notra geo traffic token and rotate-token print secrets only with --show-token; treat that output as a secret.

Global flags

These work on every command: Destructive commands (delete, remove, rotate-token) ask for confirmation unless you pass -y or --yes.

Exit codes

Source

The CLI is open source at github.com/usenotra/notra-cli. Report issues there.
Last modified on September 2, 2026