Create a source
Adds a vendor connection to the organisation's catalogue. The kind is fixed; config must fit it (a feed needs a URL and a platform, an API source a connector). Set credentials separately with PUT /v1/sources/{id}/credentials.
- Scopes
sources:write - Rate classwrite
- Idempotency-Key required
/v1/sourcesAdds a vendor connection to the organisation's catalogue. The kind is fixed; config must fit it (a feed needs a URL and a platform, an API source a connector). Set credentials separately with PUT /v1/sources/{id}/credentials.
Authorization
apiKey An API key (fo_live_… / fo_test_…) as a bearer token
In: header
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"
Unique key for this operation, reused on retries (24 h)
1 <= length <= 257Preview the write and change nothing: true answers the would-be response, explain a Preview (application/vnd.furniops.preview+json)
Value in
- "true"
- "explain"
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Fields for a new source
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
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/v1/sources" \ -H "Idempotency-Key: string" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "kind": "api", "licence_basis": "vendor_agreement" }'{ "object": "source", "id": "string", "catalogue": "string", "name": "string", "kind": "api", "connector": "string", "config": { "url": "http://example.com", "platform": "shopify", "format": "csv", "currency": "usd", "decimal": "dot", "role": "supplier", "warehouse": "string", "price_code": "string", "inbound": { "senders": [ "string" ] } }, "schedule": { "interval_minutes": 15, "stock_interval_minutes": 15, "adaptive": true }, "status": "active", "status_reason": { "code": "fetch_refused", "message": "string" }, "licence_basis": "vendor_agreement", "first_party": true, "has_credentials": true, "freshness": { "catalogue": null, "stock": null }, "inbound_address": "[email protected]", "version": 1, "created_at": "2019-08-24T14:15:22Z", "updated_at": "2019-08-24T14:15:22Z"}Probe a vendor URL POST
Queues a probe of the URL: robots.txt obeyed, one request at a time, at most 25. Follow it with `GET /v1/source-probes/{id}`. With AI agents in the plan, the onboarding agent then proposes a source from the report when FurniOps can run one for it; a person decides. A catalogue may have 3 open probes and start 20 in a day; one more answers 409 `conflict`.
Remove a source's credentials DELETE
Forgets the source's credentials; runs that need them fail until new ones are set.