Bloomcount Public API
REST API for partners and integrations.
Authentication
All endpoints require an Authorization: Bearer bloomcount_... header. Keys are
issued from Settings → API in the app and are scoped — a key without
products:write cannot create products, etc.
Bulk endpoints
Create / update endpoints accept arrays so a single request can cover up
to 500 items. Per-row failures are reported in the errors array
rather than failing the whole call.
Idempotency
POST endpoints honour Idempotency-Key. A replay with the same key
returns the cached response verbatim; the underlying mutation runs once.
Cache TTL is 24 hours, scoped to the API key.
Rate limits & quotas
- Per-key rate limit: 60 requests / minute. Exceeding returns
429 rate_limited. - Per-tenant monthly cap: configured per plan (default unlimited via the
override). Exceeding returns
429 monthly_limit_exceeded.
IDs
IDs are resource-prefixed strings — the prefix tells you what kind of resource the ID refers to. Treat the part after the underscore as opaque (do not parse), but you can rely on the prefix.
| Prefix | Resource |
|---|---|
prod_ |
Product |
var_ |
Product variant |
sup_ |
Supplier |
pl_ |
Price list |
pe_ |
Price entry |
tax_ |
Tax group |
evt_ |
Event |
evtgrp_ |
Event group |
evti_ |
Event item (line) |
whsub_ |
Webhook subscription |
Passing the wrong kind of ID (e.g. a var_… where a prod_… is expected)
returns 422 wrong_id_type:expected_<table>_got_<table> so the mistake is
self-describing. Mismatched / malformed IDs return
422 invalid_id_format or 422 invalid_id_prefix:<prefix>.
https://app.bloomcount.comhttp://localhost:3000Tax Groups
- GETList tax groups
/api/v1/tax-groups - POSTCreate or update a tax group
/api/v1/tax-groups - DELETEDelete a tax group
/api/v1/tax-groups/{id}
Products
- GETList products with their variants
/api/v1/products - POSTBulk create or update products + variants
/api/v1/products - GETGet a single product with its variants
/api/v1/products/{id} - DELETEDelete a product
/api/v1/products/{id} - DELETEDelete a variant
/api/v1/products/{id}/variants/{variantId}
Suppliers
The suppliers that products and per-variant prices can be assigned to. An integration needs a supplier ID before it can write per-supplier prices or per-(variant, supplier) minimum order quantities (MOQ), so it can create its own here rather than waiting for someone to add them in the app. The hidden Default supplier and archived rows aren’t listed.
Suppliers archive rather than delete, because products keep referencing their IDs. Archiving relinks anything left without a supplier to the hidden Default.
- GETList suppliers
/api/v1/suppliers - POSTCreate a supplier
/api/v1/suppliers - GETGet a single supplier
/api/v1/suppliers/{id} - PATCHUpdate a supplier
/api/v1/suppliers/{id} - POSTArchive a supplier
/api/v1/suppliers/{id}/archive - POSTRestore an archived supplier
/api/v1/suppliers/{id}/unarchive
Price Lists
- GETList price lists
/api/v1/price-lists - POSTCreate or update a price list with optional entries
/api/v1/price-lists - GETGet a single price list with its entries
/api/v1/price-lists/{id} - DELETEDelete a price list
/api/v1/price-lists/{id}
Events
- GETList events
/api/v1/events - POSTBulk create or update events
/api/v1/events - GETGet one event
/api/v1/events/{id} - DELETEDelete an event
/api/v1/events/{id} - POSTCreate, update and remove an event's groups
/api/v1/events/{id}/groups - POSTAdd, change and remove an event's lines
/api/v1/events/{id}/items
Webhook subscriptions
Manage which URLs receive event deliveries.
- GETList webhook subscriptions
/api/v1/webhooks - POSTSubscribe a URL to event deliveries
/api/v1/webhooks - DELETEDelete a webhook subscription
/api/v1/webhooks/{id}
Venues
Where events happen. An event references a venue by ID, and the driving distance from your own address is worked out in the background.
- GETList venues
/api/v1/venues - POSTCreate a venue
/api/v1/venues - GETGet a venue
/api/v1/venues/{id} - DELETEDelete a venue
/api/v1/venues/{id} - PATCHUpdate a venue
/api/v1/venues/{id}
Staff
The people who work events, with their rates.
- GETList staff
/api/v1/staff - POSTCreate a staff member
/api/v1/staff - GETGet a staff member
/api/v1/staff/{id} - DELETEDelete a staff member
/api/v1/staff/{id} - PATCHUpdate a staff member
/api/v1/staff/{id}
Colours
The colour vocabulary. A variant’s colors and an event’s colourScheme are matched by label, not by ID, so listing these is how you learn which labels will match. Renaming one retags everything that used the old label.
- GETList colours
/api/v1/colors - POSTCreate a colour
/api/v1/colors - DELETEDelete a colour
/api/v1/colors/{id} - PATCHUpdate a colour
/api/v1/colors/{id}
Categories
The category vocabulary. A product’s category is matched by label, so listing these is how you learn which labels will match. Renaming one retags every product that carried the old label.