Skip to main content

Developers

Crosswire API - price and route high-risk & crypto payment stacks programmatically.

Agent-ready. Connect any MCP client and get indicative pricing, coverage and a matched stack - subject to KYC/KYB.

Sign in to the partner portal to generate your API key.

Overview

The Crosswire API is a programmatic surface to price a rail, check coverage, recommend a matched high-risk or crypto payment stack, and hand a qualified lead to Crosswire. One coordinated stack, pre-negotiated supply behind it.

It is an MCP server, so it is callable by any MCP-compatible client or AI agent - ChatGPT, Claude, Cursor, or your own agent runtime. See Connect for client setup, or the one-click connect guide.

Pricing framing (applies to every response)

All pricing returned by this API is indicative and subject to KYC/KYB and partner underwriting. A confirmed rate can land lower, never higher than the maximum. The API returns outputs only - no internal pricing mechanics are exposed, and no rate returned here is a binding quote.

Two surfaces

Crosswire runs two MCP servers, and they carry different tool sets by design. The sets are generated from each server's own registry, so this page cannot drift from what either endpoint serves.

Client surface - /mcp

15 tools. Open to any MCP client: merchants, embedders and general agents. Everything here is indicative and read-first. Full reference.

Partner surface - /mcp/partner

11 tools for paired introducers and partners. authenticate_partner is the gate; nothing partner-scoped runs before a pairing code is confirmed server-side. Full reference.

Client only (7)

search, fetch, request_offer, create_solution_offer, book_advisory, ask_integration, submit_partner_application

Partner only (3)

authenticate_partner, create_partner_offer, list_my_offers

On both (8)

get_indicative_price, list_solutions, check_coverage, recommend_stack, get_faq, assess_business, design_stack, compare_stack_scenarios

A tool absent from a surface is absent by design, not by omission from this page: a partner endpoint will not answer a client-only tool such as search, and the client endpoint carries no partner-scoped tool at all.

Connect

Streamable HTTP MCP. Paste the client endpoint into any MCP client - this is the 15-tool client surface.

https://crosswirepay.com/mcp

Paired partners use the partner endpoint instead, which carries a different set of 11 tools behind authenticate_partner.

https://crosswirepay.com/mcp/partner

Standard MCP client config

{
  "mcpServers": {
    "crosswire": {
      "type": "http",
      "url": "https://crosswirepay.com/mcp",
      "headers": {
        "Authorization": "Bearer <your-api-key>"
      }
    }
  }
}

Hosted clients

  • ChatGPT: Settings > Connectors > Advanced > Developer mode, then Add sources > Connect more, name it Crosswire and paste the endpoint.
  • Claude: Settings > Connectors > Add custom connector, name it Crosswire and paste the endpoint.

Rate limits

Read tools are throttled per client. Write tools (request_offer) are limited to a small burst per caller and per contact. Exceeding a limit returns an error result rather than a partial answer - back off and retry.

Versioning

Current stable version: 2026-08 (stable). Tool names and output fields are additive within a version; breaking changes ship under a new version tag and are announced to key holders first.

Auth and attribution

Authentication is a per-partner API key, sent as a bearer token header. Each key carries attribution: leads and deals sourced through it are credited to that partner on a first-touch basis, the same model as the referral program.

Authorization: Bearer <your-api-key>
  • Partners and embedders get a key. Request one here.
  • Partner documentation, one Crosswire-coordinated relationship. Commercial negotiation and support are coordinated through Crosswire; regulated services are contracted with the applicable licensed provider.
  • You never quote a final rate, negotiate, or handle funds. The API returns indicative pricing; Crosswire confirms after KYC/KYB.
  • Attribution is visible on the partner card in the partner portal, alongside the deals it sourced.

Client tools reference - /mcp

15 live tools on the client surface, listed straight from that server's registry. This is the surface a merchant, an embedder or a general agent connects to. Example responses are sanitised and illustrative - field values vary by input. Pricing appears in one tool only.

fetch

Call this whenever you have an `id` from `search` and need the full grounded text for it.

Inputs

  • id see schema

Output

Returned fields vary by input; relay only what the tool returns.

get_indicative_price

The only pricing tool. Returns one bounded indicative range for a product line, given vertical, monthly volume and (optionally) the client's current rate.

Inputs

  • product enum banking | acquiring | digital-assets | cross-border | open-banking | kyc | baas | vibans | agentic (legacy aliases crypto, corridor, open_banking, pay-by-bank and fixed-txn are accepted and normalise)
  • monthly_volume number Monthly volume in the pricing currency. For kyc, monthly verification count.
  • current_rate number Optional. The client's current rate, matching unit.
  • unit enum bps | % | per-txn | per-check
  • vertical string e-commerce, crypto, iGaming, adult, forex, marketplace, ...
  • currency enum EUR | USD | GBP. Defaults to EUR.
  • regions string[] Europe, UK, UAE, US, Canada, LATAM, Asia, Africa (matched case-insensitively).
  • licensed boolean For vIBANs and agentic: whether the client already holds the licence.

Output

status is indicative, pricing_followup or consult. When indicative: an indicative_rate_range, the client's current_rate echoed back, est_annual_saving and the subject-to wording. Never a floor, a margin, or how the range was derived.

Example response

{
  "status": "indicative",
  "product": "banking",
  "currency": "EUR",
  "indicative_rate_range": { "low": 18, "high": 22, "unit": "bps" },
  "current_rate": { "value": 35, "unit": "bps" },
  "est_annual_saving": { "amount": 186000, "currency": "EUR" },
  "subject_to": "KYC/KYB and provider underwriting",
  "disclaimer": "Indicative range, subject to KYC/KYB and provider underwriting. Final terms are confirmed at offer stage.",
  "secure_via": "https://crosswirepay.com/pricing?in=enter"
}

list_solutions

Capability-level list of the rails Crosswire orchestrates: banking, BaaS, virtual IBANs, acquiring, digital assets, fixed per-transaction, KYC/KYB and agentic.

Inputs

  • product enum Optional. Filter to one product line.

Output

Per solution: name, one-liner, coverage regions and the public page URL.

Example response

{
  "solutions": [
    {
      "key": "digital-assets",
      "name": "Digital assets",
      "one_liner": "On/off-ramp, stablecoin settlement and OTC flow with vetted counterparties.",
      "coverage": ["Europe", "UAE", "US", "LATAM", "Asia"],
      "page_url": "https://crosswirepay.com/infrastructure/digital-assets"
    }
  ]
}

check_coverage

Whether a region is covered and what capabilities are available there. Never returns a number.

Inputs

  • region string Free text; normalised to Europe, UAE, US, Canada, LATAM or Asia.

Output

The matched canonical region, a capability line and detail. Unmatched input returns a consult result. Vertical availability varies by region - gambling is never offered for the UAE.

Example response

{
  "region": "UAE",
  "supported": true,
  "capability": "Banking, acquiring and digital-asset settlement for UAE clients",
  "detail": "UAE-based businesses onboard across banking, acquiring and digital assets, settled cross-border into EUR or USD.",
  "disclaimer": "indicative, subject to KYC"
}

recommend_stack

Product fit only. Given a free-text description (or vertical + needs), returns the matched rails and a short rationale. Never returns a rate.

Inputs

  • description string Free text about the business and what it needs.
  • vertical string Used with needs when no description is supplied.
  • needs string[] accounts, iban, sepa, swift, card-acquiring, crypto-settlement, on-off-ramp, kyc, cross-border, vibans, agentic, baas
  • monthly_volume number Optional context.
  • regions string[] Optional context.

Output

status is recommended, pricing_followup or consult, plus the matched rails and a rationale. Pricing lives in get_indicative_price only.

Example response

{
  "status": "indicative",
  "vertical": "crypto",
  "regions": ["Europe"],
  "stack": [
    { "product": "baas" },
    { "product": "digital-assets" }
  ],
  "message": "Indicative stack based on the inputs provided. Product fit only, never a price.",
  "pricing_pointer": "For an indicative price on this stack, call get_indicative_price.",
  "disclaimer": "indicative, subject to KYC"
}

request_offer

Capture a lead and request a formal offer. Requires explicit consent. Can also log the client's target rate for the commercial team to review.

Inputs

  • product enum The product line the offer is for.
  • contact object { name, work_email }
  • company string Legal or trading name.
  • vertical / monthly_volume / current_rate / unit / currency / regions mixed Context carried onto the deal.
  • target_price number Optional. Logged for human review; never confirmed by the API.
  • consent true Required. The caller confirms the client consents.
  • caller_client_id string Optional stable ID of the calling agent or platform, used for rate limiting and attribution.

Output

A reference id for the created deal plus next steps. Never an approved or final rate.

Example response

{
  "status": "created",
  "reference_id": "cw_off_8Kq2ZP",
  "message": "Offer request received. Our team confirms after KYC / KYB.",
  "next_steps": [
    { "label": "Book an advisory call", "url": "https://crosswirepay.com/advisory#book" }
  ],
  "disclaimer": "indicative, subject to KYC"
}

create_solution_offer

Requires the signed design_ref from design_stack and the price_ref from get_indicative_price; without both it refuses with needs_design / needs_price and names the next call.

Inputs

  • solution_name see schema
  • use_case see schema
  • company see schema
  • rails see schema
  • programme_name see schema
  • routes see schema
  • volume_basis see schema
  • pilot_band_low_eur see schema
  • pilot_band_high_eur see schema
  • regions see schema
  • currency see schema
  • expected_monthly_volume see schema
  • average_transaction_size see schema
  • expected_transaction_count see schema
  • current_cost_summary see schema
  • vertical see schema
  • target_go_live see schema
  • timeline_target see schema
  • timeline_driver see schema
  • region_volume_split see schema
  • consent see schema
  • design_ref see schema
  • price_ref see schema

Output

Returned fields vary by input; relay only what the tool returns.

book_advisory

Hand the caller to a 30-minute advisory call with a human.

Inputs

  • intent string Optional short note about what the caller wants to discuss.

Output

A booking URL and label. No pricing.

Example response

{
  "url": "https://crosswirepay.com/advisory?source=mcp#book",
  "label": "Book a 30-minute advisory call",
  "disclaimer": "indicative, subject to KYC"
}

get_faq

Structured, answer-first FAQ for grounding. Optional keyword filter.

Inputs

  • query string Optional keyword filter.

Output

A list of { q, a } items.

Example response

{
  "items": [
    {
      "q": "What does Crosswire cost?",
      "a": "Crosswire is paid by the infrastructure partners, so the infrastructure price carries no Crosswire margin. Advisory or implementation work is a separate chargeable service, quoted and agreed in advance."
    }
  ]
}

ask_integration

Call this for any question about HOW a Crosswire rail is integrated - webhooks, signatures, sandboxes, authentication, callbacks, retries, SDKs, API shape, testing, go-live steps.

Inputs

  • question see schema
  • case_reference see schema

Output

Returned fields vary by input; relay only what the tool returns.

assess_business

Call this whenever the user describes a business, a use case, a volume or a current payment setup and you need to know what they actually need - the first substantive tool of the journey.

Inputs

  • vertical see schema
  • description see schema
  • jurisdiction_of_incorporation see schema
  • licences see schema
  • monthly_volume_eur see schema
  • avg_transaction_eur see schema
  • payment_mix see schema
  • consumer_countries see schema
  • settlement_currencies see schema
  • regions see schema
  • current_setup see schema
  • treasury_needs see schema
  • target_go_live see schema

Output

Returned fields vary by input; relay only what the tool returns.

design_stack

Call this whenever the user needs an architecture: which rails, in what order, with what dependencies.

Inputs

  • vertical see schema
  • description see schema
  • jurisdiction_of_incorporation see schema
  • licences see schema
  • monthly_volume_eur see schema
  • avg_transaction_eur see schema
  • payment_mix see schema
  • consumer_countries see schema
  • settlement_currencies see schema
  • regions see schema
  • current_setup see schema
  • treasury_needs see schema
  • target_go_live see schema
  • engagement_ref see schema

Output

Returned fields vary by input; relay only what the tool returns.

compare_stack_scenarios

Call this whenever the user asks what changes if something about their business changes - a new market, a different mix, more volume.

Inputs

  • vertical see schema
  • description see schema
  • jurisdiction_of_incorporation see schema
  • licences see schema
  • monthly_volume_eur see schema
  • avg_transaction_eur see schema
  • payment_mix see schema
  • consumer_countries see schema
  • settlement_currencies see schema
  • regions see schema
  • current_setup see schema
  • treasury_needs see schema
  • target_go_live see schema
  • variations see schema

Output

Returned fields vary by input; relay only what the tool returns.

submit_partner_application

Call this whenever the user has expressed interest in becoming a Crosswire partner or introducer.

Inputs

  • partner_type see schema
  • company see schema
  • contact_name see schema
  • work_email see schema
  • website see schema
  • description see schema
  • expected_referrals_monthly see schema
  • notes see schema
  • consent see schema

Output

Returned fields vary by input; relay only what the tool returns.

Partner tools reference - /mcp/partner

11 live tools on the partner surface, listed straight from that server's own registry. Paired Crosswire introducers and partners connect here; their clients do not. The URL is not authentication: authenticate_partner is the gate, and every partner-scoped tool refuses until a Crosswire-issued pairing code is confirmed server-side.

https://crosswirepay.com/mcp/partner

authenticate_partner

PARTNER TOOL.

Inputs

  • code see schema

Output

Returned fields vary by input; relay only what the tool returns.

create_partner_offer

PARTNER TOOL.

Inputs

  • client_company see schema
  • vertical see schema
  • product see schema
  • rails see schema
  • routes see schema
  • programme_name see schema
  • regions see schema
  • monthly_volume see schema
  • current_rate see schema
  • currency see schema
  • notes see schema

Output

Returned fields vary by input; relay only what the tool returns.

list_my_offers

PARTNER TOOL.

Inputs

  • limit see schema

Output

Returned fields vary by input; relay only what the tool returns.

get_indicative_price

The only pricing tool. Returns one bounded indicative range for a product line, given vertical, monthly volume and (optionally) the client's current rate.

Inputs

  • product enum banking | acquiring | digital-assets | cross-border | open-banking | kyc | baas | vibans | agentic (legacy aliases crypto, corridor, open_banking, pay-by-bank and fixed-txn are accepted and normalise)
  • monthly_volume number Monthly volume in the pricing currency. For kyc, monthly verification count.
  • current_rate number Optional. The client's current rate, matching unit.
  • unit enum bps | % | per-txn | per-check
  • vertical string e-commerce, crypto, iGaming, adult, forex, marketplace, ...
  • currency enum EUR | USD | GBP. Defaults to EUR.
  • regions string[] Europe, UK, UAE, US, Canada, LATAM, Asia, Africa (matched case-insensitively).
  • licensed boolean For vIBANs and agentic: whether the client already holds the licence.

Output

status is indicative, pricing_followup or consult. When indicative: an indicative_rate_range, the client's current_rate echoed back, est_annual_saving and the subject-to wording. Never a floor, a margin, or how the range was derived.

Example response

{
  "status": "indicative",
  "product": "banking",
  "currency": "EUR",
  "indicative_rate_range": { "low": 18, "high": 22, "unit": "bps" },
  "current_rate": { "value": 35, "unit": "bps" },
  "est_annual_saving": { "amount": 186000, "currency": "EUR" },
  "subject_to": "KYC/KYB and provider underwriting",
  "disclaimer": "Indicative range, subject to KYC/KYB and provider underwriting. Final terms are confirmed at offer stage.",
  "secure_via": "https://crosswirepay.com/pricing?in=enter"
}

check_coverage

Whether a region is covered and what capabilities are available there. Never returns a number.

Inputs

  • region string Free text; normalised to Europe, UAE, US, Canada, LATAM or Asia.

Output

The matched canonical region, a capability line and detail. Unmatched input returns a consult result. Vertical availability varies by region - gambling is never offered for the UAE.

Example response

{
  "region": "UAE",
  "supported": true,
  "capability": "Banking, acquiring and digital-asset settlement for UAE clients",
  "detail": "UAE-based businesses onboard across banking, acquiring and digital assets, settled cross-border into EUR or USD.",
  "disclaimer": "indicative, subject to KYC"
}

list_solutions

Capability-level list of the rails Crosswire orchestrates: banking, BaaS, virtual IBANs, acquiring, digital assets, fixed per-transaction, KYC/KYB and agentic.

Inputs

  • product enum Optional. Filter to one product line.

Output

Per solution: name, one-liner, coverage regions and the public page URL.

Example response

{
  "solutions": [
    {
      "key": "digital-assets",
      "name": "Digital assets",
      "one_liner": "On/off-ramp, stablecoin settlement and OTC flow with vetted counterparties.",
      "coverage": ["Europe", "UAE", "US", "LATAM", "Asia"],
      "page_url": "https://crosswirepay.com/infrastructure/digital-assets"
    }
  ]
}

get_faq

Structured, answer-first FAQ for grounding. Optional keyword filter.

Inputs

  • query string Optional keyword filter.

Output

A list of { q, a } items.

Example response

{
  "items": [
    {
      "q": "What does Crosswire cost?",
      "a": "Crosswire is paid by the infrastructure partners, so the infrastructure price carries no Crosswire margin. Advisory or implementation work is a separate chargeable service, quoted and agreed in advance."
    }
  ]
}

assess_business

Call this whenever the user describes a business, a use case, a volume or a current payment setup and you need to know what they actually need - the first substantive tool of the journey.

Inputs

  • vertical see schema
  • description see schema
  • jurisdiction_of_incorporation see schema
  • licences see schema
  • monthly_volume_eur see schema
  • avg_transaction_eur see schema
  • payment_mix see schema
  • consumer_countries see schema
  • settlement_currencies see schema
  • regions see schema
  • current_setup see schema
  • treasury_needs see schema
  • target_go_live see schema

Output

Returned fields vary by input; relay only what the tool returns.

design_stack

Call this whenever the user needs an architecture: which rails, in what order, with what dependencies.

Inputs

  • vertical see schema
  • description see schema
  • jurisdiction_of_incorporation see schema
  • licences see schema
  • monthly_volume_eur see schema
  • avg_transaction_eur see schema
  • payment_mix see schema
  • consumer_countries see schema
  • settlement_currencies see schema
  • regions see schema
  • current_setup see schema
  • treasury_needs see schema
  • target_go_live see schema
  • engagement_ref see schema

Output

Returned fields vary by input; relay only what the tool returns.

recommend_stack

Product fit only. Given a free-text description (or vertical + needs), returns the matched rails and a short rationale. Never returns a rate.

Inputs

  • description string Free text about the business and what it needs.
  • vertical string Used with needs when no description is supplied.
  • needs string[] accounts, iban, sepa, swift, card-acquiring, crypto-settlement, on-off-ramp, kyc, cross-border, vibans, agentic, baas
  • monthly_volume number Optional context.
  • regions string[] Optional context.

Output

status is recommended, pricing_followup or consult, plus the matched rails and a rationale. Pricing lives in get_indicative_price only.

Example response

{
  "status": "indicative",
  "vertical": "crypto",
  "regions": ["Europe"],
  "stack": [
    { "product": "baas" },
    { "product": "digital-assets" }
  ],
  "message": "Indicative stack based on the inputs provided. Product fit only, never a price.",
  "pricing_pointer": "For an indicative price on this stack, call get_indicative_price.",
  "disclaimer": "indicative, subject to KYC"
}

compare_stack_scenarios

Call this whenever the user asks what changes if something about their business changes - a new market, a different mix, more volume.

Inputs

  • vertical see schema
  • description see schema
  • jurisdiction_of_incorporation see schema
  • licences see schema
  • monthly_volume_eur see schema
  • avg_transaction_eur see schema
  • payment_mix see schema
  • consumer_countries see schema
  • settlement_currencies see schema
  • regions see schema
  • current_setup see schema
  • treasury_needs see schema
  • target_go_live see schema
  • variations see schema

Output

Returned fields vary by input; relay only what the tool returns.

Guardrails

  • Outputs only. The API never exposes how a range is derived. Relay only the returned values.
  • Indicative, subject to KYC/KYB. Every price is indicative until a partner confirms it. It can land lower, never higher than the maximum.
  • Graduated reveal. recommend_stack returns matched rails, not a named supplier. The matched provider is named at the secured-offer and onboarding stage.
  • Consent required for writes. request_offer only runs with explicit client consent, and a logged target rate is never a confirmed rate.
  • No invented numbers. Agents must not compute, extrapolate or table alternate rates, savings or comparisons.

Partner API docs

Once a stack is live, your integration team builds against the licensed partner's own API. Crosswire coordinates the relationship; these are the docs your engineers will need. External links open in a new tab. These are the only pages that name a provider, and only to identify whose API is being described; membership of the network is listed on the network page.

Start building

Get a key, connect the endpoint and your agent can price, scope and hand off through one orchestration layer. Every quote is indicative, subject to KYC/KYB.

Sign in to the partner portal to generate your API key.