Accrue Savings Linked Accounts API

Linked Accounts represent payment methods that users have connected to their Accrue account. These accounts can be used for funding payments or topping up the wallet.

Operations 2

GET /api/v1/users/:userId/linked-accounts Get Linked Accounts for User #
DELETE /api/v1/users/:userId/linked-accounts/:linkedAccountId Remove a Linked Account #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/accrue-savings-linked-accounts-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

accrue-savings-linked-accounts-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  version: 1.0.0
  title: Accrue Merchant Linked Accounts API
  x-links:
  - name: View Alternative Version
    url: /api-fs/
    description: View API documentation with alternative enum-based WebhookIncluded schema
  description: Linked Accounts represent payment methods that users have connected to their Accrue account. These accounts can be used for funding payments or topping up the wallet.
servers:
- description: Production API
  url: https://merchant-api.accruesavings.com
- description: Sandbox API
  url: https://merchant-api-sandbox.accruesavings.com
tags:
- name: Linked Accounts
  description: Linked Accounts represent payment methods that users have connected to their Accrue account. These accounts can be used for funding payments or topping up the wallet.
paths:
  /api/v1/users/:userId/linked-accounts:
    get:
      operationId: getLinkedAccounts
      tags:
      - Linked Accounts
      summary: Get Linked Accounts for User
      description: Retrieves all linked bank accounts for a specific user. These accounts can be used for funding payments by providing the linkedAccountId when creating a payment.
      parameters:
      - schema:
          type: string
          format: uuid
          description: The ID of the user whose linked accounts to retrieve.
          example: 123e4567-e89b-12d3-a456-426614174000
        required: true
        name: userId
        in: path
      - schema:
          type: string
          format: uuid
          description: The unique identifier of the client making the request. This header is required to retrieve the client-specific configuration and ensure that the response is tailored to the client's settings and permissions.
          example: 123e4567-e89b-12d3-a456-426614174000
        required: true
        name: Client-ID
        in: header
      - schema:
          type: string
          format: uuid
          description: Secure secret to access privileged endpoints.
          example: Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef
        required: true
        name: Authorization
        in: header
      responses:
        '200':
          description: OK
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/GetLinkedAccountsResponse'
        '400':
          description: Bad Request. The user has no wallet with your account.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/LinkedAccountInvalidUserResponse'
        '404':
          description: Not Found. The user does not exist.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/LinkedAccountUserNotFoundResponse'
        '500':
          description: Internal Server Error
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/UnexpectedLinkedAccountErrorResponse'
      x-codeSamples:
      - lang: Shell
        source: "curl --request GET \\\n  --url https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts \\\n  --header 'Authorization: Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef' \\\n  --header 'Client-ID: 123e4567-e89b-12d3-a456-426614174000'"
      - lang: Node
        source: "const request = require('request');\n\nconst options = {\n  method: 'GET',\n  url: 'https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts',\n  headers: {\n    'Client-ID': '123e4567-e89b-12d3-a456-426614174000',\n    Authorization: 'Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef'\n  }\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
      - lang: Python
        source: "import http.client\n\nconn = http.client.HTTPSConnection(\"merchant-api.accruesavings.com\")\n\nheaders = {\n    'Client-ID': \"123e4567-e89b-12d3-a456-426614174000\",\n    'Authorization': \"Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef\"\n    }\n\nconn.request(\"GET\", \"/api/v1/users/:userId/linked-accounts\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"
      - lang: Ruby
        source: 'require ''uri''

          require ''net/http''

          require ''openssl''


          url = URI("https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts")


          http = Net::HTTP.new(url.host, url.port)

          http.use_ssl = true

          http.verify_mode = OpenSSL::SSL::VERIFY_NONE


          request = Net::HTTP::Get.new(url)

          request["Client-ID"] = ''123e4567-e89b-12d3-a456-426614174000''

          request["Authorization"] = ''Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef''


          response = http.request(request)

          puts response.read_body'
      - lang: Java
        source: "OkHttpClient client = new OkHttpClient();\n\nRequest request = new Request.Builder()\n  .url(\"https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts\")\n  .get()\n  .addHeader(\"Client-ID\", \"123e4567-e89b-12d3-a456-426614174000\")\n  .addHeader(\"Authorization\", \"Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef\")\n  .build();\n\nResponse response = client.newCall(request).execute();"
      - lang: Go
        source: "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts\"\n\n\treq, _ := http.NewRequest(\"GET\", url, nil)\n\n\treq.Header.Add(\"Client-ID\", \"123e4567-e89b-12d3-a456-426614174000\")\n\treq.Header.Add(\"Authorization\", \"Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}"
      - lang: Csharp
        source: 'var client = new RestClient("https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts");

          var request = new RestRequest(Method.GET);

          request.AddHeader("Client-ID", "123e4567-e89b-12d3-a456-426614174000");

          request.AddHeader("Authorization", "Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef");

          IRestResponse response = client.Execute(request);'
      - lang: Php
        source: "<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts');\n$request->setMethod(HTTP_METH_GET);\n\n$request->setHeaders([\n  'Client-ID' => '123e4567-e89b-12d3-a456-426614174000',\n  'Authorization' => 'Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"
  /api/v1/users/:userId/linked-accounts/:linkedAccountId:
    delete:
      operationId: deleteLinkedAccount
      tags:
      - Linked Accounts
      summary: Remove a Linked Account
      description: 'Removes a linked bank account for one of your users. This has the same effect as the user removing it themselves: any scheduled funding or round-ups using the account are stopped, and the account is deactivated with the bank linking provider. This cannot be undone — the user must link and verify the account again. The request is idempotent: removing an account that is already gone also returns 204, so it is safe to retry after a timeout.'
      parameters:
      - schema:
          type: string
          format: uuid
          description: The ID of the user who owns the linked account.
          example: 123e4567-e89b-12d3-a456-426614174000
        required: true
        name: userId
        in: path
      - schema:
          type: string
          format: uuid
          description: The ID of the linked account to remove.
          example: 123e4567-e89b-12d3-a456-426614174000
        required: true
        name: linkedAccountId
        in: path
      - schema:
          type: string
          format: uuid
          description: The unique identifier of the client making the request. This header is required to retrieve the client-specific configuration and ensure that the response is tailored to the client's settings and permissions.
          example: 123e4567-e89b-12d3-a456-426614174000
        required: true
        name: Client-ID
        in: header
      - schema:
          type: string
          format: uuid
          description: Secure secret to access privileged endpoints.
          example: Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef
        required: true
        name: Authorization
        in: header
      responses:
        '204':
          description: No Content. Also returned when the linked account was already removed.
        '400':
          description: Bad Request. The user has no wallet with your account.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/LinkedAccountInvalidUserResponse'
        '403':
          description: The linked account does not belong to the specified user.
        '404':
          description: Not Found. The user does not exist.
          content:
            application/vnd.api+json:
              schema:
                $ref: '#/components/schemas/LinkedAccountUserNotFoundResponse'
        '409':
          description: 'The account cannot be removed right now: either a payment funded by it is still in flight, or the account may also be in use outside your integration. Complete or cancel the payment, or ask the user to remove the account from their Accrue account.'
      x-codeSamples:
      - lang: Shell
        source: "curl --request DELETE \\\n  --url https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts/:linkedAccountId \\\n  --header 'Authorization: Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef' \\\n  --header 'Client-ID: 123e4567-e89b-12d3-a456-426614174000'"
      - lang: Node
        source: "const request = require('request');\n\nconst options = {\n  method: 'DELETE',\n  url: 'https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts/:linkedAccountId',\n  headers: {\n    'Client-ID': '123e4567-e89b-12d3-a456-426614174000',\n    Authorization: 'Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef'\n  }\n};\n\nrequest(options, function (error, response, body) {\n  if (error) throw new Error(error);\n\n  console.log(body);\n});\n"
      - lang: Python
        source: "import http.client\n\nconn = http.client.HTTPSConnection(\"merchant-api.accruesavings.com\")\n\nheaders = {\n    'Client-ID': \"123e4567-e89b-12d3-a456-426614174000\",\n    'Authorization': \"Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef\"\n    }\n\nconn.request(\"DELETE\", \"/api/v1/users/:userId/linked-accounts/:linkedAccountId\", headers=headers)\n\nres = conn.getresponse()\ndata = res.read()\n\nprint(data.decode(\"utf-8\"))"
      - lang: Ruby
        source: 'require ''uri''

          require ''net/http''

          require ''openssl''


          url = URI("https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts/:linkedAccountId")


          http = Net::HTTP.new(url.host, url.port)

          http.use_ssl = true

          http.verify_mode = OpenSSL::SSL::VERIFY_NONE


          request = Net::HTTP::Delete.new(url)

          request["Client-ID"] = ''123e4567-e89b-12d3-a456-426614174000''

          request["Authorization"] = ''Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef''


          response = http.request(request)

          puts response.read_body'
      - lang: Java
        source: "OkHttpClient client = new OkHttpClient();\n\nRequest request = new Request.Builder()\n  .url(\"https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts/:linkedAccountId\")\n  .delete(null)\n  .addHeader(\"Client-ID\", \"123e4567-e89b-12d3-a456-426614174000\")\n  .addHeader(\"Authorization\", \"Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef\")\n  .build();\n\nResponse response = client.newCall(request).execute();"
      - lang: Go
        source: "package main\n\nimport (\n\t\"fmt\"\n\t\"net/http\"\n\t\"io/ioutil\"\n)\n\nfunc main() {\n\n\turl := \"https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts/:linkedAccountId\"\n\n\treq, _ := http.NewRequest(\"DELETE\", url, nil)\n\n\treq.Header.Add(\"Client-ID\", \"123e4567-e89b-12d3-a456-426614174000\")\n\treq.Header.Add(\"Authorization\", \"Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef\")\n\n\tres, _ := http.DefaultClient.Do(req)\n\n\tdefer res.Body.Close()\n\tbody, _ := ioutil.ReadAll(res.Body)\n\n\tfmt.Println(res)\n\tfmt.Println(string(body))\n\n}"
      - lang: Csharp
        source: 'var client = new RestClient("https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts/:linkedAccountId");

          var request = new RestRequest(Method.DELETE);

          request.AddHeader("Client-ID", "123e4567-e89b-12d3-a456-426614174000");

          request.AddHeader("Authorization", "Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef");

          IRestResponse response = client.Execute(request);'
      - lang: Php
        source: "<?php\n\n$request = new HttpRequest();\n$request->setUrl('https://merchant-api.accruesavings.com/api/v1/users/:userId/linked-accounts/:linkedAccountId');\n$request->setMethod(HTTP_METH_DELETE);\n\n$request->setHeaders([\n  'Client-ID' => '123e4567-e89b-12d3-a456-426614174000',\n  'Authorization' => 'Bearer 633b336e4f57f095a405f6685e208cc7dd16de3e82494662f2acfeec3af1cdef'\n]);\n\ntry {\n  $response = $request->send();\n\n  echo $response->getBody();\n} catch (HttpException $ex) {\n  echo $ex;\n}"
components:
  schemas:
    UnexpectedLinkedAccountErrorResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: A unique UUID for this particular occurrence of the problem.
          example: 123e4567-e89b-12d3-a456-426614174000
        status:
          type: integer
          description: The HTTP status code applicable to this error.
          example: 500
        code:
          type: string
          enum:
          - UnexpectedError
          description: A unique, camel-cased Accrue-specific code detailing the error.
          example: UnexpectedError
        title:
          type: string
          description: Generic title for the error.
          example: LinkedAccountException
        detail:
          type: string
          description: A human-readable explanation providing more insights about the error.
          examples:
          - An unexpected error occurred.
        meta:
          type: object
          properties:
            environment:
              type: string
              enum:
              - production
              - sandbox
              example: sandbox
            timestamp:
              type: string
              format: date-time
              example: '2025-06-23T12:00:00.000Z'
            path:
              type: string
              example: /api/v1/users/123e4567-e89b-12d3-a456-426614174000/linked-accounts
          required:
          - environment
          - timestamp
          - path
          example:
            environment: sandbox
            timestamp: '2025-06-23T12:00:00.000Z'
            path: /api/v1/users/123e4567-e89b-12d3-a456-426614174000/linked-accounts
      required:
      - id
      - status
      - code
      - title
      - detail
      - meta
    LinkedAccountInvalidUserResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: A unique UUID for this particular occurrence of the problem.
          example: 123e4567-e89b-12d3-a456-426614174000
        status:
          type: integer
          description: The HTTP status code applicable to this error.
          example: 400
        code:
          type: string
          enum:
          - InvalidUser
          description: A unique, camel-cased Accrue-specific code detailing the error.
          example: InvalidUser
        title:
          type: string
          description: Generic title for the error.
          example: LinkedAccountException
        detail:
          type: string
          description: A human-readable explanation providing more insights about the error.
          examples:
          - User '{userId}' does not have a wallet with this merchant.
        meta:
          type: object
          properties:
            environment:
              type: string
              enum:
              - production
              - sandbox
              example: sandbox
            timestamp:
              type: string
              format: date-time
              example: '2025-06-23T12:00:00.000Z'
            path:
              type: string
              example: /api/v1/users/123e4567-e89b-12d3-a456-426614174000/linked-accounts
          required:
          - environment
          - timestamp
          - path
          example:
            environment: sandbox
            timestamp: '2025-06-23T12:00:00.000Z'
            path: /api/v1/users/123e4567-e89b-12d3-a456-426614174000/linked-accounts
      required:
      - id
      - status
      - code
      - title
      - detail
      - meta
    GetLinkedAccountsResponse:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: Unique identifier for the object.
                readOnly: true
              type:
                type: string
                enum:
                - LinkedAccount
              attributes:
                type: object
                properties:
                  provider:
                    type: string
                    enum:
                    - Meld
                    - Plaid
                    - Checkout
                    description: The provider used to link the bank account.
                  status:
                    type: string
                    enum:
                    - Connected
                    - Disconnected
                    - Pending
                    description: The current status of the linked account.
                  accountType:
                    type: string
                    enum:
                    - checking
                    - savings
                    - debit
                    - creditCard
                    - fundingCreditCard
                    - pending
                    description: The type of the linked account.
                  accountName:
                    type: string
                    description: The name of the account as provided by the institution.
                    example: Plaid Checking
                  accountMask:
                    type: string
                    description: The masked account number (typically last 4 digits).
                    example: '0000'
                  institutionName:
                    type: string
                    description: The name of the financial institution.
                    example: Plaid Bank
                  institutionId:
                    type: string
                    description: The unique identifier for the institution.
                    example: ins_109508
                  updatedAt:
                    type: string
                    format: date-time
                    readOnly: true
                  createdAt:
                    type: string
                    format: date-time
                    readOnly: true
                required:
                - updatedAt
                - createdAt
            required:
            - id
            - type
            - attributes
      required:
      - data
    LinkedAccountUserNotFoundResponse:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: A unique UUID for this particular occurrence of the problem.
          example: 123e4567-e89b-12d3-a456-426614174000
        status:
          type: integer
          description: The HTTP status code applicable to this error.
          example: 404
        code:
          type: string
          enum:
          - LinkedAccountNotFound
          description: A unique, camel-cased Accrue-specific code detailing the error.
          example: LinkedAccountNotFound
        title:
          type: string
          description: Generic title for the error.
          example: LinkedAccountNotFoundException
        detail:
          type: string
          description: A human-readable explanation providing more insights about the error.
          examples:
          - User '{userId}' not found.
        meta:
          type: object
          properties:
            environment:
              type: string
              enum:
              - production
              - sandbox
              example: sandbox
            timestamp:
              type: string
              format: date-time
              example: '2025-06-23T12:00:00.000Z'
            path:
              type: string
              example: /api/v1/users/123e4567-e89b-12d3-a456-426614174000/linked-accounts
          required:
          - environment
          - timestamp
          - path
          example:
            environment: sandbox
            timestamp: '2025-06-23T12:00:00.000Z'
            path: /api/v1/users/123e4567-e89b-12d3-a456-426614174000/linked-accounts
      required:
      - id
      - status
      - code
      - title
      - detail
      - meta
x-tagGroups:
- name: Overview
  tags:
  - Introduction
  - API Design
- name: Users
  tags:
  - Users
  - LinkedAccounts
  - Identity Verification
- name: Wallets
  tags:
  - Wallets
- name: Gifts
  tags:
  - Gifts
- name: Payments
  tags:
  - PaymentIntents
  - Payments
  - ExternalTransactions
  - Simulations
- name: Banking & KYC
  tags:
  - Banking
  - Counterparties
  - CounterpartyTransfers
- name: Sweepstakes
  tags:
  - Sweepstakes
- name: Rewards
  tags:
  - Rewards
- name: Widgets
  tags:
  - Widgets
- name: Webhooks
  tags:
  - Webhooks
  - WebhookEvents
  - Webhook Topics