Skip to main content

Unofficial command-line interface for the Loxo recruiting ATS/CRM API

Reason this release was yanked:

mis-reports version as v0.1.0

Project description

loxo-cli

A fast, ergonomic command-line interface for the Loxo recruiting ATS/CRM REST API. It offers typed subcommands for the common resources (people, jobs, companies, deals, candidates, activities, webhooks, reference data) plus a generic loxo api escape hatch that can call any endpoint. Output is human-friendly tables on a terminal and clean JSON when piped, so it fits both interactive use and scripts.

Unofficial — not affiliated with Loxo, Inc.

Install

uvx loxo-cli          # run without installing
pipx install loxo-cli # or install as a user tool

Quickstart

loxo configure                       # set up a profile
loxo people list --query "engineer"  # human table
loxo people list --json | jq '.'     # JSON for scripts
loxo api GET jobs/123                # raw escape hatch

Configuration

Credentials resolve with the precedence flags > environment > config file.

Environment variables:

Variable Meaning
LOXO_API_KEY API bearer token
LOXO_API_SLUG Agency slug (the {slug} in every request URL)
LOXO_BASE_URL API base URL (default https://app.loxo.co/api)
LOXO_PROFILE Default profile name to use

The config file lives at ~/.config/loxo/config.toml (or $XDG_CONFIG_HOME/loxo/config.toml) and is written with 0600 permissions. Example:

default_profile = "prod"

[profile.prod]
slug = "acme"
base_url = "https://app.loxo.co/api"
api_key = "your-token"

[profile.staging]
slug = "acme-staging"
# Pull the key from a secrets manager instead of storing it in plaintext:
api_key_cmd = "op read op://Private/loxo-staging/credential"

api_key_cmd is run on demand and its stdout is used as the key, so the secret never has to live in the file. Set it without hand-editing the file via loxo configure --api-key-cmd "op read op://Private/loxo/credential". The key is never printed by loxo configure list, logged, or shown in --verbose output.

Commands

Group What it does
people List/search, get, create, update people
jobs List, get, create, update jobs
companies List/search, get, create, update companies
deals List, get, create, update deals
candidates List/get/add/update candidates under a job
activities List and add person events (activities)
webhooks Full CRUD for webhooks (with enum validation)
ref Reference lookups: job/activity/source/person types, lists, custom fields, hierarchies
api Generic escape hatch — call any endpoint directly
configure Create and list credential profiles

Custom (dynamic) fields are supported on writes via repeatable --field key=value (use key[]=value to force a list, e.g. hierarchy fields). Discover valid keys with loxo ref custom-fields.

Output

On a terminal, list and object results render as Rich tables. Pipe the command or pass --json to get machine-readable JSON; --jq '<path>' applies a small built-in selector (e.g. --jq '.[].id') without needing the jq binary.

Exit codes

Code Meaning
0 Success
1 Generic error
2 Usage error (bad flags/arguments)
3 Authentication/authorization failure (401/403)
4 Not found (404)
5 Rate limited (429)
6 Server error (5xx)
7 Timeout or network failure

Pagination

Loxo paginates differently per endpoint: cursor (scroll_id), offset (page), and keyset (after_id). loxo-cli detects and handles all three. List commands fetch a single page by default; pass --all to transparently walk every page. The generic loxo api ... --all auto-detects the scheme (or force it with --paginate scroll_id|page|after_id).

Contributing

uv sync                 # install dependencies
uv run pytest           # run the test suite (HTTP is mocked; no live calls)
uv run ruff check src tests
uv run black --check src tests
uv run mypy

Commits follow Conventional Commits.

License

MIT. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

loxo_cli-0.2.0.tar.gz (61.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

loxo_cli-0.2.0-py3-none-any.whl (26.8 kB view details)

Uploaded Python 3

File details

Details for the file loxo_cli-0.2.0.tar.gz.

File metadata

  • Download URL: loxo_cli-0.2.0.tar.gz
  • Upload date:
  • Size: 61.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for loxo_cli-0.2.0.tar.gz
Algorithm Hash digest
SHA256 186ebf0cacc5defeb3156f7ccdd839626bfc7e678492c3ea14ad221b507148a0
MD5 40ca7f72e0a6cdce2940f3c8580c8618
BLAKE2b-256 169ed4dea21b847d418baa0d704b77afb97b2e27371120ce9c169541c2b771e2

See more details on using hashes here.

Provenance

The following attestation bundles were made for loxo_cli-0.2.0.tar.gz:

Publisher: publish.yml on alphaomegateam/loxo-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file loxo_cli-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: loxo_cli-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 26.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for loxo_cli-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 c5f1db49d75528d02768bb4d2c979437540abb6c28cf34ebaf31f7eb0dfc638b
MD5 fcf5ca0ca7a20a4edd884e0bcecc22c2
BLAKE2b-256 de79156b6a3b5f410576c6410956bb4dbf3e4f35ab5aaba5733da99815636458

See more details on using hashes here.

Provenance

The following attestation bundles were made for loxo_cli-0.2.0-py3-none-any.whl:

Publisher: publish.yml on alphaomegateam/loxo-cli

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page