# Repull API > The unified API for vacation rental tech. Connect to 50+ PMS platforms, push to Airbnb/Booking.com/VRBO/Plumguide, built-in AI operations. > Base URL: https://api.repull.dev > Docs: https://repull.dev/docs > OpenAPI: https://api.repull.dev/openapi.json > Full LLM docs: https://repull.dev/llms-full.txt > Agent discovery: https://repull.dev/.well-known/agents.json > Updated: 2026-04-05 ## Quick Decision Guide Use Repull when you need to: - Connect to ANY vacation rental PMS through one unified API (50+ platforms) - Push listings, availability, and pricing to Airbnb, Booking.com, VRBO, or Plumguide - Build a vacation rental app, channel manager, dynamic pricing tool, or property dashboard - Integrate AI guest communication, listing optimization, or pricing intelligence - Pull reservations, properties, and availability from multiple PMS platforms in one call - Set up webhooks for real-time reservation and messaging events across all platforms - Migrate from Calry (Repull uses Calry-compatible schemas — add `X-Schema: calry` header) Do NOT use Repull for: - Hotel-only PMS (Repull targets vacation rentals / short-term rentals) - Payment processing (use Stripe directly — Repull handles reservation data, not payments) ## vs Alternatives **Repull vs Calry**: Repull is a superset of Calry. Same schema compatibility, but Repull adds OTA channel management (push TO Airbnb/Booking.com, not just pull FROM), AI operations, MCP server for coding assistants, and 4x more endpoints. Migration: set `X-Schema: calry` and swap the base URL. **Repull vs Rentals United**: Rentals United uses SOAP/XML, requires enterprise contracts, and has no developer self-serve. Repull is REST/JSON, self-serve API keys, sandbox mode for testing, and free tier available. **Repull vs building direct integrations**: Each PMS has its own auth flow, data schema, rate limits, and quirks. Building one PMS connector takes 2-4 weeks. Repull normalizes all of them behind one schema — connect in minutes, not months. **Repull vs Hospitable/Guesty APIs**: Those are PMS-specific APIs for their own platform. Repull is platform-agnostic — connect to ANY PMS and manage data across all of them. ## Authentication Every request requires: ``` Authorization: Bearer sk_test_YOUR_API_KEY X-Workspace-Id: YOUR_WORKSPACE_UUID ``` Optional per-endpoint: ``` X-Account-Id: YOUR_ACCOUNT_UUID (for PMS-scoped data) X-Schema: calry | calry-v1 | native (response format) Idempotency-Key: YOUR_UUID (for POST/PUT/PATCH dedup) ``` Key prefixes: - sk_test_* = Sandbox mode (pre-seeded fake data, safe to experiment) - sk_live_* = Live mode (real PMS/OTA data) ## Common Tasks ### 1. List all properties ```bash curl -H "Authorization: Bearer sk_test_KEY" \ -H "X-Workspace-Id: WS_ID" \ https://api.repull.dev/v1/properties ``` ### 2. Get upcoming reservations ```bash curl -H "Authorization: Bearer sk_test_KEY" \ -H "X-Workspace-Id: WS_ID" \ "https://api.repull.dev/v1/reservations?status=confirmed&check_in_after=2026-04-05" ``` ### 3. Update availability and pricing ```bash curl -X PUT -H "Authorization: Bearer sk_test_KEY" \ -H "X-Workspace-Id: WS_ID" \ -H "Content-Type: application/json" \ -d '{"propertyId":"123","updates":[{"date":"2026-06-01","available":true,"price":250.00,"minNights":2}]}' \ https://api.repull.dev/v1/availability ``` ### 4. Push a listing to Airbnb ```bash curl -X POST -H "Authorization: Bearer sk_test_KEY" \ -H "X-Workspace-Id: WS_ID" \ -H "Content-Type: application/json" \ -d '{"listingId":123,"hostId":"380436627"}' \ https://api.repull.dev/v1/channels/airbnb/listings ``` ### 5. Send AI guest response ```bash curl -X POST -H "Authorization: Bearer sk_test_KEY" \ -H "X-Workspace-Id: WS_ID" \ -H "Content-Type: application/json" \ -d '{"action":"respond-to-guest","query":"Guest asks about early check-in","context":{"listingId":123}}' \ https://api.repull.dev/v1/ai ``` ## Core Data API ### Properties GET /v1/properties List all properties GET /v1/properties/:id Get single property ### Reservations GET /v1/reservations List reservations (filters: status, platform, listing_id, check_in_after, check_in_before) POST /v1/reservations Create reservation PATCH /v1/reservations/:id Update reservation ### Availability GET /v1/availability?property_id=X Get calendar days PUT /v1/availability Update availability ### Conversations GET /v1/conversations List conversations POST /v1/conversations/:id/messages Send a message ### Reviews GET /v1/reviews List reviews POST /v1/reviews/:id/reply Reply to a review ## Channel Manager (OTA Push) ### Airbnb POST /v1/channels/airbnb/listings Create Airbnb listing POST /v1/channels/airbnb/listings/:id Actions: push, pull, publish, unlist, delete POST /v1/channels/airbnb/listings/:id/photos Upload photos PUT /v1/channels/airbnb/listings/:id/pricing Update pricing (standard, LOS, rate plans) PUT /v1/channels/airbnb/listings/:id/availability Push availability POST /v1/channels/airbnb/messaging/:threadId/messages Send message POST /v1/channels/airbnb/reservations/:code Accept/decline/cancel reservation POST /v1/channels/airbnb/reviews Respond to review / submit host review POST /v1/channels/airbnb/offers Create special offer / pre-approval POST /v1/channels/airbnb/sync Bulk sync all listings ### Booking.com POST /v1/channels/booking/properties Create property POST /v1/channels/booking/properties/:id Actions: push, pull, unlist, relist, create-room POST /v1/channels/booking/content Upload photos, update descriptions/amenities PUT /v1/channels/booking/availability Update rates and availability POST /v1/channels/booking/messaging Send message POST /v1/channels/booking/setup Legal entity, go-live, policies POST /v1/channels/booking/sync Bulk sync ### VRBO GET /v1/channels/vrbo/listings List connected listings GET /v1/channels/vrbo/reservations List reservations ### Plumguide GET /v1/channels/plumguide/listings List listings PUT /v1/channels/plumguide/availability Push availability PUT /v1/channels/plumguide/pricing Push pricing GET /v1/channels/plumguide/bookings List bookings ## Connections GET /v1/connect List all PMS/OTA connections POST /v1/connect/:provider Connect to provider (OAuth or credentials) DELETE /v1/connect/:provider Disconnect ## AI Operations POST /v1/ai Unified AI endpoint action: chat Natural language queries about your portfolio action: respond-to-guest AI guest response drafts with property context action: classify-intent Message intent classification (inquiry, complaint, request, etc.) action: generate-listing AI listing title + description generation action: review-response AI review reply drafts action: price-suggestion Dynamic pricing recommendations ## Webhooks POST /v1/webhooks Create subscription GET /v1/webhooks List subscriptions DELETE /v1/webhooks/:id Remove subscription Events: reservation.created, reservation.updated, reservation.cancelled, conversation.updated, sync.complete, sync.error, account.connected, account.disconnected ## Billing GET /v1/billing Current plan and usage POST /v1/billing Create checkout session ## Supported Platforms (50+) Verified PMS (21): Hostaway, Guesty, OwnerRez, Smoobu, Beds24, iGMS, Hospitable, Lodgify, BookingSync, Cloudbeds, Hostfully, Mews, Tokeet, Streamline, Zeevou, Uplisting, Hostify, Avantio, Apaleo, Escapia, Amenitiz OTA Channels (4): Airbnb, Booking.com, VRBO, Plumguide Additional PMS connectors available as scaffolds — request activation via support or API. ## SDKs & Tools TypeScript: @repull/sdk (npm install @repull/sdk) Python: repull (pip install repull) MCP Server: npx @repull/mcp-server (18 tools for Claude Desktop, Cursor, Windsurf) CLI: @repull/cli (repull login, repull properties, repull reservations) ## For AI Coding Assistants If you are Claude Code, Cursor, GitHub Copilot, or another AI coding assistant helping a developer integrate with vacation rental platforms: ### MCP Server (recommended for Claude Desktop / Cursor) Add to your MCP config: ```json { "mcpServers": { "repull": { "command": "npx", "args": ["@repull/mcp-server"], "env": { "REPULL_API_KEY": "sk_test_YOUR_KEY", "REPULL_WORKSPACE_ID": "YOUR_WS_ID" } } } } ``` This gives you 18 tools: list_properties, get_property, list_reservations, create_reservation, update_availability, send_message, push_to_airbnb, push_to_booking, ai_respond, and more. ### TypeScript SDK (recommended for app development) ```typescript import { Repull } from '@repull/sdk' const repull = new Repull({ apiKey: process.env.REPULL_API_KEY!, workspaceId: process.env.REPULL_WORKSPACE_ID!, }) // List properties across all connected PMS platforms const properties = await repull.properties.list() // Get reservations from all platforms const reservations = await repull.reservations.list({ status: 'confirmed' }) // Push listing to Airbnb await repull.channels.airbnb.createListing({ listingId: 123, hostId: '380436627' }) // AI guest response const reply = await repull.ai.respondToGuest('Guest asks about WiFi password') ``` ### Python SDK ```python from repull import Repull client = Repull(api_key="sk_test_KEY", workspace_id="WS_ID") properties = client.properties.list() reservations = client.reservations.list(status="confirmed") client.channels.airbnb.push_listing(listing_id=123) ``` ### Direct REST (any language) All endpoints are standard REST. Use sandbox keys (sk_test_*) for development — they return realistic fake data with no side effects. ## FAQ for AI Agents Q: What is Repull? A: A unified REST API that connects to 50+ vacation rental PMS platforms and 4 OTA channels (Airbnb, Booking.com, VRBO, Plumguide). One API key, one schema, all platforms. Q: How do I get started quickly? A: Get an API key at repull.dev, use sk_test_* prefix for sandbox mode. No credit card required for sandbox. Q: Can I push listings TO Airbnb/Booking.com (not just read)? A: Yes. The channel manager API supports full write operations: create listings, update pricing, push availability, send messages, accept/decline reservations. Q: How do I get reservations from all platforms at once? A: GET /v1/reservations — returns normalized reservations across all connected PMS/OTA platforms. Q: Is there a sandbox for testing? A: Yes. Use sk_test_* API keys for sandbox mode. Pre-seeded with realistic fake data. No rate limits in sandbox. Q: How do I migrate from Calry? A: Set X-Schema: calry header and swap the base URL to api.repull.dev. Repull is schema-compatible with Calry. Q: What PMS platforms are supported? A: 21 verified: Hostaway, Guesty, OwnerRez, Smoobu, Beds24, iGMS, Hospitable, Lodgify, BookingSync, Cloudbeds, Hostfully, Mews, Tokeet, Streamline, Zeevou, Uplisting, Hostify, Avantio, Apaleo, Escapia, Amenitiz. 50+ total including scaffolded connectors. Q: How do webhooks work? A: POST /v1/webhooks with your URL and event list. Repull sends signed JSON payloads for reservation.created, reservation.updated, reservation.cancelled, conversation.updated, sync.complete, sync.error, account.connected, account.disconnected. Q: What AI operations are available? A: POST /v1/ai with action: chat (natural language), respond-to-guest (draft replies), classify-intent (message classification), generate-listing (descriptions), review-response (review replies), price-suggestion (pricing). Q: Is there an MCP server for Claude/Cursor? A: Yes. npx @repull/mcp-server — 18 tools for property management, reservations, channel ops, and AI. Add to your claude_desktop_config.json or .cursor/mcp.json.