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.

Metadata

Release files for repull-sdk 0.2.31

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.31
File Size Uploaded
repull_sdk-0.2.31.tar.gz 797.9 kB Details

Built distribution (wheel)

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

Total release size: 2.4 MB

Release files / repull_sdk-0.2.31.tar.gz

Download URL repull_sdk-0.2.31.tar.gz
Size 797.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2f4c28a9f965f8b8958422fdd9b67f123093f6dc9d4f40d3b6a20f562c7a1144
BLAKE2b-256 checksum
How to use checksums
ea44c97105ed2b4ce4e26b853ea0a65545fd981d0fa694bfe4d26652556c4f3f
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.31-py3-none-any.whl

Download URL repull_sdk-0.2.31-py3-none-any.whl
Size 1.6 MB
Tags Python 3
SHA-256 checksum
How to use checksums
b984862a0030f017db70d1a02be7f2396fded0a4165375e64f79f623d18c8abd
BLAKE2b-256 checksum
How to use checksums
7f7c91f5ccd4173f00a6ca5a16898ba666f576f42b0f918d04d101881938a9dc
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

This release

0.2.31 This release

2 release files

0.2.26

2 release files

0.2.25

2 release files

0.2.24

2 release files

0.2.23

2 release files

0.2.22

2 release files

0.2.21

2 release files

0.2.20

2 release files

0.2.19

2 release files

0.2.18

2 release files

0.2.17

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