Loksa.camp
Fleet Operators & Aggregators

Grow your fleet with loksa.camp

List your entire fleet on loksa.camp, sync availability automatically via iCal, and receive real-time booking notifications. Partners get a dedicated account with a loksa.camp login — no separate system to learn.

Partnership Tiers

Standard
  • API access
  • Bulk listing import (up to 100 vehicles)
  • iCal availability sync
  • booking.created webhook
Preferred
  • Everything in Standard
  • Up to 500 vehicles
  • Reduced commission rate
  • Dedicated account manager
  • Priority listing placement
Exclusive
  • Everything in Preferred
  • Unlimited vehicles
  • White-label profile page
  • Custom commission terms
  • Co-marketing opportunities

Getting Access

When your application is approved, loksa.camp creates a partner account for you — a standard loksa.camp login (role: partner) linked to your company profile. You log in at loksa.camp/login just like any other user.

For automated integrations (bulk listing import, CI/CD pipelines), your account also has an optional API key. Ask your account manager to generate one. The raw key is shown once — store it securely.

# Use your API key for programmatic calls only
X-API-Key: lk_live_xxxxxxxxxxxxxxxxxxxx

Bulk Listing Import

POST up to 500 listings in a single request. Existing listings are identified by source_platform + external_id and updated in place. New listings are created as inactive and queued for review.

Endpoint

POST https://loksa.camp/api/admin/listings/import

Rate limit

5 requests per minute per API key. Exceeding the limit returns 429 Too Many Requests.

Payload schema

FieldTypeRequiredNotes
namestringYesVehicle display name
makestringYese.g. Volkswagen
modelstringYese.g. California
yearnumberYesManufacturing year
price_per_daynumberYesEUR, min 1, max 10 000
locationstringYesHuman-readable location string
source_platformstringYesYour system identifier, e.g. myfleetsystem
external_idstringYesYour vehicle ID; used for upserts
descriptionstringNoFull description (max 5 000 chars)
sleeping_capacitynumberNoDefault 2
cleaning_feenumberNoEUR, default 0
security_depositnumberNoEUR, default 0
imagesstring[]NoPublic HTTPS image URLs, max 20
featuresstring[]NoFeature labels, max 50
ical_feed_urlstring (url)NoiCal availability feed
categoryenumNovan | comfort | comfort_plus | family | family_plus | lux | vip
fuel_typeenumNodiesel | petrol | electric | hybrid
gearboxenumNomanual | automatic
latitude / longitudenumberNoGPS coordinates

Example

curl -X POST https://loksa.camp/api/admin/listings/import \
  -H "Content-Type: application/json" \
  -H "X-API-Key: lk_live_xxxxxxxxxxxxxxxxxxxx" \
  -d '{
  "dry_run": false,
  "rows": [
    {
      "name": "VW California 2022",
      "make": "Volkswagen",
      "model": "California",
      "year": 2022,
      "price_per_day": 120,
      "location": "Tallinn, Estonia",
      "source_platform": "myfleetsystem",
      "external_id": "VEH-00042",
      "sleeping_capacity": 2,
      "category": "van",
      "fuel_type": "diesel",
      "gearbox": "automatic",
      "ical_feed_url": "https://myfleetsystem.example.com/ical/VEH-00042.ics",
      "images": [
        "https://cdn.myfleetsystem.example.com/VEH-00042/1.jpg"
      ],
      "features": ["WiFi", "Bike rack", "Solar panel"]
    }
  ]
}'

Response

{
  "dry_run": false,
  "total": 1,
  "created": 1,
  "updated": 0,
  "skipped": 0,
  "errors": 0
}

iCal Availability Sync

Provide an ical_feed_url per listing. loksa.camp fetches each feed periodically and blocks dates that are marked busy in your calendar.

  • Must be a valid webcal:// or https:// URL returning text/calendar.
  • Events with STATUS:CONFIRMED or STATUS:BUSY (or no status) are treated as blocked.
  • Cancelled events (STATUS:CANCELLED) are treated as available.
  • Feed timezone should match the vehicle's physical location or specify TZID in events.

Booking Webhook

After a renter's payment is confirmed, loksa.camp sends a signed POST request to your Webhook URL (configured by your account manager).

Event: booking.created

POST https://your-endpoint.example.com/webhooks/loksa
Content-Type: application/json
X-Loksa-Event: booking.created
X-Loksa-Signature: sha256=<hmac-hex>

{
  "event": "booking.created",
  "booking_id": "bk_01hxxxxxxxxxxxxxxxx",
  "camper_external_id": "VEH-00042",
  "start_date": "2025-07-10",
  "end_date": "2025-07-17",
  "total_amount": 990.00,
  "host_payout": 864.00,
  "status": "awaiting_host"
}

Verifying the signature

Compute HMAC-SHA256(raw_body, webhook_secret) and compare with the hex value after sha256= in the header.

// Node.js example
import crypto from 'crypto'

function verifySignature(rawBody: Buffer, secret: string, header: string) {
  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(rawBody)
    .digest('hex')
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(header))
}

Ready to list your fleet?

Send us a message and we'll set up your partner account, agree on commission terms, and get your first listings live.

Apply to become a partner