Bullmark for developers
Redemption is two steps, and you own the second one
Section titled “Redemption is two steps, and you own the second one”The holder reserves a voucher. It burns when you confirm you gave them the value — in the same transaction, on our side.
That order matters. If a voucher could be spent before you had given anything, then “the customer paid and the voucher did not move” would be a state that really happens, and no amount of sealing repairs it afterwards. So nothing is spent until you say so, and a failed payment costs your customer nothing.
Three ways in
Section titled “Three ways in”| what it costs you | when to use it | |
|---|---|---|
| A link | nothing | You have written no integration. We send the holder to your pricing page with a ticket in the query string. |
| The partner API | one HTTP call | Your checkout knows about vouchers. This is the real integration. |
| A screen we host | nothing | Someone at a counter types the code in. Works today, for any brand. |
All three land in the same place on our side, so there is exactly one answer to “was this voucher used”.
You do not have to trust us
Section titled “You do not have to trust us”Every redemption is an event on an append-only, sealed chain. The SDK’s verify() fetches
that chain and recomputes the hashes on your machine — it does not ask us whether we
are telling the truth.
const result = await bm.integrity.verify(code);// → { verdict: 'verified', chainIntact: true, events: [...] }We publish the hash algorithm, and the conformance vectors that keep our two implementations honest, for the same reason.