List inventory feed workflows

List the inventory feed workflows that match your filters, with their rules and latest uploaded file.

GEThttps://api.spyne.ai/partner/input-workflow
AuthBearer token (console user)Rate limitNot documentedProcessingDatabase reads per workflow, plus link signing for the latest file.

You can filter by enterpriseId, teamId, partnerId, dealerId, isActive and a created-date range. Each workflow comes with its active rules (with conditions) and its latest uploaded file, whose s3_url is a temporary signed link. A rooftop's IMS workflow is the one whose partnerProviderTypes contains IMS. All filters are optional; with no filters every workflow is returned.

Before you call it

  • You need the bearer token of a signed-in console user. The route does not check that the rooftop belongs to the caller.
  • Always send enterpriseId and teamId to scope the result to one rooftop. The UI also filters the result to teamId and isActive: true itself.
  • Database reads per workflow, plus link signing for the latest file. Rate limit: not documented.

Request parameters

Requiredalways sendOptionalcan be left outRequired ifrequired only in the case described
ParameterTypeRequiredDescription
Header———
AuthorizationstringRequiredBearer YOUR_TOKEN
Query———
enterpriseIdstringOptional<enterpriseId>. Send it to scope the result.
teamIdstringOptional<teamId>. Send it to scope the result.
partnerIdstringOptionalPartner id. Must be a valid id of an existing partner.
dealerIdstringOptionalThe rooftop's id at the partner.
isActivestringOptionaltrue or false.
startDate, endDatestringRequired ifCreated-date range. Send both or neither.
Request checklist
  1. Authenticate: set Authorization: Bearer YOUR_TOKEN.
  2. Scope it: send enterpriseId and teamId.
  3. Find the IMS workflow: pick the active workflow whose partnerProviderTypes contains IMS. Keep its _id to update it.

Sample request

curl -X GET "https://api.spyne.ai/partner/input-workflow?enterpriseId=<enterpriseId>&teamId=<teamId>" \
  -H "Authorization: Bearer YOUR_TOKEN"
import requests

res = requests.get(
    "https://api.spyne.ai/partner/input-workflow",
    params={"enterpriseId": "<enterpriseId>", "teamId": "<teamId>"},
    headers={"Authorization": "Bearer YOUR_TOKEN"},
)
workflows = [
    w for w in res.json()["data"]
    if w.get("isActive") and "IMS" in (w.get("partnerProviderTypes") or [])
]
const qs = new URLSearchParams({ enterpriseId: "<enterpriseId>", teamId: "<teamId>" });
const res = await fetch(`https://api.spyne.ai/partner/input-workflow?${qs}`, {
  headers: { Authorization: "Bearer YOUR_TOKEN" },
});
const { data } = await res.json();

Sample response

{
  "success": true,
  "message": "Input workflows retrieved successfully",
  "data": [
    {
      "_id": "<workflowId>",
      "name": "Example Inventory Feed - Inventory Provider",
      "enterpriseId": "<enterpriseId>",
      "teamId": "<teamId>",
      "userId": "<userId>",
      "partnerId": "<partnerId>",
      "dealerId": "<dealerId>",
      "isActive": true,
      "createDraft": true,
      "reseller": false,
      "partnerProviderTypes": ["IMS"],
      "thresholdCounts": { "newCars": -1, "usedCars": -1 },
      "preliminaryConfigs": { "enabled": false, "thresholds": { "new": -1, "used": -1 } },
      "productOptions": { "spin": false, "catalog": false, "featureVideo": false, "mediaKit": false, "conversationalAi": false },
      "processingConfigs": {},
      "includeImageId": false,
      "isCgiFlowEnabled": false,
      "customIntegrations": {},
      "rules": [],
      "latestFileUpload": null,
      "createdAt": "2026-01-01T00:00:00.000Z",
      "updatedAt": "2026-01-01T00:00:00.000Z"
    }
  ]
}
{ "success": false, "message": "Validation failed", "errors": ["Both startDate and endDate must be provided together"] }
{ "success": false, "error": "Authentication token required" }
{ "success": false, "message": "Failed to retrieve input workflows", "error": "<error message>" }

Response parameters

ParameterTypeDescription
successbooleantrue on success.
messagestringResult message.
dataarrayMatching workflows.
data[]._idstringWorkflow id. Use it to update the workflow.
data[].namestringWorkflow name.
data[].enterpriseId, teamIdstringDealer group and rooftop.
data[].userIdstringOwner user of the dealer group, set at create time.
data[].partnerIdstringFeed partner, from List inventory and history partners.
data[].dealerIdstringThe rooftop's id at the partner.
data[].isActivebooleanWhether the feed is active.
data[].createDraftbooleanDraft flag sent by the UI.
data[].resellerbooleanSet from the rooftop's reseller status at create time.
data[].partnerProviderTypesstring[]IMS, PHOTO, CGI.
data[].thresholdCountsobjectnewCars and usedCars. -1 means disabled.
data[].preliminaryConfigsobjectenabled and thresholds (new, used). Lower image-count bar for IMS workflows.
data[].productOptionsobjectspin, catalog, featureVideo, mediaKit, conversationalAi flags.
data[].processingConfigsobjectMedia processing ids (background, number plate, banner, video, voice, music) and aiHotspot.
data[].includeImageId, isCgiFlowEnabledbooleanPartner-specific flags.
data[].customIntegrationsobjectPartner add-ons, as stored. Empty when none.
data[].customIntegrations.evox.access_tokenstringPresent only when the Evox add-on is set. Credential field returned by the API. Never log or display it.
data[].rulesarrayActive rules, each with processingConfigs and conditions.
data[].latestFileUploadobject or nullLatest uploaded feed file. s3_url is a temporary signed link.

Errors

StatusCodeWhen it happens
400Validation failedInvalid or unknown partnerId, isActive not true or false, only one of startDate and endDate, invalid dates, or startDate after endDate.
401Authentication token required or Invalid AuthenticationMissing or rejected token.
500Failed to retrieve input workflowsDatabase or link signing error.

What happens next

If there is an active IMS workflow, show it and update it. If not, create one.


Did this page help you?