API Rivelys
Prenotate autisti privati Rivelys dal vostro sito, dal vostro software di prenotazione o dalla vostra piattaforma: il prezzo è fisso e noto prima di prenotare, e il dispatch Rivelys segue ogni corsa fino alla fine. L’API è aperta gratuitamente a tutti i partner verificati.
Iniziare
- Create un account partner su rivelys.com e fate convalidare il vostro fascicolo.
- Nel vostro spazio, scheda API, create una chiave di test (
rv_test_…): le prenotazioni sono simulate e mai inviate agli autisti. - Quando la vostra integrazione funziona, create una chiave reale (
rv_live_…): le prenotazioni diventano vere corse.
Indirizzo dell’API: https://api.rivelys.com/v1. Inviate la chiave nell’intestazione Authorization: Bearer rv_…. Gli scambi avvengono in JSON (UTF-8), le date in formato ISO 8601. Tenete la chiave sul vostro server: non mettetela mai in una pagina visibile ai vostri clienti.
curl https://api.rivelys.com/v1 -H "Authorization: Bearer rv_test_••••••••"Le regole
- Prezzo fisso. Rivelys calcola il prezzo di ogni corsa: la media dei prezzi degli autisti disponibili e compatibili (ognuno con le proprie tariffe), senza il più alto né il più basso; con troppo pochi autisti, la griglia di riferimento del tipo di veicolo. Richiedetelo con
POST /v1/quotes, poi prenotate rinviando questo prezzo inexpected_price: se nel frattempo è cambiato, la prenotazione viene rifiutata con il nuovo prezzo (codiceprice_changed). Una volta prenotata, la corsa mantiene il suo prezzo. - Preavviso minimo. La presa in carico deve avvenire almeno 48 ore dopo la richiesta (valore attuale restituito in
min_notice_hours). - Pagamento, a scelta del partner:
agency_card(la vostra carta registrata nel vostro spazio, addebitata corsa per corsa),monthly_invoice(fattura mensile delle corse concluse, pagata con addebito SEPA o bonifico; attivata da Rivelys per il vostro account, con un tetto massimo) oppureclient_link(un link viene inviato al passeggero, che conferma e paga l’autista con carta o in contanti). - Conferma. Il primo autista verificato e compatibile che prende la corsa la ottiene. Se paga il partner, la corsa è allora confermata; con
client_link, il passeggero la conferma sul suo link. - Mai annullata automaticamente. Se nessun autista prende la corsa, non viene annullata: il dispatch Rivelys viene avvisato e trova una soluzione.
- Annullamento da parte del partner. Gratuito finché la corsa non è confermata (
POST /v1/bookings/{id}/cancel). Dopo, contattate il dispatch Rivelys. - Limite. 60 richieste al minuto per indirizzo IP.
Ottenere un prezzo
POST /v1/quotes: stessi campi di una prenotazione (passeggero e pagamento sono facoltativi). Non viene prenotato nulla.
curl https://api.rivelys.com/v1/quotes \
-H "Authorization: Bearer rv_test_••••••••" \
-H "Content-Type: application/json" \
-d '{
"service": "transfer",
"pickup_at": "2026-12-20T14:30:00+01:00",
"pickup_address": "Aéroport Nice Côte d'Azur, Terminal 2",
"dropoff_address": "Hôtel de Paris, Monaco",
"passengers": 2,
"vehicle_type": "Business"
}'Risposta:
{
"price": 92,
"currency": "EUR",
"price_basis": "average",
"distance_km": 28,
"duration_min": 40,
"vehicle_type": "Business",
"min_notice_hours": 48
}
price_basis: average (media degli autisti disponibili) oppure reference_grid (griglia di riferimento).
Prenotare
POST /v1/bookings: crea la prenotazione (risposta 201). Con un external_ref già inviato, viene restituita la prenotazione esistente (risposta 200): potete riprovare senza rischio di doppioni dopo un’interruzione di rete.
curl https://api.rivelys.com/v1/bookings \
-H "Authorization: Bearer rv_test_••••••••" \
-H "Content-Type: application/json" \
-d '{
"external_ref": "AG-2026-00042",
"service": "transfer",
"pickup_at": "2026-12-20T14:30:00+01:00",
"pickup_address": "Aéroport Nice Côte d'Azur, Terminal 2",
"dropoff_address": "Hôtel de Paris, Monaco",
"flight_number": "AF7300",
"passengers": 2,
"luggage_hold": 2,
"vehicle_type": "Business",
"passenger": { "name": "John Smith", "phone": "+44 7700 900123", "language": "en" },
"notes": "Name sign at arrivals",
"payment": "agency_card",
"expected_price": 92
}'Risposta:
{
"id": "RV-4F2A9C",
"external_ref": "AG-2026-00042",
"environment": "live",
"status": "searching",
"service": "transfer",
"pickup_at": "2026-12-20T13:30:00.000Z",
"pickup_address": "Aéroport Nice Côte d'Azur, Terminal 2",
"dropoff_address": "Hôtel de Paris, Monaco",
"passengers": 2,
"vehicle_type": "Business",
"price": 92,
"currency": "EUR",
"payment": "agency_card",
"passenger": { "name": "John Smith", "phone": "+44 7700 900123", "language": "en" },
"client_link": "https://rivelys.com/suivi?t=…",
"chauffeur": null,
"created_at": "2026-12-01T09:12:44.000Z"
}Seguire una prenotazione
GET /v1/bookings/{id} (ad esempio RV-4F2A9C) restituisce la prenotazione aggiornata. GET /v1/bookings restituisce le ultime (parametri status e limit, 100 al massimo). Interrogate una prenotazione ogni pochi minuti, non più di una volta al minuto.
Appena un autista prende la corsa, chauffeur indica il suo nome e la sua auto; una volta confermata la corsa, il suo telefono e la targa:
"status": "confirmed",
"chauffeur": {
"name": "Karim B.",
"vehicle": "Mercedes-Benz Classe E",
"color": "Noir",
"phone": "+33 6 12 34 56 78",
"plate": "AB-123-CD"
}Annullare
POST /v1/bookings/{id}/cancel: gratuito finché lo stato è searching o awaiting_client. Per una corsa confermata, la risposta è 409 (cannot_cancel): contattate il dispatch Rivelys.
Campi di una prenotazione
| Campo | Tipo | Descrizione |
|---|---|---|
service | testo | transfer (tragitto) o hourly (servizio a disposizione). Predefinito: transfer. |
pickup_at | data ISO 8601 | Data e ora della presa in carico, con il fuso orario. |
pickup_address | testo | Indirizzo di presa in carico (aeroporto: indicate il terminal). |
dropoff_address | testo | Indirizzo di arrivo (obbligatorio per transfer). |
stops | elenco di testi | Fermate lungo il tragitto (5 al massimo). |
hours | numero | Durata in ore per hourly (da 1 a 24, per mezz’ora). |
flight_number | testo | Numero del volo in arrivo (es. AF7300): l’autista segue l’atterraggio. |
passengers | intero | Passeggeri (da 1 a 8). |
luggage_hold, luggage_cabin | interi | Bagagli in stiva e in cabina. |
baby_seats, booster_seats | interi | Seggiolini per neonati e rialzi. |
pet | booleano | Il passeggero viaggia con un animale. |
vehicle_type | testo | Facoltativo: Business, Prestige o Van. Senza tipo, la corsa è proposta a tutti gli autisti compatibili. |
passenger | oggetto | name, phone (formato internazionale), language (fr, en, it, es, de, pt, ru, ar, zh; predefinito fr): i messaggi al passeggero partono nella sua lingua. |
notes | testo | Nota per l’autista (1.000 caratteri al massimo). |
payment | testo | agency_card, monthly_invoice o client_link. |
client_payment | testo | Con client_link: card o cash. |
commission_percent | numero | Facoltativo: la vostra commissione sulla corsa (predefinita: quella impostata nel vostro spazio), mostrata all’autista prima che la prenda. |
expected_price | numero | Il prezzo che avete mostrato: se il prezzo è cambiato, la prenotazione viene rifiutata con il nuovo prezzo. |
external_ref | testo | Il vostro riferimento (80 caratteri al massimo): evita i doppioni. |
Stati
| Stato | Significato |
|---|---|
searching | Pubblicata: Rivelys cerca un autista. |
awaiting_client | Un autista l’ha presa; il passeggero deve confermare sul suo link. |
confirmed | Confermata. |
en_route | L’autista è in arrivo. |
on_site | L’autista è sul posto. |
on_board | Passeggero a bordo. |
completed | Conclusa. |
no_show_review | Passeggero assente segnalato dall’autista: verifica da parte del dispatch. |
cancelled | Annullata. |
Errori
Un errore restituisce un codice HTTP e un oggetto error, con un messaggio in inglese e in francese:
{
"error": {
"code": "price_changed",
"message": "The price is now 95 EUR. Check it and send the booking again with this expected_price.",
"message_fr": "Le prix vient d’être recalculé : 95 €.",
"price": 95,
"currency": "EUR"
}
}| HTTP | Codice | Quando |
|---|---|---|
| 401 | missing_key, invalid_key, revoked_key | Chiave assente, sconosciuta o disattivata. |
| 403 | account_not_active | Account non convalidato o bloccato. |
| 403 | live_not_open | Prenotazioni reali non ancora aperte: usate una chiave di test. |
| 403 | monthly_invoice_not_enabled | Fattura mensile non attivata per il vostro account. |
| 402 | card_required | Nessuna carta registrata per pagare con agency_card. |
| 402 | credit_limit | Tetto della fattura mensile raggiunto. |
| 404 | not_found, unknown_endpoint | Prenotazione o indirizzo sconosciuto. |
| 409 | price_changed | Il prezzo è cambiato: nuovo prezzo nella risposta. |
| 409 | cannot_cancel | Corsa confermata: da annullare con il dispatch. |
| 422 | invalid_fields | Campi mancanti o non validi (elenco in fields). |
| 422 | too_soon | Presa in carico troppo vicina (preavviso minimo). |
| 422 | route_not_found | Tragitto impossibile da calcolare: verificate gli indirizzi. |
| 429 | — | Troppe richieste: riprovate tra un minuto. |
| 503 | api_closed | API momentaneamente chiusa. |
Chiavi di test
Con una chiave rv_test_…, tutto viene verificato come in reale (campi, preavviso, prezzo reale), ma nulla viene inviato agli autisti né fatturato. Le prenotazioni hanno un riferimento TEST-… e cambiano stato da sole: searching per 1 minuto, poi un autista di test le prende (confirmed se paga il partner; awaiting_client poi confirmed un minuto dopo con client_link).
Assistenza
Una domanda sull’API: contact@rivelys.com. Per una corsa in corso, contattate il dispatch Rivelys dal vostro spazio (pulsante «Contattare la centrale operativa»).