Skip to content

Python SDK

The official Python SDK provides an async-first interface to the Pulls API with Pydantic models and type hints.

Terminal window
pip install pulls-api
import os
from pulls import PullsAPI
pulls = PullsAPI(api_key=os.environ["PULLS_API_KEY"])
# Get a card
card = pulls.cards.get("sv7-001")
print(card.name) # "Bulbasaur"
# Search cards
results = pulls.search.cards(
query="Charizard",
tcg="pokemon"
)
# List prices
prices = pulls.prices.list(
card_ids=["sv7-001", "sv7-002"]
)
import asyncio
from pulls import AsyncPullsAPI
async def main():
pulls = AsyncPullsAPI(api_key=os.environ["PULLS_API_KEY"])
# Concurrent requests
card, prices = await asyncio.gather(
pulls.cards.get("sv7-001"),
pulls.prices.list(card_ids=["sv7-001"])
)
print(f"{card.name}: ${prices[0].market}")
asyncio.run(main())

Until the official SDK is released, generate a client from our OpenAPI spec:

Terminal window
# Install OpenAPI Generator
npm install @openapitools/openapi-generator-cli -g
# Generate Python client
openapi-generator-cli generate \
-i https://api.pulls.app/openapi.json \
-g python \
-o ./pulls-client
# Install generated client
pip install ./pulls-client
import httpx
import os
API_KEY = os.environ["PULLS_API_KEY"]
BASE_URL = "https://api.pulls.app/v1"
headers = {"Authorization": f"Bearer {API_KEY}"}
# Get a card
response = httpx.get(f"{BASE_URL}/cards/sv7-001", headers=headers)
card = response.json()
print(card["name"])
# Search cards
response = httpx.get(
f"{BASE_URL}/search",
params={"query": "Charizard", "tcg": "pokemon"},
headers=headers
)
results = response.json()
from pydantic import BaseModel
from typing import Optional
from enum import Enum
class Tcg(str, Enum):
POKEMON = "pokemon"
MTG = "mtg"
YUGIOH = "yugioh"
LORCANA = "lorcana"
ONEPIECE = "onepiece"
class CardSet(BaseModel):
id: str
name: str
class Prices(BaseModel):
market: float
low: float
high: float
class Card(BaseModel):
id: str
name: str
tcg: Tcg
set: CardSet
number: Optional[str] = None
rarity: Optional[str] = None
image_url: Optional[str] = None
prices: Optional[Prices] = None

Want to be notified when the Python SDK launches?

Join the waitlist