newOS for Developers

Skills/Account/create-account

Create Account

Register a new user with Firebase token exchange

beginner1 endpointauth

When to Use

  • • First-time user signup after phone verification
  • • Creating accounts from OAuth providers (Twitter, Instagram)
  • • Programmatic user creation for onboarding flows

Prerequisites

  • • Valid Firebase ID token (from phone auth or OAuth)
  • newgraphClientManager initialized
  • • User does not already exist in the system

API Endpoint

EndpointMethodAuthDescription
/userPOSTFirebase TokenCreate new user account

Request & Response Types

// Request Body (from auth.ts)
interface UserCreateRequest {
  username?: string;     // Unique username
  displayName?: string;  // Display name
  fullName?: string;     // Full name
  description?: string;  // Bio/description
  email?: string;        // Email address
  phone?: string;        // Phone number (from Firebase)
}

// Response
interface UserReadPrivateResponse {
  id: string;
  username: string;
  displayName?: string;
  created: string;
  updated: string;
  // ... other private fields
}

Step-by-Step Implementation

1

Get Firebase Token

// After Firebase phone auth completes
const firebaseUser = await signInWithPhoneNumber(auth, phone, verifier);
const firebaseToken = await firebaseUser.user.getIdToken();
2

Create User with Token

import { create } from "newgraph-signals/actions/auth";
import { newgraphClientManager } from "newgraph-signals";

// Set Firebase token on client manager
newgraphClientManager.updateToken(firebaseToken);

// Create user with profile data
const newUser = await create(firebaseToken, {
  username: "myusername",
  displayName: "My Display Name",
  description: "Bio description",
});

console.log("Created user:", newUser.id);
3

Complete Sign-In Flow

// After account creation, get a session token
import { signIn } from "newgraph-signals/actions/auth";

const jwt = await signIn(firebaseToken);
// Now the user is fully authenticated
⚠️ Important: After creating the account, you must call signIn() to get a session token for subsequent API calls.

Complete Example

// Full account creation flow (from auth.ts)
import { newgraphClientManager, newgraphClient } from "newgraph-signals";
import { UserReadPrivateResponse } from "@newstackdev/iosdk-newgraph-client-js";

export const create = async (
  firebaseToken: string,
  user: Partial<UserReadPrivateResponse>
) => {
  // Set Firebase token for authentication
  newgraphClientManager.updateToken(firebaseToken);

  try {
    // Call user creation endpoint
    const newUser: UserReadPrivateResponse = (
      await newgraphClient.api.user.userCreate(user)
    ).data;

    return newUser;
  } catch (ex) {
    console.error("Account creation failed:", ex);
    throw ex;
  }
};

// Usage:
const user = await create(firebaseToken, {
  username: "newuser123",
  displayName: "New User",
  description: "Hello world!",
});

Edge Cases

Username Already Taken

The API returns 409 Conflict if the username is already in use. Prompt the user to choose a different username.

Invalid Firebase Token

Returns 401 Unauthorized. Ensure the Firebase token is fresh and valid.

User Already Exists

If the Firebase UID is already linked to an account, use signIn() instead of create().

🧪 Quick Test

Sign in to Test

Use the sidebar to sign in with your phone number