Back to Docs

CLI Guide

The Storlaunch CLI has two sides: sell for merchants (products, payments, subscriptions, webhooks) and buy for buyers (shop, orders, subscriptions, invoices, addresses). Same binary, same config.

Installation

Node.js 18+ required. Install globally via npm:

bash
npm install -g @forjio/storlaunch-cli

Verify:

bash
storlaunch --version
# 0.14.0

storlaunch --help
# Usage: storlaunch [options] [command]
#
# Commands:
#   sell     Seller commands — manage your merchant account
#   buy      Buyer commands — shop, pay, track orders

Seller commands (sell)

For merchants managing their storefront, payments, subscriptions, and webhooks.

Log in

Generate an API key from your API Keys dashboard, then:

bash
storlaunch sell auth login --key sk_live_xxxxx
# ✓ Production API key saved

# For sandbox / test:
storlaunch sell auth login --key sk_test_xxxxx

Create a checkout session

bash
storlaunch sell payment checkouts create \
  --amount 99000 \
  --currency IDR \
  --description "Pro Plan - Monthly" \
  --success-url "https://myapp.com/success?sid={SESSION_ID}"

# ✓ Checkout session created
#   ID:  cs_01HX...
#   URL: https://storlaunch.forjio.com/checkout/cs_01HX...

Manage products

Three product types: digital, subscription, and physical. Physical products require --weight (grams) and benefit from dimension flags so couriers can quote accurate rates.

bash
# List products (filter by type)
storlaunch sell storefront products list --type physical

# Create a digital product
storlaunch sell storefront products create \
  --name "UI Kit Pro" \
  --price 299000 \
  --currency IDR \
  --type digital

# Upload a file to a digital product
storlaunch sell storefront products upload prod_01HX... --file ./ui-kit.zip

# Create a physical product (weight is required)
storlaunch sell storefront products create \
  --name "Graphic T-Shirt" \
  --price 150000 \
  --currency IDR \
  --type physical \
  --weight 250 \
  --length 30 --width 25 --height 3 \
  --requires-insurance

# Update a physical product
storlaunch sell storefront products update prod_01HX... \
  --price 175000 \
  --weight 280

Variants (SKUs)

Physical products with sizes or colors use variants. Each variant tracks its own SKU, price delta vs the base product, cost price, and low-stock threshold. The default variant is created with the product and cannot be deleted.

bash
# Create a variant
storlaunch sell inventory variants create \
  --product prod_01HX... \
  --name "Red / M" \
  --sku "TSH-RED-M" \
  --price-delta 0 \
  --cost-price 60000 \
  --low-stock-threshold 5

# List variants for a product
storlaunch sell inventory variants list --product prod_01HX...

# Update a variant
storlaunch sell inventory variants update var_01HX... \
  --low-stock-threshold 10

# Archive a variant (default variant cannot be archived)
storlaunch sell inventory variants delete var_01HX...

Warehouses

Every account starts with a default warehouse. Add more for multi-location stock. Setting --default on a warehouse atomically demotes the prior default.

bash
# Create a warehouse
storlaunch sell inventory warehouses create \
  --name "Gudang Utama" \
  --address "Jl. Sudirman 1" \
  --city "Jakarta" \
  --postal "12190" \
  --phone "+628111111111" \
  --default

# List warehouses
storlaunch sell inventory warehouses list

# Promote a different warehouse to default
storlaunch sell inventory warehouses update wh_01HX... --default

# Archive (default warehouse cannot be archived)
storlaunch sell inventory warehouses delete wh_01HX...

Stock adjustments

Every stock change is recorded with a reason code and audit trail. Use positive deltas to receive stock, negative to remove. Reason codes: manual_adjust, refund_restock, transfer_in, transfer_out, damaged, returned_to_supplier, initial_stock, import.

bash
# Current stock for a variant across all warehouses
storlaunch sell inventory stock get --variant var_01HX...

# Receive 50 units from supplier
storlaunch sell inventory stock adjust \
  --variant var_01HX... \
  --warehouse wh_01HX... \
  --delta 50 \
  --reason initial_stock \
  --note "PO #2026-04-01"

# Write off 3 damaged units
storlaunch sell inventory stock adjust \
  --variant var_01HX... \
  --warehouse wh_01HX... \
  --delta -3 \
  --reason damaged

# Movement history
storlaunch sell inventory stock history --variant var_01HX... --limit 20

# Low-stock alerts across all SKUs
storlaunch sell inventory stock alerts

# Bulk import stock levels from CSV
storlaunch sell inventory stock import --file ./stock.csv
# CSV columns: sku,name,productSlug,warehouseId,quantity,lowStockThreshold,costPrice

Shipping config

Set up your pickup origin and enabled couriers before accepting physical orders. Instant couriers (GoSend, Grab, Lalamove) require origin lat/lng coordinates.

bash
# Look up the Biteship area ID for your city
storlaunch sell shipping areas search "Jakarta Selatan"

# List all available couriers (public catalog from Biteship)
storlaunch sell shipping couriers list

# Set origin (regular couriers only)
storlaunch sell shipping origin set \
  --address "Jl. Sudirman 1, Jakarta Selatan" \
  --city "Jakarta Selatan" \
  --postal "12190" \
  --area "IDNP6IDNC148IDND1175IDZ22220" \
  --contact-name "Adhya Pranata Sakti" \
  --contact-phone "+628111111111" \
  --couriers "jne,jnt,sicepat,anteraja"

# Add instant couriers (coordinates required)
storlaunch sell shipping origin set \
  --address "Jl. Sudirman 1, Jakarta Selatan" \
  --contact-name "Adhya" \
  --contact-phone "+628111111111" \
  --lat -6.2088 --lng 106.8456 \
  --couriers "jne,jnt,sicepat,gosend,grab"

# Show current origin
storlaunch sell shipping origin get

Ledger

The per-merchant money log. Entries are auto-posted by the platform (sales, fees, shipping, refunds) with deterministic idempotency keys; you can also post manual adjustments.

bash
# Running balance (account-wide)
storlaunch sell ledger balance account
# { balance, currency, lastEntryAt }

# Per-customer AR balance
storlaunch sell ledger balance customer cust_abc123

# List entries with filters
storlaunch sell ledger entries list \
  --category sale --from 2026-04-01T00:00:00Z --limit 50

# Categories: sale, refund, platform_fee, channel_fee,
#             shipping_cost, shipping_refund, payout, adjustment

# Inspect a single entry
storlaunch sell ledger entries get ledg_abc123

# Manual adjustment (goodwill credit)
storlaunch sell ledger adjustments create \
  --type credit --amount 10000 --currency IDR \
  --description "Goodwill credit for order #2026-04-55" \
  --customer cust_abc123

# Write-off (debit)
storlaunch sell ledger adjustments create \
  --type debit --amount 50000 --currency IDR \
  --description "Bad debt write-off — invoice INV-2026-03-99"

Discount codes / vouchers

Create and manage promo codes. Types: percent, fixed, shipping_percent, shipping_fixed. Scopes: cart, products, tags.

bash
# 20% off summer-tagged items with usage caps — public so it shows on the storefront
storlaunch sell discount-codes create \
  --code SUMMER20 \
  --type percent --value 20 --currency IDR \
  --scope tags --tags summer,sale \
  --min-purchase 100000 \
  --max-uses 500 --max-per-customer 1 \
  --expires 2026-08-31T23:59:59Z \
  --public

# 50% off shipping — applies to the shipping fee, regardless of scope
storlaunch sell discount-codes create \
  --code LEBARAN \
  --type shipping_percent --value 50 --currency IDR

# List / get / update / delete
storlaunch sell discount-codes list --active
storlaunch sell discount-codes get dc_abc123
storlaunch sell discount-codes update dc_abc123 --inactive
storlaunch sell discount-codes update dc_abc123 --public   # advertise on storefront
storlaunch sell discount-codes update dc_abc123 --private  # hide from storefront
storlaunch sell discount-codes delete dc_abc123  # soft-archive

# Dry-run validate against a simulated cart (no commit)
storlaunch sell discount-codes validate \
  --merchant acme --code SUMMER20 \
  --subtotal 500000 --currency IDR --shipping 20000 \
  --items '[{"productId":"prod_x","price":250000,"quantity":2,"tags":["summer"]}]'

Abandoned cart recovery

Per-merchant abandoned-cart recovery automation. Mirrors the dashboard page at /dashboard/marketing/abandoned-cart.

bash
# Read current config
storlaunch sell abandoned-cart config get

# Enable with a 6h delay and a discount attachment
storlaunch sell abandoned-cart config set \
  --enable \
  --delay-hours 6 \
  --subject "Your cart at {merchant} is still here" \
  --preview "Plus a little something for coming back" \
  --discount-code WELCOME10

# Clear the discount attachment
storlaunch sell abandoned-cart config set --no-discount-code

# Recent reminders
storlaunch sell abandoned-cart list --limit 20

# Recovery stats (default 30d)
storlaunch sell abandoned-cart stats --window 7d

Pixels & conversion tracking

Per-merchant Meta / Google / TikTok pixel config. Matches the /dashboard/marketing/pixels page — useful when you're scripting a staging environment or rotating a CAPI token from CI.

bash
# Read current config
storlaunch sell pixels get

# Set all three platforms at once
storlaunch sell pixels set \
  --meta 1234567890 \
  --meta-capi-token EAAB... \
  --google-analytics G-ABC123 \
  --google-ads AW-12345 --google-ads-label abc123 \
  --tiktok C123...

# Partial update — only touches Meta fields
storlaunch sell pixels set --meta-test-event TEST42

# Clear just one platform (leaves the others intact)
storlaunch sell pixels clear --platform google

# Fire a test Purchase through Meta CAPI using an existing session id
# — Meta Events Manager → Test Events will show the payload.
storlaunch sell pixels test --platform meta --session cs_abc123

Product feeds (Google / Meta / TikTok)

Print the three public feed URLs, inspect the XML a crawler sees (counts items, flags missing GTIN / image), and manage the merchant config. Mirrors the /dashboard/marketing/feeds page. --merchant is required for URL/inspect commands; config commands use your authed account.

bash
# Print all three feed URLs (no API hit — computed from the CLI)
storlaunch sell feeds urls --merchant my-shop
# Google: https://api.storlaunch.forjio.com/api/v1/storefront/public/my-shop/feeds/google.xml
# Meta:   https://api.storlaunch.forjio.com/api/v1/storefront/public/my-shop/feeds/meta.xml
# TikTok: https://api.storlaunch.forjio.com/api/v1/storefront/public/my-shop/feeds/tiktok.xml

# Fetch + validate the Google feed (same as ad-network crawler sees)
storlaunch sell feeds inspect --merchant my-shop
# items:         14
# missingGtin:   3   (emit g:identifier_exists=no)
# missingImage:  0
# sample titles: "Classic Tee", "Vintage Jacket", ...
# Non-zero exit on 404 (feeds disabled) or upstream errors.

# Switch format for Meta / TikTok feed preview
storlaunch sell feeds inspect --merchant my-shop --format meta
storlaunch sell feeds inspect --merchant my-shop --format tiktok

# Read current account-wide feed config
storlaunch sell feeds config get

# Enable + set default Google product category fallback
storlaunch sell feeds config set \
  --enable \
  --default-category "Apparel & Accessories > Clothing > Shirts & Tops"

# Include draft (published=false) products in feeds — off by default
storlaunch sell feeds config set --include-unpublished
storlaunch sell feeds config set --no-include-unpublished

# Disable feeds globally (public URLs return 404 until re-enabled)
storlaunch sell feeds config set --disable

Blog CMS

Publish long-form content from the terminal — handy for CI pipelines that post release notes from a changelog/ folder. Mirrors the /dashboard/marketing/blog editor. Drafts are unlimited; tier limit only applies on publish.

bash
# List posts (or filter by status)
storlaunch sell blog list
storlaunch sell blog list --status draft
storlaunch sell blog list --status published --limit 20

# Fetch a single post with full body
storlaunch sell blog get clr8abc...

# Create a new draft from inline content
storlaunch sell blog create \
  --title "How we doubled conversions" \
  --body "# Intro\n\nMarkdown body here."

# Create + publish in one call from a markdown file on disk
storlaunch sell blog create \
  --title "Release 1.2.0" \
  --body-file ./changelog/1.2.0.md \
  --tags "release,changelog" \
  --author "Bang Adi" \
  --cover-image https://.../cover.jpg \
  --publish

# Partial update — change title + excerpt only
storlaunch sell blog update clr8abc... \
  --title "How we 2× conversions (update)" \
  --excerpt "Refreshed numbers from Q1 2026."

# Publish / unpublish (unpublish keeps publishedAt history)
storlaunch sell blog publish clr8abc...
storlaunch sell blog unpublish clr8abc...

# Permanent delete
storlaunch sell blog delete clr8abc...

Referral program

Configure the per-merchant referral program. Pro tier and up. Update merges with current state so you only pass the flags you want to change.

bash
# Show current program config
storlaunch sell referral-program get

# Enable + configure rewards (referrer gets 10%, new buyer gets 20%)
storlaunch sell referral-program update \
  --enable \
  --reward-type percent \
  --referrer-value 10 \
  --referee-value 20 \
  --currency IDR \
  --attribution-window-days 30 \
  --reward-expiry-days 90 \
  --terms "One-time use per code. Not combinable with other promotions."

# Cap a single referrer to 5 successful conversions
storlaunch sell referral-program update --max-rewards-per-referrer 5

# Remove the cap
storlaunch sell referral-program update --no-max-rewards-per-referrer

# Top referrers (sorted by rewards, newest tiebreak)
storlaunch sell referral-program links --limit 50

# Recent attribution lifecycle rows
storlaunch sell referral-program attributions
storlaunch sell referral-program attributions --status rewarded
storlaunch sell referral-program attributions --status voided

# Aggregate stats
storlaunch sell referral-program stats

# Disable (existing reward codes stay redeemable)
storlaunch sell referral-program update --disable

Buyer-side — your referral link + earned rewards

bash
# Sign in as a buyer first (OTP via email)
storlaunch buy auth login --merchant my-shop

# Show your unique referral link + lifetime stats
storlaunch buy referral get-link --merchant my-shop
# Link:       https://storlaunch.forjio.com/s/my-shop/r/abcd1234
# Code:       abcd1234
# Stats:
#   Clicks:   12
#   Signups:  3
#   Rewards:  2

# List reward codes you've earned from referrals
storlaunch buy referral rewards --merchant my-shop

SEO inspection

Unauthenticated checks against your live storefront HTML. Use after a launch to verify crawlers can see what you expect, or in CI to guard against regressions.

bash
# Pass/fail per check: title, meta description, og tags, canonical, h1, JSON-LD
storlaunch sell seo inspect --merchant my-shop
# ✓ <title>: My Shop
# ✓ meta description: Premium digital goods from My Shop
# ✓ og:title: My Shop
# ✓ og:image: https://storlaunch.forjio.com/s/my-shop/opengraph-image
# ✓ twitter:card: summary_large_image
# ✓ canonical: https://storlaunch.forjio.com/s/my-shop
# ✓ <h1>: My Shop
# ✓ JSON-LD: Organization, WebSite
# All checks passed

# Summarize your sitemap — verify every product is listed
storlaunch sell seo sitemap --merchant my-shop
# 42 URLs
# Oldest: 2025-11-03
# Newest: 2026-04-14

# Extract and pretty-print the Product JSON-LD — paste into Google's Rich Results Test
storlaunch sell seo product-schema --merchant my-shop --product widget

# Point at staging while you're iterating
storlaunch sell seo inspect --merchant my-shop --base-url https://staging.storlaunch.forjio.com

Payouts

Request withdrawals to your bank. Manual mode (platform wires + marks paid) now, Xendit disbursement upgrade path when XenPlatform is approved.

bash
# Set default bank account (once per merchant)
storlaunch sell payouts bank-account set \
  --name "Bank Central Asia" \
  --number "1234567890" \
  --holder "Merchant Name" \
  --code "BCA"

storlaunch sell payouts bank-account get

# Available balance
storlaunch sell payouts balance
# { ledgerBalance, locked, available, currency }

# Request a payout (uses default bank)
storlaunch sell payouts create \
  --amount 500000 --currency IDR \
  --note "April earnings"

# Override destination for a one-off payout
storlaunch sell payouts create \
  --amount 1000000 --currency IDR \
  --bank-name "Mandiri" --bank-number "987654321" --bank-holder "Merchant"

# List + filter
storlaunch sell payouts list --status pending
storlaunch sell payouts list --status paid --limit 20

storlaunch sell payouts get po_abc123

# Cancel a pending payout
storlaunch sell payouts cancel po_abc123

Financial reports

P&L and cash-flow reports over a date range, plus a raw ledger CSV export.

bash
# P&L for a month (pretty-printed)
storlaunch sell reports pnl \
  --from 2026-04-01T00:00:00Z \
  --to 2026-04-30T23:59:59Z

# Cash flow (opening/closing balance + category breakdown)
storlaunch sell reports cash-flow \
  --from 2026-04-01T00:00:00Z \
  --to 2026-04-30T23:59:59Z \
  --currency IDR

# Machine-readable JSON for scripting
storlaunch sell reports pnl \
  --from 2026-04-01T00:00:00Z --to 2026-04-30T23:59:59Z \
  --json

# CSV export — to stdout
storlaunch sell reports export-ledger \
  --from 2026-04-01T00:00:00Z --to 2026-04-30T23:59:59Z

# CSV export — to file
storlaunch sell reports export-ledger \
  --from 2026-04-01T00:00:00Z --to 2026-04-30T23:59:59Z \
  --out /tmp/april.csv

Shipments & tracking

bash
# List shipments (filterable by status)
storlaunch sell shipping shipments list --status delivered

# Get a shipment with its tracking events
storlaunch sell shipping shipments get shp_01HX...

# Print the shipping label URL (auto-fetched from courier)
storlaunch sell shipping shipments label shp_01HX...

# Cancel a shipment (only before courier pickup)
storlaunch sell shipping shipments cancel shp_01HX... \
  --reason "Buyer changed mind"

# Track any waybill (public endpoint — works for 3rd-party too)
storlaunch sell shipping track JX1234567890 --courier jne

Subscriptions & plans

bash
# Create a plan
storlaunch sell payment plans create \
  --name "Pro Monthly" \
  --amount 99000 \
  --interval monthly \
  --trial-days 14

# List subscriptions
storlaunch sell payment subscriptions list

# Cancel a subscription
storlaunch sell payment subscriptions cancel sub_01HX...

Webhooks

bash
# Register an endpoint
storlaunch sell webhook endpoints create \
  --url "https://myapp.com/storlaunch/webhooks" \
  --events "checkout.session.completed,subscription.updated"

# List endpoints
storlaunch sell webhook endpoints list

# Resend a failed event
storlaunch sell webhook events resend evt_01HX...

Full command reference

CommandDescription
storlaunch sell auth login --key <key>Authenticate with an API key (sk_live_* or sk_test_*)
storlaunch sell auth logoutClear stored seller credentials
storlaunch sell auth whoamiShow the active API key + account
storlaunch sell payment checkouts create|list|getManage checkout sessions
storlaunch sell payment plans create|list|update|archiveManage subscription plans
storlaunch sell payment subscriptions list|get|cancelManage subscriptions
storlaunch sell payment customers list|create|getManage your customer roster
storlaunch sell payment invoices list|getList/inspect invoices
storlaunch sell payment refunds createIssue a refund
storlaunch sell storefront products list|create|update|delete|uploadManage your product catalog (digital, subscription, physical)
storlaunch sell storefront licenses list|get|revoke|validateManage license keys
storlaunch sell storefront deliveries list|getInspect digital deliveries
storlaunch sell inventory variants create|list|update|deleteManage product variants (SKUs)
storlaunch sell inventory warehouses create|list|update|deleteManage warehouses / stock locations
storlaunch sell inventory stock get|adjust|history|alerts|importStock levels, adjustments, history, low-stock alerts, CSV import
storlaunch sell shipping origin get|setConfigure merchant shipping origin
storlaunch sell shipping couriers listList Biteship couriers (public)
storlaunch sell shipping areas search <query>Look up Biteship area IDs for origin config
storlaunch sell shipping shipments list|get|cancel|labelManage physical shipments
storlaunch sell shipping track <waybill> --courier <code>Track any waybill (public)
storlaunch sell ledger entries list|getList/inspect ledger entries with filters
storlaunch sell ledger balance account|customer <id>Running balance — account-wide or per customer
storlaunch sell ledger adjustments createPost a manual adjustment (credit/debit)
storlaunch sell reports pnl --from --toP&L statement for a period
storlaunch sell reports cash-flow --from --toCash flow (opening + closing + breakdown)
storlaunch sell reports export-ledger --from --to [--out]CSV export of ledger entries
storlaunch sell payouts bank-account get|setManage default payout bank account
storlaunch sell payouts balanceAvailable + locked + ledger balance
storlaunch sell payouts list|get|create|cancelRequest / track / cancel payouts
storlaunch sell discount-codes create|list|get|update|deleteManage promo codes (percent / fixed / shipping; --public for storefront banner)
storlaunch sell discount-codes validate --merchant --code --subtotalDry-run validate a code against a cart
storlaunch sell pixels get|set|clear|testMeta Pixel/CAPI + Google Analytics/Ads + TikTok Pixel config
storlaunch sell abandoned-cart config get|setAbandoned-cart recovery config (delay, subject, preview, discount)
storlaunch sell abandoned-cart list|statsRecent reminders + recovery rate / revenue
storlaunch sell feeds urls --merchant <slug>Print the Google / Meta / TikTok product-feed URLs
storlaunch sell feeds inspect --merchant <slug> [--format meta|tiktok]Fetch + validate the XML feed — counts items, flags missing GTIN/image
storlaunch sell feeds config get|setFeed enable, default Google product category, include-drafts
storlaunch sell blog list|getList / inspect blog posts (filter by status)
storlaunch sell blog create|update|publish|unpublish|deleteManage blog posts (markdown body via --body or --body-file)
storlaunch sell seo inspect --merchant <slug>Check storefront for title, meta, og:image, canonical, h1, JSON-LD
storlaunch sell seo sitemap --merchant <slug>Summarize the per-merchant sitemap (URL count + oldest/newest)
storlaunch sell seo product-schema --merchant --productExtract and print a product page’s Product JSON-LD
storlaunch sell webhook endpoints list|create|update|deleteManage webhook endpoints
storlaunch sell webhook events list|resendInspect and retry webhook events
storlaunch sell config get|set|pathInspect/update local CLI configuration

Buyer commands (buy)

Shop, pay, and manage your purchases with any Storlaunch-powered merchant, straight from the terminal.

Sign in (per merchant)

Buyer sessions are scoped per merchant. You log in once per shop using email + OTP:

bash
storlaunch buy auth login --merchant my-shop

# Email: you@example.com
# Code sent to you@example.com. Check your inbox.
# 6-digit code: 123456
# ✓ Signed in as you@example.com for my-shop

Session token is stored in ~/.storlaunch/buyer/<slug>.json (HTTP-only equivalent — not accessible to other applications). Good for 30 days or until you sign out.

Browse and buy

bash
# Browse a merchant's catalog
storlaunch buy shop my-shop

# Inspect a product
storlaunch buy shop my-shop tshirt-red

# Buy — opens the payment URL in your browser after you confirm
storlaunch buy checkout my-shop tshirt-red

# For physical products you pick:
#   1. Which saved address (or add one first)
#   2. Which courier (regular / same-day / instant)
#   3. Confirm total → opens Xendit or PayPal checkout page

Cart (multi-item)

Build up a cart and check out everything in one session. Requires sign-in for server-side cart persistence.

bash
# View current cart
storlaunch buy cart list --merchant my-shop

# Add items — attach a note for fulfillment (gift wrap, sizing, etc.)
storlaunch buy cart add --merchant my-shop --product tshirt --quantity 2 --note "Size M in chest"
storlaunch buy cart add --merchant my-shop --product mug --variant var_blue

# Edit / clear the note on an existing line item
storlaunch buy cart note --merchant my-shop --item ckl9... --text "Gift wrap please"
storlaunch buy cart note --merchant my-shop --item ckl9...

# Remove a line item by ID (from cart list)
storlaunch buy cart remove --merchant my-shop --item ckl9...

# Clear the whole cart
storlaunch buy cart clear --merchant my-shop

# Check out everything (digital MVP — physical items still use 'buy checkout')
storlaunch buy cart checkout --merchant my-shop \
  --discount-code SUMMER20

Track your orders

bash
# List orders with a merchant
storlaunch buy orders list --merchant my-shop

# Show full detail — shipment events, downloads, invoice
storlaunch buy orders get cs_01HX... --merchant my-shop

Subscriptions

bash
# List your subscriptions
storlaunch buy subs list --merchant my-shop

# Cancel (keeps access until end of current billing period)
storlaunch buy subs cancel sub_01HX... --merchant my-shop

# Cancel immediately (rare — usually end-of-period is what you want)
storlaunch buy subs cancel sub_01HX... --merchant my-shop --immediate

Invoices

bash
# List invoices
storlaunch buy invoices list --merchant my-shop

# Download the PDF (defaults to ./invoice-<id>.pdf)
storlaunch buy invoices download inv_01HX... --merchant my-shop
storlaunch buy invoices download inv_01HX... --merchant my-shop --out ./my-invoice.pdf

Addresses

bash
# List saved addresses
storlaunch buy addresses list --merchant my-shop

# Add one
storlaunch buy addresses add --merchant my-shop \
  --label "Home" \
  --name "Alice Santoso" \
  --phone "081234567890" \
  --address "Jl. Asia Afrika No. 65" \
  --postal "40111" \
  --lat -6.9210 --lng 107.6090 \
  --default

# Set default
storlaunch buy addresses default addr_01HX... --merchant my-shop

# Edit or delete
storlaunch buy addresses edit addr_01HX... --merchant my-shop --phone "089999"
storlaunch buy addresses delete addr_01HX... --merchant my-shop

Profile

bash
# Show profile (email, counts, member since)
storlaunch buy profile show --merchant my-shop

# Update display name
storlaunch buy profile update --merchant my-shop --name "Alice Santoso"

# To change email, go to the merchant's web portal — email change requires
# OTP on the NEW address and is easier to do via the web UI.

Full buyer command reference

CommandDescription
storlaunch buy auth login --merchant <slug>Interactive email+OTP login for one merchant
storlaunch buy auth logout --merchant <slug>Clear session for one merchant
storlaunch buy auth whoami [--merchant <slug>]Show active buyer session(s)
storlaunch buy shop <merchant> [product]Browse a merchant's catalog, view a product
storlaunch buy checkout <merchant> <product>Interactive purchase (addr+courier if physical), opens payment URL
storlaunch buy cart list|add|note|remove|clear|checkoutManage cart + per-item notes + multi-item checkout
storlaunch buy orders list|get --merchant <slug>Your order history + details
storlaunch buy subs list|get|cancel [--immediate]View and cancel subscriptions
storlaunch buy invoices list|download --merchant <slug>View and download invoice PDFs
storlaunch buy addresses list|add|edit|delete|defaultManage shipping addresses
storlaunch buy profile show|updateView and edit your profile with a merchant

Automation examples

The CLI is script-friendly — every subcommand accepts --json for machine-readable output. Pipe through jq:

bash
# Download the latest invoice PDF
LATEST=$(storlaunch buy invoices list --merchant my-shop --json | jq -r '.[0].id')
storlaunch buy invoices download "$LATEST" --merchant my-shop

# Find orders that haven't shipped yet
storlaunch buy orders list --merchant my-shop --json | \
  jq '.[] | select(.shipment.status == "pending") | .id'

Configuration

Both seller credentials and per-merchant buyer sessions live under ~/.storlaunch/.

bash
~/.storlaunch/
├── config.json              # Seller API key + API URL
└── buyer/
    ├── my-shop.json         # Buyer session for my-shop
    └── another-merchant.json

Environment variables

VariablePurpose
STORLAUNCH_API_KEYOverride seller API key — wins over stored config. CI-friendly.
STORLAUNCH_API_URLAPI base URL. Defaults to https://storlaunch.forjio.com/api/v1.

Exit codes

CodeMeaning
0Success
1General error (validation, network, missing input)
2Authentication failed (401/403)
3Rate limited (429) — retry after a short delay

Troubleshooting

“Not signed in” when running buy commands

Buyer sessions are per merchant. Run storlaunch buy auth login --merchant <slug> first. Sessions last 30 days.

OTP never arrives

Check the email spam folder. The sender is noreply@storlaunch.forjio.com. Rate limit is 3 codes per minute per email — wait a minute and retry if you hit it.

Payment URL doesn’t open automatically

The CLI tries open (macOS), xdg-open (Linux), or start (Windows). Copy the URL printed after Pay here: and paste into a browser. Or pass --no-open to skip the launch.

Upgrading

0.13.x → 0.14.0: adds sell blog (list, get, create, update, publish, unpublish, delete) for the blog CMS. --body-file loads markdown from disk, --publish creates + publishes in one call. Backing endpoints at /api/v1/account/blog/posts. No breaking changes.

0.12.x → 0.13.0: adds sell feeds (urls, inspect, config get/set) for Google Shopping / Meta Catalog / TikTok Catalog product feeds. Backing endpoints at /api/v1/storefront/public/:merchantSlug/feeds/{google,meta,tiktok}.xml (public) and /api/v1/account/feeds (authed). No breaking changes.

0.11.x → 0.12.0: adds sell abandoned-cart (config get/set, list, stats) for the abandoned-cart recovery automation. Backing endpoints at /api/v1/account/abandoned-cart/* and the new cron sweep at POST /api/v1/cron/abandoned-cart-sweep. No breaking changes.

0.10.x → 0.11.0: adds sell pixels get/set/clear/test for per-merchant Meta / Google / TikTok conversion tracking config. Backing endpoints at /api/v1/account/pixels and /api/v1/storefront/public/:merchantSlug/pixels. No breaking changes.

0.9.x → 0.10.0: adds sell seo inspect, sell seo sitemap, and sell seo product-schema — unauthenticated inspections for your live storefront SEO. No breaking changes.

0.8.x → 0.9.0: sell discount-codes create and update now accept --public / --private to toggle the storefront promo banner. buy cart add takes an optional --note; new buy cart note command edits or clears the note on an existing line item. No breaking changes.

0.7.x → 0.8.0: adds buy cart (list / add / remove / clear / checkout) — multi-item buyer flow that mirrors the storefront cart. Backed by /api/v1/checkout/cart/* and the new POST /api/v1/storefront/public/:merchantSlug/cart-checkout endpoint. No breaking changes.

0.6.x → 0.7.0: adds sell discount-codes (CRUD + public validate dry-run). Backing endpoints at /api/v1/discount-codes and POST /api/v1/storefront/public/validate-discount. Also adds discountCode to the checkout-session create body.

0.5.x → 0.6.0: adds sell payouts (bank-account, balance, list/get/create/cancel). Backing endpoints at /api/v1/payouts/*. No breaking changes.

0.4.x → 0.5.0: adds sell reports (pnl, cash-flow, export-ledger). Backing endpoints at /api/v1/reports/*. No breaking changes.

0.3.x → 0.4.0: adds sell ledger (entries, balance, adjustments). Backing endpoints live at /api/v1/ledger/*. No breaking changes.

0.2.x → 0.3.0: adds sell inventory (variants, warehouses, stock) and sell shipping (origin, couriers, shipments, track), plus --type physical and dimension flags on product create/update. No breaking changes — existing scripts keep working unchanged.

0.1.x → 0.2.0: commands moved under the sell namespace. Old storlaunch checkout create became storlaunch sell payment checkouts create.

Building with Storlaunch?

See the REST API reference for the underlying endpoints the CLI wraps.