Skip to main content

Repull Python SDK

Status: v0.2.0 — beta. API surface stable; minor renames possible before 1.0.

Typed Python client for api.repull.dev — the unified API for vacation-rental tech (50+ PMS platforms, Airbnb / Booking.com / VRBO / Plumguide channels, AI ops, white-label OAuth Connect).

Async by default. Generated from OpenAPI. Fully typed (attrs + httpx).

Install

The PyPI package name repull is reserved but not yet published. For now, install from git:

pip install git+https://github.com/ivannikolovbg/repull-python.git

Once published:

pip install repull

Requires Python 3.10+.

Quick start

import asyncio
import os

from repull import AuthenticatedClient
from repull.api.reservations import list_reservations

async def main():
    client = AuthenticatedClient(
        base_url="https://api.repull.dev",
        token=os.environ["REPULL_API_KEY"],
    )
    async with client as c:
        page = await list_reservations.asyncio(client=c, limit=10)

    for r in page.data:
        print(r.id, r.check_in, r.check_out, r.platform)

asyncio.run(main())

There is also a sync flavour for every endpoint — drop the async with and call list_reservations.sync(...) instead.

Authentication

Every call goes through AuthenticatedClient(token=...). The token is your Repull API key — it looks like sk_live_....

Get one at repull.dev/dashboard → API keys.

What's in the SDK

The client is generated tag-by-tag from the OpenAPI spec. The modules mirror the API surface:

Module Endpoints
repull.api.system GET /v1/health
repull.api.properties list / get properties
repull.api.reservations list / get / create / patch / delete reservations
repull.api.availability per-property calendar read + bulk write
repull.api.guests guest CRM list + detail
repull.api.conversations list threads, read & post messages
repull.api.connect white-label OAuth Connect — list, status, create, disconnect
repull.api.webhooks manage subscriptions + fire test events
repull.api.airbnb listings, pricing, availability, photos, messaging, reservations, reviews, sync
repull.api.booking_com properties, availability, content, messaging, sync
repull.api.vrbo listings, reservations
repull.api.plumguide listings, availability, pricing
repull.api.ai run AI operations (autorespond, smart pricing, etc.)
repull.api.billing view & change plan

Everything is fully typed — your editor will autocomplete every parameter and every response field.

Examples

Run them with a real API key:

REPULL_API_KEY=sk_live_... python examples/quickstart.py

Connect (OAuth)

Repull Connect lets you link a property manager's Airbnb / Booking.com account in a few lines:

from repull.api.connect import create_connect_session
from repull.models.create_connect_session_body import CreateConnectSessionBody

session = await create_connect_session.asyncio(
    client=c,
    body=CreateConnectSessionBody(
        redirect_url="https://yourapp.example.com/airbnb/return",
        allowed_providers=["airbnb"],
    ),
)
# Send the user to session.url

After the user comes back, poll get_connect_status.asyncio(provider="airbnb", client=c) to confirm.

Pagination

Every list endpoint returns the same canonical envelope:

page = await list_reservations.asyncio(client=c, limit=50)
page.data                      # list[Reservation]
page.pagination.next_cursor    # str | None — pass back as `cursor=`
page.pagination.has_more       # bool — stop when False
page.pagination.total          # int | UNSET — present when ?include_total=true

Loop until pagination.has_more is False, threading pagination.next_cursor back as the next call's cursor arg. Cursors are opaque base64 — never parse or construct them by hand.

Error handling

By default, unexpected HTTP statuses return None from the high-level .asyncio() / .sync() calls. To raise instead:

client = AuthenticatedClient(
    base_url="https://api.repull.dev",
    token=os.environ["REPULL_API_KEY"],
    raise_on_unexpected_status=True,
)

You can also call .asyncio_detailed() / .sync_detailed() to get the full Response (status code, headers, raw bytes, parsed body).

Regenerating the client

The repo snapshots the current spec at openapi/v1.json so codegen is fully reproducible.

# Pull a fresh spec from api.repull.dev and regenerate
./scripts/regen.sh

# Use the snapshot in openapi/v1.json without hitting the network
./scripts/regen.sh --offline

You'll need openapi-python-client on your PATH:

uv tool install openapi-python-client
# or
pipx install openapi-python-client

Reference

License

MIT — see LICENSE. The Python client is a thin auto-generated wrapper, free to use anywhere.

(Note: the TypeScript SDK is licensed differently because it ships a hand-written facade plus the demo + channel-manager template. See repull-sdk if you need that.)


Powered by Repull. AI features powered by Vanio AI.

Release files for repull-sdk 0.2.17

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for repull-sdk 0.2.17
File Size Uploaded
repull_sdk-0.2.17.tar.gz 597.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for repull-sdk 0.2.17
File Interpreter ABI Platform
repull_sdk-0.2.17-py3-none-any.whl Python 3 none any Details

Total release size: 1.8 MB

Release files / repull_sdk-0.2.17.tar.gz

Download URL repull_sdk-0.2.17.tar.gz
Size 597.5 kB
Tags Source
SHA-256 checksum
How to use checksums
562d3c0fd24c02f91b6c47bb2d64a284c5c28744dcf40ccb0c920bc932dd4f3e
BLAKE2b-256 checksum
How to use checksums
d0e0f545e0e532740c535521cfdd0961a93f725dfe62057bda98a111ee35884e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / repull_sdk-0.2.17-py3-none-any.whl

Download URL repull_sdk-0.2.17-py3-none-any.whl
Size 1.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
f34366c90b844d37f83a2113298512d6a3082ed04f16d8636af0f2c7eb6d2d8f
BLAKE2b-256 checksum
How to use checksums
154d049e9a899d494fa021a3942013d7ddebcbf02d48b34e772501081ef2ab89
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.2.19

2 release files

0.2.18

2 release files

This release

0.2.17 This release

2 release files

0.2.16

2 release files

0.2.15

2 release files

0.2.14

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.5

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page