FurniOpsDocs
TypeScript SDK

Resources and methods

Every SDK method, the API operation it calls, and how arguments map to paths, bodies and queries.

The client groups operations into resources: furniops.products, furniops.sources, furniops.webhookEndpoints and so on. Each method calls one API operation.

How arguments map

A method takes, in order:

  1. the operation's path parameters, as strings ("prod_…");
  2. its input, when it has one: the JSON body for a write, or the query parameters for a read;
  3. the per-call options, always optional.
// Path parameters first, then the body or query, then per-call options.
await furniops.products.get("prod_034XqBaL2mRLTZPXyRbaUc"); // GET /v1/products/{id}
furniops.products.list({ updated_since: "2026-10-01T00:00:00Z" }); // GET /v1/products?…
await furniops.webhookEndpoints.create({
  url: "https://example.com/hooks/furniops", // POST /v1/webhook-endpoints
  event_types: ["offer.changed"],
});
await furniops.webhookEndpoints.getDelivery(endpointId, deliveryId); // GET …/deliveries/{delivery}

Field names are exactly the API's (event_types, starting_after), so the API reference reads straight across. The input is required when the operation requires a body or a query parameter, and optional otherwise.

Results are the typed response body, plus lastResponse. List methods return a PagePromise. changes.stream returns a ChangeStream.

Every method

This table is generated from a map the docs' build type-checks against the SDK, so a method listed here exists with exactly this operation's signature.

MethodOperationDoes
furniops.agent.listTools()GET /v1/agent/toolsList the caller's agent tools
furniops.agents.listSettings()GET /v1/agentsList the agents' settings
furniops.agents.updateSettings()PATCH /v1/agents/{agent}Update an agent's settings
furniops.agreementAcceptances.list()GET /v1/agreement-acceptancesList the organisation's acceptances
furniops.agreements.accept()POST /v1/agreements/{kind}/acceptancesAccept an agreement for the organisation
furniops.agreements.get()GET /v1/agreements/{kind}Read an agreement and where the organisation stands
furniops.assistant.createConversationForMe()POST /v1/assistant/conversationsStart a conversation
furniops.assistant.createMemoryForMe()POST /v1/assistant/memoriesSave a memory
furniops.assistant.deleteConversationForMe()DELETE /v1/assistant/conversations/{conversation}Delete a conversation
furniops.assistant.deleteMemoriesForMe()DELETE /v1/assistant/memoriesDelete all your memories
furniops.assistant.deleteMemoryForMe()DELETE /v1/assistant/memories/{memory}Delete a memory
furniops.assistant.getConversationForMe()GET /v1/assistant/conversations/{conversation}Retrieve a conversation
furniops.assistant.getMyAssistant()GET /v1/assistant/meRetrieve Ask AI for you
furniops.assistant.getOrgSettings()GET /v1/assistant/settingsRetrieve Ask AI for the organisation
furniops.assistant.getSpend()GET /v1/assistant/spendRetrieve Ask AI spend
furniops.assistant.listConversationsForMe()GET /v1/assistant/conversationsList your conversations
furniops.assistant.listMemoriesForMe()GET /v1/assistant/memoriesList your memories
furniops.assistant.turn()POST /v1/assistant/conversations/{conversation}/turnsTalk to FurniOps AI
furniops.assistant.updateMemoryForMe()PATCH /v1/assistant/memories/{memory}Update a memory
furniops.assistant.updateMyAssistant()PATCH /v1/assistant/meUpdate Ask AI for you
furniops.assistant.updateOrgSettings()PATCH /v1/assistant/settingsUpdate Ask AI for the organisation
furniops.auditEvents.list()GET /v1/audit-eventsList audit events
furniops.auditEvents.undo()POST /v1/audit-events/{id}/undoUndo an audited change
furniops.billing.cancelScheduledChange()POST /v1/billing/subscription/scheduled-change/cancelCancel a scheduled plan change
furniops.billing.cancelSubscription()POST /v1/billing/subscription/cancelCancel at the period's end
furniops.billing.createCreditPurchase()POST /v1/billing/credits/purchasesBuy FurniOps AI credit
furniops.billing.get()GET /v1/billingRead billing
furniops.billing.getCreditBalance()GET /v1/billing/creditsRead FurniOps AI credit
furniops.billing.getCreditPurchase()GET /v1/billing/credits/purchases/{purchase}Retrieve a credit purchase
furniops.billing.getCreditRateCard()GET /v1/billing/credits/ratesRead the credit rate card
furniops.billing.listCreditEntries()GET /v1/billing/credits/entriesList credit entries
furniops.billing.listCreditPurchases()GET /v1/billing/credits/purchasesList credit purchases
furniops.billing.listInvoices()GET /v1/billing/invoicesList invoices
furniops.billing.previewCreditPurchase()POST /v1/billing/credits/purchases/previewPreview a credit purchase
furniops.billing.previewSubscription()POST /v1/billing/previewPreview a subscription
furniops.billing.resumeSubscription()POST /v1/billing/subscription/resumeKeep a cancelled subscription
furniops.billing.setUpCard()POST /v1/billing/cardChange the card
furniops.billing.subscribe()POST /v1/billing/subscriptionSubscribe, or change plan
furniops.billing.updateCreditSettings()PATCH /v1/billing/credits/settingsUpdate how credit is spent
furniops.billing.updateDetails()PATCH /v1/billing/detailsUpdate the billing name and email
furniops.brand.checkClaim()POST /v1/brand/claims/{id}/checkGather a claim's evidence again
furniops.brand.fileClaim()POST /v1/brand/claimsClaim a brand
furniops.brand.get()GET /v1/brandRead the organisation's brand
furniops.brand.getClaim()GET /v1/brand/claims/{id}Read a claim
furniops.brand.listClaims()GET /v1/brand/claimsList the organisation's claims
furniops.brand.previewClaimInvitation()POST /v1/brand/invitations/previewRead an invitation to claim a brand
furniops.brand.update()PATCH /v1/brandEdit the organisation's brand
furniops.brand.withdrawClaim()POST /v1/brand/claims/{id}/withdrawWithdraw a claim
furniops.catalogue.get()GET /v1/catalogueRead the organisation's own catalogue
furniops.catalogue.getPublicationRun()GET /v1/catalogue/publication-runs/{id}Retrieve a publication run
furniops.catalogue.listImages()GET /v1/catalogue/imagesList the catalogue's images
furniops.catalogue.listPublicationRuns()GET /v1/catalogue/publication-runsList publication runs
furniops.catalogue.listVariants()GET /v1/catalogue/variantsList the catalogue's variants with price levels and stock
furniops.catalogue.publish()POST /v1/catalogue/publishPublish the catalogue to the network
furniops.catalogue.setProductVisibility()POST /v1/catalogue/visibilityHide products from the network, or list them again
furniops.catalogue.withdraw()POST /v1/catalogue/withdrawWithdraw the catalogue from the network
furniops.categories.list()GET /v1/categoriesList the FurniOps taxonomy
furniops.changes.list()GET /v1/changesRead the change feed
furniops.changes.listRecentChanges()GET /v1/changes/recentRead the newest changes first
furniops.changes.stream()GET /v1/streamStream the change feed
furniops.demand.record()POST /v1/demandRecord demand
furniops.exports.create()POST /v1/exportsStart an export
furniops.exports.get()GET /v1/exports/{id}Get an export
furniops.exports.list()GET /v1/exportsList exports
furniops.mappings.confirm()POST /v1/mappings/{id}/confirmConfirm a mapping
furniops.mappings.get()GET /v1/mappings/{id}Retrieve a mapping
furniops.matching.getJudgeSettings()GET /v1/matching/judge-settingsRetrieve the AI judge's settings
furniops.matching.updateJudgeSettings()PATCH /v1/matching/judge-settingsUpdate the AI judge's settings
furniops.matchPairs.dismiss()POST /v1/match-pairs/{id}/dismissDismiss a review pair
furniops.matchPairs.get()GET /v1/match-pairs/{id}Retrieve a review pair
furniops.matchPairs.list()GET /v1/match-pairsList review pairs
furniops.matchPairs.merge()POST /v1/match-pairs/{id}/mergeMerge a review pair
furniops.matchPairs.reopen()POST /v1/match-pairs/{id}/reopenReopen a dismissed review pair
furniops.me.listMyOrgs()GET /v1/me/orgsList the user's organisations
furniops.media.get()GET /v1/media/{id}Get a stored image
furniops.merges.get()GET /v1/merges/{id}Retrieve a merge
furniops.merges.list()GET /v1/mergesList merges
furniops.merges.undo()POST /v1/merges/{id}/undoUndo a merge
furniops.offers.list()GET /v1/offersList offers
furniops.org.get()GET /v1/orgRead the caller's organisation
furniops.plans.list()GET /v1/plansList the plans on sale
furniops.products.get()GET /v1/products/{id}Get a product
furniops.products.list()GET /v1/productsList products
furniops.proposals.accept()POST /v1/proposals/{id}/acceptAccept a proposal
furniops.proposals.get()GET /v1/proposals/{id}Retrieve a proposal
furniops.proposals.list()GET /v1/proposalsList proposals
furniops.proposals.reject()POST /v1/proposals/{id}/rejectReject a proposal
furniops.requestLogs.get()GET /v1/request-logs/{id}Get a request log
furniops.requestLogs.list()GET /v1/request-logsList request logs
furniops.runs.get()GET /v1/runs/{id}Retrieve a run
furniops.sourceProbes.create()POST /v1/source-probesProbe a vendor URL
furniops.sourceProbes.get()GET /v1/source-probes/{id}Retrieve a source probe
furniops.sourceProbes.list()GET /v1/source-probesList source probes
furniops.sources.create()POST /v1/sourcesCreate a source
furniops.sources.createRun()POST /v1/sources/{id}/runsStart a run
furniops.sources.createUpload()POST /v1/sources/{id}/uploadsStart an upload
furniops.sources.deleteCredentials()DELETE /v1/sources/{id}/credentialsRemove a source's credentials
furniops.sources.get()GET /v1/sources/{id}Retrieve a source
furniops.sources.list()GET /v1/sourcesList sources
furniops.sources.listCategories()GET /v1/sources/{id}/categoriesList a source's categories
furniops.sources.listInboundMessages()GET /v1/sources/{id}/inbound-messagesList a source's inbound emails
furniops.sources.listMappings()GET /v1/sources/{id}/mappingsList a source's mappings
furniops.sources.listRuns()GET /v1/sources/{id}/runsList a source's runs
furniops.sources.pushRecords()POST /v1/sources/{id}/recordsWrite products to a push source
furniops.sources.replayRun()POST /v1/sources/{id}/replayReplay a source
furniops.sources.rotateInboundAddress()POST /v1/sources/{id}/inbound-address/rotateRotate a source's inbound address
furniops.sources.saveCategoryRules()POST /v1/sources/{id}/categoriesSet a source's category rules
furniops.sources.setCredentials()PUT /v1/sources/{id}/credentialsSet a source's credentials
furniops.sources.test()POST /v1/sources/{id}/testTest a source
furniops.sources.update()PATCH /v1/sources/{id}Update a source
furniops.status.get()GET /v1/statusRead the platform's current health
furniops.status.getHistory()GET /v1/status/historyRead the platform's daily health
furniops.test.triggerEvent()POST /v1/test/eventsTrigger a sample event
furniops.uploads.complete()POST /v1/uploads/{id}/completeComplete an upload
furniops.uploads.get()GET /v1/uploads/{id}Retrieve an upload
furniops.usage.get()GET /v1/usageRead the month's usage
furniops.usage.getSeries()GET /v1/usage/seriesRead one meter over time
furniops.variants.check()POST /v1/variants/{id}/checksCheck a variant now
furniops.vendor.getProductStats()GET /v1/vendor/stats/productsRead the vendor's most read products
furniops.vendor.getStats()GET /v1/vendor/statsRead the vendor's reach and data health
furniops.vendor.getStatsSeries()GET /v1/vendor/stats/seriesRead the vendor's reach week by week
furniops.vendorProfiles.get()GET /v1/vendor-profiles/{id}Read a vendor profile
furniops.vendorProfiles.list()GET /v1/vendor-profilesSearch the vendor directory
furniops.webhookEndpoints.create()POST /v1/webhook-endpointsCreate a webhook endpoint
furniops.webhookEndpoints.delete()DELETE /v1/webhook-endpoints/{id}Delete a webhook endpoint
furniops.webhookEndpoints.get()GET /v1/webhook-endpoints/{id}Get a webhook endpoint
furniops.webhookEndpoints.getDelivery()GET /v1/webhook-endpoints/{id}/deliveries/{delivery}Get a delivery
furniops.webhookEndpoints.list()GET /v1/webhook-endpointsList webhook endpoints
furniops.webhookEndpoints.listDeliveries()GET /v1/webhook-endpoints/{id}/deliveriesList an endpoint's deliveries
furniops.webhookEndpoints.recoverDeliveries()POST /v1/webhook-endpoints/{id}/recoverSend failed deliveries again
furniops.webhookEndpoints.resendDelivery()POST /v1/webhook-endpoints/{id}/deliveries/{delivery}/resendSend a delivery again
furniops.webhookEndpoints.rotateSecret()POST /v1/webhook-endpoints/{id}/rotate-secretRotate an endpoint's secret
furniops.webhookEndpoints.sendTest()POST /v1/webhook-endpoints/{id}/testSend a test event
furniops.webhookEndpoints.update()PATCH /v1/webhook-endpoints/{id}Update a webhook endpoint

Types

Every schema in the API is exported as a type, for your own functions:

type Product = Schemas["Product"];
type Source = ResponseData<"getSource">; // a success body, by operation ID
type Run = PageItem<"listRuns">; // one item of a list
type CreateRunArgs = OperationArgs<"createRun">; // a method's parameters
type CreateRunResult = OperationResult<"createRun">; // and its result

ErrorCode is the union of every error code, and Problem the error body.

On this page