FurniOpsDocs

Catalogues and licences

Your own catalogue, the network catalogue, and how a licence narrows what you can see of it by source and by field group, the same way on every path.

FurniOps keeps data in catalogues. Your organisation has its own: everything your sources bring in. The network catalogue holds vendor data FurniOps maintains for many organisations. A catalogue licence (lic_…) lets your organisation see part of the network catalogue.

You seeOf your own catalogueOf a licensed catalogueOf any other catalogue
Products and variantsevery fieldthe granted field groups, from licensed sourcesnothing
Offersevery offeroffers from licensed sources, with price or stock grantednothing
Eventsevery eventthe same narrowing; an event with nothing left is skippednothing
Source healthyour sourcesnever: it stays with the source's ownernothing

What a licence grants

A licence names a catalogue and narrows it two ways:

  • Sources: every source of the catalogue, or a list of them.
  • Field groups: which kinds of field you see. Every field is in exactly one group.
GroupFields
contentEvery field of a product's or variant's data except media: title, brand, description, category, sku, colour, dimensions, cartons, compliance and the rest.
mediaA product's or variant's images (media).
priceAn offer's currency, cost, msrp, map, price and compare_at.
stockAn offer's other fields: quantity, incoming, availability and lead_time_days.
*Every group, including any added later.

Several licences on one catalogue add up: their sources and field groups unite. A licence can have a start and an end; outside that window it grants nothing. Licences are arranged with FurniOps, not through the API.

How the narrowing works

  • A product or variant data field is shown when its group is granted and the value comes from a licensed source. A value FurniOps set itself, with no source behind it, follows its group alone.
  • An offer is shown only when it is from a licensed source and price or stock is granted. Of its fields, you see only the granted groups. Without stock, availability reads unknown.
  • A licence that grants only offer groups (price, stock) does not show the products those offers belong to.
  • An update event left with no visible field is skipped, and the change feed's cursor moves past it, so you never receive an empty change.

Because a licence can leave fields out, every field of a product's or variant's data, and every price and stock field of an offer, is optional in the API's schemas. Identity fields (id, status, version, an offer's source and observed_at) are always present. Check for a field before using it:

for (const variant of product.variants) {
  for (const offer of variant.offers) {
    if (offer.cost !== undefined) {
      // The licence grants price, and this source gave a cost.
    }
  }
}

One projection on every path

The read API, the change feed, the stream and webhooks all pass data through one licence projection. A field you cannot read with GET /v1/products/{id} never reaches you in an event either, and a fat payload's object equals what the read API would have shown at that version. When your licence changes, the next read and the next event follow it.

A source's licence basis

Each of your sources records why FurniOps may use its data, in licence_basis:

ValueMeaning
vendor_agreementYou have an agreement with the vendor to use its data.
public_dataThe vendor publishes this data, such as a public storefront feed.
tenant_accountIt is read with your organisation's own account with the vendor.

It is required when you create a source and can be changed with PATCH /v1/sources/{id}.

On this page