Developers
ApplyTOP CLI
The applytop package is a command-line
interface and Node client for the ApplyTOP public API. Search jobs and access your alerts,
matches, saved jobs, and CVs — including AI-powered ATS scoring, CV tailoring, and cover-letter generation —
straight from your terminal or your own code.
Install
Install the CLI globally with npm. It is plain JavaScript (ESM), needs Node ≥ 18, and is zero-config to get started.
npm install -g applytop
Or run it without installing, using npx:
npx applytop jobs:search -q engineer
Pro requirement
Pro feature. The CLI and API require an active
Pro subscription. Free accounts can't create keys,
and calls from a non-Pro account return 403 pro_required.
You need an API key to use the CLI. Keys are self-serve on your
API Keys page and look like
at_live_…. See the
REST API docs
for getting a key.
Authenticate
Log in once and your key is stored at ~/.applytop/credentials.json.
auth:login prompts for your key, validates it, and saves it:
applytop auth:login # prompts for your key, validates it, saves it
applytop auth:login --api-key at_live_xxx
applytop auth:status # who am I?
applytop auth:logout
Or set an environment variable instead of logging in:
export APPLYTOP_API_KEY=at_live_xxx
Or pass --api-key per command.
Precedence: the --api-key flag wins, then the
APPLYTOP_API_KEY environment variable, then the saved credentials
file at ~/.applytop/credentials.json.
Usage & global options
Commands are namespaced resource:action and
print JSON to stdout, so they pipe cleanly into jq:
applytop jobs:search -q "react developer" --work-model remote --limit 5 | jq '.jobs[].title'
applytop account:me
applytop account:credits
applytop matches:list --min-score 60 --limit 10
applytop cvs:list
applytop cvs:tailor <jobId> --cv <cvId> # costs 1 credit
applytop cvs:pdf <cvId> -o resume.pdf
Run applytop --help or
applytop <command> --help for full details.
Global options
| Flag | Meaning |
|---|---|
| --api-key <key> | API key (overrides env + saved file). |
| --api-url <url> | API base URL (default https://applytop.com/api/v1). |
| --insecure | Allow self-signed TLS certs (dev only). |
| --raw | Compact single-line JSON. |
| --version | Print the CLI version. |
| --help | Print help for the CLI or a command. |
Self-hosted / dev. Point the CLI at another base URL with
APPLYTOP_API_URL (or --api-url), and
add --insecure only for self-signed dev certs:
export APPLYTOP_API_URL=https://dev.applytop.com/api/v1
applytop --insecure account:me
Command reference
Every command and its options. Commands marked 1 credit spend one AI credit from the key owner's balance; everything else is free.
Auth
| Command | Description |
|---|---|
| auth:login | Save an API key (validates it). --api-key, --api-url |
| auth:status | Show authentication status (key source, owner, tier). |
| auth:logout | Remove the saved credentials. |
Account
| Command | Description |
|---|---|
| account:me | Your profile. |
| account:credits | Your AI-credit balance and tier. |
Jobs
| Command | Description |
|---|---|
| jobs:search | Search the public jobs pool. -q/--query, --country, --work-model, --type, --limit, --page |
| jobs:get | One pool job. --id | --slug |
Alerts
| Command | Description |
|---|---|
| alerts:list | Your job alerts. --limit, --offset, --status, --search |
| alerts:jobs <alertId> | Matched jobs for one alert. --limit, --min-score, --search |
Matches & Saved
| Command | Description |
|---|---|
| matches:list | Your matched jobs across all alerts. --min-score, --country, --work-model, --search, --sort-by, --limit, --offset |
| matches:get <matchId> | One matched job, full detail. |
| saved:list | Your saved jobs. --limit, --offset, --country, --work-model, --search |
CVs & AI tools
| Command | Description |
|---|---|
| cvs:list | Your CVs (metadata). |
| cvs:get <cvId> | One CV, full detail. |
| cvs:pdf <cvId> | Download a CV as PDF. --template, -o/--output |
| cvs:ats-score <cvId> | ATS score for a CV. 1 credit |
| cvs:tailor <jobId> | CV tailored to a job. --cv, --template 1 credit |
| cvs:cover-letter <jobId> | Cover letter for a job. --cv, --hiring-manager 1 credit |
<jobId> for the tailoring commands accepts a pool job id
(from jobs:search) or one of your
matched job ids (from matches:list). If you omit
--cv, your default CV is used.
Examples
applytop jobs:search -q engineer --limit 5
applytop jobs:get --slug senior-react-engineer-abc123
applytop alerts:list --status active
applytop alerts:jobs alr_abc123 --min-score 70
applytop matches:list --min-score 60 --limit 10
applytop saved:list --work-model remote
applytop cvs:ats-score cv_abc123 # 1 credit
applytop cvs:tailor job_abc123 --cv cv_abc123 # 1 credit
applytop cvs:cover-letter job_abc123 --hiring-manager "Alex Smith" # 1 credit
applytop cvs:pdf cv_abc123 -o resume.pdf
Programmatic use
The same package exports a client class — use it directly from your own code:
import { ApplyTop, ApplyTopError } from 'applytop';
const client = new ApplyTop({ apiKey: process.env.APPLYTOP_API_KEY });
const { jobs, total } = await client.jobsSearch({ q: 'engineer', work_model: 'remote', limit: 5 });
console.log(total, jobs.map((j) => j.title));
try {
const result = await client.cvsTailorToJob({ jobId, cvId }); // 1 credit
console.log(result.cvId, 'balance:', result.balance);
} catch (err) {
if (err instanceof ApplyTopError && err.code === 'insufficient_credits') {
console.error(`Need ${err.required}, have ${err.balance}`);
} else {
throw err;
}
}
Each method returns the response data:
me(),
credits(),
jobsSearch(),
jobsGet(),
alertsList(),
alertsJobs(),
matchesList(),
matchesGet(),
savedList(),
cvsList(),
cvsGet(),
cvsAtsScore(),
cvsTailorToJob(),
cvsCoverLetterForJob(), and
cvsDownloadPdf() (resolves to a Buffer).
Output & errors
Success prints the response payload as JSON to stdout (exit 0).
Errors print { "error": { "code", "message" } } to
stderr and exit 1.
{
"error": {
"code": "insufficient_credits",
"message": "Not enough AI credits",
"balance": 0,
"required": 1,
"tier": "free"
}
}
Common error codes:
| Code | Meaning |
|---|---|
| auth_required / invalid_api_key | Missing / invalid key. |
| pro_required | Valid auth, but the account isn't Pro — the CLI is a Pro feature. |
| insufficient_credits | Out of AI credits (includes balance, required, tier). |
| premium_template_requires_pro | A Pro-only PDF template on a free plan. |
| not_found | Resource missing or not yours. |
| rate_limited | Per-key rate limit (100/min) exceeded. |
Credits
cvs:tailor,
cvs:cover-letter, and
cvs:ats-score each cost
1 AI credit (charged to the key owner; check with
account:credits). Everything else is free.
| Command | Cost |
|---|---|
| cvs:tailor | 1 credit |
| cvs:cover-letter | 1 credit |
| cvs:ats-score | 1 credit |
| Everything else | Free |
A failed AI generation is automatically refunded. When you don't have enough credits, the call returns
insufficient_credits and you aren't charged.
Ready to script it?
Install the CLI, paste a key, and run your first command in minutes.