Swan

Swan is a European embedded-banking / Banking-as-a-Service (BaaS) platform, headquartered in France, that lets companies embed accounts, IBANs, cards, and SEPA payments into their own products. Swan holds an Electronic Money Institution (EMI) license and exposes a single GraphQL API covering accounts, account holders, account memberships, IBAN management, card issuing, transactions, SEPA credit transfers and direct debits, digital onboarding, users, and consents. Integrations are backend-only, authenticated with OAuth2 (client credentials for server-to-server and authorization code for user access tokens) and scoped to a partner Project, with separate Sandbox and Live environments.

Swan publishes 7 APIs on the APIs.io network, including Accounts API, Account Memberships API, Cards API, and 4 more. Tagged areas include Embedded Banking, Banking as a Service, BaaS, Payments, and Accounts.

Swan’s developer surface includes authentication, documentation, engineering blog, and 7 more developer resources.

20.3/100 emerging ▬ flat Agent 16/100 agent aware Full breakdown ↓
scored 2026-07-20 · rubric v0.4
7 APIs 0 Features
Embedded BankingBanking as a ServiceBaaSPaymentsAccountsCardsIBANSEPAEuropeFranceFintechGraphQL

API Rating

API Evangelist API Evangelist Rating How this is scored →
scored 2026-07-20 · rubric v0.4
Composite quality — 20.3/100 · emerging
Contract Quality 0.0 / 25
Developer Ergonomics 4.3 / 20
Commercial Clarity 5.8 / 20
Operational Transparency 3.4 / 13
Governance 0.0 / 12
Discoverability 6.8 / 10
Agent readiness — 16/100 · agent aware
Machine-Readable Contract 0 / 18
Agentic Access Contract 0 / 15
MCP Server 0 / 12
Machine-Readable Auth 10 / 10
Idempotency 0 / 9
Stable Error Semantics 0 / 8
Request/Response Examples 0 / 7
Rate-Limit Signaling 7 / 7
Typed Event Surface 0 / 6
Agent Skills 0 / 5
Well-Known Catalog 0 / 4
Consent & Bot Identity 0 / 3
Improve this rating by publishing the missing artifacts — every area above can be raised, and the full rubric is at apis.io/rating/. This rating is computed from github.com/api-evangelist/swan-io: open an issue to ask a question, or submit a pull request to add artifacts. Want it done for you? Prioritized profiling — $2,500 →

APIs

Swan Accounts API

Create and manage bank accounts and their account holders through the GraphQL Partner API - open accounts, read balances and status, and access the IBAN and BIC distributed to e...

Swan Account Memberships API

Bind users to accounts and manage their permissions. Mutations include addAccountMemberships (add up to 200 memberships with a single consent), bindAccountMembership, suspendAcc...

Swan Cards API

Issue and manage virtual and physical payment cards attached to account memberships. The addCards mutation adds up to 200 cards (including physical printing) with a single conse...

Swan Payments API

Initiate and track SEPA payments. The initiateCreditTransfers mutation sends SEPA Credit Transfers, including SEPA Instant Credit Transfers via the isInstant flag; direct-debit ...

Swan Transactions API

Read the transaction ledger for an account - list and filter transactions through Relay-style connections, inspect their status (Pending, Booked, Rejected, Canceled), amounts, c...

Swan Onboarding API

Onboard individual and company account holders before they have a session. Started against the Unauthenticated GraphQL endpoint, onboarding mutations create and update an onboar...

Swan Users and Consents API

Read users and drive Swan's strong-customer-authentication consent flow. Sensitive mutations (adding memberships, issuing cards, initiating payments) return a consent that the u...

Collections

Pricing Plans

Swan Io Plans Pricing

2 plans

PLANS

Rate Limits

Swan Io Rate Limits

1 limits

RATE LIMITS

FinOps

Resources

Documentation 1

Reference material describing how the API behaves

Build 1

SDKs, sample code, and the tooling you integrate with

Access & Security 2

Authentication, authorization, and security posture

Operate 1

Status, limits, changes, and where to get help

Commercial 2

Pricing, plans, and the legal terms of use

Company 3

The organization behind the API

Source (apis.yml)

apis.yml Raw ↑
opencollection: 1.0.0
info:
  name: Swan Partner API (GraphQL)
  version: '1.0'
request:
  auth:
    type: bearer
    token: '{{bearerToken}}'
items:
- info:
    name: Accounts
    type: folder
  items:
  - info:
      name: Get account by id
      type: http
    http:
      method: POST
      url: https://api.swan.io/live-partner/graphql
      body:
        type: graphql
        data:
          query: "query Account($id: ID!) {\n  account(id: $id) {\n    id\n    name\n    IBAN\n    BIC\n    status\n    balances\
            \ { available { value currency } }\n  }\n}"
          variables: "{\n  \"id\": \"account-id\"\n}"
    docs: Fetch a single account, its IBAN/BIC, status, and balances.
  - info:
      name: List accounts
      type: http
    http:
      method: POST
      url: https://api.swan.io/live-partner/graphql
      body:
        type: graphql
        data:
          query: "query Accounts($first: Int) {\n  accounts(first: $first) {\n    totalCount\n    edges { node { id name status\
            \ } }\n  }\n}"
          variables: "{\n  \"first\": 20\n}"
    docs: List accounts visible to the current Project / access token.
- info:
    name: Account Memberships
    type: folder
  items:
  - info:
      name: Add account memberships
      type: http
    http:
      method: POST
      url: https://api.swan.io/live-partner/graphql
      body:
        type: graphql
        data:
          query: "mutation AddAccountMemberships($input: AddAccountMembershipInput!) {\n  addAccountMemberships(input: $input)\
            \ {\n    accountMemberships { id status email }\n    consent { id consentUrl status }\n  }\n}"
          variables: "{\n  \"input\": {\n    \"accountId\": \"account-id\",\n    \"email\": \"member@example.com\",\n    \"\
            canViewAccount\": true\n  }\n}"
    docs: Add up to 200 account memberships with a single consent. Returns a consent URL the user must approve.
  - info:
      name: Resume account membership
      type: http
    http:
      method: POST
      url: https://api.swan.io/live-partner/graphql
      body:
        type: graphql
        data:
          query: "mutation ResumeAccountMembership($id: ID!) {\n  resumeAccountMembership(id: $id) {\n    accountMembership\
            \ { id status }\n  }\n}"
          variables: "{\n  \"id\": \"membership-id\"\n}"
    docs: Resume an account membership that was previously suspended.
- info:
    name: Cards
    type: folder
  items:
  - info:
      name: Add cards
      type: http
    http:
      method: POST
      url: https://api.swan.io/live-partner/graphql
      body:
        type: graphql
        data:
          query: "mutation AddCards($input: AddCardInput!) {\n  addCards(input: $input) {\n    cards { id type status }\n\
            \    consent { id consentUrl status }\n  }\n}"
          variables: "{\n  \"input\": {\n    \"accountMembershipId\": \"membership-id\",\n    \"printPhysicalCard\": false\n\
            \  }\n}"
    docs: Issue up to 200 cards (optionally physical) with a single consent.
- info:
    name: Payments
    type: folder
  items:
  - info:
      name: Initiate SEPA credit transfers
      type: http
    http:
      method: POST
      url: https://api.swan.io/live-partner/graphql
      body:
        type: graphql
        data:
          query: "mutation InitiateCreditTransfers($input: InitiateCreditTransfersInput!) {\n  initiateCreditTransfers(input:\
            \ $input) {\n    payment { id status }\n    consent { id consentUrl status }\n  }\n}"
          variables: "{\n  \"input\": {\n    \"accountId\": \"account-id\",\n    \"consentRedirectUrl\": \"https://example.com/callback\"\
            ,\n    \"creditTransfers\": [\n      {\n        \"amount\": { \"value\": \"42.00\", \"currency\": \"EUR\" },\n\
            \        \"sepaBeneficiary\": { \"name\": \"Jane Doe\", \"iban\": \"FR7699999001000000000000000\" },\n       \
            \ \"isInstant\": true\n      }\n    ]\n  }\n}"
    docs: Send one or more SEPA credit transfers; set isInstant for SEPA Instant Credit Transfers.
- info:
    name: Transactions
    type: folder
  items:
  - info:
      name: List account transactions
      type: http
    http:
      method: POST
      url: https://api.swan.io/live-partner/graphql
      body:
        type: graphql
        data:
          query: "query Transactions($id: ID!, $first: Int) {\n  account(id: $id) {\n    transactions(first: $first) {\n \
            \     totalCount\n      edges { node { id label statusInfo amount { value currency } } }\n    }\n  }\n}"
          variables: "{\n  \"id\": \"account-id\",\n  \"first\": 20\n}"
    docs: Read the transaction ledger for an account via a Relay-style connection.
- info:
    name: Onboarding
    type: folder
  items:
  - info:
      name: Onboard company account holder
      type: http
    http:
      method: POST
      url: https://api.swan.io/live-unauthenticated/graphql
      body:
        type: graphql
        data:
          query: "mutation OnboardCompany($input: OnboardCompanyAccountHolderInput!) {\n  onboardCompanyAccountHolder(input:\
            \ $input) {\n    onboarding { id status onboardingUrl }\n  }\n}"
          variables: "{\n  \"input\": {\n    \"accountName\": \"Acme SAS\",\n    \"email\": \"founder@acme.example\",\n  \
            \  \"redirectUrl\": \"https://example.com/onboarding/complete\"\n  }\n}"
    docs: Start onboarding for a company account holder against the Unauthenticated endpoint; returns an onboardingUrl.
bundled: true