Skip to content

Developer Tools

Coming soon

Postsale CLI: ship from your terminal.

Search orders, compare rates and buy and void labels from a terminal, a scheduled job or an AI agent. Type the exact command, or say what you want in plain words. Nothing spends money without an explicit go-ahead.

Coming to Mac and Windows. Early access is by invitation.

Nothing spends money without an explicit go-ahead

A sample session in the Postsale CLI:

postsale shipments get-rates --input 4505.json > rates.jsonjq -r '.rates[]|"\(.total) \(.service)"' rates.json7.52 usps_ground_advantage15 usps_priority_mail29.83 ups_ground30.52 fedex_ground_home_deliverySHIP=$(jq -r .id 4505.json)postsale labels purchase --shipment-id $SHIP{"error":{"code":"confirmation_required","message":"This operation requires confirmation. Pass --yes to proceed non-interactively."}}postsale labels purchase --shipment-id $SHIP --yes > label.jsonjq -r '.labels[].tracking_number' label.json1Z999AA10123454505
Every rate for order #4505, including the $29.83 UPS Ground its customer chose, then a purchase that waits for --yes.Sample data

Setup

Set up Postsale CLI in three steps.

  1. Step 1

    Request Early Access

    The CLI is coming soon for Mac and Windows. Ask for early access by email, and your invitation includes the signed program, one self-contained file.

    Email for early access →

  2. Step 2

    Sign In and Check Your Setup

    Run postsale auth login to sign in through your browser, or add --no-browser on a server. Then postsale doctor confirms your sign-in, carriers and origin addresses in one pass.

  3. Step 3

    Ask or Command

    postsale orders work-queue shows what is ready to ship. postsale run "ship it with the cheapest carrier" does the rest, and stops before buying until you give the go-ahead. The Quick Start walks through the first hour.

    Quick Start →

Features

Built so an agent can’t spend by accident.

Most shipping software lets an assistant in through a connector. Postsale also ships its own program, with its own plain-words agent and its own safety rules.

  • Money waits for a go-ahead

    Three actions move money: creating a shipment, buying labels and voiding. They wait for --yes or an allow-list you set. If neither is set and no one is at the terminal to approve, the run stops. Deletes wait the same way.

  • Give only the go-ahead you mean

    Approve just shipment creation and label purchase for a run, and nothing else. Every other action that spends or deletes still stops.

  • Rehearse with dry-run

    Preview the purchases, voids, deletes and status changes a plain-words run would make. The result lists what it simulated and what still ran.

  • Practice labels that are never billed

    Test-label mode prints watermarked UPS and USPS test labels that are never billed, and refuses the whole batch if any shipment is not a test.

  • Batches need their own yes

    Parallel batches take up to 50 orders. Buying across a batch needs a separate approval, even after --yes.

  • Some things stay with the owner

    Accepting terms and reactivating a lapsed subscription go back to the account owner. No flag skips them.

Agent-first, people too

Made for agents. Easy on people.

One program, the same rules, whether a person, a schedule or an agent is at the keyboard.

  • Agent hosts

    One call describes every command. Results are clean data, and every error names its next step. Point your agent host at the published contract.

    https://postsale.com/cli/AGENTS.md

  • Unattended runs

    A preflight check before the job, a scoped API key you can revoke and a record of what ran.

    postsale doctor --pre-flight

  • Your terminal

    Add --human to read anything at a glance. Typos get a “Did you mean?” Save a question and run it by name.

    postsale doctor --human

Every command

The daily work of the app, from the terminal.

Orders & work queue10 commands
  • orders work-queue

    What is ready to ship right now, with the excluded orders counted so nothing hides in an unexpected status

  • orders search

    Find orders with structured filters or a plain-language query like "orders from last 7 days"

  • orders get

    Read one order in full, including items, addresses and notes

  • orders create

    Add an order from the terminal or a script

  • orders update

    Change addresses, items, notes or shipping preferences on an order

  • orders set-status

    Move one order to a new status, or a list of order ids at once with bulk-status

  • orders tag

    Add or remove tags to organize and filter orders

  • orders recover

    Restore a deleted order

  • filters

    Saved order searches you can list, create, update and reuse

  • stores list

    See the storefronts connected to your account

Rates, shipments & labels8 commands
  • shipments get-rates

    Compare live rates across every carrier on your account

  • shipments create

    Create a shipment from an order, ready to rate and buy

  • orders create-shipment

    Order to shipment in one step, with the defaults the agent applies spelled out

  • shipments update

    Fix the package, service, ship date or from-address before you buy

  • shipments bulk-update

    Change the package, service, ship date or from-address across many shipments at once

  • labels purchase

    Buy a label. Waits for an explicit go-ahead, and first shows that this label will be billed

  • labels void

    Void a label you no longer need and request the refund

  • labels reprint

    Print an existing label again without buying a new one

Reports & end of day7 commands
  • reports order-count

    Count orders by date range, status or store

  • reports shipment-count

    Count shipments by date range, carrier or service

  • reports revenue

    Revenue totals for the period you ask about

  • reports top-items

    Your most-shipped products, ranked

  • reports cost-by-carrier

    Shipping spend broken down by carrier

  • manifest list

    What is still pending for each carrier's end-of-day manifest

  • manifest close

    Close out the day for a carrier

Account, carriers & settings10 commands
  • auth login

    Sign in through your browser, or with a device code on a machine without one

  • auth status

    See which credential is active and whether it is still valid

  • account whoami

    Who you are signed in as. Needs a signed-in session, not an API key

  • doctor

    Check sign-in, network, carriers and origin addresses before you ship; pre-flight mode for unattended runs

  • carriers

    Add, validate, update and remove carrier accounts

  • origin-addresses

    Manage the addresses your shipments ship from

  • shipping-rules

    List, create, update and delete the rules that build shipments automatically

  • automation

    List, create, update and delete workflows and webhooks

  • templates

    Label, packing-slip, invoice and email templates as records: list, copy, move and back them up

  • licenses

    The Postsale license and third-party notices, offline

Natural language & agents8 commands
  • run

    Say what you want; the agent picks the tools and waits for an explicit go-ahead before anything that moves money

  • run --dry-run

    Preview the purchases, voids, deletes and status changes without making them; other edits still run

  • run --stream

    One JSON event per line, for hosts that watch the work as it happens

  • continue

    Pick up a previous conversation and keep going

  • conversations

    The conversations stored on this machine, so you can continue one

  • saved-queries

    Save the intents you use often and run them by name

  • traces

    See exactly what ran, export it or purge it

  • schema

    Describe any command's request and response shapes; --all bootstraps an agent in one call

Questions

About Postsale CLI and Postsale.

Which plans include the Postsale CLI?

Every plan. Sign in with your Postsale account and the CLI uses the carriers, rates and templates already on it. API keys, the credential for jobs that run without you, are a Soar-plan feature.

Do I need an AI subscription to use it?

No. Search, reports and the work queue understand plain words with no model key, and direct commands need none either. Only postsale run, which handles several steps for you, uses your own Anthropic or OpenAI key.

Can it buy labels on its own?

Not without an explicit go-ahead. Creating a shipment, buying labels, voiding and deleting wait for --yes at the time or an allow-list you set for a job. Batches need their own approval on top of that. Dry-run previews the work, and test-label mode prints practice labels that are never billed.

What does dry-run not simulate?

Dry-run stands in for creating shipments, buying and voiding labels, deletes, closing the end-of-day manifest and order status changes. Other edits still run for real: creating or updating an order, editing a shipment, tags and saved searches. The result lists what it simulated, so you can see which is which.

How is this different from the MCP connector?

The MCP connector puts Postsale inside your chat assistant, such as Claude.ai or ChatGPT, with no keys to manage. The CLI is for your terminal, your scripts and agents you run yourself, with structured output and the same safety gates on every path. It’s the same account with the same carriers, and many teams use both.

Does it replace the web app?

No. Visual work like the shipping Dock and template design stays in the app. The CLI is for repeatable operations, unattended runs and agents.

How do I get it?

It’s coming soon for Mac and Windows. Ask for early access by email, and your invitation includes the program. Then sign in with your Postsale account.

Claude, ChatGPT, Anthropic and OpenAI are trademarks of their respective owners. Postsale is not affiliated with or endorsed by these companies.

Bring Postsale to your terminal.

Coming to Mac and Windows. Early access is by invitation.

Nothing spends money without an explicit go-ahead