Idiomatic client for the Bequest API. Same endpoints as REST, same idempotency, native error types.
gem install bequest
Ruby 3.0+
Bearer token via BQ_KEY env var.
require "bequest"
bq = Bequest::Client.new(api_key: ENV.fetch("BQ_KEY"))
gift = bq.gifts.create(
from: "usr_8f3...",
to: "org_a91...",
amount_cents: 2_500,
memo: "Spring drive",
idempotency_key: request_id
)
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"
)
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: 35_000)
require "sinatra"
post "/webhooks/bequest" do
body = request.body.read
event = Bequest::Webhooks.construct_event(
payload: body,
signature: request.env["HTTP_BQ_SIGNATURE"],
secret: ENV.fetch("BQ_WEBHOOK_SECRET")
)
Ledger.write(event.data) if event.type == "gift.settled"
{ received: true }.to_json
end
begin
bq.gifts.create(...)
rescue Bequest::IdempotencyError
# reuse existing
rescue Bequest::RateLimitError => e
sleep(e.retry_after)
rescue Bequest::AuthError
# rotate key
end
The complete reference covers every resource, every parameter, every status code.
Open the API reference