Wise (TransferWise)

Lightweight, dependency-free, in-memory Wise API fake for testing code that uses the Wise REST API.

Default port: 4867

Quick start

import { WiseServer } from "./services/wise/src/server.js";

const server = new WiseServer(4867);
await server.start();
// ... run your app/tests ...
await server.stop();

All API routes require an Authorization: Bearer <token> header (any non-empty token is accepted).

const res = await fetch("http://127.0.0.1:4867/v1/quotes", {
  method: "POST",
  headers: { Authorization: "Bearer parlel", "Content-Type": "application/json" },
  body: JSON.stringify({ profile: 1, source: "USD", target: "EUR", sourceAmount: 100 }),
});

Access via MCP / preview URL

Reachable at its preview URL (http://127.0.0.1:4867) and through the parlel MCP server as the wise tool. Set WISE_BASE_URL=http://127.0.0.1:4867 and any non-empty WISE_API_TOKEN.

Implemented operations

Surface coverage

This emulator faithfully replicates the API surface most application code and agents exercise. Anything below the supported lines is either an intentional design choice for a fast, zero-cost local emulator (✓ By design) or a candidate for a future release (⟳ Roadmap) — never a silent inaccuracy.

Legend: ✅ fully supported · ◐ accepted (stored, not strictly enforced) · ✓ by design · ⟳ on the roadmap.

FeatureStatus
Profiles / quotes / transfers / accounts / balances✅ Supported
Bearer auth✓ By design — Any non-empty credential is accepted — no real secrets needed
Funding a transfer / actual money movement✓ By design — Always succeeds deterministically — no real funds move
Live FX rates✓ By design — Intentional for a local, zero-cost test emulator
Webhooks / SCA✓ By design — Always succeeds deterministically — no real funds move

Manifest

See services/wise/manifest.json — name wise, port 4867, protocol http, healthcheck /health, env WISE_API_TOKEN, WISE_BASE_URL.

<!-- parlel:testenv:start -->

Configuration — test.env

Copy these into your test.env (used by the bridge sidecar flow). Tokens are Parlel's seeded test credentials — any non-empty value is accepted by the emulator, so you rarely need to change them. Swap in real credentials only when pointing at the live service in prod.env.

WISE_API_TOKEN=parlel
WISE_BASE_URL=http://parlel-bridge:4867
<!-- parlel:testenv:end -->