FurniOpsDocs
CLI

Command reference

Every furniops command, argument and flag in CLI 0.2.

Every command also takes the global options (--profile, --api-url, --issuer, --audience, --mode, --json) and -h, --help.

CommandDoes
furniops loginSign in in the browser, or save an API key.
furniops logoutRevoke the session and forget the credential.
furniops whoamiShow who the profile is signed in as, and in which mode.
furniops listenForward events to a local URL as signed webhook deliveries.
furniops events tailPrint events as they happen.
furniops triggerEmit a sample event in test mode.
furniops products getShow a product.
furniops sources runStart a run of a source.

furniops login

Sign in with your FurniOps account in the browser (OAuth device flow), or save an API key.

furniops login [--scopes <list>] [--no-browser] [--with-api-key]
FlagMeaning
--scopes <list>Comma-separated permissions to ask for. Default: every permission a credential may hold. A permission no credential may hold is refused (exit 2) with the list of those allowed.
--no-browserPrint the link without opening a browser.
--with-api-keySave an API key, read from standard input or typed at a hidden prompt, instead of signing in. Keys must start with fo_test_, fo_live_, fo_rk_test_ or fo_rk_live_.

An account session acts in live mode, or in test mode with --mode test. With --json, the confirmation code and link are written to standard error as one JSON object, so a wrapper can show them; the result goes to standard output.

Permissions --scopes accepts: products:read, products:write, variants:read, variants:write, offers:read, offers:write, sources:read, sources:write, runs:read, runs:write, webhooks:read, webhooks:write, events:read, freshness:write, api_keys:read, members:read, org:read, billing:read, audit:read, agent:read.

furniops logout

furniops logout

Revokes an account session's refresh token at the sign-in server (best effort: the local copy is removed whatever the server answers) and deletes the profile's stored credential. It does not touch FURNIOPS_API_KEY. Not signed in is not an error.

furniops whoami

furniops whoami
Profile:   default
API:       https://api.furniops.com
Mode:      test
Key:       fo_test_…a1b2 (from the keychain)

For an account session it shows the email, organisation, scopes and when the access token expires instead of the key. A key is never shown beyond its prefix and last four characters. Exits 3 when not signed in.

furniops listen

Forward events to a local URL as signed webhook deliveries, with no tunnel. See furniops listen for the full guide.

furniops listen --forward-to <url> [--events <types>] [--payload thin|fat]
furniops listen --print-secret
FlagMeaning
-f, --forward-to <url>Where to POST each event. A URL without a scheme gets http://: localhost:3000/webhooks. Required unless --print-secret.
--events <types>Comma-separated event types to forward. Default: all. An unknown type is refused (exit 2).
--payload <kind>thin or fat events.
--print-secretPrint the profile's local whsec_ signing secret and exit.

furniops events tail

Print events as they happen, until Ctrl+C.

furniops events tail [--events <types>] [--payload thin|fat] [--cursor <cursor>]
FlagMeaning
--events <types>Comma-separated event types. Default: all.
--payload <kind>thin or fat events.
--cursor <cursor>Start after this feed cursor, to replay from a position.
10:00:02  offer.changed  evt_034XqBaL2mRLTZPXyRbaUi  ofr_034XqBaL2mRLTZPXyRbaUg (test)

Each line is the time, the type, the event ID and the subject, with (test) for test-mode events. With --json, each line is the event's envelope exactly as received, ready for jq:

furniops events tail --json --events offer.changed | jq -r '.data.fields[] | "\(.path) \(.old) -> \(.new)"'

furniops trigger

Emit a sample event in test mode (POST /v1/test/events).

furniops trigger <event-type>
ArgumentMeaning
<event-type>Any public event type, such as offer.changed. An unknown type is refused (exit 2) with the list of types.

Needs test mode: a fo_test_ key saved with furniops login --with-api-key or in FURNIOPS_API_KEY, or a signed-in session with --mode test. With a live credential it exits 4 and says so. The event reaches your test-mode webhook endpoints, the sandbox's feed and stream, and so any running furniops listen.

furniops products get

furniops products get <id>
ArgumentMeaning
<id>A product ID, prod_….

Prints the product with its variants and offers as JSON (GET /v1/products/{id}).

furniops sources run

Start a run of a source (POST /v1/sources/{id}/runs).

furniops sources run <id> [--stream catalogue|stock]
Argument or flagMeaning
<id>A source ID, src_….
--stream <stream>What to pull: catalogue (the default) or stock, for a source whose connector reads stock separately.
Started run_034XqBaL2mRLTZPXyRbaUk (queued)

A source runs one pull at a time: while a run is queued or running, or the source is paused or disabled, the API answers 409 and the command exits 1.

On this page