API Integration
In addition to a Wallet Verification Widget, CryptoSwift also provides full API support for self-hosted wallet verification. This means that all functionalities available using the Widget are also available using our REST API. This allows you to build a custom widget and/or cover custom wallet verification scenarios where needed (eg native mobile application integration).
Cryptographic Signature Proofs
Cryptographic signature proofs are widely recognized as the industry standard for verifying wallet ownership. This method involves the user signing an off-chain message using their private keys, which can then be validated against their blockchain address. This process provides cryptographic assurance that the user controls the private keys for the wallet to which they intend to transfer funds.
CryptoSwift strongly advocates for the use of open-source, industry-standard solutions for signature proofs. Among the available options, Wallet Connect (now known as Reown) stands out as the most robust solution, offering the broadest wallet compatibility. It supports over 450 different wallets across various networks (Bitcoin, Ethereum, Solana, Optimism, Arbitrum, Base, Polygon, BNB, Avalanche, and Cosmos, among others). You can see the list of all supported wallets here.
Visit Reown or explore the Reown docs to get started.
Integration
You can currently set up a direct integration with Reown to store the verification data for a self-hosted wallet.
Also see the web-based Wallet Connect demo.
Once verification is successfully completed, you should send a request to the CryptoSwift API:
curl --location 'https://api.cryptoswift.eu/wallet-verification/signature-proof' \ --header 'x-api-key: a70fcedf-416b-4f83-845c-a05aba0d7da4' \ --header 'Content-Type: application/json' \ --data '{ "withdrawalAddress": "0x32Be343B94f860124dC4fEe278FDCBD38C102D88", "withdrawalMetadata": "be0bf82b-426e-40a6-a4e5-09800db30908", "asset": "ETH", "blockchain": "Ethereum", "signedMessage": "app.cryptoswift.eu:8080 wants you to sign in with your **blockchain** account:\n0x32Be343B94f860124dC4fEe278FDCBD38C102D88\n\nURI:https://app.cryptoswift.eu:8080/\nVersion: 1\nChain ID: eip155:1\nNonce: 1961\nIssued At: 2025-05-30 12:49:49", "signature": "q7XUz9XJbWjK9YO2iA8eW3OmEDCuqKDG12tzmPVNlDb9X6G6MxwGqv8J8B4gEZq43vU3D9VaGRKqB1wnyCrR7A=", "origin": "https://app.cryptoswift.eu:8080" }'
Mandatory fields:
withdrawalAddress
: Self-hosted wallet address to verifyasset
: The virtual assetblockchain
: The blockchainsignedMessage
: The original signed message to prove wallet ownership, please note the message must containdomain
,chain id
andissued at
fields as shown in the example above.signature
: The cryptographic signature of the messageorigin
: The origin <scheme>://<hostname>[:<port>] that will be used while validating the signature
Optional fields:
withdrawalMetadata
: Metadata to identify the wallet or user outside of the CryptoSwift system
More details: API documentation
Micro Transactions (Satoshi Test)
A Satoshi test is a verification method where a specific amount of cryptocurrency is sent from the destination wallet address within a designated time frame to verify ownership and control of the private keys. The CryptoSwift API supports this method.
Please ensure you set up a webhook before initiating a Satoshi test verification.
1. Send a Verification Request
curl --location 'https://api.cryptoswift.eu/wallet-verification/satoshi-test' \ --header 'x-api-key: a70fcedf-416b-4f83-845c-a05aba0d7da4' \ --header 'Content-Type: application/json' \ --data '{ "withdrawalAddress": "BsRdeZ75szhDiGN8hJs8v8PcqwBm7KsFcp", "withdrawalMetadata": "505b5625-fd42-4c03-911b-2310ea14b76a", "depositAddress": "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kygt080", "asset": "BTC" }'
Mandatory fields:
withdrawalAddress
depositAddress
asset
: Must be one ofBTC
,DASH
,DOGE
,LTC
blockchain
Optional fields:
amount
: If not provided, a random value will be generatedwithdrawalMetadata
2. Share Verification Details
The response includes:
verificationRequestId
asset
,amount
,withdrawalAddress
,depositAddress
status
,statusReasoning
,verifiedTransactionHash
,createdAt
,updatedAt
Share the depositAddress
, asset
, and amount
with the wallet owner. The verification expires after 48 hours from the createdAt
timestamp.
3. Receive Notification via Webhook
Webhook header: X-Event-Type: 'wallet-verification'
Example success payload:
{ ... "verificationRequestId": "53c8264f-5632-4ed2-b93e-42aa0bcd5830", "status": "VERIFIED", "verifiedTransactionHash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ... }
More details: API documentation
Wallet Screenshots
This method involves uploading a screenshot as proof of ownership.
1. Send a Verification Request
curl --location 'https://api.cryptoswift.eu/wallet-verification/visual-proof' \ --header 'x-api-key: a70fcedf-416b-4f83-845c-a05aba0d7da4' \ --form 'file=@"../Visual Proof.pdf"' \ --form 'withdrawalAddress="bc1q7jxz3fgnzm9wp6t8qn8ekq09l8gwux5zft90je"' \ --form 'asset="BTC"'
Mandatory fields:
file
: JPEG, PNG, JPG, or PDF up to 5MBwithdrawalAddress
asset
blockchain
Optional fields:
withdrawalMetadata
2. Approve the Verification Request
curl --location --request PATCH 'https://api.cryptoswift.eu/wallet-verification/2770f7b9-3397-44d7-88c7-d7642be38329' \ --header 'x-api-key: a70fcedf-416b-4f83-845c-a05aba0d7da4' \ --header 'Content-Type: application/json' \ --data '{"status":"VERIFIED", "statusReasoning": "Manual approval", "withdrawalMetadata": "Any related metadata" }'
Mandatory fields:
status
:PENDING
,VERIFIED
,FAILED
, orDELETED
Optional fields:
statusReasoning
,withdrawalMetadata
More details: API documentation
Self-Declaration
This method allows users to self-declare wallet ownership with a checkbox.
curl --location 'https://api.cryptoswift.eu/wallet-verification/self-declared' \ --header 'x-api-key: a70fcedf-416b-4f83-845c-a05aba0d7da4' \ --header 'Content-Type: application/json' \ --data '{ "withdrawalAddress": "BsRdeZ75szhDiGN8hJs8v8PcqwBm7KsFcp", "withdrawalMetadata": "05b5625-fd42-4c03-911b-2310ea14b76a", "approved": true, "asset": "BTC" }'
Mandatory fields:
withdrawalAddress
asset
blockchain
approved
: Must betrue
Optional fields:
withdrawalMetadata
The request will be verified immediately.
More details: API documentation