Guides et référence de l'Open API ElefyMove.
Ces guides ne sont disponibles qu'en anglais pour le moment.
ElefyMove’s calendar is the single source of truth for anything bookable. Every date range carries a state — AVAILABLE, HELD, BOOKED, or BLOCKED — and conflicts resolve first-come-first-served across every channel.
| Méthode | Endpoint | Portée | Rôle |
|---|---|---|---|
| GET | /api/public/v1/listings/{id}/availability | availability:read | Consultez le calendrier unifié d'une annonce sur une période : disponible, retenu, réservé ou bloqué. |
| GET | /api/public/v1/availability | availability:read | Consultez la disponibilité de jusqu'à 50 annonces en un seul appel. Un identifiant que vous ne possédez pas ou qui n'existe pas est répertorié dans notFound plutôt que de faire échouer toute la requête. |
| GET | /api/public/v1/listings/{id}/blocks | availability:read | Consultez vos propres blocages de canal externe actifs pour une annonce, éventuellement restreints à une plage de dates. |
/api/public/v1/listings/{id}/blocks | availability:write | Créez ou mettez à jour un blocage de canal externe, identifié par votre propre référence. | |
/api/public/v1/listings/{id}/blocks/batch | availability:write | Créez ou mettez à jour jusqu'à 100 blocages de canal externe sur une même annonce en un seul appel, avec un résultat de réussite/échec par élément. | |
| DELETE | /api/public/v1/listings/{id}/blocks/batch | availability:write | Supprimez jusqu'à 100 blocages de canal externe sur une même annonce en un seul appel, avec un résultat de réussite/échec par élément. |
| DELETE | /api/public/v1/listings/{id}/blocks/{externalRef} | availability:write | Supprimez un blocage de canal externe que vous avez créé. |
curl "https://elefymove.com/api/public/v1/listings/{listingId}/availability?from=2026-09-01&to=2026-09-30" \
-H "X-Api-Key: efy_live_xxxxxxxxxxxxxxxxxxxxxxxx"
# Response — 200 OK
[
{ "from": "2026-09-01", "to": "2026-09-14", "state": "AVAILABLE" },
{ "from": "2026-09-15", "to": "2026-09-20", "state": "BLOCKED", "source": "partner-site", "externalRef": "HMXYZ123" },
{ "from": "2026-09-21", "to": "2026-09-30", "state": "AVAILABLE" }
]Syncing a whole portfolio? GET /availability reads up to 50 listings in one call — pass their ids as a comma-separated listingIds. An id you don't own or that doesn't exist is folded into the response's notFound array rather than failing the whole request.
When a stay is booked on your own platform, write a block carrying your reference. Blocks are dates + a reference only — no guest personal data crosses the API. GET /listings/:id/blocks reads your own active blocks back, optionally narrowed by from/to.
The batch endpoints write or delete up to 100 blocks on one listing in a single call. Each block gets its own result — check every item in the response rather than assuming the whole batch landed; one bad date range never rolls back the others.
Place a short-lived hold (up to 10 minutes per call) while a guest completes checkout on your side, then either confirm it into a block or release it early. Not ready in time? POST /holds/:id/extend re-arms the expiry — but a hold's total lifetime, measured from when it was created (not from the extension), is capped at 30 minutes. An extension that would cross that cap is refused with a 409, so extending repeatedly cannot hold inventory indefinitely.
| Méthode | Endpoint | Portée | Rôle |
|---|---|---|---|
| GET | /api/public/v1/holds | holds:write | Listez vos propres retenues, des plus récentes aux plus anciennes. Par défaut, seules les retenues actives s'affichent ; élargissez avec ?status=all. |
| GET | /api/public/v1/holds/{id} | holds:write | Consultez une de vos retenues par identifiant. |
/api/public/v1/listings/{id}/holds | holds:write | Retenez une période pendant que le voyageur finalise son paiement chez vous. La requête perdante reçoit un 409 avec SLOT_TAKEN. | |
/api/public/v1/holds/{id}/extend | holds:write | Repoussez l'expiration d'une retenue à partir de maintenant. La durée de vie totale d'une retenue est plafonnée à 30 minutes depuis sa création — une prolongation qui dépasserait ce plafond est refusée avec un 409. | |
| DELETE | /api/public/v1/holds/{id} | holds:write | Libérez une de vos retenues avant son expiration. |
curl -X POST "https://elefymove.com/api/public/v1/listings/{listingId}/holds" \
-H "X-Api-Key: efy_live_xxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"from": "2026-09-15", "to": "2026-09-20", "ttlSeconds": 300}'
# Response — 201 Created
{ "holdId": "hld_9f3a2c1b", "expiresAt": "2026-08-13T10:15:00Z" }If another channel takes the dates first, the losing request gets a machine-readable 409 — surface it to your guest and refresh availability:
# Same request, the dates were just taken by another channel
# Response — 409 Conflict
{
"code": "SLOT_TAKEN",
"conflictingState": "HELD",
"wonBy": "external"
}