Build with ElefyMove
Connect your platform to ElefyMove: list properties, sync availability in real time, and never double-book a date.
What the API does
One integration surface for listings, availability, and real-time sync.
Listings API
Push multilingual property listings onto ElefyMove. Submit content in any subset of our 9 supported locales — every listing is moderated before it goes live.
Availability sync
ElefyMove's master calendar is the single source of truth for anything bookable. Every date range carries a state — available, held, booked, or blocked — and turnover buffers are enforced centrally so no channel can double-book.
Temporary holds
Place a short-lived hold, up to 10 minutes, while a guest completes checkout on your side. Conflicts resolve first-come-first-served, with a machine-readable 409 response for the losing request.
Webhooks
Subscribe to HMAC-SHA256-signed events for listing approvals, availability changes, hold lifecycle, and booking status, delivered near real time. Payloads carry dates and references only — never guest personal data.
iCal sync
Every listing exports a signed iCal feed, and ElefyMove can poll your feed URL in return, so external blocks stay reflected on both sides without writing any integration code.
What partners can — and can't — do
Rule zero: every operation is scoped to your own data. There is no cross-partner access, in either direction.
You can
- Create, update, and unlist your own property listings, in any of our 9 languages
- Read your own listings and their moderation status
- Read availability for your own listings, and write external-channel blocks with a reference
- Place and release temporary holds, up to 10 minutes, during your checkout
- Register webhooks and receive signed events — dates and references only
- Export listing calendars (iCal) and register your own iCal feeds
- Read the public location hierarchy
You can't
- Move any payment, refund, or deposit through this API
- Create ElefyMove bookings or contracts — external bookings enter only as a calendar block
- Send or receive guest or tenant personal data
- Access or modify any other partner's listings, holds, blocks, or configuration
- Message, contact, or solicit ElefyMove users
- Read or republish listings you don't own
- Exceed rate limits, share keys, or automate account creation
Getting access
Create a developer account, verify your email, and issue your own API keys right from the dashboard. Publishing live listings additionally requires the ElefyMove team to link your key to a verified landlord account.
Create your API keysBy creating an account, you agree to the API Terms of Use.
Available scopes
listings:readlistings:writeavailability:readavailability:writeholds:writewebhooks:manageDefault rate limit: 120 requests per minute per key.
Quick start
Every request is authenticated with an X-Api-Key header carrying your issued key.
Check availability for a listing
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" }
]Place a temporary hold
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" }A losing request gets a machine-readable 409
# Same request, the dates were just taken by another channel
# Response — 409 Conflict
{
"code": "SLOT_TAKEN",
"conflictingState": "HELD",
"wonBy": "external"
}Full API reference
Every request and response schema, error shape, and example lives in the interactive OpenAPI reference — try any endpoint live with your own key.
Open API DocsBrowse the full documentationEvery endpoint at a glance
The complete Open API v1 surface. Every request carries your key in an X-Api-Key header, and every route reaches your own data only.
Base URL https://elefymove.com
Listings
| Method | Endpoint | Scope | What it does |
|---|---|---|---|
/api/public/v1/listings | listings:write | Submit a new listing for moderation, with content in any of our 9 supported languages. | |
| GET | /api/public/v1/listings | listings:read | List every listing your key owns, with its current moderation status. |
| GET | /api/public/v1/listings/{externalId} | listings:read | Read one of your listings by the external ID you assigned it. |
| PATCH | /api/public/v1/listings/{externalId} | listings:write | Update one of your listings; any field you omit is left unchanged. |
| DELETE | /api/public/v1/listings/{externalId} | listings:write | Unlist one of your listings. |
Availability & blocks
| Method | Endpoint | Scope | What it does |
|---|---|---|---|
| GET | /api/public/v1/listings/{id}/availability | availability:read | Read a listing's unified calendar over a date range — available, held, booked, or blocked. |
/api/public/v1/listings/{id}/blocks | availability:write | Create or update an external-channel block, identified by your own reference. | |
| DELETE | /api/public/v1/listings/{id}/blocks/{externalRef} | availability:write | Remove an external-channel block you previously wrote. |
Holds
| Method | Endpoint | Scope | What it does |
|---|---|---|---|
/api/public/v1/listings/{id}/holds | holds:write | Hold a date range while a guest completes checkout on your side. The losing request gets a 409 carrying SLOT_TAKEN. | |
| DELETE | /api/public/v1/holds/{id} | holds:write | Release one of your holds before it expires. |
Calendar sync (iCal)
| Method | Endpoint | Scope | What it does |
|---|---|---|---|
| GET | /api/public/v1/listings/{id}/calendar.ics | Signed URL, no key | Download a listing's calendar as an iCal feed. The signed token in the URL is the authentication, so calendar apps can subscribe directly. |
| PUT | /api/public/v1/listings/{id}/ical-sources | availability:write | Register or replace the inbound iCal feed ElefyMove polls for one of your listings. |
| GET | /api/public/v1/listings/{id}/ical-sources | availability:read | Read the registered feed for a listing, with its polling status and last error. |
| DELETE | /api/public/v1/listings/{id}/ical-sources | availability:write | Stop polling and delete the registered feed for a listing. |
Webhooks
Webhooks have no partner-callable endpoint in v1. Send us your destination URL when you request a key and the ElefyMove team registers it, along with the HMAC-SHA256 secret every delivery is signed with. Failed deliveries are retried with backoff, and payloads carry dates and references only.
Events you can receive
listing.approvedlisting.rejectedavailability.changedhold.createdhold.releasedhold.expiredbooking.createdbooking.cancelledpingMeta
| Method | Endpoint | Scope | What it does |
|---|---|---|---|
| GET | /api/public/v1/ping | Any valid key | Check that your key works and read back the client name and scopes attached to it. |
Data & fair use
- No guest personal data crosses the API — external blocks carry dates and a reference only, in line with Thailand's PDPA.
- Listings sourced through the API link back to their canonical page on elefymove.com.
- Keys are scoped, and the ElefyMove team can revoke one at any time.
Open API v1 — currently onboarding integration partners.