Submit expenses, attach receipts, approve or reject, export to CSV. Expensify charges $5/user/mo for this. One binary, your data.
Every operation in Steward is available through a JSON REST API. No SDK required — use curl, fetch, or any HTTP client.
GET /api/expenses — list all expenses with optional search and filter query parametersPOST /api/expenses — create a new expense recordGET /api/expenses/{id} — retrieve a single expense by IDPUT /api/expenses/{id} — update an existing expenseDELETE /api/expenses/{id} — remove a expenseGET /api/stats — aggregated statistics with status breakdownGET /api/health — health check endpoint for monitoringThe moment you store expenses in someone else's cloud, you have accepted their terms, their pricing changes, and their uptime. Steward puts that decision back in your hands with a standalone binary that runs anywhere you can run a Linux process.
Each expense record carries fields for description, amount, category, vendor, date. The API accepts partial updates, so you can PATCH individual fields without resubmitting the entire record. Listing endpoints support ?q= for keyword search and ?status= for filtering through the lifecycle. Backups are a file copy of the SQLite database in the data directory.
A non-profit with no DevOps budget downloads the Steward binary, sets two environment variables, and runs it on the same Linux box that handles their email. It has been running for three months without intervention. When they need to update, they download the new binary and restart the process.
GET /api/expenses — List all expenses. Supports ?q=keyword for search and ?status=value for filteringPOST /api/expenses — Create a new expense. Send JSON with at least descriptionGET /api/expenses/{id} — Fetch one expense by IDPUT /api/expenses/{id} — Update fields on an existing expenseDELETE /api/expenses/{id} — Remove a expenseGET /api/stats — Returns total count and breakdown by statusGET /api/health — Returns {"status":"ok"} for uptime monitoringSelf-hosted expense tracker. Self-hosted on your infrastructure. Your data never leaves your server.
curl -fsSL https://stockyard.dev/install.sh | sh -s -- --tool steward
PORT=9840 ./steward
http://localhost:9840
Single binary. Embedded SQLite. No Docker. No database. No dependencies.
Your license key arrives by email within 5 minutes of checkout. Set it as an environment variable and restart the binary.
export STEWARD_LICENSE_KEY=stockyard_xxxxxxxxxxxxxxxxxxxx ./steward
No cloud connectivity required. The binary validates the key offline with Ed25519 signatures.