# Repull — Full Documentation for LLMs > Comprehensive Repull API documentation in a single flat-text file, optimised for LLMs. > Summary: https://repull.dev/llms.txt > Agent guide: https://repull.dev/agents.txt > Discovery: https://repull.dev/.well-known/agents.json > Base URL: https://api.repull.dev > Hosted Connect: https://connect.repull.dev/{sessionId} > OpenAPI 3.0 spec: https://api.repull.dev/openapi.json > Updated: 2026-05-01 ## Table of contents 1. What Repull is 2. Authentication, headers, schema modes 3. Sandbox mode and the demo proxy 4. Connect (multi-channel onboarding picker) 5. Listings (create, AI content generation, multi-channel publish) 6. Properties and reservations (read APIs across all connected channels) 7. Markets (Atlas-powered market intelligence) 8. Pricing (AI dynamic pricing, strategy editor, bulk apply, history) 9. Channel manager — Airbnb 10. Channel manager — Booking.com (claim flow + room mapping) 11. Channel manager — VRBO 12. Channel manager — Plumguide 13. Conversations and messaging 14. Reviews 15. Webhooks (subscriptions, signing, retries, replay, 14 event types) 16. AI Operations (the unified `/v1/ai` action endpoint) 17. Usage, rate limits, billing 18. Errors, idempotency, passthrough 19. SDKs (TypeScript, Python, PHP, Go, Ruby, .NET) + MCP server + AI SDK provider 20. Open-source ecosystem (channel-manager, revenue, MCP, AI SDK) 21. PMS connection guide (per platform) 22. Migration from Calry --- ## 1. What Repull is Repull is the unified API for vacation-rental tech. One REST surface, one auth scheme, one schema, and 13 channels behind it: - **OTA channels (4)**: Airbnb, Booking.com, VRBO, Plumguide. - **PMS connectors (9 active)**: Hostaway, Guesty, OwnerRez, Smoobu, Beds24, iGMS, Hospitable, Lodgify, BookingSync. Additional connectors (Cloudbeds, Hostfully, Mews, Tokeet, Streamline, Zeevou, Uplisting, Hostify, Avantio, Apaleo, Escapia, Amenitiz) ship as scaffolds and activate per-customer. Use Repull when you need to: - Onboard a host onto Airbnb / Booking.com / VRBO / Plumguide / a PMS through a single hosted picker (no DIY OAuth). - Pull normalised properties, reservations, conversations, and reviews across every connected channel. - Push listings, pricing, and availability TO Airbnb / Booking.com / Plumguide. - Generate listing content (title, summary, description, amenities) with AI. - Get real-time competitive intelligence (median ADR, occupancy, comp sets, demand calendar, local events) for any market. - Run AI dynamic pricing with a strategy editor, bulk apply, and history. - Receive HMAC-signed webhook deliveries with replay and secret rotation. - Integrate with Vercel AI SDK or any MCP-aware coding assistant. Repull is **not** for hotel-only PMS systems and is **not** a payment processor (use Stripe directly for cards / payouts). --- ## 2. Authentication, headers, schema modes ### Required headers ``` Authorization: Bearer sk_test_YOUR_API_KEY X-Workspace-Id: YOUR_WORKSPACE_UUID ``` ### Optional headers ``` X-Account-Id: Scope to a specific PMS account (multi-account workspaces) X-Schema: calry|calry-v1|native Response shape (default: calry) Idempotency-Key: For POST/PUT/PATCH dedup ``` ### Key prefixes | Prefix | Mode | |--------|------| | `sk_test_*` | Sandbox — seeded data, no rate limits, no side effects | | `sk_live_*` | Live — real PMS/OTA traffic, rate-limited, real actions | The full Workspace ID is shown in the dashboard at https://repull.dev/dashboard/keys (Copy button next to it). It is required on every call — do not strip it. ### CORS `Access-Control-Allow-Origin: *` is set on `api.repull.dev` so browser SDKs and SPAs work directly. Repull also emits `postMessage` events from the hosted Connect picker so you can listen on the embedding window. ### Schema modes - `calry` — default. Schema-compatible with Calry, so existing Calry codebases work after a base-URL swap. - `calry-v1` — pinned to Calry v1. - `native` — Repull's richer native shape. Set with `X-Schema` header per request. --- ## 3. Sandbox mode and the demo proxy - Every endpoint accepts `sk_test_*` keys and returns realistic seeded data with no side effects. - No rate limits in sandbox. - The official live demo at https://repull-sdk-demo.vercel.app forwards requests using the literal header value `__sandbox__` instead of a real key. If you fork the demo, set `REPULL_SANDBOX_KEY` in env so the proxy can resolve it. If unset, sandbox calls return `sandbox_unavailable`. - Sandbox scenarios are documented at https://repull.dev/docs/sandbox-scenarios — happy paths, edge cases, failure-mode fixtures. --- ## 4. Connect — multi-channel onboarding picker Repull ships a hosted, white-label Connect picker. Mint a session server-side, redirect the user to it, get a callback when they finish. One flow covers all 13 channels. ### Why use it - No OAuth boilerplate — Repull handles Airbnb's consent screen, Booking.com's Connectivity Provider claim + room mapping, VRBO's activation, Plumguide credentials, and the 9 PMS credential forms. - Branded — pass `branding.logoUrl` and `branding.primaryColor` per session. - Channel-restricted — pass `channels: ['airbnb', 'booking']` to lock the picker. - Survives reload, has dark-mode buttons, account-conflict UI, and host-metadata enrichment after success. ### Endpoints | Method | Path | Purpose | |---|---|---| | `GET` | `/v1/connect/providers` | List the 13 supported channels with metadata. | | `POST` | `/v1/connect` | Mint a Connect session (returns `{ sessionId, url, expiresAt }`). | | `GET` | `/v1/connect/sessions/{sessionId}` | Inspect session status (used by SDK polling and the picker UI). | | `POST` | `/v1/connect/{provider}` | Direct, single-channel session for that provider only. | | `GET` | `/v1/connect/{provider}` | Channel-specific connect metadata + host info. | ### SDK one-liner ```ts const session = await repull.connect.create({ channels: ['airbnb', 'booking', 'hostaway'], // omit to allow all 13 redirectUrl: 'https://your-app.com/connected', }) window.location.href = session.url // or window.open(session.url, ...) ``` ### Per-channel flow notes - **Airbnb** — `accessType: 'read_only' | 'full_access'` on `POST /v1/connect/airbnb`. OAuth consent at Airbnb's site, Repull holds the refresh token, you get host metadata back. - **Booking.com** — Connectivity Provider claim flow: 1. `POST /v1/connect/booking/verify` with `{ hotelId }` — returns `verified` or `hotel_not_found`. 2. `POST /v1/connect/booking/rooms` — pulls the hotel's rooms. 3. `POST /v1/connect/booking/map-rooms` — maps imported rooms to Repull listings. 4. CNS webhook lands at `/v1/connect/booking/callback` and finalises the connection. - **VRBO** — real activation flow (`/v1/connect/vrbo`). - **Plumguide** — credential form (`/v1/connect/plumguide`). - **PMSes (9)** — credential forms with per-PMS field shapes (Hostaway clientId+secret, OwnerRez API token, Smoobu API key, Beds24 apiKey+propKey, etc.). ### Hosted picker UX Picker URL: `https://connect.repull.dev/{sessionId}` — opens to a chooser of the channels you whitelisted, shows real brand logos for all 13, and routes through `beginConnect`. On success it emits a `postMessage` to the opener: ```js window.addEventListener('message', (e) => { if (e.origin !== 'https://connect.repull.dev') return if (e.data?.type === 'repull:connect:complete') { // e.data.connection has provider, accountId, host metadata } }) ``` A `connection.created` webhook fires server-side at the same time. --- ## 5. Listings — create, AI content generation, multi-channel publish Repull listings are channel-agnostic resources. Create once, publish to any channel. ### Endpoints | Method | Path | Purpose | |---|---|---| | `POST` | `/v1/listings` | Create a Repull-native listing. | | `GET` | `/v1/listings` | Cursor-paginated catalog with filters. | | `GET` | `/v1/listings/{id}` | Read one listing. | | `PATCH` | `/v1/listings/{id}` | Update fields. | | `POST` | `/v1/listings/{id}/generate-content` | Kimi-powered title, summary, description, amenities. | | `POST` | `/v1/listings/{id}/publish/airbnb` | Publish to Airbnb. | | `POST` | `/v1/listings/{id}/publish/booking` | Publish to Booking.com. | | `GET` | `/v1/listings/{id}/publish-status` | Per-channel publish state. | ### AI content generation ```bash curl -X POST https://api.repull.dev/v1/listings/{id}/generate-content \ -H "Authorization: Bearer sk_test_…" \ -H "X-Workspace-Id: ws_…" \ -d '{"tone":"warm","length":"long","languages":["en","es"]}' ``` Returns `{ title, summary, description, amenitiesCopy, perChannel: { airbnb: {...}, booking: {...} } }`. ### Dashboard - https://repull.dev/dashboard/listings — table with filters and pagination. - https://repull.dev/dashboard/listings/new — visual create + AI gen + multi-channel publish. --- ## 6. Properties and reservations ### Properties | Method | Path | |---|---| | `GET` | `/v1/properties` | | `GET` | `/v1/properties/{id}` | `GET /v1/properties` returns normalised properties from every connected channel — Airbnb listings, Booking.com properties, VRBO properties, Plumguide listings, plus everything imported via PMS connectors. Filters: `platform`, `status`, `q` (search). ### Reservations | Method | Path | |---|---| | `GET` | `/v1/reservations` | | `POST` | `/v1/reservations` | | `PATCH` | `/v1/reservations/{id}` | Filters on `GET /v1/reservations`: `status`, `platform`, `listing_id`, `check_in_after`, `check_in_before`, `check_out_after`, `check_out_before`, `guest_email`, `q`. Returns the union across all connected channels. --- ## 7. Markets — Atlas market intelligence Real-time competitive intelligence powered by [Atlas](https://atlasdna.ai) as the data partner. ### Endpoints | Method | Path | Purpose | |---|---|---| | `GET` | `/v1/markets` | Every market that contains one of your listings. Top-line snapshot per market. | | `GET` | `/v1/markets/{city}` | Deep dive — active listings, median ADR, occupancy, supply trend, 90-day demand index. | | `GET` | `/v1/markets/{city}/calendar?from=&to=` | Day-by-day demand index plus curated local events (concerts, sports, conferences) with rank and expected attendance. | | `GET` | `/v1/markets/browse?country=&page=&q=` | Paginated global catalog for expansion research. Sort by yield / growth / supply. | | `GET` | `/v1/listings/{id}/comps` | Per-listing comp set with rate position (p25 / p50 / p75) and an under/over-priced flag. | | `GET` | `/v1/listings/{id}/segments` | Segment intelligence — how the listing reads against bedroom / guest-count / amenity peers. | ### Pricing model - 1 free market per workspace. - $49/mo per additional market via Stripe checkout (managed at https://repull.dev/dashboard/markets). - Hitting a market that exceeds the free tier without a subscription returns `402 Payment Required` with `{ code: 'market_subscription_required', upgradeUrl: '…' }`. ### Dashboard - https://repull.dev/dashboard/markets — map, KPIs, demand calendar, comps, segments, paywall UI, subscribe/cancel from the UI. - https://repull.dev/dashboard/markets/browse — search-first browse + featured carousel + country filter + paginated catalog. - https://repull.dev/markets — public product landing page. - https://repull.dev/docs/markets — customer-facing docs. --- ## 8. Pricing — AI dynamic pricing ### Endpoints | Method | Path | Purpose | |---|---|---| | `GET` | `/v1/listings/{id}/pricing` | Read current strategy + recommendations for one listing. | | `PUT` | `/v1/listings/{id}/pricing` | Update strategy (weights, floors, ceilings, occupancy targets). | | `POST` | `/v1/listings/pricing/bulk` | Apply recommendations to many listings in one call. | | `GET` | `/v1/listings/pricing` | Recommendation history with applied/ignored audit. | | `PUT` | `/v1/channels/airbnb/listings/{id}/pricing` | Airbnb-specific push (standard, LOS, rate plans). | | `PUT` | `/v1/channels/booking/availability` | Booking.com rates + availability push. | | `PUT` | `/v1/channels/plumguide/pricing` | Plumguide direct push. | ### Strategy shape ```json { "basePrice": 150, "floorPrice": 90, "ceilingPrice": 600, "occupancyTarget": 75, "weights": { "demand": 0.4, "comps": 0.3, "events": 0.2, "seasonality": 0.1 }, "minStay": { "weekday": 2, "weekend": 3 } } ``` ### Dashboard - https://repull.dev/dashboard/pricing — nightly recommendations, accept/decline, strategy weights editor, history. - https://repull.dev/docs/pricing — customer-facing docs. --- ## 9. Channel manager — Airbnb | Method | Path | Purpose | |---|---|---| | `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` | Standard, LOS, rate plans. | | `PUT` | `/v1/channels/airbnb/listings/{id}/availability` | Push availability. | | `POST` | `/v1/channels/airbnb/messaging/{threadId}/messages` | Send guest message. | | `POST` | `/v1/channels/airbnb/reservations/{code}` | Accept / decline / cancel. | | `POST` | `/v1/channels/airbnb/alterations` | Reservation alterations (date / guest / price changes). | | `POST` | `/v1/channels/airbnb/reviews` | Respond to a review or submit a host review. | | `POST` | `/v1/channels/airbnb/offers` | Special offer / pre-approval. | | `GET` | `/v1/channels/airbnb/transactions` | Payout transactions. | | `POST` | `/v1/channels/airbnb/sync` | Bulk sync all listings. | --- ## 10. Channel manager — Booking.com | Method | Path | Purpose | |---|---|---| | `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 guest message. | | `POST` | `/v1/channels/booking/setup` | Legal entity, go-live, policies. | | `GET` | `/v1/channels/booking/charges` | Booking.com charge data. | | `POST` | `/v1/channels/booking/sync` | Bulk sync. | ### Booking.com onboarding (Connectivity Provider claim flow) The Connect picker handles this end-to-end. The underlying calls are: ```bash # 1. Verify the host owns this hotel POST /v1/connect/booking/verify { hotelId } # 2. Pull rooms from Booking.com POST /v1/connect/booking/rooms { sessionId } # 3. Map Booking rooms → Repull listings POST /v1/connect/booking/map-rooms { sessionId, mappings: [{ roomId, listingId }, …] } # 4. Booking.com fires CNS callback POST /v1/connect/booking/callback (signed by Booking.com) ``` --- ## 11. Channel manager — VRBO | Method | Path | |---|---| | `GET` | `/v1/channels/vrbo/listings` | | `GET` | `/v1/channels/vrbo/reservations` | Connect via `POST /v1/connect/vrbo` (real activation flow, not a stub). --- ## 12. Channel manager — Plumguide | Method | Path | |---|---| | `GET` | `/v1/channels/plumguide/listings` | | `PUT` | `/v1/channels/plumguide/availability` | | `PUT` | `/v1/channels/plumguide/pricing` | | `GET` | `/v1/channels/plumguide/bookings` | | `POST` | `/v1/channels/plumguide/webhooks` | Plumguide-side webhook registration helper. | --- ## 13. Conversations and messaging | Method | Path | |---|---| | `GET` | `/v1/conversations` | | `GET` | `/v1/conversations/{id}` | | `POST` | `/v1/conversations/{id}/messages` | Returns messages from every connected channel in one feed (Airbnb, Booking.com, VRBO, plus PMS-imported chats). Send replies via the channel-specific endpoints (`/v1/channels/airbnb/messaging/{threadId}/messages`, `/v1/channels/booking/messaging`). --- ## 14. Reviews | Method | Path | |---|---| | `GET` | `/v1/reviews` | | `POST` | `/v1/reviews/{id}/reply` | Plus per-channel: `POST /v1/channels/airbnb/reviews`, `GET /v1/channels/booking/reviews`. The open-source `repull-channel-manager` template ships a full review management UI — list, respond, draft, AI suggestions, dashboard stats. --- ## 15. Webhooks Subscriptions are full CRUD with HMAC-signed delivery, exponential-backoff retries, replay, and secret rotation. ### Endpoints | Method | Path | Purpose | |---|---|---| | `GET` | `/v1/webhooks` | List subscriptions. | | `POST` | `/v1/webhooks` | Create subscription `{ url, events[], description? }`. Returns the subscription with a one-time-visible `secret`. | | `GET` | `/v1/webhooks/{id}` | Read one subscription. | | `PATCH` | `/v1/webhooks/{id}` | Update events / url / active. | | `DELETE` | `/v1/webhooks/{id}` | Delete subscription. | | `GET` | `/v1/webhooks/{id}/deliveries` | Delivery history with status, attempt count, response code. | | `POST` | `/v1/webhooks/{id}/test` | Fire a synthetic event. | | `POST` | `/v1/webhooks/{id}/ping` | Quick health check (delivers a `ping` event). | | `POST` | `/v1/webhooks/{id}/rotate-secret` | Rotate the signing secret. | | `GET` | `/v1/webhooks/event-types` | List all 14 event types with example payloads. | ### Event types (14 live) - `reservation.created` - `reservation.updated` - `reservation.cancelled` - `reservation.modified` - `conversation.updated` - `message.received` - `listing.created` - `listing.published` - `listing.publish_failed` - `pricing.recommendation` - `account.connected` - `account.disconnected` - `sync.complete` - `sync.error` (See `GET /v1/webhooks/event-types` for the canonical list and per-event payload examples.) ### Signing Each delivery includes: ``` X-Repull-Signature: t=1714521600,v1= X-Repull-Event: reservation.created X-Repull-Delivery: ``` Verify with HMAC-SHA256 over `.` using the per-endpoint secret. See https://repull.dev/docs/verify-webhook-signatures. ### Retries and replay - Failed deliveries (non-2xx) retry with exponential backoff up to 24 hours. - Replay any delivery from the dashboard at https://repull.dev/dashboard/webhooks. ### Dashboard - https://repull.dev/dashboard/webhooks — add endpoint, pick events, inspect deliveries, replay, rotate secrets. --- ## 16. AI Operations — `/v1/ai` A unified action endpoint for AI-powered operations. ```bash curl -X POST https://api.repull.dev/v1/ai \ -H "Authorization: Bearer sk_test_…" \ -H "X-Workspace-Id: ws_…" \ -d '{"action":"respond-to-guest","query":"Guest asks about early check-in","context":{"listingId":"123"}}' ``` ### Actions | `action` | Purpose | |---|---| | `chat` | Natural-language queries about your portfolio. | | `respond-to-guest` | Draft guest replies grounded in listing context. | | `classify-intent` | Classify message intent (inquiry, complaint, request, payment, etc.). | | `generate-listing` | Generate listing copy from property attributes. | | `review-response` | Draft review replies. | | `price-suggestion` | Pricing recommendations (also reachable via `/v1/listings/{id}/pricing`). | For tool-style usage in Vercel AI SDK or MCP clients, prefer the dedicated provider packages (see SDKs section below). --- ## 17. Usage, rate limits, billing ### Usage endpoints | Method | Path | |---|---| | `GET` | `/v1/usage/summary` | | `GET` | `/v1/usage/logs` | | `GET` | `/v1/usage/tier` | ### Rate limits | Plan | Requests/minute | Requests/day | |------|-----------------|--------------| | Sandbox (`sk_test_*`) | Unlimited | Unlimited | | Free (3 listings) | 60 | 5,000 | | Starter ($99 / 10 listings) | 500 | 100,000 | | Scale (custom) | Custom | Custom | Headers on every response: ``` X-RateLimit-Limit: 500 X-RateLimit-Remaining: 498 X-RateLimit-Reset: 1714521600 ``` 429 responses include a `Retry-After` header (seconds). ### Billing - `GET /v1/billing` — current plan and usage. - `POST /v1/billing` — create a Stripe checkout session. - Per-market subscriptions (1 free + $49/mo each) live alongside the plan tier; manage at https://repull.dev/dashboard/markets. - Plans: Free (3 listings), Starter ($99 / 10 listings), Scale (custom). Marketing page: https://repull.dev/pricing. ### Dashboards - https://repull.dev/dashboard/usage — rolling request volume + per-endpoint breakdown. - https://repull.dev/dashboard/logs — request log tail with filters. - https://repull.dev/dashboard/billing — plan + invoices. --- ## 18. Errors, idempotency, passthrough ### Errors Every non-2xx response is JSON: ```json { "error": { "code": "validation_failed", "message": "Field `redirectUrl` must be an https URL.", "field": "redirectUrl", "requestId": "req_…" } } ``` Common codes: `unauthorized`, `forbidden`, `not_found`, `validation_failed`, `rate_limited`, `idempotency_conflict`, `market_subscription_required` (402), `provider_error`, `sandbox_unavailable`. ### Idempotency Pass `Idempotency-Key: ` on POST/PUT/PATCH. Repull stores the response for 24 hours and returns the cached body on retries. ### Passthrough For PMS / channel features Repull hasn't normalised yet, the `passthrough` mechanism lets you call the underlying provider through Repull's auth and quota — see https://repull.dev/docs/passthrough. --- ## 19. SDKs, MCP, AI SDK ### TypeScript ```bash npm install @repull/sdk ``` ```ts import { Repull } from '@repull/sdk' const repull = new Repull({ apiKey: 'sk_test_…', workspaceId: 'ws_…' }) const properties = await repull.properties.list() const session = await repull.connect.create({ redirectUrl: 'https://your-app.com/connected' }) ``` Source: https://github.com/ivannikolovbg/repull-sdk. v0.1.0 published. ### Python ```bash pip install repull ``` ```python from repull import Repull client = Repull(api_key="sk_test_…", workspace_id="ws_…") properties = client.properties.list() ``` Source: https://github.com/ivannikolovbg/repull-python. v0.1.0 published on PyPI. ### PHP ```bash composer require repull/sdk ``` Source: https://github.com/ivannikolovbg/repull-php. Listed on Packagist. ### Go ```bash go get github.com/ivannikolovbg/repull-go ``` Module: `github.com/ivannikolovbg/repull-go`. Generated from the OpenAPI spec. ### Ruby ```bash gem install repull ``` Source: https://github.com/ivannikolovbg/repull-ruby. Published on RubyGems. ### .NET ```bash dotnet add package Repull.SDK ``` Source: https://github.com/ivannikolovbg/repull-dotnet. Published on NuGet. ### MCP server (`@repull/mcp`) ```json { "mcpServers": { "repull": { "command": "npx", "args": ["-y", "@repull/mcp"], "env": { "REPULL_API_KEY": "sk_test_…", "REPULL_WORKSPACE_ID": "ws_…" } } } } ``` Source: https://github.com/ivannikolovbg/repull-mcp. The binary is `repull-mcp`. Add to Claude Desktop / Cursor / Windsurf / any MCP client. ### Vercel AI SDK provider (`@repull/ai-sdk`) ```ts import { streamText } from 'ai' import { repullTools } from '@repull/ai-sdk' const result = await streamText({ model: openai('gpt-4o'), tools: repullTools({ apiKey: process.env.REPULL_API_KEY!, workspaceId: process.env.REPULL_WORKSPACE_ID! }), prompt: 'Find the comp set for listing 123 and recommend a price for next Friday.', }) ``` Source: https://github.com/ivannikolovbg/repull-ai-sdk. v0.1.0 on npm. ### Connect Widget A drop-in JS picker that mints a Connect session and renders the chooser. See https://repull.dev/docs/connect-widget. ### CLI ```bash npm install -g @repull/cli repull login repull properties list repull reservations list --platform airbnb --status confirmed repull airbnb push --listing 6248 repull markets get lisbon repull pricing recommend --listing 6248 ``` --- ## 20. Open-source ecosystem Repull ships a complete open-source ecosystem. All MIT, all forkable, all production-ready. ### `repull-channel-manager` — full open-source channel manager GitHub: https://github.com/ivannikolovbg/repull-channel-manager A complete, brandable channel manager template built on Next.js 16. Includes: - Multi-channel Connect picker baked in. - Listings table + create + AI content gen. - Calendar with Atlas pricing recommendations overlay (apply / decline per night). - Guest messaging inbox — 3-pane UI, sync, send, draft, AI suggestions. - Reviews — list, respond, draft, AI suggestions, dashboard stats. - Polished footer + Vanio AI link. Fork it, brand it, ship it. ### `repull-revenue` — open-source revenue management GitHub: https://github.com/ivannikolovbg/repull-revenue Open-source revenue management starter: - Markets KPIs + demand calendar. - Comp sets and segment intelligence. - Nightly AI recommendations with bulk apply. - Strategy editor + applied/ignored history. - Search-first browse UX with featured carousel + country filter. ### `repull-mcp` — MCP server GitHub: https://github.com/ivannikolovbg/repull-mcp. Package: `@repull/mcp`. v0.1.0 published. ### `repull-ai-sdk` — Vercel AI SDK provider GitHub: https://github.com/ivannikolovbg/repull-ai-sdk. Package: `@repull/ai-sdk`. v0.1.0 published. ### `repull-sdk` — TypeScript SDK + demo + skeleton GitHub: https://github.com/ivannikolovbg/repull-sdk. Monorepo: - `packages/sdk` — `@repull/sdk` v0.1.0. - `packages/types` — generated types. - `apps/demo` — live SDK showcase with the multi-channel Connect picker as the primary CTA, deployed at https://repull-sdk-demo.vercel.app (sandbox-key wired so anyone can try without signing up). - `apps/channel-manager` — the channel-manager skeleton. Marketing landing: https://repull.dev/open-source. --- ## 21. PMS connection guide (per platform) Each PMS connector is reached via `POST /v1/connect/{provider}` with either OAuth or credentials. The Connect picker handles the UX automatically; the direct API calls are below for advanced integrators. ### Hostaway **Auth**: OAuth 2.0 or `clientId` + `clientSecret`. Full property + reservation + messaging + availability sync. ### Guesty **Auth**: OAuth 2.0 or `clientId` + `clientSecret`. Properties, reservations, conversations, availability. Webhook sync available. ### OwnerRez **Auth**: API token. Properties, reservations, availability, pricing. ### Smoobu **Auth**: API key. Properties, reservations, availability. ### Beds24 **Auth**: `apiKey` + `propKey`. Full property, reservation, availability sync. Rate plans supported. ### iGMS **Auth**: API key. Properties and reservations. ### Hospitable **Auth**: API key. Properties, reservations, conversations. ### Lodgify **Auth**: API key. Properties, reservations, availability, pricing. ### BookingSync **Auth**: OAuth 2.0 or `clientId` + `clientSecret`. Rentals, bookings, availability calendars. ### Other PMSes (scaffolded — request activation) Cloudbeds, Hostfully, Mews, Tokeet, Streamline, Zeevou, Uplisting, Hostify, Avantio, Apaleo, Escapia, Amenitiz. Connector code lives behind feature flags; email hello@repull.dev to enable for your workspace. --- ## 22. Migration from Calry Two changes: 1. Swap base URL: `api.calry.com` → `api.repull.dev`. 2. Set `X-Schema: calry` (default — usually no change needed). Repull is a strict superset of Calry. Same response shapes, same field names, same auth model. New features (Markets, AI Pricing, Connect picker, Webhooks, AI Operations, the open-source ecosystem) are additive and do not break existing Calry integrations. Full guide: https://repull.dev/docs/migrate-from-calry. --- ## Changelog (recent) ### 2026-05-01 - llms.txt + agents.txt + llms-full.txt full rewrite covering Connect picker, Atlas markets, AI pricing, webhooks, six SDKs, MCP server, AI SDK provider, open-source ecosystem. ### 2026-04-30 → 2026-04-29 - `/dashboard/markets` full rebuild: map + revenue impact + comps + segments + paywall UI + Stripe subscribe/cancel. - `/dashboard/markets/browse` search-first UX + featured carousel + country filter + paginated catalog. - `/dashboard/listings` full table with pagination + filters + Create CTA. - `/dashboard/listings/new` create + AI content generation + multi-channel publish. - `/markets` product landing. - `/open-source` ecosystem page + repull-revenue card. ### 2026-04-28 - AI dynamic pricing — `/v1/listings/{id}/pricing` (read/write), `/v1/listings/pricing/bulk`, recommendation history, strategy editor. - Booking.com + VRBO direct pricing endpoints (mirror Airbnb pattern). - Listings: `POST /v1/listings`, `POST /v1/listings/{id}/generate-content`, `/publish/airbnb`, `/publish/booking`, `/publish-status`. - Atlas: comp listings + segment intelligence. ### 2026-04-27 - Markets: `/v1/markets`, `/v1/markets/{city}`, `/v1/markets/{city}/calendar`, `/v1/markets/browse` (paginated catalog). - Webhooks: subscription CRUD + signed delivery + test-fire + delivery history + replay + secret rotation + 14 event types. - Per-market paywall: 1 free per workspace, $49/mo each beyond, returned as `402 Payment Required`. - Connect: multi-channel picker for 13 channels, real brand logos, branded sessions, host metadata enrichment. - Booking.com claim flow: `/verify` → `/rooms` → `/map-rooms` → CNS callback. - VRBO real connect (no longer a stub). 9 PMS connectors de-stubbed. - API request logging + tier-based rate limits + `/v1/usage/*`. - Hosted Connect picker at `connect.repull.dev` — session-based auth, no api-key on the client, `postMessage` on completion. - Permissive CORS for browser SDK consumers. ### 2026-04-26 → 2026-04-25 - White-label OAuth Connect (branding UI + customer docs). - New signups marked as Repull product (UX polish). - Pricing simplified — Free (3 listings), Starter ($99 / 10 listings), Scale (custom). - Six SDKs published — TypeScript, Python, PHP, Go, Ruby, .NET (all v0.1.0 with release workflows). - `@repull/mcp` (MCP server) and `@repull/ai-sdk` (Vercel AI SDK provider) v0.1.0 published. - `repull-channel-manager` and `repull-revenue` open-source repos shipped.