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

# International wire deposits at Anchorage Digital Bank

> Receive USD by international wire (SWIFT) into an Anchorage Digital Bank USD wallet.

export const WireFlow = ({nodes = [], title, label = title || "Flow of funds"}) => {
  const isDark = () => typeof document !== "undefined" && (document.documentElement.classList.contains("dark") || document.documentElement.getAttribute("data-theme") === "dark");
  const [dark, setDark] = useState(isDark);
  useEffect(() => {
    if (typeof document === "undefined") return;
    const read = () => setDark(isDark());
    read();
    const obs = new MutationObserver(read);
    obs.observe(document.documentElement, {
      attributes: true,
      attributeFilter: ["class", "data-theme"]
    });
    return () => obs.disconnect();
  }, []);
  const C = dark ? {
    surface: "#1B1E24",
    card: "#14161B",
    line: "#2C3038",
    ink: "#E8E9EC",
    ink2: "#9EA2AA",
    blue: "#7C9DF8",
    blueF: "#1B2742",
    track: "#3A3F48"
  } : {
    surface: "#F7F7F5",
    card: "#FFFFFF",
    line: "#E3E2DD",
    ink: "#23262D",
    ink2: "#666666",
    blue: "#5681F6",
    blueF: "#E8F2FD",
    track: "#D5D4CF"
  };
  const vars = {
    "--wf-surface": C.surface,
    "--wf-card": C.card,
    "--wf-line": C.line,
    "--wf-ink": C.ink,
    "--wf-ink2": C.ink2,
    "--wf-blue": C.blue,
    "--wf-blue-f": C.blueF,
    "--wf-track": C.track
  };
  const n = nodes.length;
  const links = Math.max(n - 1, 1);
  const cycle = 1.6 * links + 1.2;
  const slot = 100 / (links + 0.75);
  const linkKeyframes = Array.from({
    length: links
  }, (_, i) => {
    const a = (i * slot).toFixed(1), b = ((i + 0.85) * slot).toFixed(1);
    return `@keyframes wf-v${i}{0%,${a}%{top:0;opacity:0}${(+a + 1).toFixed(1)}%{opacity:1}${b}%{top:calc(100% - 22px);opacity:1}${(+b + 1).toFixed(1)}%,100%{top:calc(100% - 22px);opacity:0}}
@keyframes wf-h${i}{0%,${a}%{left:0;opacity:0}${(+a + 1).toFixed(1)}%{opacity:1}${b}%{left:calc(100% - 22px);opacity:1}${(+b + 1).toFixed(1)}%,100%{left:calc(100% - 22px);opacity:0}}`;
  }).join("\n");
  const nodeKeyframes = nodes.map((_, i) => {
    const at = i === 0 ? 0 : (i - 1 + 0.85) * slot;
    const s = Math.max(at - 0.5, 0).toFixed(1), p = (at + 2).toFixed(1), e = Math.min(at + 14, 99).toFixed(1);
    return `@keyframes wf-n${i}{0%{border-color:var(--wf-line);background:var(--wf-card)}${s}%{border-color:var(--wf-line);background:var(--wf-card)}${p}%{border-color:var(--wf-blue);background:var(--wf-blue-f)}${e}%{border-color:var(--wf-blue);background:var(--wf-blue-f)}100%{border-color:var(--wf-line);background:var(--wf-card)}}`;
  }).join("\n");
  const css = `
.wf{border:1px solid var(--wf-line);border-radius:18px;background:var(--wf-surface);color:var(--wf-ink);padding:20px;margin:16px 0}
.wf,.wf *{box-sizing:border-box}
.wf-title{margin:0 0 14px;font-size:15px;font-weight:600;line-height:1.3;color:var(--wf-ink)}
.wf-row{display:grid;grid-template-columns:1fr;gap:0;justify-items:center}
.wf-node{width:100%;max-width:280px;border:1.5px solid var(--wf-line);background:var(--wf-card);border-radius:14px;padding:12px 14px;text-align:center;animation-duration:${cycle}s;animation-iteration-count:infinite;animation-timing-function:ease-out}
.wf-node b{display:block;font-size:15px;font-weight:600;line-height:1.3}
.wf-node span{display:block;margin-top:2px;font-size:12.5px;color:var(--wf-ink2);line-height:1.35}
.wf-link{position:relative;width:2px;height:56px;background:var(--wf-track);margin:4px 0}
.wf-link::after{content:"";position:absolute;bottom:-2px;left:-5px;border:6px solid transparent;border-top:8px solid var(--wf-track);border-bottom:0}
.wf-coin{position:absolute;left:-10px;top:0;width:22px;height:22px;border-radius:50%;background:var(--wf-blue);color:#fff;font-size:12px;font-weight:700;display:grid;place-items:center;opacity:0;box-shadow:0 0 0 4px var(--wf-blue-f);animation-duration:${cycle}s;animation-iteration-count:infinite;animation-timing-function:ease-in-out}
@media (min-width:640px){
  .wf-row{grid-template-columns:${nodes.map(() => "minmax(0,1fr)").join(" 72px ")};align-items:center}
  .wf-node{max-width:none;height:100%;display:flex;flex-direction:column;justify-content:center}
  .wf-link{width:auto;height:2px;justify-self:stretch;margin:0 6px}
  .wf-link::after{bottom:auto;left:auto;right:-2px;top:-5px;border:6px solid transparent;border-left:8px solid var(--wf-track);border-right:0}
  .wf-coin{top:-10px;left:0}
}
${linkKeyframes}
${nodeKeyframes}
@media (prefers-reduced-motion:reduce){.wf *{animation:none!important}.wf-coin{display:none}}
`;
  return <div className="wf not-prose" style={vars} role="img" aria-label={`${label}: ${nodes.map(x => x.title).join(" to ")}`}>
      <style>{css}</style>
      {title && <p className="wf-title" aria-hidden="true">{title}</p>}
      <div className="wf-row">
        {nodes.flatMap((node, i) => [i > 0 && <div key={`l${i}`} className="wf-link" aria-hidden="true">
              <i className="wf-coin" style={{
    animationName: `wf-v${i - 1}`
  }}>$</i>
            </div>, <div key={`n${i}`} className="wf-node" style={{
    animationName: `wf-n${i}`
  }} aria-hidden="true">
            <b>{node.title}</b>
            {node.caption && <span>{node.caption}</span>}
          </div>].filter(Boolean))}
      </div>
      <style>{`@media (min-width:640px){${Array.from({
    length: links
  }, (_, i) => `.wf-link:nth-child(${2 * i + 2}) .wf-coin{animation-name:wf-h${i}!important}`).join("")}}`}</style>
    </div>;
};

export const ImageCarousel = ({images, perView = 3, thumbMaxWidth = 220, children}) => {
  const [page, setPage] = useState(0);
  const [imgH, setImgH] = useState(0);
  const [zoomIdx, setZoomIdx] = useState(null);
  const stripRef = useRef(null);
  const THUMB_MAX_WIDTH = thumbMaxWidth;
  const PEEK_WIDTH = 34;
  const STAGE_HEIGHT = 460;
  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 || [];
  const count = items.length;
  const columns = Math.min(perView, count) || 1;
  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 zoomTo = i => {
    const idx = (i % count + count) % count;
    setZoomIdx(idx);
    setPage(Math.floor(idx / columns));
  };
  useEffect(() => {
    if (zoomIdx === null) return;
    const item = items[zoomIdx];
    const overlay = document.createElement("div");
    overlay.setAttribute("role", "dialog");
    overlay.setAttribute("aria-modal", "true");
    overlay.setAttribute("aria-label", item.alt || "Screenshot");
    Object.assign(overlay.style, {
      position: "fixed",
      top: "0",
      left: "0",
      right: "0",
      bottom: "0",
      zIndex: "2147483000",
      background: "rgba(5, 5, 5, 0.98)",
      display: "flex",
      alignItems: "center",
      justifyContent: "center",
      padding: "24px 72px",
      cursor: "zoom-out"
    });
    const img = document.createElement("img");
    img.src = item.src;
    img.alt = item.alt || "";
    Object.assign(img.style, {
      maxWidth: "94vw",
      maxHeight: "88vh",
      width: "auto",
      height: "auto",
      borderRadius: "10px",
      boxShadow: "0 8px 40px rgba(0, 0, 0, 0.5)",
      cursor: "zoom-out"
    });
    overlay.appendChild(img);
    const makeButton = (label, text, position) => {
      const b = document.createElement("button");
      b.type = "button";
      b.setAttribute("aria-label", label);
      b.textContent = text;
      Object.assign(b.style, {
        position: "absolute",
        width: "40px",
        height: "40px",
        borderRadius: "50%",
        border: "1px solid rgba(255, 255, 255, 0.35)",
        background: "rgba(255, 255, 255, 0.16)",
        color: "#fff",
        fontSize: "20px",
        lineHeight: "38px",
        textAlign: "center",
        cursor: "pointer",
        padding: "0"
      }, position);
      overlay.appendChild(b);
      return b;
    };
    const closeButton = makeButton("Close", "×", {
      top: "18px",
      right: "18px"
    });
    let prevButton = null;
    let nextButton = null;
    if (count > 1) {
      prevButton = makeButton("Previous screenshot", "‹", {
        left: "18px",
        top: "calc(50% - 20px)"
      });
      nextButton = makeButton("Next screenshot", "›", {
        right: "18px",
        top: "calc(50% - 20px)"
      });
      const counter = document.createElement("div");
      counter.textContent = `${zoomIdx + 1} of ${count}`;
      Object.assign(counter.style, {
        position: "absolute",
        bottom: "16px",
        left: "0",
        right: "0",
        textAlign: "center",
        fontSize: "13px",
        color: "rgba(255, 255, 255, 0.85)"
      });
      overlay.appendChild(counter);
    }
    const close = () => setZoomIdx(null);
    overlay.addEventListener("click", e => {
      if (e.target === prevButton || e.target === nextButton) return;
      close();
    });
    if (prevButton) prevButton.addEventListener("click", () => zoomTo(zoomIdx - 1));
    if (nextButton) nextButton.addEventListener("click", () => zoomTo(zoomIdx + 1));
    const onKey = e => {
      if (e.key === "Escape") close(); else if (e.key === "ArrowLeft") zoomTo(zoomIdx - 1); else if (e.key === "ArrowRight") zoomTo(zoomIdx + 1);
    };
    window.addEventListener("keydown", onKey);
    const previousOverflow = document.body.style.overflow;
    document.body.style.overflow = "hidden";
    document.body.appendChild(overlay);
    closeButton.focus();
    return () => {
      window.removeEventListener("keydown", onKey);
      document.body.style.overflow = previousOverflow;
      overlay.remove();
    };
  }, [zoomIdx]);
  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();
  }, []);
  if (!items.length) return null;
  const start = page * columns;
  const visible = items.slice(start, start + columns);
  const zoomBtnStyle = {
    position: "absolute",
    zIndex: 2,
    width: "40px",
    height: "40px",
    borderRadius: "50%",
    border: "1px solid rgba(255, 255, 255, 0.3)",
    background: "rgba(255, 255, 255, 0.14)",
    color: "#fff",
    fontSize: "20px",
    lineHeight: "38px",
    textAlign: "center",
    cursor: "pointer",
    padding: 0
  };
  const pager = 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> : null;
  if (perView === 1) {
    const img = items[page];
    const overlayArrow = side => {
      const isLeft = side === "left";
      return <button type="button" onClick={isLeft ? prev : next} aria-label={isLeft ? "Previous screenshot" : "Next screenshot"} style={{
        position: "absolute",
        top: "50%",
        transform: "translateY(-50%)",
        [isLeft ? "left" : "right"]: "10px",
        zIndex: 2,
        width: "36px",
        height: "36px",
        borderRadius: "50%",
        border: "1px solid var(--ad-border, #e4e5e7)",
        background: "var(--background, #fff)",
        boxShadow: "0 1px 6px rgba(0, 0, 0, 0.25)",
        fontSize: "18px",
        lineHeight: "34px",
        textAlign: "center",
        cursor: "pointer",
        padding: 0
      }}>
          {isLeft ? "‹" : "›"}
        </button>;
    };
    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={{
      position: "relative"
    }}>
          <div style={{
      height: STAGE_HEIGHT + "px",
      display: "flex",
      alignItems: "center",
      justifyContent: "center"
    }}>
            <button type="button" onClick={() => setZoomIdx(page)} aria-label={"Enlarge: " + (img.alt || "screenshot")} style={{
      display: "block",
      maxWidth: "100%",
      maxHeight: "100%",
      border: 0,
      padding: 0,
      background: "none",
      cursor: "zoom-in"
    }}>
              <img src={img.src} alt={img.alt ?? ""} style={{
      display: "block",
      maxWidth: "100%",
      maxHeight: STAGE_HEIGHT + "px",
      width: "auto",
      height: "auto",
      margin: "0 auto",
      borderRadius: "10px",
      border: "1px solid var(--ad-border, #e4e5e7)"
    }} />
            </button>
          </div>

          {showControls && overlayArrow("left")}
          {showControls && overlayArrow("right")}
        </div>

        {img.alt && <div style={{
      marginTop: "8px",
      fontSize: "13px",
      lineHeight: 1.4,
      color: "var(--ad-muted, #6b7280)",
      textAlign: "center"
    }}>
            {img.alt}
          </div>}

        {pager}
      </div>;
  }
  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}>
                <button type="button" data-carousel-imgbox onClick={() => setZoomIdx(start + i)} aria-label={"Enlarge: " + (img.alt || "screenshot")} style={{
      display: "block",
      width: "100%",
      border: 0,
      padding: 0,
      background: "none",
      cursor: "zoom-in"
    }}>
                  <img src={img.src} alt={img.alt ?? ""} style={{
      display: "block",
      maxWidth: "100%",
      maxHeight: Math.round(THUMB_MAX_WIDTH * 1.4) + "px",
      width: "auto",
      height: "auto",
      margin: "0 auto",
      borderRadius: "10px",
      border: "1px solid var(--ad-border, #e4e5e7)"
    }} />
                </button>
                {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>

      {pager}
    </div>;
};

International wires let senders outside the United States move USD into your Anchorage Digital Bank (ADB) USD wallet over SWIFT.

<WireFlow
  title="International wire deposits"
  nodes={[
{ title: "Sender's bank", caption: "Sends the wire" },
{ title: "SWIFT", caption: "Moves the funds" },
{ title: "Anchorage Digital Bank", caption: "Credits your USD wallet" }
]}
/>

## Sharing your international wire instructions

Go to the desired vault, select **Deposit**, and select **USD** to view the vault's wire instructions. Share the SWIFT/BIC details with the sending party.

<ImageCarousel>
  <img src="https://mintcdn.com/deployment-4/dnKKK5u4vRePxCW5/knowledge-base/images/screenshots/usd-deposit-asset-selection.png?fit=max&auto=format&n=dnKKK5u4vRePxCW5&q=85&s=3a5fb0f4d94c9ff844f3a70fed80ea02" alt="Deposit screen for selecting USD as the asset type" width="828" height="1792" data-path="knowledge-base/images/screenshots/usd-deposit-asset-selection.png" />

  <img src="https://mintcdn.com/deployment-4/dnKKK5u4vRePxCW5/knowledge-base/images/screenshots/usd-deposit-instructions.png?fit=max&auto=format&n=dnKKK5u4vRePxCW5&q=85&s=fcc34a3285270106e11eeaa9d45268d5" alt="USD wallet wire instructions screen" width="828" height="1792" data-path="knowledge-base/images/screenshots/usd-deposit-instructions.png" />
</ImageCarousel>

<Note>
  Senders don't need intermediary bank details. BNY is a SWIFT member, so senders can wire funds over SWIFT without an intermediary bank.
</Note>

## Timing

International wires can take longer to arrive than domestic wires, depending on the sending bank.


## Related topics

- [Wire deposits at Anchorage Digital Bank](/knowledge-base/platform/users/usd-deposits/adb/wire-deposits-overview.md)
- [International wire deposits at Anchorage Digital Singapore](/knowledge-base/platform/users/usd-deposits/ads/international-wire-deposits.md)
- [Domestic wire deposits at Anchorage Digital Bank](/knowledge-base/platform/users/usd-deposits/adb/domestic-wire-deposits.md)
- [Wire deposit FAQs for Anchorage Digital Bank](/knowledge-base/platform/users/usd-deposits/adb/wire-deposit-faqs.md)
- [International wire withdrawals at Anchorage Digital Bank](/knowledge-base/platform/users/usd-withdrawals/adb/international-wire-withdrawals.md)
