Idiomatic client for the Bequest API. Same endpoints as REST, same idempotency, native error types.
pip install bequest
Python 3.10+
Bearer token via BQ_KEY env var.
import os
from bequest import Bequest
bq = Bequest(api_key=os.environ["BQ_KEY"])
gift = bq.gifts.create(
from_="usr_8f3...",
to="org_a91...",
amount_cents=2500,
memo="Spring drive",
idempotency_key=request_id,
)
print(gift.status) # "settling"
campaign = bq.campaigns.create(
name="Spring Build-a-Well Drive",
goal_cents=7_500_000,
story="We are building 12 wells in...",
status="live",
)
print(campaign.url)
pool = bq.pools.create(
name="Cedar Block Mutual Aid",
flavor="community",
legal_structure="mutual_aid",
distribution_mechanism="threshold",
)
bq.pools.disburse(pool.id, to="usr_77...", amount_cents=35000)
from flask import Flask, request, jsonify
import os, bequest
app = Flask(__name__)
secret = os.environ["BQ_WEBHOOK_SECRET"]
@app.post("/webhooks/bequest")
def hook():
event = bequest.webhooks.construct_event(
payload=request.get_data(),
signature=request.headers["bq-signature"],
secret=secret,
)
if event.type == "gift.settled":
ledger.write(event.data)
return jsonify(received=True)
from bequest import IdempotencyError, RateLimitError, AuthError
try:
bq.gifts.create(...)
except IdempotencyError:
pass # reuse existing gift
except RateLimitError as e:
sleep(e.retry_after)
except AuthError:
# Rotate key
raise
The complete reference covers every resource, every parameter, every status code.
Open the API reference