Search the vendor directory
Brands on FurniOps, by name: every vendor profile with its website domain, whether the brand verified it, and its catalogue's ID (the catalogue products carry). Search by part of a name (q, spelling-tolerant) or by website domain. No profile names the organisation that holds it.
- Scopes
products:read - Rate classread
/v1/vendor-profilesBrands on FurniOps, by name: every vendor profile with its website domain, whether the brand verified it, and its catalogue's ID (the catalogue products carry). Search by part of a name (q, spelling-tolerant) or by website domain. No profile names the organisation that holds it.
Authorization
apiKey An API key (fo_live_… / fo_test_…) as a bearer token
In: header
Query Parameters
Page size
1 <= value <= 10020Opaque position returned by a previous page
^[A-Za-z0-9_-]{1,512}$Opaque position returned by a previous page
^[A-Za-z0-9_-]{1,512}$Part of the name or of a brand name, spelling-tolerant
2 <= length <= 100Only the profile on this domain or one of its subdomains
^(?=.{1,253}$)(?!-)[a-z0-9-]{1,63}(?<!-)(?:\.(?!-)[a-z0-9-]{1,63}(?<!-))+$unclaimed: FurniOps holds it, from data it gathered. claimed: a vendor organisation holds it
Value in
- "unclaimed"
- "claimed"
Only verified (or only unverified) profiles
Header Parameters
Dated API version; pinned per organisation on first use and overridable per request
Value in
- "2026-10-01"
- "2026-10-04"
The data the request acts on: test is the organisation's sandbox. An OAuth token picks it (live by default); an API key's mode is fixed, and naming the other one is refused
Value in
- "live"
- "test"
ETag of a cached representation; a match returns 304
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/v1/vendor-profiles"{ "object": "list", "data": [ { "object": "vendor_profile", "id": "string", "name": "string", "slug": "string", "brands": [ "string" ], "website_domain": "string", "status": "unclaimed", "verified": true, "verified_at": "2019-08-24T14:15:22Z", "catalogue": "string", "created_at": "2019-08-24T14:15:22Z" } ], "has_more": true, "next_cursor": "string"}Read a vendor profile GET
One brand on FurniOps: its name, brands, website domain and verification.
Accept a proposal POST
Applies the proposal as the person accepting it, through the same change a person makes (category rules: saved, then the source replayed; a mapping: confirmed, then replayed; a source: created), and needs that change's permission too (`sources:write`). A proposal not waiting for a person answers 409; one that no longer applies (the source paused or busy) answers 409 and stays proposed. A triage note has nothing to apply: accepting one answers 409; reject dismisses it.