> ## Documentation Index
> Fetch the complete documentation index at: https://docs.anchorage.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Adding users

> Add and onboard new users to your organization.

export const ImageCarousel = ({images, perView = 3, children}) => {
  const [page, setPage] = useState(0);
  const [imgH, setImgH] = useState(0);
  const stripRef = useRef(null);
  const THUMB_MAX_WIDTH = 220;
  const PEEK_WIDTH = 34;
  useEffect(() => {
    const strip = stripRef.current;
    if (!strip) return;
    const measure = () => {
      const box = strip.querySelector("[data-carousel-imgbox]");
      if (box && box.clientHeight) setImgH(box.clientHeight);
    };
    measure();
    const ro = new ResizeObserver(measure);
    ro.observe(strip);
    return () => ro.disconnect();
  }, []);
  const fromChildren = React.Children.toArray(children).map(c => c && c.props && c.props.src ? {
    src: c.props.src,
    alt: c.props.alt
  } : null).filter(Boolean);
  const items = fromChildren.length ? fromChildren : images || [];
  if (!items.length) return null;
  const count = items.length;
  const columns = Math.min(perView, count);
  const totalPages = Math.ceil(count / columns);
  const showControls = totalPages > 1;
  const goTo = p => setPage((p % totalPages + totalPages) % totalPages);
  const prev = () => goTo(page - 1);
  const next = () => goTo(page + 1);
  const start = page * columns;
  const visible = items.slice(start, start + columns);
  const prevPeek = start > 0 ? items[start - 1] : null;
  const nextPeek = start + columns < count ? items[start + columns] : null;
  const renderPeek = (img, side) => {
    if (!img) return null;
    const isLeft = side === "left";
    return <button type="button" onClick={isLeft ? prev : next} aria-hidden="true" tabIndex={-1} style={{
      flex: `0 0 ${PEEK_WIDTH}px`,
      width: PEEK_WIDTH + "px",
      alignSelf: imgH ? "flex-start" : "stretch",
      height: imgH ? imgH + "px" : undefined,
      border: 0,
      padding: 0,
      cursor: "pointer",
      opacity: 0.5,
      borderRadius: isLeft ? "10px 0 0 10px" : "0 10px 10px 0",
      backgroundImage: `url("${img.src}")`,
      backgroundRepeat: "no-repeat",
      backgroundSize: "auto 100%",
      backgroundPosition: isLeft ? "right center" : "left center",
      WebkitMaskImage: `linear-gradient(to ${isLeft ? "left" : "right"}, #000 15%, transparent 100%)`,
      maskImage: `linear-gradient(to ${isLeft ? "left" : "right"}, #000 15%, transparent 100%)`
    }} />;
  };
  const arrowStyle = {
    flex: "0 0 auto",
    width: "30px",
    height: "30px",
    borderRadius: "50%",
    border: "1px solid var(--ad-border, #e4e5e7)",
    background: "var(--background, #fff)",
    fontSize: "16px",
    lineHeight: "28px",
    textAlign: "center",
    cursor: "pointer",
    padding: 0
  };
  return <div style={{
    outline: "none",
    margin: "1.5rem 0"
  }} role={showControls ? "group" : undefined} aria-label={showControls ? "Screenshot carousel" : undefined} aria-roledescription={showControls ? "carousel" : undefined}>
      <div style={{
    display: "flex",
    alignItems: "center",
    gap: "10px"
  }}>
        {showControls && <button type="button" onClick={prev} aria-label="Previous screenshots" style={arrowStyle}>
            ‹
          </button>}

        <div ref={stripRef} style={{
    display: "flex",
    flexWrap: "nowrap",
    alignItems: "flex-start",
    gap: "14px",
    justifyContent: "center",
    flex: 1
  }}>
          {renderPeek(prevPeek, "left")}
          {}
          {Array.from({
    length: columns
  }).map((_, i) => {
    const img = visible[i];
    const slotStyle = {
      margin: 0,
      flex: "1 1 0",
      maxWidth: THUMB_MAX_WIDTH + "px",
      minWidth: 0
    };
    if (!img) {
      return <div key={start + i} aria-hidden="true" style={{
        ...slotStyle,
        visibility: "hidden"
      }} />;
    }
    return <div key={start + i} style={slotStyle}>
                <span data-carousel-imgbox style={{
      display: "block"
    }}>
                  <img src={img.src} alt={img.alt ?? ""} style={{
      display: "block",
      width: "100%",
      height: "auto",
      margin: 0,
      borderRadius: "10px",
      border: "1px solid var(--ad-border, #e4e5e7)"
    }} />
                </span>
                {img.alt && <div style={{
      marginTop: "6px",
      fontSize: "12px",
      lineHeight: 1.4,
      color: "var(--ad-muted, #6b7280)",
      textAlign: "center"
    }}>
                    {img.alt}
                  </div>}
              </div>;
  })}
          {renderPeek(nextPeek, "right")}
        </div>

        {showControls && <button type="button" onClick={next} aria-label="Next screenshots" style={arrowStyle}>
            ›
          </button>}
      </div>

      {showControls && <div style={{
    textAlign: "center",
    marginTop: "8px",
    fontSize: "12px",
    color: "var(--ad-muted, #6b7280)"
  }}>
          {start + 1}
          {visible.length > 1 ? "–" + (start + visible.length) : ""} of {count}
        </div>}
    </div>;
};

Administrators with user management permissions can add new users to an organization and generate enrollment QR codes. New users must have the Anchorage Digital iOS app downloaded before they can complete enrollment.

<Info>
  Only administrators with user management permissions are able to add new users to an organization and generate enrollment QR codes.
</Info>

This flow covers an existing administrator adding a user to an organization—sandbox or production. The admin generates the enrollment QR code, and the new user scans it before completing KYC. Initial account seeding for a brand-new organization differs: there, the enrollment QR is issued after KYC clears—see [Onboarding your organization](/knowledge-base/platform/users/onboarding-organization).

## Generating a QR code

<Steps>
  <Step title="Open Settings">
    In the iOS app, tap the **gear icon** (Settings), then tap **Team**, and select **Add new user**.
  </Step>

  <Step title="Submit biometric authentication">
    Tap **Add user** and submit your biometric authentication to proceed.
  </Step>

  <Step title="Define the user's role and vault access">
    Select the permission level for the new user. Choose the role before tapping **Continue**, then select the vault policies to which the user will have access.
  </Step>

  <Step title="Review assigned permissions">
    Review the permissions assigned across each role, then tap **Continue**.
  </Step>

  <Step title="Generate and share the QR code">
    Continue following the prompts until a QR code is generated. Share the QR code with the new user. If the administrator and the new user cannot physically meet, the administrator can email the enrollment QR code to the new user or share it securely another way.
  </Step>
</Steps>

<ImageCarousel>
  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-1.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=4a96d1f773c5e4a97a69201d877aa038" alt="Add user flow starting with role selection screen" width="828" height="1792" data-path="knowledge-base/images/screenshots/anchorage-add-user-1.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-2.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=58fe27a741ea659a0c38a054bbfee49f" alt="Vault policy selection for new user" width="828" height="1792" data-path="knowledge-base/images/screenshots/anchorage-add-user-2.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-3.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=b853ef634feec942ba5ef97894ed2fc9" alt="Permission level setup for selected vault policy" width="828" height="1792" data-path="knowledge-base/images/screenshots/anchorage-add-user-3.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-4.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=45bf5031300cc8465b3e188682675f50" alt="Review user permissions across all selected policies" width="828" height="1792" data-path="knowledge-base/images/screenshots/anchorage-add-user-4.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-5.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=1bcceef6ebf94b5319cb1a243ef628ac" alt="Confirm user role and vault access" width="828" height="1792" data-path="knowledge-base/images/screenshots/anchorage-add-user-5.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-6.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=2ecd79e165277aa764aad79d693ee579" alt="User enrollment summary before QR code generation" width="828" height="1792" data-path="knowledge-base/images/screenshots/anchorage-add-user-6.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-7.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=c231bc035f201df6e142b9b4dad96d90" alt="Enrollment QR code ready to share with new user" width="828" height="1792" data-path="knowledge-base/images/screenshots/anchorage-add-user-7.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-8.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=5d3f6d345522cb4d5465fdba61d722b7" alt="QR code sharing confirmation" width="828" height="1792" data-path="knowledge-base/images/screenshots/anchorage-add-user-8.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-9.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=af98479100016faa338b61e764caf73c" alt="Add user operation pending approval" width="828" height="1792" data-path="knowledge-base/images/screenshots/anchorage-add-user-9.png" />
</ImageCarousel>

<Note>
  A user has access only to the vault policies you assign. If no vault policy is assigned, the user can land as a Viewer until one is added—upgrade them later in the vault under **Users**. See [Managing users](/knowledge-base/platform/users/managing-users). Add-user operations expire if they aren't approved promptly; if one expires, start it again.
</Note>

## New user enrollment

Once the new user has the QR code and the app installed, they complete the following steps:

<Steps>
  <Step title="Open the app and review disclaimers">
    The new user downloads the Anchorage Digital iOS app, reviews, and accepts the disclaimers until prompted to scan a QR code.
  </Step>

  <Step title="Scan the QR code">
    Tap **Next** to begin allowing access, then tap **Continue**. Scan the QR code, then tap **Accept** and **Continue**.
  </Step>

  <Step title="Complete biometric setup">
    The new user completes the iOS app facial and voice recognition setup. All future verifications will be checked against this original biometric pattern.
  </Step>

  <Step title="Submit biometric authentication">
    Tap **Continue** and submit biometric authentication.
  </Step>
</Steps>

<ImageCarousel>
  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-10.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=d4440e78cd83892400b985a4de934c9c" alt="Initial enrollment screen with disclaimers and QR code scanning prompt" width="828" height="1792" data-path="knowledge-base/images/screenshots/anchorage-add-user-10.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-11.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=ad10fb92f295ce919200fa6ff6a02adf" alt="QR code scanner interface" width="570" height="1230" data-path="knowledge-base/images/screenshots/anchorage-add-user-11.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-12.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=8c0b9927b5c1c82d858e1c79c4ba6540" alt="Enrollment confirmation after scanning QR code" width="568" height="1218" data-path="knowledge-base/images/screenshots/anchorage-add-user-12.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-13.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=9f75a0f557d725291c15a9ab3a3c9cc1" alt="Biometric setup beginning - facial recognition setup" width="568" height="1218" data-path="knowledge-base/images/screenshots/anchorage-add-user-13.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-14.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=32b9ae7c68d299f18f54fe003a3ed20b" alt="Biometric setup continuing - facial recognition capture" width="568" height="1220" data-path="knowledge-base/images/screenshots/anchorage-add-user-14.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-15.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=09cd17b6a6ec1db6f9d2ea7825f64291" alt="Voice recognition setup - audio biometric enrollment" width="564" height="1218" data-path="knowledge-base/images/screenshots/anchorage-add-user-15.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-16.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=8d2bd929de1d9cf7d778db6bc61f9ba9" alt="Biometric enrollment complete confirmation" width="568" height="1218" data-path="knowledge-base/images/screenshots/anchorage-add-user-16.png" />

  <img src="https://mintcdn.com/deployment-4/0Ay5l5a1-AHLFRG8/knowledge-base/images/screenshots/anchorage-add-user-17.png?fit=max&auto=format&n=0Ay5l5a1-AHLFRG8&q=85&s=48a4f138568fa87f512d6ef165430973" alt="Final enrollment step with biometric authentication" width="568" height="1220" data-path="knowledge-base/images/screenshots/anchorage-add-user-17.png" />
</ImageCarousel>

## KYC process

After completing biometric setup, the new user must complete a Know Your Customer (KYC) verification.

<Steps>
  <Step title="Complete the KYC form">
    The new user receives an email with a link to complete the KYC form. Open the email and click **Open application** to begin the KYC process and submit the form with personal information.

    <Note>
      Complete the KYC form on a desktop browser. The form is not currently supported on mobile.
    </Note>
  </Step>

  <Step title="Await quorum approval">
    Quorum administrators with user management permissions will receive a notification to approve the **Add user** operation. This triggers an Anchorage Digital review and approval request.
  </Step>

  <Step title="Access granted">
    Once the operation is approved by the required quorum and reviewed by Anchorage Digital, the new user can log in.
  </Step>
</Steps>

<ImageCarousel>
  <img src="https://mintcdn.com/deployment-4/Q6VrRBiEEXtXFQnt/knowledge-base/images/screenshots/add-user-operation-overview.png?fit=max&auto=format&n=Q6VrRBiEEXtXFQnt&q=85&s=1e805ed46786034f8a95bfd3124ac80a" alt="Add user operation detail screen showing the pending request and assigned vault policies" width="828" height="1792" data-path="knowledge-base/images/screenshots/add-user-operation-overview.png" />

  <img src="https://mintcdn.com/deployment-4/Q6VrRBiEEXtXFQnt/knowledge-base/images/screenshots/add-user-operation-progress.png?fit=max&auto=format&n=Q6VrRBiEEXtXFQnt&q=85&s=ed55a204ae4863b177754ca0b7875911" alt="Add user operation detail screen showing progress through quorum formation and Anchorage Digital review" width="828" height="1792" data-path="knowledge-base/images/screenshots/add-user-operation-progress.png" />
</ImageCarousel>

<Note>
  The new user must accept the request to perform KYC and input preliminary personal information during the enrollment scan step. Any future verifications will be checked against the original facial and voice recognition pattern established during setup.
</Note>
