# 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-09-11 ## Table of contents 1. What Repull is 2. Authentication, headers, schema modes 3. Connect (multi-channel onboarding picker) 4. Listings (create, AI content generation, multi-channel publish) 5. Properties and reservations (read APIs across all connected channels) 6. Markets (Atlas-powered market intelligence) 7. Pricing (AI dynamic pricing, strategy editor, bulk apply, history) 8. Channel manager — Airbnb 9. Channel manager — Booking.com (claim flow + room mapping) 10. Channel manager — VRBO 11. Channel manager — Plumguide 12. Conversations and messaging 13. Reviews 14. Webhooks (subscriptions, signing, retries, replay, 14 event types) 15. Usage, rate limits, billing 16. Errors and idempotency 17. SDKs (TypeScript, Python, PHP, Go, Ruby, .NET) + MCP server + AI SDK provider 18. Open-source ecosystem (channel-manager, revenue, MCP, AI SDK) 19. PMS connection guide (per platform) 20. 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_live_YOUR_API_KEY ``` The API key alone identifies and scopes your workspace — there is no separate workspace header to send. ### Optional headers ``` X-Account-Id: Scope to a specific PMS account (multi-account workspaces). Use the numeric `id` from GET /v1/connect. X-Schema: calry|calry-v1|native Response shape (default: calry) Idempotency-Key: For POST/PUT/PATCH dedup ``` ### Key format There is a single key type: `sk_live_*`. Every key acts on real PMS/OTA traffic through whatever channels your workspace has connected — there is no separate sandbox key or test mode. Your API key is shown in the dashboard at https://repull.dev/dashboard/keys (Copy button next to it). The key is the only credential you send — it resolves to exactly one workspace and scopes every read and write to 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. 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 }`). | | `POST` | `/v1/connect/sessions/{sessionId}/select-provider` | Bind a picker session to the chosen channel and get the next-step URL. No API key — the session id is the capability token. | | `POST` | `/v1/connect/{provider}` | Direct, single-channel session for that provider only. | | `GET` | `/v1/connect/{provider}` | Channel-specific connect metadata + host info. | | `DELETE` | `/v1/connect/{provider}?accountId=` | Disconnect one Airbnb host or Booking.com property (`accountId` required when several are connected). Its listings are deactivated, not deleted. | ### SDK one-liner ```ts const session = await repull.connect.createSession({ 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. --- ## 4. 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}` | Activate or deactivate one listing (`{"active": false}`). | | `POST` | `/v1/listings/status` | Activate or deactivate up to 500 listings at once, all or nothing. | | `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_live_…" \ -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. --- ## 5. 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. --- ## 6. 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. --- ## 7. Pricing — AI dynamic pricing ### Endpoints | Method | Path | Purpose | |---|---|---| | `GET` | `/v1/listings/{id}/pricing` | Recommendations for a date window (`startDate`, `endDate`; defaults today → +90 days). | | `POST` | `/v1/listings/{id}/pricing` | `{ dates, action: "apply" \| "decline" }` — apply writes the price and pushes to Airbnb / Booking.com / VRBO. | | `POST` | `/v1/listings/pricing/bulk` | `{ action, items: [{ listingId, dates }] }` — up to 500 items; per-item failures in `failed[]`. | | `GET` | `/v1/listings/{id}/pricing/history` | Recommendations vs applied prices, cursor-paginated. | | `GET` / `PUT` | `/v1/listings/{id}/pricing/strategy` | Strategy that constrains recommendations. | | `PUT` | `/v1/availability/{propertyId}` | Your own prices: writes the calendar and pushes to every connected channel. The default for calendar values. | | `PUT` | `/v1/channels/airbnb/listings/{id}/pricing` | Airbnb-only settings (model, standard, LOS, rate plans, fees, currency, rules, per-date calendar ops). | | `PUT` | `/v1/channels/booking/availability` | Booking.com rates + availability per room and rate plan. | | `PUT` | `/v1/channels/plumguide/pricing` | Plumguide direct push. | ### Strategy shape ```json { "mode": "recommend", "minPrice": 90, "maxPrice": 600, "maxDailyChangePct": 15, "weekendMarkupPct": 10, "targetOccupancyPct": 75, "compPositionTarget": "match", "eventBoostEnabled": true } ``` ### Dashboard - https://repull.dev/dashboard/pricing — nightly recommendations, accept/decline, strategy weights editor, history. - https://repull.dev/docs/pricing — customer-facing docs. --- ## 8. 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` | `type`: model, standard, los, rate-plan, fees, currency, rule, calendar. `{id}` is the Repull listing id. | | `PUT` | `/v1/channels/airbnb/listings/{id}/availability` | `type`: rules or calendar. Blocking (`availability: "unavailable"`) sends `busy_subtype: "BLOCKED_BY_HOST"` unless you pass `OUTSIDE_RESERVATION`. | Airbnb write errors: `422 invalid_params` (field-level, nothing sent to Airbnb), `422 airbnb_rejected` (Airbnb's reason in `message`), `403 connection_reauth_required` (reconnect at https://repull.dev/dashboard/connections — retrying won't help), `403 listing_inactive`, `404 not_found`, `429 airbnb_rate_limited`, `502 airbnb_error` (Airbnb outage — retry). | `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. | Writes are per listing — there is no single call that pushes a whole portfolio to a channel. --- ## 9. Channel manager — Booking.com | Method | Path | Purpose | |---|---|---| | `POST` | `/v1/listings/{id}/publish/booking` | Publish a listing to Booking.com. | | `GET` | `/v1/channels/booking/properties` | List connected properties. | | `GET` | `/v1/channels/booking/properties/{id}` | Read one property, incl. `/rooms`. | | `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. | ### 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 GET /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) ``` --- ## 10. 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). --- ## 11. 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. | --- ## 12. 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`). --- ## 13. 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. --- ## 14. 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/{event_type}` | Fire a realistic fixture payload of that event type. | | `POST` | `/v1/webhooks/{id}/ping` | Fire a `repull.ping` and return the delivery cycle inline. | | `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. --- ## 15. 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 | |------|-----------------|--------------| | 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. --- ## 16. Errors and idempotency ### 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`. ### Idempotency Pass `Idempotency-Key: ` on POST/PUT/PATCH. Repull stores the response for 24 hours and returns the cached body on retries. --- ## 17. SDKs, MCP, AI SDK ### TypeScript ```bash npm install @repull/sdk ``` ```ts import { Repull } from '@repull/sdk' const repull = new Repull({ apiKey: 'sk_live_…' }) const properties = await repull.properties.list() const session = await repull.connect.createSession({ 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_live_…", 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_live_…" } } } } ``` 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! }), 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 ``` --- ## 18. 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. - `apps/channel-manager` — the channel-manager skeleton. Marketing landing: https://repull.dev/open-source. --- ## 19. 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. --- ## 20. 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/summary`, `/v1/usage/logs`, `/v1/usage/tier`. - 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.