> ## 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.

# Creating a vault

> Create and configure vaults on iOS and web dashboard.

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 can create as many vaults as needed for the organization. Vaults can be created from the iOS app or the web dashboard. If initiated from the web dashboard, biometric approval must be submitted via the iOS app. Creating a vault is subject to quorum approval by administrators with vault management permissions—once the vault exists, [creating a wallet](/knowledge-base/platform/users/vaults-wallets#creating-a-new-wallet) inside it doesn't require quorum.

## Vault policies

When creating a vault, you assign it a vault policy. A vault policy defines the users, permissions, and approval rules that govern operations within that vault. A single vault policy may be assigned to multiple vaults, so any future changes to the policy apply to all vaults using it.

You can either **use an existing vault policy** (inheriting its users, permissions, and rules) or **create a new vault policy** specifically for the new vault.

### Quorums and sub-quorums

Operations within a vault follow the vault policy's quorum and sub-quorum rules.

* **Quorum**: A group of users with permission to initiate and approve operations (default, governance, staking, or withdrawal).
* **Sub-quorum**: Additional approval layers ensuring operations cannot proceed without a set number of approvals from designated members. Policies may have as many sub-quorums as needed.

**Default requirements:**

* Minimum of 3 members who can initiate and approve operations
* Minimum of 2 approvers per rule

You can customize quorum and sub-quorum requirements per operation type: withdrawal, staking, and governance.

<Note>
  The number of members, approvers, and sub-quorums in each vault policy may be influenced by factors like the use case for each vault—frequent or infrequent withdrawals—and the amount of value in the vault. Requiring a larger quorum for higher values is a common approach.
</Note>

## Creating a vault on iOS

<Steps>
  <Step title="Navigate to Create new vault">
    From the main screen, scroll down and tap **Create new vault**.
  </Step>

  <Step title="Enter vault details">
    Enter the vault name and description, select the account, then tap **Continue**.
  </Step>

  <Step title="Select a vault policy">
    Choose to use an **existing vault policy** or **create a new vault policy**.

    * **Existing policy**: Reuse the same rules for operation approval, users, and permissions configured for other vaults. Tap **Continue** to proceed.
    * **New policy**: Create an entirely new configuration specifically for this vault. Tap **Continue** to proceed.
  </Step>

  <Step title="Add users and set permissions (new policy only)">
    If creating a new vault policy:

    * **Add vault policy users**: Add a group of users with permission to initiate only, or to initiate and approve operations.
    * **Set user permissions**: Specify which users may initiate and approve operations and which should only initiate. A minimum of 3 users should be able to initiate and approve.
  </Step>

  <Step title="Configure quorum rules">
    Set the number of approvers for each operation type, optionally adding rules for specific types (withdrawal, staking, governance), then follow the prompts.
  </Step>

  <Step title="Name the new policy (new policy only)">
    Give the new vault policy a name. Once approved, you can assign it to other vaults later.
  </Step>

  <Step title="Add a comment and submit for approval">
    Add a comment (optional), review the operation details, and submit biometric approval. Administrators with vault management permissions will be notified to approve the vault creation. Anchorage Digital will then review and finalize the operation, making the vault visible.
  </Step>
</Steps>

<ImageCarousel>
  <img src="https://mintcdn.com/deployment-4/Q6VrRBiEEXtXFQnt/knowledge-base/images/screenshots/create-vault-flow-1.png?fit=max&auto=format&n=Q6VrRBiEEXtXFQnt&q=85&s=5a21a5dff357e34191a17d4a2ebcb80b" alt="Create vault screen for entering the vault name, description, and account" width="828" height="1792" data-path="knowledge-base/images/screenshots/create-vault-flow-1.png" />

  <img src="https://mintcdn.com/deployment-4/Q6VrRBiEEXtXFQnt/knowledge-base/images/screenshots/create-vault-flow-2.png?fit=max&auto=format&n=Q6VrRBiEEXtXFQnt&q=85&s=b71eb828c12d5a6e8cbf3705c75aec17" alt="Screen for choosing an existing vault policy or creating a new one" width="828" height="1792" data-path="knowledge-base/images/screenshots/create-vault-flow-2.png" />

  <img src="https://mintcdn.com/deployment-4/Q6VrRBiEEXtXFQnt/knowledge-base/images/screenshots/create-vault-flow-3.png?fit=max&auto=format&n=Q6VrRBiEEXtXFQnt&q=85&s=d365e37477df29f114f06564adcb1794" alt="List of existing vault policies to assign to the new vault" width="828" height="1792" data-path="knowledge-base/images/screenshots/create-vault-flow-3.png" />

  <img src="https://mintcdn.com/deployment-4/Q6VrRBiEEXtXFQnt/knowledge-base/images/screenshots/create-vault-flow-4.png?fit=max&auto=format&n=Q6VrRBiEEXtXFQnt&q=85&s=cd94c93df53704ec286e8cdba43d9210" alt="Screen for adding users to a new vault policy" width="828" height="1792" data-path="knowledge-base/images/screenshots/create-vault-flow-4.png" />

  <img src="https://mintcdn.com/deployment-4/Q6VrRBiEEXtXFQnt/knowledge-base/images/screenshots/create-vault-flow-5.png?fit=max&auto=format&n=Q6VrRBiEEXtXFQnt&q=85&s=0780bd0a749bb4cf01524842fd12adc4" alt="Screen for setting each user's initiate and approve permissions" width="828" height="1792" data-path="knowledge-base/images/screenshots/create-vault-flow-5.png" />

  <img src="https://mintcdn.com/deployment-4/Q6VrRBiEEXtXFQnt/knowledge-base/images/screenshots/create-vault-flow-6.png?fit=max&auto=format&n=Q6VrRBiEEXtXFQnt&q=85&s=e477d69f29e4f69df5781f1712326ba3" alt="Screen for configuring quorum rules for the new vault policy" width="828" height="1792" data-path="knowledge-base/images/screenshots/create-vault-flow-6.png" />

  <img src="https://mintcdn.com/deployment-4/Q6VrRBiEEXtXFQnt/knowledge-base/images/screenshots/create-vault-flow-7.png?fit=max&auto=format&n=Q6VrRBiEEXtXFQnt&q=85&s=8140d6f03f923bdcc78378f9e185aa4c" alt="Screen for naming the new vault policy" width="828" height="1792" data-path="knowledge-base/images/screenshots/create-vault-flow-7.png" />
</ImageCarousel>

## Creating a vault on the web dashboard

<Steps>
  <Step title="Start vault creation">
    On the dashboard, select **Create new vault** on the right side to begin.
  </Step>

  <Step title="Enter vault details">
    Enter the vault name and description, then select the account. Select **Next**.
  </Step>

  <Step title="Select a vault policy">
    Select an existing vault policy or create a new one, then select **Next**.

    * **Existing policy**: Any future changes to this policy will apply to this vault and any other vaults assigned to it.
    * **New policy**: Add at least 3 members who can initiate and approve operations, then select **Next**.
  </Step>

  <Step title="Define approval rules (new policy only)">
    Define the rules for approvals needed per operation type (minimum of 2 approvers per rule).

    * Set a base quorum and sub-quorums per policy rule.
    * Add rules to adjust approval requirements for specific operation types (withdrawal, governance, staking).

    Name your new vault policy. Once approved, you can assign it to new or existing vaults.
  </Step>

  <Step title="Review and submit">
    Add a comment (optional), preview the changes, and select **Finish and review**. Then use the iOS app to submit the vault for approval.
  </Step>
</Steps>

<Warning>
  Vault creation requires quorum approval from administrators with vault management permissions. The vault will only become visible after both quorum approval and Anchorage Digital review are complete.
</Warning>
