> ## Documentation Index
> Fetch the complete documentation index at: https://docs.byzantine.fi/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Release notes for the Byzantine API.

All notable changes to this project will be documented in this page.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## \[1.21.1] - 2026-06-19

### 🐛 Bug Fixes

* *(tx-status)* Correct the withdraw tx-status during a vault upgrade

* *(emails)* Capitalize first name when fetching it from Sumsub

### 🚀 Features

* *(tx-status)* Process Bridge refunds webhooks

* *(upgrade)* Revert the upgrade if amount to Bridge \< 1 EURC

* *(emails)* Send withdraw completed emails for offramps

* *(emails)* Send vault upgrade completed email when funds have landed on Ethereum

## \[1.21.0] - 2026-06-15

### ⚙️ Miscellaneous Tasks

* *(ci)* Improve workflow with nightly fmt, rust-cache and --locked

* *(chore)* Track Cargo.lock for reproducible builds

### 🐛 Bug Fixes

* *(webhooks)* Make webhook event publishing idempotent

* *(schemas)* Sync diesel schemas with new DB schemas

* *(vault-upgrade)* Ensure fiat\_account\_id is null for vault upgrade deposit payloads

### 🚀 Features

* *(webhooks)* Add webhook event contract

* *(bridge)* Add EEA regulatory field seams

* *(getters)* Returns related\_transaction\_id in transaction(s) getter(s)

### 🧪 Testing

* *(webhooks)* Add webhook e2e harness

* *(webhooks)* Run webhook e2e tests

## \[1.20.0] - 2026-05-22

### 🐛 Bug Fixes

* Harden webhook delivery scaffolding

* Address webhook review findings

### 📚 Documentation

* Add webhook delivery ADR

* Clarify webhook API documentation

* Update webhook changelog

### 🚀 Features

* Add webhook outbox schema

* Add webhook signature envelope

* Add webhook endpoint safety checks

* Add webhook control plane

### 🚜 Refactor

* Extract private key encryption helper

* Type webhook delivery states

## \[1.19.1] - 2026-05-20

### 🐛 Bug Fixes

* *(getters)* Read company email from fixedInfo.companyInfo

* *(serde)* Add FedNow variant and Unknown catch-all to deserialized enums

* *(webhooks)* Run Bridge customer creation in background task

### 🚀 Features

* *(workflow)* Route SSH via AWS SSM Session Manager (SOC2)

## \[1.19.0] - 2026-05-12

### 🐛 Bug Fixes

* *(nonce)* Retry broadcast once after rebuilding the wallet provider

### 🚀 Features

* *(deploy)* Add support for blue/green deployment in the workflow

## \[1.18.1] - 2026-05-11

### 🚀 Features

* *(sandbox)* Auto approve applicant if sandbox mode to skip manual review

* *(email)* Send email if a Bridge payment is `under review`

### 🐛 Bug Fixes

* *(onboarding)* Override address fields with Sumsub basic-Latin transliteration before sending to Bridge

## \[1.18.0] - 2026-05-06

### 🚀 Features

* *(getter)* Endpoint to get pages of all the transactions of integrator's customers -> `/get-all-transactions`

### 🚜 Refactor

* *(tx-types)* Introduce `funds_received` types for onramps

* *(tx-type)* Introduce "business" tx type and handle "on\_ramp\_only" tx. New response struct for transactions getters.

* *(migration)* Python script to populate past onramps only transactions in DB

* *(clean)* Remove deprecated OTP functions

## \[1.17.3] - 2026-04-30

### 🚀 Features

* *(alert)* Telegram notifications when a customer is created on Bridge (success or error)

* *(env)* Remember `DEPLOY_ENV` variable and skip whitelisting on sandbox

* *(nonce)* Use the alloy cached nonce manager to prevent nonce conflicts

### 🐛 Bug Fixes

* *(emails)* Should send the `resubmission-requested` email

* *(bridge-api)* Configure timeouts for BridgeApi reqwest client

### ⚙️ Miscellaneous Tasks

* *(emails)* Update turnkey email template to v2

### 🚜 Refactor

* Remove unnecessary `#[derive(Clone)]` from `AppState` and service structs

## \[1.17.2] - 2026-04-27

### 🐛 Bug Fixes

* *(gas-filler)* Increase estimated `gas_limit` by 25% if not provided in the tx

## \[1.17.1] - 2026-04-23

### 🐛 Bug Fixes

* *(bridge-webhook)* Support the new virtual account activity types ('refund\_in\_flight', 'refund\_failed')

* *(getter)* `get-user-details` does not revert if address questionnaire is empty

### 🚀 Features

* *(logs)* Enhance error logs in case of tx failure

* *(getter)* Add per chain `is_smart_account` field and bank accounts details in `/get-account-details`

* *(logs)* Enhance telegram notifications content en design

## \[1.17.0] - 2026-04-22

### 🚀 Features

* *(notify)* Set up a Telegram bot to send alerts in real time

* *(simulation)* Simulate transaction (`eth_simulateV1` rpc call) before broadcast

* *(tx-status)* New transaction status for revert, and simulation failed: `reverted` and `simulation-failed`

### 🐛 Bug Fixes

* *(rounding)* `/get-account-balances` returns same number of decimals (for `balance`) as the underlying asset

### Clean

* Remove deprecated `/send-transaction-otp` endpoint

## \[1.16.0] - 2026-04-17

### 🚀 Features

* *(multi-tx)* Allow the signing of multiple transactions with one passkey prompt

* *(vault-upgrade)* Implement the `/get-vault-upgrade-payload-passkey`<br />
  Creates a withdrawal tx from the Base vault and a deposit tx to the Ethereum vault

* *(vault-upgrade)* Logic to sign and broadcast the `vault-upgrade` transaction

* *(transactions)* Returns immediately the `transaction_hash` instead of waiting for the `transaction_receipt`<br />
  Increase API response time

* *(webhook)* Handle `liquidation_address.drain` webhook for off-ramps status and vault-upgrades deposit tx broadcast

## \[1.15.3] - 2026-04-14

### ⚙️ Miscellaneous Tasks

* *(gh-actions)* Update GitHub Actions to v6

### 🐛 Bug Fixes

* *(webhook)* Strip email suffix from Bridge customer events before user lookup

### 🚀 Features

* *(doc)* Restore `asset-manager` endpoint + clean up swagger + protect all endpoints with `integrator-auth`

* *(security)* Protect admin swagger with a UI Basic Auth (password)

## \[1.15.2] - 2026-04-10

### Clean

* *(database)* Do not use anymore the `public` schema (old indexer)

### Wip

* *(database)* Re-arrange and rename `off_ramp_addresses` tab

## \[1.15.1] - 2026-04-09

### 🚀 Features

* *(bridge)* Can update Bridge customer data from `bridge_account_id` with PUT endpoint

* *(log)* Add error logging for background transaction broadcast

### 🐛 Bug Fixes

* *(kyb)* Add `STATE_REGISTRY` doc in the Bridge doc mapping + fallback for `business_trade_name`

* *(emails)* Do not return before emails if ApplicantReviewed email for non ubos

* *(bridge)* Don't send state to Bridge if not USA or Canada address

### 🚜 Refactor

* *(onboarding)* Delete `init-account-creation` and `complete-account-creation` endpoints

## \[1.15.0] - 2026-04-07

### 🚀 Features

* *(data)* Split `user_name` into `first_name` and `last_name`

## \[1.14.5] - 2026-04-03

### 🚀 Features

* *(onboarding)* Add applicant tags on Sumsub AND self custodial wallet support

* *(migration)* Migrate sumsub applicants to last up to date levels

* *(logs)* Display Bridge create\_customer response

* *(kyb)* Can request entity check when adding ubos

* *(kyb)* Can request entity check on ApplicantReviewed ubos webhook

* *(kyb)* Do not request entity check if company is already approved

### 🐛 Bug Fixes

* *(serde)* Make town optional for deserialization

* *(kyb)* Split the last '+' on email instead of the first one

* *(kyb)* Request entity check code location

* *(bridge)* Send postal code in Ruby regex format to Bridge API

## \[1.14.4] - 2026-03-27

### 🐛 Bug Fixes

* *(kyb)* Extract company documents to send from `get_image_metadata` (cannot rely on the outcome of `get_id_verification_results`)

### 🚜 Refactor

* *(kyc)* Make High Risk questionnaire for individuals mandatory

## \[1.14.3] - 2026-03-26

### 🐛 Bug Fixes

* *(kyb)* Insert beneficiary in DB before creating it on Sumsub to avoid race condition

### 🚀 Features

* *(webhook)* Update or create associated person on Bridge for Reviewed GREEN Sumsub Webhook

## \[1.14.2] - 2026-03-26

### 🚀 Features

* *(kyb)* Implements endpoint `/add-associated-person` and `/update-associated-person`

### 🐛 Bug Fixes

* *(kyb)* Do not consume `business_activities` before sending the `business_industry` to Bridge

## \[1.14.1] - 2026-03-25

### 🚜 Refactor

* *(webhook)* Remove `AwaitingUser` webhook handler

* *(kyb)* Make *proof of source of fund* document mandatory for entities

## \[1.14.0] - 2026-03-24

### 🚀 Features

* *(patch)* Implement `/update-entity-account` endpoint

* *(webhook)* Create Bridge business customer on `onHold` GREEN Sumsub webhook for entities

### 🐛 Bug Fixes

* *(onboarding)* Do not request applicant check if status is already Active

* *(getters)* Treat `ApproveDeposit` transactions as `Deposit` for fiat instructions

### ⚙️ Miscellaneous Tasks

* chore(doc): Restructure the endpoint tags and change description

## \[1.13.1] - 2026-03-19

### ⚙️ Miscellaneous Tasks

* *(getters)* Enrich get-customers endpoint with verification status, timestamps and user details

### 🐛 Bug Fixes

* *(kyb)* Remove high risk info questionnaire from entity required docs

## \[1.13.0] - 2026-03-19

### 🚀 Features

* *(kyb)* Add the `RepresentativeTitle` questionnaire in KYB flow

* *(kyb)* Get and return the missing documents and data for an entity

* *(kyb)* Request sumsub validation check on associated-persons if all documents are provided

### 🚜 Refactor

* *(kyb)* New body for `create-entity` endpoint

* *(kyb)* Change `EntityDocumentType` enum to match sumsub doc type

* *(kyb)* Enhance the way of sending docs to sumsub

* *(kyb)* New logic to create a beneficiary - Database update in `ApplicantCreated` webhook

* *(kyb)* Make high-risk-business-activities questionnaire optionnal

### ⚙️ Miscellaneous Tasks

* *(style)* Rename `create-entity` by `create-entity-account`

### 🐛 Bug Fixes

* *(bridge)* Add +user\_id suffix to email for individual customer uniqueness

* *(bridge)* Use Sumsub image metadata to correctly assign ID card front/back sides

## \[1.12.1] - 2026-03-13

### 🐛 Bug Fixes

* *(bridge\_repository)* Make `country` optional in `GetCustomerAddressReponse`

### ⚙️ Miscellaneous Tasks

* *(kyc)* Verify request consistency when creating individual account

## \[1.12.0] - 2026-03-10

### 🚀 Features

* *(onbaording)* New PATCH endpoint `/update-individual-account` to modify or complete existing individual user details

* *(onbaording)* Can check verification documents status and return the missing docs in `create-individual-account` and `update-individual-account`

* *(bridge)* Create customer on Bridge when sumsub applicant is `onHold` and `GREEN` -> when all the sumsub checks pass

* *(compliance)* Save in the DB (`accounts` table) the Byzantine T\&C signed timestamp

### 🚜 Refactor

* *(onbaording)* rename `create-user` by `create-individual-account` + make all the fields optional (see the PATCH endpoint to complete the kyc)

* *(onbaording)* Make `bridge_account_id` Optional

* *(onbaording)* Remove `get-tos-acceptance-link` endpoint -> use the `account_id` instead

### ⚙️ Miscellaneous Tasks

* *(logs)* Imporve Bridge webhooks logs

## \[1.11.0] - 2026-03-03

### 🐛 Bug Fixes

* *(emails)* `BYZ_USER_ID` variable must be a string (not a UUID)

* *(accounts)* Correct user account role for `self_custodial` accounts creation

* *(getters)* Fallback user details to beneficiary id if individual user does not exist

### 🚀 Features

* *(getters)* Enhance `get-user-details` endpoint response and query (can be called with either user's uuid or email)

* *(getter)* Enhance `get-entity-details` endpoint response

* *(getter)* Implement `get-customers` to return all the business and individual customers of an integrator

* *(getter)* Implement `get-account-details` endpoint

* *(migration)* Implement script and SQL migration to migrate beneficiary users for multi accounts feature

### 🚜 Refactor

* Script to delete duplicate emails from DB

* Pair `(integrator_id, email)` MUST be unique in users table

* Cannot create multiple individual accounts with the same email

* Fill the beneficiaries table when entity is created

* Add beneficiaries in account users junction table

* *(sumsub)* Remove external\_user\_id from `BeneficiaryInfo` structure (DON'T fail if `beneficiary-random-*`)

### Optim

* Insert new account on DB when bridge\_customer\_id is known

* Add parallelism in sumsub webhook handler

* Remove code duplication in `invite-users` endpoint

## \[1.10.0] - 2026-02-23

### Clean

* *(approve)* Remove approval query endpoints

### 🚀 Features

* *(batching)* Batch approvals and deposits in `get-deposit-payload-passkey`

* *(batching)* Batch approvals and deposits in `sign-payload-passkey`

### 🚜 Refactor

* New approved\_vaults table for batching

## \[1.9.1] - 2026-02-20

### 🐛 Bug Fixes

* *(sumsub-data)* Make sumsub postCode optional + fallback to address questionnaire

### 🚀 Features

* *(getter)* `get-account-balances` endpoint. Returns the positions on all Byzantine vaults (optional filter by `chain_id`), the current vault `price_per_shares` and the wallet balance (idle tokens).

* *(getter)* Add graphql\_client and U256 utility for big numbers

* *(getter)* Define Indexer GraphQL schema and queries

* *(sumsub)* Add ID and share\_size fields to Beneficiary struct

* *(sumsub)* Implement Sumsub API method to unlink beneficiaries

* *(emails)* Include SelfCustodial users in root-level account queries

### 🚜 Refactor

* *(onboarding)* Sequence Sumsub questionnaire submissions

* *(onboarding)* Handle existing beneficiaries and re-linking to correct sumsub user

* *(emails)* "Incomplete" bridge status not considered as a rejection

* *(style)* Improve readability of account\_data handler

## \[1.9.0] - 2026-02-17

### ⚙️ Miscellaneous Tasks

* *(getters)* Returns the invitations user role in the getters

* *(getters)* Returns user\_id in pending\_invitations

* *(getters)* Returns full data in get-invitations endpoints

* *(webhooks)* Remove HashMap to store Bridge webhook pubkey

* *(dapp-endpoints)* Set account\_name, user\_name, and entity\_name in init-account-creation

* *(style)* Filter out Account in invitation email

### 🐛 Bug Fixes

* *(getters)* Customer getters don't revert if KYC not started

* *(otp)* Use parent-org id for init and verify otp

* *(webhooks)* Bridge webhook handler doesn't return errors anymore if account not found

* *(otp)* Sender and reply\_to emails for init-otp

* *(otp)* Otp-auth cryptography bug fixes

* *(webhooks)* Bridge webhook handler doesn't return errors anymore if account not found

* *(onboarding)* Handle existing beneficiaries in create-entity

* *(onboarding)* Allow bridge customer id update if previous one not found

### 🚀 Features

* *(dApp-endpoints)* Add account id and inviter id in invitations getters

* *(dApp-endpoint)* Can update an inactive bridge customer id in complete-account-creation

* *(database)* Adds bool to know if kyc/kyb emails have already been sent

* *(emails)* Send KYB submitted email to root users + use bool in DB to not send duplicates

* *(onbaording)* Don't recreate sumsub applicant if already exists

* *(onboarding)* Allow invitation of an existing user

* *(emails)* OTP code not alphanumeric with 6 digits

* *(emails)* Add VAULT\_ADDR in email app link

* *(emails)* Customizes invite link in email

* *(onboarding)* Approve on sumsub and whitelist self-custodials when Bridge validate KYC

### 🚜 Refactor

* *(onboarding)* Create beneficiaries in ApplicantAwaitingUser webhook

## \[1.8.1] - 2026-02-06

### 🚀 Features

* *(getter)* Replace `get-invitations-by-user_id` by `get-invitations-by-email`

* *(getter)* Enhance `get-entity-details` by providing team members and roles and pedning invitations

### ⚙️ Miscellaneous Tasks

* Add `onchainTxAmount` in response of `get-transactions`

* Update invitation table + send invitation-accepted email

## \[1.8.0] - 2026-02-06

### 🚀 Features

* *(user)* `/create-authenticators-otp` endpoint to add a passkey from an otp session

## \[1.7.0] - 2026-02-05

### 🚀 Features

* *(otp\_auth)* `init-otp` endpoint to send a code to a specific email address

* *(otp\_auth)* `otp-auth` endpoint to verify the otp code and generate a session token

* *(otp\_auth)* otp\_sessions DB table and schemas

## \[1.6.0] - 2026-02-04

### 🚀 Features

* *(root-quorum)* Endpoints to update users role / root quorum in a Byz account. See `/get-update-users-role-payload-passkey` and `/update-users-role`

## \[1.5.2] - 2026-02-03

### 🚀 Features

* *(database)* Invitations database table

* *(getters)* Can query invitations by account id (`/get_invitations_by_account_id`) or user id (`/get_invitations_by_user_id`)

* *(emails)* Team member invited emails

### 🚜 Refactor

* *(multi-user)* Create OTP user by default during invitation (no passkey)

### 🐛 Bug Fixes

* *(endpoints)* Adjust `/get-invite-users-payload-passkey` and `/invite-users` endpoints with new migration

## \[1.5.1] - 2026-01-28

### 🚀 Features

* *(kyb)* Sumsub proof of source of funds doc submission

* *(emails)* KYC/KYB rejected email

* *(emails)* Send finalize-deposit email if on-ramp amount doesn't match expected amount

### ⚙️ Miscellaneous Tasks

* *(emails)* No KYC status emails for ubos

* *(emails)* Integrate resend templates

* *(emails)* Send KYB submitted email during `ApplicantReviewed` webhook

### 🐛 Bug Fixes

* *(sumsub)* Retries with exponential backoff for request\_applicant\_check

* *(create-entity)* Do not spam the request-applicant-check endpoint

### Optim

* *(speed)* Create sumsub and bridge account in parallel

## \[1.5.0] - 2026-01-25

### 🚀 Features

* *(multi-users)* `invite-users` endpoint. Emails not implemented yet

* *(multi-users)* `get-invite-users-payload-passkey` endpoint

* *(multi-users)* Passkey auth in invite-users endpoint

### ⚙️ Miscellaneous Tasks

* *(root-users)* Add the `turnkey_user_id` in the API database

* *(root-users)* Stores turnkey user id for byz users

## \[1.4.4] - 2026-01-22

### 🚀 Features

* DApp endpoints CAN accepts self custodials wallets

## \[1.4.3] - 2026-01-22

### 🚀 Features

* Create beneficiary byz users for dApp entities.
* Fetch beneficiaries byz id from sumsub `applicant_id` if needed

## \[1.4.2] - 2026-01-21

### 🐛 Bug Fixes

* *(bridge-webhook)* Make amount field optional

### ⚙️ Miscellaneous Tasks

* *(db-schemas)* Update schemas to last DB version

## \[1.4.1] - 2026-01-16

### ⚙️ Miscellaneous Tasks

* *(schema)* New schemas for moving average
* Reduces / removes security buffer for on-ramps with same currency

## \[1.4.0] - 2026-01-13

### 🚀 Features

* Remove endpoints related to transactions pre-signatures `*-transaction-passkey` and old verifiers.

  Use now the `*-payload-passkey` endpoints

### ⚙️ Miscellaneous Tasks

* Adapt OTP endpoints to new verifiers (OTP endpoints still not finished)

## \[1.3.2] - 2026-01-13

### ⚙️ Miscellaneous Tasks

* *(schema)* New indexer async vault schema

## \[1.3.1] - 2026-01-12

### 🐛 Bug Fixes

* *(deps)* Update alloy version and fillers used

## \[1.3.0] - 2026-01-12

### 🚀 Features

* *(async-vault)* Can withdraw from euros async vaults

## \[1.2.4] - 2026-01-09

### 🐛 Bug Fixes

* *(async-vault)* Update AsyncVault struct to new indexer schema

## \[1.2.3] - 2026-01-09

### 🐛 Bug Fixes

* *(webhook-pubkey)* Base64 representation of the pubkey in the .env

## \[1.2.2] - 2026-01-08

### ⚙️ Miscellaneous Tasks

* Set bridge webhook pubkeys in .env + take config variables when reading them

* Add Base support for gate contracts

## \[1.2.1] - 2026-01-08

### Logs

* Display logs when sending applicant status emails

### ⚙️ Miscellaneous Tasks

* *(on-ramp)* Add `expected_deposit_amount` in SourceDepositInstructions

### 🐛 Bug Fixes

* *(doc)* CamelCase for payment rail virtual account data

## \[1.2.0] - 2026-01-08

### 🚀 Features

* *(async-vault)* EUR Vault (aka Async Vault) indexer schema

* *(async-vault)* EUR Vault logic in `/get-approve-payload-passkey` and `/get-deposit-payload-passkey` query endpoints

* *(async-vault)* EUR Vault logic in `/v1/submit/sign-payload-passkey` for approvals and deposits + bridge webhook for on-ramps

## \[1.1.3]

### 🚀 Features

* *(top-vaults)* Add is\_asynchronous data in top\_vaults table

## \[1.1.2] - 2026-01-07

### 📚 Documentation

* *(schema)* Fix OpenAPI case style in sourceDepositInstructions. Use camelCase in the doc.

## \[1.1.1] - 2026-01-06

### 🐛 Bug Fixes

* *(gas-sponsorship)* Correct the digest computation
* *(gas-sponsorship)* Add 27 to v signature component

## \[1.1.0] - 2026-01-06

### 🚀 Features

* *(email)* Design the "Funds Deposited" email
* *(email)* Design the "Funds Received" email
* *(email)* Send "Funds Deposited" email if tx successfully executed
* *(email)* Send "Funds Received" email if tx reverts on-chain

### 🐛 Bug Fixes

* *(email)* Footer in gmail
* *(email)* Skip email notification in Sumsub webhook when user is not found

### 🎨 Styling

* *(email)* Format first name from sumsub extracted data: Remove middle names and use Pascal case

## \[1.0.0] - 2026-01-05

### 💥 Breaking Changes

* Endpoints `/get-approve-transaction-passkey`, `/get-deposit-transaction-passkey` and `/get-withdraw-transaction-passkey` are deprecated.
* Endpoint `/virtual-account-activity` won't support anymore the broadcasting of pre-signed transactions (only pre-signed payloads)
* Field `signed_tx` in database stores now the signed payload, not the signed transaction.

### 🚀 Features

* `/get-approve-payload-passkey` endpoint
* `/get-deposit-payload-passkey` endpoint
* `/get-withdraw-payload-passkey` endpoint
* On-ramp logic in `/sign-payload-passkey` endpoint
* Withdraw, approve and instant deposit logic in `/sign-payload-passkey` endpoint
* Handle gas sponsorhip in bridge webhooks for on-ramps
* Verify account is delegating to atlas before creating a payload to sign
* Make `ActivateAccountRequestBody` TurnkeySignable
* Use a Rust match pattern for processing the signed payload
* Sponsor Atlas `executeCall` transaction
* Save the tx nonce in the DB (turnkey\_transactions table)

### ⚙️ Miscellaneous Tasks

* Old `RequestVerifier` methods
* Refactor the `TxVerifier` struct
* Enhance error messages in `verify_transaction`
* `Verify_transaction` -> `verify_transaction_old`
* Store the compacted signature in the DB
