Brix REST API

v1

Read and write your formulation data over HTTP. The API uses the app's shared services and approval rules. Create ingredients, read approved recipe history, and download Nutrition Facts labels as PDF or PNG. Supplier Compliance and certification tracking remain GoodPop-only.

Base URL
https://brixsoftware.com/api/v1
Authentication
Authorization: Bearer <key> — the same personal access key as the MCP endpoint, from Settings → My account → Access keys.
Rate limit
60 requests a minute per key. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset.
Pagination
Lists answer { data, next_cursor, has_more, total }. Follow next_cursor until it is null; never build one yourself.
Errors
Always { "error": { "code", "message", "details" } }. Branch on code, never on the message.
Change notification
No webhooks yet. Poll GET /audit?since=<timestamp>.

Three things to try

Pull a product's label-rounded nutrition

The numbers as they appear on the Nutrition Facts panel — FDA rounding applied, the dual/single column collapse resolved, and the reconstitution Added Sugars reclassification included. These are the printed values, not the engine's raw ones.

curl -s "https://brixsoftware.com/api/v1/products/FG444/nutrition?basis=label" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Use basis=100g or basis=serving for unrounded engine values instead. FG444 can be an FG code or the product's id.

Update an ingredient's material data

Write per-100 g values, cost, and density directly on one ingredient. Omitted fields keep their stored values.

curl -s -X PATCH "https://brixsoftware.com/api/v1/ingredients/IG1001" \
  -H "Authorization: Bearer $BRIX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "supplier": "Green Mountain Dairy",
    "costPerLb": 3.85,
    "calories": 379,
    "totalFat": 40.2,
    "protein": 2.0,
    "totalSolids": 45.4
  }'

Requires MEMBER or higher. An approved record's FORMULA is locked, but an ingredient's spec is not a formula — this write applies in place and marks every pinning record as drifted.

List products changed since a date

There are no webhooks yet, so this is how you follow changes: ask the audit feed what moved since your last poll, then fetch the records it names. Store the newest entry's createdAt and pass it back next time.

curl -s "https://brixsoftware.com/api/v1/audit?entity=Product&since=2026-08-01T00:00:00Z&limit=50" \
  -H "Authorization: Bearer $BRIX_API_KEY"

Entries come back newest first. Follow next_cursor to walk further back; drop the entity filter to watch everything.

Full reference

Every endpoint, generated from the API itself. The machine-readable source is at /api/v1/openapi.json — point your own client generator at it.