Command-line client for the Public.com Trading API
Project description
publicdotcom-cli
Command-line client for the Public.com Trading API.
Use public to authenticate, inspect accounts, retrieve portfolio and market data, run
preflight checks, and submit order-related requests from your terminal.
Install
The recommended installation method for command-line Python tools is pipx:
pipx install publicdotcom-cli
You can also install with uv:
uv tool install publicdotcom-cli
Confirm the CLI is available:
public --help
Quick Start
Generate a personal secret from your Public.com settings, then authenticate:
public auth login
public accounts list
public accounts set-default ACCOUNT_ID
public portfolio show
public market quotes AAPL MSFT
Most account-scoped commands use the configured default account. You can override it with
--account-id ACCOUNT_ID or PUBLIC_ACCOUNT_ID=ACCOUNT_ID.
Important Disclosures
This CLI is a developer tool for interacting with the Public API. It is not investment, financial, legal, tax, accounting, or trading advice, and it does not recommend any security, strategy, account type, order type, or transaction.
Trading involves risk, including the possible loss of principal. You are responsible for reviewing all request payloads, account IDs, symbols, quantities, prices, order sides, time-in-force values, and other order instructions before submitting a trading command.
Order placement, replacement, and cancellation requests may be asynchronous. A successful API response confirms submission to the API, not execution, cancellation, fill price, availability, or final order state. Always verify order status after submitting, replacing, or cancelling an order.
Market data, quotes, option chains, greeks, account data, and preflight calculations are provided for informational and operational use through the API. They may be incomplete, delayed, unavailable, or different from final execution values.
You are responsible for complying with all applicable laws, regulations, exchange rules, API terms, account agreements, and internal policies that apply to your use of this CLI. Do not use this tool unless you are authorized to access the relevant account and API credentials.
Personal secrets and access tokens can authorize account access and trading activity. Keep them private, do not commit them to source control, and rotate or revoke them if you believe they were exposed.
Authenticate
Generate a personal secret from Public, then run:
public auth login
The access token is stored with your OS keychain when available. If no keychain backend is available, the CLI falls back to a user-only config file.
Access tokens are short-lived. To let the CLI refresh them automatically, opt in to storing your personal secret:
public auth login --store-secret
Because the personal secret is long-lived, this is optional. The CLI stores it in your OS keychain when available, otherwise it falls back to a user-only config file.
After that, secured commands automatically mint a fresh access token before the current
token expires or after a 401 Unauthorized response. You can also refresh manually:
public auth refresh
You can also bypass stored credentials for automation:
PUBLIC_ACCESS_TOKEN=ey... public accounts list
PUBLIC_PERSONAL_SECRET=... public accounts list
Remove stored credentials with:
public auth logout
public auth logout --all
Default Account
Most API operations require the accountId returned by public accounts list. You can
store a default account once:
public accounts set-default ACCOUNT_ID
public accounts get-default
Then omit --account-id from account-scoped commands:
public portfolio show
public market quotes AAPL MSFT
public order get ORDER_ID
You can override the default at any time:
public portfolio show --account-id ACCOUNT_ID
PUBLIC_ACCOUNT_ID=ACCOUNT_ID public portfolio show
public accounts clear-default
Example Commands
public accounts list
public accounts set-default ACCOUNT_ID
public portfolio show
public history list --page-size 25
public instruments get AAPL EQUITY
public market quotes AAPL MSFT --type EQUITY
public market option-expirations AAPL
public market option-chain AAPL 2026-05-15
public options greeks "AAPL 260515C00200000"
Trading requests use JSON files so the exact payload is visible before submission:
public order preflight-single --file examples/order.single-leg.market-buy.json
public order place --file examples/order.single-leg.market-buy.json
public order get ORDER_ID
public order cancel ORDER_ID
Trading commands prompt before submitting order placement, replacement, or cancellation
requests. Use --yes only when your automation has already performed equivalent
validation and approval.
JSON Output
Use --json before the command group to print raw JSON:
public --json accounts list
public --json market quotes AAPL MSFT
Configuration
The CLI supports these environment variables:
PUBLIC_ACCESS_TOKEN=...
PUBLIC_PERSONAL_SECRET=...
PUBLIC_ACCOUNT_ID=...
PUBLIC_API_BASE_URL=https://api.public.com
PUBLIC_AUTO_REFRESH=true
PUBLIC_API_BASE_URL is optional and defaults to https://api.public.com.
Upgrade
pipx upgrade publicdotcom-cli
# or
uv tool upgrade publicdotcom-cli
Development
For local development from a checkout:
uv sync --extra dev
uv run public --help
uv run pytest
Regenerate The OpenAPI Client
The package ships with a generated API client. Contributors who need to regenerate it
must place the local OpenAPI spec at the repository root as spec.yaml, then run:
uv run python scripts/generate_client.py
The raw spec uses */* for many JSON responses, which some Python generators do not
parse as JSON. The regeneration script normalizes those response content types before
running openapi-python-client. This requires network access the first time because it
uses uvx openapi-python-client.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file publicdotcom_cli-1.0.0.tar.gz.
File metadata
- Download URL: publicdotcom_cli-1.0.0.tar.gz
- Upload date:
- Size: 86.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7a604042e57f039dd4ed63e1cac8532d4f82a99d349d2d6141e6bdfa216821d9
|
|
| MD5 |
f91c48729b51f8b1ab5bf0627091bc27
|
|
| BLAKE2b-256 |
df3ca25772bab119af2bc2696d12775fbec0a259475c42a5f9bab84e0c7c5ab6
|
File details
Details for the file publicdotcom_cli-1.0.0-py3-none-any.whl.
File metadata
- Download URL: publicdotcom_cli-1.0.0-py3-none-any.whl
- Upload date:
- Size: 156.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d5d105b8b2545c02d61221d8bdcbaeba52678b4d0c2f1d136912089bdd12351
|
|
| MD5 |
0067248b468ee20fac8db8acbcc6f0c4
|
|
| BLAKE2b-256 |
2581fd16fa4b4f1507fe69cbb4a4f663c5632aec56056e5ecf1c9064087b0969
|