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
- ✓API access
- ✓Bulk listing import (up to 100 vehicles)
- ✓iCal availability sync
- ✓booking.created webhook
- ✓Everything in Standard
- ✓Up to 500 vehicles
- ✓Reduced commission rate
- ✓Dedicated account manager
- ✓Priority listing placement
- ✓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_xxxxxxxxxxxxxxxxxxxxBulk 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/importRate limit
5 requests per minute per API key. Exceeding the limit returns 429 Too Many Requests.
Payload schema
| Field | Type | Required | Notes |
|---|---|---|---|
| name | string | Yes | Vehicle display name |
| make | string | Yes | e.g. Volkswagen |
| model | string | Yes | e.g. California |
| year | number | Yes | Manufacturing year |
| price_per_day | number | Yes | EUR, min 1, max 10 000 |
| location | string | Yes | Human-readable location string |
| source_platform | string | Yes | Your system identifier, e.g. myfleetsystem |
| external_id | string | Yes | Your vehicle ID; used for upserts |
| description | string | No | Full description (max 5 000 chars) |
| sleeping_capacity | number | No | Default 2 |
| cleaning_fee | number | No | EUR, default 0 |
| security_deposit | number | No | EUR, default 0 |
| images | string[] | No | Public HTTPS image URLs, max 20 |
| features | string[] | No | Feature labels, max 50 |
| ical_feed_url | string (url) | No | iCal availability feed |
| category | enum | No | van | comfort | comfort_plus | family | family_plus | lux | vip |
| fuel_type | enum | No | diesel | petrol | electric | hybrid |
| gearbox | enum | No | manual | automatic |
| latitude / longitude | number | No | GPS 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://orhttps://URL returningtext/calendar. - Events with
STATUS:CONFIRMEDorSTATUS: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
TZIDin 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