Skip to main content
Register the transfer recipient as a user in your Crossmint project, then attach the recipient data required for regulated transfers. Crossmint uses this data to screen recipients against Office of Foreign Assets Control (OFAC) sanctions lists.

Requirements

  • An API key
  • A stable user identifier in your system (used as userLocator)
  • A Crossmint wallet address for the recipient (or the ability to create one)

Step 1: Create a User

Register the transfer recipient as a user in your Crossmint project and associate the user with a Crossmint wallet address. There are two ways to create a user:

Choose a Method

  • Use Method 1 if you create the wallet and user in one API call
  • Use Method 2 if you register the user first and create the wallet later
Create a wallet for a user and associate it to a userLocator by setting the owner property. This method creates in a single API call both the wallet, and the user associated with it.The owner property accepts a userLocator. This associates the wallet with the user identifier in your system.
  • If you have your own user IDs, set the wallet's "owner" property using the userId format (userId:<userId>, e.g., userId:johnd-123).
  • If you bring your own auth, Crossmint automatically extracts the user ID from your JWT and assigns it to the wallet's "owner" property.
const userLocator = "userId:johnd-123";

const options = {
    method: 'POST',
    headers: {'X-API-KEY': '<x-api-key>', 'Content-Type': 'application/json'},
    body: JSON.stringify({
        chainType: "evm",
        config: {
            adminSigner: {
                type: "email",
                email: "[email protected]"
            }
        },
        owner: userLocator
    })
};

fetch('https://staging.crossmint.com/api/2025-06-09/wallets', options)
    .then(response => response.json())
    .then(response => console.log(response))
    .catch(err => console.error(err));
Register a user with Crossmint without creating a wallet yet. Later, when you create a wallet for that registered user, you can link the wallet’s owner property to that user’s registered userLocator value. This will associate the wallet with the user identifier in your system.
  • If you have your own user IDs, set the wallet's "owner" property using the userId format (userId:<userId>, e.g., userId:johnd-123).
  • If you bring your own auth, Crossmint automatically extracts the user ID from your JWT and assigns it to the wallet's "owner" property.
Step 1: Register the user
const userLocator = "userId:johnd-123";

const options = {
    method: 'PUT',
    headers: {'X-API-KEY': '<x-api-key>', 'Content-Type': 'application/json'}
};

fetch(`https://staging.crossmint.com/api/2025-06-09/users/${userLocator}`, options)
    .then(response => response.json())
    .then(response => console.log(response))
    .catch(err => console.error(err));
Step 2: Create wallet and link to registered userWhen you are ready to create a wallet for the registered user, use the same userLocator in the owner field:
const userLocator = "userId:johnd-123";

const options = {
    method: 'POST',
    headers: {'X-API-KEY': '<x-api-key>', 'Content-Type': 'application/json'},
    body: JSON.stringify({
        chainType: "evm",
        config: {
            adminSigner: {
                type: "email",
                email: "[email protected]"
            }
        },
        owner: userLocator
    })
};

fetch('https://staging.crossmint.com/api/2025-06-09/wallets', options)
    .then(response => response.json())
    .then(response => console.log(response))
    .catch(err => console.error(err));

Step 2: Register User Data

Use the Create User API to attach userDetails to the user. To see data requirements by activity and region, see Data Requirements. For regulated transfers, the only information needed is userDetails.

const userLocator = "userId:johnd-123";

const options = {
   method: 'PUT',
   headers: {'X-API-KEY': '<x-api-key>', 'Content-Type': 'application/json'},
   body: JSON.stringify({
       userDetails: {
           firstName: "John",
           lastName: "Doe",
           dateOfBirth: "2007-01-01",
           countryOfResidence: "DE"
       }
   })
};

fetch(`https://staging.crossmint.com/api/2025-06-09/users/${userLocator}/`, options)
   .then(response => response.json())
   .then(response => console.log(response))
   .catch(err => console.error(err));

Next Steps