Skip to main content
The Notra CLI gives you scriptable access to your workspace. List and edit posts, queue generation jobs, connect GitHub repos, and manage schedules without leaving your terminal.

Install

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

Authentication

The CLI authenticates with a Notra API key. You have three options.

Browser-based login

notra auth login
This opens the dashboard, has you confirm the new key, and writes it to local config.
Use notra auth login --no-browser on a remote machine to print the URL instead of opening a browser.

Paste an existing key

notra init
Prompts for your API key interactively, or pass it directly:
notra init --api-key ntra_xxxxxxxxxxxxxxxxxxxxxx

Per-command override

Skip stored config entirely with the NOTRA_API_KEY env var or a --api-key flag:
NOTRA_API_KEY=ntra_xxx notra posts list
notra posts list --api-key ntra_xxx
Manage keys yourself in Developer → API Keys in the dashboard. See Authentication for details.

Configuration

Local config lives at ~/Library/Preferences/notra-cli-nodejs/config.json (macOS) or the platform equivalent.
notra config path
notra config get
notra config get api-key
notra config set base-url https://api.usenotra.com
notra config set api-key ntra_xxx
Sign out to remove the stored key:
notra auth logout

Quickstart

notra auth login
notra integrations github --owner usenotra --repo notra
notra brands generate --website-url https://usenotra.com --wait
notra posts generate --content-type changelog --lookback last_7_days --wait
notra posts list --status draft --limit 10

Posts

Manage generated content.
CommandDescription
notra posts listList posts in the current organization
notra posts get <postId>Fetch a single post
notra posts generateQueue an async post-generation job
notra posts status <jobId>Read the status of a generation job
notra posts update <postId>Update title, slug, markdown, or status
notra posts delete <postId>Delete a post

List with filters

notra posts list --status draft --limit 10
notra posts list --content-type changelog,blog_post --sort desc
notra posts list --brand brand_abc --json

Read a post

notra posts get post_abc123
notra posts get post_abc123 --markdown > post.md

Generate content

notra posts generate \
  --content-type changelog \
  --brand brand_abc \
  --github-integration integration_xyz \
  --lookback last_7_days \
  --wait
--wait polls until the job finishes. Drop it to return the jobId immediately and check later with notra posts status <jobId> --watch.

Update content

notra posts update post_abc123 --title "New title" --status published
notra posts update post_abc123 --markdown-file ./post.md
cat post.md | notra posts update post_abc123 --markdown-file -

Delete

notra posts delete post_abc123 --yes

Brand identities

Manage brand identities and run brand-identity generation jobs.
CommandDescription
notra brands listList brand identities
notra brands get <brandId>Fetch a single brand identity
notra brands generateQueue an async brand-identity generation from a website URL
notra brands status <jobId>Read the status of a brand-identity generation job
notra brands update <brandId>Update name, tone, instructions, or default flag
notra brands delete <brandId>Delete a non-default brand identity

Generate from a website

notra brands generate --website-url https://acme.com --name Acme --wait

Update settings

notra brands update brand_abc --tone Professional
notra brands update brand_abc --custom-instructions "Always include PR links"
notra brands update brand_abc --default
Tone options: Conversational, Professional, Casual, Formal.

Integrations

Connect GitHub, Linear, and Slack as content sources.
CommandDescription
notra integrations listList GitHub, Linear, and Slack integrations
notra integrations githubConnect a GitHub repository
notra integrations remove <integrationId>Disconnect a GitHub or Linear integration

Connect a repository

notra integrations github --owner usenotra --repo notra
notra integrations github --owner acme --repo website --branch develop
notra integrations github --owner acme --repo private-app --token ghp_xxx
A token is only required for private repos without an installed GitHub App.

Schedules

Manage cron-based content-generation schedules.
CommandDescription
notra schedules listList schedules
notra schedules createCreate a new schedule
notra schedules update <scheduleId>Replace a schedule (PATCH semantics)
notra schedules delete <scheduleId>Delete a schedule

Create a schedule

notra schedules create \
  --name "Daily changelog" \
  --frequency daily --hour 9 --minute 0 \
  --output-type changelog \
  --repository repo_abc \
  --lookback yesterday \
  --enabled
For weekly/monthly schedules, pass --day-of-week (0-6) or --day-of-month (1-31).

From a JSON file

notra schedules create --config-file ./schedule.json
cat schedule.json | notra schedules create --config-file -

Global flags

These work on every command:
FlagDescription
--jsonPrint machine-readable JSON instead of a formatted table
--api-key <value>Override the configured key (or NOTRA_API_KEY env var)
--base-url <value>Override the API base URL (or NOTRA_BASE_URL env var)
Pipe --json output through jq for scripting:
notra posts list --status draft --json | jq -r '.posts[].id'

Source

The CLI is open source and lives alongside the rest of Notra. See the Notra GitHub repository for the source and to report issues.
Last modified on April 28, 2026