Skip to main content
GET
/
v1
/
assets
List assets
curl --request GET \
  --url https://api-eu.flexportal.io/v1/assets \
  --header 'Authorization: Bearer <token>' \
  --header 'Tenant-ID: <tenant-id>'
{
  "assets": [
    {
      "serialNumber": "<string>",
      "tenantId": "<string>",
      "sku": "<string>",
      "productName": "<string>",
      "status": "available",
      "createdAt": "<string>",
      "updatedAt": "<string>",
      "productId": "<string>",
      "productImageUrl": "<string>",
      "variantId": "<string>",
      "location": "<string>",
      "customerId": "<string>",
      "rentalId": "<string>",
      "notes": "<string>"
    }
  ],
  "count": 123,
  "limit": 123,
  "hasMore": true,
  "nextCursor": "<string>"
}

Overview

Retrieve a paginated list of assets with optional filtering and sorting. Assets represent individual physical units tracked by serial number—laptops, phones, e-bikes, or any subscribable equipment in your inventory.

Asset Lifecycle

Created → Available → Rented Out → [Returned] → Available/Unavailable
Assets move through statuses as they’re used in subscriptions:
StatusDescription
availableReady to be assigned to a subscription
rented_outCurrently assigned to an active subscription
unavailableNot available (sold, damaged, retired, etc.)

Common Use Cases

Inventory Management

Track all assets across locations and statuses

Order Fulfillment

Find available assets to assign to new subscriptions

Asset Tracking

Monitor which devices are rented and to whom

Reporting

Generate inventory reports by status, SKU, or location

Filtering Assets

# Get available assets ready for orders
GET /v1/assets?status=available

# Get assets by SKU
GET /v1/assets?sku=MACBOOK-PRO-16-M3

# Get rented assets for a specific customer
GET /v1/assets?status=rented_out&customerId=cust_abc123

# Get assets linked to a subscription
GET /v1/assets?rentalId=sub_xyz789

# Combine filters
GET /v1/assets?status=available&sku=MACBOOK-PRO-16-M3&sortBy=createdAt

Sorting Options

FieldDescription
createdAtAsset creation date (default)
updatedAtLast modification date
serialNumberSerial number alphabetically
statusAsset status
skuProduct SKU

Response Fields

Key fields in each asset object:
FieldDescription
serialNumberUnique asset identifier
skuProduct variant SKU
productNameProduct display name
statusCurrent asset status
acquisitionCostYour cost to acquire this asset
customerIdCurrent customer (if assigned)
rentalIdCurrent subscription ID (if assigned)
locationPhysical location (warehouse, etc.)
notesAdditional notes
createdAtISO 8601 timestamp

Example: Find Available Assets for Order

async function findAssetsForOrder(sku, quantity) {
  const { assets } = await listAssets({
    sku,
    status: 'available',
    limit: quantity
  });

  if (assets.length < quantity) {
    return {
      available: assets.length,
      needed: quantity,
      shortfall: quantity - assets.length,
      message: `Only ${assets.length} of ${quantity} ${sku} available`
    };
  }

  return {
    assets: assets.map(a => a.serialNumber),
    ready: true
  };
}

Example: Inventory Summary

async function getInventorySummary() {
  const [available, rentedOut, unavailable] = await Promise.all([
    listAssets({ status: 'available', limit: 1 }),
    listAssets({ status: 'rented_out', limit: 1 }),
    listAssets({ status: 'unavailable', limit: 1 })
  ]);

  return {
    available: available.count,
    rentedOut: rentedOut.count,
    unavailable: unavailable.count,
    total: available.count + rentedOut.count + unavailable.count
  };
}

Authorizations

Authorization
string
header
required

API key obtained from FlexPortal dashboard

Headers

Tenant-ID
string
required

Your tenant identifier

Query Parameters

limit
string

Items per page (default: 50, max: 100)

startAfter
string

Cursor for pagination

status
string

Filter by status (available, rented_out, returned, sold, unavailable)

sku
string

Filter by product SKU

customerId
string

Filter by customer ID

rentalId
string

Filter by rental ID

Response

200 - application/json

List of assets

assets
object[]
required
count
number
required
limit
number
required
hasMore
boolean
required
nextCursor
string | null
required