Contents
On this page
Booking Form Options - Plugixa Car Rental
GET /plugixa-car-rental/v1/public/options
Everything a booking front end needs before the visitor types anything: the locations, payment methods, booking rules, extras and custom fields.
Public: no sign-in and no nonce. Needs the Booking form app on. Rate limited to 300 requests an hour per visitor address: see Public routes.
Request
GET https://your-site.example/wp-json/plugixa-car-rental/v1/public/options
Responses
200 OK. data holds the form’s options.
{
"success": true,
"data": {
"locations": [
{
"id": 1,
"name": "Paris Gare de Lyon",
"city": "Paris",
"address": "20 Boulevard Diderot",
"allows_pickup": true,
"allows_return": true,
"opening_hours": {
"mon": [
{
"open": "08:00",
"close": "19:00"
}
],
"tue": [
{
"open": "08:00",
"close": "19:00"
}
],
"wed": [
{
"open": "08:00",
"close": "19:00"
}
],
"thu": [
{
"open": "08:00",
"close": "19:00"
}
],
"fri": [
{
"open": "08:00",
"close": "19:00"
}
],
"sat": [
{
"open": "09:00",
"close": "12:30"
},
{
"open": "14:00",
"close": "18:00"
}
],
"sun": []
},
"after_hours": true
}
],
"gateways": [
{
"id": "pay_at_pickup",
"label": "Pay at pickup",
"description": "Pay at the desk when you collect the car.",
"online": false
}
],
"rules": {
"min_lead_minutes": 120,
"max_horizon_days": 365,
"min_rental_days": 1,
"max_rental_days": 90,
"hold_minutes": 15
},
"currency": "EUR",
"today": "2026-11-12",
"extras": [
{
"id": 3,
"name": "Child seat",
"description": "For children from 9 to 18 kg.",
"price": 8.0,
"price_type": "per_day",
"max_total": 40.0,
"max_quantity": 2
}
],
"fields": [
{
"key": "flight_number",
"label": "Flight number",
"type": "text",
"options": [],
"help": "If you arrive by plane.",
"required": false
}
],
"coupons": true
}
}
| Field | Type | Meaning |
|---|---|---|
data.locations[] |
object[] |
Published locations that take pickups, returns or both: id, name, city, address, allows_pickup, allows_return, opening_hours, and after_hours, whether a time outside the hours is possible for a fee |
data.gateways[] |
object[] |
Payment methods switched on: id (send it as payment_method at checkout), label, description, online |
data.rules |
object |
The booking rules: shortest notice in minutes, furthest horizon in days, shortest and longest rental in days, and how long a hold lasts in minutes |
data.currency |
string |
The site’s currency |
data.today |
string |
Today on the site’s calendar, YYYY-MM-DD |
data.extras[] |
object[] |
With the Extras app: published extras to offer |
data.fields[] |
object[] |
With the Custom fields app: your questions, each with key, label, type (text, textarea, number, date, select, checkbox), options, help, required. Answer them at checkout |
data.coupons |
boolean |
With the Coupons app: true, offer a coupon field |
data.driver_age |
object |
With Pro and the Driver age app: {min, max}. Send driver_age with every search and hold |
data.search_fields[] |
object[] |
With Pro and the Delivery and collection app, when it can price: the delivery_address and collection_address fields to offer |
data.currencies |
string[] |
With Pro and the Multi-currency app: currency codes a visitor may choose |
Every public response carries Cache-Control: no-store.
Errors
Plus the errors every endpoint can return.
Examples
curl -s "https://your-site.example/wp-json/plugixa-car-rental/v1/public/options"
<?php
$ch = curl_init('https://your-site.example/wp-json/plugixa-car-rental/v1/public/options');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
const response = await fetch('https://your-site.example/wp-json/plugixa-car-rental/v1/public/options');
const { data } = await response.json();
Quick Links
Share