• Discover
  • Partner with us
  • Chapters
  • Blog

Learn everything about Circle and USDC

Course Intro
Blockchain in a Nutshell
Introduction to Circle
Stablecoins
USDC
Wallets

Section Overview
Getting API Key
Introduction to Wallets
Getting App Id
Create a User
Acquire Session Token
Initialize User
Create Wallet
Submit Your Homework 1
Section Summary

Section Overview
Check Wallet Status
Getting Test USDC
Check Wallet Balance
Getting Native Test Token
Initiate Transaction
Validating Transaction
Submit Your Homework 2
Section Summary
Bonus: Complete a Challenge with WebSDK

Section Overview
Account Types
Create SCA
Transfer and Verify
Submit Your Homework 3
Section Summary

Section Overview
Working With Dev Controlled Wallets
Submit Your Homework 4
Section Summary

Section Overview
CCTP in a Nutshell
CCTP
Section Summary

Submit Your Final Project

Getting USDC Using ZKP2P and Turkish Lira
Resources

In the previous lesson you have created an app id. At this point you should have both app id and the api key.

If you do not have them both, please complete the previous lesson and come back to this lesson.

If you have both information, let's create our first user!

What We Mean By Creating A User?

To create a user controlled wallet, obviously you need a user. This user will ultimately be the end-users of your application. We identify this user with a User Id. This User ID functions as the account identifier, encompassing all corresponding wallets, assets, and transactions for that specific user. Please note that, Circle does not create the user id for us. Instead you will be generating the user id.

Now, let's see how to create a user.

Complete Javascript Code To Create A User

import { v4 as uuidv4 } from "uuid";

import axios from "axios";

export const create_a_new_user = async () => {

  const userId = uuidv4();

  const options = {

    method: "POST",

    url: "<https://api.circle.com/v1/w3s/users>",

    headers: {

      "Content-Type": "application/json",

      Authorization: `Bearer ${process.env.NEXT_PUBLIC_API_KEY}`,

    },

    data: { userId: userId },

  };

  return axios

    .request(options)

    .then(function (response) {

      console.log("user id: ", userId);

      console.log("status:", response.request.status);

      return {

        userId: userId,

        status: response.request.status,

      };

    })

    .catch(function (error) {

      console.error(error);

    });

};

Now, let's understand this code step by step.

import { v4 as uuidv4 } from "uuid";

import axios from "axios";

Again, as you did for getting the App ID, you will be using the Axios library to create api calls.

Additionally, as you may have noticed, we are importing a library called uuid.

Sure, let's break it down:

The uuid library is used to generate universally unique identifiers (UUIDs). Version 4 UUIDs are randomly generated and are often used when you need a unique identifier that doesn't contain any sensitive or identifiable information.

That is how you will be generating unique User IDs.

const userId = uuidv4();

const options = {

  method: "POST",

  url: "<https://api.circle.com/v1/w3s/users>",

  headers: {

    "Content-Type": "application/json",

    Authorization: `Bearer ${process.env.NEXT_PUBLIC_API_KEY}`,

  },

  data: { userId: userId },

};

Like you did in the previous lesson to create an API call to get the app id, this part of the code creates the necessary options for the api call.

  • const userId = uuidv4();: This line is generating a new, random UUID using the uuidv4 function from the uuid library. This UUID is being stored in the userId constant and will be used as a unique identifier for a user.
  • method: "POST": This specifies that the HTTP request will be a POST request. POST requests are used to send data to a server to create a new resource.
  • url: "https://api.circle.com/v1/w3s/users": This is the URL that the HTTP request will be sent to. It's an API endpoint for creating new users.
  • headers: { "Content-Type": "application/json", Authorization: \Bearer ${process.env.NEXT_PUBLIC_API_KEY}` }: These are the HTTP headers that will be included in the request. The Content-Typeheader is telling the server that the data being sent is in JSON format. TheAuthorization header includes a bearer token for authentication. The token is being read from an environment variable.
  • data: { userId: userId }: This is the data that will be sent in the body of the HTTP request. It's an object that contains the generated userId. The server will use this userId to create a new user.
return axios

  .request(options)

  .then(function (response) {

    console.log("user id: ", userId);

    console.log("status:", response.request.status);

    return {

      userId: userId,

      status: response.request.status,

    };

  })

  .catch(function (error) {

    console.error(error);

  });
  • axios.request(options): This line is making an HTTP request using axios. The options object passed to the request method contains the configuration for the HTTP request (like the URL, method, headers, and data).
  • .then(function (response) {...}): This is a promise chain. When the axios.request promise resolves (i.e., the HTTP request completes successfully), the function inside then is called with the response from the server. The response object contains various information about the server's response, including the status code, headers, and data.
  • Inside this function, it's logging the userId and the status code of the response (response.request.status). Then, it's returning an object containing the userId and the status code. This object will be the resolved value of the promise returned by this entire axios.request().then().catch() chain.
  • .catch(function (error) {...}): This is another part of the promise chain. If the axios.request promise rejects (i.e., the HTTP request fails for some reason), the function inside catch is called with the error that caused the promise to reject.
  • Inside this function, it's logging the error to the console. If an error occurs during the HTTP request, this catch block will handle it and prevent it from causing an unhandled promise rejection.

Summary

In summary your code consist of three parts:

1. Where you generate the User ID.

2. Where you create the options for the api call.

3. Where you make the api call using your api key.

Previous
Next

Lesson discussion

Swap insights and ask questions about “Learn everything about Circle and USDC”.

Enroll to participate
Start the course to unlock the discussion. Enrolling helps us keep conversations relevant to learners.
WebsiteDiscoverPartner with UsBlogEvents
Discover
CoursesCircleRustSoliditySolanaWeb3 FundamentalsBlockchain Basics
CompanyAbout UsBrand GuidelineFAQsTerms of UsePrivacy PolicyGDPR NoticeCookies
Don't miss any update!

Disclaimer: The information, programs, and events provided on https://risein.com is strictly for upskilling and networking purposes related to the technical infrastructure of blockchain platforms. We do not provide financial or investment advice, nor do we make any representations regarding the value, profitability, or future price of any blockchain or cryptocurrency. Users are encouraged to conduct their own research and consult with licensed financial professionals before engaging in any investment activities. https://risein.com disclaims any responsibility for financial decisions made by users based on the information provided here.

© 2026 Rise In, All rights reserved