Skip to main content

Documentation Index

Fetch the complete documentation index at: https://turnkey-0e7c1f5b-graham-docs-revamp.mintlify.app/llms.txt

Use this file to discover all available pages before exploring further.

Enable your users to send crypto to people who haven’t signed up yet through secure, non-custodial magic claim links. This feature creates pre-funded wallets that new users can claim by simply clicking a URL. 

How it works

You will create a temporary “escrow” wallet where funds are held securely until claimed, and embed an authenticator with access to this wallet in a URL. When the new user clicks on the claim link, they will land directly in your app and see a wallet that’s already been topped up with crypto from an existing user.

Implementation guide

Step 1: Set up your application:  Before you start building this feature, ensure: 
  • Your organization is set up with embedded wallets in a sub-organization model: Each of your users should map to a dedicated sub-org in Turnkey.
  • Email authentication is enabled so that new users can sign up through a secure email flow. 
  • Your backend can store mapping records between transactions and sub-organizations
Step 2: The Sender initiates the flow When an existing user (the “Sender”) wants to send funds to someone new, here’s what needs to happen: 
  1. Create a temporary sub-org. This sub-org acts as the escrow environment. It will: 
  • Contain a new “escrow” wallet 
  • Contain a root user with two authenticators: 
    • The Sender’s email or phone number, included so that they can reclaim funds later on if necessary. 
    • A programmatically generated API key (“Claim Key”). This key will later be passed to the Receiver via a claim link. 
  1. Initiate the transfer of funds from the Sender’s primary wallet to this new escrow wallet. 
  2. For added security, store a transaction record in your backend that maps a transaction id to this temporary sub-org id.  
Note that you can take all of these actions via a session to ensure the user experience is as simple as setting an amount and copying a link to send!  Step 3: Generate and share the claim link Construct a link containing, as query parameters: 
  • Base64-encoded private key from the Claim Key 
  • Transaction id 
You can now show the Sender a “Copy link” or “Share via…” button.  Step 4: Receiver claims funds When the Receiver opens the link in your app: 
  1. Your app parses the transaction id and looks up the associated temporary sub-org ID
  2. Reconstruct the Claim Key using the private key from the URL and store it in local storage. Now, the Receiver has an API key in local storage that grants them the ability to send funds out of the escrow wallet. 
  3. Guide the Receiver through your typical signup flow to create a permanent sub-organization containing a new permanent wallet (“Receiver Wallet”) and permanent authenticators. 
  4. Use the Claim Key in local storage to authorize transferring the claimable funds from the escrow wallet to the Receiver Wallet. 
  5. After successful transfer, delete the temporary sub-org using the Claim Key. 
The receiver now controls their own wallet under a permanent sub-org which contains the new funds.   If the funds are never claimed or the Sender wishes to revoke the gift for any reason, your app can allow the sender to reclaim them by using their email or phone number to restart a new session for the escrow sub-organization.