Version control Claude Code configuration including: - Global instructions (CLAUDE.md) - User settings (settings.json) - Custom agents (architect, designer, engineer, etc.) - Custom skills (create-skill templates and workflows) Excludes session data, secrets, cache, and temporary files per .gitignore. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
4.8 KiB
4.8 KiB
Paper Dynasty API Reference
Load this when: You need API endpoint details, authentication setup, or Python client examples.
Authentication
All API requests require Bearer token:
export API_TOKEN='your-token-here'
Headers:
{'Authorization': f'Bearer {API_TOKEN}'}
Environments
| Environment | URL | When to Use |
|---|---|---|
| Production | https://pd.manticorum.com/api/v2/ |
Default for all operations |
| Development | https://pddev.manticorum.com/api/v2/ |
Testing only |
Set via:
export DATABASE='prod' # or 'dev'
Key Endpoints
Teams
GET /teams- List teams (params:season,abbrev,event)GET /teams/{id}- Get team by ID
Cards
GET /cards- List cards (params:team_id,player_id)POST /cards/wipe-team/{team_id}- Unassign all team cards
Packs
GET /packs- List packs- Params:
team_id,opened(true/false),new_to_old(true/false),limit(e.g., 200, 1000, 2000) - Example:
/packs?opened=true&new_to_old=true&limit=200(200 most recently opened packs) - Note: Use extended timeout for large limits (>1000)
- Params:
POST /packs- Create packs (bulk distribution)- Payload:
{'packs': [{'team_id': int, 'pack_type_id': int, 'pack_cardset_id': int|None}]}
- Payload:
DELETE /packs/{id}- Delete pack
Gauntlet Runs
GET /gauntletruns- List runs (params:gauntlet_id,team_id,is_active)PATCH /gauntletruns/{id}?ended=true- End run
Players
GET /players- List players (params:cardset,rarity)GET /players/{id}- Get player by ID
Results
GET /results- List game results (params:season,team_id)
Stats
GET /batstats- Batting statisticsGET /pitstats- Pitching statistics
Using the API Client
Basic Setup
from api_client import PaperDynastyAPI
# Initialize (reads API_TOKEN from environment)
api = PaperDynastyAPI(environment='prod', verbose=True)
# Or provide token directly
api = PaperDynastyAPI(environment='dev', token='your-token')
Common Operations
# Get a team
team = api.get_team(abbrev='SKB')
team = api.get_team(team_id=69)
# List teams
all_teams = api.list_teams()
season_teams = api.list_teams(season=5)
# List cards for a team
cards = api.list_cards(team_id=69)
# Find gauntlet teams with active runs
active_gauntlet_teams = api.find_gauntlet_teams(event_id=8, active_only=True)
# List gauntlet runs
runs = api.list_gauntlet_runs(event_id=8, active_only=True)
# Get player info
player = api.get_player(player_id=12345)
# List all MVP players
mvp_players = api.list_players(rarity='MVP')
Gauntlet Operations
# Find team
team = api.get_team(abbrev='Gauntlet-SKB')
# Wipe cards
api.wipe_team_cards(team_id=team['id'])
# Delete packs
packs = api.list_packs(team_id=team['id'])
for pack in packs:
api.delete_pack(pack['id'])
# End run
runs = api.list_gauntlet_runs(team_id=team['id'], active_only=True)
for run in runs:
api.end_gauntlet_run(run['id'])
Pack Distribution
# Distribute packs to all teams
result = api.distribute_packs(num_packs=10)
print(f"Distributed {result['total_packs']} to {result['teams_count']} teams")
# Distribute with exclusions
result = api.distribute_packs(num_packs=11, exclude_team_abbrev=['CAR', 'SKB'])
# Create specific packs for one team
api.create_packs([
{'team_id': 31, 'pack_type_id': 1, 'pack_cardset_id': None}
for _ in range(5)
])
# Create Team Choice pack with specific cardset
api.create_packs([{
'team_id': 31,
'pack_type_id': 8, # Team Choice
'pack_cardset_id': 27 # 2005 Live
}])
Analytics Operations
# Get packs opened today (built-in analytics)
result = api.get_packs_opened_today()
print(f"{result['total']} packs opened by {len(result['teams'])} teams")
for team in result['teams']:
print(f" {team['abbrev']}: {team['packs']} packs")
# Get recent opened packs
recent_packs = api.list_packs(opened=True, new_to_old=True, limit=200)
# Get unopened packs for a team
unopened = api.list_packs(team_id=69, opened=False)
# Large query with extended timeout
all_recent = api.list_packs(opened=True, limit=2000, timeout=30)
# Custom analytics (filter by specific criteria)
from datetime import datetime, timezone, timedelta
packs = api.list_packs(opened=True, limit=1000, timeout=30)
yesterday = (datetime.now(timezone.utc) - timedelta(days=1)).date()
yesterday_packs = [
p for p in packs
if p.get('open_time') and
datetime.fromtimestamp(p['open_time']/1000, tz=timezone.utc).date() == yesterday
]
API Client Location
File: ~/.claude/skills/paper-dynasty/api_client.py
Test connection:
cd ~/.claude/skills/paper-dynasty
python api_client.py --env prod --verbose