Guides & product help — fjellride.se

Back to Integrations & API

Products, locations, and catalog data

How to query products, manage inventory, and work with locations through the API.

Working with your product catalog

The products and locations APIs let you manage your rental catalog programmatically — listing products, checking availability, syncing with external systems, or building custom storefronts.

Products

List products

Fetch a paginated list of products for your organization:

bash
curl -X GET "https://api.fjellride.se/api/v1/products?page=1&pageSize=10" \
  -H "x-api-key: fjr_your_api_key_here"

Query parameters:

ParameterTypeDescription
pagenumberPage number (default: 1)
pageSizenumberItems per page (default: 25)
searchstringSearch by product name
typestring[]Filter by type: RENTAL, PRODUCT, SERVICE
isVisibleboolean[]Filter by visibility
featuredboolean[]Filter by featured status
sortBystringSort field
sortOrderstringasc or desc

Response:

json
{
  "data": [
    {
      "id": 42,
      "name": "Mountain Bike — Adult",
      "description": "High-quality hardtail mountain bike, suitable for trails and gravel roads.",
      "type": "RENTAL",
      "category": "Bikes",
      "basePrice": 35000,
      "extraDayPrice": 25000,
      "pricing": "DAILY",
      "isVisible": true,
      "featured": false,
      "tracksInventory": true,
      "taxRate": 25,
      "image": "https://cdn.fjellride.se/products/mtb-adult.jpg",
      "images": [],
      "tags": ["summer", "popular"],
      "pricingRules": [
        { "days": 3, "price": 30000 },
        { "days": 7, "price": 22000 }
      ],
      "createdAt": "2026-01-10T08:00:00.000Z",
      "updatedAt": "2026-03-20T14:30:00.000Z"
    }
  ],
  "total": 24,
  "page": 1,
  "pageSize": 10
}

Get a single product

bash
curl -X GET "https://api.fjellride.se/api/v1/products/42" \
  -H "x-api-key: fjr_your_api_key_here"

Product fields

FieldTypeDescription
idnumberUnique product ID
namestringCustomer-facing product name
descriptionstringProduct description
typeenumRENTAL, PRODUCT, or SERVICE
categorystringProduct category name
pricingenumDAILY or FLAT
basePricenumberBase price in minor units (cents/ören)
extraDayPricenumberPrice per additional day (daily pricing only)
pricingRulesarrayTier pricing: { days, price } pairs
isVisiblebooleanShown on storefront
featuredbooleanHighlighted on storefront
tracksInventorybooleanWhether inventory units are tracked individually
taxRatenumberTax rate percentage
imagestringPrimary image URL
imagesarrayAdditional image URLs (up to 5)
tagsarrayInternal tags for organization

Create a product

bash
curl -X POST "https://api.fjellride.se/api/v1/products" \
  -H "x-api-key: fjr_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Kayak — Single",
    "description": "Stable sit-on-top kayak for lakes and calm waters.",
    "type": "RENTAL",
    "category": "Watersports",
    "pricing": "DAILY",
    "basePrice": 45000,
    "extraDayPrice": 35000,
    "isVisible": true,
    "tracksInventory": true
  }'

Check availability

Find products available for a given date range and location:

bash
curl -X POST "https://api.fjellride.se/api/v1/products/available" \
  -H "x-api-key: fjr_your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "startDate": "2026-07-01",
    "endDate": "2026-07-05",
    "locationId": 1
  }'

Inventory

Products with tracksInventory: true have individual inventory units. Each unit has a status and can be assigned to a location.

List inventory for a product

bash
curl -X GET "https://api.fjellride.se/api/v1/products/42/inventory" \
  -H "x-api-key: fjr_your_api_key_here"

Inventory statuses:

StatusMeaning
AVAILABLEReady for booking
RESERVEDAllocated to a booking
IN_USECurrently with a customer
MAINTENANCETemporarily unavailable
INACTIVERetired or not offered

Locations

List locations

bash
curl -X GET "https://api.fjellride.se/api/v1/locations" \
  -H "x-api-key: fjr_your_api_key_here"

Response:

json
{
  "data": [
    {
      "id": 1,
      "name": "Mountain Lodge",
      "address": "Fjällvägen 12",
      "city": "Ã…re",
      "zip": "837 51",
      "country": "SE",
      "isDefault": true,
      "openingHours": [
        { "day": 1, "open": "08:00", "close": "18:00" },
        { "day": 2, "open": "08:00", "close": "18:00" }
      ],
      "createdAt": "2026-01-05T09:00:00.000Z"
    }
  ]
}

Location fields

FieldTypeDescription
idnumberUnique location ID
namestringLocation name
addressstringStreet address
citystringCity
zipstringPostal code
countrystringCountry code (ISO 3166-1 alpha-2)
isDefaultbooleanDefault location for new bookings
openingHoursarray{ day (0-6), open, close } — day 0 is Sunday
minimumNoticeHoursnumberHours of advance notice required
allowLateDropoffbooleanWhether late returns are accepted
lateDropoffFeenumberFee for late returns (minor units)

Public endpoints

If you're building a customer-facing storefront, there are public equivalents for products and locations that don't require authentication:

  • GET /api/v1/public/products — visible products for a storefront
  • GET /api/v1/public/locations — public location information

These endpoints resolve the organization from the request hostname or the x-organization-slug header.

Next steps