voluum-cli is community-supported software released under the MIT License. It is not an official Voluum product and is not endorsed or supported by Voluum. It uses publicly documented Voluum APIs.
Lightweight Bun/TypeScript CLI for common Voluum admin and reporting operations.
bun install
bun run buildOptional local link:
bun linkThen use:
voluum --helpOr run directly without linking:
node dist/index.js --helpGlobal options (available for all commands):
--baseUrl <url>override API base URL--token <token>override auth token--jsonoutput as compact JSON (default is TOON — required when piping tojq)--prettyoutput as pretty-printed JSON (implies--json)--silentsuppress stdout output--out <file>write full JSON output to file
Default output format is TOON (Token-Oriented Object Notation), a compact human-readable format that is 30–60% smaller than JSON. Use --json or --pretty for JSON, or --out to save full JSON to a file.
Login with email/password:
voluum auth login --email agent@example.com --password 'secret'Login with access keys:
voluum auth login --accessKeyId '...' --accessKey '...'Who am I:
voluum auth whoamiLogout (clears local stored token):
voluum auth logoutCreate and update commands require a JSON body via one of:
--data '<json>'— inline JSON string--file <path>— path to a JSON file (useful for complex or large payloads)
These flags are mutually exclusive; exactly one is required.
# Inline JSON
voluum offers create --data '{"name":"My Offer","url":"https://example.com/offer"}'
# From file
voluum offers create --file ./offer.json
# Update requires both --id and data
voluum offers update --id <id> --file ./updated-offer.jsonList campaigns:
voluum campaigns listGet campaign by ID:
voluum campaigns get --id <id>Create campaign:
voluum campaigns create --data '{"name":"My Campaign"}'
voluum campaigns create --file ./campaign.jsonUpdate campaign:
voluum campaigns update --id <id> --data '{"name":"Updated Name"}'
voluum campaigns update --id <id> --file ./campaign.jsonDelete campaign:
voluum campaigns delete --id <id>List all offers:
voluum offers listGet offer by ID:
voluum offers get --id <id>Create offer:
voluum offers create --data '{"name":"My Offer","url":"https://example.com"}'
voluum offers create --file ./offer.jsonUpdate offer:
voluum offers update --id <id> --data '{"name":"Updated Offer"}'
voluum offers update --id <id> --file ./offer.jsonDelete offer:
voluum offers delete --id <id>List all landers:
voluum landers listGet lander by ID:
voluum landers get --id <id>Create lander:
voluum landers create --data '{"name":"My Lander","url":"https://example.com/lp"}'
voluum landers create --file ./lander.jsonUpdate lander:
voluum landers update --id <id> --data '{"name":"Updated Lander"}'
voluum landers update --id <id> --file ./lander.jsonDelete lander:
voluum landers delete --id <id>List all flows:
voluum flows listGet flow by ID:
voluum flows get --id <id>Create flow:
voluum flows create --data '{"name":"My Flow"}'
voluum flows create --file ./flow.jsonUpdate flow:
voluum flows update --id <id> --data '{"name":"Updated Flow"}'
voluum flows update --id <id> --file ./flow.jsonDelete flow:
voluum flows delete --id <id>List all traffic sources:
voluum traffic-sources listGet traffic source by ID:
voluum traffic-sources get --id <id>Create traffic source:
voluum traffic-sources create --data '{"name":"My Traffic Source"}'
voluum traffic-sources create --file ./traffic-source.jsonUpdate traffic source:
voluum traffic-sources update --id <id> --data '{"name":"Updated Traffic Source"}'
voluum traffic-sources update --id <id> --file ./traffic-source.jsonDelete traffic source:
voluum traffic-sources delete --id <id>List all affiliate networks:
voluum affiliate-networks listGet affiliate network by ID:
voluum affiliate-networks get --id <id>Create affiliate network:
voluum affiliate-networks create --data '{"name":"My Network"}'
voluum affiliate-networks create --file ./network.jsonUpdate affiliate network:
voluum affiliate-networks update --id <id> --data '{"name":"Updated Network"}'
voluum affiliate-networks update --id <id> --file ./network.jsonDelete affiliate network:
voluum affiliate-networks delete --id <id>List all tracker domains:
voluum tracker-domains listGet tracker domain by ID:
voluum tracker-domains get --id <id>Create tracker domain:
voluum tracker-domains create --data '{"domain":"track.example.com"}'
voluum tracker-domains create --file ./domain.jsonUpdate tracker domain:
voluum tracker-domains update --id <id> --data '{"domain":"new.example.com"}'
voluum tracker-domains update --id <id> --file ./domain.jsonDelete tracker domain:
voluum tracker-domains delete --id <id>Summary report:
voluum reports summary \
--from 2026-02-01T00:00:00Z \
--to 2026-02-18T00:00:00Z \
--groupBy campaign \
--filters country=US,device=mobileRaw report:
voluum reports raw \
--from 2026-02-01T00:00:00Z \
--to 2026-02-18T00:00:00Z \
--limit 100Flexible query (sorting, pagination, custom columns):
voluum reports query \
--path /report/conversions \
--query from=2026-02-01,to=2026-02-18,limit=100,offset=100,sort=visits,direction=descSchema introspection:
voluum reports schema \
--path /report/conversions \
--query from=2026-02-01,to=2026-02-18 \
--groupable \
--type moneyPredefined breakdowns:
# By offer
voluum reports breakdown \
--by offer \
--from 2026-02-11T22:00:00.000Z \
--to 2026-02-18T22:00:00.000Z
# Offer performance in campaign context
voluum reports breakdown \
--by offer-by-campaign \
--campaignId <campaign-id> \
--from 2026-02-11T22:00:00.000Z \
--to 2026-02-18T22:00:00.000ZGET:
voluum api get /campaign --query status=active,limit=50POST:
voluum api post /report --body '{"from":"2026-02-01T00:00:00Z","to":"2026-02-18T00:00:00Z"}'This repository includes a community marketplace and plugin for Claude Code.
- Marketplace file:
.claude-plugin/marketplace.json - Plugin:
plugins/voluum-cli-assistant - Skills included:
voluum-command-composervoluum-setup-install
Quick install from Claude Code:
/plugin marketplace add markab21/voluum-cli
/plugin install voluum-cli-assistant@voluum-community-toolsDetailed docs:
docs/public/plugin-marketplace.mddocs/public/plugin-install.mddocs/public/voluum-api-notes.md
Config file: ~/.voluum-cli/config.json
export interface VoluumCliConfig {
baseUrl?: string;
token?: string;
tokenCreatedAt?: string;
tokenExpiresAt?: string;
lastLoginEmail?: string;
}Override priority:
- CLI flags
- Environment variables (
VOLUUM_BASE_URL,VOLUUM_TOKEN) - Local config file
The CLI attempts to persist config with file mode 0600 on Unix-like systems.
Edit src/endpoints.ts to adjust routes, auth header name, and token extraction fields.
These were validated against a real Voluum account:
from/tomust be rounded to the nearest hour (HH:00:00Z), otherwise Voluum returns400 BAD_REQUEST.- Use
--query-jsonwhen any value contains commas (for examplecolumnslists), because--queryparses comma-separatedk=vpairs. - For large accounts, small
limitvalues can produce partial views; raiselimitfor full-window analysis before ranking campaigns. - Sort requires two separate params:
sort=<field>anddirection=asc|desc. The combinedsort=field:descsyntax causes a400 INVALID_QUERYerror.
bun run dev -- --help
bun test
bun run build