Renta Docs

Storefront API

Public-facing endpoints for browsing inventory, checking availability, and creating bookings.

The Storefront API provides public-facing endpoints designed for customer-facing applications. These endpoints work with publishable keys (renta_pk_...) and are safe to call from browsers and mobile apps.

All storefront endpoints use the storefront:read scope. They return only public data — no admin info, internal notes, or other tenants' data.

Get Shop Profile

GET /v1/storefront/shop

Returns the public profile of the tenant's rental shop.

import { RentaStorefront } from '@renta/sdk/storefront';

const storefront = new RentaStorefront({
  apiKey: 'renta_pk_live_...',
});

const shop = await storefront.shop();
console.log(shop.name);
console.log(shop.pickup_locations);
curl https://api.getrenta.io/v1/storefront/shop \
  -H "Authorization: Bearer renta_pk_live_..."

Response:

{
  "id": "tenant_abc",
  "slug": "mountain-adventures",
  "name": "Mountain Adventures",
  "brand_settings": {
    "primary_color": "#C4572A",
    "logo_url": "https://storage.getrenta.io/..."
  },
  "pickup_locations": [
    {
      "id": "loc_main",
      "name": "Main Shop",
      "address": "123 Mountain Road, Moab, UT 84532",
      "phone": "+1-435-555-0123",
      "hours": {
        "mon": "8:00-18:00",
        "tue": "8:00-18:00",
        "wed": "8:00-18:00",
        "thu": "8:00-18:00",
        "fri": "8:00-18:00",
        "sat": "7:00-19:00",
        "sun": "9:00-17:00"
      }
    }
  ]
}

Browse Inventory

GET /v1/storefront/inventory

Returns available fleet items with calculated pricing for a date range. Combines availability checking and pricing in one call.

Query Parameters:

ParameterTypeRequiredDescription
pickup_datestring✅Pickup date (ISO 8601)
return_datestring✅Return date (ISO 8601)
half_dayboolean—Force half-day pricing
const inventory = await storefront.inventory({
  pickup_date: '2026-07-01T09:00:00Z',
  return_date: '2026-07-03T17:00:00Z',
});

for (const item of inventory.data) {
  console.log(`${item.name} — $${(item.calculated_price / 100).toFixed(2)}`);
  console.log(`  Available: ${item.available}`);
}
curl "https://api.getrenta.io/v1/storefront/inventory?pickup_date=2026-07-01T09:00:00Z&return_date=2026-07-03T17:00:00Z" \
  -H "Authorization: Bearer renta_pk_live_..."

Response:

{
  "data": [
    {
      "id": "fi_abc123",
      "name": "Trail Blazer 500",
      "slug": "trail-blazer-500",
      "description": "High-performance electric mountain bike",
      "category": {
        "id": "cat_xyz",
        "name": "E-Bikes",
        "slug": "e-bikes"
      },
      "photos": [{"url": "https://storage.getrenta.io/..."}],
      "skill_level": "intermediate",
      "available": true,
      "calculated_price": 10000,
      "deposit_amount": 15000,
      "price_breakdown": {
        "days": 2,
        "rate_per_day": 5000,
        "base_price": 10000,
        "seasonal_adjustment": 0
      }
    }
  ],
  "categories": [
    {"id": "cat_xyz", "name": "E-Bikes", "slug": "e-bikes", "item_count": 5}
  ]
}

Create Storefront Booking

POST /v1/storefront/book

Create a booking from the customer-facing storefront flow. Requires a Stripe payment intent.

Body Parameters:

ParameterTypeRequiredDescription
payment_intent_idstring✅Stripe PaymentIntent ID
pickup_datestring✅Pickup date (ISO 8601)
return_datestring✅Return date (ISO 8601)
line_itemsarray✅Array of {fleet_item_id, quantity?}
addonsarray—Array of {addon_id, quantity}
pickup_location_idstring—Pickup location ID
half_dayboolean—Half-day rental
coupon_codestring—Coupon code. Requires one of customer_id, customer_email, or customer_phone
customer_idstring—Existing customer ID (creates or matches a guest if omitted)
customer_emailstring—Guest email. Matches an existing customer with this email, otherwise creates one
customer_phonestring—Guest phone. Used only when customer_email is omitted
customer_namestring—Guest name for a newly created customer (defaults to Guest Customer)
const result = await storefront.book({
  payment_intent_id: 'pi_stripe_123',
  pickup_date: '2026-07-01T09:00:00Z',
  return_date: '2026-07-03T17:00:00Z',
  line_items: [{ fleet_item_id: 'fi_abc123' }],
  addons: [{ addon_id: 'addon_helmet', quantity: 1 }],
  pickup_location_id: 'loc_main',
});

console.log(`Booking ID: ${result.id}`);
curl -X POST https://api.getrenta.io/v1/storefront/book \
  -H "Authorization: Bearer renta_pk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "payment_intent_id": "pi_stripe_123",
    "pickup_date": "2026-07-01T09:00:00Z",
    "return_date": "2026-07-03T17:00:00Z",
    "line_items": [{"fleet_item_id": "fi_abc123"}],
    "addons": [{"addon_id": "addon_helmet", "quantity": 1}],
    "pickup_location_id": "loc_main"
  }'

The storefront booking endpoint creates a guest customer if customer_id is omitted. Send customer_email (or customer_phone) whenever you have it: the booking is then matched to the existing customer with that email instead of adding another guest row, which keeps repeat renters on one record.

Coupons need an identified customer. Per-customer coupon limits are counted against a customer record, so a request with coupon_code must carry customer_id, customer_email, or customer_phone. Without one, the request is rejected with 400 invalid_request and no booking is created. Requests with no coupon are unaffected and still work with no customer fields at all.

Storefront Auth

The storefront includes optional customer authentication for returning customers.

Request Auth Code

POST /api/storefront/auth/request

Sends a one-time code to the customer's email.

Verify Auth Code

POST /api/storefront/auth/verify

Verifies the code and returns a session token.

Get Waiver Template

GET /api/sign/template

Legacy (still supported): GET /api/storefront/waiver-template

Returns the waiver template for the customer to sign during booking.

Storefront API | Renta Docs