Repository navigation
Releases
2.2.0
Added
- Charge electricity meters and read receipts, tokens and refunds with safe recovery after an interrupted request.
- Quote direct recharges, follow them and correct recipient details while a direct recharge is paused.
- Manage a webhook endpoint and request delivery again when a notification was missed.
- Verify notifications before reading their contents and keep recipient field errors available to the integration.
Changed
idempotency_conflicton a meter charge or direct recharge create or resume is now an unknown outcome (MeterChargeOutcomeUnknown/DirectRechargeOutcomeUnknown), not "not placed": the operation may already have been accepted and charged, so read it by its id withgetbefore any new attempt. Card orders are unchanged.- A meter charge read as
failedwith apendingrefund is reported as processing, not final: the money was taken and the refund is on its way. - Reading a meter charge or direct recharge that was closed with a recorded refusal raises the typed API error with
is_replayedset. - A webhook endpoint URL must have a host name that contains a dot.
Security
- A key published for webhooks can no longer verify an API answer; a key without a purpose still verifies, as before.
2.1.0
Added
- Catalogue subcategories expose
category_type(categoryType) with local and international values, and unknown when absent or unrecognized. - Catalogue card
categoryexposestypewith the same values and unknown handling. Owned cards, reveals and orders are unchanged.
2.0.1
Fixed
- A wallet whose balance is below zero — while it uses allowed debt — can be read again. In 2.0.0, listing or reading such a wallet failed with an error. Amounts in Anis's answers may carry a leading minus sign (
-150.000);-0.000reads as zero.Moneyaccepts a negativeDecimaltoo. - Prices you send are unchanged: an order still refuses a unit price that is not greater than zero, before anything is sent.
- Documentation: the spending-cap refusal (
spending_limit_exceeded) and the money rule in Orders and recovery; the live-verification note now says which version it covers.
2.0.0
Breaking changes
- Recognise
spending_limit_exceeded(HTTP 429): a spending-capped order is not placed and is reported asLimitExceededErrorwith theRetry-Afterdelay until the spending window ends. - Require
anis-response-v2, bind the raw request signature, and enforce compromised and retired signing-key state. Every published response key (active, next or retired) refuses a signature created before itsnotBefore(key_not_yet_valid). - The signing-key document is cached for 300 seconds by default and at most 300 seconds;
ClientOptionsand both key sources refuse a longer cache. - An unknown response key id re-fetches the key document at most once per 30 seconds per key source (sync and async), failed fetches included.
- Documentation: retired keys stay published for 90 days after retirement.
- Use
/owned-cardsroutes and sharedCardSummaryin masked cards, reveals and order credentials; masked ids aresold_card_idandoperation_id. Wallet currency isbalance.currency. Money wire values require nonnegative three-place amounts and uppercase currency codes. - Add
access.suspend_application(reason),access.revoke_key(key_id, reason), andcatalogue.get_card(wallet_id, card_id)in both clients. Catalogue cards include logo/category and subcategory lists include description.
1.x is deprecated — upgrade to 2.0.0.
v1.1.0
v1.1.0 — Anis now signs only the answers that move money, deliver card codes or establish your key, and this version verifies exactly those.
- Verified, as before, every answer and every refusal: place an order, read an order, reveal a card, reveal an invoice's cards, the four enrollment calls, the signature self-test. A missing or invalid signature on these still fails.
- No longer verified: the information reads — profile, wallets, the catalogue, your owned cards (list and read). Anis does not sign them; TLS protects them. They no longer fetch Anis's key document, so they keep working while it cannot be reached.
- Every request is still signed exactly as before.
- CI: the lowest-dependency type check passes again with opentelemetry-api 1.45.1.
Upgrade: earlier versions verify every answer and fail on the information reads against Anis's current API. Use 1.1.0 or later.
Proven live on 2026-10-07 against a complete Anis stack: enrollment, the eight information reads, an order and its replay, both reveals, a signed and an unsigned refusal.
v1.0.0
First release of anis-partners. Partners get signed requests, verified responses, typed models and errors, synchronous and asynchronous operation groups, enrollment support, safe order recovery outcomes, bounded signing-key caching, and tests against the published wire vectors and contracts.