Go to App

SKU Manager API

Public API for SKU Manager. Use API keys for authentication.

Include your API key in the Authorization header: Authorization: Bearer skm_live_your_key_here

Rate Limits

API keys are rate-limited per minute. The default limit is 100 requests/minute. When exceeded, the API returns a RATE_LIMITED error with a retryAfter value in seconds.

Scopes

An API key can only do what its scopes allow. Each operation below shows the scope it requires. Choose scopes when you create the key.

Your organization ID

Some operations ask for an organizationId. Read it from currentApiKey.

Schema

Introspection is turned off in production. Download the schema from schema.graphql to generate types.

Paging

products returns 25 rows unless you say otherwise. Pass limit and offset in its filter.

Finding products

Filter products instead of paging through the catalogue. searchTerm matches words in the title, description, brand and variant SKUs and titles. skuPattern finds SKUs containing some text. brand finds an exact brand. All three ignore case. skus finds SKUs that match exactly.

Units

Send weight in grams and dimensions in millimetres. Any other weightUnit or dimensionUnit is refused, because a converted value is never guessed.

Prices, weight and dimensions are decimal strings, such as "19.95" and "18", so no precision is lost. A JSON number is refused.

Setting stock

A product's quantity is calculated from its inventory records, so createProduct refuses it. Set opening stock with updateInventory. When stock arrives against a purchase order, use an inventory receipt.

Adding images

Use addProductImageFromUrl for an image at a public https address. It must finish within 12 seconds, so use the steps below for a slow host or a large file. To send a file:

  1. Call requestProductImageUpload.
  2. POST the file to the returned url as multipart/form-data, with every entry of fields first and the file last.
  3. Call confirmProductImageUpload, with altText and sortOrder if you want them. It checks the file and adds it to the product. Check success; imageId is the new image.

If the file is stored but can't be added, success is false and fileId is set. Pass it to addProductImage to try again.

Sales channels

A new product is not sent to any channel until you connect it:

  1. Find the channel with salesChannels.
  2. Call connectProductToChannel. This queues a push that creates the product on the channel.
  3. Read Product.storeConnections for the result. To push again, call syncProductToChannel and follow its job with channelSyncJob. Calling it straight after connecting is safe: the two pushes run one after the other.

Choose where the product appears, such as Online Store or Point of Sale, with setProductChannelSurfaces, and read it back from Product.storeConnections.surfaces: isIncluded is true on the surfaces the product is on, and isPublished is true where shoppers can see it now. A draft is on its surfaces with isPublished false everywhere. salesChannels gives each channel's defaultSurfaceIds, where a new product appears unless you set it.

A product's status decides what shoppers see: DRAFT and ARCHIVED stay hidden, while ACTIVE and UNLISTED are visible. Once connected, every later save is pushed too.

channels:read reads channels and where a product can appear on them. channels:update connects and pushes products and sets where they appear with setProductChannelSurfaces. Changing a product's status needs products:update, like any other product field, and is pushed to every channel the product is on. Deleting a connected product removes it from the channel, so it needs channels:update as well as products:delete.

A product with stock on hand can't be deleted. Set each variant to zero with updateInventory first. When stock is the only reason, the refusal has the error code HAS_STOCK, and extensions.variants lists each variant ID with its quantity. A product on an open order, holding a reservation or used in a kit is refused too, with no specific code yet.

Contact

SKU Manager Support

https://skumanager.com/support

API Endpoints
https://api.skumanager.com/graphql

Queries

availableStoreLocations

Description

Get available store locations from connected platforms

Required scope: warehouse:read

Response

Returns [StoreLocation!]

Arguments
Name Description
organizationId - ID!

Example

Query
query availableStoreLocations($organizationId: ID!) {
  availableStoreLocations(organizationId: $organizationId) {
    address
    city
    country
    id
    isActive
    metadata
    name
    postalCode
    state
    storeConnectionId
    storeType
  }
}
Variables
{"organizationId": "4"}
Response
{
  "data": {
    "availableStoreLocations": [
      {
        "address": "abc123",
        "city": "xyz789",
        "country": "xyz789",
        "id": "abc123",
        "isActive": true,
        "metadata": {},
        "name": "xyz789",
        "postalCode": "abc123",
        "state": "abc123",
        "storeConnectionId": "4",
        "storeType": "AMAZON"
      }
    ]
  }
}

channelSyncJob

Description

Check a product push, using the job ID syncProductToChannel returns.

Required scope: channels:read

Response

Returns a ChannelSyncJob

Arguments
Name Description
jobId - ID!

Example

Query
query channelSyncJob($jobId: ID!) {
  channelSyncJob(jobId: $jobId) {
    completedAt
    createdAt
    error
    id
    status
  }
}
Variables
{"jobId": 4}
Response
{
  "data": {
    "channelSyncJob": {
      "completedAt": "abc123",
      "createdAt": "xyz789",
      "error": "abc123",
      "id": 4,
      "status": "abc123"
    }
  }
}

currentApiKey

Description

The key making this request, including your organization ID.

Response

Returns a CurrentApiKey

Example

Query
query currentApiKey {
  currentApiKey {
    organizationId
    rateLimitPerMin
    scopes
  }
}
Response
{
  "data": {
    "currentApiKey": {
      "organizationId": "4",
      "rateLimitPerMin": 123,
      "scopes": ["xyz789"]
    }
  }
}

customerOrderInvoicePdf

Description

The tax invoice PDF for an order link. Null unless the link is valid, this browser has verified the order email, and an invoice is available.

Response

Returns a CustomerOrderInvoicePdf

Arguments
Name Description
token - String!

Example

Query
query customerOrderInvoicePdf($token: String!) {
  customerOrderInvoicePdf(token: $token) {
    base64
    filename
  }
}
Variables
{"token": "xyz789"}
Response
{
  "data": {
    "customerOrderInvoicePdf": {
      "base64": "xyz789",
      "filename": "xyz789"
    }
  }
}

customerOrderView

Description

The customer view of an order, by its access-link token. Null when the link is not valid. Personal details are included only once this browser has verified the order email. preview: true skips recording the "viewed" stamp — for staff previewing the page a customer would see (SKU-1879), not a permission: any caller may pass it.

Response

Returns a CustomerOrderView

Arguments
Name Description
preview - Boolean
token - String!

Example

Query
query customerOrderView(
  $preview: Boolean,
  $token: String!
) {
  customerOrderView(
    preview: $preview,
    token: $token
  ) {
    details {
      ...CustomerOrderDetailsFragment
    }
    items {
      ...CustomerOrderItemFragment
    }
    orderDate
    orderNumber
    organization {
      ...CustomerOrderOrganizationFragment
    }
    packages {
      ...CustomerOrderPackageFragment
    }
    status
    unshippedItems {
      ...CustomerOrderItemFragment
    }
    verification {
      ...CustomerOrderVerificationFragment
    }
  }
}
Variables
{"preview": true, "token": "abc123"}
Response
{
  "data": {
    "customerOrderView": {
      "details": CustomerOrderDetails,
      "items": [CustomerOrderItem],
      "orderDate": "xyz789",
      "orderNumber": "abc123",
      "organization": CustomerOrderOrganization,
      "packages": [CustomerOrderPackage],
      "status": "CANCELLED",
      "unshippedItems": [CustomerOrderItem],
      "verification": CustomerOrderVerification
    }
  }
}

getWebAuthnConfig

Description

Get WebAuthn/Passkey configuration (public - no auth required). Used by frontend for consistent RP ID across all passkey registration flows.

Response

Returns a RelyingParty

Example

Query
query getWebAuthnConfig {
  getWebAuthnConfig {
    id
    name
  }
}
Response
{
  "data": {
    "getWebAuthnConfig": {
      "id": "xyz789",
      "name": "xyz789"
    }
  }
}

inventoryReceipt

Description

Get inventory receipt by ID

Required scope: inventory:receive

Response

Returns an InventoryReceipt

Arguments
Name Description
id - ID!

Example

Query
query inventoryReceipt($id: ID!) {
  inventoryReceipt(id: $id) {
    InventoryReceiptItems {
      ...InventoryReceiptItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrder {
      ...PurchaseOrderFragment
    }
    ReceivedBy {
      ...UserFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    createdAt
    discrepancyNotes
    hasDiscrepancies
    id
    itemCount
    notes
    organizationId
    purchaseOrderId
    receiptNumber
    receivedByEmailSnapshot
    receivedByIdSnapshot
    receivedByNameSnapshot
    receivedByUserId
    receivedDate
    status
    totalQuantityExpected
    totalQuantityReceived
    updatedAt
    varianceQuantity
    warehouseLocationId
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "inventoryReceipt": {
      "InventoryReceiptItems": [InventoryReceiptItem],
      "Organization": Organization,
      "PurchaseOrder": PurchaseOrder,
      "ReceivedBy": User,
      "WarehouseLocation": WarehouseLocation,
      "createdAt": "xyz789",
      "discrepancyNotes": "abc123",
      "hasDiscrepancies": false,
      "id": 4,
      "itemCount": 987,
      "notes": "abc123",
      "organizationId": "4",
      "purchaseOrderId": "xyz789",
      "receiptNumber": "xyz789",
      "receivedByEmailSnapshot": "xyz789",
      "receivedByIdSnapshot": 4,
      "receivedByNameSnapshot": "xyz789",
      "receivedByUserId": "4",
      "receivedDate": "xyz789",
      "status": "CANCELLED",
      "totalQuantityExpected": 123,
      "totalQuantityReceived": 987,
      "updatedAt": "xyz789",
      "varianceQuantity": 123,
      "warehouseLocationId": 4
    }
  }
}

inventoryReceipts

Description

Get inventory receipts with filters

Required scope: inventory:receive

Response

Returns [InventoryReceipt!]

Arguments
Name Description
endDate - String
organizationId - ID!
purchaseOrderId - ID
startDate - String
status - String
warehouseLocationId - ID

Example

Query
query inventoryReceipts(
  $endDate: String,
  $organizationId: ID!,
  $purchaseOrderId: ID,
  $startDate: String,
  $status: String,
  $warehouseLocationId: ID
) {
  inventoryReceipts(
    endDate: $endDate,
    organizationId: $organizationId,
    purchaseOrderId: $purchaseOrderId,
    startDate: $startDate,
    status: $status,
    warehouseLocationId: $warehouseLocationId
  ) {
    InventoryReceiptItems {
      ...InventoryReceiptItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrder {
      ...PurchaseOrderFragment
    }
    ReceivedBy {
      ...UserFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    createdAt
    discrepancyNotes
    hasDiscrepancies
    id
    itemCount
    notes
    organizationId
    purchaseOrderId
    receiptNumber
    receivedByEmailSnapshot
    receivedByIdSnapshot
    receivedByNameSnapshot
    receivedByUserId
    receivedDate
    status
    totalQuantityExpected
    totalQuantityReceived
    updatedAt
    varianceQuantity
    warehouseLocationId
  }
}
Variables
{
  "endDate": "xyz789",
  "organizationId": 4,
  "purchaseOrderId": "4",
  "startDate": "xyz789",
  "status": "abc123",
  "warehouseLocationId": 4
}
Response
{
  "data": {
    "inventoryReceipts": [
      {
        "InventoryReceiptItems": [InventoryReceiptItem],
        "Organization": Organization,
        "PurchaseOrder": PurchaseOrder,
        "ReceivedBy": User,
        "WarehouseLocation": WarehouseLocation,
        "createdAt": "xyz789",
        "discrepancyNotes": "abc123",
        "hasDiscrepancies": false,
        "id": "4",
        "itemCount": 987,
        "notes": "abc123",
        "organizationId": "4",
        "purchaseOrderId": "abc123",
        "receiptNumber": "xyz789",
        "receivedByEmailSnapshot": "xyz789",
        "receivedByIdSnapshot": 4,
        "receivedByNameSnapshot": "abc123",
        "receivedByUserId": 4,
        "receivedDate": "abc123",
        "status": "CANCELLED",
        "totalQuantityExpected": 123,
        "totalQuantityReceived": 123,
        "updatedAt": "abc123",
        "varianceQuantity": 987,
        "warehouseLocationId": "4"
      }
    ]
  }
}

listAgents

Description

List the desktop agent installs registered for an organization, with the devices each one owns. Used by the org Agents management view to review and remove stale/decommissioned agents.

Required scope: devices:read

Response

Returns [Agent!]

Arguments
Name Description
limit - Int Default = 50
offset - Int Default = 0
orgId - String Organization ID (defaults to caller's org)

Example

Query
query listAgents(
  $limit: Int,
  $offset: Int,
  $orgId: String
) {
  listAgents(
    limit: $limit,
    offset: $offset,
    orgId: $orgId
  ) {
    agentUid
    agentVersion
    createdAt
    devices {
      ...DeviceFragment
    }
    id
    lastSeen
    name
    orgId
    updatedAt
  }
}
Variables
{
  "limit": 50,
  "offset": 0,
  "orgId": "abc123"
}
Response
{
  "data": {
    "listAgents": [
      {
        "agentUid": "abc123",
        "agentVersion": "xyz789",
        "createdAt": "xyz789",
        "devices": [Device],
        "id": "4",
        "lastSeen": "xyz789",
        "name": "xyz789",
        "orgId": "abc123",
        "updatedAt": "abc123"
      }
    ]
  }
}

listDevices

Description

List all devices registered for an organization

Required scope: devices:read

Response

Returns [Device!]

Arguments
Name Description
limit - Int Max results (default 50, max 200). Default = 50
offset - Int Skip N results. Default = 0
orgId - String Organization ID (defaults to caller's org)

Example

Query
query listDevices(
  $limit: Int,
  $offset: Int,
  $orgId: String
) {
  listDevices(
    limit: $limit,
    offset: $offset,
    orgId: $orgId
  ) {
    agent {
      ...AgentFragment
    }
    agentDeviceId
    apiKeyId
    capabilities
    config
    createdAt
    id
    lastSeen
    lastWeightAt
    lastWeightStatus
    mediaProfile {
      ...MediaProfileFragment
    }
    name
    orgId
    printJobs {
      ...PrintJobFragment
    }
    status
    type
    updatedAt
    weightGrams
  }
}
Variables
{
  "limit": 50,
  "offset": 0,
  "orgId": "xyz789"
}
Response
{
  "data": {
    "listDevices": [
      {
        "agent": Agent,
        "agentDeviceId": "abc123",
        "apiKeyId": "xyz789",
        "capabilities": {},
        "config": {},
        "createdAt": "xyz789",
        "id": 4,
        "lastSeen": "abc123",
        "lastWeightAt": "xyz789",
        "lastWeightStatus": "ERROR",
        "mediaProfile": MediaProfile,
        "name": "abc123",
        "orgId": "abc123",
        "printJobs": [PrintJob],
        "status": "OFFLINE",
        "type": "PRINTER",
        "updatedAt": "xyz789",
        "weightGrams": 987.65
      }
    ]
  }
}

listPrintJobs

Description

List print jobs for a device, optionally filtered by status. Paginated, ordered newest-first (createdAt DESC).

Required scope: devices:read

Response

Returns [PrintJob!]

Arguments
Name Description
deviceId - String!
limit - Int Max results (default 50, max 200). Default = 50
offset - Int Skip N results. Default = 0
status - PrintJobStatus

Example

Query
query listPrintJobs(
  $deviceId: String!,
  $limit: Int,
  $offset: Int,
  $status: PrintJobStatus
) {
  listPrintJobs(
    deviceId: $deviceId,
    limit: $limit,
    offset: $offset,
    status: $status
  ) {
    copies
    createdAt
    device {
      ...DeviceFragment
    }
    deviceId
    error
    format
    id
    leaseExpiresAt
    orgId
    pages
    payloadSizeBytes
    status
    updatedAt
  }
}
Variables
{
  "deviceId": "xyz789",
  "limit": 50,
  "offset": 0,
  "status": "DISPATCHED"
}
Response
{
  "data": {
    "listPrintJobs": [
      {
        "copies": 987,
        "createdAt": "abc123",
        "device": Device,
        "deviceId": "abc123",
        "error": "xyz789",
        "format": "PDF",
        "id": "4",
        "leaseExpiresAt": "xyz789",
        "orgId": "abc123",
        "pages": "xyz789",
        "payloadSizeBytes": 987,
        "status": "DISPATCHED",
        "updatedAt": "abc123"
      }
    ]
  }
}

order

Response

Returns an Order

Arguments
Name Description
id - ID!

Example

Query
query order($id: ID!) {
  order(id: $id) {
    Customer {
      ...CustomerFragment
    }
    FulfillmentPackages {
      ...FulfillmentPackageFragment
    }
    OrderComments {
      ...OrderCommentFragment
    }
    OrderLineItems {
      ...OrderLineItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    WarehouseAllocation {
      ...OrderWarehouseAllocationFragment
    }
    billingAddress
    billingAddress2
    billingCity
    billingCompany
    billingCountry
    billingCountryCode
    billingFirstName
    billingLastName
    billingPostalCode
    billingState
    cancelReason
    cancelStaffNote
    cancelledAt
    capturedAmount
    carrier
    closedAt
    confirmed
    createdAt
    currency
    currentShippingCost
    customerIp
    customerNotes
    deliveredAt
    discountAmount
    discountCodes
    email
    exchangeRate
    fulfilledAt
    fulfillmentStatus
    grossProfit {
      ...OrderGrossProfitFragment
    }
    id
    importChargesCollectedAmount
    importChargesCollectedBy
    importChargesCollection
    importChargesConflict
    importChargesFactSource
    importChargesResolvedCollection
    importChargesResolvedSource
    importChargesShopifyMixed
    importChargesShopifyReported
    internalNotes
    internalOrderNumber
    lastSyncedAt
    monthlyOrderCap {
      ...OrderCapStatusFragment
    }
    notifyCustomerOnRefund
    orderDate
    orderNumber
    organizationId
    paidAt
    paymentGateway
    paymentMethod
    paymentStatus
    phone
    presentmentCapturedAmount
    presentmentCurrency
    presentmentCurrentShippingCost
    presentmentDiscountAmount
    presentmentRefundedAmount
    presentmentShippingCost
    presentmentShippingDiscountAmount
    presentmentSubtotal
    presentmentTaxAmount
    presentmentTotalAmount
    processedAt
    refundedAmount
    refunds
    resolvedShippingService {
      ...ResolvedShippingServiceFragment
    }
    restockOnCancel
    riskAssessmentDetails
    riskLevel
    riskRecommendation
    shippingAddress
    shippingAddress2
    shippingCity
    shippingCompany
    shippingCost
    shippingCountry
    shippingCountryCode
    shippingDiscountAmount
    shippingFirstName
    shippingLastName
    shippingLines
    shippingMethod
    shippingPostalCode
    shippingState
    shopifyLastCancelError
    shopifyLastCancelSyncAt
    shopifyOrderId
    shopifyOrderNumber
    source
    status
    storeId
    subtotal
    syncError
    syncStatus
    tags
    taxAmount
    taxLines {
      ...OrderTaxLineFragment
    }
    taxesIncluded
    timeline {
      ...OrderTimelineEventFragment
    }
    totalAmount
    trackingNumber
    trackingUrl
    transactions
    updatedAt
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "order": {
      "Customer": Customer,
      "FulfillmentPackages": [FulfillmentPackage],
      "OrderComments": [OrderComment],
      "OrderLineItems": [OrderLineItem],
      "Organization": Organization,
      "WarehouseAllocation": OrderWarehouseAllocation,
      "billingAddress": "abc123",
      "billingAddress2": "abc123",
      "billingCity": "abc123",
      "billingCompany": "abc123",
      "billingCountry": "xyz789",
      "billingCountryCode": "xyz789",
      "billingFirstName": "abc123",
      "billingLastName": "abc123",
      "billingPostalCode": "abc123",
      "billingState": "abc123",
      "cancelReason": "abc123",
      "cancelStaffNote": "xyz789",
      "cancelledAt": "xyz789",
      "capturedAmount": "abc123",
      "carrier": "abc123",
      "closedAt": "abc123",
      "confirmed": false,
      "createdAt": "abc123",
      "currency": "abc123",
      "currentShippingCost": "abc123",
      "customerIp": "xyz789",
      "customerNotes": "abc123",
      "deliveredAt": "abc123",
      "discountAmount": "xyz789",
      "discountCodes": {},
      "email": "abc123",
      "exchangeRate": "abc123",
      "fulfilledAt": "xyz789",
      "fulfillmentStatus": "CANCELLED",
      "grossProfit": OrderGrossProfit,
      "id": "4",
      "importChargesCollectedAmount": "abc123",
      "importChargesCollectedBy": "MERCHANT",
      "importChargesCollection": "COLLECTED",
      "importChargesConflict": true,
      "importChargesFactSource": "API",
      "importChargesResolvedCollection": "COLLECTED",
      "importChargesResolvedSource": "API",
      "importChargesShopifyMixed": true,
      "importChargesShopifyReported": "COLLECTED",
      "internalNotes": "xyz789",
      "internalOrderNumber": 987,
      "lastSyncedAt": "abc123",
      "monthlyOrderCap": OrderCapStatus,
      "notifyCustomerOnRefund": true,
      "orderDate": "xyz789",
      "orderNumber": "abc123",
      "organizationId": "4",
      "paidAt": "abc123",
      "paymentGateway": "abc123",
      "paymentMethod": "abc123",
      "paymentStatus": "AUTHORIZED",
      "phone": "abc123",
      "presentmentCapturedAmount": "abc123",
      "presentmentCurrency": "abc123",
      "presentmentCurrentShippingCost": "abc123",
      "presentmentDiscountAmount": "xyz789",
      "presentmentRefundedAmount": "xyz789",
      "presentmentShippingCost": "xyz789",
      "presentmentShippingDiscountAmount": "abc123",
      "presentmentSubtotal": "abc123",
      "presentmentTaxAmount": "xyz789",
      "presentmentTotalAmount": "abc123",
      "processedAt": "xyz789",
      "refundedAmount": "abc123",
      "refunds": {},
      "resolvedShippingService": ResolvedShippingService,
      "restockOnCancel": true,
      "riskAssessmentDetails": {},
      "riskLevel": "xyz789",
      "riskRecommendation": "xyz789",
      "shippingAddress": "abc123",
      "shippingAddress2": "abc123",
      "shippingCity": "abc123",
      "shippingCompany": "xyz789",
      "shippingCost": "xyz789",
      "shippingCountry": "abc123",
      "shippingCountryCode": "xyz789",
      "shippingDiscountAmount": "abc123",
      "shippingFirstName": "abc123",
      "shippingLastName": "abc123",
      "shippingLines": {},
      "shippingMethod": "xyz789",
      "shippingPostalCode": "abc123",
      "shippingState": "abc123",
      "shopifyLastCancelError": "abc123",
      "shopifyLastCancelSyncAt": "abc123",
      "shopifyOrderId": "abc123",
      "shopifyOrderNumber": "abc123",
      "source": "abc123",
      "status": "CANCELLED",
      "storeId": "4",
      "subtotal": "xyz789",
      "syncError": "xyz789",
      "syncStatus": "ERROR",
      "tags": ["abc123"],
      "taxAmount": "abc123",
      "taxLines": [OrderTaxLine],
      "taxesIncluded": false,
      "timeline": [OrderTimelineEvent],
      "totalAmount": "xyz789",
      "trackingNumber": "abc123",
      "trackingUrl": "xyz789",
      "transactions": {},
      "updatedAt": "xyz789"
    }
  }
}

orderCount

Description

Get total count of orders for the organization, with optional filters for pagination

Required scope: orders:read

Response

Returns an Int

Arguments
Name Description
customerId - ID Filter by customer
fulfillmentStatus - String Filter by fulfillment status
orderedFrom - DateTime Only orders whose orderDate is at or after this instant (ISO 8601).
organizationId - ID!
paymentStatus - String Filter by payment status
presentmentCurrencies - [String!]
search - String Search by order number or customer name
shopCurrencies - [String!]
status - String Filter by order status
statusFilter - String Predefined filter: all, ready, unfulfilled, unpaid, pickable, partialPicked, picked, fulfilled, hold, cancelled. Any other value is parsed as a comma-separated list of OrderStatus enum members (e.g. "DRAFT,PENDING"); an unrecognised value is rejected.
warehouseLocationId - ID Filter by allocated warehouse
withoutCustomer - Boolean true: only orders with no customer; false: only orders with one; omitted: both.

Example

Query
query orderCount(
  $customerId: ID,
  $fulfillmentStatus: String,
  $orderedFrom: DateTime,
  $organizationId: ID!,
  $paymentStatus: String,
  $presentmentCurrencies: [String!],
  $search: String,
  $shopCurrencies: [String!],
  $status: String,
  $statusFilter: String,
  $warehouseLocationId: ID,
  $withoutCustomer: Boolean
) {
  orderCount(
    customerId: $customerId,
    fulfillmentStatus: $fulfillmentStatus,
    orderedFrom: $orderedFrom,
    organizationId: $organizationId,
    paymentStatus: $paymentStatus,
    presentmentCurrencies: $presentmentCurrencies,
    search: $search,
    shopCurrencies: $shopCurrencies,
    status: $status,
    statusFilter: $statusFilter,
    warehouseLocationId: $warehouseLocationId,
    withoutCustomer: $withoutCustomer
  )
}
Variables
{
  "customerId": 4,
  "fulfillmentStatus": "abc123",
  "orderedFrom": "2007-12-03T10:15:30Z",
  "organizationId": "4",
  "paymentStatus": "xyz789",
  "presentmentCurrencies": ["xyz789"],
  "search": "abc123",
  "shopCurrencies": ["abc123"],
  "status": "abc123",
  "statusFilter": "xyz789",
  "warehouseLocationId": "4",
  "withoutCustomer": true
}
Response
{"data": {"orderCount": 123}}

orderStatusCounts

Description

Get counts for all order status categories in a single query

Response

Returns an OrderStatusCounts

Arguments
Name Description
organizationId - ID!
warehouseLocationId - ID Filter by allocated warehouse

Example

Query
query orderStatusCounts(
  $organizationId: ID!,
  $warehouseLocationId: ID
) {
  orderStatusCounts(
    organizationId: $organizationId,
    warehouseLocationId: $warehouseLocationId
  ) {
    all
    cancelled
    fulfilled
    hold
    partialPicked
    pickable
    picked
    ready
    unfulfilled
    unpaid
  }
}
Variables
{
  "organizationId": "4",
  "warehouseLocationId": 4
}
Response
{
  "data": {
    "orderStatusCounts": {
      "all": 123,
      "cancelled": 987,
      "fulfilled": 987,
      "hold": 987,
      "partialPicked": 987,
      "pickable": 987,
      "picked": 987,
      "ready": 987,
      "unfulfilled": 123,
      "unpaid": 987
    }
  }
}

orders

Response

Returns [Order!]

Arguments
Name Description
customerId - ID
fulfillmentStatus - String Filter by fulfillment status
limit - Int Records per page (max 100, default 25). Default = 25
offset - Int Number of records to skip for pagination. Default = 0
orderedFrom - DateTime Only orders whose orderDate is at or after this instant (ISO 8601).
organizationId - ID!
paymentStatus - String Filter by payment status
presentmentCurrencies - [String!]
search - String Search by order number or customer name
shopCurrencies - [String!]
shopifyOrderIds - [String!] Filter to exactly these Shopify order IDs. When supplied, bypasses limit/offset pagination entirely and returns every matching row — for sync callers (SKU-1385) that already know which orders they need and must not silently miss one to the default/max page size. Accepts at most 250 ids per call; a longer list is rejected.
sortBy - String Sort field: order, external, date, customer, total, fulfillment
sortDirection - String Sort direction: asc or desc (default: desc)
status - String
statusFilter - String Predefined filter: all, ready, unfulfilled, unpaid, pickable, partialPicked, picked, fulfilled, hold, cancelled. Any other value is parsed as a comma-separated list of OrderStatus enum members (e.g. "DRAFT,PENDING"); an unrecognised value is rejected.
warehouseLocationId - ID Filter by allocated warehouse (for warehouse context filtering)
withoutCustomer - Boolean true: only orders with no customer; false: only orders with one; omitted: both.

Example

Query
query orders(
  $customerId: ID,
  $fulfillmentStatus: String,
  $limit: Int,
  $offset: Int,
  $orderedFrom: DateTime,
  $organizationId: ID!,
  $paymentStatus: String,
  $presentmentCurrencies: [String!],
  $search: String,
  $shopCurrencies: [String!],
  $shopifyOrderIds: [String!],
  $sortBy: String,
  $sortDirection: String,
  $status: String,
  $statusFilter: String,
  $warehouseLocationId: ID,
  $withoutCustomer: Boolean
) {
  orders(
    customerId: $customerId,
    fulfillmentStatus: $fulfillmentStatus,
    limit: $limit,
    offset: $offset,
    orderedFrom: $orderedFrom,
    organizationId: $organizationId,
    paymentStatus: $paymentStatus,
    presentmentCurrencies: $presentmentCurrencies,
    search: $search,
    shopCurrencies: $shopCurrencies,
    shopifyOrderIds: $shopifyOrderIds,
    sortBy: $sortBy,
    sortDirection: $sortDirection,
    status: $status,
    statusFilter: $statusFilter,
    warehouseLocationId: $warehouseLocationId,
    withoutCustomer: $withoutCustomer
  ) {
    Customer {
      ...CustomerFragment
    }
    FulfillmentPackages {
      ...FulfillmentPackageFragment
    }
    OrderComments {
      ...OrderCommentFragment
    }
    OrderLineItems {
      ...OrderLineItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    WarehouseAllocation {
      ...OrderWarehouseAllocationFragment
    }
    billingAddress
    billingAddress2
    billingCity
    billingCompany
    billingCountry
    billingCountryCode
    billingFirstName
    billingLastName
    billingPostalCode
    billingState
    cancelReason
    cancelStaffNote
    cancelledAt
    capturedAmount
    carrier
    closedAt
    confirmed
    createdAt
    currency
    currentShippingCost
    customerIp
    customerNotes
    deliveredAt
    discountAmount
    discountCodes
    email
    exchangeRate
    fulfilledAt
    fulfillmentStatus
    grossProfit {
      ...OrderGrossProfitFragment
    }
    id
    importChargesCollectedAmount
    importChargesCollectedBy
    importChargesCollection
    importChargesConflict
    importChargesFactSource
    importChargesResolvedCollection
    importChargesResolvedSource
    importChargesShopifyMixed
    importChargesShopifyReported
    internalNotes
    internalOrderNumber
    lastSyncedAt
    monthlyOrderCap {
      ...OrderCapStatusFragment
    }
    notifyCustomerOnRefund
    orderDate
    orderNumber
    organizationId
    paidAt
    paymentGateway
    paymentMethod
    paymentStatus
    phone
    presentmentCapturedAmount
    presentmentCurrency
    presentmentCurrentShippingCost
    presentmentDiscountAmount
    presentmentRefundedAmount
    presentmentShippingCost
    presentmentShippingDiscountAmount
    presentmentSubtotal
    presentmentTaxAmount
    presentmentTotalAmount
    processedAt
    refundedAmount
    refunds
    resolvedShippingService {
      ...ResolvedShippingServiceFragment
    }
    restockOnCancel
    riskAssessmentDetails
    riskLevel
    riskRecommendation
    shippingAddress
    shippingAddress2
    shippingCity
    shippingCompany
    shippingCost
    shippingCountry
    shippingCountryCode
    shippingDiscountAmount
    shippingFirstName
    shippingLastName
    shippingLines
    shippingMethod
    shippingPostalCode
    shippingState
    shopifyLastCancelError
    shopifyLastCancelSyncAt
    shopifyOrderId
    shopifyOrderNumber
    source
    status
    storeId
    subtotal
    syncError
    syncStatus
    tags
    taxAmount
    taxLines {
      ...OrderTaxLineFragment
    }
    taxesIncluded
    timeline {
      ...OrderTimelineEventFragment
    }
    totalAmount
    trackingNumber
    trackingUrl
    transactions
    updatedAt
  }
}
Variables
{
  "customerId": "4",
  "fulfillmentStatus": "abc123",
  "limit": 25,
  "offset": 0,
  "orderedFrom": "2007-12-03T10:15:30Z",
  "organizationId": "4",
  "paymentStatus": "xyz789",
  "presentmentCurrencies": ["abc123"],
  "search": "abc123",
  "shopCurrencies": ["xyz789"],
  "shopifyOrderIds": ["xyz789"],
  "sortBy": "xyz789",
  "sortDirection": "xyz789",
  "status": "xyz789",
  "statusFilter": "abc123",
  "warehouseLocationId": 4,
  "withoutCustomer": true
}
Response
{
  "data": {
    "orders": [
      {
        "Customer": Customer,
        "FulfillmentPackages": [FulfillmentPackage],
        "OrderComments": [OrderComment],
        "OrderLineItems": [OrderLineItem],
        "Organization": Organization,
        "WarehouseAllocation": OrderWarehouseAllocation,
        "billingAddress": "abc123",
        "billingAddress2": "xyz789",
        "billingCity": "abc123",
        "billingCompany": "abc123",
        "billingCountry": "abc123",
        "billingCountryCode": "xyz789",
        "billingFirstName": "xyz789",
        "billingLastName": "abc123",
        "billingPostalCode": "abc123",
        "billingState": "xyz789",
        "cancelReason": "abc123",
        "cancelStaffNote": "xyz789",
        "cancelledAt": "xyz789",
        "capturedAmount": "xyz789",
        "carrier": "abc123",
        "closedAt": "abc123",
        "confirmed": false,
        "createdAt": "abc123",
        "currency": "xyz789",
        "currentShippingCost": "xyz789",
        "customerIp": "xyz789",
        "customerNotes": "xyz789",
        "deliveredAt": "abc123",
        "discountAmount": "abc123",
        "discountCodes": {},
        "email": "xyz789",
        "exchangeRate": "abc123",
        "fulfilledAt": "abc123",
        "fulfillmentStatus": "CANCELLED",
        "grossProfit": OrderGrossProfit,
        "id": 4,
        "importChargesCollectedAmount": "xyz789",
        "importChargesCollectedBy": "MERCHANT",
        "importChargesCollection": "COLLECTED",
        "importChargesConflict": false,
        "importChargesFactSource": "API",
        "importChargesResolvedCollection": "COLLECTED",
        "importChargesResolvedSource": "API",
        "importChargesShopifyMixed": false,
        "importChargesShopifyReported": "COLLECTED",
        "internalNotes": "xyz789",
        "internalOrderNumber": 987,
        "lastSyncedAt": "abc123",
        "monthlyOrderCap": OrderCapStatus,
        "notifyCustomerOnRefund": true,
        "orderDate": "xyz789",
        "orderNumber": "xyz789",
        "organizationId": 4,
        "paidAt": "abc123",
        "paymentGateway": "abc123",
        "paymentMethod": "xyz789",
        "paymentStatus": "AUTHORIZED",
        "phone": "xyz789",
        "presentmentCapturedAmount": "abc123",
        "presentmentCurrency": "xyz789",
        "presentmentCurrentShippingCost": "abc123",
        "presentmentDiscountAmount": "abc123",
        "presentmentRefundedAmount": "abc123",
        "presentmentShippingCost": "xyz789",
        "presentmentShippingDiscountAmount": "abc123",
        "presentmentSubtotal": "abc123",
        "presentmentTaxAmount": "abc123",
        "presentmentTotalAmount": "abc123",
        "processedAt": "abc123",
        "refundedAmount": "abc123",
        "refunds": {},
        "resolvedShippingService": ResolvedShippingService,
        "restockOnCancel": false,
        "riskAssessmentDetails": {},
        "riskLevel": "xyz789",
        "riskRecommendation": "xyz789",
        "shippingAddress": "abc123",
        "shippingAddress2": "abc123",
        "shippingCity": "abc123",
        "shippingCompany": "abc123",
        "shippingCost": "abc123",
        "shippingCountry": "xyz789",
        "shippingCountryCode": "abc123",
        "shippingDiscountAmount": "abc123",
        "shippingFirstName": "xyz789",
        "shippingLastName": "abc123",
        "shippingLines": {},
        "shippingMethod": "xyz789",
        "shippingPostalCode": "abc123",
        "shippingState": "abc123",
        "shopifyLastCancelError": "xyz789",
        "shopifyLastCancelSyncAt": "abc123",
        "shopifyOrderId": "xyz789",
        "shopifyOrderNumber": "abc123",
        "source": "xyz789",
        "status": "CANCELLED",
        "storeId": "4",
        "subtotal": "xyz789",
        "syncError": "xyz789",
        "syncStatus": "ERROR",
        "tags": ["xyz789"],
        "taxAmount": "abc123",
        "taxLines": [OrderTaxLine],
        "taxesIncluded": true,
        "timeline": [OrderTimelineEvent],
        "totalAmount": "abc123",
        "trackingNumber": "xyz789",
        "trackingUrl": "abc123",
        "transactions": {},
        "updatedAt": "xyz789"
      }
    ]
  }
}

passwordSetupLinkStatus

Description

Status of an invitation or password-reset link, so the reset page can show an expired link immediately instead of asking for a password it already knows will be rejected. Returns UNKNOWN when the check is declined (rate limited or limiter unavailable) — treat that as unchecked, not as a bad link.

Required scope: orders:read

Response

Returns a PasswordSetupLinkStatus

Arguments
Name Description
token - String!

Example

Query
query passwordSetupLinkStatus($token: String!) {
  passwordSetupLinkStatus(token: $token)
}
Variables
{"token": "xyz789"}
Response
{"data": {"passwordSetupLinkStatus": "EXPIRED"}}

product

Description

Get product by ID

Required scope: products:read

Response

Returns a Product

Arguments
Name Description
id - ID!

Example

Query
query product($id: ID!) {
  product(id: $id) {
    Organization {
      ...OrganizationFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    ProductStoreConnection {
      ...ProductStoreConnectionFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    allowBackorder
    assemblyMode
    availableQuantity
    barcode
    basePrice
    brand
    bundleComponentCount
    bundleDiscountPercent
    bundleItems {
      ...ProductBundleItemFragment
    }
    bundlePricing
    bundledIn {
      ...ProductBundleItemFragment
    }
    category
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    defaultVariant {
      ...ProductVariantFragment
    }
    description
    dimensionUnit
    displayTitle
    effectiveAssemblyMode
    handle
    hasOnlyDefaultVariant
    height
    hsCode
    id
    images {
      ...ProductImageFragment
    }
    isActive
    isActiveSKU
    isGiftCard
    kitInventoryMode
    length
    lowStockThreshold
    metaDescription
    metaTitle
    option1Name
    option2Name
    option3Name
    optionDefinitions {
      ...ProductOptionDefinitionFragment
    }
    organizationId
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productLocationInventories {
      ...ProductLocationInventoryFragment
    }
    productType
    productVariants {
      ...ProductVariantFragment
    }
    provinceOfOrigin
    publishedAt
    purchasableItemId
    quantity
    requiresShipping
    reservedQuantity
    sku
    skuType
    slug
    status
    stockStatus
    storeConnections {
      ...ProductStoreConnectionFragment
    }
    supplier {
      ...SupplierFragment
    }
    supplierId
    tags
    taxCode
    taxable
    title
    totalQuantity
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    type
    updatedAt
    warehouseLocation
    weight
    weightUnit
    width
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "product": {
      "Organization": Organization,
      "ProductLocationInventory": [
        ProductLocationInventory
      ],
      "ProductStoreConnection": [ProductStoreConnection],
      "SourcingListings": [SourcingListing],
      "allowBackorder": false,
      "assemblyMode": "BOTH",
      "availableQuantity": 123,
      "barcode": "abc123",
      "basePrice": "abc123",
      "brand": "xyz789",
      "bundleComponentCount": 123,
      "bundleDiscountPercent": "abc123",
      "bundleItems": [ProductBundleItem],
      "bundlePricing": "CALCULATED",
      "bundledIn": [ProductBundleItem],
      "category": "abc123",
      "compareAtPrice": "xyz789",
      "costPrice": "xyz789",
      "countryOfOrigin": "abc123",
      "createdAt": "abc123",
      "customsDescription": "xyz789",
      "defaultVariant": ProductVariant,
      "description": "abc123",
      "dimensionUnit": "CM",
      "displayTitle": "xyz789",
      "effectiveAssemblyMode": "BOTH",
      "handle": "xyz789",
      "hasOnlyDefaultVariant": false,
      "height": "xyz789",
      "hsCode": "xyz789",
      "id": "4",
      "images": [ProductImage],
      "isActive": true,
      "isActiveSKU": false,
      "isGiftCard": true,
      "kitInventoryMode": "ACTIVE",
      "length": "xyz789",
      "lowStockThreshold": 123,
      "metaDescription": "xyz789",
      "metaTitle": "xyz789",
      "option1Name": "abc123",
      "option2Name": "xyz789",
      "option3Name": "xyz789",
      "optionDefinitions": [ProductOptionDefinition],
      "organizationId": "4",
      "primaryImage": ProductImage,
      "primaryImageId": "xyz789",
      "productLocationInventories": [
        ProductLocationInventory
      ],
      "productType": "abc123",
      "productVariants": [ProductVariant],
      "provinceOfOrigin": "xyz789",
      "publishedAt": "xyz789",
      "purchasableItemId": "abc123",
      "quantity": 987,
      "requiresShipping": true,
      "reservedQuantity": 123,
      "sku": "abc123",
      "skuType": "BUNDLE",
      "slug": "abc123",
      "status": "ACTIVE",
      "stockStatus": "ALWAYS_IN_STOCK",
      "storeConnections": [ProductStoreConnection],
      "supplier": Supplier,
      "supplierId": "xyz789",
      "tags": ["xyz789"],
      "taxCode": "abc123",
      "taxable": false,
      "title": "xyz789",
      "totalQuantity": 987,
      "trackInventory": false,
      "trackInventoryNeedsRestoration": false,
      "trackInventoryUserSet": false,
      "type": "BUNDLE",
      "updatedAt": "abc123",
      "warehouseLocation": "xyz789",
      "weight": "xyz789",
      "weightUnit": "GRAMS",
      "width": "xyz789"
    }
  }
}

productImages

Description

Get images for a product

Required scope: products:read

Response

Returns [ProductImage!]

Arguments
Name Description
productId - ID!

Example

Query
query productImages($productId: ID!) {
  productImages(productId: $productId) {
    altText
    createdAt
    file {
      ...FileFragment
    }
    fileId
    fileSize
    height
    id
    imageUrl
    product {
      ...ProductFragment
    }
    productId
    shopifyImageId
    shopifyImageLegacyId
    shopifyPosition
    sortOrder
    sourceUrl
    status
    thumbnails
    updatedAt
    url
    width
  }
}
Variables
{"productId": 4}
Response
{
  "data": {
    "productImages": [
      {
        "altText": "xyz789",
        "createdAt": "abc123",
        "file": File,
        "fileId": 4,
        "fileSize": 123,
        "height": 123,
        "id": "4",
        "imageUrl": "xyz789",
        "product": Product,
        "productId": "4",
        "shopifyImageId": "xyz789",
        "shopifyImageLegacyId": "xyz789",
        "shopifyPosition": 123,
        "sortOrder": 987,
        "sourceUrl": "xyz789",
        "status": "xyz789",
        "thumbnails": {},
        "updatedAt": "xyz789",
        "url": "xyz789",
        "width": 123
      }
    ]
  }
}

productLocationInventory

Description

Get product inventory at specific warehouse location

Required scope: inventory:read

Response

Returns a ProductLocationInventory

Arguments
Name Description
locationId - ID
productId - ID!
productVariantId - ID!
warehouseLocationId - ID!

Example

Query
query productLocationInventory(
  $locationId: ID,
  $productId: ID!,
  $productVariantId: ID!,
  $warehouseLocationId: ID!
) {
  productLocationInventory(
    locationId: $locationId,
    productId: $productId,
    productVariantId: $productVariantId,
    warehouseLocationId: $warehouseLocationId
  ) {
    Product {
      ...ProductFragment
    }
    ProductVariant {
      ...ProductVariantFragment
    }
    WarehouseArea {
      ...WarehouseAreaFragment
    }
    WarehouseBay {
      ...WarehouseBayFragment
    }
    WarehouseBin {
      ...WarehouseBinFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    binType
    createdAt
    id
    isPreferred
    lastCountDate
    lastSyncAt
    locationId
    locationPath
    lowStockThreshold
    productId
    productVariantId
    quantity
    syncErrors
    syncStatus
    updatedAt
    warehouseAreaId
    warehouseBayId
    warehouseBinId
    warehouseLocationId
  }
}
Variables
{
  "locationId": "4",
  "productId": "4",
  "productVariantId": 4,
  "warehouseLocationId": "4"
}
Response
{
  "data": {
    "productLocationInventory": {
      "Product": Product,
      "ProductVariant": ProductVariant,
      "WarehouseArea": WarehouseArea,
      "WarehouseBay": WarehouseBay,
      "WarehouseBin": WarehouseBin,
      "WarehouseLocation": WarehouseLocation,
      "binType": "abc123",
      "createdAt": "xyz789",
      "id": 4,
      "isPreferred": false,
      "lastCountDate": "xyz789",
      "lastSyncAt": "abc123",
      "locationId": "4",
      "locationPath": "abc123",
      "lowStockThreshold": 987,
      "productId": "4",
      "productVariantId": "abc123",
      "quantity": 987,
      "syncErrors": {},
      "syncStatus": "ERROR",
      "updatedAt": "xyz789",
      "warehouseAreaId": "abc123",
      "warehouseBayId": "abc123",
      "warehouseBinId": "abc123",
      "warehouseLocationId": "4"
    }
  }
}

productVariant

Description

Get a single product variant by ID

Required scope: products:read

Response

Returns a ProductVariant

Arguments
Name Description
id - ID!

Example

Query
query productVariant($id: ID!) {
  productVariant(id: $id) {
    Product {
      ...ProductFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    PurchasableItem {
      ...PurchasableItemFragment
    }
    allowBackorder
    availableQuantity
    barcode
    basePrice
    calculatedCost
    calculatedCostIsPartial
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    dimensionUnit
    height
    hsCode
    id
    length
    lowStockThreshold
    onHandQuantity
    option1Value
    option2Value
    option3Value
    organizationId
    position
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productId
    provinceOfOrigin
    purchasableItemId
    qrCode
    quantity
    requiresShipping
    reservedQuantity
    sku
    stockStatus
    taxCode
    taxable
    title
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    updatedAt
    weight
    weightUnit
    width
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "productVariant": {
      "Product": Product,
      "ProductLocationInventory": [
        ProductLocationInventory
      ],
      "PurchasableItem": PurchasableItem,
      "allowBackorder": true,
      "availableQuantity": 987,
      "barcode": "xyz789",
      "basePrice": "abc123",
      "calculatedCost": "abc123",
      "calculatedCostIsPartial": true,
      "compareAtPrice": "xyz789",
      "costPrice": "xyz789",
      "countryOfOrigin": "abc123",
      "createdAt": "abc123",
      "customsDescription": "xyz789",
      "dimensionUnit": "CM",
      "height": "abc123",
      "hsCode": "xyz789",
      "id": "4",
      "length": "abc123",
      "lowStockThreshold": 123,
      "onHandQuantity": 987,
      "option1Value": "abc123",
      "option2Value": "xyz789",
      "option3Value": "abc123",
      "organizationId": 4,
      "position": 987,
      "primaryImage": ProductImage,
      "primaryImageId": "abc123",
      "productId": "4",
      "provinceOfOrigin": "xyz789",
      "purchasableItemId": "4",
      "qrCode": "xyz789",
      "quantity": 987,
      "requiresShipping": true,
      "reservedQuantity": 987,
      "sku": "abc123",
      "stockStatus": "ALWAYS_IN_STOCK",
      "taxCode": "abc123",
      "taxable": true,
      "title": "abc123",
      "trackInventory": false,
      "trackInventoryNeedsRestoration": false,
      "trackInventoryUserSet": true,
      "updatedAt": "xyz789",
      "weight": "abc123",
      "weightUnit": "GRAMS",
      "width": "abc123"
    }
  }
}

productVariantBySku

Description

Find a product variant by SKU within an organization

Required scope: products:read

Response

Returns a ProductVariant

Arguments
Name Description
organizationId - ID!
sku - String!

Example

Query
query productVariantBySku(
  $organizationId: ID!,
  $sku: String!
) {
  productVariantBySku(
    organizationId: $organizationId,
    sku: $sku
  ) {
    Product {
      ...ProductFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    PurchasableItem {
      ...PurchasableItemFragment
    }
    allowBackorder
    availableQuantity
    barcode
    basePrice
    calculatedCost
    calculatedCostIsPartial
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    dimensionUnit
    height
    hsCode
    id
    length
    lowStockThreshold
    onHandQuantity
    option1Value
    option2Value
    option3Value
    organizationId
    position
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productId
    provinceOfOrigin
    purchasableItemId
    qrCode
    quantity
    requiresShipping
    reservedQuantity
    sku
    stockStatus
    taxCode
    taxable
    title
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    updatedAt
    weight
    weightUnit
    width
  }
}
Variables
{"organizationId": 4, "sku": "abc123"}
Response
{
  "data": {
    "productVariantBySku": {
      "Product": Product,
      "ProductLocationInventory": [
        ProductLocationInventory
      ],
      "PurchasableItem": PurchasableItem,
      "allowBackorder": true,
      "availableQuantity": 123,
      "barcode": "abc123",
      "basePrice": "abc123",
      "calculatedCost": "abc123",
      "calculatedCostIsPartial": false,
      "compareAtPrice": "abc123",
      "costPrice": "xyz789",
      "countryOfOrigin": "xyz789",
      "createdAt": "xyz789",
      "customsDescription": "xyz789",
      "dimensionUnit": "CM",
      "height": "xyz789",
      "hsCode": "xyz789",
      "id": 4,
      "length": "xyz789",
      "lowStockThreshold": 987,
      "onHandQuantity": 123,
      "option1Value": "abc123",
      "option2Value": "abc123",
      "option3Value": "xyz789",
      "organizationId": 4,
      "position": 987,
      "primaryImage": ProductImage,
      "primaryImageId": "abc123",
      "productId": "4",
      "provinceOfOrigin": "xyz789",
      "purchasableItemId": "4",
      "qrCode": "xyz789",
      "quantity": 987,
      "requiresShipping": true,
      "reservedQuantity": 987,
      "sku": "abc123",
      "stockStatus": "ALWAYS_IN_STOCK",
      "taxCode": "xyz789",
      "taxable": true,
      "title": "abc123",
      "trackInventory": false,
      "trackInventoryNeedsRestoration": true,
      "trackInventoryUserSet": true,
      "updatedAt": "xyz789",
      "weight": "xyz789",
      "weightUnit": "GRAMS",
      "width": "abc123"
    }
  }
}

productVariants

Description

Get all variants for a product

Required scope: products:read

Response

Returns [ProductVariant!]

Arguments
Name Description
organizationId - ID!
productId - ID!

Example

Query
query productVariants(
  $organizationId: ID!,
  $productId: ID!
) {
  productVariants(
    organizationId: $organizationId,
    productId: $productId
  ) {
    Product {
      ...ProductFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    PurchasableItem {
      ...PurchasableItemFragment
    }
    allowBackorder
    availableQuantity
    barcode
    basePrice
    calculatedCost
    calculatedCostIsPartial
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    dimensionUnit
    height
    hsCode
    id
    length
    lowStockThreshold
    onHandQuantity
    option1Value
    option2Value
    option3Value
    organizationId
    position
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productId
    provinceOfOrigin
    purchasableItemId
    qrCode
    quantity
    requiresShipping
    reservedQuantity
    sku
    stockStatus
    taxCode
    taxable
    title
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    updatedAt
    weight
    weightUnit
    width
  }
}
Variables
{"organizationId": 4, "productId": 4}
Response
{
  "data": {
    "productVariants": [
      {
        "Product": Product,
        "ProductLocationInventory": [
          ProductLocationInventory
        ],
        "PurchasableItem": PurchasableItem,
        "allowBackorder": true,
        "availableQuantity": 123,
        "barcode": "abc123",
        "basePrice": "xyz789",
        "calculatedCost": "xyz789",
        "calculatedCostIsPartial": true,
        "compareAtPrice": "abc123",
        "costPrice": "abc123",
        "countryOfOrigin": "xyz789",
        "createdAt": "abc123",
        "customsDescription": "xyz789",
        "dimensionUnit": "CM",
        "height": "abc123",
        "hsCode": "abc123",
        "id": "4",
        "length": "xyz789",
        "lowStockThreshold": 987,
        "onHandQuantity": 987,
        "option1Value": "abc123",
        "option2Value": "abc123",
        "option3Value": "abc123",
        "organizationId": "4",
        "position": 123,
        "primaryImage": ProductImage,
        "primaryImageId": "abc123",
        "productId": "4",
        "provinceOfOrigin": "abc123",
        "purchasableItemId": "4",
        "qrCode": "xyz789",
        "quantity": 987,
        "requiresShipping": true,
        "reservedQuantity": 123,
        "sku": "abc123",
        "stockStatus": "ALWAYS_IN_STOCK",
        "taxCode": "xyz789",
        "taxable": false,
        "title": "abc123",
        "trackInventory": true,
        "trackInventoryNeedsRestoration": true,
        "trackInventoryUserSet": false,
        "updatedAt": "xyz789",
        "weight": "abc123",
        "weightUnit": "GRAMS",
        "width": "xyz789"
      }
    ]
  }
}

productWarehouseInventory

Description

Get all warehouse inventory records for a product

Required scope: inventory:read

Response

Returns [ProductLocationInventory!]

Arguments
Name Description
organizationId - ID Optional org hint; ignored — product record determines org
productId - ID!
productVariantId - ID!

Example

Query
query productWarehouseInventory(
  $organizationId: ID,
  $productId: ID!,
  $productVariantId: ID!
) {
  productWarehouseInventory(
    organizationId: $organizationId,
    productId: $productId,
    productVariantId: $productVariantId
  ) {
    Product {
      ...ProductFragment
    }
    ProductVariant {
      ...ProductVariantFragment
    }
    WarehouseArea {
      ...WarehouseAreaFragment
    }
    WarehouseBay {
      ...WarehouseBayFragment
    }
    WarehouseBin {
      ...WarehouseBinFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    binType
    createdAt
    id
    isPreferred
    lastCountDate
    lastSyncAt
    locationId
    locationPath
    lowStockThreshold
    productId
    productVariantId
    quantity
    syncErrors
    syncStatus
    updatedAt
    warehouseAreaId
    warehouseBayId
    warehouseBinId
    warehouseLocationId
  }
}
Variables
{
  "organizationId": 4,
  "productId": "4",
  "productVariantId": "4"
}
Response
{
  "data": {
    "productWarehouseInventory": [
      {
        "Product": Product,
        "ProductVariant": ProductVariant,
        "WarehouseArea": WarehouseArea,
        "WarehouseBay": WarehouseBay,
        "WarehouseBin": WarehouseBin,
        "WarehouseLocation": WarehouseLocation,
        "binType": "abc123",
        "createdAt": "xyz789",
        "id": 4,
        "isPreferred": false,
        "lastCountDate": "xyz789",
        "lastSyncAt": "abc123",
        "locationId": 4,
        "locationPath": "xyz789",
        "lowStockThreshold": 987,
        "productId": "4",
        "productVariantId": "abc123",
        "quantity": 123,
        "syncErrors": {},
        "syncStatus": "ERROR",
        "updatedAt": "abc123",
        "warehouseAreaId": "xyz789",
        "warehouseBayId": "xyz789",
        "warehouseBinId": "abc123",
        "warehouseLocationId": "4"
      }
    ]
  }
}

products

Description

Get products with filtering

Required scope: products:read

Response

Returns [Product!]

Arguments
Name Description
filter - ProductFilterInput

Example

Query
query products($filter: ProductFilterInput) {
  products(filter: $filter) {
    Organization {
      ...OrganizationFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    ProductStoreConnection {
      ...ProductStoreConnectionFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    allowBackorder
    assemblyMode
    availableQuantity
    barcode
    basePrice
    brand
    bundleComponentCount
    bundleDiscountPercent
    bundleItems {
      ...ProductBundleItemFragment
    }
    bundlePricing
    bundledIn {
      ...ProductBundleItemFragment
    }
    category
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    defaultVariant {
      ...ProductVariantFragment
    }
    description
    dimensionUnit
    displayTitle
    effectiveAssemblyMode
    handle
    hasOnlyDefaultVariant
    height
    hsCode
    id
    images {
      ...ProductImageFragment
    }
    isActive
    isActiveSKU
    isGiftCard
    kitInventoryMode
    length
    lowStockThreshold
    metaDescription
    metaTitle
    option1Name
    option2Name
    option3Name
    optionDefinitions {
      ...ProductOptionDefinitionFragment
    }
    organizationId
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productLocationInventories {
      ...ProductLocationInventoryFragment
    }
    productType
    productVariants {
      ...ProductVariantFragment
    }
    provinceOfOrigin
    publishedAt
    purchasableItemId
    quantity
    requiresShipping
    reservedQuantity
    sku
    skuType
    slug
    status
    stockStatus
    storeConnections {
      ...ProductStoreConnectionFragment
    }
    supplier {
      ...SupplierFragment
    }
    supplierId
    tags
    taxCode
    taxable
    title
    totalQuantity
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    type
    updatedAt
    warehouseLocation
    weight
    weightUnit
    width
  }
}
Variables
{"filter": ProductFilterInput}
Response
{
  "data": {
    "products": [
      {
        "Organization": Organization,
        "ProductLocationInventory": [
          ProductLocationInventory
        ],
        "ProductStoreConnection": [
          ProductStoreConnection
        ],
        "SourcingListings": [SourcingListing],
        "allowBackorder": false,
        "assemblyMode": "BOTH",
        "availableQuantity": 123,
        "barcode": "xyz789",
        "basePrice": "abc123",
        "brand": "xyz789",
        "bundleComponentCount": 123,
        "bundleDiscountPercent": "abc123",
        "bundleItems": [ProductBundleItem],
        "bundlePricing": "CALCULATED",
        "bundledIn": [ProductBundleItem],
        "category": "xyz789",
        "compareAtPrice": "abc123",
        "costPrice": "abc123",
        "countryOfOrigin": "xyz789",
        "createdAt": "xyz789",
        "customsDescription": "abc123",
        "defaultVariant": ProductVariant,
        "description": "xyz789",
        "dimensionUnit": "CM",
        "displayTitle": "abc123",
        "effectiveAssemblyMode": "BOTH",
        "handle": "abc123",
        "hasOnlyDefaultVariant": false,
        "height": "xyz789",
        "hsCode": "abc123",
        "id": 4,
        "images": [ProductImage],
        "isActive": true,
        "isActiveSKU": false,
        "isGiftCard": false,
        "kitInventoryMode": "ACTIVE",
        "length": "xyz789",
        "lowStockThreshold": 987,
        "metaDescription": "xyz789",
        "metaTitle": "xyz789",
        "option1Name": "abc123",
        "option2Name": "xyz789",
        "option3Name": "abc123",
        "optionDefinitions": [ProductOptionDefinition],
        "organizationId": 4,
        "primaryImage": ProductImage,
        "primaryImageId": "xyz789",
        "productLocationInventories": [
          ProductLocationInventory
        ],
        "productType": "abc123",
        "productVariants": [ProductVariant],
        "provinceOfOrigin": "abc123",
        "publishedAt": "xyz789",
        "purchasableItemId": "abc123",
        "quantity": 123,
        "requiresShipping": false,
        "reservedQuantity": 123,
        "sku": "xyz789",
        "skuType": "BUNDLE",
        "slug": "abc123",
        "status": "ACTIVE",
        "stockStatus": "ALWAYS_IN_STOCK",
        "storeConnections": [ProductStoreConnection],
        "supplier": Supplier,
        "supplierId": "xyz789",
        "tags": ["xyz789"],
        "taxCode": "xyz789",
        "taxable": true,
        "title": "xyz789",
        "totalQuantity": 987,
        "trackInventory": false,
        "trackInventoryNeedsRestoration": true,
        "trackInventoryUserSet": true,
        "type": "BUNDLE",
        "updatedAt": "xyz789",
        "warehouseLocation": "abc123",
        "weight": "xyz789",
        "weightUnit": "GRAMS",
        "width": "abc123"
      }
    ]
  }
}

purchaseOrder

Description

Get purchase order by ID

Required scope: purchase-orders:read

Response

Returns a PurchaseOrder

Arguments
Name Description
id - ID!

Example

Query
query purchaseOrder($id: ID!) {
  purchaseOrder(id: $id) {
    CreatedBy {
      ...UserFragment
    }
    CreatedByUser {
      ...UserFragment
    }
    InventoryReceipts {
      ...InventoryReceiptFragment
    }
    LastModifiedBy {
      ...UserFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrderItems {
      ...PurchaseOrderItemFragment
    }
    Supplier {
      ...SupplierFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    actualDeliveryDate
    approvedAt
    approvedBy
    createdAt
    createdByUserEmailSnapshot
    createdByUserId
    createdByUserIdSnapshot
    createdByUserNameSnapshot
    currency
    exchangeRate
    expectedDeliveryDate
    id
    internalNotes
    internalPoNumber
    isFullyReceived
    itemCount
    lastModifiedByUserEmailSnapshot
    lastModifiedByUserId
    lastModifiedByUserIdSnapshot
    lastModifiedByUserNameSnapshot
    notes
    orderDate
    organizationId
    otherCosts
    paymentTerms
    pdfFileId
    pdfGeneratedAt
    pdfUrl
    poNumber
    receiptCount
    remainingQuantity
    sendCount
    sentAt
    sentTo
    shipToWarehouseId
    shippingAddress
    shippingCity
    shippingCost
    shippingCountry
    shippingMethod
    shippingPostalCode
    shippingState
    status
    subtotal
    supplierId
    taxAmount
    totalCost
    totalQuantityOrdered
    totalQuantityReceived
    trackingNumber
    trackingUrl
    updatedAt
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "purchaseOrder": {
      "CreatedBy": User,
      "CreatedByUser": User,
      "InventoryReceipts": [InventoryReceipt],
      "LastModifiedBy": User,
      "Organization": Organization,
      "PurchaseOrderItems": [PurchaseOrderItem],
      "Supplier": Supplier,
      "WarehouseLocation": WarehouseLocation,
      "actualDeliveryDate": "xyz789",
      "approvedAt": "abc123",
      "approvedBy": "xyz789",
      "createdAt": "xyz789",
      "createdByUserEmailSnapshot": "abc123",
      "createdByUserId": 4,
      "createdByUserIdSnapshot": "4",
      "createdByUserNameSnapshot": "abc123",
      "currency": "abc123",
      "exchangeRate": "abc123",
      "expectedDeliveryDate": "xyz789",
      "id": "4",
      "internalNotes": "xyz789",
      "internalPoNumber": 123,
      "isFullyReceived": true,
      "itemCount": 987,
      "lastModifiedByUserEmailSnapshot": "abc123",
      "lastModifiedByUserId": "4",
      "lastModifiedByUserIdSnapshot": 4,
      "lastModifiedByUserNameSnapshot": "abc123",
      "notes": "xyz789",
      "orderDate": "xyz789",
      "organizationId": 4,
      "otherCosts": "abc123",
      "paymentTerms": "xyz789",
      "pdfFileId": "xyz789",
      "pdfGeneratedAt": "xyz789",
      "pdfUrl": "xyz789",
      "poNumber": "abc123",
      "receiptCount": 987,
      "remainingQuantity": 123,
      "sendCount": 987,
      "sentAt": "xyz789",
      "sentTo": "xyz789",
      "shipToWarehouseId": 4,
      "shippingAddress": "xyz789",
      "shippingCity": "abc123",
      "shippingCost": "abc123",
      "shippingCountry": "abc123",
      "shippingMethod": "xyz789",
      "shippingPostalCode": "abc123",
      "shippingState": "xyz789",
      "status": "CANCELLED",
      "subtotal": "xyz789",
      "supplierId": 4,
      "taxAmount": "abc123",
      "totalCost": "xyz789",
      "totalQuantityOrdered": 987,
      "totalQuantityReceived": 123,
      "trackingNumber": "xyz789",
      "trackingUrl": "abc123",
      "updatedAt": "abc123"
    }
  }
}

purchaseOrders

Description

Get purchase orders with filters

Required scope: purchase-orders:read

Response

Returns [PurchaseOrder!]

Arguments
Name Description
currencies - [String!]
endDate - String
organizationId - ID!
startDate - String
status - String
supplierId - ID

Example

Query
query purchaseOrders(
  $currencies: [String!],
  $endDate: String,
  $organizationId: ID!,
  $startDate: String,
  $status: String,
  $supplierId: ID
) {
  purchaseOrders(
    currencies: $currencies,
    endDate: $endDate,
    organizationId: $organizationId,
    startDate: $startDate,
    status: $status,
    supplierId: $supplierId
  ) {
    CreatedBy {
      ...UserFragment
    }
    CreatedByUser {
      ...UserFragment
    }
    InventoryReceipts {
      ...InventoryReceiptFragment
    }
    LastModifiedBy {
      ...UserFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrderItems {
      ...PurchaseOrderItemFragment
    }
    Supplier {
      ...SupplierFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    actualDeliveryDate
    approvedAt
    approvedBy
    createdAt
    createdByUserEmailSnapshot
    createdByUserId
    createdByUserIdSnapshot
    createdByUserNameSnapshot
    currency
    exchangeRate
    expectedDeliveryDate
    id
    internalNotes
    internalPoNumber
    isFullyReceived
    itemCount
    lastModifiedByUserEmailSnapshot
    lastModifiedByUserId
    lastModifiedByUserIdSnapshot
    lastModifiedByUserNameSnapshot
    notes
    orderDate
    organizationId
    otherCosts
    paymentTerms
    pdfFileId
    pdfGeneratedAt
    pdfUrl
    poNumber
    receiptCount
    remainingQuantity
    sendCount
    sentAt
    sentTo
    shipToWarehouseId
    shippingAddress
    shippingCity
    shippingCost
    shippingCountry
    shippingMethod
    shippingPostalCode
    shippingState
    status
    subtotal
    supplierId
    taxAmount
    totalCost
    totalQuantityOrdered
    totalQuantityReceived
    trackingNumber
    trackingUrl
    updatedAt
  }
}
Variables
{
  "currencies": ["abc123"],
  "endDate": "abc123",
  "organizationId": 4,
  "startDate": "xyz789",
  "status": "xyz789",
  "supplierId": 4
}
Response
{
  "data": {
    "purchaseOrders": [
      {
        "CreatedBy": User,
        "CreatedByUser": User,
        "InventoryReceipts": [InventoryReceipt],
        "LastModifiedBy": User,
        "Organization": Organization,
        "PurchaseOrderItems": [PurchaseOrderItem],
        "Supplier": Supplier,
        "WarehouseLocation": WarehouseLocation,
        "actualDeliveryDate": "xyz789",
        "approvedAt": "abc123",
        "approvedBy": "xyz789",
        "createdAt": "xyz789",
        "createdByUserEmailSnapshot": "abc123",
        "createdByUserId": "4",
        "createdByUserIdSnapshot": 4,
        "createdByUserNameSnapshot": "xyz789",
        "currency": "xyz789",
        "exchangeRate": "xyz789",
        "expectedDeliveryDate": "abc123",
        "id": "4",
        "internalNotes": "xyz789",
        "internalPoNumber": 987,
        "isFullyReceived": true,
        "itemCount": 123,
        "lastModifiedByUserEmailSnapshot": "abc123",
        "lastModifiedByUserId": "4",
        "lastModifiedByUserIdSnapshot": "4",
        "lastModifiedByUserNameSnapshot": "xyz789",
        "notes": "xyz789",
        "orderDate": "abc123",
        "organizationId": 4,
        "otherCosts": "abc123",
        "paymentTerms": "xyz789",
        "pdfFileId": "xyz789",
        "pdfGeneratedAt": "xyz789",
        "pdfUrl": "abc123",
        "poNumber": "abc123",
        "receiptCount": 987,
        "remainingQuantity": 123,
        "sendCount": 987,
        "sentAt": "abc123",
        "sentTo": "abc123",
        "shipToWarehouseId": 4,
        "shippingAddress": "xyz789",
        "shippingCity": "abc123",
        "shippingCost": "abc123",
        "shippingCountry": "abc123",
        "shippingMethod": "abc123",
        "shippingPostalCode": "xyz789",
        "shippingState": "abc123",
        "status": "CANCELLED",
        "subtotal": "xyz789",
        "supplierId": "4",
        "taxAmount": "abc123",
        "totalCost": "xyz789",
        "totalQuantityOrdered": 123,
        "totalQuantityReceived": 123,
        "trackingNumber": "xyz789",
        "trackingUrl": "abc123",
        "updatedAt": "xyz789"
      }
    ]
  }
}

salesChannelSurfaces

Description

List the places a channel can show a product, such as Online Store or Point of Sale.

Required scope: channels:read

Response

Returns [ShopifyStorePublication!]

Arguments
Name Description
channelId - ID!

Example

Query
query salesChannelSurfaces($channelId: ID!) {
  salesChannelSurfaces(channelId: $channelId) {
    shopifyPublicationId
    title
  }
}
Variables
{"channelId": 4}
Response
{
  "data": {
    "salesChannelSurfaces": [
      {
        "shopifyPublicationId": "4",
        "title": "xyz789"
      }
    ]
  }
}

salesChannels

Description

List your organization's connected sales channels.

Required scope: channels:read

Response

Returns [SalesChannel!]

Example

Query
query salesChannels {
  salesChannels {
    defaultSurfaceIds
    domain
    id
    isActive
    name
    status
    type
  }
}
Response
{
  "data": {
    "salesChannels": [
      {
        "defaultSurfaceIds": [4],
        "domain": "xyz789",
        "id": 4,
        "isActive": false,
        "name": "abc123",
        "status": "xyz789",
        "type": "xyz789"
      }
    ]
  }
}

sourcingListing

Description

A single sourcing listing.

Required scope: suppliers:read

Response

Returns a SourcingListing

Arguments
Name Description
id - ID!

Example

Query
query sourcingListing($id: ID!) {
  sourcingListing(id: $id) {
    PriceBreaks {
      ...SourcingListingPriceBreakFragment
    }
    Product {
      ...ProductFragment
    }
    ProductVariant {
      ...ProductVariantFragment
    }
    PurchaseOrderItems {
      ...PurchaseOrderItemFragment
    }
    Supplier {
      ...SupplierFragment
    }
    createdAt
    currency
    freeShippingThreshold
    id
    isActive
    isPrimary
    lastOrderedAt
    lastVerifiedAt
    leadTimeDays
    listingUrl
    minimumOrderQuantity
    notes
    organizationId
    packSize
    productId
    productVariantId
    quoteAt {
      ...SourcingQuoteFragment
    }
    shippingFee
    supplierId
    supplierProductName
    supplierSku
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "sourcingListing": {
      "PriceBreaks": [SourcingListingPriceBreak],
      "Product": Product,
      "ProductVariant": ProductVariant,
      "PurchaseOrderItems": [PurchaseOrderItem],
      "Supplier": Supplier,
      "createdAt": "xyz789",
      "currency": "xyz789",
      "freeShippingThreshold": "abc123",
      "id": "4",
      "isActive": false,
      "isPrimary": false,
      "lastOrderedAt": "xyz789",
      "lastVerifiedAt": "xyz789",
      "leadTimeDays": 123,
      "listingUrl": "abc123",
      "minimumOrderQuantity": 123,
      "notes": "abc123",
      "organizationId": 4,
      "packSize": 123,
      "productId": "4",
      "productVariantId": "4",
      "quoteAt": SourcingQuote,
      "shippingFee": "abc123",
      "supplierId": 4,
      "supplierProductName": "abc123",
      "supplierSku": "xyz789",
      "updatedAt": "abc123"
    }
  }
}

sourcingListings

Description

Sourcing listings for a product, variant or supplier. Queried by product/variant rather than hung off Supplier, because a listing may have no supplier at all.

Required scope: suppliers:read

Response

Returns [SourcingListing!]

Arguments
Name Description
includeProductLevel - Boolean With productVariantId, also return the product-level listings that variant inherits.
isActive - Boolean
limit - Int Records per page (max 200, default 50). Default = 50
offset - Int Default = 0
productId - ID
productVariantId - ID
supplierId - ID
unlinkedOnly - Boolean Only listings with no supplier record.

Example

Query
query sourcingListings(
  $includeProductLevel: Boolean,
  $isActive: Boolean,
  $limit: Int,
  $offset: Int,
  $productId: ID,
  $productVariantId: ID,
  $supplierId: ID,
  $unlinkedOnly: Boolean
) {
  sourcingListings(
    includeProductLevel: $includeProductLevel,
    isActive: $isActive,
    limit: $limit,
    offset: $offset,
    productId: $productId,
    productVariantId: $productVariantId,
    supplierId: $supplierId,
    unlinkedOnly: $unlinkedOnly
  ) {
    PriceBreaks {
      ...SourcingListingPriceBreakFragment
    }
    Product {
      ...ProductFragment
    }
    ProductVariant {
      ...ProductVariantFragment
    }
    PurchaseOrderItems {
      ...PurchaseOrderItemFragment
    }
    Supplier {
      ...SupplierFragment
    }
    createdAt
    currency
    freeShippingThreshold
    id
    isActive
    isPrimary
    lastOrderedAt
    lastVerifiedAt
    leadTimeDays
    listingUrl
    minimumOrderQuantity
    notes
    organizationId
    packSize
    productId
    productVariantId
    quoteAt {
      ...SourcingQuoteFragment
    }
    shippingFee
    supplierId
    supplierProductName
    supplierSku
    updatedAt
  }
}
Variables
{
  "includeProductLevel": false,
  "isActive": true,
  "limit": 50,
  "offset": 0,
  "productId": "4",
  "productVariantId": 4,
  "supplierId": "4",
  "unlinkedOnly": false
}
Response
{
  "data": {
    "sourcingListings": [
      {
        "PriceBreaks": [SourcingListingPriceBreak],
        "Product": Product,
        "ProductVariant": ProductVariant,
        "PurchaseOrderItems": [PurchaseOrderItem],
        "Supplier": Supplier,
        "createdAt": "xyz789",
        "currency": "xyz789",
        "freeShippingThreshold": "abc123",
        "id": 4,
        "isActive": true,
        "isPrimary": false,
        "lastOrderedAt": "xyz789",
        "lastVerifiedAt": "xyz789",
        "leadTimeDays": 123,
        "listingUrl": "xyz789",
        "minimumOrderQuantity": 987,
        "notes": "abc123",
        "organizationId": 4,
        "packSize": 123,
        "productId": 4,
        "productVariantId": "4",
        "quoteAt": SourcingQuote,
        "shippingFee": "abc123",
        "supplierId": 4,
        "supplierProductName": "abc123",
        "supplierSku": "xyz789",
        "updatedAt": "abc123"
      }
    ]
  }
}

supplier

Description

Get supplier by ID

Required scope: suppliers:read

Response

Returns a Supplier

Arguments
Name Description
id - ID!

Example

Query
query supplier($id: ID!) {
  supplier(id: $id) {
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrders {
      ...PurchaseOrderFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    address
    city
    code
    contactEmail
    contactName
    contactPhone
    country
    countryCode
    createdAt
    currency
    description
    id
    isActive
    leadTimeDays
    metadata
    minimumOrderValue
    name
    notes
    organizationId
    paymentTerms
    postalCode
    productCount
    purchaseOrderCount
    purchasePortalUrl
    rating
    shippingMethod
    state
    updatedAt
    website
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "supplier": {
      "Organization": Organization,
      "PurchaseOrders": [PurchaseOrder],
      "SourcingListings": [SourcingListing],
      "address": "abc123",
      "city": "abc123",
      "code": "xyz789",
      "contactEmail": "xyz789",
      "contactName": "abc123",
      "contactPhone": "abc123",
      "country": "abc123",
      "countryCode": "xyz789",
      "createdAt": "xyz789",
      "currency": "xyz789",
      "description": "abc123",
      "id": "4",
      "isActive": false,
      "leadTimeDays": 987,
      "metadata": "abc123",
      "minimumOrderValue": "xyz789",
      "name": "abc123",
      "notes": "abc123",
      "organizationId": "4",
      "paymentTerms": "abc123",
      "postalCode": "abc123",
      "productCount": 123,
      "purchaseOrderCount": 987,
      "purchasePortalUrl": "abc123",
      "rating": 123,
      "shippingMethod": "abc123",
      "state": "xyz789",
      "updatedAt": "abc123",
      "website": "xyz789"
    }
  }
}

supplierCount

Description

Get total count of suppliers for the organization, with optional filters for pagination

Required scope: suppliers:read

Response

Returns an Int

Arguments
Name Description
isActive - Boolean Filter by active status
organizationId - ID!
searchTerm - String Search by name, code, contact name, or email

Example

Query
query supplierCount(
  $isActive: Boolean,
  $organizationId: ID!,
  $searchTerm: String
) {
  supplierCount(
    isActive: $isActive,
    organizationId: $organizationId,
    searchTerm: $searchTerm
  )
}
Variables
{
  "isActive": false,
  "organizationId": 4,
  "searchTerm": "abc123"
}
Response
{"data": {"supplierCount": 987}}

suppliers

Description

Get suppliers with optional filters and pagination

Required scope: suppliers:read

Response

Returns [Supplier!]

Arguments
Name Description
isActive - Boolean
limit - Int Records per page (max 100, default 25). Default = 25
offset - Int Number of records to skip for pagination. Default = 0
organizationId - ID!
searchTerm - String
sortBy - String Sort field: name, code, contactName, city, country, createdAt
sortDirection - String Sort direction: asc or desc (default: asc)

Example

Query
query suppliers(
  $isActive: Boolean,
  $limit: Int,
  $offset: Int,
  $organizationId: ID!,
  $searchTerm: String,
  $sortBy: String,
  $sortDirection: String
) {
  suppliers(
    isActive: $isActive,
    limit: $limit,
    offset: $offset,
    organizationId: $organizationId,
    searchTerm: $searchTerm,
    sortBy: $sortBy,
    sortDirection: $sortDirection
  ) {
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrders {
      ...PurchaseOrderFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    address
    city
    code
    contactEmail
    contactName
    contactPhone
    country
    countryCode
    createdAt
    currency
    description
    id
    isActive
    leadTimeDays
    metadata
    minimumOrderValue
    name
    notes
    organizationId
    paymentTerms
    postalCode
    productCount
    purchaseOrderCount
    purchasePortalUrl
    rating
    shippingMethod
    state
    updatedAt
    website
  }
}
Variables
{
  "isActive": false,
  "limit": 25,
  "offset": 0,
  "organizationId": 4,
  "searchTerm": "abc123",
  "sortBy": "xyz789",
  "sortDirection": "xyz789"
}
Response
{
  "data": {
    "suppliers": [
      {
        "Organization": Organization,
        "PurchaseOrders": [PurchaseOrder],
        "SourcingListings": [SourcingListing],
        "address": "xyz789",
        "city": "xyz789",
        "code": "abc123",
        "contactEmail": "abc123",
        "contactName": "abc123",
        "contactPhone": "xyz789",
        "country": "xyz789",
        "countryCode": "abc123",
        "createdAt": "abc123",
        "currency": "xyz789",
        "description": "xyz789",
        "id": 4,
        "isActive": false,
        "leadTimeDays": 987,
        "metadata": "abc123",
        "minimumOrderValue": "xyz789",
        "name": "xyz789",
        "notes": "xyz789",
        "organizationId": 4,
        "paymentTerms": "xyz789",
        "postalCode": "abc123",
        "productCount": 123,
        "purchaseOrderCount": 123,
        "purchasePortalUrl": "xyz789",
        "rating": 987,
        "shippingMethod": "xyz789",
        "state": "abc123",
        "updatedAt": "xyz789",
        "website": "xyz789"
      }
    ]
  }
}

unlinkedStoreLocations

Description

Shopify locations with no active warehouse link, fetched live from Shopify (SKU-1311). Inventory at these locations does not sync and is not counted anywhere.

Required scope: warehouse:read

Response

Returns an UnlinkedStoreLocationsResult

Arguments
Name Description
organizationId - ID!

Example

Query
query unlinkedStoreLocations($organizationId: ID!) {
  unlinkedStoreLocations(organizationId: $organizationId) {
    stores {
      ...UnlinkedStoreLocationsStoreFragment
    }
  }
}
Variables
{"organizationId": 4}
Response
{
  "data": {
    "unlinkedStoreLocations": {
      "stores": [UnlinkedStoreLocationsStore]
    }
  }
}

variantsWarehouseInventory

Description

Get all warehouse inventory records for all child variants of a parent product

Required scope: inventory:read

Response

Returns [ProductLocationInventory!]

Arguments
Name Description
parentProductId - ID!

Example

Query
query variantsWarehouseInventory($parentProductId: ID!) {
  variantsWarehouseInventory(parentProductId: $parentProductId) {
    Product {
      ...ProductFragment
    }
    ProductVariant {
      ...ProductVariantFragment
    }
    WarehouseArea {
      ...WarehouseAreaFragment
    }
    WarehouseBay {
      ...WarehouseBayFragment
    }
    WarehouseBin {
      ...WarehouseBinFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    binType
    createdAt
    id
    isPreferred
    lastCountDate
    lastSyncAt
    locationId
    locationPath
    lowStockThreshold
    productId
    productVariantId
    quantity
    syncErrors
    syncStatus
    updatedAt
    warehouseAreaId
    warehouseBayId
    warehouseBinId
    warehouseLocationId
  }
}
Variables
{"parentProductId": 4}
Response
{
  "data": {
    "variantsWarehouseInventory": [
      {
        "Product": Product,
        "ProductVariant": ProductVariant,
        "WarehouseArea": WarehouseArea,
        "WarehouseBay": WarehouseBay,
        "WarehouseBin": WarehouseBin,
        "WarehouseLocation": WarehouseLocation,
        "binType": "xyz789",
        "createdAt": "abc123",
        "id": 4,
        "isPreferred": false,
        "lastCountDate": "xyz789",
        "lastSyncAt": "xyz789",
        "locationId": 4,
        "locationPath": "xyz789",
        "lowStockThreshold": 987,
        "productId": "4",
        "productVariantId": "xyz789",
        "quantity": 123,
        "syncErrors": {},
        "syncStatus": "ERROR",
        "updatedAt": "xyz789",
        "warehouseAreaId": "abc123",
        "warehouseBayId": "abc123",
        "warehouseBinId": "xyz789",
        "warehouseLocationId": 4
      }
    ]
  }
}

warehouseLocation

Description

Get warehouse location by ID

Required scope: warehouse:read

Response

Returns a WarehouseLocation

Arguments
Name Description
id - ID!
organizationId - ID!

Example

Query
query warehouseLocation(
  $id: ID!,
  $organizationId: ID!
) {
  warehouseLocation(
    id: $id,
    organizationId: $organizationId
  ) {
    address
    areaLabel
    areas {
      ...WarehouseAreaFragment
    }
    bayLabel
    binLabel
    binNamingPattern
    city
    contactEmail
    contactName
    contactPhone
    country
    countryCode
    createdAt
    defaultBayNumLevels
    description
    id
    isActive
    isPrimary
    labelReturnAddressType
    labelSenderAddressType
    mailingAddress {
      ...AddressFragment
    }
    metadata
    name
    organizationId
    physicalAddress {
      ...AddressFragment
    }
    postalCode
    rowLabel
    shelfLabel
    showOnContactPage
    state
    stationeryStock {
      ...StationeryLocationStockFragment
    }
    storeConnections {
      ...WarehouseStoreConnectionFragment
    }
    updatedAt
  }
}
Variables
{"id": 4, "organizationId": "4"}
Response
{
  "data": {
    "warehouseLocation": {
      "address": "abc123",
      "areaLabel": "xyz789",
      "areas": [WarehouseArea],
      "bayLabel": "abc123",
      "binLabel": "abc123",
      "binNamingPattern": "abc123",
      "city": "abc123",
      "contactEmail": "abc123",
      "contactName": "abc123",
      "contactPhone": "xyz789",
      "country": "abc123",
      "countryCode": "abc123",
      "createdAt": "xyz789",
      "defaultBayNumLevels": 987,
      "description": "abc123",
      "id": "4",
      "isActive": true,
      "isPrimary": false,
      "labelReturnAddressType": "MAILING",
      "labelSenderAddressType": "MAILING",
      "mailingAddress": Address,
      "metadata": {},
      "name": "abc123",
      "organizationId": 4,
      "physicalAddress": Address,
      "postalCode": "abc123",
      "rowLabel": "xyz789",
      "shelfLabel": "xyz789",
      "showOnContactPage": true,
      "state": "xyz789",
      "stationeryStock": [StationeryLocationStock],
      "storeConnections": [WarehouseStoreConnection],
      "updatedAt": "abc123"
    }
  }
}

warehouseLocations

Description

Get all warehouse locations for organization

Required scope: warehouse:read

Response

Returns [WarehouseLocation!]

Arguments
Name Description
organizationId - ID!

Example

Query
query warehouseLocations($organizationId: ID!) {
  warehouseLocations(organizationId: $organizationId) {
    address
    areaLabel
    areas {
      ...WarehouseAreaFragment
    }
    bayLabel
    binLabel
    binNamingPattern
    city
    contactEmail
    contactName
    contactPhone
    country
    countryCode
    createdAt
    defaultBayNumLevels
    description
    id
    isActive
    isPrimary
    labelReturnAddressType
    labelSenderAddressType
    mailingAddress {
      ...AddressFragment
    }
    metadata
    name
    organizationId
    physicalAddress {
      ...AddressFragment
    }
    postalCode
    rowLabel
    shelfLabel
    showOnContactPage
    state
    stationeryStock {
      ...StationeryLocationStockFragment
    }
    storeConnections {
      ...WarehouseStoreConnectionFragment
    }
    updatedAt
  }
}
Variables
{"organizationId": 4}
Response
{
  "data": {
    "warehouseLocations": [
      {
        "address": "xyz789",
        "areaLabel": "xyz789",
        "areas": [WarehouseArea],
        "bayLabel": "abc123",
        "binLabel": "xyz789",
        "binNamingPattern": "abc123",
        "city": "xyz789",
        "contactEmail": "abc123",
        "contactName": "abc123",
        "contactPhone": "abc123",
        "country": "xyz789",
        "countryCode": "xyz789",
        "createdAt": "xyz789",
        "defaultBayNumLevels": 123,
        "description": "abc123",
        "id": "4",
        "isActive": true,
        "isPrimary": true,
        "labelReturnAddressType": "MAILING",
        "labelSenderAddressType": "MAILING",
        "mailingAddress": Address,
        "metadata": {},
        "name": "abc123",
        "organizationId": "4",
        "physicalAddress": Address,
        "postalCode": "abc123",
        "rowLabel": "xyz789",
        "shelfLabel": "xyz789",
        "showOnContactPage": false,
        "state": "abc123",
        "stationeryStock": [StationeryLocationStock],
        "storeConnections": [WarehouseStoreConnection],
        "updatedAt": "abc123"
      }
    ]
  }
}

Mutations

addProductImage

Description

Add an uploaded file to a product as an image. confirmProductImageUpload already does this, so it is only needed to retry; a file the product already shows returns that image.

Required scope: products:update

Response

Returns a ProductImage

Arguments
Name Description
input - AddProductImageInput!

Example

Query
mutation addProductImage($input: AddProductImageInput!) {
  addProductImage(input: $input) {
    altText
    createdAt
    file {
      ...FileFragment
    }
    fileId
    fileSize
    height
    id
    imageUrl
    product {
      ...ProductFragment
    }
    productId
    shopifyImageId
    shopifyImageLegacyId
    shopifyPosition
    sortOrder
    sourceUrl
    status
    thumbnails
    updatedAt
    url
    width
  }
}
Variables
{"input": AddProductImageInput}
Response
{
  "data": {
    "addProductImage": {
      "altText": "xyz789",
      "createdAt": "xyz789",
      "file": File,
      "fileId": 4,
      "fileSize": 987,
      "height": 123,
      "id": 4,
      "imageUrl": "xyz789",
      "product": Product,
      "productId": "4",
      "shopifyImageId": "xyz789",
      "shopifyImageLegacyId": "abc123",
      "shopifyPosition": 123,
      "sortOrder": 123,
      "sourceUrl": "abc123",
      "status": "abc123",
      "thumbnails": {},
      "updatedAt": "xyz789",
      "url": "abc123",
      "width": 123
    }
  }
}

addProductImageFromUrl

Description

Fetch an image from a public https URL and add it to a product, in one call.

Required scope: products:update

Response

Returns a ProductImage

Arguments
Name Description
input - AddProductImageFromUrlInput!

Example

Query
mutation addProductImageFromUrl($input: AddProductImageFromUrlInput!) {
  addProductImageFromUrl(input: $input) {
    altText
    createdAt
    file {
      ...FileFragment
    }
    fileId
    fileSize
    height
    id
    imageUrl
    product {
      ...ProductFragment
    }
    productId
    shopifyImageId
    shopifyImageLegacyId
    shopifyPosition
    sortOrder
    sourceUrl
    status
    thumbnails
    updatedAt
    url
    width
  }
}
Variables
{"input": AddProductImageFromUrlInput}
Response
{
  "data": {
    "addProductImageFromUrl": {
      "altText": "abc123",
      "createdAt": "abc123",
      "file": File,
      "fileId": 4,
      "fileSize": 987,
      "height": 987,
      "id": 4,
      "imageUrl": "abc123",
      "product": Product,
      "productId": 4,
      "shopifyImageId": "xyz789",
      "shopifyImageLegacyId": "abc123",
      "shopifyPosition": 987,
      "sortOrder": 987,
      "sourceUrl": "xyz789",
      "status": "abc123",
      "thumbnails": {},
      "updatedAt": "xyz789",
      "url": "xyz789",
      "width": 987
    }
  }
}

addPurchaseOrderItem

Description

Add an item to a purchase order

Required scope: purchase-orders:update

Response

Returns a PurchaseOrderItem

Arguments
Name Description
input - AddPurchaseOrderItemInput!

Example

Query
mutation addPurchaseOrderItem($input: AddPurchaseOrderItemInput!) {
  addPurchaseOrderItem(input: $input) {
    InventoryReceiptItems {
      ...InventoryReceiptItemFragment
    }
    Product {
      ...ProductFragment
    }
    PurchasableItem {
      ...PurchasableItemFragment
    }
    PurchaseOrder {
      ...PurchaseOrderFragment
    }
    SourcingListing {
      ...SourcingListingFragment
    }
    createdAt
    id
    itemName
    itemSku
    itemType
    lineTotal
    notes
    productId
    productVariantId
    purchasableItemId
    purchaseOrderId
    quantityOrdered
    quantityOutstanding
    quantityReceived
    sourcingListingId
    supplierSku
    unitCost
    unitCostOverridden
    updatedAt
  }
}
Variables
{"input": AddPurchaseOrderItemInput}
Response
{
  "data": {
    "addPurchaseOrderItem": {
      "InventoryReceiptItems": [InventoryReceiptItem],
      "Product": Product,
      "PurchasableItem": PurchasableItem,
      "PurchaseOrder": PurchaseOrder,
      "SourcingListing": SourcingListing,
      "createdAt": "xyz789",
      "id": 4,
      "itemName": "abc123",
      "itemSku": "xyz789",
      "itemType": "xyz789",
      "lineTotal": "abc123",
      "notes": "abc123",
      "productId": 4,
      "productVariantId": 4,
      "purchasableItemId": 4,
      "purchaseOrderId": "4",
      "quantityOrdered": 123,
      "quantityOutstanding": 123,
      "quantityReceived": 123,
      "sourcingListingId": "4",
      "supplierSku": "abc123",
      "unitCost": "abc123",
      "unitCostOverridden": false,
      "updatedAt": "xyz789"
    }
  }
}

addReceiptItem

Description

Add an item to an inventory receipt

Required scope: inventory:receive

Response

Returns an InventoryReceiptItem

Arguments
Name Description
input - AddReceiptItemInput!

Example

Query
mutation addReceiptItem($input: AddReceiptItemInput!) {
  addReceiptItem(input: $input) {
    InventoryReceipt {
      ...InventoryReceiptFragment
    }
    Product {
      ...ProductFragment
    }
    PurchasableItem {
      ...PurchasableItemFragment
    }
    PurchaseOrderItem {
      ...PurchaseOrderItemFragment
    }
    WarehouseBin {
      ...WarehouseBinFragment
    }
    batchNumber
    binLocation
    createdAt
    expiryDate
    id
    inventoryReceiptId
    itemName
    itemSku
    itemType
    lineTotal
    lotNumber
    notes
    productId
    purchasableItemId
    purchaseOrderItemId
    quantityAccepted
    quantityDamaged
    quantityExpected
    quantityReceived
    quantityRejected
    unitCost
    updatedAt
    varianceReason
    warehouseBinId
  }
}
Variables
{"input": AddReceiptItemInput}
Response
{
  "data": {
    "addReceiptItem": {
      "InventoryReceipt": InventoryReceipt,
      "Product": Product,
      "PurchasableItem": PurchasableItem,
      "PurchaseOrderItem": PurchaseOrderItem,
      "WarehouseBin": WarehouseBin,
      "batchNumber": "abc123",
      "binLocation": "xyz789",
      "createdAt": "abc123",
      "expiryDate": "xyz789",
      "id": 4,
      "inventoryReceiptId": "4",
      "itemName": "abc123",
      "itemSku": "xyz789",
      "itemType": "xyz789",
      "lineTotal": "xyz789",
      "lotNumber": "abc123",
      "notes": "xyz789",
      "productId": "abc123",
      "purchasableItemId": "xyz789",
      "purchaseOrderItemId": "xyz789",
      "quantityAccepted": 123,
      "quantityDamaged": 987,
      "quantityExpected": 987,
      "quantityReceived": 123,
      "quantityRejected": 987,
      "unitCost": "xyz789",
      "updatedAt": "xyz789",
      "varianceReason": "abc123",
      "warehouseBinId": "xyz789"
    }
  }
}

cancelPurchaseOrder

Description

Cancel a purchase order

Required scope: purchase-orders:delete

Response

Returns a PurchaseOrder

Arguments
Name Description
id - ID!

Example

Query
mutation cancelPurchaseOrder($id: ID!) {
  cancelPurchaseOrder(id: $id) {
    CreatedBy {
      ...UserFragment
    }
    CreatedByUser {
      ...UserFragment
    }
    InventoryReceipts {
      ...InventoryReceiptFragment
    }
    LastModifiedBy {
      ...UserFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrderItems {
      ...PurchaseOrderItemFragment
    }
    Supplier {
      ...SupplierFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    actualDeliveryDate
    approvedAt
    approvedBy
    createdAt
    createdByUserEmailSnapshot
    createdByUserId
    createdByUserIdSnapshot
    createdByUserNameSnapshot
    currency
    exchangeRate
    expectedDeliveryDate
    id
    internalNotes
    internalPoNumber
    isFullyReceived
    itemCount
    lastModifiedByUserEmailSnapshot
    lastModifiedByUserId
    lastModifiedByUserIdSnapshot
    lastModifiedByUserNameSnapshot
    notes
    orderDate
    organizationId
    otherCosts
    paymentTerms
    pdfFileId
    pdfGeneratedAt
    pdfUrl
    poNumber
    receiptCount
    remainingQuantity
    sendCount
    sentAt
    sentTo
    shipToWarehouseId
    shippingAddress
    shippingCity
    shippingCost
    shippingCountry
    shippingMethod
    shippingPostalCode
    shippingState
    status
    subtotal
    supplierId
    taxAmount
    totalCost
    totalQuantityOrdered
    totalQuantityReceived
    trackingNumber
    trackingUrl
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "cancelPurchaseOrder": {
      "CreatedBy": User,
      "CreatedByUser": User,
      "InventoryReceipts": [InventoryReceipt],
      "LastModifiedBy": User,
      "Organization": Organization,
      "PurchaseOrderItems": [PurchaseOrderItem],
      "Supplier": Supplier,
      "WarehouseLocation": WarehouseLocation,
      "actualDeliveryDate": "abc123",
      "approvedAt": "xyz789",
      "approvedBy": "abc123",
      "createdAt": "xyz789",
      "createdByUserEmailSnapshot": "abc123",
      "createdByUserId": "4",
      "createdByUserIdSnapshot": 4,
      "createdByUserNameSnapshot": "abc123",
      "currency": "xyz789",
      "exchangeRate": "xyz789",
      "expectedDeliveryDate": "abc123",
      "id": 4,
      "internalNotes": "abc123",
      "internalPoNumber": 123,
      "isFullyReceived": false,
      "itemCount": 123,
      "lastModifiedByUserEmailSnapshot": "abc123",
      "lastModifiedByUserId": 4,
      "lastModifiedByUserIdSnapshot": 4,
      "lastModifiedByUserNameSnapshot": "abc123",
      "notes": "xyz789",
      "orderDate": "abc123",
      "organizationId": "4",
      "otherCosts": "abc123",
      "paymentTerms": "abc123",
      "pdfFileId": "xyz789",
      "pdfGeneratedAt": "xyz789",
      "pdfUrl": "xyz789",
      "poNumber": "abc123",
      "receiptCount": 123,
      "remainingQuantity": 123,
      "sendCount": 123,
      "sentAt": "xyz789",
      "sentTo": "xyz789",
      "shipToWarehouseId": 4,
      "shippingAddress": "abc123",
      "shippingCity": "xyz789",
      "shippingCost": "abc123",
      "shippingCountry": "abc123",
      "shippingMethod": "xyz789",
      "shippingPostalCode": "xyz789",
      "shippingState": "xyz789",
      "status": "CANCELLED",
      "subtotal": "abc123",
      "supplierId": "4",
      "taxAmount": "xyz789",
      "totalCost": "abc123",
      "totalQuantityOrdered": 123,
      "totalQuantityReceived": 987,
      "trackingNumber": "abc123",
      "trackingUrl": "abc123",
      "updatedAt": "abc123"
    }
  }
}

clearPreferredBin

Description

Clear a variant's preferred (home) bin at a warehouse location.

Required scope: inventory:update

Response

Returns a ClearPreferredBinResult

Arguments
Name Description
productVariantId - ID!
warehouseLocationId - ID!

Example

Query
mutation clearPreferredBin(
  $productVariantId: ID!,
  $warehouseLocationId: ID!
) {
  clearPreferredBin(
    productVariantId: $productVariantId,
    warehouseLocationId: $warehouseLocationId
  ) {
    message
    success
  }
}
Variables
{
  "productVariantId": "4",
  "warehouseLocationId": 4
}
Response
{
  "data": {
    "clearPreferredBin": {
      "message": "xyz789",
      "success": true
    }
  }
}

completeInventoryReceipt

Description

Complete an inventory receipt and update inventory

Required scope: inventory:receive

Response

Returns an InventoryReceipt

Arguments
Name Description
id - ID!

Example

Query
mutation completeInventoryReceipt($id: ID!) {
  completeInventoryReceipt(id: $id) {
    InventoryReceiptItems {
      ...InventoryReceiptItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrder {
      ...PurchaseOrderFragment
    }
    ReceivedBy {
      ...UserFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    createdAt
    discrepancyNotes
    hasDiscrepancies
    id
    itemCount
    notes
    organizationId
    purchaseOrderId
    receiptNumber
    receivedByEmailSnapshot
    receivedByIdSnapshot
    receivedByNameSnapshot
    receivedByUserId
    receivedDate
    status
    totalQuantityExpected
    totalQuantityReceived
    updatedAt
    varianceQuantity
    warehouseLocationId
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "completeInventoryReceipt": {
      "InventoryReceiptItems": [InventoryReceiptItem],
      "Organization": Organization,
      "PurchaseOrder": PurchaseOrder,
      "ReceivedBy": User,
      "WarehouseLocation": WarehouseLocation,
      "createdAt": "xyz789",
      "discrepancyNotes": "abc123",
      "hasDiscrepancies": false,
      "id": 4,
      "itemCount": 123,
      "notes": "xyz789",
      "organizationId": "4",
      "purchaseOrderId": "xyz789",
      "receiptNumber": "abc123",
      "receivedByEmailSnapshot": "xyz789",
      "receivedByIdSnapshot": 4,
      "receivedByNameSnapshot": "abc123",
      "receivedByUserId": 4,
      "receivedDate": "abc123",
      "status": "CANCELLED",
      "totalQuantityExpected": 123,
      "totalQuantityReceived": 987,
      "updatedAt": "xyz789",
      "varianceQuantity": 123,
      "warehouseLocationId": 4
    }
  }
}

completeMfaLogin

Description

Finish an MFA sign-in with the challenge token returned by login and a TOTP or backup code

Response

Returns an AuthPayload

Arguments
Name Description
challengeToken - String!
code - String!

Example

Query
mutation completeMfaLogin(
  $challengeToken: String!,
  $code: String!
) {
  completeMfaLogin(
    challengeToken: $challengeToken,
    code: $code
  ) {
    expiresAt
    requiresEmailVerification
    requiresMfaSetup
    requiresPasskeySetup
    token
    user {
      ...UserFragment
    }
  }
}
Variables
{
  "challengeToken": "abc123",
  "code": "xyz789"
}
Response
{
  "data": {
    "completeMfaLogin": {
      "expiresAt": "abc123",
      "requiresEmailVerification": true,
      "requiresMfaSetup": false,
      "requiresPasskeySetup": false,
      "token": "xyz789",
      "user": User
    }
  }
}

completePasskeyAuthentication

Description

Complete passkey authentication

Response

Returns an AuthPayload

Arguments
Name Description
authenticatorAttachment - String
clientExtensionResults - JSON
credentialId - String!
rawId - String!
response - JSON!

Example

Query
mutation completePasskeyAuthentication(
  $authenticatorAttachment: String,
  $clientExtensionResults: JSON,
  $credentialId: String!,
  $rawId: String!,
  $response: JSON!
) {
  completePasskeyAuthentication(
    authenticatorAttachment: $authenticatorAttachment,
    clientExtensionResults: $clientExtensionResults,
    credentialId: $credentialId,
    rawId: $rawId,
    response: $response
  ) {
    expiresAt
    requiresEmailVerification
    requiresMfaSetup
    requiresPasskeySetup
    token
    user {
      ...UserFragment
    }
  }
}
Variables
{
  "authenticatorAttachment": "xyz789",
  "clientExtensionResults": {},
  "credentialId": "xyz789",
  "rawId": "xyz789",
  "response": {}
}
Response
{
  "data": {
    "completePasskeyAuthentication": {
      "expiresAt": "abc123",
      "requiresEmailVerification": false,
      "requiresMfaSetup": false,
      "requiresPasskeySetup": true,
      "token": "abc123",
      "user": User
    }
  }
}

confirmPasswordReset

Description

Confirm password reset with token (also handles user invitation tokens)

Response

Returns a VerificationRequest

Arguments
Name Description
newPassword - String!
token - String!

Example

Query
mutation confirmPasswordReset(
  $newPassword: String!,
  $token: String!
) {
  confirmPasswordReset(
    newPassword: $newPassword,
    token: $token
  ) {
    canRequestNewLink
    code
    message
    success
  }
}
Variables
{
  "newPassword": "abc123",
  "token": "xyz789"
}
Response
{
  "data": {
    "confirmPasswordReset": {
      "canRequestNewLink": true,
      "code": "abc123",
      "message": "xyz789",
      "success": false
    }
  }
}

confirmProductImageUpload

Description

Step 3 of 3. Validates and scans the uploaded file, then adds it to the product. Check success; imageId is the new image. If the file was stored but could not be added, success is false, fileId is set and addProductImage with it tries again.

Required scope: products:update

Response

Returns an UploadResult

Arguments
Name Description
input - ConfirmProductImageUploadInput!

Example

Query
mutation confirmProductImageUpload($input: ConfirmProductImageUploadInput!) {
  confirmProductImageUpload(input: $input) {
    error
    fileId
    imageId
    success
    url
  }
}
Variables
{"input": ConfirmProductImageUploadInput}
Response
{
  "data": {
    "confirmProductImageUpload": {
      "error": "abc123",
      "fileId": 4,
      "imageId": "4",
      "success": true,
      "url": "xyz789"
    }
  }
}

connectProductToChannel

Description

Put a product on a sales channel and queue a push to it. Repeating it changes nothing: use syncProductToChannel to push again. The product status decides whether shoppers see it: a DRAFT stays hidden, an ACTIVE product goes live.

Required scope: channels:update

Response

Returns a ProductStoreConnection

Arguments
Name Description
channelId - ID!
productId - ID!

Example

Query
mutation connectProductToChannel(
  $channelId: ID!,
  $productId: ID!
) {
  connectProductToChannel(
    channelId: $channelId,
    productId: $productId
  ) {
    Organization {
      ...OrganizationFragment
    }
    Product {
      ...ProductFragment
    }
    createdAt
    externalProductId
    externalSku
    externalUrl
    externalVariantId
    id
    isPublished
    lastSyncAt
    metadata
    organizationId
    product {
      ...ProductFragment
    }
    productId
    storeConnectionId
    storeDescription
    storeInventory
    storeName
    storePrice
    storeTitle
    storeType
    surfaces {
      ...ShopifyProductPublicationChannelFragment
    }
    syncError
    syncStatus
    unlinkReason
    unlinkedAt
    updatedAt
  }
}
Variables
{"channelId": "4", "productId": 4}
Response
{
  "data": {
    "connectProductToChannel": {
      "Organization": Organization,
      "Product": Product,
      "createdAt": "xyz789",
      "externalProductId": "abc123",
      "externalSku": "abc123",
      "externalUrl": "abc123",
      "externalVariantId": "abc123",
      "id": "4",
      "isPublished": false,
      "lastSyncAt": "xyz789",
      "metadata": "xyz789",
      "organizationId": "4",
      "product": Product,
      "productId": "4",
      "storeConnectionId": 4,
      "storeDescription": "abc123",
      "storeInventory": 987,
      "storeName": "abc123",
      "storePrice": "abc123",
      "storeTitle": "abc123",
      "storeType": "AMAZON",
      "surfaces": [ShopifyProductPublicationChannel],
      "syncError": "abc123",
      "syncStatus": "ERROR",
      "unlinkReason": "abc123",
      "unlinkedAt": "xyz789",
      "updatedAt": "xyz789"
    }
  }
}

createInventoryReceipt

Description

Create an inventory receipt

Required scope: inventory:receive

Response

Returns an InventoryReceipt

Arguments
Name Description
input - CreateInventoryReceiptInput!

Example

Query
mutation createInventoryReceipt($input: CreateInventoryReceiptInput!) {
  createInventoryReceipt(input: $input) {
    InventoryReceiptItems {
      ...InventoryReceiptItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrder {
      ...PurchaseOrderFragment
    }
    ReceivedBy {
      ...UserFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    createdAt
    discrepancyNotes
    hasDiscrepancies
    id
    itemCount
    notes
    organizationId
    purchaseOrderId
    receiptNumber
    receivedByEmailSnapshot
    receivedByIdSnapshot
    receivedByNameSnapshot
    receivedByUserId
    receivedDate
    status
    totalQuantityExpected
    totalQuantityReceived
    updatedAt
    varianceQuantity
    warehouseLocationId
  }
}
Variables
{"input": CreateInventoryReceiptInput}
Response
{
  "data": {
    "createInventoryReceipt": {
      "InventoryReceiptItems": [InventoryReceiptItem],
      "Organization": Organization,
      "PurchaseOrder": PurchaseOrder,
      "ReceivedBy": User,
      "WarehouseLocation": WarehouseLocation,
      "createdAt": "xyz789",
      "discrepancyNotes": "abc123",
      "hasDiscrepancies": false,
      "id": "4",
      "itemCount": 987,
      "notes": "xyz789",
      "organizationId": 4,
      "purchaseOrderId": "abc123",
      "receiptNumber": "xyz789",
      "receivedByEmailSnapshot": "xyz789",
      "receivedByIdSnapshot": "4",
      "receivedByNameSnapshot": "xyz789",
      "receivedByUserId": 4,
      "receivedDate": "xyz789",
      "status": "CANCELLED",
      "totalQuantityExpected": 123,
      "totalQuantityReceived": 987,
      "updatedAt": "abc123",
      "varianceQuantity": 987,
      "warehouseLocationId": 4
    }
  }
}

createOrder

Description

Create a new order

Required scope: orders:create

Response

Returns an Order

Arguments
Name Description
input - CreateOrderInput!

Example

Query
mutation createOrder($input: CreateOrderInput!) {
  createOrder(input: $input) {
    Customer {
      ...CustomerFragment
    }
    FulfillmentPackages {
      ...FulfillmentPackageFragment
    }
    OrderComments {
      ...OrderCommentFragment
    }
    OrderLineItems {
      ...OrderLineItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    WarehouseAllocation {
      ...OrderWarehouseAllocationFragment
    }
    billingAddress
    billingAddress2
    billingCity
    billingCompany
    billingCountry
    billingCountryCode
    billingFirstName
    billingLastName
    billingPostalCode
    billingState
    cancelReason
    cancelStaffNote
    cancelledAt
    capturedAmount
    carrier
    closedAt
    confirmed
    createdAt
    currency
    currentShippingCost
    customerIp
    customerNotes
    deliveredAt
    discountAmount
    discountCodes
    email
    exchangeRate
    fulfilledAt
    fulfillmentStatus
    grossProfit {
      ...OrderGrossProfitFragment
    }
    id
    importChargesCollectedAmount
    importChargesCollectedBy
    importChargesCollection
    importChargesConflict
    importChargesFactSource
    importChargesResolvedCollection
    importChargesResolvedSource
    importChargesShopifyMixed
    importChargesShopifyReported
    internalNotes
    internalOrderNumber
    lastSyncedAt
    monthlyOrderCap {
      ...OrderCapStatusFragment
    }
    notifyCustomerOnRefund
    orderDate
    orderNumber
    organizationId
    paidAt
    paymentGateway
    paymentMethod
    paymentStatus
    phone
    presentmentCapturedAmount
    presentmentCurrency
    presentmentCurrentShippingCost
    presentmentDiscountAmount
    presentmentRefundedAmount
    presentmentShippingCost
    presentmentShippingDiscountAmount
    presentmentSubtotal
    presentmentTaxAmount
    presentmentTotalAmount
    processedAt
    refundedAmount
    refunds
    resolvedShippingService {
      ...ResolvedShippingServiceFragment
    }
    restockOnCancel
    riskAssessmentDetails
    riskLevel
    riskRecommendation
    shippingAddress
    shippingAddress2
    shippingCity
    shippingCompany
    shippingCost
    shippingCountry
    shippingCountryCode
    shippingDiscountAmount
    shippingFirstName
    shippingLastName
    shippingLines
    shippingMethod
    shippingPostalCode
    shippingState
    shopifyLastCancelError
    shopifyLastCancelSyncAt
    shopifyOrderId
    shopifyOrderNumber
    source
    status
    storeId
    subtotal
    syncError
    syncStatus
    tags
    taxAmount
    taxLines {
      ...OrderTaxLineFragment
    }
    taxesIncluded
    timeline {
      ...OrderTimelineEventFragment
    }
    totalAmount
    trackingNumber
    trackingUrl
    transactions
    updatedAt
  }
}
Variables
{"input": CreateOrderInput}
Response
{
  "data": {
    "createOrder": {
      "Customer": Customer,
      "FulfillmentPackages": [FulfillmentPackage],
      "OrderComments": [OrderComment],
      "OrderLineItems": [OrderLineItem],
      "Organization": Organization,
      "WarehouseAllocation": OrderWarehouseAllocation,
      "billingAddress": "xyz789",
      "billingAddress2": "abc123",
      "billingCity": "abc123",
      "billingCompany": "abc123",
      "billingCountry": "xyz789",
      "billingCountryCode": "xyz789",
      "billingFirstName": "xyz789",
      "billingLastName": "xyz789",
      "billingPostalCode": "xyz789",
      "billingState": "abc123",
      "cancelReason": "abc123",
      "cancelStaffNote": "abc123",
      "cancelledAt": "xyz789",
      "capturedAmount": "abc123",
      "carrier": "abc123",
      "closedAt": "abc123",
      "confirmed": false,
      "createdAt": "abc123",
      "currency": "xyz789",
      "currentShippingCost": "xyz789",
      "customerIp": "xyz789",
      "customerNotes": "abc123",
      "deliveredAt": "xyz789",
      "discountAmount": "abc123",
      "discountCodes": {},
      "email": "abc123",
      "exchangeRate": "abc123",
      "fulfilledAt": "xyz789",
      "fulfillmentStatus": "CANCELLED",
      "grossProfit": OrderGrossProfit,
      "id": "4",
      "importChargesCollectedAmount": "xyz789",
      "importChargesCollectedBy": "MERCHANT",
      "importChargesCollection": "COLLECTED",
      "importChargesConflict": false,
      "importChargesFactSource": "API",
      "importChargesResolvedCollection": "COLLECTED",
      "importChargesResolvedSource": "API",
      "importChargesShopifyMixed": false,
      "importChargesShopifyReported": "COLLECTED",
      "internalNotes": "abc123",
      "internalOrderNumber": 987,
      "lastSyncedAt": "xyz789",
      "monthlyOrderCap": OrderCapStatus,
      "notifyCustomerOnRefund": false,
      "orderDate": "abc123",
      "orderNumber": "abc123",
      "organizationId": "4",
      "paidAt": "abc123",
      "paymentGateway": "abc123",
      "paymentMethod": "abc123",
      "paymentStatus": "AUTHORIZED",
      "phone": "xyz789",
      "presentmentCapturedAmount": "abc123",
      "presentmentCurrency": "abc123",
      "presentmentCurrentShippingCost": "xyz789",
      "presentmentDiscountAmount": "abc123",
      "presentmentRefundedAmount": "abc123",
      "presentmentShippingCost": "xyz789",
      "presentmentShippingDiscountAmount": "xyz789",
      "presentmentSubtotal": "xyz789",
      "presentmentTaxAmount": "abc123",
      "presentmentTotalAmount": "xyz789",
      "processedAt": "abc123",
      "refundedAmount": "abc123",
      "refunds": {},
      "resolvedShippingService": ResolvedShippingService,
      "restockOnCancel": true,
      "riskAssessmentDetails": {},
      "riskLevel": "xyz789",
      "riskRecommendation": "xyz789",
      "shippingAddress": "abc123",
      "shippingAddress2": "abc123",
      "shippingCity": "abc123",
      "shippingCompany": "abc123",
      "shippingCost": "abc123",
      "shippingCountry": "xyz789",
      "shippingCountryCode": "xyz789",
      "shippingDiscountAmount": "abc123",
      "shippingFirstName": "abc123",
      "shippingLastName": "abc123",
      "shippingLines": {},
      "shippingMethod": "abc123",
      "shippingPostalCode": "xyz789",
      "shippingState": "abc123",
      "shopifyLastCancelError": "abc123",
      "shopifyLastCancelSyncAt": "xyz789",
      "shopifyOrderId": "abc123",
      "shopifyOrderNumber": "xyz789",
      "source": "abc123",
      "status": "CANCELLED",
      "storeId": "4",
      "subtotal": "xyz789",
      "syncError": "abc123",
      "syncStatus": "ERROR",
      "tags": ["abc123"],
      "taxAmount": "abc123",
      "taxLines": [OrderTaxLine],
      "taxesIncluded": true,
      "timeline": [OrderTimelineEvent],
      "totalAmount": "abc123",
      "trackingNumber": "abc123",
      "trackingUrl": "abc123",
      "transactions": {},
      "updatedAt": "xyz789"
    }
  }
}

createOrderRefund

Description

Create a Core-originated refund on an Order. Appends a new entry to Order.refunds JSON, increments refundedAmount, optionally persists notifyCustomerOnRefund, and — for a Shopify-linked order — emits a transactional-outbox ORDER/PUSH trigger so the asyncOps push pipeline (computeIntents → pushIntentRefund) propagates the refund to Shopify. SKU-273 item 9; outbox trigger added in SKU-1323.

Required scope: orders:update

Response

Returns an Order

Arguments
Name Description
input - CreateOrderRefundInput!

Example

Query
mutation createOrderRefund($input: CreateOrderRefundInput!) {
  createOrderRefund(input: $input) {
    Customer {
      ...CustomerFragment
    }
    FulfillmentPackages {
      ...FulfillmentPackageFragment
    }
    OrderComments {
      ...OrderCommentFragment
    }
    OrderLineItems {
      ...OrderLineItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    WarehouseAllocation {
      ...OrderWarehouseAllocationFragment
    }
    billingAddress
    billingAddress2
    billingCity
    billingCompany
    billingCountry
    billingCountryCode
    billingFirstName
    billingLastName
    billingPostalCode
    billingState
    cancelReason
    cancelStaffNote
    cancelledAt
    capturedAmount
    carrier
    closedAt
    confirmed
    createdAt
    currency
    currentShippingCost
    customerIp
    customerNotes
    deliveredAt
    discountAmount
    discountCodes
    email
    exchangeRate
    fulfilledAt
    fulfillmentStatus
    grossProfit {
      ...OrderGrossProfitFragment
    }
    id
    importChargesCollectedAmount
    importChargesCollectedBy
    importChargesCollection
    importChargesConflict
    importChargesFactSource
    importChargesResolvedCollection
    importChargesResolvedSource
    importChargesShopifyMixed
    importChargesShopifyReported
    internalNotes
    internalOrderNumber
    lastSyncedAt
    monthlyOrderCap {
      ...OrderCapStatusFragment
    }
    notifyCustomerOnRefund
    orderDate
    orderNumber
    organizationId
    paidAt
    paymentGateway
    paymentMethod
    paymentStatus
    phone
    presentmentCapturedAmount
    presentmentCurrency
    presentmentCurrentShippingCost
    presentmentDiscountAmount
    presentmentRefundedAmount
    presentmentShippingCost
    presentmentShippingDiscountAmount
    presentmentSubtotal
    presentmentTaxAmount
    presentmentTotalAmount
    processedAt
    refundedAmount
    refunds
    resolvedShippingService {
      ...ResolvedShippingServiceFragment
    }
    restockOnCancel
    riskAssessmentDetails
    riskLevel
    riskRecommendation
    shippingAddress
    shippingAddress2
    shippingCity
    shippingCompany
    shippingCost
    shippingCountry
    shippingCountryCode
    shippingDiscountAmount
    shippingFirstName
    shippingLastName
    shippingLines
    shippingMethod
    shippingPostalCode
    shippingState
    shopifyLastCancelError
    shopifyLastCancelSyncAt
    shopifyOrderId
    shopifyOrderNumber
    source
    status
    storeId
    subtotal
    syncError
    syncStatus
    tags
    taxAmount
    taxLines {
      ...OrderTaxLineFragment
    }
    taxesIncluded
    timeline {
      ...OrderTimelineEventFragment
    }
    totalAmount
    trackingNumber
    trackingUrl
    transactions
    updatedAt
  }
}
Variables
{"input": CreateOrderRefundInput}
Response
{
  "data": {
    "createOrderRefund": {
      "Customer": Customer,
      "FulfillmentPackages": [FulfillmentPackage],
      "OrderComments": [OrderComment],
      "OrderLineItems": [OrderLineItem],
      "Organization": Organization,
      "WarehouseAllocation": OrderWarehouseAllocation,
      "billingAddress": "abc123",
      "billingAddress2": "abc123",
      "billingCity": "xyz789",
      "billingCompany": "abc123",
      "billingCountry": "abc123",
      "billingCountryCode": "xyz789",
      "billingFirstName": "abc123",
      "billingLastName": "abc123",
      "billingPostalCode": "abc123",
      "billingState": "abc123",
      "cancelReason": "xyz789",
      "cancelStaffNote": "xyz789",
      "cancelledAt": "abc123",
      "capturedAmount": "abc123",
      "carrier": "abc123",
      "closedAt": "xyz789",
      "confirmed": false,
      "createdAt": "abc123",
      "currency": "abc123",
      "currentShippingCost": "abc123",
      "customerIp": "abc123",
      "customerNotes": "abc123",
      "deliveredAt": "xyz789",
      "discountAmount": "abc123",
      "discountCodes": {},
      "email": "abc123",
      "exchangeRate": "abc123",
      "fulfilledAt": "abc123",
      "fulfillmentStatus": "CANCELLED",
      "grossProfit": OrderGrossProfit,
      "id": 4,
      "importChargesCollectedAmount": "abc123",
      "importChargesCollectedBy": "MERCHANT",
      "importChargesCollection": "COLLECTED",
      "importChargesConflict": false,
      "importChargesFactSource": "API",
      "importChargesResolvedCollection": "COLLECTED",
      "importChargesResolvedSource": "API",
      "importChargesShopifyMixed": true,
      "importChargesShopifyReported": "COLLECTED",
      "internalNotes": "abc123",
      "internalOrderNumber": 987,
      "lastSyncedAt": "xyz789",
      "monthlyOrderCap": OrderCapStatus,
      "notifyCustomerOnRefund": true,
      "orderDate": "abc123",
      "orderNumber": "abc123",
      "organizationId": "4",
      "paidAt": "xyz789",
      "paymentGateway": "xyz789",
      "paymentMethod": "abc123",
      "paymentStatus": "AUTHORIZED",
      "phone": "abc123",
      "presentmentCapturedAmount": "xyz789",
      "presentmentCurrency": "abc123",
      "presentmentCurrentShippingCost": "abc123",
      "presentmentDiscountAmount": "xyz789",
      "presentmentRefundedAmount": "xyz789",
      "presentmentShippingCost": "xyz789",
      "presentmentShippingDiscountAmount": "abc123",
      "presentmentSubtotal": "xyz789",
      "presentmentTaxAmount": "abc123",
      "presentmentTotalAmount": "abc123",
      "processedAt": "xyz789",
      "refundedAmount": "xyz789",
      "refunds": {},
      "resolvedShippingService": ResolvedShippingService,
      "restockOnCancel": true,
      "riskAssessmentDetails": {},
      "riskLevel": "xyz789",
      "riskRecommendation": "xyz789",
      "shippingAddress": "abc123",
      "shippingAddress2": "abc123",
      "shippingCity": "abc123",
      "shippingCompany": "xyz789",
      "shippingCost": "xyz789",
      "shippingCountry": "xyz789",
      "shippingCountryCode": "abc123",
      "shippingDiscountAmount": "abc123",
      "shippingFirstName": "xyz789",
      "shippingLastName": "xyz789",
      "shippingLines": {},
      "shippingMethod": "abc123",
      "shippingPostalCode": "abc123",
      "shippingState": "abc123",
      "shopifyLastCancelError": "abc123",
      "shopifyLastCancelSyncAt": "xyz789",
      "shopifyOrderId": "xyz789",
      "shopifyOrderNumber": "xyz789",
      "source": "xyz789",
      "status": "CANCELLED",
      "storeId": 4,
      "subtotal": "xyz789",
      "syncError": "abc123",
      "syncStatus": "ERROR",
      "tags": ["abc123"],
      "taxAmount": "xyz789",
      "taxLines": [OrderTaxLine],
      "taxesIncluded": true,
      "timeline": [OrderTimelineEvent],
      "totalAmount": "xyz789",
      "trackingNumber": "xyz789",
      "trackingUrl": "xyz789",
      "transactions": {},
      "updatedAt": "abc123"
    }
  }
}

createProduct

Description

Create a new product

Required scope: products:create

Response

Returns a Product

Arguments
Name Description
input - CreateProductInput!

Example

Query
mutation createProduct($input: CreateProductInput!) {
  createProduct(input: $input) {
    Organization {
      ...OrganizationFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    ProductStoreConnection {
      ...ProductStoreConnectionFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    allowBackorder
    assemblyMode
    availableQuantity
    barcode
    basePrice
    brand
    bundleComponentCount
    bundleDiscountPercent
    bundleItems {
      ...ProductBundleItemFragment
    }
    bundlePricing
    bundledIn {
      ...ProductBundleItemFragment
    }
    category
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    defaultVariant {
      ...ProductVariantFragment
    }
    description
    dimensionUnit
    displayTitle
    effectiveAssemblyMode
    handle
    hasOnlyDefaultVariant
    height
    hsCode
    id
    images {
      ...ProductImageFragment
    }
    isActive
    isActiveSKU
    isGiftCard
    kitInventoryMode
    length
    lowStockThreshold
    metaDescription
    metaTitle
    option1Name
    option2Name
    option3Name
    optionDefinitions {
      ...ProductOptionDefinitionFragment
    }
    organizationId
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productLocationInventories {
      ...ProductLocationInventoryFragment
    }
    productType
    productVariants {
      ...ProductVariantFragment
    }
    provinceOfOrigin
    publishedAt
    purchasableItemId
    quantity
    requiresShipping
    reservedQuantity
    sku
    skuType
    slug
    status
    stockStatus
    storeConnections {
      ...ProductStoreConnectionFragment
    }
    supplier {
      ...SupplierFragment
    }
    supplierId
    tags
    taxCode
    taxable
    title
    totalQuantity
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    type
    updatedAt
    warehouseLocation
    weight
    weightUnit
    width
  }
}
Variables
{"input": CreateProductInput}
Response
{
  "data": {
    "createProduct": {
      "Organization": Organization,
      "ProductLocationInventory": [
        ProductLocationInventory
      ],
      "ProductStoreConnection": [ProductStoreConnection],
      "SourcingListings": [SourcingListing],
      "allowBackorder": true,
      "assemblyMode": "BOTH",
      "availableQuantity": 987,
      "barcode": "abc123",
      "basePrice": "abc123",
      "brand": "xyz789",
      "bundleComponentCount": 987,
      "bundleDiscountPercent": "abc123",
      "bundleItems": [ProductBundleItem],
      "bundlePricing": "CALCULATED",
      "bundledIn": [ProductBundleItem],
      "category": "abc123",
      "compareAtPrice": "abc123",
      "costPrice": "xyz789",
      "countryOfOrigin": "xyz789",
      "createdAt": "abc123",
      "customsDescription": "abc123",
      "defaultVariant": ProductVariant,
      "description": "abc123",
      "dimensionUnit": "CM",
      "displayTitle": "abc123",
      "effectiveAssemblyMode": "BOTH",
      "handle": "xyz789",
      "hasOnlyDefaultVariant": true,
      "height": "xyz789",
      "hsCode": "xyz789",
      "id": "4",
      "images": [ProductImage],
      "isActive": true,
      "isActiveSKU": false,
      "isGiftCard": false,
      "kitInventoryMode": "ACTIVE",
      "length": "abc123",
      "lowStockThreshold": 123,
      "metaDescription": "xyz789",
      "metaTitle": "abc123",
      "option1Name": "abc123",
      "option2Name": "abc123",
      "option3Name": "abc123",
      "optionDefinitions": [ProductOptionDefinition],
      "organizationId": "4",
      "primaryImage": ProductImage,
      "primaryImageId": "abc123",
      "productLocationInventories": [
        ProductLocationInventory
      ],
      "productType": "abc123",
      "productVariants": [ProductVariant],
      "provinceOfOrigin": "abc123",
      "publishedAt": "xyz789",
      "purchasableItemId": "abc123",
      "quantity": 123,
      "requiresShipping": false,
      "reservedQuantity": 123,
      "sku": "xyz789",
      "skuType": "BUNDLE",
      "slug": "xyz789",
      "status": "ACTIVE",
      "stockStatus": "ALWAYS_IN_STOCK",
      "storeConnections": [ProductStoreConnection],
      "supplier": Supplier,
      "supplierId": "abc123",
      "tags": ["abc123"],
      "taxCode": "abc123",
      "taxable": true,
      "title": "xyz789",
      "totalQuantity": 123,
      "trackInventory": true,
      "trackInventoryNeedsRestoration": false,
      "trackInventoryUserSet": false,
      "type": "BUNDLE",
      "updatedAt": "abc123",
      "warehouseLocation": "abc123",
      "weight": "xyz789",
      "weightUnit": "GRAMS",
      "width": "xyz789"
    }
  }
}

createProductVariant

Description

Create a new product variant

Required scope: products:create

Response

Returns a ProductVariant

Arguments
Name Description
input - CreateProductVariantInput!

Example

Query
mutation createProductVariant($input: CreateProductVariantInput!) {
  createProductVariant(input: $input) {
    Product {
      ...ProductFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    PurchasableItem {
      ...PurchasableItemFragment
    }
    allowBackorder
    availableQuantity
    barcode
    basePrice
    calculatedCost
    calculatedCostIsPartial
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    dimensionUnit
    height
    hsCode
    id
    length
    lowStockThreshold
    onHandQuantity
    option1Value
    option2Value
    option3Value
    organizationId
    position
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productId
    provinceOfOrigin
    purchasableItemId
    qrCode
    quantity
    requiresShipping
    reservedQuantity
    sku
    stockStatus
    taxCode
    taxable
    title
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    updatedAt
    weight
    weightUnit
    width
  }
}
Variables
{"input": CreateProductVariantInput}
Response
{
  "data": {
    "createProductVariant": {
      "Product": Product,
      "ProductLocationInventory": [
        ProductLocationInventory
      ],
      "PurchasableItem": PurchasableItem,
      "allowBackorder": false,
      "availableQuantity": 987,
      "barcode": "xyz789",
      "basePrice": "abc123",
      "calculatedCost": "xyz789",
      "calculatedCostIsPartial": true,
      "compareAtPrice": "abc123",
      "costPrice": "xyz789",
      "countryOfOrigin": "xyz789",
      "createdAt": "xyz789",
      "customsDescription": "abc123",
      "dimensionUnit": "CM",
      "height": "abc123",
      "hsCode": "abc123",
      "id": 4,
      "length": "xyz789",
      "lowStockThreshold": 123,
      "onHandQuantity": 987,
      "option1Value": "abc123",
      "option2Value": "xyz789",
      "option3Value": "abc123",
      "organizationId": 4,
      "position": 987,
      "primaryImage": ProductImage,
      "primaryImageId": "abc123",
      "productId": "4",
      "provinceOfOrigin": "abc123",
      "purchasableItemId": "4",
      "qrCode": "xyz789",
      "quantity": 987,
      "requiresShipping": false,
      "reservedQuantity": 123,
      "sku": "xyz789",
      "stockStatus": "ALWAYS_IN_STOCK",
      "taxCode": "abc123",
      "taxable": true,
      "title": "abc123",
      "trackInventory": false,
      "trackInventoryNeedsRestoration": true,
      "trackInventoryUserSet": true,
      "updatedAt": "abc123",
      "weight": "xyz789",
      "weightUnit": "GRAMS",
      "width": "xyz789"
    }
  }
}

createPurchaseOrder

Description

Create a new purchase order

Required scope: purchase-orders:create

Response

Returns a PurchaseOrder

Arguments
Name Description
input - CreatePurchaseOrderInput!

Example

Query
mutation createPurchaseOrder($input: CreatePurchaseOrderInput!) {
  createPurchaseOrder(input: $input) {
    CreatedBy {
      ...UserFragment
    }
    CreatedByUser {
      ...UserFragment
    }
    InventoryReceipts {
      ...InventoryReceiptFragment
    }
    LastModifiedBy {
      ...UserFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrderItems {
      ...PurchaseOrderItemFragment
    }
    Supplier {
      ...SupplierFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    actualDeliveryDate
    approvedAt
    approvedBy
    createdAt
    createdByUserEmailSnapshot
    createdByUserId
    createdByUserIdSnapshot
    createdByUserNameSnapshot
    currency
    exchangeRate
    expectedDeliveryDate
    id
    internalNotes
    internalPoNumber
    isFullyReceived
    itemCount
    lastModifiedByUserEmailSnapshot
    lastModifiedByUserId
    lastModifiedByUserIdSnapshot
    lastModifiedByUserNameSnapshot
    notes
    orderDate
    organizationId
    otherCosts
    paymentTerms
    pdfFileId
    pdfGeneratedAt
    pdfUrl
    poNumber
    receiptCount
    remainingQuantity
    sendCount
    sentAt
    sentTo
    shipToWarehouseId
    shippingAddress
    shippingCity
    shippingCost
    shippingCountry
    shippingMethod
    shippingPostalCode
    shippingState
    status
    subtotal
    supplierId
    taxAmount
    totalCost
    totalQuantityOrdered
    totalQuantityReceived
    trackingNumber
    trackingUrl
    updatedAt
  }
}
Variables
{"input": CreatePurchaseOrderInput}
Response
{
  "data": {
    "createPurchaseOrder": {
      "CreatedBy": User,
      "CreatedByUser": User,
      "InventoryReceipts": [InventoryReceipt],
      "LastModifiedBy": User,
      "Organization": Organization,
      "PurchaseOrderItems": [PurchaseOrderItem],
      "Supplier": Supplier,
      "WarehouseLocation": WarehouseLocation,
      "actualDeliveryDate": "xyz789",
      "approvedAt": "xyz789",
      "approvedBy": "xyz789",
      "createdAt": "xyz789",
      "createdByUserEmailSnapshot": "xyz789",
      "createdByUserId": "4",
      "createdByUserIdSnapshot": "4",
      "createdByUserNameSnapshot": "abc123",
      "currency": "xyz789",
      "exchangeRate": "xyz789",
      "expectedDeliveryDate": "abc123",
      "id": "4",
      "internalNotes": "abc123",
      "internalPoNumber": 987,
      "isFullyReceived": false,
      "itemCount": 123,
      "lastModifiedByUserEmailSnapshot": "xyz789",
      "lastModifiedByUserId": 4,
      "lastModifiedByUserIdSnapshot": 4,
      "lastModifiedByUserNameSnapshot": "abc123",
      "notes": "abc123",
      "orderDate": "abc123",
      "organizationId": "4",
      "otherCosts": "xyz789",
      "paymentTerms": "xyz789",
      "pdfFileId": "xyz789",
      "pdfGeneratedAt": "abc123",
      "pdfUrl": "abc123",
      "poNumber": "abc123",
      "receiptCount": 123,
      "remainingQuantity": 987,
      "sendCount": 123,
      "sentAt": "xyz789",
      "sentTo": "xyz789",
      "shipToWarehouseId": 4,
      "shippingAddress": "xyz789",
      "shippingCity": "xyz789",
      "shippingCost": "abc123",
      "shippingCountry": "abc123",
      "shippingMethod": "xyz789",
      "shippingPostalCode": "abc123",
      "shippingState": "xyz789",
      "status": "CANCELLED",
      "subtotal": "abc123",
      "supplierId": 4,
      "taxAmount": "abc123",
      "totalCost": "abc123",
      "totalQuantityOrdered": 123,
      "totalQuantityReceived": 123,
      "trackingNumber": "abc123",
      "trackingUrl": "xyz789",
      "updatedAt": "abc123"
    }
  }
}

createSourcingListing

Description

Record a place a product or variant can be bought from.

Required scope: suppliers:update

Response

Returns a SourcingListing

Arguments
Name Description
input - CreateSourcingListingInput!

Example

Query
mutation createSourcingListing($input: CreateSourcingListingInput!) {
  createSourcingListing(input: $input) {
    PriceBreaks {
      ...SourcingListingPriceBreakFragment
    }
    Product {
      ...ProductFragment
    }
    ProductVariant {
      ...ProductVariantFragment
    }
    PurchaseOrderItems {
      ...PurchaseOrderItemFragment
    }
    Supplier {
      ...SupplierFragment
    }
    createdAt
    currency
    freeShippingThreshold
    id
    isActive
    isPrimary
    lastOrderedAt
    lastVerifiedAt
    leadTimeDays
    listingUrl
    minimumOrderQuantity
    notes
    organizationId
    packSize
    productId
    productVariantId
    quoteAt {
      ...SourcingQuoteFragment
    }
    shippingFee
    supplierId
    supplierProductName
    supplierSku
    updatedAt
  }
}
Variables
{"input": CreateSourcingListingInput}
Response
{
  "data": {
    "createSourcingListing": {
      "PriceBreaks": [SourcingListingPriceBreak],
      "Product": Product,
      "ProductVariant": ProductVariant,
      "PurchaseOrderItems": [PurchaseOrderItem],
      "Supplier": Supplier,
      "createdAt": "xyz789",
      "currency": "xyz789",
      "freeShippingThreshold": "xyz789",
      "id": "4",
      "isActive": true,
      "isPrimary": false,
      "lastOrderedAt": "abc123",
      "lastVerifiedAt": "xyz789",
      "leadTimeDays": 123,
      "listingUrl": "abc123",
      "minimumOrderQuantity": 123,
      "notes": "xyz789",
      "organizationId": "4",
      "packSize": 987,
      "productId": "4",
      "productVariantId": 4,
      "quoteAt": SourcingQuote,
      "shippingFee": "xyz789",
      "supplierId": "4",
      "supplierProductName": "abc123",
      "supplierSku": "abc123",
      "updatedAt": "xyz789"
    }
  }
}

createSupplementalFulfillment

Description

Create a supplemental fulfillment package on an already-fulfilled order

Required scope: orders:update

Response

Returns a FulfillmentPackage

Arguments
Name Description
input - CreateSupplementalFulfillmentInput!

Example

Query
mutation createSupplementalFulfillment($input: CreateSupplementalFulfillmentInput!) {
  createSupplementalFulfillment(input: $input) {
    Images {
      ...FulfillmentImageFragment
    }
    Order {
      ...OrderFragment
    }
    PackageItems {
      ...FulfillmentPackageItemFragment
    }
    actualDeliveryDate
    calculatedWeight
    canRetryFulfillment
    cancelReason
    cancelledAt
    cancelledById
    carrier
    carrierConnectionId
    carrierStatusCode
    carrierStatusDescription
    combinedAt
    combinedById
    combinedWithOrderIds
    confirmationCost
    createdAt
    customerNotified
    customerNotifiedAt
    customsInvoiceFile {
      ...FileFragment
    }
    customsSubmittedElectronically
    declaredWeight
    deliveredAt
    estimatedDeliveryDate
    externalLabelId
    externalShipmentId
    fulfillmentCompletedAt
    fulfillmentError
    fulfillmentErrorStep
    fulfillmentStartedAt
    fulfillmentStatusEnum
    handoffMethod
    handoffNote
    hasLabel
    height
    id
    insuranceCost
    isDelivered
    isManualFulfillment
    isSupplemental
    labelFile {
      ...FileFragment
    }
    labelFileId
    labelFormat
    labelPrintedAt
    labelPurchasedAt
    labelPurchasedById
    labelUrl
    labelVoidedAt
    length
    manualFulfillmentReason
    notifyCustomer
    orderId
    organizationId
    packageNumber
    printFirstPageOnly
    scaleWeight
    serviceCode
    serviceName
    serviceOptions
    shipmentGroupId
    shipmentGroupRole
    shippedAt
    shippingCost
    shopifyFulfillmentId
    shopifyLastSyncAt
    shopifyLastSyncError
    shopifySyncAttempts
    stationeryTareGrams
    stationeryType
    stationeryTypeId
    status
    stepLabelPrintStatus
    stepLabelPurchaseStatus
    stepLocalFulfillmentStatus
    stepStoreSyncStatus
    supplementalReason
    trackingException
    trackingLastUpdatedAt
    trackingNumber
    trackingStatus
    trackingStatusDescription
    trackingUrl
    uncombinedAt
    uncombinedById
    uncombinedReason
    updatedAt
    width
  }
}
Variables
{"input": CreateSupplementalFulfillmentInput}
Response
{
  "data": {
    "createSupplementalFulfillment": {
      "Images": [FulfillmentImage],
      "Order": Order,
      "PackageItems": [FulfillmentPackageItem],
      "actualDeliveryDate": "xyz789",
      "calculatedWeight": "abc123",
      "canRetryFulfillment": false,
      "cancelReason": "abc123",
      "cancelledAt": "xyz789",
      "cancelledById": "4",
      "carrier": "abc123",
      "carrierConnectionId": 4,
      "carrierStatusCode": "abc123",
      "carrierStatusDescription": "xyz789",
      "combinedAt": "abc123",
      "combinedById": 4,
      "combinedWithOrderIds": "abc123",
      "confirmationCost": "xyz789",
      "createdAt": "xyz789",
      "customerNotified": false,
      "customerNotifiedAt": "abc123",
      "customsInvoiceFile": File,
      "customsSubmittedElectronically": false,
      "declaredWeight": "abc123",
      "deliveredAt": "abc123",
      "estimatedDeliveryDate": "abc123",
      "externalLabelId": "abc123",
      "externalShipmentId": "abc123",
      "fulfillmentCompletedAt": "xyz789",
      "fulfillmentError": "xyz789",
      "fulfillmentErrorStep": "LABEL_PRINT",
      "fulfillmentStartedAt": "abc123",
      "fulfillmentStatusEnum": "COMPLETED",
      "handoffMethod": "CARRIER_TRACKED",
      "handoffNote": "abc123",
      "hasLabel": false,
      "height": "abc123",
      "id": 4,
      "insuranceCost": "abc123",
      "isDelivered": false,
      "isManualFulfillment": true,
      "isSupplemental": true,
      "labelFile": File,
      "labelFileId": "4",
      "labelFormat": "abc123",
      "labelPrintedAt": "abc123",
      "labelPurchasedAt": "xyz789",
      "labelPurchasedById": "4",
      "labelUrl": "xyz789",
      "labelVoidedAt": "xyz789",
      "length": "abc123",
      "manualFulfillmentReason": "xyz789",
      "notifyCustomer": false,
      "orderId": 4,
      "organizationId": "4",
      "packageNumber": 987,
      "printFirstPageOnly": false,
      "scaleWeight": "abc123",
      "serviceCode": "abc123",
      "serviceName": "xyz789",
      "serviceOptions": "abc123",
      "shipmentGroupId": 4,
      "shipmentGroupRole": "xyz789",
      "shippedAt": "xyz789",
      "shippingCost": "xyz789",
      "shopifyFulfillmentId": "xyz789",
      "shopifyLastSyncAt": "xyz789",
      "shopifyLastSyncError": "xyz789",
      "shopifySyncAttempts": 987,
      "stationeryTareGrams": "abc123",
      "stationeryType": "xyz789",
      "stationeryTypeId": 4,
      "status": "CANCELLED",
      "stepLabelPrintStatus": "COMPLETED",
      "stepLabelPurchaseStatus": "COMPLETED",
      "stepLocalFulfillmentStatus": "COMPLETED",
      "stepStoreSyncStatus": "COMPLETED",
      "supplementalReason": "abc123",
      "trackingException": "abc123",
      "trackingLastUpdatedAt": "xyz789",
      "trackingNumber": "xyz789",
      "trackingStatus": "xyz789",
      "trackingStatusDescription": "abc123",
      "trackingUrl": "xyz789",
      "uncombinedAt": "xyz789",
      "uncombinedById": 4,
      "uncombinedReason": "xyz789",
      "updatedAt": "abc123",
      "width": "abc123"
    }
  }
}

createSupplier

Description

Create a new supplier

Required scope: suppliers:create

Response

Returns a Supplier

Arguments
Name Description
input - CreateSupplierInput!
organizationId - ID!

Example

Query
mutation createSupplier(
  $input: CreateSupplierInput!,
  $organizationId: ID!
) {
  createSupplier(
    input: $input,
    organizationId: $organizationId
  ) {
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrders {
      ...PurchaseOrderFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    address
    city
    code
    contactEmail
    contactName
    contactPhone
    country
    countryCode
    createdAt
    currency
    description
    id
    isActive
    leadTimeDays
    metadata
    minimumOrderValue
    name
    notes
    organizationId
    paymentTerms
    postalCode
    productCount
    purchaseOrderCount
    purchasePortalUrl
    rating
    shippingMethod
    state
    updatedAt
    website
  }
}
Variables
{
  "input": CreateSupplierInput,
  "organizationId": "4"
}
Response
{
  "data": {
    "createSupplier": {
      "Organization": Organization,
      "PurchaseOrders": [PurchaseOrder],
      "SourcingListings": [SourcingListing],
      "address": "abc123",
      "city": "abc123",
      "code": "xyz789",
      "contactEmail": "abc123",
      "contactName": "abc123",
      "contactPhone": "xyz789",
      "country": "xyz789",
      "countryCode": "xyz789",
      "createdAt": "abc123",
      "currency": "abc123",
      "description": "xyz789",
      "id": 4,
      "isActive": false,
      "leadTimeDays": 987,
      "metadata": "abc123",
      "minimumOrderValue": "xyz789",
      "name": "abc123",
      "notes": "xyz789",
      "organizationId": "4",
      "paymentTerms": "xyz789",
      "postalCode": "xyz789",
      "productCount": 987,
      "purchaseOrderCount": 987,
      "purchasePortalUrl": "abc123",
      "rating": 123,
      "shippingMethod": "xyz789",
      "state": "xyz789",
      "updatedAt": "abc123",
      "website": "xyz789"
    }
  }
}

deleteInventoryReceipt

Description

Delete an inventory receipt (only if status is DRAFT). Returns the deleted receipt.

Required scope: inventory:receive

Response

Returns an InventoryReceipt

Arguments
Name Description
id - ID!

Example

Query
mutation deleteInventoryReceipt($id: ID!) {
  deleteInventoryReceipt(id: $id) {
    InventoryReceiptItems {
      ...InventoryReceiptItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrder {
      ...PurchaseOrderFragment
    }
    ReceivedBy {
      ...UserFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    createdAt
    discrepancyNotes
    hasDiscrepancies
    id
    itemCount
    notes
    organizationId
    purchaseOrderId
    receiptNumber
    receivedByEmailSnapshot
    receivedByIdSnapshot
    receivedByNameSnapshot
    receivedByUserId
    receivedDate
    status
    totalQuantityExpected
    totalQuantityReceived
    updatedAt
    varianceQuantity
    warehouseLocationId
  }
}
Variables
{"id": 4}
Response
{
  "data": {
    "deleteInventoryReceipt": {
      "InventoryReceiptItems": [InventoryReceiptItem],
      "Organization": Organization,
      "PurchaseOrder": PurchaseOrder,
      "ReceivedBy": User,
      "WarehouseLocation": WarehouseLocation,
      "createdAt": "xyz789",
      "discrepancyNotes": "abc123",
      "hasDiscrepancies": true,
      "id": 4,
      "itemCount": 987,
      "notes": "xyz789",
      "organizationId": 4,
      "purchaseOrderId": "xyz789",
      "receiptNumber": "xyz789",
      "receivedByEmailSnapshot": "abc123",
      "receivedByIdSnapshot": 4,
      "receivedByNameSnapshot": "xyz789",
      "receivedByUserId": 4,
      "receivedDate": "xyz789",
      "status": "CANCELLED",
      "totalQuantityExpected": 123,
      "totalQuantityReceived": 123,
      "updatedAt": "xyz789",
      "varianceQuantity": 987,
      "warehouseLocationId": "4"
    }
  }
}

deleteProduct

Description

Delete a product. Refused while any variant has stock on hand: set it to zero with updateInventory first. When stock on hand is the only reason, the error code is HAS_STOCK, with each variant and its quantity in extensions.variants. Also refused while a variant is on an open order, holds a reservation or is part of a kit; those refusals have no specific code yet. Deleting a product on a sales channel needs channels:update as well; without it the code is CHANNEL_UPDATE_REQUIRED.

Required scope: products:delete

Response

Returns a Product

Arguments
Name Description
id - ID!
organizationId - ID!

Example

Query
mutation deleteProduct(
  $id: ID!,
  $organizationId: ID!
) {
  deleteProduct(
    id: $id,
    organizationId: $organizationId
  ) {
    Organization {
      ...OrganizationFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    ProductStoreConnection {
      ...ProductStoreConnectionFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    allowBackorder
    assemblyMode
    availableQuantity
    barcode
    basePrice
    brand
    bundleComponentCount
    bundleDiscountPercent
    bundleItems {
      ...ProductBundleItemFragment
    }
    bundlePricing
    bundledIn {
      ...ProductBundleItemFragment
    }
    category
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    defaultVariant {
      ...ProductVariantFragment
    }
    description
    dimensionUnit
    displayTitle
    effectiveAssemblyMode
    handle
    hasOnlyDefaultVariant
    height
    hsCode
    id
    images {
      ...ProductImageFragment
    }
    isActive
    isActiveSKU
    isGiftCard
    kitInventoryMode
    length
    lowStockThreshold
    metaDescription
    metaTitle
    option1Name
    option2Name
    option3Name
    optionDefinitions {
      ...ProductOptionDefinitionFragment
    }
    organizationId
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productLocationInventories {
      ...ProductLocationInventoryFragment
    }
    productType
    productVariants {
      ...ProductVariantFragment
    }
    provinceOfOrigin
    publishedAt
    purchasableItemId
    quantity
    requiresShipping
    reservedQuantity
    sku
    skuType
    slug
    status
    stockStatus
    storeConnections {
      ...ProductStoreConnectionFragment
    }
    supplier {
      ...SupplierFragment
    }
    supplierId
    tags
    taxCode
    taxable
    title
    totalQuantity
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    type
    updatedAt
    warehouseLocation
    weight
    weightUnit
    width
  }
}
Variables
{"id": 4, "organizationId": 4}
Response
{
  "data": {
    "deleteProduct": {
      "Organization": Organization,
      "ProductLocationInventory": [
        ProductLocationInventory
      ],
      "ProductStoreConnection": [ProductStoreConnection],
      "SourcingListings": [SourcingListing],
      "allowBackorder": false,
      "assemblyMode": "BOTH",
      "availableQuantity": 123,
      "barcode": "xyz789",
      "basePrice": "abc123",
      "brand": "xyz789",
      "bundleComponentCount": 987,
      "bundleDiscountPercent": "xyz789",
      "bundleItems": [ProductBundleItem],
      "bundlePricing": "CALCULATED",
      "bundledIn": [ProductBundleItem],
      "category": "xyz789",
      "compareAtPrice": "xyz789",
      "costPrice": "xyz789",
      "countryOfOrigin": "abc123",
      "createdAt": "xyz789",
      "customsDescription": "xyz789",
      "defaultVariant": ProductVariant,
      "description": "abc123",
      "dimensionUnit": "CM",
      "displayTitle": "xyz789",
      "effectiveAssemblyMode": "BOTH",
      "handle": "xyz789",
      "hasOnlyDefaultVariant": false,
      "height": "xyz789",
      "hsCode": "xyz789",
      "id": "4",
      "images": [ProductImage],
      "isActive": true,
      "isActiveSKU": false,
      "isGiftCard": true,
      "kitInventoryMode": "ACTIVE",
      "length": "xyz789",
      "lowStockThreshold": 987,
      "metaDescription": "abc123",
      "metaTitle": "abc123",
      "option1Name": "abc123",
      "option2Name": "xyz789",
      "option3Name": "xyz789",
      "optionDefinitions": [ProductOptionDefinition],
      "organizationId": "4",
      "primaryImage": ProductImage,
      "primaryImageId": "abc123",
      "productLocationInventories": [
        ProductLocationInventory
      ],
      "productType": "abc123",
      "productVariants": [ProductVariant],
      "provinceOfOrigin": "xyz789",
      "publishedAt": "xyz789",
      "purchasableItemId": "abc123",
      "quantity": 123,
      "requiresShipping": false,
      "reservedQuantity": 987,
      "sku": "xyz789",
      "skuType": "BUNDLE",
      "slug": "abc123",
      "status": "ACTIVE",
      "stockStatus": "ALWAYS_IN_STOCK",
      "storeConnections": [ProductStoreConnection],
      "supplier": Supplier,
      "supplierId": "xyz789",
      "tags": ["xyz789"],
      "taxCode": "xyz789",
      "taxable": true,
      "title": "xyz789",
      "totalQuantity": 987,
      "trackInventory": false,
      "trackInventoryNeedsRestoration": false,
      "trackInventoryUserSet": false,
      "type": "BUNDLE",
      "updatedAt": "abc123",
      "warehouseLocation": "abc123",
      "weight": "xyz789",
      "weightUnit": "GRAMS",
      "width": "xyz789"
    }
  }
}

deleteProductImage

Description

Delete product image

Required scope: products:update

Response

Returns a Boolean

Arguments
Name Description
imageId - ID!
organizationId - ID

Example

Query
mutation deleteProductImage(
  $imageId: ID!,
  $organizationId: ID
) {
  deleteProductImage(
    imageId: $imageId,
    organizationId: $organizationId
  )
}
Variables
{
  "imageId": "4",
  "organizationId": "4"
}
Response
{"data": {"deleteProductImage": false}}

deleteProductVariant

Description

Delete a product variant

Required scope: products:delete

Response

Returns a Boolean

Arguments
Name Description
id - ID!

Example

Query
mutation deleteProductVariant($id: ID!) {
  deleteProductVariant(id: $id)
}
Variables
{"id": "4"}
Response
{"data": {"deleteProductVariant": false}}

deletePurchaseOrder

Description

Delete a purchase order (only if status is DRAFT or CANCELLED). Returns the deleted purchase order.

Required scope: purchase-orders:delete

Response

Returns a PurchaseOrder

Arguments
Name Description
id - ID!

Example

Query
mutation deletePurchaseOrder($id: ID!) {
  deletePurchaseOrder(id: $id) {
    CreatedBy {
      ...UserFragment
    }
    CreatedByUser {
      ...UserFragment
    }
    InventoryReceipts {
      ...InventoryReceiptFragment
    }
    LastModifiedBy {
      ...UserFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrderItems {
      ...PurchaseOrderItemFragment
    }
    Supplier {
      ...SupplierFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    actualDeliveryDate
    approvedAt
    approvedBy
    createdAt
    createdByUserEmailSnapshot
    createdByUserId
    createdByUserIdSnapshot
    createdByUserNameSnapshot
    currency
    exchangeRate
    expectedDeliveryDate
    id
    internalNotes
    internalPoNumber
    isFullyReceived
    itemCount
    lastModifiedByUserEmailSnapshot
    lastModifiedByUserId
    lastModifiedByUserIdSnapshot
    lastModifiedByUserNameSnapshot
    notes
    orderDate
    organizationId
    otherCosts
    paymentTerms
    pdfFileId
    pdfGeneratedAt
    pdfUrl
    poNumber
    receiptCount
    remainingQuantity
    sendCount
    sentAt
    sentTo
    shipToWarehouseId
    shippingAddress
    shippingCity
    shippingCost
    shippingCountry
    shippingMethod
    shippingPostalCode
    shippingState
    status
    subtotal
    supplierId
    taxAmount
    totalCost
    totalQuantityOrdered
    totalQuantityReceived
    trackingNumber
    trackingUrl
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "deletePurchaseOrder": {
      "CreatedBy": User,
      "CreatedByUser": User,
      "InventoryReceipts": [InventoryReceipt],
      "LastModifiedBy": User,
      "Organization": Organization,
      "PurchaseOrderItems": [PurchaseOrderItem],
      "Supplier": Supplier,
      "WarehouseLocation": WarehouseLocation,
      "actualDeliveryDate": "abc123",
      "approvedAt": "abc123",
      "approvedBy": "abc123",
      "createdAt": "xyz789",
      "createdByUserEmailSnapshot": "xyz789",
      "createdByUserId": "4",
      "createdByUserIdSnapshot": "4",
      "createdByUserNameSnapshot": "abc123",
      "currency": "xyz789",
      "exchangeRate": "abc123",
      "expectedDeliveryDate": "abc123",
      "id": "4",
      "internalNotes": "xyz789",
      "internalPoNumber": 123,
      "isFullyReceived": false,
      "itemCount": 987,
      "lastModifiedByUserEmailSnapshot": "xyz789",
      "lastModifiedByUserId": 4,
      "lastModifiedByUserIdSnapshot": "4",
      "lastModifiedByUserNameSnapshot": "abc123",
      "notes": "abc123",
      "orderDate": "xyz789",
      "organizationId": "4",
      "otherCosts": "abc123",
      "paymentTerms": "abc123",
      "pdfFileId": "xyz789",
      "pdfGeneratedAt": "abc123",
      "pdfUrl": "xyz789",
      "poNumber": "xyz789",
      "receiptCount": 123,
      "remainingQuantity": 123,
      "sendCount": 123,
      "sentAt": "abc123",
      "sentTo": "abc123",
      "shipToWarehouseId": 4,
      "shippingAddress": "xyz789",
      "shippingCity": "xyz789",
      "shippingCost": "abc123",
      "shippingCountry": "abc123",
      "shippingMethod": "xyz789",
      "shippingPostalCode": "abc123",
      "shippingState": "xyz789",
      "status": "CANCELLED",
      "subtotal": "abc123",
      "supplierId": "4",
      "taxAmount": "xyz789",
      "totalCost": "abc123",
      "totalQuantityOrdered": 987,
      "totalQuantityReceived": 987,
      "trackingNumber": "xyz789",
      "trackingUrl": "abc123",
      "updatedAt": "xyz789"
    }
  }
}

deleteSourcingListing

Description

Delete a sourcing listing and its price ladder.

Required scope: suppliers:update

Response

Returns a Boolean!

Arguments
Name Description
id - ID!

Example

Query
mutation deleteSourcingListing($id: ID!) {
  deleteSourcingListing(id: $id)
}
Variables
{"id": 4}
Response
{"data": {"deleteSourcingListing": true}}

deleteSupplier

Description

Delete a supplier

Required scope: suppliers:delete

Response

Returns a Supplier

Arguments
Name Description
id - ID!

Example

Query
mutation deleteSupplier($id: ID!) {
  deleteSupplier(id: $id) {
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrders {
      ...PurchaseOrderFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    address
    city
    code
    contactEmail
    contactName
    contactPhone
    country
    countryCode
    createdAt
    currency
    description
    id
    isActive
    leadTimeDays
    metadata
    minimumOrderValue
    name
    notes
    organizationId
    paymentTerms
    postalCode
    productCount
    purchaseOrderCount
    purchasePortalUrl
    rating
    shippingMethod
    state
    updatedAt
    website
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "deleteSupplier": {
      "Organization": Organization,
      "PurchaseOrders": [PurchaseOrder],
      "SourcingListings": [SourcingListing],
      "address": "xyz789",
      "city": "xyz789",
      "code": "abc123",
      "contactEmail": "xyz789",
      "contactName": "xyz789",
      "contactPhone": "xyz789",
      "country": "xyz789",
      "countryCode": "xyz789",
      "createdAt": "abc123",
      "currency": "xyz789",
      "description": "abc123",
      "id": 4,
      "isActive": false,
      "leadTimeDays": 987,
      "metadata": "xyz789",
      "minimumOrderValue": "xyz789",
      "name": "xyz789",
      "notes": "abc123",
      "organizationId": 4,
      "paymentTerms": "xyz789",
      "postalCode": "xyz789",
      "productCount": 987,
      "purchaseOrderCount": 987,
      "purchasePortalUrl": "abc123",
      "rating": 123,
      "shippingMethod": "abc123",
      "state": "abc123",
      "updatedAt": "xyz789",
      "website": "xyz789"
    }
  }
}

enqueuePrintJob

Description

Enqueue a print job for a registered device. The desktop agent will dequeue it on its next poll cycle.

Required scope: devices:update

Response

Returns a PrintJob

Arguments
Name Description
deviceId - String!
format - PrintJobFormat!
payload - String! Print content: base64-encoded bytes for PDF/ZPL/RAW

Example

Query
mutation enqueuePrintJob(
  $deviceId: String!,
  $format: PrintJobFormat!,
  $payload: String!
) {
  enqueuePrintJob(
    deviceId: $deviceId,
    format: $format,
    payload: $payload
  ) {
    copies
    createdAt
    device {
      ...DeviceFragment
    }
    deviceId
    error
    format
    id
    leaseExpiresAt
    orgId
    pages
    payloadSizeBytes
    status
    updatedAt
  }
}
Variables
{
  "deviceId": "abc123",
  "format": "PDF",
  "payload": "xyz789"
}
Response
{
  "data": {
    "enqueuePrintJob": {
      "copies": 123,
      "createdAt": "xyz789",
      "device": Device,
      "deviceId": "abc123",
      "error": "xyz789",
      "format": "PDF",
      "id": 4,
      "leaseExpiresAt": "abc123",
      "orgId": "abc123",
      "pages": "abc123",
      "payloadSizeBytes": 123,
      "status": "DISPATCHED",
      "updatedAt": "xyz789"
    }
  }
}

login

Description

Login with email/password

Response

Returns an AuthPayload

Arguments
Name Description
email - String!
mfaCode - String
password - String!

Example

Query
mutation login(
  $email: String!,
  $mfaCode: String,
  $password: String!
) {
  login(
    email: $email,
    mfaCode: $mfaCode,
    password: $password
  ) {
    expiresAt
    requiresEmailVerification
    requiresMfaSetup
    requiresPasskeySetup
    token
    user {
      ...UserFragment
    }
  }
}
Variables
{
  "email": "abc123",
  "mfaCode": "xyz789",
  "password": "xyz789"
}
Response
{
  "data": {
    "login": {
      "expiresAt": "xyz789",
      "requiresEmailVerification": false,
      "requiresMfaSetup": false,
      "requiresPasskeySetup": false,
      "token": "abc123",
      "user": User
    }
  }
}

refreshToken

Description

Refresh access token using HttpOnly refresh token cookie

Response

Returns an AuthPayload

Example

Query
mutation refreshToken {
  refreshToken {
    expiresAt
    requiresEmailVerification
    requiresMfaSetup
    requiresPasskeySetup
    token
    user {
      ...UserFragment
    }
  }
}
Response
{
  "data": {
    "refreshToken": {
      "expiresAt": "abc123",
      "requiresEmailVerification": false,
      "requiresMfaSetup": false,
      "requiresPasskeySetup": true,
      "token": "abc123",
      "user": User
    }
  }
}

removePurchaseOrderItem

Description

Remove an item from a purchase order. Returns the removed item.

Required scope: purchase-orders:update

Response

Returns a PurchaseOrderItem

Arguments
Name Description
id - ID!

Example

Query
mutation removePurchaseOrderItem($id: ID!) {
  removePurchaseOrderItem(id: $id) {
    InventoryReceiptItems {
      ...InventoryReceiptItemFragment
    }
    Product {
      ...ProductFragment
    }
    PurchasableItem {
      ...PurchasableItemFragment
    }
    PurchaseOrder {
      ...PurchaseOrderFragment
    }
    SourcingListing {
      ...SourcingListingFragment
    }
    createdAt
    id
    itemName
    itemSku
    itemType
    lineTotal
    notes
    productId
    productVariantId
    purchasableItemId
    purchaseOrderId
    quantityOrdered
    quantityOutstanding
    quantityReceived
    sourcingListingId
    supplierSku
    unitCost
    unitCostOverridden
    updatedAt
  }
}
Variables
{"id": "4"}
Response
{
  "data": {
    "removePurchaseOrderItem": {
      "InventoryReceiptItems": [InventoryReceiptItem],
      "Product": Product,
      "PurchasableItem": PurchasableItem,
      "PurchaseOrder": PurchaseOrder,
      "SourcingListing": SourcingListing,
      "createdAt": "abc123",
      "id": "4",
      "itemName": "abc123",
      "itemSku": "xyz789",
      "itemType": "abc123",
      "lineTotal": "abc123",
      "notes": "xyz789",
      "productId": "4",
      "productVariantId": 4,
      "purchasableItemId": "4",
      "purchaseOrderId": 4,
      "quantityOrdered": 987,
      "quantityOutstanding": 987,
      "quantityReceived": 987,
      "sourcingListingId": "4",
      "supplierSku": "abc123",
      "unitCost": "abc123",
      "unitCostOverridden": false,
      "updatedAt": "xyz789"
    }
  }
}

reorderProductImages

Description

Reorder product images

Required scope: products:update

Response

Returns [ProductImage!]

Arguments
Name Description
input - ReorderProductImagesInput!

Example

Query
mutation reorderProductImages($input: ReorderProductImagesInput!) {
  reorderProductImages(input: $input) {
    altText
    createdAt
    file {
      ...FileFragment
    }
    fileId
    fileSize
    height
    id
    imageUrl
    product {
      ...ProductFragment
    }
    productId
    shopifyImageId
    shopifyImageLegacyId
    shopifyPosition
    sortOrder
    sourceUrl
    status
    thumbnails
    updatedAt
    url
    width
  }
}
Variables
{"input": ReorderProductImagesInput}
Response
{
  "data": {
    "reorderProductImages": [
      {
        "altText": "abc123",
        "createdAt": "xyz789",
        "file": File,
        "fileId": 4,
        "fileSize": 987,
        "height": 123,
        "id": "4",
        "imageUrl": "abc123",
        "product": Product,
        "productId": 4,
        "shopifyImageId": "xyz789",
        "shopifyImageLegacyId": "abc123",
        "shopifyPosition": 987,
        "sortOrder": 987,
        "sourceUrl": "xyz789",
        "status": "xyz789",
        "thumbnails": {},
        "updatedAt": "abc123",
        "url": "xyz789",
        "width": 987
      }
    ]
  }
}

requestCustomerOrderCode

Description

Email a one-time verification code to the address on the order. Rate limited per link and per network address.

Response

Returns a CustomerOrderCodeRequestResult!

Arguments
Name Description
token - String!

Example

Query
mutation requestCustomerOrderCode($token: String!) {
  requestCustomerOrderCode(token: $token) {
    maskedEmail
    retryAfterSeconds
    status
  }
}
Variables
{"token": "abc123"}
Response
{
  "data": {
    "requestCustomerOrderCode": {
      "maskedEmail": "abc123",
      "retryAfterSeconds": 987,
      "status": "INVALID_LINK"
    }
  }
}

requestPasswordReset

Description

Request password reset email

Response

Returns a VerificationRequest

Arguments
Name Description
email - String!

Example

Query
mutation requestPasswordReset($email: String!) {
  requestPasswordReset(email: $email) {
    canRequestNewLink
    code
    message
    success
  }
}
Variables
{"email": "abc123"}
Response
{
  "data": {
    "requestPasswordReset": {
      "canRequestNewLink": true,
      "code": "abc123",
      "message": "xyz789",
      "success": true
    }
  }
}

requestProductImageUpload

Description

Step 1 of 3 for uploading an image. POST the file to url as multipart/form-data with every entry of fields, then call confirmProductImageUpload, which adds it to the product.

Required scope: products:update

Response

Returns an UploadRequest

Arguments
Name Description
input - RequestProductImageUploadInput!

Example

Query
mutation requestProductImageUpload($input: RequestProductImageUploadInput!) {
  requestProductImageUpload(input: $input) {
    expiresAt
    fields
    uploadId
    url
  }
}
Variables
{"input": RequestProductImageUploadInput}
Response
{
  "data": {
    "requestProductImageUpload": {
      "expiresAt": "xyz789",
      "fields": {},
      "uploadId": 4,
      "url": "abc123"
    }
  }
}

resendSignupVerificationEmail

Description

Send a new email verification link to an account created by signup that has not been verified yet. Always returns the same neutral message so it cannot be used to probe which accounts exist.

Response

Returns a VerificationRequest

Arguments
Name Description
email - String!

Example

Query
mutation resendSignupVerificationEmail($email: String!) {
  resendSignupVerificationEmail(email: $email) {
    canRequestNewLink
    code
    message
    success
  }
}
Variables
{"email": "abc123"}
Response
{
  "data": {
    "resendSignupVerificationEmail": {
      "canRequestNewLink": false,
      "code": "xyz789",
      "message": "abc123",
      "success": true
    }
  }
}

setPreferredBin

Description

Set a variant's preferred (home) bin at a warehouse location.

Required scope: inventory:update

Response

Returns a ProductVariantPreferredBin

Arguments
Name Description
binId - ID!
productVariantId - ID!
warehouseLocationId - ID!

Example

Query
mutation setPreferredBin(
  $binId: ID!,
  $productVariantId: ID!,
  $warehouseLocationId: ID!
) {
  setPreferredBin(
    binId: $binId,
    productVariantId: $productVariantId,
    warehouseLocationId: $warehouseLocationId
  ) {
    WarehouseBin {
      ...WarehouseBinFragment
    }
    id
    preferredBinId
    productVariantId
    warehouseLocationId
  }
}
Variables
{
  "binId": 4,
  "productVariantId": "4",
  "warehouseLocationId": 4
}
Response
{
  "data": {
    "setPreferredBin": {
      "WarehouseBin": WarehouseBin,
      "id": "4",
      "preferredBinId": 4,
      "productVariantId": "4",
      "warehouseLocationId": 4
    }
  }
}

setProductChannelSurfaces

Description

Choose where a product appears on a channel, such as Online Store or Point of Sale. Replaces the current set. Find the IDs with salesChannelSurfaces.

Required scope: channels:update

Arguments
Name Description
channelId - ID!
productId - ID!
surfaceIds - [ID!]!

Example

Query
mutation setProductChannelSurfaces(
  $channelId: ID!,
  $productId: ID!,
  $surfaceIds: [ID!]!
) {
  setProductChannelSurfaces(
    channelId: $channelId,
    productId: $productId,
    surfaceIds: $surfaceIds
  ) {
    message
    success
  }
}
Variables
{
  "channelId": 4,
  "productId": "4",
  "surfaceIds": ["4"]
}
Response
{
  "data": {
    "setProductChannelSurfaces": {
      "message": "xyz789",
      "success": true
    }
  }
}

setProductPrimaryImage

Description

Set the primary image for a product

Required scope: products:update

Response

Returns a ProductImage

Arguments
Name Description
imageId - ID!
productId - ID!

Example

Query
mutation setProductPrimaryImage(
  $imageId: ID!,
  $productId: ID!
) {
  setProductPrimaryImage(
    imageId: $imageId,
    productId: $productId
  ) {
    altText
    createdAt
    file {
      ...FileFragment
    }
    fileId
    fileSize
    height
    id
    imageUrl
    product {
      ...ProductFragment
    }
    productId
    shopifyImageId
    shopifyImageLegacyId
    shopifyPosition
    sortOrder
    sourceUrl
    status
    thumbnails
    updatedAt
    url
    width
  }
}
Variables
{
  "imageId": "4",
  "productId": "4"
}
Response
{
  "data": {
    "setProductPrimaryImage": {
      "altText": "xyz789",
      "createdAt": "abc123",
      "file": File,
      "fileId": 4,
      "fileSize": 987,
      "height": 987,
      "id": "4",
      "imageUrl": "abc123",
      "product": Product,
      "productId": 4,
      "shopifyImageId": "xyz789",
      "shopifyImageLegacyId": "xyz789",
      "shopifyPosition": 123,
      "sortOrder": 123,
      "sourceUrl": "xyz789",
      "status": "xyz789",
      "thumbnails": {},
      "updatedAt": "xyz789",
      "url": "abc123",
      "width": 123
    }
  }
}

setVariantPrimaryImage

Description

Set the primary image for a product variant

Required scope: products:update

Response

Returns a ProductImage

Arguments
Name Description
imageId - ID!
variantId - ID!

Example

Query
mutation setVariantPrimaryImage(
  $imageId: ID!,
  $variantId: ID!
) {
  setVariantPrimaryImage(
    imageId: $imageId,
    variantId: $variantId
  ) {
    altText
    createdAt
    file {
      ...FileFragment
    }
    fileId
    fileSize
    height
    id
    imageUrl
    product {
      ...ProductFragment
    }
    productId
    shopifyImageId
    shopifyImageLegacyId
    shopifyPosition
    sortOrder
    sourceUrl
    status
    thumbnails
    updatedAt
    url
    width
  }
}
Variables
{"imageId": 4, "variantId": 4}
Response
{
  "data": {
    "setVariantPrimaryImage": {
      "altText": "abc123",
      "createdAt": "abc123",
      "file": File,
      "fileId": "4",
      "fileSize": 987,
      "height": 123,
      "id": "4",
      "imageUrl": "xyz789",
      "product": Product,
      "productId": 4,
      "shopifyImageId": "abc123",
      "shopifyImageLegacyId": "xyz789",
      "shopifyPosition": 123,
      "sortOrder": 123,
      "sourceUrl": "abc123",
      "status": "xyz789",
      "thumbnails": {},
      "updatedAt": "abc123",
      "url": "abc123",
      "width": 123
    }
  }
}

signup

Description

Signup new user with password (passkey-only users should use signupWithPasskey)

Response

Returns an AuthPayload

Arguments
Name Description
currency - String The organisation's base currency (ISO 4217), when given explicitly. Omitted: the organisation has none until it sets one — nothing is inferred from the request.
email - String!
firstName - String!
lastName - String!
organizationName - String
password - String

Example

Query
mutation signup(
  $currency: String,
  $email: String!,
  $firstName: String!,
  $lastName: String!,
  $organizationName: String,
  $password: String
) {
  signup(
    currency: $currency,
    email: $email,
    firstName: $firstName,
    lastName: $lastName,
    organizationName: $organizationName,
    password: $password
  ) {
    expiresAt
    requiresEmailVerification
    requiresMfaSetup
    requiresPasskeySetup
    token
    user {
      ...UserFragment
    }
  }
}
Variables
{
  "currency": "abc123",
  "email": "abc123",
  "firstName": "xyz789",
  "lastName": "abc123",
  "organizationName": "abc123",
  "password": "xyz789"
}
Response
{
  "data": {
    "signup": {
      "expiresAt": "xyz789",
      "requiresEmailVerification": true,
      "requiresMfaSetup": true,
      "requiresPasskeySetup": true,
      "token": "abc123",
      "user": User
    }
  }
}

signupFromShopifyInstall

Description

Signup new user from a Shopify App Store install token

Response

Returns an AuthPayload

Arguments
Name Description
email - String!
firstName - String!
installToken - String!
lastName - String!
organizationName - String!
password - String!

Example

Query
mutation signupFromShopifyInstall(
  $email: String!,
  $firstName: String!,
  $installToken: String!,
  $lastName: String!,
  $organizationName: String!,
  $password: String!
) {
  signupFromShopifyInstall(
    email: $email,
    firstName: $firstName,
    installToken: $installToken,
    lastName: $lastName,
    organizationName: $organizationName,
    password: $password
  ) {
    expiresAt
    requiresEmailVerification
    requiresMfaSetup
    requiresPasskeySetup
    token
    user {
      ...UserFragment
    }
  }
}
Variables
{
  "email": "abc123",
  "firstName": "abc123",
  "installToken": "abc123",
  "lastName": "xyz789",
  "organizationName": "abc123",
  "password": "abc123"
}
Response
{
  "data": {
    "signupFromShopifyInstall": {
      "expiresAt": "xyz789",
      "requiresEmailVerification": true,
      "requiresMfaSetup": false,
      "requiresPasskeySetup": false,
      "token": "abc123",
      "user": User
    }
  }
}

signupWithPasskey

Description

Signup with passkey

Response

Returns an AuthPayload

Arguments
Name Description
authenticatorAttachment - String
clientExtensionResults - JSON
credentialId - String!
currency - String The organisation's base currency (ISO 4217), when given explicitly. Omitted: the organisation has none until it sets one — nothing is inferred from the request.
email - String!
firstName - String!
lastName - String!
organizationName - String
passkeyName - String!
rawId - String!
response - JSON!

Example

Query
mutation signupWithPasskey(
  $authenticatorAttachment: String,
  $clientExtensionResults: JSON,
  $credentialId: String!,
  $currency: String,
  $email: String!,
  $firstName: String!,
  $lastName: String!,
  $organizationName: String,
  $passkeyName: String!,
  $rawId: String!,
  $response: JSON!
) {
  signupWithPasskey(
    authenticatorAttachment: $authenticatorAttachment,
    clientExtensionResults: $clientExtensionResults,
    credentialId: $credentialId,
    currency: $currency,
    email: $email,
    firstName: $firstName,
    lastName: $lastName,
    organizationName: $organizationName,
    passkeyName: $passkeyName,
    rawId: $rawId,
    response: $response
  ) {
    expiresAt
    requiresEmailVerification
    requiresMfaSetup
    requiresPasskeySetup
    token
    user {
      ...UserFragment
    }
  }
}
Variables
{
  "authenticatorAttachment": "xyz789",
  "clientExtensionResults": {},
  "credentialId": "xyz789",
  "currency": "abc123",
  "email": "abc123",
  "firstName": "xyz789",
  "lastName": "abc123",
  "organizationName": "abc123",
  "passkeyName": "abc123",
  "rawId": "abc123",
  "response": {}
}
Response
{
  "data": {
    "signupWithPasskey": {
      "expiresAt": "xyz789",
      "requiresEmailVerification": true,
      "requiresMfaSetup": true,
      "requiresPasskeySetup": true,
      "token": "xyz789",
      "user": User
    }
  }
}

startPasskeyAuthentication

Description

Start passkey authentication flow

Response

Returns a PasskeyAuthenticationOptions

Arguments
Name Description
email - String

Example

Query
mutation startPasskeyAuthentication($email: String) {
  startPasskeyAuthentication(email: $email) {
    allowCredentials {
      ...PublicKeyCredentialDescriptorFragment
    }
    challenge
    rpId
    timeout
    userVerification
  }
}
Variables
{"email": "xyz789"}
Response
{
  "data": {
    "startPasskeyAuthentication": {
      "allowCredentials": [PublicKeyCredentialDescriptor],
      "challenge": "abc123",
      "rpId": "xyz789",
      "timeout": 987,
      "userVerification": "abc123"
    }
  }
}

startPasskeySignup

Description

Start passkey registration for a NEW account (passkey signup). Returns WebAuthn creation options whose challenge is bound to the email being signed up; signupWithPasskey only accepts an attestation answering it.

Response

Returns a PasskeyRegistrationOptions

Arguments
Name Description
email - String!
firstName - String!
lastName - String!

Example

Query
mutation startPasskeySignup(
  $email: String!,
  $firstName: String!,
  $lastName: String!
) {
  startPasskeySignup(
    email: $email,
    firstName: $firstName,
    lastName: $lastName
  ) {
    attestation
    authenticatorSelection {
      ...AuthenticatorSelectionFragment
    }
    challenge
    excludeCredentials {
      ...PublicKeyCredentialDescriptorFragment
    }
    pubKeyCredParams {
      ...PublicKeyCredentialParamFragment
    }
    rp {
      ...RelyingPartyFragment
    }
    timeout
    user {
      ...PasskeyUserFragment
    }
  }
}
Variables
{
  "email": "xyz789",
  "firstName": "xyz789",
  "lastName": "abc123"
}
Response
{
  "data": {
    "startPasskeySignup": {
      "attestation": "abc123",
      "authenticatorSelection": AuthenticatorSelection,
      "challenge": "xyz789",
      "excludeCredentials": [
        PublicKeyCredentialDescriptor
      ],
      "pubKeyCredParams": [PublicKeyCredentialParam],
      "rp": RelyingParty,
      "timeout": 987,
      "user": PasskeyUser
    }
  }
}

syncProductToChannel

Description

Push one product to a channel it is connected to. Follow the result with channelSyncJob.

Required scope: channels:update

Response

Returns an AsyncJobResponse

Arguments
Name Description
channelId - ID!
force - Boolean Push even when nothing appears to have changed.
productId - ID!

Example

Query
mutation syncProductToChannel(
  $channelId: ID!,
  $force: Boolean,
  $productId: ID!
) {
  syncProductToChannel(
    channelId: $channelId,
    force: $force,
    productId: $productId
  ) {
    jobId
    message
    status
  }
}
Variables
{
  "channelId": "4",
  "force": true,
  "productId": "4"
}
Response
{
  "data": {
    "syncProductToChannel": {
      "jobId": "4",
      "message": "xyz789",
      "status": "COMPLETED"
    }
  }
}

updateInventory

Description

Set the on-hand quantity of a variant at a warehouse location. Use this to set opening stock for a new product, or an inventory receipt when stock arrives against a purchase order.

Required scope: inventory:update

Response

Returns a ProductLocationInventory

Arguments
Name Description
input - UpdateInventoryInput!

Example

Query
mutation updateInventory($input: UpdateInventoryInput!) {
  updateInventory(input: $input) {
    Product {
      ...ProductFragment
    }
    ProductVariant {
      ...ProductVariantFragment
    }
    WarehouseArea {
      ...WarehouseAreaFragment
    }
    WarehouseBay {
      ...WarehouseBayFragment
    }
    WarehouseBin {
      ...WarehouseBinFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    binType
    createdAt
    id
    isPreferred
    lastCountDate
    lastSyncAt
    locationId
    locationPath
    lowStockThreshold
    productId
    productVariantId
    quantity
    syncErrors
    syncStatus
    updatedAt
    warehouseAreaId
    warehouseBayId
    warehouseBinId
    warehouseLocationId
  }
}
Variables
{"input": UpdateInventoryInput}
Response
{
  "data": {
    "updateInventory": {
      "Product": Product,
      "ProductVariant": ProductVariant,
      "WarehouseArea": WarehouseArea,
      "WarehouseBay": WarehouseBay,
      "WarehouseBin": WarehouseBin,
      "WarehouseLocation": WarehouseLocation,
      "binType": "xyz789",
      "createdAt": "abc123",
      "id": "4",
      "isPreferred": false,
      "lastCountDate": "xyz789",
      "lastSyncAt": "abc123",
      "locationId": 4,
      "locationPath": "xyz789",
      "lowStockThreshold": 987,
      "productId": 4,
      "productVariantId": "abc123",
      "quantity": 123,
      "syncErrors": {},
      "syncStatus": "ERROR",
      "updatedAt": "xyz789",
      "warehouseAreaId": "xyz789",
      "warehouseBayId": "abc123",
      "warehouseBinId": "xyz789",
      "warehouseLocationId": 4
    }
  }
}

updateInventoryReceipt

Description

Update an inventory receipt

Required scope: inventory:receive

Response

Returns an InventoryReceipt

Arguments
Name Description
id - ID!
input - UpdateInventoryReceiptInput!

Example

Query
mutation updateInventoryReceipt(
  $id: ID!,
  $input: UpdateInventoryReceiptInput!
) {
  updateInventoryReceipt(
    id: $id,
    input: $input
  ) {
    InventoryReceiptItems {
      ...InventoryReceiptItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrder {
      ...PurchaseOrderFragment
    }
    ReceivedBy {
      ...UserFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    createdAt
    discrepancyNotes
    hasDiscrepancies
    id
    itemCount
    notes
    organizationId
    purchaseOrderId
    receiptNumber
    receivedByEmailSnapshot
    receivedByIdSnapshot
    receivedByNameSnapshot
    receivedByUserId
    receivedDate
    status
    totalQuantityExpected
    totalQuantityReceived
    updatedAt
    varianceQuantity
    warehouseLocationId
  }
}
Variables
{
  "id": "4",
  "input": UpdateInventoryReceiptInput
}
Response
{
  "data": {
    "updateInventoryReceipt": {
      "InventoryReceiptItems": [InventoryReceiptItem],
      "Organization": Organization,
      "PurchaseOrder": PurchaseOrder,
      "ReceivedBy": User,
      "WarehouseLocation": WarehouseLocation,
      "createdAt": "abc123",
      "discrepancyNotes": "xyz789",
      "hasDiscrepancies": true,
      "id": "4",
      "itemCount": 987,
      "notes": "xyz789",
      "organizationId": 4,
      "purchaseOrderId": "abc123",
      "receiptNumber": "xyz789",
      "receivedByEmailSnapshot": "abc123",
      "receivedByIdSnapshot": 4,
      "receivedByNameSnapshot": "xyz789",
      "receivedByUserId": "4",
      "receivedDate": "abc123",
      "status": "CANCELLED",
      "totalQuantityExpected": 123,
      "totalQuantityReceived": 987,
      "updatedAt": "abc123",
      "varianceQuantity": 987,
      "warehouseLocationId": 4
    }
  }
}

updateOrder

Description

Update an existing order

Required scope: orders:update

Response

Returns an Order

Arguments
Name Description
id - ID!
input - UpdateOrderInput!

Example

Query
mutation updateOrder(
  $id: ID!,
  $input: UpdateOrderInput!
) {
  updateOrder(
    id: $id,
    input: $input
  ) {
    Customer {
      ...CustomerFragment
    }
    FulfillmentPackages {
      ...FulfillmentPackageFragment
    }
    OrderComments {
      ...OrderCommentFragment
    }
    OrderLineItems {
      ...OrderLineItemFragment
    }
    Organization {
      ...OrganizationFragment
    }
    WarehouseAllocation {
      ...OrderWarehouseAllocationFragment
    }
    billingAddress
    billingAddress2
    billingCity
    billingCompany
    billingCountry
    billingCountryCode
    billingFirstName
    billingLastName
    billingPostalCode
    billingState
    cancelReason
    cancelStaffNote
    cancelledAt
    capturedAmount
    carrier
    closedAt
    confirmed
    createdAt
    currency
    currentShippingCost
    customerIp
    customerNotes
    deliveredAt
    discountAmount
    discountCodes
    email
    exchangeRate
    fulfilledAt
    fulfillmentStatus
    grossProfit {
      ...OrderGrossProfitFragment
    }
    id
    importChargesCollectedAmount
    importChargesCollectedBy
    importChargesCollection
    importChargesConflict
    importChargesFactSource
    importChargesResolvedCollection
    importChargesResolvedSource
    importChargesShopifyMixed
    importChargesShopifyReported
    internalNotes
    internalOrderNumber
    lastSyncedAt
    monthlyOrderCap {
      ...OrderCapStatusFragment
    }
    notifyCustomerOnRefund
    orderDate
    orderNumber
    organizationId
    paidAt
    paymentGateway
    paymentMethod
    paymentStatus
    phone
    presentmentCapturedAmount
    presentmentCurrency
    presentmentCurrentShippingCost
    presentmentDiscountAmount
    presentmentRefundedAmount
    presentmentShippingCost
    presentmentShippingDiscountAmount
    presentmentSubtotal
    presentmentTaxAmount
    presentmentTotalAmount
    processedAt
    refundedAmount
    refunds
    resolvedShippingService {
      ...ResolvedShippingServiceFragment
    }
    restockOnCancel
    riskAssessmentDetails
    riskLevel
    riskRecommendation
    shippingAddress
    shippingAddress2
    shippingCity
    shippingCompany
    shippingCost
    shippingCountry
    shippingCountryCode
    shippingDiscountAmount
    shippingFirstName
    shippingLastName
    shippingLines
    shippingMethod
    shippingPostalCode
    shippingState
    shopifyLastCancelError
    shopifyLastCancelSyncAt
    shopifyOrderId
    shopifyOrderNumber
    source
    status
    storeId
    subtotal
    syncError
    syncStatus
    tags
    taxAmount
    taxLines {
      ...OrderTaxLineFragment
    }
    taxesIncluded
    timeline {
      ...OrderTimelineEventFragment
    }
    totalAmount
    trackingNumber
    trackingUrl
    transactions
    updatedAt
  }
}
Variables
{
  "id": "4",
  "input": UpdateOrderInput
}
Response
{
  "data": {
    "updateOrder": {
      "Customer": Customer,
      "FulfillmentPackages": [FulfillmentPackage],
      "OrderComments": [OrderComment],
      "OrderLineItems": [OrderLineItem],
      "Organization": Organization,
      "WarehouseAllocation": OrderWarehouseAllocation,
      "billingAddress": "abc123",
      "billingAddress2": "xyz789",
      "billingCity": "xyz789",
      "billingCompany": "xyz789",
      "billingCountry": "abc123",
      "billingCountryCode": "xyz789",
      "billingFirstName": "xyz789",
      "billingLastName": "xyz789",
      "billingPostalCode": "xyz789",
      "billingState": "abc123",
      "cancelReason": "xyz789",
      "cancelStaffNote": "xyz789",
      "cancelledAt": "abc123",
      "capturedAmount": "abc123",
      "carrier": "xyz789",
      "closedAt": "abc123",
      "confirmed": false,
      "createdAt": "abc123",
      "currency": "abc123",
      "currentShippingCost": "xyz789",
      "customerIp": "xyz789",
      "customerNotes": "xyz789",
      "deliveredAt": "xyz789",
      "discountAmount": "xyz789",
      "discountCodes": {},
      "email": "abc123",
      "exchangeRate": "abc123",
      "fulfilledAt": "abc123",
      "fulfillmentStatus": "CANCELLED",
      "grossProfit": OrderGrossProfit,
      "id": 4,
      "importChargesCollectedAmount": "xyz789",
      "importChargesCollectedBy": "MERCHANT",
      "importChargesCollection": "COLLECTED",
      "importChargesConflict": false,
      "importChargesFactSource": "API",
      "importChargesResolvedCollection": "COLLECTED",
      "importChargesResolvedSource": "API",
      "importChargesShopifyMixed": false,
      "importChargesShopifyReported": "COLLECTED",
      "internalNotes": "xyz789",
      "internalOrderNumber": 987,
      "lastSyncedAt": "xyz789",
      "monthlyOrderCap": OrderCapStatus,
      "notifyCustomerOnRefund": false,
      "orderDate": "xyz789",
      "orderNumber": "xyz789",
      "organizationId": 4,
      "paidAt": "abc123",
      "paymentGateway": "xyz789",
      "paymentMethod": "xyz789",
      "paymentStatus": "AUTHORIZED",
      "phone": "abc123",
      "presentmentCapturedAmount": "abc123",
      "presentmentCurrency": "xyz789",
      "presentmentCurrentShippingCost": "xyz789",
      "presentmentDiscountAmount": "abc123",
      "presentmentRefundedAmount": "xyz789",
      "presentmentShippingCost": "abc123",
      "presentmentShippingDiscountAmount": "abc123",
      "presentmentSubtotal": "xyz789",
      "presentmentTaxAmount": "abc123",
      "presentmentTotalAmount": "xyz789",
      "processedAt": "xyz789",
      "refundedAmount": "abc123",
      "refunds": {},
      "resolvedShippingService": ResolvedShippingService,
      "restockOnCancel": false,
      "riskAssessmentDetails": {},
      "riskLevel": "abc123",
      "riskRecommendation": "abc123",
      "shippingAddress": "xyz789",
      "shippingAddress2": "abc123",
      "shippingCity": "xyz789",
      "shippingCompany": "abc123",
      "shippingCost": "xyz789",
      "shippingCountry": "xyz789",
      "shippingCountryCode": "abc123",
      "shippingDiscountAmount": "xyz789",
      "shippingFirstName": "abc123",
      "shippingLastName": "abc123",
      "shippingLines": {},
      "shippingMethod": "xyz789",
      "shippingPostalCode": "abc123",
      "shippingState": "xyz789",
      "shopifyLastCancelError": "abc123",
      "shopifyLastCancelSyncAt": "xyz789",
      "shopifyOrderId": "abc123",
      "shopifyOrderNumber": "abc123",
      "source": "abc123",
      "status": "CANCELLED",
      "storeId": 4,
      "subtotal": "abc123",
      "syncError": "abc123",
      "syncStatus": "ERROR",
      "tags": ["abc123"],
      "taxAmount": "xyz789",
      "taxLines": [OrderTaxLine],
      "taxesIncluded": true,
      "timeline": [OrderTimelineEvent],
      "totalAmount": "xyz789",
      "trackingNumber": "xyz789",
      "trackingUrl": "abc123",
      "transactions": {},
      "updatedAt": "xyz789"
    }
  }
}

updateProduct

Description

Update an existing product

Required scope: products:update

Response

Returns a Product

Arguments
Name Description
id - ID!
input - UpdateProductInput!

Example

Query
mutation updateProduct(
  $id: ID!,
  $input: UpdateProductInput!
) {
  updateProduct(
    id: $id,
    input: $input
  ) {
    Organization {
      ...OrganizationFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    ProductStoreConnection {
      ...ProductStoreConnectionFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    allowBackorder
    assemblyMode
    availableQuantity
    barcode
    basePrice
    brand
    bundleComponentCount
    bundleDiscountPercent
    bundleItems {
      ...ProductBundleItemFragment
    }
    bundlePricing
    bundledIn {
      ...ProductBundleItemFragment
    }
    category
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    defaultVariant {
      ...ProductVariantFragment
    }
    description
    dimensionUnit
    displayTitle
    effectiveAssemblyMode
    handle
    hasOnlyDefaultVariant
    height
    hsCode
    id
    images {
      ...ProductImageFragment
    }
    isActive
    isActiveSKU
    isGiftCard
    kitInventoryMode
    length
    lowStockThreshold
    metaDescription
    metaTitle
    option1Name
    option2Name
    option3Name
    optionDefinitions {
      ...ProductOptionDefinitionFragment
    }
    organizationId
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productLocationInventories {
      ...ProductLocationInventoryFragment
    }
    productType
    productVariants {
      ...ProductVariantFragment
    }
    provinceOfOrigin
    publishedAt
    purchasableItemId
    quantity
    requiresShipping
    reservedQuantity
    sku
    skuType
    slug
    status
    stockStatus
    storeConnections {
      ...ProductStoreConnectionFragment
    }
    supplier {
      ...SupplierFragment
    }
    supplierId
    tags
    taxCode
    taxable
    title
    totalQuantity
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    type
    updatedAt
    warehouseLocation
    weight
    weightUnit
    width
  }
}
Variables
{"id": 4, "input": UpdateProductInput}
Response
{
  "data": {
    "updateProduct": {
      "Organization": Organization,
      "ProductLocationInventory": [
        ProductLocationInventory
      ],
      "ProductStoreConnection": [ProductStoreConnection],
      "SourcingListings": [SourcingListing],
      "allowBackorder": false,
      "assemblyMode": "BOTH",
      "availableQuantity": 123,
      "barcode": "xyz789",
      "basePrice": "xyz789",
      "brand": "abc123",
      "bundleComponentCount": 987,
      "bundleDiscountPercent": "abc123",
      "bundleItems": [ProductBundleItem],
      "bundlePricing": "CALCULATED",
      "bundledIn": [ProductBundleItem],
      "category": "abc123",
      "compareAtPrice": "xyz789",
      "costPrice": "abc123",
      "countryOfOrigin": "xyz789",
      "createdAt": "xyz789",
      "customsDescription": "abc123",
      "defaultVariant": ProductVariant,
      "description": "xyz789",
      "dimensionUnit": "CM",
      "displayTitle": "xyz789",
      "effectiveAssemblyMode": "BOTH",
      "handle": "abc123",
      "hasOnlyDefaultVariant": true,
      "height": "abc123",
      "hsCode": "xyz789",
      "id": "4",
      "images": [ProductImage],
      "isActive": true,
      "isActiveSKU": false,
      "isGiftCard": true,
      "kitInventoryMode": "ACTIVE",
      "length": "xyz789",
      "lowStockThreshold": 123,
      "metaDescription": "abc123",
      "metaTitle": "abc123",
      "option1Name": "xyz789",
      "option2Name": "xyz789",
      "option3Name": "xyz789",
      "optionDefinitions": [ProductOptionDefinition],
      "organizationId": "4",
      "primaryImage": ProductImage,
      "primaryImageId": "abc123",
      "productLocationInventories": [
        ProductLocationInventory
      ],
      "productType": "abc123",
      "productVariants": [ProductVariant],
      "provinceOfOrigin": "abc123",
      "publishedAt": "abc123",
      "purchasableItemId": "abc123",
      "quantity": 123,
      "requiresShipping": true,
      "reservedQuantity": 123,
      "sku": "xyz789",
      "skuType": "BUNDLE",
      "slug": "xyz789",
      "status": "ACTIVE",
      "stockStatus": "ALWAYS_IN_STOCK",
      "storeConnections": [ProductStoreConnection],
      "supplier": Supplier,
      "supplierId": "abc123",
      "tags": ["xyz789"],
      "taxCode": "abc123",
      "taxable": true,
      "title": "xyz789",
      "totalQuantity": 123,
      "trackInventory": false,
      "trackInventoryNeedsRestoration": true,
      "trackInventoryUserSet": true,
      "type": "BUNDLE",
      "updatedAt": "xyz789",
      "warehouseLocation": "abc123",
      "weight": "abc123",
      "weightUnit": "GRAMS",
      "width": "xyz789"
    }
  }
}

updateProductImage

Description

Update product image metadata

Required scope: products:update

Response

Returns a ProductImage

Arguments
Name Description
input - UpdateProductImageInput!

Example

Query
mutation updateProductImage($input: UpdateProductImageInput!) {
  updateProductImage(input: $input) {
    altText
    createdAt
    file {
      ...FileFragment
    }
    fileId
    fileSize
    height
    id
    imageUrl
    product {
      ...ProductFragment
    }
    productId
    shopifyImageId
    shopifyImageLegacyId
    shopifyPosition
    sortOrder
    sourceUrl
    status
    thumbnails
    updatedAt
    url
    width
  }
}
Variables
{"input": UpdateProductImageInput}
Response
{
  "data": {
    "updateProductImage": {
      "altText": "abc123",
      "createdAt": "xyz789",
      "file": File,
      "fileId": "4",
      "fileSize": 987,
      "height": 987,
      "id": 4,
      "imageUrl": "abc123",
      "product": Product,
      "productId": 4,
      "shopifyImageId": "abc123",
      "shopifyImageLegacyId": "abc123",
      "shopifyPosition": 987,
      "sortOrder": 123,
      "sourceUrl": "abc123",
      "status": "xyz789",
      "thumbnails": {},
      "updatedAt": "abc123",
      "url": "xyz789",
      "width": 987
    }
  }
}

updateProductVariant

Description

Update a product variant

Required scope: products:update

Response

Returns a ProductVariant

Arguments
Name Description
id - ID!
input - UpdateProductVariantInput!

Example

Query
mutation updateProductVariant(
  $id: ID!,
  $input: UpdateProductVariantInput!
) {
  updateProductVariant(
    id: $id,
    input: $input
  ) {
    Product {
      ...ProductFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    PurchasableItem {
      ...PurchasableItemFragment
    }
    allowBackorder
    availableQuantity
    barcode
    basePrice
    calculatedCost
    calculatedCostIsPartial
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    dimensionUnit
    height
    hsCode
    id
    length
    lowStockThreshold
    onHandQuantity
    option1Value
    option2Value
    option3Value
    organizationId
    position
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productId
    provinceOfOrigin
    purchasableItemId
    qrCode
    quantity
    requiresShipping
    reservedQuantity
    sku
    stockStatus
    taxCode
    taxable
    title
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    updatedAt
    weight
    weightUnit
    width
  }
}
Variables
{"id": 4, "input": UpdateProductVariantInput}
Response
{
  "data": {
    "updateProductVariant": {
      "Product": Product,
      "ProductLocationInventory": [
        ProductLocationInventory
      ],
      "PurchasableItem": PurchasableItem,
      "allowBackorder": true,
      "availableQuantity": 123,
      "barcode": "xyz789",
      "basePrice": "abc123",
      "calculatedCost": "abc123",
      "calculatedCostIsPartial": false,
      "compareAtPrice": "xyz789",
      "costPrice": "xyz789",
      "countryOfOrigin": "abc123",
      "createdAt": "xyz789",
      "customsDescription": "abc123",
      "dimensionUnit": "CM",
      "height": "abc123",
      "hsCode": "xyz789",
      "id": "4",
      "length": "abc123",
      "lowStockThreshold": 987,
      "onHandQuantity": 123,
      "option1Value": "abc123",
      "option2Value": "abc123",
      "option3Value": "xyz789",
      "organizationId": 4,
      "position": 987,
      "primaryImage": ProductImage,
      "primaryImageId": "abc123",
      "productId": "4",
      "provinceOfOrigin": "xyz789",
      "purchasableItemId": "4",
      "qrCode": "xyz789",
      "quantity": 123,
      "requiresShipping": false,
      "reservedQuantity": 987,
      "sku": "abc123",
      "stockStatus": "ALWAYS_IN_STOCK",
      "taxCode": "abc123",
      "taxable": false,
      "title": "abc123",
      "trackInventory": true,
      "trackInventoryNeedsRestoration": true,
      "trackInventoryUserSet": false,
      "updatedAt": "abc123",
      "weight": "abc123",
      "weightUnit": "GRAMS",
      "width": "xyz789"
    }
  }
}

updateProductWithVariantMatrix

Description

Atomically update a product, delete specified variants, and create new variants in a single transaction. Emits exactly one PRODUCT_UPDATED event. Use instead of the sequential updateProduct + deleteProductVariant + createProductVariant pattern.

Required scope: products:update

Response

Returns a Product

Arguments
Name Description
createVariants - [CreateProductVariantInput!]!
deleteVariantIds - [ID!]!
id - ID!
input - UpdateProductInput!

Example

Query
mutation updateProductWithVariantMatrix(
  $createVariants: [CreateProductVariantInput!]!,
  $deleteVariantIds: [ID!]!,
  $id: ID!,
  $input: UpdateProductInput!
) {
  updateProductWithVariantMatrix(
    createVariants: $createVariants,
    deleteVariantIds: $deleteVariantIds,
    id: $id,
    input: $input
  ) {
    Organization {
      ...OrganizationFragment
    }
    ProductLocationInventory {
      ...ProductLocationInventoryFragment
    }
    ProductStoreConnection {
      ...ProductStoreConnectionFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    allowBackorder
    assemblyMode
    availableQuantity
    barcode
    basePrice
    brand
    bundleComponentCount
    bundleDiscountPercent
    bundleItems {
      ...ProductBundleItemFragment
    }
    bundlePricing
    bundledIn {
      ...ProductBundleItemFragment
    }
    category
    compareAtPrice
    costPrice
    countryOfOrigin
    createdAt
    customsDescription
    defaultVariant {
      ...ProductVariantFragment
    }
    description
    dimensionUnit
    displayTitle
    effectiveAssemblyMode
    handle
    hasOnlyDefaultVariant
    height
    hsCode
    id
    images {
      ...ProductImageFragment
    }
    isActive
    isActiveSKU
    isGiftCard
    kitInventoryMode
    length
    lowStockThreshold
    metaDescription
    metaTitle
    option1Name
    option2Name
    option3Name
    optionDefinitions {
      ...ProductOptionDefinitionFragment
    }
    organizationId
    primaryImage {
      ...ProductImageFragment
    }
    primaryImageId
    productLocationInventories {
      ...ProductLocationInventoryFragment
    }
    productType
    productVariants {
      ...ProductVariantFragment
    }
    provinceOfOrigin
    publishedAt
    purchasableItemId
    quantity
    requiresShipping
    reservedQuantity
    sku
    skuType
    slug
    status
    stockStatus
    storeConnections {
      ...ProductStoreConnectionFragment
    }
    supplier {
      ...SupplierFragment
    }
    supplierId
    tags
    taxCode
    taxable
    title
    totalQuantity
    trackInventory
    trackInventoryNeedsRestoration
    trackInventoryUserSet
    type
    updatedAt
    warehouseLocation
    weight
    weightUnit
    width
  }
}
Variables
{
  "createVariants": [CreateProductVariantInput],
  "deleteVariantIds": [4],
  "id": "4",
  "input": UpdateProductInput
}
Response
{
  "data": {
    "updateProductWithVariantMatrix": {
      "Organization": Organization,
      "ProductLocationInventory": [
        ProductLocationInventory
      ],
      "ProductStoreConnection": [ProductStoreConnection],
      "SourcingListings": [SourcingListing],
      "allowBackorder": true,
      "assemblyMode": "BOTH",
      "availableQuantity": 987,
      "barcode": "abc123",
      "basePrice": "xyz789",
      "brand": "abc123",
      "bundleComponentCount": 123,
      "bundleDiscountPercent": "xyz789",
      "bundleItems": [ProductBundleItem],
      "bundlePricing": "CALCULATED",
      "bundledIn": [ProductBundleItem],
      "category": "xyz789",
      "compareAtPrice": "abc123",
      "costPrice": "xyz789",
      "countryOfOrigin": "abc123",
      "createdAt": "xyz789",
      "customsDescription": "abc123",
      "defaultVariant": ProductVariant,
      "description": "abc123",
      "dimensionUnit": "CM",
      "displayTitle": "xyz789",
      "effectiveAssemblyMode": "BOTH",
      "handle": "abc123",
      "hasOnlyDefaultVariant": true,
      "height": "xyz789",
      "hsCode": "xyz789",
      "id": "4",
      "images": [ProductImage],
      "isActive": false,
      "isActiveSKU": true,
      "isGiftCard": true,
      "kitInventoryMode": "ACTIVE",
      "length": "xyz789",
      "lowStockThreshold": 987,
      "metaDescription": "abc123",
      "metaTitle": "abc123",
      "option1Name": "abc123",
      "option2Name": "abc123",
      "option3Name": "xyz789",
      "optionDefinitions": [ProductOptionDefinition],
      "organizationId": "4",
      "primaryImage": ProductImage,
      "primaryImageId": "xyz789",
      "productLocationInventories": [
        ProductLocationInventory
      ],
      "productType": "abc123",
      "productVariants": [ProductVariant],
      "provinceOfOrigin": "xyz789",
      "publishedAt": "abc123",
      "purchasableItemId": "xyz789",
      "quantity": 123,
      "requiresShipping": false,
      "reservedQuantity": 123,
      "sku": "abc123",
      "skuType": "BUNDLE",
      "slug": "xyz789",
      "status": "ACTIVE",
      "stockStatus": "ALWAYS_IN_STOCK",
      "storeConnections": [ProductStoreConnection],
      "supplier": Supplier,
      "supplierId": "abc123",
      "tags": ["xyz789"],
      "taxCode": "abc123",
      "taxable": false,
      "title": "xyz789",
      "totalQuantity": 987,
      "trackInventory": true,
      "trackInventoryNeedsRestoration": false,
      "trackInventoryUserSet": false,
      "type": "BUNDLE",
      "updatedAt": "abc123",
      "warehouseLocation": "xyz789",
      "weight": "xyz789",
      "weightUnit": "GRAMS",
      "width": "abc123"
    }
  }
}

updatePurchaseOrder

Description

Update a purchase order

Required scope: purchase-orders:update

Response

Returns a PurchaseOrder

Arguments
Name Description
id - ID!
input - UpdatePurchaseOrderInput!

Example

Query
mutation updatePurchaseOrder(
  $id: ID!,
  $input: UpdatePurchaseOrderInput!
) {
  updatePurchaseOrder(
    id: $id,
    input: $input
  ) {
    CreatedBy {
      ...UserFragment
    }
    CreatedByUser {
      ...UserFragment
    }
    InventoryReceipts {
      ...InventoryReceiptFragment
    }
    LastModifiedBy {
      ...UserFragment
    }
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrderItems {
      ...PurchaseOrderItemFragment
    }
    Supplier {
      ...SupplierFragment
    }
    WarehouseLocation {
      ...WarehouseLocationFragment
    }
    actualDeliveryDate
    approvedAt
    approvedBy
    createdAt
    createdByUserEmailSnapshot
    createdByUserId
    createdByUserIdSnapshot
    createdByUserNameSnapshot
    currency
    exchangeRate
    expectedDeliveryDate
    id
    internalNotes
    internalPoNumber
    isFullyReceived
    itemCount
    lastModifiedByUserEmailSnapshot
    lastModifiedByUserId
    lastModifiedByUserIdSnapshot
    lastModifiedByUserNameSnapshot
    notes
    orderDate
    organizationId
    otherCosts
    paymentTerms
    pdfFileId
    pdfGeneratedAt
    pdfUrl
    poNumber
    receiptCount
    remainingQuantity
    sendCount
    sentAt
    sentTo
    shipToWarehouseId
    shippingAddress
    shippingCity
    shippingCost
    shippingCountry
    shippingMethod
    shippingPostalCode
    shippingState
    status
    subtotal
    supplierId
    taxAmount
    totalCost
    totalQuantityOrdered
    totalQuantityReceived
    trackingNumber
    trackingUrl
    updatedAt
  }
}
Variables
{
  "id": "4",
  "input": UpdatePurchaseOrderInput
}
Response
{
  "data": {
    "updatePurchaseOrder": {
      "CreatedBy": User,
      "CreatedByUser": User,
      "InventoryReceipts": [InventoryReceipt],
      "LastModifiedBy": User,
      "Organization": Organization,
      "PurchaseOrderItems": [PurchaseOrderItem],
      "Supplier": Supplier,
      "WarehouseLocation": WarehouseLocation,
      "actualDeliveryDate": "xyz789",
      "approvedAt": "xyz789",
      "approvedBy": "xyz789",
      "createdAt": "abc123",
      "createdByUserEmailSnapshot": "xyz789",
      "createdByUserId": 4,
      "createdByUserIdSnapshot": 4,
      "createdByUserNameSnapshot": "abc123",
      "currency": "abc123",
      "exchangeRate": "abc123",
      "expectedDeliveryDate": "xyz789",
      "id": "4",
      "internalNotes": "xyz789",
      "internalPoNumber": 987,
      "isFullyReceived": false,
      "itemCount": 987,
      "lastModifiedByUserEmailSnapshot": "xyz789",
      "lastModifiedByUserId": 4,
      "lastModifiedByUserIdSnapshot": 4,
      "lastModifiedByUserNameSnapshot": "abc123",
      "notes": "abc123",
      "orderDate": "abc123",
      "organizationId": 4,
      "otherCosts": "abc123",
      "paymentTerms": "xyz789",
      "pdfFileId": "xyz789",
      "pdfGeneratedAt": "abc123",
      "pdfUrl": "abc123",
      "poNumber": "abc123",
      "receiptCount": 123,
      "remainingQuantity": 123,
      "sendCount": 123,
      "sentAt": "xyz789",
      "sentTo": "abc123",
      "shipToWarehouseId": 4,
      "shippingAddress": "abc123",
      "shippingCity": "xyz789",
      "shippingCost": "xyz789",
      "shippingCountry": "xyz789",
      "shippingMethod": "xyz789",
      "shippingPostalCode": "xyz789",
      "shippingState": "abc123",
      "status": "CANCELLED",
      "subtotal": "abc123",
      "supplierId": "4",
      "taxAmount": "xyz789",
      "totalCost": "abc123",
      "totalQuantityOrdered": 123,
      "totalQuantityReceived": 123,
      "trackingNumber": "xyz789",
      "trackingUrl": "abc123",
      "updatedAt": "xyz789"
    }
  }
}

updatePurchaseOrderItem

Description

Update a purchase order item

Required scope: purchase-orders:update

Response

Returns a PurchaseOrderItem

Arguments
Name Description
id - ID!
input - UpdatePurchaseOrderItemInput!

Example

Query
mutation updatePurchaseOrderItem(
  $id: ID!,
  $input: UpdatePurchaseOrderItemInput!
) {
  updatePurchaseOrderItem(
    id: $id,
    input: $input
  ) {
    InventoryReceiptItems {
      ...InventoryReceiptItemFragment
    }
    Product {
      ...ProductFragment
    }
    PurchasableItem {
      ...PurchasableItemFragment
    }
    PurchaseOrder {
      ...PurchaseOrderFragment
    }
    SourcingListing {
      ...SourcingListingFragment
    }
    createdAt
    id
    itemName
    itemSku
    itemType
    lineTotal
    notes
    productId
    productVariantId
    purchasableItemId
    purchaseOrderId
    quantityOrdered
    quantityOutstanding
    quantityReceived
    sourcingListingId
    supplierSku
    unitCost
    unitCostOverridden
    updatedAt
  }
}
Variables
{"id": 4, "input": UpdatePurchaseOrderItemInput}
Response
{
  "data": {
    "updatePurchaseOrderItem": {
      "InventoryReceiptItems": [InventoryReceiptItem],
      "Product": Product,
      "PurchasableItem": PurchasableItem,
      "PurchaseOrder": PurchaseOrder,
      "SourcingListing": SourcingListing,
      "createdAt": "abc123",
      "id": 4,
      "itemName": "abc123",
      "itemSku": "xyz789",
      "itemType": "xyz789",
      "lineTotal": "xyz789",
      "notes": "xyz789",
      "productId": 4,
      "productVariantId": 4,
      "purchasableItemId": "4",
      "purchaseOrderId": 4,
      "quantityOrdered": 123,
      "quantityOutstanding": 987,
      "quantityReceived": 123,
      "sourcingListingId": 4,
      "supplierSku": "abc123",
      "unitCost": "abc123",
      "unitCostOverridden": false,
      "updatedAt": "xyz789"
    }
  }
}

updateReceiptItem

Description

Update an inventory receipt item

Required scope: inventory:receive

Response

Returns an InventoryReceiptItem

Arguments
Name Description
id - ID!
input - UpdateReceiptItemInput!

Example

Query
mutation updateReceiptItem(
  $id: ID!,
  $input: UpdateReceiptItemInput!
) {
  updateReceiptItem(
    id: $id,
    input: $input
  ) {
    InventoryReceipt {
      ...InventoryReceiptFragment
    }
    Product {
      ...ProductFragment
    }
    PurchasableItem {
      ...PurchasableItemFragment
    }
    PurchaseOrderItem {
      ...PurchaseOrderItemFragment
    }
    WarehouseBin {
      ...WarehouseBinFragment
    }
    batchNumber
    binLocation
    createdAt
    expiryDate
    id
    inventoryReceiptId
    itemName
    itemSku
    itemType
    lineTotal
    lotNumber
    notes
    productId
    purchasableItemId
    purchaseOrderItemId
    quantityAccepted
    quantityDamaged
    quantityExpected
    quantityReceived
    quantityRejected
    unitCost
    updatedAt
    varianceReason
    warehouseBinId
  }
}
Variables
{"id": 4, "input": UpdateReceiptItemInput}
Response
{
  "data": {
    "updateReceiptItem": {
      "InventoryReceipt": InventoryReceipt,
      "Product": Product,
      "PurchasableItem": PurchasableItem,
      "PurchaseOrderItem": PurchaseOrderItem,
      "WarehouseBin": WarehouseBin,
      "batchNumber": "abc123",
      "binLocation": "abc123",
      "createdAt": "abc123",
      "expiryDate": "abc123",
      "id": "4",
      "inventoryReceiptId": "4",
      "itemName": "xyz789",
      "itemSku": "abc123",
      "itemType": "xyz789",
      "lineTotal": "xyz789",
      "lotNumber": "xyz789",
      "notes": "abc123",
      "productId": "xyz789",
      "purchasableItemId": "abc123",
      "purchaseOrderItemId": "xyz789",
      "quantityAccepted": 123,
      "quantityDamaged": 987,
      "quantityExpected": 987,
      "quantityReceived": 123,
      "quantityRejected": 123,
      "unitCost": "xyz789",
      "updatedAt": "abc123",
      "varianceReason": "abc123",
      "warehouseBinId": "abc123"
    }
  }
}

updateSourcingListing

Description

Update a sourcing listing. Omitting priceBreaks leaves the ladder alone; passing it replaces the ladder wholesale.

Required scope: suppliers:update

Response

Returns a SourcingListing

Arguments
Name Description
id - ID!
input - UpdateSourcingListingInput!

Example

Query
mutation updateSourcingListing(
  $id: ID!,
  $input: UpdateSourcingListingInput!
) {
  updateSourcingListing(
    id: $id,
    input: $input
  ) {
    PriceBreaks {
      ...SourcingListingPriceBreakFragment
    }
    Product {
      ...ProductFragment
    }
    ProductVariant {
      ...ProductVariantFragment
    }
    PurchaseOrderItems {
      ...PurchaseOrderItemFragment
    }
    Supplier {
      ...SupplierFragment
    }
    createdAt
    currency
    freeShippingThreshold
    id
    isActive
    isPrimary
    lastOrderedAt
    lastVerifiedAt
    leadTimeDays
    listingUrl
    minimumOrderQuantity
    notes
    organizationId
    packSize
    productId
    productVariantId
    quoteAt {
      ...SourcingQuoteFragment
    }
    shippingFee
    supplierId
    supplierProductName
    supplierSku
    updatedAt
  }
}
Variables
{"id": 4, "input": UpdateSourcingListingInput}
Response
{
  "data": {
    "updateSourcingListing": {
      "PriceBreaks": [SourcingListingPriceBreak],
      "Product": Product,
      "ProductVariant": ProductVariant,
      "PurchaseOrderItems": [PurchaseOrderItem],
      "Supplier": Supplier,
      "createdAt": "abc123",
      "currency": "abc123",
      "freeShippingThreshold": "xyz789",
      "id": 4,
      "isActive": true,
      "isPrimary": false,
      "lastOrderedAt": "abc123",
      "lastVerifiedAt": "xyz789",
      "leadTimeDays": 123,
      "listingUrl": "abc123",
      "minimumOrderQuantity": 987,
      "notes": "xyz789",
      "organizationId": 4,
      "packSize": 123,
      "productId": 4,
      "productVariantId": 4,
      "quoteAt": SourcingQuote,
      "shippingFee": "xyz789",
      "supplierId": "4",
      "supplierProductName": "abc123",
      "supplierSku": "abc123",
      "updatedAt": "xyz789"
    }
  }
}

updateSupplementalFulfillment

Description

Update measurements/reason/carrier on an in-flight supplemental package

Required scope: orders:update

Response

Returns a FulfillmentPackage

Arguments
Name Description
input - UpdateSupplementalFulfillmentInput!

Example

Query
mutation updateSupplementalFulfillment($input: UpdateSupplementalFulfillmentInput!) {
  updateSupplementalFulfillment(input: $input) {
    Images {
      ...FulfillmentImageFragment
    }
    Order {
      ...OrderFragment
    }
    PackageItems {
      ...FulfillmentPackageItemFragment
    }
    actualDeliveryDate
    calculatedWeight
    canRetryFulfillment
    cancelReason
    cancelledAt
    cancelledById
    carrier
    carrierConnectionId
    carrierStatusCode
    carrierStatusDescription
    combinedAt
    combinedById
    combinedWithOrderIds
    confirmationCost
    createdAt
    customerNotified
    customerNotifiedAt
    customsInvoiceFile {
      ...FileFragment
    }
    customsSubmittedElectronically
    declaredWeight
    deliveredAt
    estimatedDeliveryDate
    externalLabelId
    externalShipmentId
    fulfillmentCompletedAt
    fulfillmentError
    fulfillmentErrorStep
    fulfillmentStartedAt
    fulfillmentStatusEnum
    handoffMethod
    handoffNote
    hasLabel
    height
    id
    insuranceCost
    isDelivered
    isManualFulfillment
    isSupplemental
    labelFile {
      ...FileFragment
    }
    labelFileId
    labelFormat
    labelPrintedAt
    labelPurchasedAt
    labelPurchasedById
    labelUrl
    labelVoidedAt
    length
    manualFulfillmentReason
    notifyCustomer
    orderId
    organizationId
    packageNumber
    printFirstPageOnly
    scaleWeight
    serviceCode
    serviceName
    serviceOptions
    shipmentGroupId
    shipmentGroupRole
    shippedAt
    shippingCost
    shopifyFulfillmentId
    shopifyLastSyncAt
    shopifyLastSyncError
    shopifySyncAttempts
    stationeryTareGrams
    stationeryType
    stationeryTypeId
    status
    stepLabelPrintStatus
    stepLabelPurchaseStatus
    stepLocalFulfillmentStatus
    stepStoreSyncStatus
    supplementalReason
    trackingException
    trackingLastUpdatedAt
    trackingNumber
    trackingStatus
    trackingStatusDescription
    trackingUrl
    uncombinedAt
    uncombinedById
    uncombinedReason
    updatedAt
    width
  }
}
Variables
{"input": UpdateSupplementalFulfillmentInput}
Response
{
  "data": {
    "updateSupplementalFulfillment": {
      "Images": [FulfillmentImage],
      "Order": Order,
      "PackageItems": [FulfillmentPackageItem],
      "actualDeliveryDate": "xyz789",
      "calculatedWeight": "xyz789",
      "canRetryFulfillment": false,
      "cancelReason": "xyz789",
      "cancelledAt": "abc123",
      "cancelledById": "4",
      "carrier": "xyz789",
      "carrierConnectionId": "4",
      "carrierStatusCode": "xyz789",
      "carrierStatusDescription": "xyz789",
      "combinedAt": "abc123",
      "combinedById": "4",
      "combinedWithOrderIds": "xyz789",
      "confirmationCost": "abc123",
      "createdAt": "abc123",
      "customerNotified": false,
      "customerNotifiedAt": "xyz789",
      "customsInvoiceFile": File,
      "customsSubmittedElectronically": true,
      "declaredWeight": "xyz789",
      "deliveredAt": "abc123",
      "estimatedDeliveryDate": "abc123",
      "externalLabelId": "abc123",
      "externalShipmentId": "abc123",
      "fulfillmentCompletedAt": "abc123",
      "fulfillmentError": "abc123",
      "fulfillmentErrorStep": "LABEL_PRINT",
      "fulfillmentStartedAt": "abc123",
      "fulfillmentStatusEnum": "COMPLETED",
      "handoffMethod": "CARRIER_TRACKED",
      "handoffNote": "abc123",
      "hasLabel": false,
      "height": "abc123",
      "id": "4",
      "insuranceCost": "xyz789",
      "isDelivered": false,
      "isManualFulfillment": false,
      "isSupplemental": false,
      "labelFile": File,
      "labelFileId": "4",
      "labelFormat": "abc123",
      "labelPrintedAt": "xyz789",
      "labelPurchasedAt": "abc123",
      "labelPurchasedById": 4,
      "labelUrl": "xyz789",
      "labelVoidedAt": "xyz789",
      "length": "abc123",
      "manualFulfillmentReason": "xyz789",
      "notifyCustomer": false,
      "orderId": "4",
      "organizationId": 4,
      "packageNumber": 123,
      "printFirstPageOnly": false,
      "scaleWeight": "abc123",
      "serviceCode": "abc123",
      "serviceName": "xyz789",
      "serviceOptions": "xyz789",
      "shipmentGroupId": "4",
      "shipmentGroupRole": "xyz789",
      "shippedAt": "abc123",
      "shippingCost": "abc123",
      "shopifyFulfillmentId": "abc123",
      "shopifyLastSyncAt": "abc123",
      "shopifyLastSyncError": "abc123",
      "shopifySyncAttempts": 987,
      "stationeryTareGrams": "abc123",
      "stationeryType": "xyz789",
      "stationeryTypeId": 4,
      "status": "CANCELLED",
      "stepLabelPrintStatus": "COMPLETED",
      "stepLabelPurchaseStatus": "COMPLETED",
      "stepLocalFulfillmentStatus": "COMPLETED",
      "stepStoreSyncStatus": "COMPLETED",
      "supplementalReason": "xyz789",
      "trackingException": "abc123",
      "trackingLastUpdatedAt": "xyz789",
      "trackingNumber": "xyz789",
      "trackingStatus": "abc123",
      "trackingStatusDescription": "xyz789",
      "trackingUrl": "xyz789",
      "uncombinedAt": "xyz789",
      "uncombinedById": "4",
      "uncombinedReason": "abc123",
      "updatedAt": "abc123",
      "width": "abc123"
    }
  }
}

updateSupplier

Description

Update an existing supplier

Required scope: suppliers:update

Response

Returns a Supplier

Arguments
Name Description
id - ID!
input - UpdateSupplierInput!

Example

Query
mutation updateSupplier(
  $id: ID!,
  $input: UpdateSupplierInput!
) {
  updateSupplier(
    id: $id,
    input: $input
  ) {
    Organization {
      ...OrganizationFragment
    }
    PurchaseOrders {
      ...PurchaseOrderFragment
    }
    SourcingListings {
      ...SourcingListingFragment
    }
    address
    city
    code
    contactEmail
    contactName
    contactPhone
    country
    countryCode
    createdAt
    currency
    description
    id
    isActive
    leadTimeDays
    metadata
    minimumOrderValue
    name
    notes
    organizationId
    paymentTerms
    postalCode
    productCount
    purchaseOrderCount
    purchasePortalUrl
    rating
    shippingMethod
    state
    updatedAt
    website
  }
}
Variables
{"id": 4, "input": UpdateSupplierInput}
Response
{
  "data": {
    "updateSupplier": {
      "Organization": Organization,
      "PurchaseOrders": [PurchaseOrder],
      "SourcingListings": [SourcingListing],
      "address": "abc123",
      "city": "abc123",
      "code": "abc123",
      "contactEmail": "xyz789",
      "contactName": "abc123",
      "contactPhone": "abc123",
      "country": "abc123",
      "countryCode": "xyz789",
      "createdAt": "abc123",
      "currency": "abc123",
      "description": "abc123",
      "id": "4",
      "isActive": true,
      "leadTimeDays": 123,
      "metadata": "abc123",
      "minimumOrderValue": "xyz789",
      "name": "abc123",
      "notes": "xyz789",
      "organizationId": 4,
      "paymentTerms": "xyz789",
      "postalCode": "abc123",
      "productCount": 987,
      "purchaseOrderCount": 123,
      "purchasePortalUrl": "abc123",
      "rating": 123,
      "shippingMethod": "xyz789",
      "state": "xyz789",
      "updatedAt": "abc123",
      "website": "xyz789"
    }
  }
}

updateWarehouseHierarchyLabels

Description

Update the hierarchy level label aliases (Area/Row/Bay/Shelf/Bin) for a warehouse location

Required scope: warehouse:update

Response

Returns a WarehouseLocation

Arguments
Name Description
input - UpdateWarehouseHierarchyLabelsInput!

Example

Query
mutation updateWarehouseHierarchyLabels($input: UpdateWarehouseHierarchyLabelsInput!) {
  updateWarehouseHierarchyLabels(input: $input) {
    address
    areaLabel
    areas {
      ...WarehouseAreaFragment
    }
    bayLabel
    binLabel
    binNamingPattern
    city
    contactEmail
    contactName
    contactPhone
    country
    countryCode
    createdAt
    defaultBayNumLevels
    description
    id
    isActive
    isPrimary
    labelReturnAddressType
    labelSenderAddressType
    mailingAddress {
      ...AddressFragment
    }
    metadata
    name
    organizationId
    physicalAddress {
      ...AddressFragment
    }
    postalCode
    rowLabel
    shelfLabel
    showOnContactPage
    state
    stationeryStock {
      ...StationeryLocationStockFragment
    }
    storeConnections {
      ...WarehouseStoreConnectionFragment
    }
    updatedAt
  }
}
Variables
{"input": UpdateWarehouseHierarchyLabelsInput}
Response
{
  "data": {
    "updateWarehouseHierarchyLabels": {
      "address": "abc123",
      "areaLabel": "xyz789",
      "areas": [WarehouseArea],
      "bayLabel": "abc123",
      "binLabel": "abc123",
      "binNamingPattern": "abc123",
      "city": "xyz789",
      "contactEmail": "xyz789",
      "contactName": "xyz789",
      "contactPhone": "abc123",
      "country": "abc123",
      "countryCode": "abc123",
      "createdAt": "abc123",
      "defaultBayNumLevels": 123,
      "description": "abc123",
      "id": 4,
      "isActive": false,
      "isPrimary": true,
      "labelReturnAddressType": "MAILING",
      "labelSenderAddressType": "MAILING",
      "mailingAddress": Address,
      "metadata": {},
      "name": "xyz789",
      "organizationId": "4",
      "physicalAddress": Address,
      "postalCode": "abc123",
      "rowLabel": "abc123",
      "shelfLabel": "xyz789",
      "showOnContactPage": false,
      "state": "abc123",
      "stationeryStock": [StationeryLocationStock],
      "storeConnections": [WarehouseStoreConnection],
      "updatedAt": "xyz789"
    }
  }
}

verifyCustomerOrderCode

Description

Submit the emailed verification code. On success this browser receives a cookie that unlocks the order details for 30 days.

Response

Returns a CustomerOrderCodeVerifyResult!

Arguments
Name Description
code - String!
token - String!

Example

Query
mutation verifyCustomerOrderCode(
  $code: String!,
  $token: String!
) {
  verifyCustomerOrderCode(
    code: $code,
    token: $token
  ) {
    attemptsRemaining
    retryAfterSeconds
    status
  }
}
Variables
{
  "code": "abc123",
  "token": "xyz789"
}
Response
{
  "data": {
    "verifyCustomerOrderCode": {
      "attemptsRemaining": 123,
      "retryAfterSeconds": 123,
      "status": "EXPIRED"
    }
  }
}

verifyEmail

Description

Verify email address with token from verification email

Response

Returns a VerificationRequest

Arguments
Name Description
token - String!

Example

Query
mutation verifyEmail($token: String!) {
  verifyEmail(token: $token) {
    canRequestNewLink
    code
    message
    success
  }
}
Variables
{"token": "abc123"}
Response
{
  "data": {
    "verifyEmail": {
      "canRequestNewLink": true,
      "code": "xyz789",
      "message": "xyz789",
      "success": false
    }
  }
}

Types

AddProductImageFromUrlInput

Fields
Input Field Description
altText - String
productId - ID!
sortOrder - Int
url - String! A public https image URL.
Example
{
  "altText": "abc123",
  "productId": "4",
  "sortOrder": 123,
  "url": "xyz789"
}

AddProductImageInput

Fields
Input Field Description
altText - String
fileId - ID!
productId - ID!
shopifyImageId - String
shopifyPosition - Int
sortOrder - Int
Example
{
  "altText": "abc123",
  "fileId": "4",
  "productId": 4,
  "shopifyImageId": "xyz789",
  "shopifyPosition": 123,
  "sortOrder": 123
}

AddPurchaseOrderItemInput

Fields
Input Field Description
notes - String
productVariantId - ID The variant being bought. Preferred over purchasableItemId — the purchasing record is created on demand if the variant has none. Exactly one of the two is required.
purchasableItemId - ID An existing purchasing record (the only way to order STATIONERY). Exactly one of this and productVariantId is required.
purchaseOrderId - ID!
quantityOrdered - Int!
sourcingListingId - ID
unitCost - String!
Example
{
  "notes": "abc123",
  "productVariantId": 4,
  "purchasableItemId": 4,
  "purchaseOrderId": "4",
  "quantityOrdered": 987,
  "sourcingListingId": 4,
  "unitCost": "xyz789"
}

AddReceiptItemInput

Fields
Input Field Description
batchNumber - String
binLocation - String
expiryDate - String
inventoryReceiptId - ID!
lotNumber - String
notes - String
purchasableItemId - ID!
purchaseOrderItemId - ID
quantityDamaged - Int
quantityReceived - Int!
quantityRejected - Int
unitCost - String
varianceReason - String
warehouseBinId - ID
Example
{
  "batchNumber": "abc123",
  "binLocation": "xyz789",
  "expiryDate": "xyz789",
  "inventoryReceiptId": "4",
  "lotNumber": "xyz789",
  "notes": "xyz789",
  "purchasableItemId": 4,
  "purchaseOrderItemId": "4",
  "quantityDamaged": 123,
  "quantityReceived": 123,
  "quantityRejected": 123,
  "unitCost": "xyz789",
  "varianceReason": "abc123",
  "warehouseBinId": 4
}

Address

Description

A reusable address record (physical or mailing)

Fields
Field Name Description
address - String
address2 - String
city - String
contactEmail - String
contactName - String
contactPhone - String
country - String
countryCode - String
createdAt - String
id - ID
label - String
organizationId - ID
postalCode - String
state - String
stateCode - String
updatedAt - String
Example
{
  "address": "xyz789",
  "address2": "abc123",
  "city": "abc123",
  "contactEmail": "abc123",
  "contactName": "abc123",
  "contactPhone": "abc123",
  "country": "xyz789",
  "countryCode": "xyz789",
  "createdAt": "abc123",
  "id": "4",
  "label": "xyz789",
  "organizationId": 4,
  "postalCode": "abc123",
  "state": "xyz789",
  "stateCode": "abc123",
  "updatedAt": "xyz789"
}

AddressInput

Fields
Input Field Description
address1 - String
address2 - String
city - String
company - String
country - String
countryCode - String
firstName - String
lastName - String
phone - String
postalCode - String
province - String
state - String
zip - String
Example
{
  "address1": "xyz789",
  "address2": "abc123",
  "city": "xyz789",
  "company": "xyz789",
  "country": "xyz789",
  "countryCode": "abc123",
  "firstName": "xyz789",
  "lastName": "xyz789",
  "phone": "xyz789",
  "postalCode": "abc123",
  "province": "abc123",
  "state": "abc123",
  "zip": "xyz789"
}

Agent

Description

A desktop agent install that owns the devices curated on it

Fields
Field Name Description
agentUid - String
agentVersion - String
createdAt - String
devices - [Device!]
id - ID
lastSeen - String
name - String
orgId - String
updatedAt - String
Example
{
  "agentUid": "abc123",
  "agentVersion": "abc123",
  "createdAt": "xyz789",
  "devices": [Device],
  "id": "4",
  "lastSeen": "abc123",
  "name": "abc123",
  "orgId": "xyz789",
  "updatedAt": "xyz789"
}

AllocationStatus

Description

Status of order-warehouse allocation for fulfillment

Values
Enum Value Description

ALLOCATED

CANCELLED

PACKED

PICKED

PICKING

SHIPPED

Example
"ALLOCATED"

AsyncJobResponse

Description

Immediate response when an async job is enqueued

Fields
Field Name Description
jobId - ID
message - String
status - AsyncJobStatus
Example
{
  "jobId": "4",
  "message": "abc123",
  "status": "COMPLETED"
}

AsyncJobStatus

Values
Enum Value Description

COMPLETED

COMPLETED_WITH_ERRORS

FAILED

PROCESSING

QUEUED

Example
"COMPLETED"

AuthPayload

Description

Login/signup result with token and user info

Fields
Field Name Description
expiresAt - String
requiresEmailVerification - Boolean True when the account was created but no session was issued: the user must verify their email, then sign in. token, expiresAt and user are null.
requiresMfaSetup - Boolean
requiresPasskeySetup - Boolean True when the organization has passkeyRequired enabled and the user has no passkeys yet — the client should redirect to passkey setup.
token - String
user - User
Example
{
  "expiresAt": "abc123",
  "requiresEmailVerification": true,
  "requiresMfaSetup": false,
  "requiresPasskeySetup": false,
  "token": "xyz789",
  "user": User
}

AuthenticatorSelection

Fields
Field Name Description
authenticatorAttachment - String
requireResidentKey - Boolean
userVerification - String
Example
{
  "authenticatorAttachment": "abc123",
  "requireResidentKey": false,
  "userVerification": "xyz789"
}

Boolean

Description

The Boolean scalar type represents true or false.

Example
true

BundlePricingType

Values
Enum Value Description

CALCULATED

DISCOUNT

DISCOUNT_PER_VARIANT

FIXED

FIXED_PER_VARIANT

MANUAL

Example
"CALCULATED"

ChannelSyncJob

Description

A product push to a channel, as returned by syncProductToChannel.

Fields
Field Name Description
completedAt - String
createdAt - String
error - String
id - ID
status - String QUEUED, PROCESSING, COMPLETED, COMPLETED_WITH_ERRORS or FAILED. There is one job per product and channel: the push connectProductToChannel queues is that job, and syncProductToChannel returns it, joining a push already queued.
Example
{
  "completedAt": "xyz789",
  "createdAt": "abc123",
  "error": "abc123",
  "id": "4",
  "status": "abc123"
}

ClearPreferredBinResult

Fields
Field Name Description
message - String
success - Boolean!
Example
{"message": "abc123", "success": false}

CommentAuthor

Fields
Field Name Description
email - String
firstName - String
id - String
isDeletedUser - Boolean! True when the comment's author has since been deleted (SKU-1241). The comment is kept; id/name/email are what was recorded when it was written, and the name is marked "(deleted user)". firstName/lastName are null.
lastName - String
name - String
profilePicture - String
Example
{
  "email": "xyz789",
  "firstName": "abc123",
  "id": "abc123",
  "isDeletedUser": false,
  "lastName": "xyz789",
  "name": "abc123",
  "profilePicture": "xyz789"
}

ComponentLocation

Description

Location of a kit component in the warehouse

Fields
Field Name Description
areaId - String
areaName - String
bayId - String The bay (rack frame) holding this component
bayName - String The bay (rack frame) holding this component
binId - String
binName - String
locationPath - String Full readable address, e.g. "Zone A > Row 2 > Bay 1 > Level 3 > Bin 3". The same string ProductLocationInventory.locationPath returns for this placement — prefer it over joining the id/name fields, which cannot express a row.
quantityAtLocation - Int
rowId - String The row holding the bay; null when the bay is not in a row
rowName - String The row holding the bay; null when the bay is not in a row
shelfId - String Deprecated alias of bayId — still carries the BAY, not the tier. A shelf is now a tier within a bay (SKU-1494). Use bayId.
shelfName - String Deprecated alias of bayName — still carries the BAY, not the tier. A shelf is now a tier within a bay (SKU-1494). Use bayName.
warehouseLocationId - String
warehouseLocationName - String
Example
{
  "areaId": "abc123",
  "areaName": "xyz789",
  "bayId": "xyz789",
  "bayName": "abc123",
  "binId": "abc123",
  "binName": "abc123",
  "locationPath": "xyz789",
  "quantityAtLocation": 123,
  "rowId": "xyz789",
  "rowName": "abc123",
  "shelfId": "abc123",
  "shelfName": "xyz789",
  "warehouseLocationId": "abc123",
  "warehouseLocationName": "abc123"
}

ConfirmProductImageUploadInput

Fields
Input Field Description
altText - String
productId - ID!
sortOrder - Int Defaults to after the last image.
uploadId - ID! From requestProductImageUpload.
Example
{
  "altText": "abc123",
  "productId": "4",
  "sortOrder": 123,
  "uploadId": 4
}

CreateInventoryReceiptInput

Fields
Input Field Description
items - [InventoryReceiptItemInput!]!
notes - String
purchaseOrderId - ID
receivedDate - String
warehouseLocationId - ID!
Example
{
  "items": [InventoryReceiptItemInput],
  "notes": "xyz789",
  "purchaseOrderId": "4",
  "receivedDate": "abc123",
  "warehouseLocationId": "4"
}

CreateOrderInput

Fields
Input Field Description
billingAddress - AddressInput
cancelReason - String
cancelledAt - String
capturedAmount - String
carrier - String
closedAt - String
confirmed - Boolean
currency - String!
currentShippingCost - String
customerId - ID
customerIp - String
customerNotes - String
deliveredAt - String
discountAmount - String
discountCodes - JSON
email - String
exchangeRate - String
fulfilledAt - String
fulfillmentGroups - [FulfillmentGroupInput!]
fulfillmentStatus - String
importCharges - ImportChargesFactInput
internalNotes - String
lineItems - [LineItemInput!]
metadata - JSON
notifyCustomerOnRefund - Boolean
orderDate - String
orderNumber - String!
organizationId - ID!
paidAt - String
paymentGateway - String
paymentMethod - String
paymentStatus - String
phone - String
presentmentCapturedAmount - String
presentmentCurrency - String
presentmentCurrentShippingCost - String
presentmentDiscountAmount - String
presentmentRefundedAmount - String
presentmentShippingCost - String
presentmentShippingDiscountAmount - String
presentmentSubtotal - String
presentmentTaxAmount - String
presentmentTotalAmount - String
processedAt - String
refundedAmount - String
refunds - JSON
restockOnCancel - Boolean
riskAssessmentDetails - JSON
riskLevel - String
riskRecommendation - String
shippingAddress - AddressInput
shippingCost - String
shippingDiscountAmount - String
shippingLines - JSON
shippingMethod - String
shopifyOrderId - String
shopifyOrderNumber - String
shopifyUpdatedAt - String
source - String
status - String
storeId - String
subtotal - String!
tags - [String!]
taxAmount - String
taxLines - [OrderTaxLineInput!]
taxesIncluded - Boolean
totalAmount - String!
trackingNumber - String
trackingUrl - String
transactions - JSON
Example
{
  "billingAddress": AddressInput,
  "cancelReason": "xyz789",
  "cancelledAt": "abc123",
  "capturedAmount": "xyz789",
  "carrier": "xyz789",
  "closedAt": "abc123",
  "confirmed": false,
  "currency": "xyz789",
  "currentShippingCost": "xyz789",
  "customerId": 4,
  "customerIp": "abc123",
  "customerNotes": "xyz789",
  "deliveredAt": "xyz789",
  "discountAmount": "xyz789",
  "discountCodes": {},
  "email": "abc123",
  "exchangeRate": "abc123",
  "fulfilledAt": "xyz789",
  "fulfillmentGroups": [FulfillmentGroupInput],
  "fulfillmentStatus": "xyz789",
  "importCharges": ImportChargesFactInput,
  "internalNotes": "abc123",
  "lineItems": [LineItemInput],
  "metadata": {},
  "notifyCustomerOnRefund": false,
  "orderDate": "xyz789",
  "orderNumber": "abc123",
  "organizationId": "4",
  "paidAt": "abc123",
  "paymentGateway": "xyz789",
  "paymentMethod": "abc123",
  "paymentStatus": "abc123",
  "phone": "abc123",
  "presentmentCapturedAmount": "abc123",
  "presentmentCurrency": "xyz789",
  "presentmentCurrentShippingCost": "xyz789",
  "presentmentDiscountAmount": "xyz789",
  "presentmentRefundedAmount": "xyz789",
  "presentmentShippingCost": "abc123",
  "presentmentShippingDiscountAmount": "abc123",
  "presentmentSubtotal": "xyz789",
  "presentmentTaxAmount": "xyz789",
  "presentmentTotalAmount": "abc123",
  "processedAt": "abc123",
  "refundedAmount": "xyz789",
  "refunds": {},
  "restockOnCancel": false,
  "riskAssessmentDetails": {},
  "riskLevel": "xyz789",
  "riskRecommendation": "abc123",
  "shippingAddress": AddressInput,
  "shippingCost": "abc123",
  "shippingDiscountAmount": "abc123",
  "shippingLines": {},
  "shippingMethod": "xyz789",
  "shopifyOrderId": "abc123",
  "shopifyOrderNumber": "xyz789",
  "shopifyUpdatedAt": "xyz789",
  "source": "abc123",
  "status": "abc123",
  "storeId": "abc123",
  "subtotal": "xyz789",
  "tags": ["xyz789"],
  "taxAmount": "xyz789",
  "taxLines": [OrderTaxLineInput],
  "taxesIncluded": false,
  "totalAmount": "xyz789",
  "trackingNumber": "abc123",
  "trackingUrl": "xyz789",
  "transactions": {}
}

CreateOrderRefundInput

Fields
Input Field Description
amount - String!
notifyCustomerOnRefund - Boolean
orderId - ID!
organizationId - ID!
reason - String
refundLineItems - [CreateOrderRefundLineItemInput!]
refundShipping - Boolean
restock - Boolean
Example
{
  "amount": "abc123",
  "notifyCustomerOnRefund": false,
  "orderId": "4",
  "organizationId": "4",
  "reason": "xyz789",
  "refundLineItems": [CreateOrderRefundLineItemInput],
  "refundShipping": false,
  "restock": false
}

CreateOrderRefundLineItemInput

Fields
Input Field Description
amount - String
orderLineItemId - ID!
quantity - Int!
Example
{
  "amount": "abc123",
  "orderLineItemId": 4,
  "quantity": 123
}

CreateProductInput

Description

Prices, weight and dimensions are decimal strings, such as "19.95" or "18", so no precision is lost; a JSON number is refused. Weight is in grams and dimensions in millimetres.

Fields
Input Field Description
allowBackorder - Boolean
barcode - String
basePrice - String
brand - String
bundleItems - [ProductBundleItemInput!]
bundlePricing - String
category - String
compareAtPrice - String
costPrice - String
countryOfOrigin - String
customsDescription - String
description - String
dimensionUnit - String
handle - String
hasOnlyDefaultVariant - Boolean
height - String
hsCode - String
isGiftCard - Boolean
length - String
lowStockThreshold - Int
metaDescription - String
metaTitle - String
option1Name - String
option1Values - [String!]
option2Name - String
option2Values - [String!]
option3Name - String
option3Values - [String!]
organizationId - ID!
primaryImageId - ID
productType - String
provinceOfOrigin - String
publishedAt - String
quantity - Int
requiresShipping - Boolean
reservedQuantity - Int
shopifyUpdatedAt - String
sku - String
slug - String
status - String
supplierId - ID
tags - [String!]
taxCode - String
taxable - Boolean
title - String!
trackInventory - Boolean
type - String
weight - String
weightUnit - String
width - String
Example
{
  "allowBackorder": true,
  "barcode": "abc123",
  "basePrice": "abc123",
  "brand": "abc123",
  "bundleItems": [ProductBundleItemInput],
  "bundlePricing": "xyz789",
  "category": "abc123",
  "compareAtPrice": "abc123",
  "costPrice": "xyz789",
  "countryOfOrigin": "abc123",
  "customsDescription": "abc123",
  "description": "xyz789",
  "dimensionUnit": "xyz789",
  "handle": "xyz789",
  "hasOnlyDefaultVariant": false,
  "height": "xyz789",
  "hsCode": "abc123",
  "isGiftCard": false,
  "length": "xyz789",
  "lowStockThreshold": 987,
  "metaDescription": "abc123",
  "metaTitle": "abc123",
  "option1Name": "xyz789",
  "option1Values": ["abc123"],
  "option2Name": "abc123",
  "option2Values": ["abc123"],
  "option3Name": "xyz789",
  "option3Values": ["xyz789"],
  "organizationId": "4",
  "primaryImageId": "4",
  "productType": "abc123",
  "provinceOfOrigin": "abc123",
  "publishedAt": "abc123",
  "quantity": 123,
  "requiresShipping": true,
  "reservedQuantity": 123,
  "shopifyUpdatedAt": "abc123",
  "sku": "xyz789",
  "slug": "xyz789",
  "status": "abc123",
  "supplierId": "4",
  "tags": ["xyz789"],
  "taxCode": "abc123",
  "taxable": false,
  "title": "xyz789",
  "trackInventory": true,
  "type": "xyz789",
  "weight": "xyz789",
  "weightUnit": "abc123",
  "width": "abc123"
}

CreateProductVariantInput

Fields
Input Field Description
allowBackorder - Boolean
barcode - String
basePrice - String
compareAtPrice - String
costPrice - String
countryOfOrigin - String
customsDescription - String
dimensionUnit - String
height - String
hsCode - String
length - String
lowStockThreshold - Int
option1Value - String
option2Value - String
option3Value - String
organizationId - ID!
position - Int
primaryImageId - String
productId - ID!
provinceOfOrigin - String
quantity - Int
requiresShipping - Boolean
sku - String
taxCode - String
taxable - Boolean
title - String!
trackInventory - Boolean
weight - String
weightUnit - String
width - String
Example
{
  "allowBackorder": false,
  "barcode": "abc123",
  "basePrice": "xyz789",
  "compareAtPrice": "xyz789",
  "costPrice": "abc123",
  "countryOfOrigin": "abc123",
  "customsDescription": "xyz789",
  "dimensionUnit": "xyz789",
  "height": "xyz789",
  "hsCode": "xyz789",
  "length": "xyz789",
  "lowStockThreshold": 123,
  "option1Value": "abc123",
  "option2Value": "xyz789",
  "option3Value": "xyz789",
  "organizationId": "4",
  "position": 123,
  "primaryImageId": "xyz789",
  "productId": "4",
  "provinceOfOrigin": "xyz789",
  "quantity": 987,
  "requiresShipping": false,
  "sku": "xyz789",
  "taxCode": "xyz789",
  "taxable": true,
  "title": "abc123",
  "trackInventory": true,
  "weight": "abc123",
  "weightUnit": "abc123",
  "width": "xyz789"
}

CreatePurchaseOrderInput

Fields
Input Field Description
currency - String ISO 4217 code. Omit to use the supplier's own currency; any value sent must be a currency code.
exchangeRate - String
expectedDeliveryDate - String
internalNotes - String
items - [PurchaseOrderItemInput!]!
notes - String
otherCosts - String Duties, fees and other order-level costs, in its currency. Same rules as taxAmount; part of totalCost.
paymentTerms - String This order's payment terms, free text (e.g. "Net 30"). Blank or omitted is stored as null — never copied from the supplier.
shipToWarehouseId - ID
shippingAddress - String
shippingCity - String
shippingCost - String Shipping charged on the order, in its currency. Same rules as taxAmount; part of totalCost.
shippingCountry - String
shippingMethod - String This order's shipping method, free text (e.g. "Sea freight"). Blank or omitted is stored as null — never copied from the supplier.
shippingPostalCode - String
shippingState - String
supplierId - ID!
taxAmount - String Tax on the order, in its currency: a plain non-negative decimal, rounded to 2 places. Part of totalCost. Omitted = 0, the column default; a value that does not parse (including "") is refused.
Example
{
  "currency": "xyz789",
  "exchangeRate": "abc123",
  "expectedDeliveryDate": "xyz789",
  "internalNotes": "abc123",
  "items": [PurchaseOrderItemInput],
  "notes": "xyz789",
  "otherCosts": "xyz789",
  "paymentTerms": "xyz789",
  "shipToWarehouseId": "4",
  "shippingAddress": "abc123",
  "shippingCity": "abc123",
  "shippingCost": "abc123",
  "shippingCountry": "abc123",
  "shippingMethod": "abc123",
  "shippingPostalCode": "xyz789",
  "shippingState": "abc123",
  "supplierId": "4",
  "taxAmount": "xyz789"
}

CreateSourcingListingInput

Fields
Input Field Description
currency - String REQUIRED: the ISO 4217 code this listing is priced in (e.g. AUD). Nullable only for schema compatibility — a create without it is refused; nothing is defaulted.
freeShippingThreshold - String
isPrimary - Boolean
leadTimeDays - Int
listingUrl - String
minimumOrderQuantity - Int
packSize - Int
priceBreaks - [SourcingPriceBreakInput!]
productId - ID!
productVariantId - ID
shippingFee - String
supplierId - ID
supplierProductName - String
supplierSku - String
Example
{
  "currency": "abc123",
  "freeShippingThreshold": "xyz789",
  "isPrimary": true,
  "leadTimeDays": 987,
  "listingUrl": "abc123",
  "minimumOrderQuantity": 123,
  "packSize": 123,
  "priceBreaks": [SourcingPriceBreakInput],
  "productId": 4,
  "productVariantId": "4",
  "shippingFee": "xyz789",
  "supplierId": 4,
  "supplierProductName": "abc123",
  "supplierSku": "abc123"
}

CreateSupplementalFulfillmentInput

Fields
Input Field Description
carrier - String Carrier connection ID
declaredWeight - Float Package weight in KG
height - Float Package height in cm
items - [SupplementalItemInput!]!
length - Float Package length in cm
orderId - ID!
reason - String!
scaleWeight - Float Scale-measured weight in KG
serviceCode - String Carrier service code
serviceName - String Carrier service display name
stationeryType - String Stationery/packaging type name
stationeryTypeId - ID Stationery record ID
width - Float Package width in cm
Example
{
  "carrier": "abc123",
  "declaredWeight": 987.65,
  "height": 123.45,
  "items": [SupplementalItemInput],
  "length": 123.45,
  "orderId": 4,
  "reason": "xyz789",
  "scaleWeight": 987.65,
  "serviceCode": "xyz789",
  "serviceName": "xyz789",
  "stationeryType": "xyz789",
  "stationeryTypeId": "4",
  "width": 987.65
}

CreateSupplierInput

Fields
Input Field Description
address - String
city - String
code - String
contactEmail - String
contactName - String
contactPhone - String
country - String
countryCode - String
currency - String REQUIRED: the ISO 4217 code you buy from this supplier in (e.g. AUD). Nullable only for schema compatibility — a create without it is refused; nothing is defaulted.
description - String
isActive - Boolean
leadTimeDays - Int
minimumOrderValue - String
name - String!
notes - String
paymentTerms - String
postalCode - String
purchasePortalUrl - String
rating - Int
shippingMethod - String
state - String
website - String
Example
{
  "address": "abc123",
  "city": "abc123",
  "code": "abc123",
  "contactEmail": "xyz789",
  "contactName": "xyz789",
  "contactPhone": "abc123",
  "country": "xyz789",
  "countryCode": "abc123",
  "currency": "xyz789",
  "description": "abc123",
  "isActive": true,
  "leadTimeDays": 987,
  "minimumOrderValue": "abc123",
  "name": "abc123",
  "notes": "abc123",
  "paymentTerms": "abc123",
  "postalCode": "xyz789",
  "purchasePortalUrl": "xyz789",
  "rating": 987,
  "shippingMethod": "xyz789",
  "state": "xyz789",
  "website": "xyz789"
}

CurrentApiKey

Description

The API key making this request.

Fields
Field Name Description
organizationId - ID Your organization ID, for the operations that ask for one.
rateLimitPerMin - Int
scopes - [String!]
Example
{
  "organizationId": 4,
  "rateLimitPerMin": 123,
  "scopes": ["xyz789"]
}

Customer

Description

A customer with contact information and order history

Fields
Field Name Description
Orders - [Order!]
activities - [CustomerActivity!] Chronological timeline of customer activities
Arguments
limit - Int
addresses - [CustomerAddress!] All addresses associated with this customer (Shopify-aligned N-address model)
averageOrderValue - String
comments - [CustomerComment!] Comments on this customer
Arguments
limit - Int
company - String
contactPersonEmail - String
contactPersonName - String
contactPersonPhone - String
contactPersonTitle - String
createdAt - String
customerSinceDays - Int Number of days since customer was created
customerType - String
displayName - String Display name for the customer. BUSINESS: company, falling back to name (legacy column) or "Customer" if company is empty/whitespace. INDIVIDUAL: firstName + lastName, falling back to name (legacy column) or "Customer" if those are empty. Never falls back to the email address (SKU-1524).
email - String
emailMarketingConsentUpdatedAt - String
emailMarketingOptInLevel - String
emailMarketingState - String
firstName - String
firstOrderDate - String Date of the customer's first order
hasCompleteDefaultAddress - Boolean Whether the customer has a default address with all fields required for shipping (address1, city, province, zip, country)
id - ID!
isActive - Boolean
lastName - String
lastOrderDate - String Date of the customer's most recent order
lastSyncedAt - String
locale - String
metadata - JSON
name - String
notes - String
orderCount - Int Number of orders for this customer (computed from Orders relation)
orderStats - CustomerOrderStats Computed order statistics aggregated from actual orders
organization - Organization
phone - String
recentOrders - [Order!] Recent orders for this customer
Arguments
limit - Int
shopifyCustomerId - String
shopifyTags - [String!]
smsMarketingConsentUpdatedAt - String
smsMarketingOptInLevel - String
smsMarketingState - String
state - CustomerState
syncError - String
syncStatus - SyncStatus
tags - [String!]
taxExempt - Boolean
totalSpent - String
totalSpentCurrency - String
updatedAt - String
verifiedEmail - Boolean
Example
{
  "Orders": [Order],
  "activities": [CustomerActivity],
  "addresses": [CustomerAddress],
  "averageOrderValue": "xyz789",
  "comments": [CustomerComment],
  "company": "xyz789",
  "contactPersonEmail": "xyz789",
  "contactPersonName": "xyz789",
  "contactPersonPhone": "xyz789",
  "contactPersonTitle": "abc123",
  "createdAt": "xyz789",
  "customerSinceDays": 123,
  "customerType": "abc123",
  "displayName": "xyz789",
  "email": "abc123",
  "emailMarketingConsentUpdatedAt": "xyz789",
  "emailMarketingOptInLevel": "abc123",
  "emailMarketingState": "xyz789",
  "firstName": "abc123",
  "firstOrderDate": "xyz789",
  "hasCompleteDefaultAddress": true,
  "id": 4,
  "isActive": true,
  "lastName": "abc123",
  "lastOrderDate": "xyz789",
  "lastSyncedAt": "abc123",
  "locale": "xyz789",
  "metadata": {},
  "name": "abc123",
  "notes": "abc123",
  "orderCount": 123,
  "orderStats": CustomerOrderStats,
  "organization": Organization,
  "phone": "abc123",
  "recentOrders": [Order],
  "shopifyCustomerId": "abc123",
  "shopifyTags": ["abc123"],
  "smsMarketingConsentUpdatedAt": "abc123",
  "smsMarketingOptInLevel": "xyz789",
  "smsMarketingState": "xyz789",
  "state": "DECLINED",
  "syncError": "abc123",
  "syncStatus": "ERROR",
  "tags": ["xyz789"],
  "taxExempt": true,
  "totalSpent": "abc123",
  "totalSpentCurrency": "xyz789",
  "updatedAt": "xyz789",
  "verifiedEmail": false
}

CustomerActivity

Description

A single activity in the customer timeline

Fields
Field Name Description
description - String
icon - String Icon name suggestion for the UI (e.g., LuPackage, LuMessageSquare)
id - String
metadata - JSON
timestamp - String
title - String
type - CustomerActivityType
Example
{
  "description": "xyz789",
  "icon": "xyz789",
  "id": "abc123",
  "metadata": {},
  "timestamp": "xyz789",
  "title": "xyz789",
  "type": "COMMENT_ADDED"
}

CustomerActivityType

Values
Enum Value Description

COMMENT_ADDED

CUSTOMER_CREATED

ORDER_CANCELLED

ORDER_DELIVERED

ORDER_FULFILLED

ORDER_PAID

ORDER_PLACED

Example
"COMMENT_ADDED"

CustomerAddress

Description

A mailing address on a customer. Mirrors Shopify's MailingAddress under Customer.addressesV2. Each customer can have N addresses with at most one marked isDefault.

Fields
Field Name Description
Customer - Customer
address1 - String
address2 - String
city - String
company - String
country - String
countryCodeV2 - String
createdAt - String
customerId - String
firstName - String
id - ID
isDefault - Boolean
lastName - String
lastSyncedAt - String
phone - String
province - String
provinceCode - String
shopifyAddressId - String
shopifyUpdatedAt - String
updatedAt - String
zip - String
Example
{
  "Customer": Customer,
  "address1": "xyz789",
  "address2": "xyz789",
  "city": "abc123",
  "company": "xyz789",
  "country": "xyz789",
  "countryCodeV2": "abc123",
  "createdAt": "xyz789",
  "customerId": "xyz789",
  "firstName": "xyz789",
  "id": 4,
  "isDefault": false,
  "lastName": "abc123",
  "lastSyncedAt": "abc123",
  "phone": "xyz789",
  "province": "xyz789",
  "provinceCode": "abc123",
  "shopifyAddressId": "abc123",
  "shopifyUpdatedAt": "xyz789",
  "updatedAt": "xyz789",
  "zip": "abc123"
}

CustomerComment

Description

Internal comment on a customer

Fields
Field Name Description
Author - User
Customer - Customer
authorEmailSnapshot - String Email of the user who wrote the comment, recorded when it was written.
authorId - String
authorIdSnapshot - String Id of the user who wrote the comment, recorded when it was written. Still set after that user is deleted (authorId and Author are then null).
authorNameSnapshot - String Display name of the user who wrote the comment, recorded when it was written. Show it, marked as a deleted user, when Author is null.
content - String
createdAt - String
customerId - String
id - ID
isInternal - Boolean
isPinned - Boolean
organizationId - String
updatedAt - String
Example
{
  "Author": User,
  "Customer": Customer,
  "authorEmailSnapshot": "abc123",
  "authorId": "xyz789",
  "authorIdSnapshot": "xyz789",
  "authorNameSnapshot": "xyz789",
  "content": "abc123",
  "createdAt": "abc123",
  "customerId": "xyz789",
  "id": 4,
  "isInternal": true,
  "isPinned": true,
  "organizationId": "abc123",
  "updatedAt": "xyz789"
}

CustomerOrderAddress

Description

A postal address on the order.

Fields
Field Name Description
city - String
company - String
country - String
line1 - String
line2 - String
name - String
postalCode - String
state - String
Example
{
  "city": "abc123",
  "company": "xyz789",
  "country": "xyz789",
  "line1": "abc123",
  "line2": "xyz789",
  "name": "xyz789",
  "postalCode": "xyz789",
  "state": "xyz789"
}

CustomerOrderCodeRequestResult

Description

Result of requesting a verification code for an order.

Fields
Field Name Description
maskedEmail - String Where the code was sent, with most of the local part hidden.
retryAfterSeconds - Int When rate limited, how long until another request may succeed.
status - CustomerOrderCodeRequestStatus!
Example
{
  "maskedEmail": "xyz789",
  "retryAfterSeconds": 123,
  "status": "INVALID_LINK"
}

CustomerOrderCodeRequestStatus

Description

Outcome of requesting a verification code.

Values
Enum Value Description

INVALID_LINK

NO_EMAIL

RATE_LIMITED

SEND_FAILED

SENT

UNAVAILABLE

Example
"INVALID_LINK"

CustomerOrderCodeVerifyResult

Description

Result of submitting a verification code for an order.

Fields
Field Name Description
attemptsRemaining - Int
retryAfterSeconds - Int When rate limited, how long until another attempt may succeed.
status - CustomerOrderCodeVerifyStatus!
Example
{"attemptsRemaining": 987, "retryAfterSeconds": 123, "status": "EXPIRED"}

CustomerOrderCodeVerifyStatus

Description

Outcome of submitting a verification code.

Values
Enum Value Description

EXPIRED

INVALID_LINK

RATE_LIMITED

TOO_MANY_ATTEMPTS

UNAVAILABLE

VERIFIED

WRONG_CODE

Example
"EXPIRED"

CustomerOrderDetails

Description

The verified-only section: personal details, addresses, prices and photos. Only present once this browser has verified the order email.

Fields
Field Name Description
billingAddress - CustomerOrderAddress!
customerName - String
invoice - CustomerOrderInvoiceStatus!
packagePhotos - [CustomerOrderPackagePhotos!]!
prices - CustomerOrderPrices!
shippingAddress - CustomerOrderAddress!
Example
{
  "billingAddress": CustomerOrderAddress,
  "customerName": "xyz789",
  "invoice": CustomerOrderInvoiceStatus,
  "packagePhotos": [CustomerOrderPackagePhotos],
  "prices": CustomerOrderPrices,
  "shippingAddress": CustomerOrderAddress
}

CustomerOrderInvoicePdf

Description

The tax invoice PDF, base64-encoded.

Fields
Field Name Description
base64 - String!
filename - String!
Example
{
  "base64": "abc123",
  "filename": "xyz789"
}

CustomerOrderInvoiceStatus

Description

Whether a tax invoice can be downloaded for this order.

Fields
Field Name Description
available - Boolean!
unavailableDetail - String Staff preview only: what to do about it, e.g. "Save your tax details in Organization settings." Always null on the public page, and null when an invoice is available.
unavailableReason - String Staff preview only: why no invoice is available (order_cancelled, tax_id_not_set, tax_details_not_captured, presentment_amount_missing, does_not_reconcile). Always null on the public page, and null when an invoice is available.
Example
{
  "available": true,
  "unavailableDetail": "abc123",
  "unavailableReason": "xyz789"
}

CustomerOrderItem

Description

One product line and its quantity.

Fields
Field Name Description
description - String!
quantity - Int!
sku - String!
Example
{
  "description": "xyz789",
  "quantity": 987,
  "sku": "abc123"
}

CustomerOrderOrganization

Description

The merchant the order was placed with.

Fields
Field Name Description
logoUrl - String
name - String!
supportEmail - String
Example
{
  "logoUrl": "abc123",
  "name": "xyz789",
  "supportEmail": "abc123"
}

CustomerOrderPackage

Description

One package of the order, with tracking and its contents.

Fields
Field Name Description
carrier - String
contents - [CustomerOrderItem!]!
deliveredAt - String ISO 8601.
estimatedDeliveryDate - String ISO 8601.
packageNumber - Int!
shippedAt - String ISO 8601.
status - CustomerOrderPackageStatus!
trackingNumber - String
trackingUrl - String
Example
{
  "carrier": "abc123",
  "contents": [CustomerOrderItem],
  "deliveredAt": "xyz789",
  "estimatedDeliveryDate": "xyz789",
  "packageNumber": 123,
  "shippedAt": "abc123",
  "status": "DELIVERED",
  "trackingNumber": "xyz789",
  "trackingUrl": "xyz789"
}

CustomerOrderPackagePhotos

Description

Packing photos for one package. Packages without photos are omitted.

Fields
Field Name Description
packageNumber - Int!
photos - [CustomerOrderPhoto!]!
Example
{"packageNumber": 123, "photos": [CustomerOrderPhoto]}

CustomerOrderPackageStatus

Description

The status of one package, as shown to the customer.

Values
Enum Value Description

DELIVERED

IN_TRANSIT

PREPARING

RETURNED

SHIPPED

Example
"DELIVERED"

CustomerOrderPhoto

Description

A packing photo.

Fields
Field Name Description
thumbnailUrl - String
url - String!
Example
{
  "thumbnailUrl": "abc123",
  "url": "xyz789"
}

CustomerOrderPriceLine

Description

One priced product line. Amounts are decimal strings in the order currency.

Fields
Field Name Description
description - String!
lineTotal - String!
quantity - Int!
sku - String!
unitPrice - String!
Example
{
  "description": "abc123",
  "lineTotal": "xyz789",
  "quantity": 987,
  "sku": "xyz789",
  "unitPrice": "abc123"
}

CustomerOrderPrices

Description

Order pricing. Amounts are decimal strings in the order currency.

Fields
Field Name Description
currency - String!
discount - String!
lines - [CustomerOrderPriceLine!]!
refunded - String Amount refunded, when anything was.
shipping - String!
subtotal - String!
tax - String!
taxesIncluded - Boolean
total - String!
Example
{
  "currency": "abc123",
  "discount": "abc123",
  "lines": [CustomerOrderPriceLine],
  "refunded": "xyz789",
  "shipping": "xyz789",
  "subtotal": "xyz789",
  "tax": "abc123",
  "taxesIncluded": false,
  "total": "xyz789"
}

CustomerOrderStats

Description

Computed order statistics for a customer

Fields
Field Name Description
averageOrderValue - String Average order value, in currency (as string for precision)
currency - String ISO 4217 code every money figure here is in: the organisation's currency (other order currencies converted at the order's date), else the orders' one shared currency. Null when the orders are in several currencies and the organisation has none set.
grossProfit - String Item sales after discounts and refunds, excluding shipping and tax, minus the cost of goods for those items. Lines with no recorded cost are left out.
grossProfitIsPartial - Boolean grossProfit is not exact, for a reason in grossProfitReasons. See grossProfitPrecision for how to read it.
grossProfitPrecision - GrossProfitPrecision How far grossProfit can be relied on.
grossProfitReasons - [GrossProfitReason!] Why grossProfit is not exact. Empty when it is.
itemsWithoutCost - Int Number of line items without cost data (cannot calculate profit)
orderCount - Int Total number of orders
ordersCancelled - Int Number of cancelled orders
totalCost - String Total cost of goods sold for items with cost data
totalSpent - String Total amount spent, in currency (as string for precision). Null when there is no single currency to report in.
unconvertedTotals - [CustomerSpendInCurrency!]! Orders left out of the money figures (no exchange rate, or no single currency), per currency.
Example
{
  "averageOrderValue": "xyz789",
  "currency": "abc123",
  "grossProfit": "xyz789",
  "grossProfitIsPartial": true,
  "grossProfitPrecision": "APPROXIMATE",
  "grossProfitReasons": ["INCOMPLETE_COST"],
  "itemsWithoutCost": 987,
  "orderCount": 987,
  "ordersCancelled": 987,
  "totalCost": "abc123",
  "totalSpent": "xyz789",
  "unconvertedTotals": [CustomerSpendInCurrency]
}

CustomerOrderStatus

Description

The order status shown to the customer.

Values
Enum Value Description

CANCELLED

DELIVERED

ON_HOLD

PARTIALLY_SHIPPED

PROCESSING

REFUNDED

SHIPPED

Example
"CANCELLED"

CustomerOrderVerification

Description

Verification state of this browser for the order.

Fields
Field Name Description
maskedEmail - String The order email with most of the local part hidden.
state - CustomerOrderVerificationState!
Example
{
  "maskedEmail": "abc123",
  "state": "NO_EMAIL"
}

CustomerOrderVerificationState

Description

Whether this browser has verified the order email. NO_EMAIL means the order has no email that a code could be sent to.

Values
Enum Value Description

NO_EMAIL

UNVERIFIED

VERIFIED

Example
"NO_EMAIL"

CustomerOrderView

Description

What a customer sees for their order link. The details field is null until this browser verifies the order email.

Fields
Field Name Description
details - CustomerOrderDetails
items - [CustomerOrderItem!]!
orderDate - String! ISO 8601.
orderNumber - String!
organization - CustomerOrderOrganization!
packages - [CustomerOrderPackage!]!
status - CustomerOrderStatus!
unshippedItems - [CustomerOrderItem!]!
verification - CustomerOrderVerification!
Example
{
  "details": CustomerOrderDetails,
  "items": [CustomerOrderItem],
  "orderDate": "xyz789",
  "orderNumber": "xyz789",
  "organization": CustomerOrderOrganization,
  "packages": [CustomerOrderPackage],
  "status": "CANCELLED",
  "unshippedItems": [CustomerOrderItem],
  "verification": CustomerOrderVerification
}

CustomerSpendInCurrency

Description

Orders left out of a customer's money totals, with their total in their own currency: no exchange rate to the reporting currency, or no single currency to report in.

Fields
Field Name Description
currency - String!
orderCount - Int!
total - String! Sum of these orders in currency (decimal string, 2dp).
Example
{
  "currency": "xyz789",
  "orderCount": 123,
  "total": "abc123"
}

CustomerState

Description

Shopify customer account state. Mirrors Customer.state from the Shopify Admin API.

Values
Enum Value Description

DECLINED

DISABLED

ENABLED

INVITED

Example
"DECLINED"

DateRangeInput

Fields
Input Field Description
endDate - String
startDate - String
Example
{
  "endDate": "xyz789",
  "startDate": "abc123"
}

DateTime

Example
"2007-12-03T10:15:30Z"

Device

Description

A printer, scale, or scanner registered by the in-house desktop agent

Fields
Field Name Description
agent - Agent
agentDeviceId - String
apiKeyId - String
capabilities - JSON
config - JSON Device configuration pushed by the agent (DPI, paper size, resolution, units, etc.)
createdAt - String
id - ID
lastSeen - String
lastWeightAt - String ISO-8601 timestamp of the most recent weight reading.
lastWeightStatus - WeightStatus Status reported with the most recent weight reading.
mediaProfile - MediaProfile Typed media profile parsed from config.mediaProfile (null until configured)
name - String
orgId - String
printJobs - [PrintJob!]
status - DeviceStatus
type - DeviceType
updatedAt - String
weightGrams - Float Most recent weight reading in grams. Null until the first valid reading is received.
Example
{
  "agent": Agent,
  "agentDeviceId": "xyz789",
  "apiKeyId": "abc123",
  "capabilities": {},
  "config": {},
  "createdAt": "abc123",
  "id": 4,
  "lastSeen": "xyz789",
  "lastWeightAt": "xyz789",
  "lastWeightStatus": "ERROR",
  "mediaProfile": MediaProfile,
  "name": "abc123",
  "orgId": "xyz789",
  "printJobs": [PrintJob],
  "status": "OFFLINE",
  "type": "PRINTER",
  "updatedAt": "xyz789",
  "weightGrams": 123.45
}

DeviceStatus

Description

Live connectivity status of a registered device

Values
Enum Value Description

OFFLINE

The owning agent's WebSocket is disconnected, or the device was explicitly marked offline

ONLINE

The owning agent's WebSocket is connected and the device is registered
Example
"OFFLINE"

DeviceType

Description

Hardware device type managed by the in-house print agent

Values
Enum Value Description

PRINTER

Label or document printer

SCALE

Weighing scale

SCANNER

Barcode or document scanner
Example
"PRINTER"

DimensionUnit

Values
Enum Value Description

CM

INCHES

METERS

MM

Example
"CM"

File

Description

A file stored in platform storage. Use storageUrl for public files and signedUrl for time-limited access to private files.

Fields
Field Name Description
accessLevel - String Access level: PUBLIC (accessible via storageUrl) or PRIVATE (requires signedUrl).
createdAt - String
domain - String Logical domain the file belongs to (e.g. product, fulfillment).
fileSize - Int File size in bytes.
filename - String! Original filename as stored.
id - ID!
mimeType - String! MIME type of the file (e.g. image/jpeg).
organizationId - ID
originalName - String Filename as provided at upload time.
signedUrl - String Time-limited signed URL for private files. Null for public files. URLs expire — do not cache.
storagePath - String
storageUrl - String Permanent public URL. Only valid when accessLevel is PUBLIC.
updatedAt - String
Example
{
  "accessLevel": "abc123",
  "createdAt": "xyz789",
  "domain": "abc123",
  "fileSize": 987,
  "filename": "xyz789",
  "id": "4",
  "mimeType": "abc123",
  "organizationId": "4",
  "originalName": "xyz789",
  "signedUrl": "xyz789",
  "storagePath": "xyz789",
  "storageUrl": "abc123",
  "updatedAt": "abc123"
}

Float

Description

The Float scalar type represents signed double-precision fractional values as specified by IEEE 754.

Example
123.45

FulfillmentBlockReason

Description

Why an order line item cannot currently be fulfilled. Null when it can. SKU-1310.

Values
Enum Value Description

LINKED_BUT_FULFILMENT_DISABLED

MISSING_FULFILLMENT_GROUP

UNLINKED_CHANNEL_LOCATION

UNRESOLVABLE_CHANNEL_LOCATION

Example
"LINKED_BUT_FULFILMENT_DISABLED"

FulfillmentGroupInput

Fields
Input Field Description
externalGroupId - String!
externalLocationId - String
externalLocationName - String
externalStatus - String
Example
{
  "externalGroupId": "abc123",
  "externalLocationId": "xyz789",
  "externalLocationName": "abc123",
  "externalStatus": "abc123"
}

FulfillmentImage

Description

An image captured during fulfillment (per-package or per-item)

Fields
Field Name Description
File - File!
Package - FulfillmentPackage!
PackageItem - FulfillmentPackageItem
capturedBy - String
createdAt - String!
fileId - ID!
id - ID!
note - String
packageId - ID!
packageItemId - ID
Example
{
  "File": File,
  "Package": FulfillmentPackage,
  "PackageItem": FulfillmentPackageItem,
  "capturedBy": "xyz789",
  "createdAt": "abc123",
  "fileId": "4",
  "id": 4,
  "note": "abc123",
  "packageId": "4",
  "packageItemId": 4
}

FulfillmentPackage

Description

A package/parcel in a shipment

Fields
Field Name Description
Images - [FulfillmentImage!]!
Order - Order!
PackageItems - [FulfillmentPackageItem!]!
actualDeliveryDate - String
calculatedWeight - String
canRetryFulfillment - Boolean!
cancelReason - String Operator-supplied reason for cancelling. Null when none was given — this is NOT an error field.
cancelledAt - String
cancelledById - ID
carrier - String
carrierConnectionId - ID
carrierStatusCode - String
carrierStatusDescription - String
combinedAt - String
combinedById - ID
combinedWithOrderIds - String
confirmationCost - String
createdAt - String!
customerNotified - Boolean!
customerNotifiedAt - String
customsInvoiceFile - File
customsSubmittedElectronically - Boolean
declaredWeight - String
deliveredAt - String
estimatedDeliveryDate - String
externalLabelId - String
externalShipmentId - String
fulfillmentCompletedAt - String
fulfillmentError - String
fulfillmentErrorStep - FulfillmentStep
fulfillmentStartedAt - String
fulfillmentStatusEnum - PackageFulfillmentStatus!
handoffMethod - HandoffMethod
handoffNote - String
hasLabel - Boolean!
height - String
id - ID!
insuranceCost - String
isDelivered - Boolean!
isManualFulfillment - Boolean!
isSupplemental - Boolean!
labelFile - File
labelFileId - ID
labelFormat - String
labelPrintedAt - String
labelPurchasedAt - String
labelPurchasedById - ID
labelUrl - String
labelVoidedAt - String
length - String
manualFulfillmentReason - String
notifyCustomer - Boolean!
orderId - ID!
organizationId - ID!
packageNumber - Int!
printFirstPageOnly - Boolean
scaleWeight - String
serviceCode - String
serviceName - String
serviceOptions - String
shipmentGroupId - ID
shipmentGroupRole - String
shippedAt - String
shippingCost - String
shopifyFulfillmentId - String
shopifyLastSyncAt - String
shopifyLastSyncError - String
shopifySyncAttempts - Int!
stationeryTareGrams - String
stationeryType - String
stationeryTypeId - ID
status - PackageStatus!
stepLabelPrintStatus - StepStatus!
stepLabelPurchaseStatus - StepStatus!
stepLocalFulfillmentStatus - StepStatus!
stepStoreSyncStatus - StepStatus!
supplementalReason - String
trackingException - String
trackingLastUpdatedAt - String
trackingNumber - String
trackingStatus - String
trackingStatusDescription - String
trackingUrl - String
uncombinedAt - String
uncombinedById - ID
uncombinedReason - String
updatedAt - String!
width - String
Example
{
  "Images": [FulfillmentImage],
  "Order": Order,
  "PackageItems": [FulfillmentPackageItem],
  "actualDeliveryDate": "xyz789",
  "calculatedWeight": "abc123",
  "canRetryFulfillment": true,
  "cancelReason": "abc123",
  "cancelledAt": "abc123",
  "cancelledById": 4,
  "carrier": "xyz789",
  "carrierConnectionId": "4",
  "carrierStatusCode": "abc123",
  "carrierStatusDescription": "abc123",
  "combinedAt": "xyz789",
  "combinedById": 4,
  "combinedWithOrderIds": "xyz789",
  "confirmationCost": "xyz789",
  "createdAt": "abc123",
  "customerNotified": false,
  "customerNotifiedAt": "xyz789",
  "customsInvoiceFile": File,
  "customsSubmittedElectronically": true,
  "declaredWeight": "abc123",
  "deliveredAt": "xyz789",
  "estimatedDeliveryDate": "xyz789",
  "externalLabelId": "xyz789",
  "externalShipmentId": "xyz789",
  "fulfillmentCompletedAt": "xyz789",
  "fulfillmentError": "abc123",
  "fulfillmentErrorStep": "LABEL_PRINT",
  "fulfillmentStartedAt": "abc123",
  "fulfillmentStatusEnum": "COMPLETED",
  "handoffMethod": "CARRIER_TRACKED",
  "handoffNote": "abc123",
  "hasLabel": true,
  "height": "abc123",
  "id": "4",
  "insuranceCost": "abc123",
  "isDelivered": true,
  "isManualFulfillment": false,
  "isSupplemental": false,
  "labelFile": File,
  "labelFileId": 4,
  "labelFormat": "abc123",
  "labelPrintedAt": "xyz789",
  "labelPurchasedAt": "xyz789",
  "labelPurchasedById": 4,
  "labelUrl": "abc123",
  "labelVoidedAt": "xyz789",
  "length": "abc123",
  "manualFulfillmentReason": "xyz789",
  "notifyCustomer": false,
  "orderId": 4,
  "organizationId": "4",
  "packageNumber": 987,
  "printFirstPageOnly": false,
  "scaleWeight": "abc123",
  "serviceCode": "xyz789",
  "serviceName": "abc123",
  "serviceOptions": "xyz789",
  "shipmentGroupId": 4,
  "shipmentGroupRole": "abc123",
  "shippedAt": "xyz789",
  "shippingCost": "xyz789",
  "shopifyFulfillmentId": "abc123",
  "shopifyLastSyncAt": "xyz789",
  "shopifyLastSyncError": "xyz789",
  "shopifySyncAttempts": 123,
  "stationeryTareGrams": "abc123",
  "stationeryType": "abc123",
  "stationeryTypeId": "4",
  "status": "CANCELLED",
  "stepLabelPrintStatus": "COMPLETED",
  "stepLabelPurchaseStatus": "COMPLETED",
  "stepLocalFulfillmentStatus": "COMPLETED",
  "stepStoreSyncStatus": "COMPLETED",
  "supplementalReason": "xyz789",
  "trackingException": "abc123",
  "trackingLastUpdatedAt": "xyz789",
  "trackingNumber": "abc123",
  "trackingStatus": "abc123",
  "trackingStatusDescription": "abc123",
  "trackingUrl": "xyz789",
  "uncombinedAt": "abc123",
  "uncombinedById": "4",
  "uncombinedReason": "abc123",
  "updatedAt": "abc123",
  "width": "xyz789"
}

FulfillmentPackageItem

Description

An item allocated to a fulfillment package

Fields
Field Name Description
Images - [FulfillmentImage!]!
LineItem - OrderLineItem!
Package - FulfillmentPackage!
createdAt - String!
id - ID!
inventoryAction - InventoryAction!
lineItemId - ID!
packageId - ID!
quantity - Int!
supplementalItemType - SupplementalItemType
updatedAt - String!
Example
{
  "Images": [FulfillmentImage],
  "LineItem": OrderLineItem,
  "Package": FulfillmentPackage,
  "createdAt": "xyz789",
  "id": 4,
  "inventoryAction": "DEDUCT",
  "lineItemId": 4,
  "packageId": "4",
  "quantity": 987,
  "supplementalItemType": "COMPLIMENTARY",
  "updatedAt": "abc123"
}

FulfillmentStep

Description

Steps in the fulfillment process

Values
Enum Value Description

LABEL_PRINT

LABEL_PURCHASE

LOCAL_FULFILLMENT

STORE_SYNC

Example
"LABEL_PRINT"

GrossProfitPrecision

Description

How far a gross profit figure can be relied on.

Values
Enum Value Description

APPROXIMATE

An estimate: at least one reason it is not exact could move it either way.

AT_MOST

An upper bound: every reason it is not exact can only overstate it.

EXACT

Every input is known.
Example
"APPROXIMATE"

GrossProfitReason

Description

Why a gross profit figure is not exact.

Values
Enum Value Description

INCOMPLETE_COST

A recorded cost is itself incomplete, such as a kit with an uncosted component.

REFUND_ABOVE_ITEMS

A refund was larger than the items, shipping and tax it records.

REFUND_BELOW_ITEMS

A refund was smaller than the items it records, such as a restocking fee.

REFUND_WITHOUT_ITEMS

An order was refunded with no record of which items.

REMOVED_WITHOUT_REFUND_RECORD

A refunded order has removed units with no refund record to place them.

UNKNOWN_SHIPPING_DISCOUNT

It is not known how much of a discount applied to shipping.

UNKNOWN_TAX_MODE

Tax was charged but it is not known whether prices include it.
Example
"INCOMPLETE_COST"

HandoffMethod

Description

How a fulfillment package was handed off to the carrier

Values
Enum Value Description

CARRIER_TRACKED

MANIFEST_HANDOFF

MANUAL_HANDOFF

SCHEDULED_PICKUP

Example
"CARRIER_TRACKED"

ID

Description

The ID scalar type represents a unique identifier, often used to refetch an object or as key for a cache. The ID type appears in a JSON response as a String; however, it is not intended to be human-readable. When expected as an input type, any string (such as "4") or integer (such as 4) input value will be accepted as an ID.

Example
4

ImportChargesCollection

Description

Whether import charges were collected from the customer at checkout.

Values
Enum Value Description

COLLECTED

NOT_COLLECTED

Example
"COLLECTED"

ImportChargesCollector

Description

Who collected the import charges: the merchant, or a third party (e.g. a carrier).

Values
Enum Value Description

MERCHANT

THIRD_PARTY

Example
"MERCHANT"

ImportChargesFactInput

Description

A statement about whether import charges were collected for an order. Omit the whole input to leave the stored fact unchanged; an input with no collection makes no statement and also changes nothing.

Fields
Input Field Description
amount - String Amount collected, in the order currency, up to 2 decimal places. Only with COLLECTED.
collectedBy - ImportChargesCollector
collection - ImportChargesCollection
mixed - Boolean Shopify only: the order's fulfillment orders disagree about whether charges were collected.
source - ImportChargesInputSource Defaults to API.
Example
{
  "amount": "abc123",
  "collectedBy": "MERCHANT",
  "collection": "COLLECTED",
  "mixed": false,
  "source": "API"
}

ImportChargesFactSource

Description

Where the stored import-charges fact came from. A merchant value outranks SHOPIFY.

Values
Enum Value Description

API

CSV

MANUAL

SHOPIFY

Example
"API"

ImportChargesInputSource

Description

The origin a caller may claim for an import-charges statement. SHOPIFY is accepted only from the Shopify integration; MANUAL is set only by setOrderImportChargesFact.

Values
Enum Value Description

API

CSV

SHOPIFY

Example
"API"

ImportChargesResolvedSource

Description

Where the resolved import-charges fact came from: a stored source, or ORGANIZATION_SETTING when the order has no fact of its own and the organisation has stated it never collects import charges at checkout. ORGANIZATION_SETTING is never stored on the order.

Values
Enum Value Description

API

CSV

MANUAL

ORGANIZATION_SETTING

SHOPIFY

Example
"API"

Int

Description

The Int scalar type represents non-fractional signed whole numeric values. Int can represent values between -(2^31) and 2^31 - 1.

Example
987

InventoryAction

Description

Whether to deduct inventory for this item

Values
Enum Value Description

DEDUCT

NONE

Example
"DEDUCT"

InventoryReceipt

Description

Inventory receipt for receiving products

Fields
Field Name Description
InventoryReceiptItems - [InventoryReceiptItem!]
Organization - Organization
PurchaseOrder - PurchaseOrder
ReceivedBy - User
WarehouseLocation - WarehouseLocation
createdAt - String
discrepancyNotes - String
hasDiscrepancies - Boolean
id - ID
itemCount - Int
notes - String
organizationId - ID
purchaseOrderId - String
receiptNumber - String
receivedByEmailSnapshot - String Email of the user who received the stock, recorded at the time.
receivedByIdSnapshot - ID Id of the user who received the stock, recorded at the time. Still set after that user is deleted (receivedByUserId and ReceivedBy are then null).
receivedByNameSnapshot - String Display name of the user who received the stock, recorded at the time. Show it, marked as a deleted user, when ReceivedBy is null.
receivedByUserId - ID
receivedDate - String
status - ReceiptStatus
totalQuantityExpected - Int
totalQuantityReceived - Int
updatedAt - String
varianceQuantity - Int
warehouseLocationId - ID
Example
{
  "InventoryReceiptItems": [InventoryReceiptItem],
  "Organization": Organization,
  "PurchaseOrder": PurchaseOrder,
  "ReceivedBy": User,
  "WarehouseLocation": WarehouseLocation,
  "createdAt": "abc123",
  "discrepancyNotes": "abc123",
  "hasDiscrepancies": true,
  "id": 4,
  "itemCount": 987,
  "notes": "abc123",
  "organizationId": 4,
  "purchaseOrderId": "abc123",
  "receiptNumber": "xyz789",
  "receivedByEmailSnapshot": "abc123",
  "receivedByIdSnapshot": 4,
  "receivedByNameSnapshot": "xyz789",
  "receivedByUserId": "4",
  "receivedDate": "xyz789",
  "status": "CANCELLED",
  "totalQuantityExpected": 987,
  "totalQuantityReceived": 987,
  "updatedAt": "xyz789",
  "varianceQuantity": 123,
  "warehouseLocationId": "4"
}

InventoryReceiptItem

Description

Inventory receipt line item

Fields
Field Name Description
InventoryReceipt - InventoryReceipt
Product - Product
PurchasableItem - PurchasableItem
PurchaseOrderItem - PurchaseOrderItem
WarehouseBin - WarehouseBin
batchNumber - String
binLocation - String
createdAt - String
expiryDate - String
id - ID
inventoryReceiptId - ID
itemName - String
itemSku - String
itemType - String
lineTotal - String
lotNumber - String
notes - String
productId - String
purchasableItemId - String
purchaseOrderItemId - String
quantityAccepted - Int
quantityDamaged - Int
quantityExpected - Int
quantityReceived - Int
quantityRejected - Int
unitCost - String
updatedAt - String
varianceReason - String
warehouseBinId - String
Example
{
  "InventoryReceipt": InventoryReceipt,
  "Product": Product,
  "PurchasableItem": PurchasableItem,
  "PurchaseOrderItem": PurchaseOrderItem,
  "WarehouseBin": WarehouseBin,
  "batchNumber": "xyz789",
  "binLocation": "xyz789",
  "createdAt": "xyz789",
  "expiryDate": "abc123",
  "id": 4,
  "inventoryReceiptId": "4",
  "itemName": "xyz789",
  "itemSku": "abc123",
  "itemType": "xyz789",
  "lineTotal": "xyz789",
  "lotNumber": "xyz789",
  "notes": "xyz789",
  "productId": "abc123",
  "purchasableItemId": "xyz789",
  "purchaseOrderItemId": "xyz789",
  "quantityAccepted": 123,
  "quantityDamaged": 987,
  "quantityExpected": 123,
  "quantityReceived": 987,
  "quantityRejected": 987,
  "unitCost": "xyz789",
  "updatedAt": "abc123",
  "varianceReason": "abc123",
  "warehouseBinId": "abc123"
}

InventoryReceiptItemInput

Fields
Input Field Description
batchNumber - String
binLocation - String
expiryDate - String
lotNumber - String
notes - String
purchasableItemId - ID!
purchaseOrderItemId - ID
quantityDamaged - Int
quantityReceived - Int!
quantityRejected - Int
unitCost - String
varianceReason - String
warehouseBinId - ID
Example
{
  "batchNumber": "xyz789",
  "binLocation": "xyz789",
  "expiryDate": "xyz789",
  "lotNumber": "xyz789",
  "notes": "abc123",
  "purchasableItemId": "4",
  "purchaseOrderItemId": 4,
  "quantityDamaged": 987,
  "quantityReceived": 123,
  "quantityRejected": 123,
  "unitCost": "xyz789",
  "varianceReason": "abc123",
  "warehouseBinId": "4"
}

JSON

Example
{}

KitAssemblyMode

Description

Determines how kit inventory is managed

Values
Enum Value Description

BOTH

Use pre-assembled first, then JIT for remainder

FULFILL_TIME

Assemble during order fulfillment (JIT - quantity is virtual)

PRE_ASSEMBLE

Build kits ahead of time (traditional pre-kitting)
Example
"BOTH"

KitComponentPick

Description

A kit component to be picked for JIT assembly

Fields
Field Name Description
barcode - String The component variant's barcode (UPC/EAN). Null when the variant has none; scan-to-confirm on the pack screen matches it exactly, alongside productSku.
isPicked - Boolean
location - ComponentLocation
productId - String
productImage - String
productName - String
productSku - String
productVariantId - String
quantityNeeded - Int
quantityPicked - Int
variantTitle - String
Example
{
  "barcode": "xyz789",
  "isPicked": true,
  "location": ComponentLocation,
  "productId": "abc123",
  "productImage": "abc123",
  "productName": "abc123",
  "productSku": "xyz789",
  "productVariantId": "abc123",
  "quantityNeeded": 123,
  "quantityPicked": 987,
  "variantTitle": "xyz789"
}

KitInventoryMode

Description

Controls inventory deduction behavior for kit assembly/fulfillment

Values
Enum Value Description

ACTIVE

Full deductions on kit assembly/fulfillment (normal operation)

EXTERNAL

An external app (e.g. BundleKit) deducts components; we only log. Migration-only — our component figures exclude open orders’ allocations while a kit is in this state.

SHADOW

Log deductions without executing — dry run before go-live
Example
"ACTIVE"

LabelAddressType

Values
Enum Value Description

MAILING

PHYSICAL

Example
"MAILING"

LineItemInput

Fields
Input Field Description
allocatedDiscountAmount - String The discount the channel allocated to this line (Shopify: the sum of its discountAllocations — where an order-level code's money lives), in shop money. Omit when unknown; it is never read as zero.
currentQuantity - Int
discountAmount - String
fulfillmentGroupExternalId - String
isGiftCard - Boolean The channel says this line sold a gift card (Shopify: LineItem.isGiftCard). Omit when unknown; an update without it keeps what is stored.
nonFulfillableQuantity - Int
notes - String
originalUnitPrice - String
presentmentUnitPrice - String
productId - String
productImage - String
productName - String!
productSku - String!
quantityCancelled - Int
quantityFulfilled - Int
quantityOrdered - Int!
shopifyLineItemId - String
source - String
taxAmount - String
unitPrice - String!
variantId - String
variantOptions - JSON
variantTitle - String
Example
{
  "allocatedDiscountAmount": "xyz789",
  "currentQuantity": 987,
  "discountAmount": "abc123",
  "fulfillmentGroupExternalId": "abc123",
  "isGiftCard": false,
  "nonFulfillableQuantity": 123,
  "notes": "abc123",
  "originalUnitPrice": "abc123",
  "presentmentUnitPrice": "xyz789",
  "productId": "abc123",
  "productImage": "xyz789",
  "productName": "xyz789",
  "productSku": "xyz789",
  "quantityCancelled": 987,
  "quantityFulfilled": 123,
  "quantityOrdered": 123,
  "shopifyLineItemId": "abc123",
  "source": "xyz789",
  "taxAmount": "abc123",
  "unitPrice": "xyz789",
  "variantId": "xyz789",
  "variantOptions": {},
  "variantTitle": "abc123"
}

LocationScope

Values
Enum Value Description

GLOBAL

LOCATION_SPECIFIC

ORGANIZATION

Example
"GLOBAL"

LocationType

Values
Enum Value Description

AMAZON

CUSTOMER

EBAY

SHOPIFY

STORE

SUPPLIER

TRANSIT

VIRTUAL

WAREHOUSE

Example
"AMAZON"

MediaProfile

Description

Per-device label media profile (size, density, orientation)

Fields
Field Name Description
dpi - Int!
heightMm - Float
marginsMm - Float!
mediaType - MediaType!
overriddenFields - [String!]! Profile fields whose value was set manually (vs agent-reported)
rotation - MediaRotation!
widthMm - Float!
Example
{
  "dpi": 123,
  "heightMm": 987.65,
  "marginsMm": 123.45,
  "mediaType": "CONTINUOUS",
  "overriddenFields": ["abc123"],
  "rotation": "DEG_0",
  "widthMm": 987.65
}

MediaRotation

Description

Rotation applied so label content fills the media width

Values
Enum Value Description

DEG_0

DEG_90

DEG_180

DEG_270

Example
"DEG_0"

MediaType

Description

Physical label media loaded in a printer

Values
Enum Value Description

CONTINUOUS

DIE_CUT

SHEET

Example
"CONTINUOUS"

MovementSource

Values
Enum Value Description

AMAZON

API

BULK_IMPORT

MANUAL

SHOPIFY

SYNC_AMAZON

SYNC_SHOPIFY

SYSTEM

Example
"AMAZON"

Order

Description

A customer order with line items

Fields
Field Name Description
Customer - Customer
FulfillmentPackages - [FulfillmentPackage!]!
OrderComments - [OrderComment!]
OrderLineItems - [OrderLineItem!]!
Organization - Organization!
WarehouseAllocation - OrderWarehouseAllocation
billingAddress - String
billingAddress2 - String
billingCity - String
billingCompany - String
billingCountry - String
billingCountryCode - String
billingFirstName - String
billingLastName - String
billingPostalCode - String
billingState - String
cancelReason - String
cancelStaffNote - String
cancelledAt - String
capturedAmount - String Sum of SUCCESS SALE/CAPTURE transactions in the shop currency — the money actually taken from the customer. NOT interchangeable with totalAmount, which mirrors Shopify currentTotalPriceSet and is mutated by cancellations and order edits.
carrier - String
closedAt - String
confirmed - Boolean
createdAt - String!
currency - String!
currentShippingCost - String
customerIp - String
customerNotes - String
deliveredAt - String
discountAmount - String!
discountCodes - JSON Array of discount codes applied to the order [{code, amount, type}]
email - String
exchangeRate - String
fulfilledAt - String
fulfillmentStatus - OrderFulfillmentStatus!
grossProfit - OrderGrossProfit Item sales after discounts and refunds, excluding shipping and tax, minus the cost of goods for those items. Lines with no recorded cost are left out. Null when the order is cancelled, the organisation has no currency, there is no exchange rate, or it could not be calculated.
id - ID!
importChargesCollectedAmount - String Decimal string in the order currency; only set when COLLECTED.
importChargesCollectedBy - ImportChargesCollector
importChargesCollection - ImportChargesCollection
importChargesConflict - Boolean! True when Shopify's report disagrees with the stored fact, or Shopify's own fulfillment orders disagree.
importChargesFactSource - ImportChargesFactSource
importChargesResolvedCollection - ImportChargesCollection The import-charges fact to act on: the stored fact, else NOT_COLLECTED when the organisation has stated it never collects import charges at checkout. Null = unknown (including a Shopify conflict, which is never masked).
importChargesResolvedSource - ImportChargesResolvedSource Where importChargesResolvedCollection came from. ORGANIZATION_SETTING = the organisation statement, not anything stored on this order.
importChargesShopifyMixed - Boolean True when Shopify's own fulfillment orders for this order disagreed.
importChargesShopifyReported - ImportChargesCollection The last value Shopify reported, kept even when a stored merchant value wins.
internalNotes - String
internalOrderNumber - Int
lastSyncedAt - String
monthlyOrderCap - OrderCapStatus This order against its plan's monthly order cap.
notifyCustomerOnRefund - Boolean!
orderDate - String!
orderNumber - String!
organizationId - ID!
paidAt - String
paymentGateway - String
paymentMethod - String
paymentStatus - OrderPaymentStatus!
phone - String
presentmentCapturedAmount - String Sum of SUCCESS SALE/CAPTURE transactions in the presentment currency. Null when Shopify reported no presentment money.
presentmentCurrency - String
presentmentCurrentShippingCost - String
presentmentDiscountAmount - String
presentmentRefundedAmount - String Total refunded in the presentment currency the customer was charged in. Null when Shopify reported no presentment money (single-currency order) or the payload carried no transactions.
presentmentShippingCost - String
presentmentShippingDiscountAmount - String
presentmentSubtotal - String
presentmentTaxAmount - String
presentmentTotalAmount - String
processedAt - String
refundedAmount - String!
refunds - JSON Array of refund objects from Shopify [{id, createdAt, amount, note, lineItems}]
resolvedShippingService - ResolvedShippingService Resolved shipping service for display: the organization's mapping for the rate code or title, else a carrier-adapter alias for the rate code, else the raw title
restockOnCancel - Boolean!
riskAssessmentDetails - JSON
riskLevel - String
riskRecommendation - String
shippingAddress - String
shippingAddress2 - String
shippingCity - String
shippingCompany - String
shippingCost - String!
shippingCountry - String
shippingCountryCode - String
shippingDiscountAmount - String
shippingFirstName - String
shippingLastName - String
shippingLines - JSON Individual shipping line details [{title, price, carrierIdentifier, code}]
shippingMethod - String
shippingPostalCode - String
shippingState - String
shopifyLastCancelError - String
shopifyLastCancelSyncAt - String
shopifyOrderId - String
shopifyOrderNumber - String
source - String!
status - OrderStatus!
storeId - ID
subtotal - String!
syncError - String
syncStatus - SyncStatus!
tags - [String!]!
taxAmount - String!
taxLines - [OrderTaxLine!]
taxesIncluded - Boolean
timeline - [OrderTimelineEvent!] Timeline of events for this order
totalAmount - String!
trackingNumber - String
trackingUrl - String
transactions - JSON Payment transaction details from Shopify [{id, kind, gateway, status, amount, currency, createdAt}]
updatedAt - String!
Example
{
  "Customer": Customer,
  "FulfillmentPackages": [FulfillmentPackage],
  "OrderComments": [OrderComment],
  "OrderLineItems": [OrderLineItem],
  "Organization": Organization,
  "WarehouseAllocation": OrderWarehouseAllocation,
  "billingAddress": "xyz789",
  "billingAddress2": "xyz789",
  "billingCity": "xyz789",
  "billingCompany": "abc123",
  "billingCountry": "abc123",
  "billingCountryCode": "xyz789",
  "billingFirstName": "xyz789",
  "billingLastName": "abc123",
  "billingPostalCode": "abc123",
  "billingState": "abc123",
  "cancelReason": "abc123",
  "cancelStaffNote": "xyz789",
  "cancelledAt": "xyz789",
  "capturedAmount": "abc123",
  "carrier": "abc123",
  "closedAt": "xyz789",
  "confirmed": true,
  "createdAt": "abc123",
  "currency": "xyz789",
  "currentShippingCost": "abc123",
  "customerIp": "xyz789",
  "customerNotes": "xyz789",
  "deliveredAt": "xyz789",
  "discountAmount": "xyz789",
  "discountCodes": {},
  "email": "abc123",
  "exchangeRate": "abc123",
  "fulfilledAt": "abc123",
  "fulfillmentStatus": "CANCELLED",
  "grossProfit": OrderGrossProfit,
  "id": 4,
  "importChargesCollectedAmount": "abc123",
  "importChargesCollectedBy": "MERCHANT",
  "importChargesCollection": "COLLECTED",
  "importChargesConflict": false,
  "importChargesFactSource": "API",
  "importChargesResolvedCollection": "COLLECTED",
  "importChargesResolvedSource": "API",
  "importChargesShopifyMixed": false,
  "importChargesShopifyReported": "COLLECTED",
  "internalNotes": "abc123",
  "internalOrderNumber": 987,
  "lastSyncedAt": "abc123",
  "monthlyOrderCap": OrderCapStatus,
  "notifyCustomerOnRefund": false,
  "orderDate": "abc123",
  "orderNumber": "xyz789",
  "organizationId": 4,
  "paidAt": "xyz789",
  "paymentGateway": "abc123",
  "paymentMethod": "abc123",
  "paymentStatus": "AUTHORIZED",
  "phone": "xyz789",
  "presentmentCapturedAmount": "abc123",
  "presentmentCurrency": "abc123",
  "presentmentCurrentShippingCost": "abc123",
  "presentmentDiscountAmount": "abc123",
  "presentmentRefundedAmount": "abc123",
  "presentmentShippingCost": "abc123",
  "presentmentShippingDiscountAmount": "xyz789",
  "presentmentSubtotal": "abc123",
  "presentmentTaxAmount": "xyz789",
  "presentmentTotalAmount": "abc123",
  "processedAt": "abc123",
  "refundedAmount": "abc123",
  "refunds": {},
  "resolvedShippingService": ResolvedShippingService,
  "restockOnCancel": false,
  "riskAssessmentDetails": {},
  "riskLevel": "abc123",
  "riskRecommendation": "xyz789",
  "shippingAddress": "abc123",
  "shippingAddress2": "abc123",
  "shippingCity": "abc123",
  "shippingCompany": "xyz789",
  "shippingCost": "xyz789",
  "shippingCountry": "abc123",
  "shippingCountryCode": "abc123",
  "shippingDiscountAmount": "xyz789",
  "shippingFirstName": "abc123",
  "shippingLastName": "abc123",
  "shippingLines": {},
  "shippingMethod": "xyz789",
  "shippingPostalCode": "xyz789",
  "shippingState": "xyz789",
  "shopifyLastCancelError": "abc123",
  "shopifyLastCancelSyncAt": "xyz789",
  "shopifyOrderId": "abc123",
  "shopifyOrderNumber": "xyz789",
  "source": "abc123",
  "status": "CANCELLED",
  "storeId": 4,
  "subtotal": "xyz789",
  "syncError": "abc123",
  "syncStatus": "ERROR",
  "tags": ["xyz789"],
  "taxAmount": "abc123",
  "taxLines": [OrderTaxLine],
  "taxesIncluded": false,
  "timeline": [OrderTimelineEvent],
  "totalAmount": "xyz789",
  "trackingNumber": "abc123",
  "trackingUrl": "abc123",
  "transactions": {},
  "updatedAt": "xyz789"
}

OrderCapStatus

Description

Where an order stands against its plan's monthly order cap. An order past the cap can't be picked or have a label bought until the period resets.

Fields
Field Name Description
blocked - Boolean! True when the order is past the monthly cap and cannot be picked or shipped.
maxOrders - Int Orders a month the plan includes. Null when no cap applies.
position - Int The order's position in the current billing period. Null when it was not counted in this period.
resetsOn - String ISO 8601. When the current billing period ends and the cap resets.
Example
{
  "blocked": true,
  "maxOrders": 987,
  "position": 123,
  "resetsOn": "xyz789"
}

OrderComment

Description

An internal staff comment on an order

Fields
Field Name Description
attachments - [OrderCommentAttachment!]
author - CommentAuthor
content - String
createdAt - String
id - ID
isPinned - Boolean
orderId - ID
organizationId - ID
updatedAt - String
userId - ID
Example
{
  "attachments": [OrderCommentAttachment],
  "author": CommentAuthor,
  "content": "abc123",
  "createdAt": "xyz789",
  "id": 4,
  "isPinned": true,
  "orderId": 4,
  "organizationId": 4,
  "updatedAt": "xyz789",
  "userId": "4"
}

OrderCommentAttachment

Fields
Field Name Description
name - String
size - Int
type - String
url - String
Example
{
  "name": "abc123",
  "size": 123,
  "type": "xyz789",
  "url": "abc123"
}

OrderFulfillmentGroup

Description

A channel's per-location grouping of an order's line items (Shopify FulfillmentOrder).

Fields
Field Name Description
channel - String
externalGroupId - String
externalLocationId - String
externalLocationName - String
externalStatus - String
id - ID
Example
{
  "channel": "xyz789",
  "externalGroupId": "abc123",
  "externalLocationId": "abc123",
  "externalLocationName": "abc123",
  "externalStatus": "abc123",
  "id": 4
}

OrderFulfillmentStatus

Values
Enum Value Description

CANCELLED

DELIVERED

FULFILLED

ON_HOLD

PARTIALLY_FULFILLED

PARTIALLY_PICKED

PENDING

PICKED

PROCESSING

SHIPPED

UNFULFILLED

Example
"CANCELLED"

OrderGrossProfit

Description

Item sales after discounts and refunds, excluding shipping and tax, minus the cost of goods for those items. Lines with no recorded cost are left out.

Fields
Field Name Description
amount - String Null when no line has a recorded cost: the figure is missing, not zero.
cost - String Cost of goods for the units still counted.
costedLines - Int!
currency - String! The organisation's currency, which every figure here is in.
itemsWithoutCost - Int! Lines with no recorded cost, which are left out of every figure here.
marginPct - Float Gross margin as a percentage (0-100) of netSales.
netSales - String Item sales of the costed lines, after discounts and refunds.
precision - GrossProfitPrecision! How far amount can be relied on.
reasons - [GrossProfitReason!]! Why amount is not exact. Empty when it is.
totalLines - Int!
Example
{
  "amount": "xyz789",
  "cost": "abc123",
  "costedLines": 123,
  "currency": "abc123",
  "itemsWithoutCost": 987,
  "marginPct": 123.45,
  "netSales": "xyz789",
  "precision": "APPROXIMATE",
  "reasons": ["INCOMPLETE_COST"],
  "totalLines": 987
}

OrderLineItem

Description

A line item in an order

Fields
Field Name Description
Order - Order!
Product - Product
ProductVariant - ProductVariant
allocatedDiscountAmount - String SKU-1996: the discount the channel allocated to this line (shop money). Null: not captured — not "no discount".
cancelReason - String
cancelledAt - String
createdAt - String!
currentQuantity - Int
discountAmount - String!
externallyReservedQuantity - Int
fulfillable - Boolean! Whether this line item may currently be fulfilled. False when its channel fulfilment group is assigned to a location not linked to a warehouse.
fulfilledAt - String
fulfillmentBlockDetail - String Merchant-facing explanation naming the channel location. Null when the item is fulfillable.
fulfillmentBlockReason - FulfillmentBlockReason Why this line item cannot be fulfilled. Null when it can.
fulfillmentGroup - OrderFulfillmentGroup
id - ID!
isCancelled - Boolean!
isComplimentary - Boolean!
isFulfilled - Boolean!
isKit - Boolean Whether this line item is a kit/bundle product
isPicked - Boolean!
kitAssemblyMode - KitAssemblyMode Assembly mode for this kit (null if not a kit)
kitComponents - [KitComponentPick!] Components to pick for JIT kit assembly (null if not a kit or not JIT mode)
lineCost - String
lineSubtotal - String!
lineTotal - String!
nonFulfillableQuantity - Int
notes - String
originalUnitPrice - String
pickedAt - String
preAssembledAvailable - Int Number of pre-assembled kit units available at the allocated warehouse (null if not a kit)
presentmentUnitPrice - String
productImage - String
productName - String!
productSku - String!
quantityCancelled - Int!
quantityFulfilled - Int!
quantityOrdered - Int!
quantityPicked - Int!
shopifyLineItemId - String
source - String!
taxAmount - String!
unitCost - String
unitCostIsPartial - Boolean The snapshotted unitCost was itself incomplete (a partially-costed kit), so margin derived from this line is an upper bound (SKU-1891).
unitPrice - String!
updatedAt - String!
variantOptions - JSON
variantTitle - String
Example
{
  "Order": Order,
  "Product": Product,
  "ProductVariant": ProductVariant,
  "allocatedDiscountAmount": "xyz789",
  "cancelReason": "xyz789",
  "cancelledAt": "xyz789",
  "createdAt": "abc123",
  "currentQuantity": 123,
  "discountAmount": "xyz789",
  "externallyReservedQuantity": 987,
  "fulfillable": false,
  "fulfilledAt": "abc123",
  "fulfillmentBlockDetail": "abc123",
  "fulfillmentBlockReason": "LINKED_BUT_FULFILMENT_DISABLED",
  "fulfillmentGroup": OrderFulfillmentGroup,
  "id": 4,
  "isCancelled": false,
  "isComplimentary": false,
  "isFulfilled": false,
  "isKit": true,
  "isPicked": true,
  "kitAssemblyMode": "BOTH",
  "kitComponents": [KitComponentPick],
  "lineCost": "abc123",
  "lineSubtotal": "abc123",
  "lineTotal": "xyz789",
  "nonFulfillableQuantity": 123,
  "notes": "xyz789",
  "originalUnitPrice": "abc123",
  "pickedAt": "xyz789",
  "preAssembledAvailable": 123,
  "presentmentUnitPrice": "abc123",
  "productImage": "abc123",
  "productName": "abc123",
  "productSku": "xyz789",
  "quantityCancelled": 123,
  "quantityFulfilled": 123,
  "quantityOrdered": 987,
  "quantityPicked": 123,
  "shopifyLineItemId": "abc123",
  "source": "abc123",
  "taxAmount": "xyz789",
  "unitCost": "xyz789",
  "unitCostIsPartial": false,
  "unitPrice": "abc123",
  "updatedAt": "abc123",
  "variantOptions": {},
  "variantTitle": "xyz789"
}

OrderPaymentStatus

Values
Enum Value Description

AUTHORIZED

EXPIRED

FAILED

PAID

PARTIALLY_PAID

PARTIALLY_REFUNDED

PENDING

REFUNDED

UNPAID

VOIDED

Example
"AUTHORIZED"

OrderStatus

Values
Enum Value Description

CANCELLED

COMPLETED

CONFIRMED

DELIVERED

DRAFT

ON_HOLD

PENDING

PROCESSING

REFUNDED

SHIPPED

Example
"CANCELLED"

OrderStatusCounts

Fields
Field Name Description
all - Int
cancelled - Int
fulfilled - Int
hold - Int
partialPicked - Int
pickable - Int
picked - Int
ready - Int
unfulfilled - Int
unpaid - Int
Example
{
  "all": 987,
  "cancelled": 987,
  "fulfilled": 123,
  "hold": 987,
  "partialPicked": 987,
  "pickable": 987,
  "picked": 987,
  "ready": 987,
  "unfulfilled": 123,
  "unpaid": 987
}

OrderTaxLine

Description

One tax line on an order, e.g. "GST 10%". amount is shop currency.

Fields
Field Name Description
amount - String!
presentmentAmount - String
rate - Float
title - String
Example
{
  "amount": "xyz789",
  "presentmentAmount": "xyz789",
  "rate": 123.45,
  "title": "xyz789"
}

OrderTaxLineInput

Fields
Input Field Description
amount - String!
presentmentAmount - String
rate - Float
title - String
Example
{
  "amount": "xyz789",
  "presentmentAmount": "xyz789",
  "rate": 987.65,
  "title": "abc123"
}

OrderTimelineEvent

Description

An event in the order timeline

Fields
Field Name Description
description - String
icon - String
id - ID
metadata - JSON
timestamp - String
title - String
type - String
Example
{
  "description": "abc123",
  "icon": "abc123",
  "id": 4,
  "metadata": {},
  "timestamp": "abc123",
  "title": "xyz789",
  "type": "abc123"
}

OrderWarehouseAllocation

Description

Assignment of an order to a warehouse for fulfillment

Fields
Field Name Description
AllocatedBy - User
Order - Order
WarehouseLocation - WarehouseLocation!
allocatedAt - String
allocatedByEmailSnapshot - String Email of the user who allocated the order to the warehouse, recorded at the time.
allocatedById - String
allocatedByIdSnapshot - ID Id of the user who allocated the order to the warehouse, recorded at the time. Still set after that user is deleted.
allocatedByNameSnapshot - String Display name of the user who allocated the order to the warehouse, recorded at the time. Show it, marked as a deleted user, when allocatedById is null.
createdAt - String
id - ID
notes - String
orderId - String
status - AllocationStatus
updatedAt - String
warehouseLocationId - String
Example
{
  "AllocatedBy": User,
  "Order": Order,
  "WarehouseLocation": WarehouseLocation,
  "allocatedAt": "abc123",
  "allocatedByEmailSnapshot": "xyz789",
  "allocatedById": "xyz789",
  "allocatedByIdSnapshot": 4,
  "allocatedByNameSnapshot": "xyz789",
  "createdAt": "abc123",
  "id": "4",
  "notes": "abc123",
  "orderId": "abc123",
  "status": "ALLOCATED",
  "updatedAt": "abc123",
  "warehouseLocationId": "xyz789"
}

Organization

Description

Organization with settings

Fields
Field Name Description
Permission - [Permission!]
Role - [RoleType!]
Team - [Team!]
User - [User!] Every user of this organization. Requires users:read; null otherwise.
address - String
billingEmail - String
city - String
country - String
createdAt - String
currency - String
customAppIntegrationEnabled - Boolean Whether Custom App token-based Shopify connections are enabled for this organization
defaultKitAssemblyMode - KitAssemblyMode Default assembly mode for new kits (JIT = FULFILL_TIME)
demoExpiresAt - String When this demo org auto-expires (null = never); ISO 8601
demoSeededAt - String When the demo seed finished populating this org; ISO 8601
domain - String
employeeCount - Int
features - [String!]
id - ID
industry - String
integrations - JSON
isActive - Boolean
isDemoOrg - Boolean True for ephemeral demo/showcase organizations (auto-seeded, TTL-expiring)
locale - String
logoUrl - String
mailingAddress - Address
mfaGracePeriodDays - Int
mfaRequired - Boolean
name - String
passkeyRequired - Boolean
phone - String
physicalAddress - Address
postalCode - String
sessionTimeoutHours - Int
settings - JSON
slug - String
state - String
supportEmail - String
supportInboxEnabled - Boolean Whether the Support Inbox is switched on for this organization (platform-admin controlled)
timezone - String IANA time zone. While timezoneConfirmed is false this is the UTC default, not a zone the organisation chose.
timezoneConfirmed - Boolean Whether the organisation chose timezone (false: it is the UTC default).
updatedAt - String
userCount - Int Number of users in this organization
users - [User!] Every user of this organization. Requires users:read; null otherwise.
websiteUrl - String
Example
{
  "Permission": [Permission],
  "Role": [RoleType],
  "Team": [Team],
  "User": [User],
  "address": "abc123",
  "billingEmail": "xyz789",
  "city": "abc123",
  "country": "xyz789",
  "createdAt": "xyz789",
  "currency": "xyz789",
  "customAppIntegrationEnabled": false,
  "defaultKitAssemblyMode": "BOTH",
  "demoExpiresAt": "abc123",
  "demoSeededAt": "xyz789",
  "domain": "xyz789",
  "employeeCount": 123,
  "features": ["xyz789"],
  "id": "4",
  "industry": "abc123",
  "integrations": {},
  "isActive": true,
  "isDemoOrg": true,
  "locale": "xyz789",
  "logoUrl": "abc123",
  "mailingAddress": Address,
  "mfaGracePeriodDays": 123,
  "mfaRequired": false,
  "name": "abc123",
  "passkeyRequired": false,
  "phone": "abc123",
  "physicalAddress": Address,
  "postalCode": "abc123",
  "sessionTimeoutHours": 987,
  "settings": {},
  "slug": "xyz789",
  "state": "xyz789",
  "supportEmail": "xyz789",
  "supportInboxEnabled": false,
  "timezone": "xyz789",
  "timezoneConfirmed": false,
  "updatedAt": "xyz789",
  "userCount": 987,
  "users": [User],
  "websiteUrl": "abc123"
}

PackageFulfillmentStatus

Description

Status of the overall fulfillment orchestration

Values
Enum Value Description

COMPLETED

IN_PROGRESS

NOT_STARTED

PARTIALLY_FAILED

PAUSED

Example
"COMPLETED"

PackageStatus

Description

Status of a fulfillment package

Values
Enum Value Description

CANCELLED

DELIVERED

IN_TRANSIT

LABEL_PRINTED

PACKING

READY_TO_SHIP

RETURNED

SHIPPED

Example
"CANCELLED"

PackagingType

Description

Types of packaging materials

Values
Enum Value Description

BOX

Shipping boxes, mailers

FILLER

Bubble wrap, packing peanuts, paper fill

LABEL

Shipping labels, barcode labels

OTHER

Miscellaneous consumables

PAPER

Packing slips, invoices, pick lists

TAPE

Packing tape, fragile tape
Example
"BOX"

Passkey

Description

WebAuthn passkey for passwordless authentication

Fields
Field Name Description
authenticatorType - String
createdAt - String
id - ID!
ipAddress - String
isBackedUp - Boolean
isBackupEligible - Boolean
lastUsed - String
name - String
needsReregistration - Boolean
updatedAt - String
userAgent - String
Example
{
  "authenticatorType": "abc123",
  "createdAt": "abc123",
  "id": "4",
  "ipAddress": "abc123",
  "isBackedUp": true,
  "isBackupEligible": true,
  "lastUsed": "xyz789",
  "name": "xyz789",
  "needsReregistration": false,
  "updatedAt": "abc123",
  "userAgent": "xyz789"
}

PasskeyAuthenticationOptions

Fields
Field Name Description
allowCredentials - [PublicKeyCredentialDescriptor!]
challenge - String
rpId - String
timeout - Int
userVerification - String
Example
{
  "allowCredentials": [PublicKeyCredentialDescriptor],
  "challenge": "xyz789",
  "rpId": "abc123",
  "timeout": 987,
  "userVerification": "xyz789"
}

PasskeyRegistrationOptions

Fields
Field Name Description
attestation - String
authenticatorSelection - AuthenticatorSelection
challenge - String
excludeCredentials - [PublicKeyCredentialDescriptor!]
pubKeyCredParams - [PublicKeyCredentialParam!]
rp - RelyingParty
timeout - Int
user - PasskeyUser
Example
{
  "attestation": "abc123",
  "authenticatorSelection": AuthenticatorSelection,
  "challenge": "abc123",
  "excludeCredentials": [PublicKeyCredentialDescriptor],
  "pubKeyCredParams": [PublicKeyCredentialParam],
  "rp": RelyingParty,
  "timeout": 123,
  "user": PasskeyUser
}

PasskeyUser

Fields
Field Name Description
displayName - String
id - String
name - String
Example
{
  "displayName": "xyz789",
  "id": "abc123",
  "name": "xyz789"
}

PasswordSetupLinkStatus

Description

State of an invitation or password-reset link. UNKNOWN means the check was declined (rate limited or limiter unavailable), NOT that the link is bad — clients must fall through to the normal form.

Values
Enum Value Description

EXPIRED

UNKNOWN

UNUSABLE

VALID

Example
"EXPIRED"

Permission

Description

System permission for resource access

Fields
Field Name Description
RolePermission - [RolePermission!]
UserPermission - [UserPermission!] Who holds this permission directly, in the caller's organization. Requires users:read; null otherwise.
WarehouseLocation - WarehouseLocation
action - String
category - String
createdAt - String
description - String
expiresAt - String
id - ID
isSystemDefined - Boolean
isSystemPermission - Boolean
location - WarehouseLocation
locationId - String
locationScope - LocationScope
metadata - JSON
name - String
organizationId - String
resource - String
roles - [RoleType!]
teams - [Team!]
updatedAt - String
users - [User!] Users holding this permission directly, in the caller's organization. Requires users:read; null otherwise.
Example
{
  "RolePermission": [RolePermission],
  "UserPermission": [UserPermission],
  "WarehouseLocation": WarehouseLocation,
  "action": "xyz789",
  "category": "abc123",
  "createdAt": "xyz789",
  "description": "xyz789",
  "expiresAt": "xyz789",
  "id": "4",
  "isSystemDefined": false,
  "isSystemPermission": true,
  "location": WarehouseLocation,
  "locationId": "abc123",
  "locationScope": "GLOBAL",
  "metadata": {},
  "name": "xyz789",
  "organizationId": "xyz789",
  "resource": "xyz789",
  "roles": [RoleType],
  "teams": [Team],
  "updatedAt": "abc123",
  "users": [User]
}

PickSide

Values
Enum Value Description

EAST

NORTH

SOUTH

WEST

Example
"EAST"

PriceRangeInput

Fields
Input Field Description
max - Float
min - Float
Example
{"max": 123.45, "min": 123.45}

PrincipalType

Description

Type of principal - determines access level and RBAC bypass behavior

Values
Enum Value Description

AUTOMATION

PLATFORM_ADMIN

SERVICE

USER

Example
"AUTOMATION"

PrintJob

Description

A print job enqueued for a registered device

Fields
Field Name Description
copies - Int! Number of physical copies the agent should print
createdAt - String
device - Device
deviceId - String
error - String
format - PrintJobFormat
id - ID
leaseExpiresAt - String
orgId - String
pages - String Optional page range (e.g. "1-3"); null means all pages
payloadSizeBytes - Int
status - PrintJobStatus
updatedAt - String
Example
{
  "copies": 123,
  "createdAt": "xyz789",
  "device": Device,
  "deviceId": "xyz789",
  "error": "abc123",
  "format": "PDF",
  "id": 4,
  "leaseExpiresAt": "xyz789",
  "orgId": "xyz789",
  "pages": "xyz789",
  "payloadSizeBytes": 987,
  "status": "DISPATCHED",
  "updatedAt": "xyz789"
}

PrintJobFormat

Description

Content format of a print job payload

Values
Enum Value Description

PDF

PDF document (base64-encoded)

PNG

Base64 PNG image label; the agent decodes and prints it as an image

RAW

Raw ESC/POS or vendor-specific bytes

TEST

Agent renders its built-in driver-agnostic test page; payload is ignored

ZPL

Zebra Programming Language label
Example
"PDF"

PrintJobStatus

Description

Lifecycle state of a print job

Values
Enum Value Description

DISPATCHED

Dequeued and being processed by the agent

DONE

Agent reported successful completion

FAILED

Agent reported a failure (see error field)

PENDING

Waiting to be dequeued by the agent
Example
"DISPATCHED"

Product

Description

Product with full SKU Manager features

Fields
Field Name Description
Organization - Organization!
ProductLocationInventory - [ProductLocationInventory!]!
ProductStoreConnection - [ProductStoreConnection!]!
SourcingListings - [SourcingListing!]!
allowBackorder - Boolean
assemblyMode - KitAssemblyMode
availableQuantity - Int
barcode - String
basePrice - String
brand - String
bundleComponentCount - Int
bundleDiscountPercent - String
bundleItems - [ProductBundleItem!]!
bundlePricing - BundlePricingType!
bundledIn - [ProductBundleItem!]!
category - String
compareAtPrice - String
costPrice - String
countryOfOrigin - String
createdAt - String!
customsDescription - String
defaultVariant - ProductVariant The product's ONLY variant; null when it has several (SKU-1913 — never "the first").
description - String
dimensionUnit - DimensionUnit SKU-1883: length/width/height are always returned in canonical MILLIMETRES, so this always reports MM (or null for a multi-variant product). It will be removed; do not branch on it.
displayTitle - String!
effectiveAssemblyMode - KitAssemblyMode SKU-1908: the kit's resolved assembly mode (its own, else the organization default). Null for non-kits.
handle - String
hasOnlyDefaultVariant - Boolean Shopify's canonical signal for whether this product has only the synthetic default variant (no real variant axes). Null during the migration window for products not yet re-synced from Shopify.
height - String
hsCode - String
id - ID!
images - [ProductImage!]!
isActive - Boolean!
isActiveSKU - Boolean
isGiftCard - Boolean!
kitInventoryMode - KitInventoryMode! Controls inventory deduction behavior for this kit (ACTIVE or SHADOW)
length - String
lowStockThreshold - Int
metaDescription - String
metaTitle - String
option1Name - String
option2Name - String
option3Name - String
optionDefinitions - [ProductOptionDefinition!]! Option definitions with names and ordered values
organizationId - ID!
primaryImage - ProductImage
primaryImageId - String
productLocationInventories - [ProductLocationInventory!] All warehouse inventory records for this product with warehouse details
productType - String
productVariants - [ProductVariant!]!
provinceOfOrigin - String
publishedAt - String
purchasableItemId - String Purchasable item ID from default variant (backward compat)
quantity - Int
requiresShipping - Boolean
reservedQuantity - Int Units held by reservations across the product's tracked variants. For BUNDLE products it is gross buildable minus available buildable from the same kit availability summary as quantity — the kits that component reservations (any product's, for shared components) take out of on-hand. Null when unknown or untracked.
sku - String
skuType - SKUType!
slug - String
status - ProductStatus!
stockStatus - StockStatus This product's stock verdict, computed from the same predicates that build ?filter=low_stock / ?filter=out_of_stock (SKU-1448) — read it rather than deriving a badge from quantity, which is an on-hand total and disagrees with the filters for a heavily-reserved product. Any tracked variant being empty makes the product OUT_OF_STOCK, and any being low makes it LOW_STOCK, exactly as the filters treat it. Null only when the verdict could not be computed — never a stand-in for IN_STOCK.
storeConnections - [ProductStoreConnection!]!
supplier - Supplier
supplierId - String
tags - [String!]!
taxCode - String
taxable - Boolean
title - String!
totalQuantity - Int Units physically on hand across the product’s tracked variants, GROSS of reservations — so totalQuantity - reservedQuantity = availableQuantity. For a BUNDLE it is the kits the on-hand component stock can build (the kit availability summary’s on-hand), the same basis reservedQuantity is derived from. Null when the product has no tracked variant.
trackInventory - Boolean
trackInventoryNeedsRestoration - Boolean True when this product is non-BUNDLE AND the default variant's trackInventory disagrees with trackInventoryUserSet. Signals the UI to offer a restoration confirm dialog (BUNDLE→SIMPLE conversion flow).
trackInventoryUserSet - Boolean The user's last explicit trackInventory choice on the default variant. Auto-management never writes this; surfaced for BUNDLE→SIMPLE restoration prompts.
type - ProductType!
updatedAt - String!
warehouseLocation - String Primary warehouse location for this product (first location with inventory)
weight - String
weightUnit - WeightUnit SKU-1883: stored weights are always canonical GRAMS. This field is a legacy column pinned to that value and will be removed; do not branch on it.
width - String
Example
{
  "Organization": Organization,
  "ProductLocationInventory": [ProductLocationInventory],
  "ProductStoreConnection": [ProductStoreConnection],
  "SourcingListings": [SourcingListing],
  "allowBackorder": true,
  "assemblyMode": "BOTH",
  "availableQuantity": 987,
  "barcode": "xyz789",
  "basePrice": "xyz789",
  "brand": "xyz789",
  "bundleComponentCount": 987,
  "bundleDiscountPercent": "abc123",
  "bundleItems": [ProductBundleItem],
  "bundlePricing": "CALCULATED",
  "bundledIn": [ProductBundleItem],
  "category": "xyz789",
  "compareAtPrice": "xyz789",
  "costPrice": "abc123",
  "countryOfOrigin": "abc123",
  "createdAt": "xyz789",
  "customsDescription": "xyz789",
  "defaultVariant": ProductVariant,
  "description": "xyz789",
  "dimensionUnit": "CM",
  "displayTitle": "abc123",
  "effectiveAssemblyMode": "BOTH",
  "handle": "abc123",
  "hasOnlyDefaultVariant": true,
  "height": "abc123",
  "hsCode": "abc123",
  "id": "4",
  "images": [ProductImage],
  "isActive": true,
  "isActiveSKU": false,
  "isGiftCard": false,
  "kitInventoryMode": "ACTIVE",
  "length": "abc123",
  "lowStockThreshold": 123,
  "metaDescription": "abc123",
  "metaTitle": "xyz789",
  "option1Name": "xyz789",
  "option2Name": "abc123",
  "option3Name": "abc123",
  "optionDefinitions": [ProductOptionDefinition],
  "organizationId": 4,
  "primaryImage": ProductImage,
  "primaryImageId": "xyz789",
  "productLocationInventories": [
    ProductLocationInventory
  ],
  "productType": "abc123",
  "productVariants": [ProductVariant],
  "provinceOfOrigin": "abc123",
  "publishedAt": "abc123",
  "purchasableItemId": "xyz789",
  "quantity": 987,
  "requiresShipping": false,
  "reservedQuantity": 123,
  "sku": "xyz789",
  "skuType": "BUNDLE",
  "slug": "abc123",
  "status": "ACTIVE",
  "stockStatus": "ALWAYS_IN_STOCK",
  "storeConnections": [ProductStoreConnection],
  "supplier": Supplier,
  "supplierId": "abc123",
  "tags": ["xyz789"],
  "taxCode": "xyz789",
  "taxable": false,
  "title": "abc123",
  "totalQuantity": 987,
  "trackInventory": false,
  "trackInventoryNeedsRestoration": true,
  "trackInventoryUserSet": false,
  "type": "BUNDLE",
  "updatedAt": "xyz789",
  "warehouseLocation": "abc123",
  "weight": "abc123",
  "weightUnit": "GRAMS",
  "width": "abc123"
}

ProductBundleItem

Description

Product bundle component with quantity

Fields
Field Name Description
bundleProduct - Product
bundleProductId - ID
bundleVariantId - ID The kit output variant (ProductVariant.id) this recipe row belongs to. Null = shared across all of the kit's output variants.
childProduct - Product
childProductId - ID
childVariantId - ID The specific component variant (ProductVariant.id) pinned for this recipe row.
createdAt - String
id - ID
quantity - Int
sortOrder - Int
updatedAt - String
Example
{
  "bundleProduct": Product,
  "bundleProductId": "4",
  "bundleVariantId": 4,
  "childProduct": Product,
  "childProductId": 4,
  "childVariantId": 4,
  "createdAt": "abc123",
  "id": 4,
  "quantity": 987,
  "sortOrder": 123,
  "updatedAt": "xyz789"
}

ProductBundleItemInput

Fields
Input Field Description
childVariantId - ID The component variant this recipe row consumes. Required when the component product has more than one variant; for a single-variant product its sole variant is stored. Never assumed (SKU-1913).
productId - ID!
quantity - Int!
sortOrder - Int
Example
{
  "childVariantId": "4",
  "productId": "4",
  "quantity": 987,
  "sortOrder": 123
}

ProductFilterInput

Fields
Input Field Description
brand - String Products with exactly this brand, ignoring case.
createdDateRange - DateRangeInput
hasLowStock - Boolean Filter to products at or below their low-stock threshold AND not already out of stock. A product with one variant below threshold and another variant empty is returned by hasOutOfStock only, matching its stockStatus badge, which reports the most urgent state (SKU-1461) — so this filter and hasOutOfStock are disjoint at the PRODUCT level, not merely per (variant, warehouse) row. ACTIVE products only: an archived product is not restockable, so every stock filter constrains status to ACTIVE and an explicitly supplied status is intersected with it, not honoured in its place — combining this with status: [ARCHIVED] returns zero rows (SKU-1451).
hasOutOfStock - Boolean Filter to products with at least one empty tracked variant. Takes precedence over hasLowStock: such a product is excluded from that filter even if another variant is merely low, so the two are disjoint at the product level (SKU-1461). ACTIVE products only: an archived product is not restockable, so every stock filter constrains status to ACTIVE and an explicitly supplied status is intersected with it, not honoured in its place — combining this with status: [ARCHIVED] returns zero rows (SKU-1451).
ids - [ID!] Filter to exactly these product IDs. When supplied, bypasses limit/offset pagination entirely and returns every matching row — for sync callers (SKU-1390) that already know which products they need and must not silently miss one to the default/max page size. An empty list is a real filter and matches nothing. Accepts at most 250 ids per call; a longer list is rejected rather than truncated.
limit - Int Records per page (max 100, default 25)
needsRestock - Boolean Filter to products needing restock: the UNION of low-stock and out-of-stock (unlike hasLowStock/hasOutOfStock, which the dashboard metric cards deliberately keep disjoint at the product level so they sum correctly). This is what the dashboard action card and urgency banner link to — the more urgent out-of-stock bucket must not be excluded from the to-do list. When the org has low-stock alerts disabled, the low-stock half contributes nothing (same as hasLowStock) and this resolves to out-of-stock alone. ACTIVE products only: an archived product is not restockable, so every stock filter constrains status to ACTIVE and an explicitly supplied status is intersected with it, not honoured in its place — combining this with status: [ARCHIVED] returns zero rows (SKU-1451).
offset - Int Number of records to skip for pagination
organizationId - ID!
priceRange - PriceRangeInput
searchTerm - String Words to find, ignoring case. Each word must appear in the title, description, brand, or a variant SKU or title.
skuPattern - String Products with a variant SKU containing this text, ignoring case.
skus - [String!] Products with a variant whose SKU is exactly one of these.
sortBy - String Sort field: title, sku, quantity, createdAt, updatedAt
sortDirection - String Sort direction: asc or desc (default: desc)
status - [String!]
storeConnectionId - ID Filter to products connected to ONE sales channel (SKU-1645). The value is the store connection id — for Shopify, the ShopifyStore id. Matched through ProductStoreConnection, so a product selling on several channels is returned for each. Omitting it keeps the organization-wide view, which is the default and is NOT the same list a channel shows.
supplierId - ID
tags - [String!]
type - [String!]
updatedDateRange - DateRangeInput
velocityClass - VelocityClass Filter by ABC velocity class over the last 90 days
viewMode - ProductViewMode
Example
{
  "brand": "abc123",
  "createdDateRange": DateRangeInput,
  "hasLowStock": false,
  "hasOutOfStock": true,
  "ids": ["4"],
  "limit": 123,
  "needsRestock": false,
  "offset": 987,
  "organizationId": "4",
  "priceRange": PriceRangeInput,
  "searchTerm": "abc123",
  "skuPattern": "xyz789",
  "skus": ["abc123"],
  "sortBy": "abc123",
  "sortDirection": "xyz789",
  "status": ["xyz789"],
  "storeConnectionId": "4",
  "supplierId": 4,
  "tags": ["xyz789"],
  "type": ["abc123"],
  "updatedDateRange": DateRangeInput,
  "velocityClass": "A",
  "viewMode": "ALL_PRODUCTS"
}

ProductImage

Fields
Field Name Description
altText - String
createdAt - String
file - File
fileId - ID
fileSize - Int
height - Int
id - ID!
imageUrl - String
product - Product
productId - ID!
shopifyImageId - String Numeric ID portion of the Shopify MediaImage GID (e.g. "53766126436719" — the value after the final "/" in "gid://shopify/MediaImage/{id}"). Used by media mutations (productVariantAppendMedia, productReorderMedia, fileDelete); each call site reconstructs the full GID by prefixing.
shopifyImageLegacyId - String Shopify legacy Image.id — what the products/update webhook payload delivers. Used for inbound matching only.
shopifyPosition - Int
sortOrder - Int!
sourceUrl - String Shopify CDN source URL for pending uploads
status - String! Processing status: PENDING_UPLOAD | READY | FAILED
thumbnails - JSON
updatedAt - String
url - String
width - Int
Example
{
  "altText": "abc123",
  "createdAt": "abc123",
  "file": File,
  "fileId": "4",
  "fileSize": 123,
  "height": 123,
  "id": 4,
  "imageUrl": "xyz789",
  "product": Product,
  "productId": "4",
  "shopifyImageId": "xyz789",
  "shopifyImageLegacyId": "abc123",
  "shopifyPosition": 987,
  "sortOrder": 123,
  "sourceUrl": "abc123",
  "status": "abc123",
  "thumbnails": {},
  "updatedAt": "xyz789",
  "url": "abc123",
  "width": 123
}

ProductLocationInventory

Description

Product inventory at a specific warehouse location

Fields
Field Name Description
Product - Product
ProductVariant - ProductVariant
WarehouseArea - WarehouseArea
WarehouseBay - WarehouseBay
WarehouseBin - WarehouseBin
WarehouseLocation - WarehouseLocation
binType - String 'default' when the row's bin is the system Default bin, else null (SKU-890 1e).
createdAt - String
id - ID
isPreferred - Boolean!
lastCountDate - String
lastSyncAt - String
locationId - ID
locationPath - String
lowStockThreshold - Int
productId - ID
productVariantId - String
quantity - Int
syncErrors - JSON
syncStatus - SyncStatus
updatedAt - String
warehouseAreaId - String
warehouseBayId - String
warehouseBinId - String
warehouseLocationId - ID
Example
{
  "Product": Product,
  "ProductVariant": ProductVariant,
  "WarehouseArea": WarehouseArea,
  "WarehouseBay": WarehouseBay,
  "WarehouseBin": WarehouseBin,
  "WarehouseLocation": WarehouseLocation,
  "binType": "abc123",
  "createdAt": "xyz789",
  "id": "4",
  "isPreferred": false,
  "lastCountDate": "xyz789",
  "lastSyncAt": "xyz789",
  "locationId": 4,
  "locationPath": "abc123",
  "lowStockThreshold": 123,
  "productId": 4,
  "productVariantId": "xyz789",
  "quantity": 987,
  "syncErrors": {},
  "syncStatus": "ERROR",
  "updatedAt": "abc123",
  "warehouseAreaId": "abc123",
  "warehouseBayId": "abc123",
  "warehouseBinId": "xyz789",
  "warehouseLocationId": "4"
}

ProductOptionDefinition

Description

Product option definition with name and available values

Fields
Field Name Description
name - String
position - Int
values - [String!]
Example
{
  "name": "xyz789",
  "position": 987,
  "values": ["xyz789"]
}

ProductStatus

Values
Enum Value Description

ACTIVE

ARCHIVED

DISCONTINUED

DRAFT

INACTIVE

UNLISTED

Example
"ACTIVE"

ProductStoreConnection

Description

Product connection to external stores

Fields
Field Name Description
Organization - Organization
Product - Product
createdAt - String
externalProductId - String
externalSku - String
externalUrl - String
externalVariantId - String
id - ID
isPublished - Boolean
lastSyncAt - String
metadata - String
organizationId - ID
product - Product
productId - ID
storeConnectionId - ID
storeDescription - String
storeInventory - Int
storeName - String
storePrice - String
storeTitle - String
storeType - LocationType
surfaces - [ShopifyProductPublicationChannel!] Where the product appears on this channel: every surface, such as Online Store or Point of Sale. isIncluded is true for the ones it is on, which is what setProductChannelSurfaces sets, and isPublished is true where shoppers can see it now, which is false everywhere while the product is a draft. The IDs are the ones setProductChannelSurfaces takes. Null when the channel could not be asked; it is never an empty list standing in for an unknown answer.
syncError - String
syncStatus - SyncStatus
unlinkReason - String
unlinkedAt - String When this channel link died (SKU-1646). Null means LIVE. A connection to a product deleted on the channel is retained as evidence, so "has a connection" and "is on the channel" are different questions — every consumer deciding the second must consult this.
updatedAt - String
Example
{
  "Organization": Organization,
  "Product": Product,
  "createdAt": "xyz789",
  "externalProductId": "abc123",
  "externalSku": "xyz789",
  "externalUrl": "xyz789",
  "externalVariantId": "abc123",
  "id": 4,
  "isPublished": true,
  "lastSyncAt": "xyz789",
  "metadata": "abc123",
  "organizationId": 4,
  "product": Product,
  "productId": "4",
  "storeConnectionId": "4",
  "storeDescription": "abc123",
  "storeInventory": 987,
  "storeName": "xyz789",
  "storePrice": "abc123",
  "storeTitle": "abc123",
  "storeType": "AMAZON",
  "surfaces": [ShopifyProductPublicationChannel],
  "syncError": "abc123",
  "syncStatus": "ERROR",
  "unlinkReason": "abc123",
  "unlinkedAt": "abc123",
  "updatedAt": "abc123"
}

ProductType

Values
Enum Value Description

BUNDLE

SIMPLE

Example
"BUNDLE"

ProductVariant

Description

A sellable variant of a product (e.g., "Red / Large")

Fields
Field Name Description
Product - Product!
ProductLocationInventory - [ProductLocationInventory!] Inventory rows for this variant, scoped to the variant's organization.
PurchasableItem - PurchasableItem
allowBackorder - Boolean!
availableQuantity - Int
barcode - String
basePrice - String
calculatedCost - String Kit cost computed from component costs plus uplift. Null when nothing is known. Not the same as costPrice, which Shopify owns (SKU-1891).
calculatedCostIsPartial - Boolean calculatedCost omits at least one component with no recorded cost, so it is a lower bound.
compareAtPrice - String
costPrice - String
countryOfOrigin - String
createdAt - String!
customsDescription - String
dimensionUnit - DimensionUnit! SKU-1883: length/width/height are always returned in canonical MILLIMETRES, so this always reports MM. It will be removed; do not branch on it.
height - String
hsCode - String
id - ID!
length - String
lowStockThreshold - Int
onHandQuantity - Int Physical on-hand for simple variants; gross buildable from component on-hand (ignoring reservations) for BUNDLE variants. Distinguishes reserved-but-present stock from genuinely absent stock. Null = untracked.
option1Value - String
option2Value - String
option3Value - String
organizationId - ID!
position - Int!
primaryImage - ProductImage
primaryImageId - String
productId - ID!
provinceOfOrigin - String
purchasableItemId - ID The purchasing record for this variant, if one has been created. Null does NOT mean the variant cannot be ordered — the record is created on demand when a purchase-order line names the variant (SKU-1808).
qrCode - String
quantity - Int
requiresShipping - Boolean!
reservedQuantity - Int Units held by reservations: onHandQuantity − availableQuantity. For simple variants that is the reservation rollup; for BUNDLE variants it is the buildable kits that component reservations (any product's, for shared components) take out of on-hand. Null when either figure is unknown or the variant is untracked.
sku - String
stockStatus - StockStatus This variant's stock verdict, computed from the same predicates as the stock filters (SKU-1448). Null only when the verdict could not be computed — never a stand-in for IN_STOCK.
taxCode - String
taxable - Boolean!
title - String!
trackInventory - Boolean!
trackInventoryNeedsRestoration - Boolean! True when this variant belongs to a non-BUNDLE product AND trackInventory disagrees with trackInventoryUserSet — i.e. auto-management flipped the flag while the product was a kit, and the user has not yet confirmed/dismissed the restoration prompt.
trackInventoryUserSet - Boolean! The user's last explicit trackInventory choice. Auto-management never writes this field; surfaced so the UI can offer restoration on BUNDLE→SIMPLE conversion.
updatedAt - String!
weight - String
weightUnit - WeightUnit! SKU-1883: stored weights are always canonical GRAMS. This field is a legacy column pinned to that value and will be removed; do not branch on it.
width - String
Example
{
  "Product": Product,
  "ProductLocationInventory": [ProductLocationInventory],
  "PurchasableItem": PurchasableItem,
  "allowBackorder": true,
  "availableQuantity": 987,
  "barcode": "abc123",
  "basePrice": "abc123",
  "calculatedCost": "abc123",
  "calculatedCostIsPartial": false,
  "compareAtPrice": "abc123",
  "costPrice": "xyz789",
  "countryOfOrigin": "xyz789",
  "createdAt": "xyz789",
  "customsDescription": "xyz789",
  "dimensionUnit": "CM",
  "height": "xyz789",
  "hsCode": "xyz789",
  "id": 4,
  "length": "xyz789",
  "lowStockThreshold": 987,
  "onHandQuantity": 987,
  "option1Value": "xyz789",
  "option2Value": "abc123",
  "option3Value": "xyz789",
  "organizationId": "4",
  "position": 123,
  "primaryImage": ProductImage,
  "primaryImageId": "xyz789",
  "productId": 4,
  "provinceOfOrigin": "abc123",
  "purchasableItemId": 4,
  "qrCode": "abc123",
  "quantity": 987,
  "requiresShipping": false,
  "reservedQuantity": 987,
  "sku": "xyz789",
  "stockStatus": "ALWAYS_IN_STOCK",
  "taxCode": "abc123",
  "taxable": true,
  "title": "abc123",
  "trackInventory": true,
  "trackInventoryNeedsRestoration": false,
  "trackInventoryUserSet": false,
  "updatedAt": "xyz789",
  "weight": "xyz789",
  "weightUnit": "GRAMS",
  "width": "xyz789"
}

ProductVariantPreferredBin

Description

The preferred (home) bin for a variant at a specific warehouse location.

Fields
Field Name Description
WarehouseBin - WarehouseBin
id - ID!
preferredBinId - ID!
productVariantId - ID!
warehouseLocationId - ID!
Example
{
  "WarehouseBin": WarehouseBin,
  "id": "4",
  "preferredBinId": 4,
  "productVariantId": "4",
  "warehouseLocationId": "4"
}

ProductViewMode

Values
Enum Value Description

ALL_PRODUCTS

ALL_SKUS

BUNDLES_ONLY

SIMPLE_ONLY

Example
"ALL_PRODUCTS"

PublicKeyCredentialDescriptor

Fields
Field Name Description
id - String
transports - [String!]
type - String
Example
{
  "id": "abc123",
  "transports": ["xyz789"],
  "type": "xyz789"
}

PublicKeyCredentialParam

Fields
Field Name Description
alg - Int
type - String
Example
{"alg": 123, "type": "xyz789"}

PurchasableItem

Description

Abstraction layer for all items that can be ordered from suppliers

Fields
Field Name Description
Organization - Organization
PreferredSupplier - Supplier
ProductVariant - ProductVariant
Stationery - Stationery
createdAt - String
defaultUnitCost - String
id - ID
itemName - String Name of the item (Product name or Stationery name)
itemSku - String SKU of the item (Product SKU or Stationery SKU)
leadTimeDays - Int
minimumOrderQty - Int
organizationId - ID
preferredSupplierId - String
supplierSku - String
type - PurchasableType
updatedAt - String
Example
{
  "Organization": Organization,
  "PreferredSupplier": Supplier,
  "ProductVariant": ProductVariant,
  "Stationery": Stationery,
  "createdAt": "abc123",
  "defaultUnitCost": "xyz789",
  "id": 4,
  "itemName": "xyz789",
  "itemSku": "xyz789",
  "leadTimeDays": 987,
  "minimumOrderQty": 123,
  "organizationId": "4",
  "preferredSupplierId": "xyz789",
  "supplierSku": "xyz789",
  "type": "PRODUCT",
  "updatedAt": "abc123"
}

PurchasableType

Description

Types of items that can be purchased from suppliers

Values
Enum Value Description

PRODUCT

STATIONERY

Example
"PRODUCT"

PurchaseOrder

Description

Purchase order for ordering from suppliers

Fields
Field Name Description
CreatedBy - User! Errors once the creating user is deleted. Use CreatedByUser (nullable) and createdByUserNameSnapshot.
CreatedByUser - User The user who raised the purchase order; null once that user is deleted (the purchase order is kept). createdByUserId and the createdByUser*Snapshot fields still say who it was.
InventoryReceipts - [InventoryReceipt!]!
LastModifiedBy - User
Organization - Organization!
PurchaseOrderItems - [PurchaseOrderItem!]!
Supplier - Supplier!
WarehouseLocation - WarehouseLocation
actualDeliveryDate - String
approvedAt - String
approvedBy - String
createdAt - String!
createdByUserEmailSnapshot - String Email of the user who raised the purchase order, recorded at creation.
createdByUserId - ID!
createdByUserIdSnapshot - ID Id of the user who raised the purchase order, recorded at creation. Still set after that user is deleted.
createdByUserNameSnapshot - String Display name of the user who raised the purchase order, recorded at creation. Show it, marked as a deleted user, when CreatedByUser is null.
currency - String!
exchangeRate - String
expectedDeliveryDate - String
id - ID!
internalNotes - String
internalPoNumber - Int!
isFullyReceived - Boolean!
itemCount - Int!
lastModifiedByUserEmailSnapshot - String Email of the user who last modified the purchase order, recorded at the time.
lastModifiedByUserId - ID
lastModifiedByUserIdSnapshot - ID Id of the user who last modified the purchase order, recorded at the time. Still set after that user is deleted.
lastModifiedByUserNameSnapshot - String Display name of the user who last modified the purchase order, recorded at the time. Show it, marked as a deleted user, when LastModifiedBy is null.
notes - String
orderDate - String!
organizationId - ID!
otherCosts - String!
paymentTerms - String
pdfFileId - String Id of the stored PDF File, or null if none has been rendered yet. Durable — unlike pdfUrl.
pdfGeneratedAt - String
pdfUrl - String A download URL minted FOR THIS REQUEST from the stored PDF, or null if none is stored. It expires — open it, never store or cache it. Selecting this field costs a signing round-trip per row, so prefer pdfFileId in lists and the generatePurchaseOrderPdf mutation at the moment the user actually clicks download.
poNumber - String!
receiptCount - Int!
remainingQuantity - Int!
sendCount - Int!
sentAt - String
sentTo - String
shipToWarehouseId - ID
shippingAddress - String
shippingCity - String
shippingCost - String!
shippingCountry - String
shippingMethod - String
shippingPostalCode - String
shippingState - String
status - PurchaseOrderStatus!
subtotal - String!
supplierId - ID!
taxAmount - String!
totalCost - String!
totalQuantityOrdered - Int!
totalQuantityReceived - Int!
trackingNumber - String
trackingUrl - String
updatedAt - String!
Example
{
  "CreatedBy": User,
  "CreatedByUser": User,
  "InventoryReceipts": [InventoryReceipt],
  "LastModifiedBy": User,
  "Organization": Organization,
  "PurchaseOrderItems": [PurchaseOrderItem],
  "Supplier": Supplier,
  "WarehouseLocation": WarehouseLocation,
  "actualDeliveryDate": "xyz789",
  "approvedAt": "xyz789",
  "approvedBy": "xyz789",
  "createdAt": "abc123",
  "createdByUserEmailSnapshot": "xyz789",
  "createdByUserId": 4,
  "createdByUserIdSnapshot": "4",
  "createdByUserNameSnapshot": "abc123",
  "currency": "xyz789",
  "exchangeRate": "abc123",
  "expectedDeliveryDate": "xyz789",
  "id": 4,
  "internalNotes": "xyz789",
  "internalPoNumber": 987,
  "isFullyReceived": false,
  "itemCount": 123,
  "lastModifiedByUserEmailSnapshot": "xyz789",
  "lastModifiedByUserId": "4",
  "lastModifiedByUserIdSnapshot": "4",
  "lastModifiedByUserNameSnapshot": "abc123",
  "notes": "xyz789",
  "orderDate": "xyz789",
  "organizationId": 4,
  "otherCosts": "abc123",
  "paymentTerms": "xyz789",
  "pdfFileId": "abc123",
  "pdfGeneratedAt": "xyz789",
  "pdfUrl": "abc123",
  "poNumber": "abc123",
  "receiptCount": 987,
  "remainingQuantity": 987,
  "sendCount": 123,
  "sentAt": "xyz789",
  "sentTo": "abc123",
  "shipToWarehouseId": "4",
  "shippingAddress": "xyz789",
  "shippingCity": "abc123",
  "shippingCost": "abc123",
  "shippingCountry": "abc123",
  "shippingMethod": "abc123",
  "shippingPostalCode": "xyz789",
  "shippingState": "xyz789",
  "status": "CANCELLED",
  "subtotal": "xyz789",
  "supplierId": "4",
  "taxAmount": "xyz789",
  "totalCost": "abc123",
  "totalQuantityOrdered": 987,
  "totalQuantityReceived": 123,
  "trackingNumber": "abc123",
  "trackingUrl": "abc123",
  "updatedAt": "abc123"
}

PurchaseOrderItem

Description

Purchase order line item

Fields
Field Name Description
InventoryReceiptItems - [InventoryReceiptItem!]!
Product - Product
PurchasableItem - PurchasableItem
PurchaseOrder - PurchaseOrder!
SourcingListing - SourcingListing
createdAt - String!
id - ID!
itemName - String!
itemSku - String!
itemType - String
lineTotal - String!
notes - String
productId - ID
productVariantId - ID The exact variant this line orders, when the line was raised against one. Null for stationery and for lines predating variant-aware ordering. Read it back rather than deriving a variant from productId — see docs/development/VARIANT_RESOLUTION.md.
purchasableItemId - ID
purchaseOrderId - ID!
quantityOrdered - Int!
quantityOutstanding - Int!
quantityReceived - Int!
sourcingListingId - ID
supplierSku - String
unitCost - String!
unitCostOverridden - Boolean! True when a human typed this cost. Quantity changes then leave it alone rather than re-applying the price ladder.
updatedAt - String!
Example
{
  "InventoryReceiptItems": [InventoryReceiptItem],
  "Product": Product,
  "PurchasableItem": PurchasableItem,
  "PurchaseOrder": PurchaseOrder,
  "SourcingListing": SourcingListing,
  "createdAt": "xyz789",
  "id": 4,
  "itemName": "abc123",
  "itemSku": "xyz789",
  "itemType": "abc123",
  "lineTotal": "abc123",
  "notes": "abc123",
  "productId": "4",
  "productVariantId": "4",
  "purchasableItemId": "4",
  "purchaseOrderId": "4",
  "quantityOrdered": 987,
  "quantityOutstanding": 987,
  "quantityReceived": 987,
  "sourcingListingId": "4",
  "supplierSku": "xyz789",
  "unitCost": "abc123",
  "unitCostOverridden": true,
  "updatedAt": "xyz789"
}

PurchaseOrderItemInput

Fields
Input Field Description
notes - String
productVariantId - ID The variant being bought. Preferred over purchasableItemId — the purchasing record is created on demand if the variant has none. Exactly one of the two is required.
purchasableItemId - ID An existing purchasing record (the only way to order STATIONERY). Exactly one of this and productVariantId is required.
quantityOrdered - Int!
sourcingListingId - ID
unitCost - String!
Example
{
  "notes": "abc123",
  "productVariantId": 4,
  "purchasableItemId": 4,
  "quantityOrdered": 987,
  "sourcingListingId": 4,
  "unitCost": "xyz789"
}

PurchaseOrderStatus

Values
Enum Value Description

CANCELLED

CONFIRMED

DRAFT

PARTIALLY_RECEIVED

RECEIVED

SENT

Example
"CANCELLED"

ReceiptStatus

Values
Enum Value Description

CANCELLED

COMPLETED

DRAFT

IN_PROGRESS

Example
"CANCELLED"

RelyingParty

Fields
Field Name Description
id - String
name - String
Example
{
  "id": "abc123",
  "name": "xyz789"
}

ReorderProductImagesInput

Fields
Input Field Description
imageIds - [ID!]!
productId - ID!
Example
{"imageIds": [4], "productId": 4}

RequestProductImageUploadInput

Fields
Input Field Description
fileSize - Int! Size in bytes.
filename - String!
mimeType - String! For example image/jpeg.
productId - ID!
Example
{
  "fileSize": 987,
  "filename": "xyz789",
  "mimeType": "xyz789",
  "productId": "4"
}

ResolvedShippingService

Description

The order's resolved shipping service for display (Orders index, etc.)

Fields
Field Name Description
scope - ShippingServiceScope Domestic or international, as the carrier declares the service. Null when unknown (an unmapped checkout title, or a code the carrier does not declare).
serviceCode - String
serviceName - String
source - ResolvedShippingSource
tier - ShippingServiceTier Speed tier, as the carrier declares the service. Null when unknown. Never inferred from the service name.
Example
{
  "scope": "DOMESTIC",
  "serviceCode": "abc123",
  "serviceName": "abc123",
  "source": "ADAPTER_ALIAS",
  "tier": "ECONOMY"
}

ResolvedShippingSource

Description

MAPPING = the organization's shipping-method mapping matched the rate code or title; ADAPTER_ALIAS = a carrier adapter recognized the inbound rate code; RAW_TITLE = fell back to the order shipping method title

Values
Enum Value Description

ADAPTER_ALIAS

MAPPING

RAW_TITLE

Example
"ADAPTER_ALIAS"

RolePermission

Description

Join table linking roles to permissions

Fields
Field Name Description
Permission - Permission
Role - RoleType
createdAt - String
id - ID
permissionId - ID
roleId - ID
updatedAt - String
Example
{
  "Permission": Permission,
  "Role": RoleType,
  "createdAt": "xyz789",
  "id": "4",
  "permissionId": 4,
  "roleId": 4,
  "updatedAt": "abc123"
}

RoleType

Description

User role with associated permissions

Fields
Field Name Description
RolePermission - [RolePermission!]
TeamMember - [TeamMember!] Team memberships with this role, in the caller's organization. Requires users:read; null otherwise.
UserRole - [UserRole!] Who holds this role, in the caller's organization. Requires users:read; null otherwise.
color - String
createdAt - String
description - String
id - ID
isSystemDefined - Boolean
isSystemRole - Boolean
name - String
organizationId - String
permissions - [Permission!]
teams - [Team!]
updatedAt - String
users - [User!] Users holding this role, in the caller's organization. Requires users:read; null otherwise.
Example
{
  "RolePermission": [RolePermission],
  "TeamMember": [TeamMember],
  "UserRole": [UserRole],
  "color": "xyz789",
  "createdAt": "xyz789",
  "description": "xyz789",
  "id": "4",
  "isSystemDefined": false,
  "isSystemRole": true,
  "name": "xyz789",
  "organizationId": "abc123",
  "permissions": [Permission],
  "teams": [Team],
  "updatedAt": "abc123",
  "users": [User]
}

SKUType

Values
Enum Value Description

BUNDLE

SIMPLE

Example
"BUNDLE"

SalesChannel

Description

A sales channel connected to your organization.

Fields
Field Name Description
defaultSurfaceIds - [ID!] Where a product SKU Manager creates on this channel appears by default, as surface IDs from salesChannelSurfaces. Empty means none: a new product is on no surface until you set them with setProductChannelSurfaces. Set it in the web app under Organization, Shopify, Sync. Null when the channel has no sync settings yet.
domain - String
id - ID
isActive - Boolean
name - String
status - String CONNECTED, or REAUTH_REQUIRED when the store must be reconnected.
type - String The platform, such as SHOPIFY.
Example
{
  "defaultSurfaceIds": ["4"],
  "domain": "xyz789",
  "id": "4",
  "isActive": true,
  "name": "abc123",
  "status": "xyz789",
  "type": "xyz789"
}

SetShopifyProductPublicationsResult

Description

Result of setting a product publication (channel) state on Shopify

Fields
Field Name Description
message - String!
success - Boolean!
Example
{"message": "xyz789", "success": true}

ShippingServiceScope

Values
Enum Value Description

DOMESTIC

INTERNATIONAL

Example
"DOMESTIC"

ShippingServiceTier

Description

ECONOMY = the carrier's cheapest/slowest tier; STANDARD = its default tier; EXPRESS = any expedited tier (express, courier, time-definite)

Values
Enum Value Description

ECONOMY

EXPRESS

STANDARD

Example
"ECONOMY"

ShopifyProductPublicationChannel

Description

A product's publication state on a single sales channel

Fields
Field Name Description
isIncluded - Boolean Whether the product is on this surface, whatever its status: what setProductChannelSurfaces sets. A draft can be on a surface without being visible there yet. Null when it could not be read from the channel.
isPublished - Boolean Whether shoppers can see the product on this surface now. False on every surface while the product is a draft, including the ones it is on; use isIncluded for that.
shopifyPublicationId - ID
title - String
Example
{
  "isIncluded": false,
  "isPublished": true,
  "shopifyPublicationId": 4,
  "title": "xyz789"
}

ShopifyStorePublication

Description

A sales channel publication available on a connected Shopify store

Fields
Field Name Description
shopifyPublicationId - ID
title - String
Example
{
  "shopifyPublicationId": 4,
  "title": "abc123"
}

SourcingListing

Description

A place a product or variant can be bought from: a supplier account, or a bare URL with no supplier record.

Fields
Field Name Description
PriceBreaks - [SourcingListingPriceBreak!]!
Product - Product!
ProductVariant - ProductVariant
PurchaseOrderItems - [PurchaseOrderItem!]!
Supplier - Supplier
createdAt - String!
currency - String!
freeShippingThreshold - String
id - ID!
isActive - Boolean!
isPrimary - Boolean!
lastOrderedAt - String
lastVerifiedAt - String When someone last confirmed this price is still real.
leadTimeDays - Int
listingUrl - String
minimumOrderQuantity - Int In units, not packs.
notes - String
organizationId - ID!
packSize - Int!
productId - ID!
productVariantId - ID Null means the listing applies to the whole product.
quoteAt - SourcingQuote
Arguments
unitQuantity - Int!
shippingFee - String Null means postage was never recorded — not that it is free.
supplierId - ID
supplierProductName - String
supplierSku - String
updatedAt - String!
Example
{
  "PriceBreaks": [SourcingListingPriceBreak],
  "Product": Product,
  "ProductVariant": ProductVariant,
  "PurchaseOrderItems": [PurchaseOrderItem],
  "Supplier": Supplier,
  "createdAt": "xyz789",
  "currency": "abc123",
  "freeShippingThreshold": "abc123",
  "id": "4",
  "isActive": false,
  "isPrimary": false,
  "lastOrderedAt": "abc123",
  "lastVerifiedAt": "xyz789",
  "leadTimeDays": 123,
  "listingUrl": "xyz789",
  "minimumOrderQuantity": 987,
  "notes": "xyz789",
  "organizationId": "4",
  "packSize": 987,
  "productId": 4,
  "productVariantId": "4",
  "quoteAt": SourcingQuote,
  "shippingFee": "abc123",
  "supplierId": "4",
  "supplierProductName": "abc123",
  "supplierSku": "xyz789",
  "updatedAt": "xyz789"
}

SourcingListingPriceBreak

Description

One rung of a listing’s quantity ladder. Quantity in packs, price per pack.

Fields
Field Name Description
createdAt - String!
id - ID!
minPackQuantity - Int! Inclusive lower bound in packs: a rung at 5 applies to 5, 6, 7…
pricePerPack - String!
sourcingListingId - ID!
updatedAt - String!
Example
{
  "createdAt": "xyz789",
  "id": 4,
  "minPackQuantity": 987,
  "pricePerPack": "abc123",
  "sourcingListingId": "4",
  "updatedAt": "abc123"
}

SourcingPriceBreakInput

Fields
Input Field Description
minPackQuantity - Int!
pricePerPack - String!
Example
{
  "minPackQuantity": 123,
  "pricePerPack": "xyz789"
}

SourcingQuantityWarning

Description

Advisory conditions on a quantity. These never block an order — real purchasing has exceptions (a sample order below MOQ, a supplier who will split a pack).

Values
Enum Value Description

BELOW_MINIMUM_ORDER_QUANTITY

NOT_A_PACK_MULTIPLE

NO_PRICE_FOR_QUANTITY

Example
"BELOW_MINIMUM_ORDER_QUANTITY"

SourcingQuote

Description

What one listing costs for a given quantity, with the ladder rung and postage resolved.

Fields
Field Name Description
appliedBreakMinPackQuantity - Int
currency - String!
landedTotal - String
landedUnitCost - String Goods plus postage, per unit, amortised over this listing alone. For ranking sources — postage is charged per ORDER, so writing this to a PO line would count it once per line.
merchandiseSubtotal - String
packQuantity - Int!
pricePerPack - String
shippingFee - String Null means postage was never recorded for this listing — not that it is free.
shippingWaived - Boolean!
unitCost - String Goods only, per unit. This is what a purchase-order line stores.
unitQuantity - Int! Units actually received — the requested amount rounded up to a whole pack.
warnings - [SourcingQuantityWarning!]!
Example
{
  "appliedBreakMinPackQuantity": 123,
  "currency": "xyz789",
  "landedTotal": "xyz789",
  "landedUnitCost": "xyz789",
  "merchandiseSubtotal": "xyz789",
  "packQuantity": 123,
  "pricePerPack": "xyz789",
  "shippingFee": "xyz789",
  "shippingWaived": false,
  "unitCost": "abc123",
  "unitQuantity": 987,
  "warnings": ["BELOW_MINIMUM_ORDER_QUANTITY"]
}

Stationery

Description

Packaging material for fulfillment operations

Fields
Field Name Description
costPerUnit - String
createdAt - String!
dimensionsDisplay - String Formatted dimensions for display
heightMm - Int
id - ID!
isActive - Boolean!
isLowStock - Boolean! True if quantity is at or below reorder point
labelHeightMm - Int
labelWidthMm - Int
labelsPerRoll - Int
lengthMm - Int
name - String!
notes - String
organizationId - ID!
qrCode - String
quantity - Int!
reorderPoint - Int
reorderQuantity - Int
sku - String
supplier - Supplier
supplierId - ID
supplierSku - String
type - PackagingType!
updatedAt - String!
warehouseLocation - WarehouseLocation
warehouseLocationId - ID
weightGrams - Int
widthMm - Int
Example
{
  "costPerUnit": "abc123",
  "createdAt": "abc123",
  "dimensionsDisplay": "abc123",
  "heightMm": 123,
  "id": "4",
  "isActive": true,
  "isLowStock": true,
  "labelHeightMm": 123,
  "labelWidthMm": 123,
  "labelsPerRoll": 123,
  "lengthMm": 123,
  "name": "abc123",
  "notes": "abc123",
  "organizationId": 4,
  "qrCode": "xyz789",
  "quantity": 123,
  "reorderPoint": 987,
  "reorderQuantity": 123,
  "sku": "xyz789",
  "supplier": Supplier,
  "supplierId": 4,
  "supplierSku": "xyz789",
  "type": "BOX",
  "updatedAt": "abc123",
  "warehouseLocation": WarehouseLocation,
  "warehouseLocationId": "4",
  "weightGrams": 987,
  "widthMm": 987
}

StationeryLocationStock

Description

Stock levels for stationery at a specific warehouse location

Fields
Field Name Description
availableQuantity - Int
createdAt - String
id - ID
lastCountDate - String
lastRestockDate - String
maxStock - Int
notes - String
organizationId - ID
quantity - Int
reorderPoint - Int
reservedQuantity - Int
stationeryType - StationeryType
stationeryTypeId - ID
updatedAt - String
warehouseLocation - WarehouseLocation
warehouseLocationId - ID
Example
{
  "availableQuantity": 987,
  "createdAt": "xyz789",
  "id": 4,
  "lastCountDate": "xyz789",
  "lastRestockDate": "xyz789",
  "maxStock": 123,
  "notes": "xyz789",
  "organizationId": "4",
  "quantity": 123,
  "reorderPoint": 987,
  "reservedQuantity": 123,
  "stationeryType": StationeryType,
  "stationeryTypeId": "4",
  "updatedAt": "abc123",
  "warehouseLocation": WarehouseLocation,
  "warehouseLocationId": 4
}

StationeryType

Description

Stationery or packing material type

Fields
Field Name Description
category - String
cost - String
createdAt - String
description - String
dimensions - JSON
id - ID
isActive - Boolean
locationStock - [StationeryLocationStock!]
organizationId - ID
sku - String
supplier - String
supplierSku - String
title - String
totalAvailableQuantity - Int
totalQuantity - Int
updatedAt - String
weight - Float
Example
{
  "category": "abc123",
  "cost": "abc123",
  "createdAt": "abc123",
  "description": "abc123",
  "dimensions": {},
  "id": 4,
  "isActive": true,
  "locationStock": [StationeryLocationStock],
  "organizationId": "4",
  "sku": "abc123",
  "supplier": "xyz789",
  "supplierSku": "xyz789",
  "title": "abc123",
  "totalAvailableQuantity": 987,
  "totalQuantity": 123,
  "updatedAt": "xyz789",
  "weight": 987.65
}

StepStatus

Description

Status of an individual fulfillment step

Values
Enum Value Description

COMPLETED

FAILED

IN_PROGRESS

PENDING

SKIPPED

Example
"COMPLETED"

StockStatus

Description

Server-computed stock verdict, identical to the stock filters' buckets

Values
Enum Value Description

ALWAYS_IN_STOCK

Nothing here tracks inventory (e.g. a service or an untracked kit).

IN_STOCK

Tracked, available, and above every threshold.

LOW_STOCK

At least one tracked (variant, warehouse) rollup is at or below its low-stock threshold, with availability still above zero.

OUT_OF_STOCK

At least one tracked variant has no availability anywhere.
Example
"ALWAYS_IN_STOCK"

StoreLocation

Description

Available store location from connected platforms

Fields
Field Name Description
address - String
city - String
country - String
id - String
isActive - Boolean
metadata - JSON
name - String
postalCode - String
state - String
storeConnectionId - ID
storeType - StoreType
Example
{
  "address": "abc123",
  "city": "abc123",
  "country": "xyz789",
  "id": "abc123",
  "isActive": true,
  "metadata": {},
  "name": "xyz789",
  "postalCode": "abc123",
  "state": "xyz789",
  "storeConnectionId": 4,
  "storeType": "AMAZON"
}

StoreLocationFetchStatus

Description

Whether the live Shopify lookup succeeded for one store.

Values
Enum Value Description

OK

UNAVAILABLE

Example
"OK"

StoreType

Values
Enum Value Description

AMAZON

CUSTOM

EBAY

MAGENTO

SHOPIFY

WOOCOMMERCE

Example
"AMAZON"

String

Description

The String scalar type represents textual data, represented as UTF-8 character sequences. The String type is most often used by GraphQL to represent free-form human-readable text.

Example
"abc123"

SupplementalItemInput

Fields
Input Field Description
orderLineItemId - ID Required for RE_SEND
productId - ID Required for COMPLIMENTARY
quantity - Int!
type - SupplementalItemType!
variantId - ID Required for COMPLIMENTARY
Example
{
  "orderLineItemId": 4,
  "productId": "4",
  "quantity": 123,
  "type": "COMPLIMENTARY",
  "variantId": "4"
}

SupplementalItemType

Description

Type of item in a supplemental fulfillment

Values
Enum Value Description

COMPLIMENTARY

RE_SEND

Example
"COMPLIMENTARY"

Supplier

Description

Supplier with contact and purchasing information

Fields
Field Name Description
Organization - Organization!
PurchaseOrders - [PurchaseOrder!]!
SourcingListings - [SourcingListing!]!
address - String
city - String
code - String
contactEmail - String
contactName - String
contactPhone - String
country - String
countryCode - String
createdAt - String!
currency - String!
description - String
id - ID!
isActive - Boolean!
leadTimeDays - Int
metadata - String
minimumOrderValue - String
name - String!
notes - String
organizationId - ID!
paymentTerms - String
postalCode - String
productCount - Int
purchaseOrderCount - Int
purchasePortalUrl - String
rating - Int
shippingMethod - String
state - String
updatedAt - String!
website - String
Example
{
  "Organization": Organization,
  "PurchaseOrders": [PurchaseOrder],
  "SourcingListings": [SourcingListing],
  "address": "abc123",
  "city": "abc123",
  "code": "abc123",
  "contactEmail": "abc123",
  "contactName": "abc123",
  "contactPhone": "abc123",
  "country": "abc123",
  "countryCode": "xyz789",
  "createdAt": "xyz789",
  "currency": "abc123",
  "description": "abc123",
  "id": 4,
  "isActive": true,
  "leadTimeDays": 987,
  "metadata": "abc123",
  "minimumOrderValue": "xyz789",
  "name": "abc123",
  "notes": "abc123",
  "organizationId": "4",
  "paymentTerms": "abc123",
  "postalCode": "xyz789",
  "productCount": 987,
  "purchaseOrderCount": 987,
  "purchasePortalUrl": "xyz789",
  "rating": 123,
  "shippingMethod": "xyz789",
  "state": "abc123",
  "updatedAt": "xyz789",
  "website": "abc123"
}

SyncStatus

Values
Enum Value Description

ERROR

IN_PROGRESS

PARTIAL

PENDING

SUCCESS

SYNCED

Example
"ERROR"

Team

Description

Team for organizing users

Fields
Field Name Description
DefaultRole - RoleType
Organization - Organization
TeamMember - [TeamMember!]
color - String
createdAt - String
defaultPermissions - JSON
defaultRole - RoleType
defaultRoleId - String
description - String
id - ID
isActive - Boolean
memberCount - Int
members - [TeamMember!]
name - String
organizationId - ID
permissions - [Permission!]
roleCount - Int
roles - [RoleType!]
updatedAt - String
Example
{
  "DefaultRole": RoleType,
  "Organization": Organization,
  "TeamMember": [TeamMember],
  "color": "abc123",
  "createdAt": "abc123",
  "defaultPermissions": {},
  "defaultRole": RoleType,
  "defaultRoleId": "abc123",
  "description": "abc123",
  "id": 4,
  "isActive": true,
  "memberCount": 987,
  "members": [TeamMember],
  "name": "abc123",
  "organizationId": 4,
  "permissions": [Permission],
  "roleCount": 987,
  "roles": [RoleType],
  "updatedAt": "xyz789"
}

TeamMember

Description

Team member relationship

Fields
Field Name Description
Role - RoleType
Team - Team
User - User
currentRole - RoleType
currentRoleId - String
id - ID
joinedAt - String
roleTypeId - String
team - Team
teamId - ID
user - User
userId - ID
Example
{
  "Role": RoleType,
  "Team": Team,
  "User": User,
  "currentRole": RoleType,
  "currentRoleId": "xyz789",
  "id": "4",
  "joinedAt": "abc123",
  "roleTypeId": "xyz789",
  "team": Team,
  "teamId": "4",
  "user": User,
  "userId": 4
}

UnlinkedStoreLocation

Description

A Shopify location with no active warehouse link. Fetched live from Shopify; never persisted.

Fields
Field Name Description
hasActiveInventory - Boolean
id - String
isActive - Boolean
isFulfillmentService - Boolean
name - String
Example
{
  "hasActiveInventory": false,
  "id": "abc123",
  "isActive": false,
  "isFulfillmentService": true,
  "name": "xyz789"
}

UnlinkedStoreLocationsResult

Fields
Field Name Description
stores - [UnlinkedStoreLocationsStore!]
Example
{"stores": [UnlinkedStoreLocationsStore]}

UnlinkedStoreLocationsStore

Fields
Field Name Description
error - String
locations - [UnlinkedStoreLocation!]
shopDomain - String
status - StoreLocationFetchStatus
storeId - ID
Example
{
  "error": "xyz789",
  "locations": [UnlinkedStoreLocation],
  "shopDomain": "xyz789",
  "status": "OK",
  "storeId": 4
}

UpdateInventoryInput

Fields
Input Field Description
expectedWarehouseOnHand - Int
locationId - ID
notes - String
organizationId - ID!
originStoreId - ID
productId - ID!
productVariantId - ID!
quantity - Int!
reason - String
source - MovementSource
warehouseAreaId - ID
warehouseBayId - ID
warehouseBinId - ID
warehouseLocationId - ID!
Example
{
  "expectedWarehouseOnHand": 987,
  "locationId": 4,
  "notes": "abc123",
  "organizationId": 4,
  "originStoreId": "4",
  "productId": "4",
  "productVariantId": 4,
  "quantity": 987,
  "reason": "xyz789",
  "source": "AMAZON",
  "warehouseAreaId": 4,
  "warehouseBayId": 4,
  "warehouseBinId": 4,
  "warehouseLocationId": "4"
}

UpdateInventoryReceiptInput

Fields
Input Field Description
discrepancyNotes - String
notes - String
receivedDate - String
status - String
Example
{
  "discrepancyNotes": "xyz789",
  "notes": "xyz789",
  "receivedDate": "abc123",
  "status": "xyz789"
}

UpdateOrderInput

Fields
Input Field Description
cancelReason - String
cancelStaffNote - String
cancelledAt - String
capturedAmount - String
carrier - String
closedAt - String
confirmed - Boolean
currency - String
currentShippingCost - String
customerId - ID
customerIp - String
customerNotes - String
deliveredAt - String
discountAmount - String
discountCodes - JSON
email - String
exchangeRate - String
fulfilledAt - String
fulfillmentGroups - [FulfillmentGroupInput!]
fulfillmentStatus - String
importCharges - ImportChargesFactInput
internalNotes - String
lastSyncedAt - String
lineItems - [LineItemInput!]
metadata - JSON
notifyCustomerOnRefund - Boolean
orderDate - String
orderNumber - String
paidAt - String
paymentGateway - String
paymentMethod - String
paymentStatus - String
phone - String
presentmentCapturedAmount - String
presentmentCurrency - String
presentmentCurrentShippingCost - String
presentmentDiscountAmount - String
presentmentRefundedAmount - String
presentmentShippingCost - String
presentmentShippingDiscountAmount - String
presentmentSubtotal - String
presentmentTaxAmount - String
presentmentTotalAmount - String
processedAt - String
refundedAmount - String
refunds - JSON
restockOnCancel - Boolean
riskAssessmentDetails - JSON
riskLevel - String
riskRecommendation - String
shippingAddress - AddressInput
shippingCost - String
shippingDiscountAmount - String
shippingLines - JSON
shippingMethod - String
shopifyUpdatedAt - String
status - String
subtotal - String
syncError - String
syncStatus - String
tags - [String!]
taxAmount - String
taxLines - [OrderTaxLineInput!]
taxesIncluded - Boolean
totalAmount - String
trackingNumber - String
trackingUrl - String
transactions - JSON
Example
{
  "cancelReason": "xyz789",
  "cancelStaffNote": "xyz789",
  "cancelledAt": "abc123",
  "capturedAmount": "xyz789",
  "carrier": "xyz789",
  "closedAt": "abc123",
  "confirmed": true,
  "currency": "abc123",
  "currentShippingCost": "xyz789",
  "customerId": 4,
  "customerIp": "xyz789",
  "customerNotes": "abc123",
  "deliveredAt": "abc123",
  "discountAmount": "abc123",
  "discountCodes": {},
  "email": "abc123",
  "exchangeRate": "abc123",
  "fulfilledAt": "abc123",
  "fulfillmentGroups": [FulfillmentGroupInput],
  "fulfillmentStatus": "abc123",
  "importCharges": ImportChargesFactInput,
  "internalNotes": "xyz789",
  "lastSyncedAt": "xyz789",
  "lineItems": [LineItemInput],
  "metadata": {},
  "notifyCustomerOnRefund": false,
  "orderDate": "abc123",
  "orderNumber": "abc123",
  "paidAt": "abc123",
  "paymentGateway": "abc123",
  "paymentMethod": "abc123",
  "paymentStatus": "abc123",
  "phone": "abc123",
  "presentmentCapturedAmount": "xyz789",
  "presentmentCurrency": "abc123",
  "presentmentCurrentShippingCost": "abc123",
  "presentmentDiscountAmount": "abc123",
  "presentmentRefundedAmount": "abc123",
  "presentmentShippingCost": "xyz789",
  "presentmentShippingDiscountAmount": "xyz789",
  "presentmentSubtotal": "xyz789",
  "presentmentTaxAmount": "abc123",
  "presentmentTotalAmount": "xyz789",
  "processedAt": "xyz789",
  "refundedAmount": "xyz789",
  "refunds": {},
  "restockOnCancel": false,
  "riskAssessmentDetails": {},
  "riskLevel": "abc123",
  "riskRecommendation": "xyz789",
  "shippingAddress": AddressInput,
  "shippingCost": "xyz789",
  "shippingDiscountAmount": "abc123",
  "shippingLines": {},
  "shippingMethod": "abc123",
  "shopifyUpdatedAt": "xyz789",
  "status": "abc123",
  "subtotal": "xyz789",
  "syncError": "abc123",
  "syncStatus": "xyz789",
  "tags": ["abc123"],
  "taxAmount": "xyz789",
  "taxLines": [OrderTaxLineInput],
  "taxesIncluded": false,
  "totalAmount": "xyz789",
  "trackingNumber": "abc123",
  "trackingUrl": "abc123",
  "transactions": {}
}

UpdateProductImageInput

Fields
Input Field Description
altText - String
clearFields - [String!]
fileId - String
imageId - ID!
shopifyImageId - String
shopifyImageLegacyId - String
shopifyPosition - Int
sortOrder - Int
status - String
Example
{
  "altText": "xyz789",
  "clearFields": ["xyz789"],
  "fileId": "xyz789",
  "imageId": 4,
  "shopifyImageId": "xyz789",
  "shopifyImageLegacyId": "xyz789",
  "shopifyPosition": 123,
  "sortOrder": 987,
  "status": "abc123"
}

UpdateProductInput

Description

Prices, weight and dimensions are decimal strings, such as "19.95" or "18", so no precision is lost; a JSON number is refused. Weight is in grams and dimensions in millimetres.

Fields
Input Field Description
allowBackorder - Boolean
barcode - String
basePrice - String
brand - String
bundleItems - [ProductBundleItemInput!]
bundlePricing - String
category - String
compareAtPrice - String
costPrice - String
countryOfOrigin - String
customsDescription - String
description - String
dimensionUnit - String
handle - String
hasOnlyDefaultVariant - Boolean
height - String
hsCode - String
isGiftCard - Boolean
length - String
lowStockThreshold - Int
metaDescription - String
metaTitle - String
option1Name - String
option1Values - [String!]
option2Name - String
option2Values - [String!]
option3Name - String
option3Values - [String!]
organizationId - ID!
primaryImageId - ID
productType - String
provinceOfOrigin - String
publishedAt - String
quantity - Int
requiresShipping - Boolean
reservedQuantity - Int
sku - String
slug - String
status - String
supplierId - ID
tags - [String!]
taxCode - String
taxable - Boolean
title - String
trackInventory - Boolean
type - String
weight - String
weightUnit - String
width - String
Example
{
  "allowBackorder": false,
  "barcode": "abc123",
  "basePrice": "abc123",
  "brand": "abc123",
  "bundleItems": [ProductBundleItemInput],
  "bundlePricing": "xyz789",
  "category": "xyz789",
  "compareAtPrice": "abc123",
  "costPrice": "abc123",
  "countryOfOrigin": "xyz789",
  "customsDescription": "abc123",
  "description": "abc123",
  "dimensionUnit": "abc123",
  "handle": "abc123",
  "hasOnlyDefaultVariant": true,
  "height": "abc123",
  "hsCode": "abc123",
  "isGiftCard": true,
  "length": "abc123",
  "lowStockThreshold": 123,
  "metaDescription": "abc123",
  "metaTitle": "xyz789",
  "option1Name": "xyz789",
  "option1Values": ["abc123"],
  "option2Name": "abc123",
  "option2Values": ["xyz789"],
  "option3Name": "abc123",
  "option3Values": ["xyz789"],
  "organizationId": "4",
  "primaryImageId": 4,
  "productType": "abc123",
  "provinceOfOrigin": "abc123",
  "publishedAt": "xyz789",
  "quantity": 123,
  "requiresShipping": false,
  "reservedQuantity": 123,
  "sku": "abc123",
  "slug": "abc123",
  "status": "xyz789",
  "supplierId": "4",
  "tags": ["xyz789"],
  "taxCode": "abc123",
  "taxable": true,
  "title": "xyz789",
  "trackInventory": true,
  "type": "xyz789",
  "weight": "abc123",
  "weightUnit": "abc123",
  "width": "xyz789"
}

UpdateProductVariantInput

Fields
Input Field Description
allowBackorder - Boolean
barcode - String
basePrice - String
compareAtPrice - String
costPrice - String
countryOfOrigin - String
customsDescription - String
dimensionUnit - String
height - String
hsCode - String
length - String
lowStockThreshold - Int
option1Value - String
option2Value - String
option3Value - String
organizationId - ID!
position - Int
primaryImageId - String
provinceOfOrigin - String
quantity - Int
requiresShipping - Boolean
sku - String
taxCode - String
taxable - Boolean
title - String
trackInventory - Boolean
weight - String
weightUnit - String
width - String
Example
{
  "allowBackorder": true,
  "barcode": "abc123",
  "basePrice": "xyz789",
  "compareAtPrice": "xyz789",
  "costPrice": "abc123",
  "countryOfOrigin": "abc123",
  "customsDescription": "xyz789",
  "dimensionUnit": "xyz789",
  "height": "xyz789",
  "hsCode": "xyz789",
  "length": "abc123",
  "lowStockThreshold": 987,
  "option1Value": "xyz789",
  "option2Value": "xyz789",
  "option3Value": "xyz789",
  "organizationId": 4,
  "position": 123,
  "primaryImageId": "xyz789",
  "provinceOfOrigin": "xyz789",
  "quantity": 987,
  "requiresShipping": true,
  "sku": "abc123",
  "taxCode": "xyz789",
  "taxable": false,
  "title": "xyz789",
  "trackInventory": false,
  "weight": "xyz789",
  "weightUnit": "xyz789",
  "width": "abc123"
}

UpdatePurchaseOrderInput

Fields
Input Field Description
actualDeliveryDate - String
clearFields - [String!] Field names to explicitly set to NULL. Sending a null value is a no-op, so clearing requires naming the field here. Unrecognised names are rejected rather than ignored, since a misspelling would otherwise report success while changing nothing. Clearable fields: shippingAddress, shippingCity, shippingState, shippingPostalCode, shippingCountry, paymentTerms, shippingMethod.
expectedDeliveryDate - String
internalNotes - String
items - [UpdatePurchaseOrderLineInput!] The COMPLETE set of lines for this order. Lines with an id are updated, lines without are created, and existing lines absent from the list are deleted. Omit the field to leave lines untouched.
notes - String
otherCosts - String
paymentTerms - String This order's payment terms, free text. Null/omitted keeps the stored value; blank is stored as null; name it in clearFields to clear it.
shipToWarehouseId - ID
shippingAddress - String
shippingCity - String
shippingCost - String
shippingCountry - String
shippingMethod - String This order's shipping method, free text. Null/omitted keeps the stored value; blank is stored as null; name it in clearFields to clear it.
shippingPostalCode - String
shippingState - String
status - String
subtotal - String
taxAmount - String
trackingNumber - String
trackingUrl - String
Example
{
  "actualDeliveryDate": "xyz789",
  "clearFields": ["xyz789"],
  "expectedDeliveryDate": "xyz789",
  "internalNotes": "abc123",
  "items": [UpdatePurchaseOrderLineInput],
  "notes": "xyz789",
  "otherCosts": "abc123",
  "paymentTerms": "abc123",
  "shipToWarehouseId": 4,
  "shippingAddress": "xyz789",
  "shippingCity": "abc123",
  "shippingCost": "abc123",
  "shippingCountry": "xyz789",
  "shippingMethod": "xyz789",
  "shippingPostalCode": "abc123",
  "shippingState": "abc123",
  "status": "xyz789",
  "subtotal": "xyz789",
  "taxAmount": "abc123",
  "trackingNumber": "abc123",
  "trackingUrl": "xyz789"
}

UpdatePurchaseOrderItemInput

Fields
Input Field Description
notes - String
quantityOrdered - Int
unitCost - String
Example
{
  "notes": "xyz789",
  "quantityOrdered": 123,
  "unitCost": "abc123"
}

UpdatePurchaseOrderLineInput

Fields
Input Field Description
id - ID Existing line to update. Omit to create a new line.
notes - String
productVariantId - ID The variant being bought. Preferred over purchasableItemId — the purchasing record is created on demand if the variant has none.
purchasableItemId - ID An existing purchasing record. Creating a line requires this or productVariantId; the item snapshot (SKU, name, product, variant) is derived server-side.
quantityOrdered - Int!
sourcingListingId - ID
unitCost - String!
Example
{
  "id": 4,
  "notes": "xyz789",
  "productVariantId": 4,
  "purchasableItemId": "4",
  "quantityOrdered": 987,
  "sourcingListingId": 4,
  "unitCost": "xyz789"
}

UpdateReceiptItemInput

Fields
Input Field Description
batchNumber - String
binLocation - String
expiryDate - String
lotNumber - String
notes - String
quantityDamaged - Int
quantityReceived - Int
quantityRejected - Int
unitCost - String
varianceReason - String
warehouseBinId - ID
Example
{
  "batchNumber": "abc123",
  "binLocation": "xyz789",
  "expiryDate": "xyz789",
  "lotNumber": "xyz789",
  "notes": "xyz789",
  "quantityDamaged": 987,
  "quantityReceived": 987,
  "quantityRejected": 987,
  "unitCost": "abc123",
  "varianceReason": "abc123",
  "warehouseBinId": 4
}

UpdateSourcingListingInput

Fields
Input Field Description
clearFields - [String!] Field names to explicitly set to NULL. Sending a null value is a no-op, so clearing requires naming the field here. Unrecognised names are rejected rather than ignored, since a misspelling would otherwise report success while changing nothing. Clearable fields: supplierId, productVariantId, listingUrl, supplierSku, supplierProductName, leadTimeDays, minimumOrderQuantity, shippingFee, freeShippingThreshold, notes, lastVerifiedAt.
currency - String ISO 4217 code. Omit (or null) to keep the stored currency; any other value must be a currency code.
freeShippingThreshold - String
isActive - Boolean
isPrimary - Boolean
lastVerifiedAt - String
leadTimeDays - Int
listingUrl - String
minimumOrderQuantity - Int
notes - String
packSize - Int
priceBreaks - [SourcingPriceBreakInput!]
productVariantId - ID
shippingFee - String
supplierId - ID
supplierProductName - String
supplierSku - String
Example
{
  "clearFields": ["abc123"],
  "currency": "xyz789",
  "freeShippingThreshold": "abc123",
  "isActive": true,
  "isPrimary": false,
  "lastVerifiedAt": "abc123",
  "leadTimeDays": 123,
  "listingUrl": "abc123",
  "minimumOrderQuantity": 123,
  "notes": "xyz789",
  "packSize": 987,
  "priceBreaks": [SourcingPriceBreakInput],
  "productVariantId": "4",
  "shippingFee": "xyz789",
  "supplierId": "4",
  "supplierProductName": "abc123",
  "supplierSku": "abc123"
}

UpdateSupplementalFulfillmentInput

Fields
Input Field Description
carrier - String Carrier connection ID
declaredWeight - Float Package weight in KG
height - Float Package height in cm
items - [SupplementalItemInput!] Replace the package items with exactly this list. Omit to leave items unchanged.
length - Float Package length in cm
packageId - ID!
reason - String
scaleWeight - Float Scale-measured weight in KG
serviceCode - String Carrier service code
serviceName - String Carrier service display name
stationeryType - String Stationery/packaging type name
stationeryTypeId - ID Stationery record ID
width - Float Package width in cm
Example
{
  "carrier": "abc123",
  "declaredWeight": 987.65,
  "height": 123.45,
  "items": [SupplementalItemInput],
  "length": 123.45,
  "packageId": "4",
  "reason": "xyz789",
  "scaleWeight": 123.45,
  "serviceCode": "xyz789",
  "serviceName": "abc123",
  "stationeryType": "abc123",
  "stationeryTypeId": 4,
  "width": 123.45
}

UpdateSupplierInput

Fields
Input Field Description
address - String
city - String
code - String
contactEmail - String
contactName - String
contactPhone - String
country - String
countryCode - String
currency - String ISO 4217 code. Omit (or null) to keep the stored currency; any other value must be a currency code.
description - String
isActive - Boolean
leadTimeDays - Int
minimumOrderValue - String
name - String
notes - String
paymentTerms - String
postalCode - String
purchasePortalUrl - String
rating - Int
shippingMethod - String
state - String
website - String
Example
{
  "address": "abc123",
  "city": "xyz789",
  "code": "abc123",
  "contactEmail": "xyz789",
  "contactName": "xyz789",
  "contactPhone": "xyz789",
  "country": "abc123",
  "countryCode": "xyz789",
  "currency": "abc123",
  "description": "abc123",
  "isActive": false,
  "leadTimeDays": 123,
  "minimumOrderValue": "xyz789",
  "name": "abc123",
  "notes": "abc123",
  "paymentTerms": "xyz789",
  "postalCode": "abc123",
  "purchasePortalUrl": "abc123",
  "rating": 987,
  "shippingMethod": "xyz789",
  "state": "xyz789",
  "website": "xyz789"
}

UpdateWarehouseHierarchyLabelsInput

Fields
Input Field Description
areaLabel - String
bayLabel - String
binLabel - String
id - ID!
rowLabel - String
shelfLabel - String
Example
{
  "areaLabel": "abc123",
  "bayLabel": "abc123",
  "binLabel": "xyz789",
  "id": 4,
  "rowLabel": "abc123",
  "shelfLabel": "abc123"
}

UploadRequest

Description

Presigned upload request for direct browser upload to Spaces

Fields
Field Name Description
expiresAt - String Upload URL expiration timestamp (ISO 8601)
fields - JSON Form fields to include in upload POST request
uploadId - ID Unique upload identifier
url - String Presigned POST URL for direct browser upload
Example
{
  "expiresAt": "xyz789",
  "fields": {},
  "uploadId": 4,
  "url": "abc123"
}

UploadResult

Description

Result of upload confirmation and processing

Fields
Field Name Description
error - String
fileId - ID
imageId - ID The product image confirmProductImageUpload added. Null from any other upload.
success - Boolean
url - String
Example
{
  "error": "abc123",
  "fileId": 4,
  "imageId": "4",
  "success": true,
  "url": "xyz789"
}

User

Description

User account. Its id, names, email, avatar, isActive and organizationId are visible to anyone who can reach the user; every other field is restricted to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey.

Fields
Field Name Description
Organization - Organization Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
Passkey - [Passkey!] Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
TeamMember - [TeamMember!] Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
UserPermission - [UserPermission!] Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
UserRole - [UserRole!] Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
authMethod - String How this user signed in to the current session (password, passkey, or mfa). Only known for the session making the request, so null for any other user. Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
avatarFile - File
createdAt - String Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
currentRoles - [RoleType!] Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
directPermissions - [Permission!] Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
email - String
emailVerified - Boolean Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
firstName - String
id - ID!
isActive - Boolean
language - String Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
lastLoginAt - String Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
lastName - String
locale - String Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
mfaEnabled - Boolean Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
organization - Organization Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
organizationId - ID
passkeys - [Passkey!] Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
pendingEmail - String An address an administrator asked to change this account to, waiting for the user to confirm it. email stays the sign-in address until then. Null when no change is pending. Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
pendingEmailExpiresAt - String When the confirmation link for pendingEmail stops working (ISO 8601). Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
personalSessionTimeoutHours - Int Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
phoneNumber - String Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
preferences - JSON Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
principalType - PrincipalType Type of principal - USER, PLATFORM_ADMIN, SERVICE, or AUTOMATION. Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
profilePicture - String
role - String Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
teamMemberships - [TeamMember!] Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
teams - [Team!] Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
timezone - String Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
tokenVersion - Int Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
updatedAt - String Restricted: visible to the user themself, a holder of users:read in their organization, or a platform admin signed in with a passkey; null for anyone else.
Example
{
  "Organization": Organization,
  "Passkey": [Passkey],
  "TeamMember": [TeamMember],
  "UserPermission": [UserPermission],
  "UserRole": [UserRole],
  "authMethod": "xyz789",
  "avatarFile": File,
  "createdAt": "abc123",
  "currentRoles": [RoleType],
  "directPermissions": [Permission],
  "email": "xyz789",
  "emailVerified": true,
  "firstName": "xyz789",
  "id": "4",
  "isActive": true,
  "language": "xyz789",
  "lastLoginAt": "xyz789",
  "lastName": "xyz789",
  "locale": "abc123",
  "mfaEnabled": false,
  "organization": Organization,
  "organizationId": "4",
  "passkeys": [Passkey],
  "pendingEmail": "xyz789",
  "pendingEmailExpiresAt": "abc123",
  "personalSessionTimeoutHours": 987,
  "phoneNumber": "xyz789",
  "preferences": {},
  "principalType": "AUTOMATION",
  "profilePicture": "abc123",
  "role": "abc123",
  "teamMemberships": [TeamMember],
  "teams": [Team],
  "timezone": "abc123",
  "tokenVersion": 123,
  "updatedAt": "abc123"
}

UserPermission

Description

Join table linking users to permissions

Fields
Field Name Description
Permission - Permission
User - User
assignedAt - String
assignedBy - String
id - ID
permissionId - ID
userId - ID
Example
{
  "Permission": Permission,
  "User": User,
  "assignedAt": "xyz789",
  "assignedBy": "abc123",
  "id": "4",
  "permissionId": 4,
  "userId": 4
}

UserRole

Description

Join table linking users to roles

Fields
Field Name Description
Role - RoleType
User - User
assignedAt - String
id - ID
roleId - ID
userId - ID
Example
{
  "Role": RoleType,
  "User": User,
  "assignedAt": "xyz789",
  "id": 4,
  "roleId": "4",
  "userId": "4"
}

VelocityClass

Values
Enum Value Description

A

B

C

Dead

Example
"A"

VerificationRequest

Fields
Field Name Description
canRequestNewLink - Boolean True when this failure was an expired link that can be re-issued, so the client can offer a "send me a new link" action. Null when not applicable.
code - String Why the request was refused, when there is a machine-readable reason: STEP_UP_REQUIRED, STEP_UP_INVALID or STEP_UP_UNAVAILABLE from requestEmailChange; RECOVERY_PAUSED from requestPasswordChange and confirmPasswordReset during the 72 hours after an administrator changed the email. Null otherwise.
message - String
success - Boolean
Example
{
  "canRequestNewLink": true,
  "code": "abc123",
  "message": "xyz789",
  "success": false
}

WarehouseArea

Description

Logical area within a warehouse location

Fields
Field Name Description
bays - [WarehouseBay!]
color - String
createdAt - String!
description - String
id - ID!
isActive - Boolean!
isObstacle - Boolean!
length - Float
level - Int!
name - String!
organizationId - ID!
pickSide - [PickSide!]
rows - [WarehouseRow!]
startX - Float
startY - Float
updatedAt - String!
warehouseLocation - WarehouseLocation
warehouseLocationId - ID!
width - Float
Example
{
  "bays": [WarehouseBay],
  "color": "abc123",
  "createdAt": "xyz789",
  "description": "abc123",
  "id": "4",
  "isActive": true,
  "isObstacle": true,
  "length": 123.45,
  "level": 987,
  "name": "abc123",
  "organizationId": 4,
  "pickSide": ["EAST"],
  "rows": [WarehouseRow],
  "startX": 987.65,
  "startY": 123.45,
  "updatedAt": "xyz789",
  "warehouseLocation": WarehouseLocation,
  "warehouseLocationId": 4,
  "width": 987.65
}

WarehouseBay

Description

Bay of racking — the frame that carries shelves (tiers)

Fields
Field Name Description
color - String
createdAt - String!
description - String
height - Float
id - ID!
isActive - Boolean!
isObstacle - Boolean!
isSystem - Boolean!
length - Float
level - Int
name - String!
numLevels - Int!
organizationId - ID!
pickSide - [PickSide!]
shelves - [WarehouseShelf!]
startX - Float
startY - Float
updatedAt - String!
warehouseArea - WarehouseArea
warehouseAreaId - ID
warehouseLocationId - ID
warehouseRow - WarehouseRow
warehouseRowId - ID
width - Float
Example
{
  "color": "abc123",
  "createdAt": "xyz789",
  "description": "xyz789",
  "height": 123.45,
  "id": "4",
  "isActive": false,
  "isObstacle": false,
  "isSystem": true,
  "length": 123.45,
  "level": 987,
  "name": "xyz789",
  "numLevels": 987,
  "organizationId": "4",
  "pickSide": ["EAST"],
  "shelves": [WarehouseShelf],
  "startX": 987.65,
  "startY": 987.65,
  "updatedAt": "abc123",
  "warehouseArea": WarehouseArea,
  "warehouseAreaId": "4",
  "warehouseLocationId": "4",
  "warehouseRow": WarehouseRow,
  "warehouseRowId": 4,
  "width": 987.65
}

WarehouseBin

Description

Bin within a warehouse shelf

Fields
Field Name Description
barcode - String
color - String
createdAt - String!
currentStock - Int!
description - String
height - Float
id - ID!
isActive - Boolean!
isObstacle - Boolean!
isSystem - Boolean!
length - Float
locationPath - String
maxCapacity - Int
name - String!
organizationId - ID!
productLocationInventory - [ProductLocationInventory!]
startX - Float
startY - Float
updatedAt - String!
warehouseShelf - WarehouseShelf
warehouseShelfId - ID!
width - Float
Example
{
  "barcode": "xyz789",
  "color": "abc123",
  "createdAt": "xyz789",
  "currentStock": 123,
  "description": "xyz789",
  "height": 987.65,
  "id": 4,
  "isActive": true,
  "isObstacle": false,
  "isSystem": true,
  "length": 123.45,
  "locationPath": "abc123",
  "maxCapacity": 123,
  "name": "abc123",
  "organizationId": "4",
  "productLocationInventory": [ProductLocationInventory],
  "startX": 123.45,
  "startY": 123.45,
  "updatedAt": "abc123",
  "warehouseShelf": WarehouseShelf,
  "warehouseShelfId": 4,
  "width": 987.65
}

WarehouseLocation

Description

Physical warehouse location with areas, shelves, and bins

Fields
Field Name Description
address - String
areaLabel - String!
areas - [WarehouseArea!]
bayLabel - String!
binLabel - String!
binNamingPattern - String Optional pattern for auto-generated bin names. Supported tokens: {area_seq}, {row_seq}, {bay_seq}, {shelf_seq}, {bin_seq}, {level}, {position}. {level} is a legacy alias of {shelf_seq}. Null triggers "Bin N" fallback.
city - String
contactEmail - String
contactName - String
contactPhone - String
country - String
countryCode - String
createdAt - String
defaultBayNumLevels - Int!
description - String
id - ID!
isActive - Boolean
isPrimary - Boolean
labelReturnAddressType - LabelAddressType
labelSenderAddressType - LabelAddressType
mailingAddress - Address
metadata - JSON
name - String!
organizationId - ID
physicalAddress - Address
postalCode - String
rowLabel - String!
shelfLabel - String!
showOnContactPage - Boolean
state - String
stationeryStock - [StationeryLocationStock!]
storeConnections - [WarehouseStoreConnection!]
updatedAt - String
Example
{
  "address": "abc123",
  "areaLabel": "xyz789",
  "areas": [WarehouseArea],
  "bayLabel": "xyz789",
  "binLabel": "xyz789",
  "binNamingPattern": "xyz789",
  "city": "xyz789",
  "contactEmail": "abc123",
  "contactName": "xyz789",
  "contactPhone": "xyz789",
  "country": "xyz789",
  "countryCode": "xyz789",
  "createdAt": "xyz789",
  "defaultBayNumLevels": 123,
  "description": "xyz789",
  "id": 4,
  "isActive": false,
  "isPrimary": true,
  "labelReturnAddressType": "MAILING",
  "labelSenderAddressType": "MAILING",
  "mailingAddress": Address,
  "metadata": {},
  "name": "xyz789",
  "organizationId": "4",
  "physicalAddress": Address,
  "postalCode": "xyz789",
  "rowLabel": "xyz789",
  "shelfLabel": "abc123",
  "showOnContactPage": false,
  "state": "xyz789",
  "stationeryStock": [StationeryLocationStock],
  "storeConnections": [WarehouseStoreConnection],
  "updatedAt": "abc123"
}

WarehouseRow

Description

Row of racking within a warehouse area, or standing directly on the floor

Fields
Field Name Description
bays - [WarehouseBay!]
color - String
createdAt - String!
description - String
id - ID!
isActive - Boolean!
isObstacle - Boolean!
isSystem - Boolean!
length - Float
level - Int
name - String!
organizationId - ID!
pickSide - [PickSide!]
startX - Float
startY - Float
updatedAt - String!
warehouseArea - WarehouseArea
warehouseAreaId - ID
warehouseLocationId - ID
width - Float
Example
{
  "bays": [WarehouseBay],
  "color": "abc123",
  "createdAt": "xyz789",
  "description": "xyz789",
  "id": 4,
  "isActive": false,
  "isObstacle": false,
  "isSystem": true,
  "length": 123.45,
  "level": 987,
  "name": "abc123",
  "organizationId": 4,
  "pickSide": ["EAST"],
  "startX": 123.45,
  "startY": 123.45,
  "updatedAt": "xyz789",
  "warehouseArea": WarehouseArea,
  "warehouseAreaId": 4,
  "warehouseLocationId": 4,
  "width": 987.65
}

WarehouseShelf

Description

Shelf (tier) within a bay

Fields
Field Name Description
bins - [WarehouseBin!]
color - String
createdAt - String!
description - String
height - Float
id - ID!
isActive - Boolean!
isSystem - Boolean!
level - Int!
name - String!
organizationId - ID!
updatedAt - String!
warehouseBay - WarehouseBay
warehouseBayId - ID!
Example
{
  "bins": [WarehouseBin],
  "color": "abc123",
  "createdAt": "abc123",
  "description": "abc123",
  "height": 123.45,
  "id": 4,
  "isActive": true,
  "isSystem": true,
  "level": 123,
  "name": "abc123",
  "organizationId": 4,
  "updatedAt": "xyz789",
  "warehouseBay": WarehouseBay,
  "warehouseBayId": "4"
}

WarehouseStoreConnection

Description

Connection between warehouse location and external store

Fields
Field Name Description
createdAt - String
externalLocationId - String
externalLocationName - String
fulfillOrders - Boolean
id - ID
isActive - Boolean
metadata - JSON
organizationId - ID
priority - Int
storeConnectionId - String
storeType - StoreType
syncInventory - Boolean
updatedAt - String
warehouseLocation - WarehouseLocation
warehouseLocationId - ID
Example
{
  "createdAt": "xyz789",
  "externalLocationId": "xyz789",
  "externalLocationName": "abc123",
  "fulfillOrders": true,
  "id": "4",
  "isActive": false,
  "metadata": {},
  "organizationId": "4",
  "priority": 123,
  "storeConnectionId": "xyz789",
  "storeType": "AMAZON",
  "syncInventory": false,
  "updatedAt": "abc123",
  "warehouseLocation": WarehouseLocation,
  "warehouseLocationId": "4"
}

WeightStatus

Description

Scale reading status as reported by the desktop agent

Values
Enum Value Description

ERROR

Scale reported an error or is unreadable

OVERWEIGHT

Weight exceeds scale capacity

STABLE

Weight is stable and reliable

UNSTABLE

Weight is fluctuating (motion detected)
Example
"ERROR"

WeightUnit

Values
Enum Value Description

GRAMS

KILOGRAMS

OUNCES

POUNDS

Example
"GRAMS"