@frequencyads/adstudio-cli
v0.1.3
Published
Adstudio command-line interface, built on @frequencyads/cli-library
Readme
adstudio-cli
Adstudio command-line interface, built on @frequencyads/cli-library.
Install
npm install -g @frequencyads/adstudio-cli
# or
pnpm add -g @frequencyads/adstudio-cliRequires Node >=18.
Verify
which adstudio
adstudio --helpUpgrade
npm update -g @frequencyads/adstudio-cliLocal development
If you're hacking on the CLI itself:
git clone https://github.com/FrequencyAds/adstudio-cli.git
cd adstudio-cli
pnpm install
pnpm build
sudo npm link # global symlink to your working copyUsage
# Landing page (no args, shows status + hints)
adstudio
# See every command + subcommand
adstudio --help
adstudio <group> --help # e.g. adstudio production --helpSession
adstudio login # interactive
adstudio login --email [email protected] --api-url http://localhost:3333
adstudio --json login --email [email protected] --password '...' # non-interactive
adstudio whoami
adstudio logoutTenant
adstudio tenant list # tenants you can access
adstudio tenant current # active tenant on the server
adstudio tenant use <id> # switch active tenantCampaign / flight / brand / user
adstudio campaign list # auto-uses hasSuperAdmin if you're admin
adstudio campaign list --mine-only # force the user_role-joined query
adstudio campaign list --search foo --per-page 50
adstudio campaign get <id>
adstudio campaign delete <id>
adstudio flight list --campaign <id> # --campaign or --show required
adstudio flight list --show <id>
adstudio flight get <id>
adstudio brand list
adstudio brand get <id>
adstudio brand create --name "Acme" --website https://acme.com
adstudio user me
adstudio user listApplications (ad units)
adstudio application list --campaign <id>
adstudio application list --flight <id>
adstudio application get <id>
adstudio application drafts <id> # list drafts
adstudio application release <id> # current release
adstudio application delete <id>Production requests
adstudio production list # all in active tenant
adstudio production list --campaign <id>
adstudio production list --flight <id>
adstudio production get <id>
adstudio production timeline <id> # comments + events
adstudio production comment <id> --text "lgtm"
adstudio production set-due-date <id> --date 2026-06-01
adstudio production-schedule get <projectId>Vetting
adstudio vetting list # all in active tenant
adstudio vetting get <id>
adstudio vetting by-show <showId> # brand-vetting requests for a show
adstudio vetting by-brand <brandId> # last request for a brandDistribution
adstudio distribution list
adstudio distribution get <id>
adstudio distribution delete <id>
adstudio distribution ips # all IP allocations
adstudio distribution ips --campaign <id> # scoped to a campaignConcepts
adstudio concept list
adstudio concept get <id>
adstudio concept products
adstudio concept verticalsNetworks
adstudio network get <id>
adstudio network by-type <type> # e.g. 'podcast', 'streaming'Playlists
adstudio playlist for-app <appId> # playlists on an application
adstudio playlist tracks <playlistId> # tracks in a playlist
adstudio playlist vendor # vendor-supplied playlistsMultimedia
adstudio multimedia upload-url <kind> # kind = video|video-v2|audio|image|document|private-document|text
adstudio multimedia video <key> # video metadata by key
adstudio multimedia transcoding-job <id> <draftId> [--campaign]
adstudio multimedia fonts # list available fontsAsset library
adstudio asset files # all asset files in tenant
adstudio asset files --campaign <id> # files for a campaign
adstudio asset file <id>
adstudio asset delete-file <id>
adstudio asset projects # list asset projects
adstudio asset project <id>
adstudio asset project-countTemplates
adstudio template list
adstudio template get <id>
adstudio template categories
adstudio template category <id>Dynamic audio
adstudio dynamic-audio rules <appId> # rules for an application
adstudio dynamic-audio draft-rules <draftId> # rules for a draft
adstudio dynamic-audio signals # all signals
adstudio dynamic-audio draft-signals <draftId> # signals on a draft
adstudio dynamic-audio segments <appId> <draftId> # mixer segmentsConfig
adstudio config show
adstudio config set-api-url http://localhost:3333
adstudio config use <profile> # switch profileJSON mode (for scripts / AI agents)
Global --json flag suppresses the spinner, chalk colors, and logger
output. Every command emits the raw API response as JSON to stdout;
errors come back as {"error": "..."} on stderr with exit code 1.
adstudio --json whoami | jq '.isAdmin'
adstudio --json campaign list --per-page 50 | jq '.rows[].id'
adstudio --json flight list --campaign 12345 | jq '.[] | {id, name}'
adstudio --json production list --campaign 12345 | jq '.[] | select(.status=="awaiting_approval")'
adstudio --json template list | jq '.[].name'
adstudio --json login --email [email protected] --password '...' # non-interactiveCoverage
19 of the ~36 backend modules under src/www/modules/ are surfaced. Wired so far:
| Group | Subcommands |
|---|---|
| login / logout / whoami | session lifecycle |
| tenant | list, current, use |
| config | show, set-api-url, use |
| campaign | list, get, delete |
| flight | list, get |
| brand | list, get, create |
| user | me, list |
| application | list, get, drafts, release, delete |
| production | list, get, timeline, comment, set-due-date |
| production-schedule | get |
| vetting | list, get, by-show, by-brand |
| distribution | list, get, delete, ips |
| concept | list, get, products, verticals |
| network | get, by-type |
| playlist | for-app, tracks, vendor |
| multimedia | upload-url, video, transcoding-job, fonts |
| asset (assetlibrary) | files, file, delete-file, projects, project, project-count |
| template | list, get, categories, category |
| dynamic-audio | rules, draft-rules, signals, draft-signals, segments |
Storage
Config + session cookies live in ~/.adstudio/config.json (mode 0600).
Delete the file to fully reset.
