{
  "openapi": "3.1.1",
  "info": {
    "title": "Truss Corex API",
    "version": "1.0.0",
    "description": "Read the accounts, customer details, transactions, and statements available\nto an authorized Truss company through Core Exchange (Corex).\n\nThis Truss-specific contract is based on Plaid Core Exchange 6.3.1. Its\n`info.version` versions this published contract independently of that upstream\nspecification. It documents the supported Truss responses and parameters;\nit is not the complete FDX specification.\n\nEvery operation requires an OAuth access token with `accounts:read`, sent as\n`Authorization: Bearer <access_token>`. Use the authorization flow described\nin the Truss integration guide. Access is limited to the company authorized\nby the token. Confirm Corex availability and scope access with Truss during\nonboarding; the listed environments do not imply that access is enabled.\n\nDeposit accounts use `DEPOSIT_ACCOUNT` / `CHECKING`. When charge-account\naccess is enabled, the company can also expose a pay-in-full Truss Card as\n`LOC_ACCOUNT` / `CHARGE`. Only transaction lists support pagination and date\nfilters. Account, payment-network, and statement lists return an empty `page`\nobject. URLs do not have a trailing slash.\n\nAccount lookup failures use an FDX error with numeric `code: 701`.\nAuthentication, scope, throttling, and some statement errors use Truss error\nenvelopes instead. Error message text is diagnostic and may change.\n\n## Upstream provenance and license notice\n\nDerived from https://github.com/plaid/core-exchange/blob/main/versions/6.3/corex.yaml,\npreserved in this repository as `src/api/tests/fixtures/corex_6_3.yaml`.\nCore Exchange is a subset of the Financial Data Exchange (FDX) API\nspecification, the usage thereof (or any part thereof) constitutes acceptance\nof the FDX API License Agreement, which can be found at\nhttps://financialdataexchange.org/. The FDX API specification is distributed\nexclusively by FDX. Modifications to eliminate required or conditional\nelements prescribed in the FDX API Certification Use Cases will render any\nimplementations using said modifications non-conformant with the FDX API\nCertification Use Cases. Building the FDX-compliant Core Exchange API and\npermitting Plaid to call your build constitutes acceptance of the FDX end\nuser license agreement at https://financialdataexchange.org/.\n"
  },
  "servers": [
    {
      "url": "https://api.dev.trusspayments.com/fdx/v6",
      "description": "Development — confirm Corex access with Truss before use"
    },
    {
      "url": "https://api.trusspayments.com/fdx/v6",
      "description": "Production — confirm Corex access with Truss before use"
    }
  ],
  "security": [
    {
      "bearerAuth": []
    }
  ],
  "tags": [
    {
      "name": "Accounts",
      "description": "Accounts available to the authorized company and their contact details."
    },
    {
      "name": "Customer",
      "description": "The company authorized by the access token."
    },
    {
      "name": "Networks",
      "description": "Account routing information and supported transfer networks."
    },
    {
      "name": "Statements",
      "description": "Monthly deposit statements and PDF downloads."
    },
    {
      "name": "Transactions",
      "description": "Deposit ledger activity and posted charge-account activity."
    }
  ],
  "paths": {
    "/accounts": {
      "get": {
        "operationId": "listCorexAccounts",
        "tags": [
          "Accounts"
        ],
        "summary": "List accounts",
        "description": "Requires `accounts:read`. Returns the company's open deposit accounts\nand its charge account when available. Closed deposit accounts and\nretired wallets are excluded; frozen deposit accounts remain available.\nThe result is not paginated. Returns 404 if no accounts are available.\n",
        "responses": {
          "200": {
            "description": "All available accounts, represented as flat account objects.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Accounts"
                },
                "examples": {
                  "default": {
                    "value": {
                      "accounts": [
                        {
                          "accountCategory": "DEPOSIT_ACCOUNT",
                          "accountId": "1dd3a4b0-4837-4e24-b83d-4f3a834d9320",
                          "accountNumber": "1234567890",
                          "accountNumberDisplay": "7890",
                          "accountType": "CHECKING",
                          "availableBalance": 2500.5,
                          "balanceAsOf": "2026-08-31T12:00:00.000000Z",
                          "balanceType": "ASSET",
                          "currency": {
                            "currencyCode": "USD"
                          },
                          "currentBalance": 2500.5,
                          "customerId": "0de22cf5-a1ed-44db-85f4-4dd526a43085",
                          "description": "Truss Business Checking",
                          "interestRate": 0,
                          "lineOfBusiness": "BUSINESS",
                          "nickname": "Truss Cash",
                          "productName": "Truss Business Checking",
                          "routingTransitNumber": "000000000",
                          "status": "OPEN"
                        }
                      ],
                      "page": {}
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/accounts/{accountId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/AccountId"
        }
      ],
      "get": {
        "operationId": "getCorexAccount",
        "tags": [
          "Accounts"
        ],
        "summary": "Get an account",
        "description": "Requires `accounts:read`. Use an `accountId` returned by List accounts.\nReturns a flat deposit or charge-account object. Unknown, closed,\nunavailable, or other-company account identifiers return 404.\n",
        "responses": {
          "200": {
            "description": "The account's current details and balances.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Account"
                },
                "examples": {
                  "chargeAccount": {
                    "summary": "Optional pay-in-full charge account",
                    "value": {
                      "accountCategory": "LOC_ACCOUNT",
                      "accountId": "c40a7a4b-6f2d-4a58-bbb5-6e8d4984f819",
                      "accountType": "CHARGE",
                      "balanceType": "LIABILITY",
                      "currency": {
                        "currencyCode": "USD"
                      },
                      "currentBalance": 125,
                      "customerId": "0de22cf5-a1ed-44db-85f4-4dd526a43085",
                      "nextPaymentAmount": 125,
                      "nickname": "Truss Card",
                      "productName": "Truss Business Card",
                      "purchasesApr": 0,
                      "status": "OPEN"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/accounts/{accountId}/asset-transfer-networks": {
      "parameters": [
        {
          "$ref": "#/components/parameters/AccountId"
        }
      ],
      "get": {
        "operationId": "listCorexAssetTransferNetworks",
        "tags": [
          "Networks"
        ],
        "summary": "List asset-transfer networks",
        "description": "Requires `accounts:read`. Truss deposit and charge accounts do not expose\nbrokerage asset-transfer networks. Returns an empty list for any account\navailable to the authorized company.\n",
        "responses": {
          "200": {
            "description": "No asset-transfer networks are available.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AssetTransferNetworks"
                },
                "examples": {
                  "default": {
                    "value": {
                      "assetTransferNetworks": []
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/accounts/{accountId}/contact": {
      "parameters": [
        {
          "$ref": "#/components/parameters/AccountId"
        }
      ],
      "get": {
        "operationId": "getCorexAccountContact",
        "tags": [
          "Accounts"
        ],
        "summary": "Get account contact information",
        "description": "Requires `accounts:read`. Returns the primary business owner's name,\nemail, and phone, with the business address or owner's address. Deposit\nand charge accounts use the company's primary owner. Returns 404 if\nholders, emails, addresses, or telephones cannot be supplied.\n",
        "responses": {
          "200": {
            "description": "Account-holder contact information.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountContact"
                },
                "examples": {
                  "default": {
                    "value": {
                      "addresses": [
                        {
                          "city": "San Francisco",
                          "country": "US",
                          "line1": "123 Example Street",
                          "postalCode": "94103",
                          "region": "CA"
                        }
                      ],
                      "emails": [
                        "avery@example.com"
                      ],
                      "holders": [
                        {
                          "name": {
                            "first": "Avery",
                            "last": "Example"
                          },
                          "relationship": "PRIMARY"
                        }
                      ],
                      "telephones": [
                        {
                          "number": "+14155550100",
                          "type": "BUSINESS"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/accounts/{accountId}/payment-networks": {
      "parameters": [
        {
          "$ref": "#/components/parameters/AccountId"
        }
      ],
      "get": {
        "operationId": "listCorexPaymentNetworks",
        "tags": [
          "Networks"
        ],
        "summary": "Get ACH routing information",
        "description": "Requires `accounts:read`. Returns the deposit account's full account\nnumber and US ACH routing number. `transferIn` and `transferOut` are\nboth true. This operation supplies routing information; it does not\ninitiate a transfer. Charge accounts and deposits without complete\nrouting information return 404. The result is not paginated.\n",
        "responses": {
          "200": {
            "description": "The deposit account's US ACH network.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentNetworks"
                },
                "examples": {
                  "default": {
                    "value": {
                      "page": {},
                      "paymentNetworks": [
                        {
                          "bankId": "000000000",
                          "identifier": "1234567890",
                          "transferIn": true,
                          "transferOut": true,
                          "type": "US_ACH"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/accounts/{accountId}/statements": {
      "parameters": [
        {
          "$ref": "#/components/parameters/AccountId"
        }
      ],
      "get": {
        "operationId": "listCorexStatements",
        "tags": [
          "Statements"
        ],
        "summary": "List account statements",
        "description": "Requires `accounts:read`. Returns monthly deposit statement records in\ndescending year/month order, excluding the current and future months.\nUse each statement's `statementId` or its download link to request a PDF.\nA listed statement may still return 404 if the bank has not generated\nits PDF. Charge accounts return `statements: []`.\nThe result is not paginated and has no date-filter parameters.\n",
        "responses": {
          "200": {
            "description": "Statement records, or an empty list when none are available.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Statements"
                },
                "examples": {
                  "default": {
                    "value": {
                      "page": {},
                      "statements": [
                        {
                          "accountId": "1dd3a4b0-4837-4e24-b83d-4f3a834d9320",
                          "description": "Statement for 2026-08",
                          "links": [
                            {
                              "action": "GET",
                              "href": "https://api.dev.trusspayments.com/fdx/v6/accounts/1dd3a4b0-4837-4e24-b83d-4f3a834d9320/statements/9df1185b-9cc7-4243-915c-9e52b017e5a7"
                            }
                          ],
                          "statementDate": "2026-08-31",
                          "statementId": "9df1185b-9cc7-4243-915c-9e52b017e5a7",
                          "status": "AVAILABLE"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/accounts/{accountId}/statements/{statementId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/AccountId"
        },
        {
          "$ref": "#/components/parameters/StatementId"
        }
      ],
      "get": {
        "operationId": "downloadCorexStatement",
        "tags": [
          "Statements"
        ],
        "summary": "Download a deposit statement",
        "description": "Requires `accounts:read`. Downloads the bank-generated PDF for a\nstatement belonging to this deposit account. Unknown statement IDs,\ncharge-account statements, and bank PDFs that are not yet available\nreturn 404. Send `Accept: */*` (or omit the header); a successful\nresponse is `application/pdf` and errors can be JSON. An explicit\n`Accept: application/pdf` currently fails content negotiation with\n406, including in clients that choose that header automatically.\n",
        "responses": {
          "200": {
            "description": "The deposit statement PDF.",
            "content": {
              "application/pdf": {
                "schema": {}
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "406": {
            "$ref": "#/components/responses/NotAcceptable"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/accounts/{accountId}/transactions": {
      "parameters": [
        {
          "$ref": "#/components/parameters/AccountId"
        }
      ],
      "get": {
        "operationId": "listCorexTransactions",
        "tags": [
          "Transactions"
        ],
        "summary": "List account transactions",
        "description": "Requires `accounts:read`. Deposit accounts return activated ledger\ntransactions; charge accounts return posted purchases and payments.\nResults are newest first, ordered by posting timestamp and then an\ninternal identifier. Every returned item has status `POSTED`;\npending authorizations are not returned. For deposits, `POSTED` denotes\nledger activation and is not a guarantee of settlement.\n\nTo continue, send `page.nextOffset` unchanged as the next request's\n`offset`, with the same `limit`. Stop when `page.nextOffset` is absent.\nThe cursor retains the first request's time window; `startTime` and\n`endTime` on subsequent cursor requests do not replace that window.\nThe first request's end is capped at the current time.\n",
        "parameters": [
          {
            "$ref": "#/components/parameters/EndTime"
          },
          {
            "$ref": "#/components/parameters/Limit"
          },
          {
            "$ref": "#/components/parameters/Offset"
          },
          {
            "$ref": "#/components/parameters/StartTime"
          }
        ],
        "responses": {
          "200": {
            "description": "A page of transactions for the requested account.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transactions"
                },
                "examples": {
                  "default": {
                    "value": {
                      "page": {},
                      "transactions": [
                        {
                          "accountCategory": "DEPOSIT_ACCOUNT",
                          "amount": 80,
                          "debitCreditMemo": "DEBIT",
                          "description": "Supplier payment",
                          "memo": null,
                          "postedTimestamp": "2026-08-31T12:00:00.000000Z",
                          "status": "POSTED",
                          "transactionId": "4e5c2495-cbd5-465f-aa44-a273302396e7",
                          "transactionTimestamp": "2026-08-31T12:00:00.000000Z"
                        }
                      ]
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    },
    "/customers/current": {
      "get": {
        "operationId": "getCorexCurrentCustomer",
        "tags": [
          "Customer"
        ],
        "summary": "Get the authorized customer",
        "description": "Requires `accounts:read`. The customer is the authorized Truss company.\nIts name is the legal company name when available, otherwise its name\nin Truss. This is distinct from the natural person returned by the\naccount contact endpoint.\n",
        "responses": {
          "200": {
            "description": "The company authorized by the access token.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Customer"
                },
                "examples": {
                  "default": {
                    "value": {
                      "customerId": "0de22cf5-a1ed-44db-85f4-4dd526a43085",
                      "name": "Example Construction LLC",
                      "status": "active"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "AccountId": {
        "name": "accountId",
        "in": "path",
        "required": true,
        "description": "Account identifier returned by List accounts.",
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "examples": {
          "default": {
            "value": "1dd3a4b0-4837-4e24-b83d-4f3a834d9320"
          }
        }
      },
      "EndTime": {
        "name": "endTime",
        "in": "query",
        "description": "Inclusive end of the posting-time window, as an ISO 8601 date or\ntimestamp. A date includes that entire day. Use UTC timestamps for\nunambiguous boundaries. Omitted and future values resolve to\nthe current time. A continuation cursor supplies its own fixed window.\n",
        "schema": {
          "type": "string"
        },
        "examples": {
          "default": {
            "value": "2026-08-31"
          }
        }
      },
      "Limit": {
        "name": "limit",
        "in": "query",
        "description": "Page size. Values below 1 are clamped to 1 and values above 500 to 500.\nOmitted or non-integer values use 100.\n",
        "schema": {
          "type": "integer",
          "default": 100,
          "maximum": 500,
          "minimum": 1
        }
      },
      "Offset": {
        "name": "offset",
        "in": "query",
        "description": "Opaque `page.nextOffset` from the preceding response. Omit on the first\nrequest. Nonnegative numeric offsets are also accepted, but only a\nreturned cursor retains the original time window. Invalid offsets\nfall back to zero.\n",
        "schema": {
          "type": "string"
        }
      },
      "StartTime": {
        "name": "startTime",
        "in": "query",
        "description": "Inclusive start of the posting-time window, as an ISO 8601 date or\ntimestamp. Use UTC timestamps for unambiguous boundaries. Omitted\nvalues apply no lower bound. A continuation cursor supplies\nits own fixed window.\n",
        "schema": {
          "type": "string"
        },
        "examples": {
          "default": {
            "value": "2026-08-01"
          }
        }
      },
      "StatementId": {
        "name": "statementId",
        "in": "path",
        "required": true,
        "description": "Statement identifier returned by List account statements.",
        "schema": {
          "type": "string",
          "format": "uuid"
        },
        "examples": {
          "default": {
            "value": "9df1185b-9cc7-4243-915c-9e52b017e5a7"
          }
        }
      }
    },
    "responses": {
      "Forbidden": {
        "description": "The access token does not grant the required accounts:read scope.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ScopeError"
            },
            "examples": {
              "default": {
                "value": {
                  "code": "insufficient_oauth_scope",
                  "error_code": "insufficient_oauth_scope",
                  "message": "Insufficient OAuth scope to access this resource."
                }
              }
            }
          }
        }
      },
      "NotAcceptable": {
        "description": "The Accept header could not be negotiated. For statement downloads,\nsend `Accept: */*` or omit the header, even though success returns PDF.\n",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TrussError"
            },
            "examples": {
              "default": {
                "value": {
                  "detail": "Could not satisfy the request Accept header.",
                  "error_code": "not_acceptable"
                }
              }
            }
          }
        }
      },
      "NotFound": {
        "description": "The account or requested resource is unavailable to this company.\nAccount lookup, missing contacts or payment networks, and unsupported\ncharge-account statement downloads return FDX code 701. A bank PDF\nthat has not been generated can return a Truss detail envelope.\nA disabled Corex deployment or an unmatched URL can also return a\nrouter-level 404 whose body is not described by these schemas.\n",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/FdxError"
                },
                {
                  "$ref": "#/components/schemas/TrussError"
                }
              ]
            },
            "examples": {
              "accountNotFound": {
                "value": {
                  "code": 701,
                  "debugMessage": "An account with the provided account ID could not be found",
                  "message": "Account not found"
                }
              },
              "statementNotReady": {
                "value": {
                  "detail": "Statement not found"
                }
              }
            }
          }
        }
      },
      "RateLimited": {
        "description": "Too many requests. Wait before retrying.",
        "headers": {
          "Retry-After": {
            "description": "Number of seconds to wait before retrying.",
            "schema": {
              "type": "integer"
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TrussError"
            }
          }
        }
      },
      "Unauthorized": {
        "description": "A valid Bearer access token is required.",
        "headers": {
          "WWW-Authenticate": {
            "schema": {
              "type": "string",
              "examples": [
                "Bearer"
              ]
            }
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TrussError"
            },
            "examples": {
              "default": {
                "value": {
                  "detail": "Invalid authentication credentials",
                  "error_code": "authentication_failed"
                }
              }
            }
          }
        }
      }
    },
    "schemas": {
      "Account": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ChargeAccount"
          },
          {
            "$ref": "#/components/schemas/DepositAccount"
          }
        ],
        "discriminator": {
          "propertyName": "accountCategory",
          "mapping": {
            "DEPOSIT_ACCOUNT": "#/components/schemas/DepositAccount",
            "LOC_ACCOUNT": "#/components/schemas/ChargeAccount"
          }
        }
      },
      "AccountContact": {
        "type": "object",
        "required": [
          "addresses",
          "emails",
          "holders",
          "telephones"
        ],
        "properties": {
          "addresses": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/Address"
            }
          },
          "emails": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string"
            }
          },
          "holders": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/Holder"
            }
          },
          "telephones": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/Telephone"
            }
          }
        }
      },
      "Accounts": {
        "type": "object",
        "required": [
          "accounts",
          "page"
        ],
        "properties": {
          "accounts": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/Account"
            }
          },
          "page": {
            "$ref": "#/components/schemas/EmptyPage"
          }
        }
      },
      "Address": {
        "type": "object",
        "required": [
          "city",
          "country",
          "line1",
          "postalCode",
          "region"
        ],
        "properties": {
          "city": {
            "type": "string"
          },
          "country": {
            "type": "string",
            "description": "Two-letter country code, defaulting to US."
          },
          "line1": {
            "type": "string"
          },
          "line2": {
            "type": "string"
          },
          "postalCode": {
            "type": "string"
          },
          "region": {
            "type": "string"
          }
        }
      },
      "AssetTransferNetworks": {
        "type": "object",
        "required": [
          "assetTransferNetworks"
        ],
        "properties": {
          "assetTransferNetworks": {
            "type": "array",
            "maxItems": 0,
            "items": {
              "type": "object"
            }
          }
        }
      },
      "ChargeAccount": {
        "type": "object",
        "description": "A pay-in-full Truss Card, available when charge-account access is\nenabled. No revolving credit line or available-credit value is returned.\n",
        "required": [
          "accountCategory",
          "accountId",
          "accountType",
          "balanceType",
          "currency",
          "currentBalance",
          "customerId",
          "nextPaymentAmount",
          "nickname",
          "productName",
          "purchasesApr",
          "status"
        ],
        "properties": {
          "accountCategory": {
            "type": "string",
            "enum": [
              "LOC_ACCOUNT"
            ]
          },
          "accountId": {
            "type": "string",
            "format": "uuid"
          },
          "accountNumberDisplay": {
            "type": "string",
            "description": "Account mask, included when available."
          },
          "accountType": {
            "type": "string",
            "enum": [
              "CHARGE"
            ]
          },
          "balanceType": {
            "type": "string",
            "enum": [
              "LIABILITY"
            ]
          },
          "currency": {
            "$ref": "#/components/schemas/Currency"
          },
          "currentBalance": {
            "type": "number",
            "description": "Current charge-account balance in USD."
          },
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "lastStmtBalance": {
            "type": "number",
            "description": "Latest monthly statement's ending balance, when available."
          },
          "lastStmtDate": {
            "type": "string",
            "format": "date",
            "description": "Last day of the latest statement month, when available."
          },
          "minimumPaymentAmount": {
            "type": "number",
            "description": "Latest statement's full ending balance, when available. This\nsnapshot remains unchanged when the current balance is repaid.\n"
          },
          "nextPaymentAmount": {
            "type": "number",
            "description": "Equal to currentBalance."
          },
          "nickname": {
            "type": "string",
            "enum": [
              "Truss Card"
            ]
          },
          "productName": {
            "type": "string",
            "enum": [
              "Truss Business Card"
            ]
          },
          "purchasesApr": {
            "type": "number",
            "enum": [
              0
            ]
          },
          "status": {
            "type": "string",
            "description": "PAID when currentBalance is zero; otherwise OPEN.",
            "enum": [
              "OPEN",
              "PAID"
            ]
          }
        }
      },
      "ChargeTransaction": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TransactionFields"
          },
          {
            "type": "object",
            "required": [
              "accountCategory",
              "interestAmount",
              "principalAmount",
              "transactionType"
            ],
            "properties": {
              "accountCategory": {
                "type": "string",
                "enum": [
                  "LOC_ACCOUNT"
                ]
              },
              "category": {
                "type": "string",
                "description": "Merchant category code, when known."
              },
              "interestAmount": {
                "type": "number",
                "enum": [
                  0
                ]
              },
              "payee": {
                "type": "string",
                "description": "Merchant description, when present."
              },
              "principalAmount": {
                "type": "number",
                "description": "Zero for a purchase; the amount for a payment or credit."
              },
              "subCategory": {
                "type": "string",
                "enum": [
                  "MCC"
                ]
              },
              "transactionType": {
                "type": "string",
                "description": "PURCHASE for a debit; PAYMENT for a payment or credit.",
                "enum": [
                  "PAYMENT",
                  "PURCHASE"
                ]
              }
            }
          }
        ]
      },
      "Currency": {
        "type": "object",
        "required": [
          "currencyCode"
        ],
        "properties": {
          "currencyCode": {
            "type": "string",
            "enum": [
              "USD"
            ]
          }
        }
      },
      "Customer": {
        "type": "object",
        "required": [
          "customerId",
          "name",
          "status"
        ],
        "properties": {
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "type": "string",
            "enum": [
              "active"
            ]
          }
        }
      },
      "DepositAccount": {
        "type": "object",
        "required": [
          "accountCategory",
          "accountId",
          "accountNumberDisplay",
          "accountType",
          "availableBalance",
          "balanceAsOf",
          "balanceType",
          "currency",
          "currentBalance",
          "customerId",
          "description",
          "interestRate",
          "lineOfBusiness",
          "nickname",
          "productName",
          "status"
        ],
        "properties": {
          "accountCategory": {
            "type": "string",
            "enum": [
              "DEPOSIT_ACCOUNT"
            ]
          },
          "accountId": {
            "type": "string",
            "format": "uuid"
          },
          "accountNumber": {
            "type": "string",
            "description": "Full account number, included when routing information is available."
          },
          "accountNumberDisplay": {
            "type": [
              "string",
              "null"
            ],
            "description": "Account mask, or null if unavailable."
          },
          "accountType": {
            "type": "string",
            "enum": [
              "CHECKING"
            ]
          },
          "availableBalance": {
            "type": "number",
            "description": "Available Truss wallet balance in USD."
          },
          "balanceAsOf": {
            "type": "string",
            "format": "date-time"
          },
          "balanceType": {
            "type": "string",
            "enum": [
              "ASSET"
            ]
          },
          "currency": {
            "$ref": "#/components/schemas/Currency"
          },
          "currentBalance": {
            "type": "number",
            "description": "Equal to availableBalance in this API."
          },
          "customerId": {
            "type": "string",
            "format": "uuid"
          },
          "description": {
            "type": "string",
            "enum": [
              "Truss Business Checking"
            ]
          },
          "interestRate": {
            "type": "number",
            "enum": [
              0
            ]
          },
          "lineOfBusiness": {
            "type": "string",
            "enum": [
              "BUSINESS"
            ]
          },
          "nickname": {
            "type": "string",
            "description": "The account's name in Truss, defaulting to Truss Cash."
          },
          "productName": {
            "type": "string",
            "enum": [
              "Truss Business Checking"
            ]
          },
          "routingTransitNumber": {
            "type": "string",
            "description": "ACH routing number, included when available."
          },
          "status": {
            "type": "string",
            "enum": [
              "OPEN"
            ]
          }
        }
      },
      "DepositTransaction": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TransactionFields"
          },
          {
            "type": "object",
            "required": [
              "accountCategory"
            ],
            "properties": {
              "accountCategory": {
                "type": "string",
                "enum": [
                  "DEPOSIT_ACCOUNT"
                ]
              }
            }
          }
        ]
      },
      "EmptyPage": {
        "type": "object",
        "description": "This resource returns all entries without pagination.",
        "maxProperties": 0,
        "examples": [
          {}
        ]
      },
      "FdxError": {
        "type": "object",
        "required": [
          "code",
          "debugMessage",
          "message"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "description": "FDX error code, distinct from the HTTP status.",
            "enum": [
              701
            ]
          },
          "debugMessage": {
            "type": "string"
          },
          "message": {
            "type": "string"
          }
        }
      },
      "Holder": {
        "type": "object",
        "required": [
          "name",
          "relationship"
        ],
        "properties": {
          "name": {
            "type": "object",
            "required": [
              "first",
              "last"
            ],
            "properties": {
              "first": {
                "type": "string"
              },
              "last": {
                "type": "string"
              }
            }
          },
          "relationship": {
            "type": "string",
            "enum": [
              "PRIMARY"
            ]
          }
        }
      },
      "PaymentNetwork": {
        "type": "object",
        "required": [
          "bankId",
          "identifier",
          "transferIn",
          "transferOut",
          "type"
        ],
        "properties": {
          "bankId": {
            "type": "string",
            "description": "US ACH routing number."
          },
          "identifier": {
            "type": "string",
            "description": "Full deposit account number."
          },
          "transferIn": {
            "type": "boolean",
            "enum": [
              true
            ]
          },
          "transferOut": {
            "type": "boolean",
            "enum": [
              true
            ]
          },
          "type": {
            "type": "string",
            "enum": [
              "US_ACH"
            ]
          }
        }
      },
      "PaymentNetworks": {
        "type": "object",
        "required": [
          "page",
          "paymentNetworks"
        ],
        "properties": {
          "page": {
            "$ref": "#/components/schemas/EmptyPage"
          },
          "paymentNetworks": {
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/PaymentNetwork"
            }
          }
        }
      },
      "ScopeError": {
        "type": "object",
        "required": [
          "code",
          "error_code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "string",
            "enum": [
              "insufficient_oauth_scope"
            ]
          },
          "error_code": {
            "type": "string",
            "enum": [
              "insufficient_oauth_scope"
            ]
          },
          "message": {
            "type": "string"
          }
        }
      },
      "Statement": {
        "type": "object",
        "required": [
          "accountId",
          "description",
          "links",
          "statementDate",
          "statementId",
          "status"
        ],
        "properties": {
          "accountId": {
            "type": "string",
            "format": "uuid"
          },
          "description": {
            "type": "string"
          },
          "links": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "action",
                "href"
              ],
              "properties": {
                "action": {
                  "type": "string",
                  "enum": [
                    "GET"
                  ]
                },
                "href": {
                  "type": "string",
                  "format": "uri",
                  "description": "Absolute URL for this statement's PDF."
                }
              }
            }
          },
          "statementDate": {
            "type": "string",
            "format": "date",
            "description": "Last day of the statement month."
          },
          "statementId": {
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "type": "string",
            "enum": [
              "AVAILABLE"
            ]
          }
        }
      },
      "Statements": {
        "type": "object",
        "required": [
          "page",
          "statements"
        ],
        "properties": {
          "page": {
            "$ref": "#/components/schemas/EmptyPage"
          },
          "statements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Statement"
            }
          }
        }
      },
      "Telephone": {
        "type": "object",
        "required": [
          "number",
          "type"
        ],
        "properties": {
          "number": {
            "type": "string"
          },
          "type": {
            "type": "string",
            "enum": [
              "BUSINESS"
            ]
          }
        }
      },
      "Transaction": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/ChargeTransaction"
          },
          {
            "$ref": "#/components/schemas/DepositTransaction"
          }
        ],
        "discriminator": {
          "propertyName": "accountCategory",
          "mapping": {
            "DEPOSIT_ACCOUNT": "#/components/schemas/DepositTransaction",
            "LOC_ACCOUNT": "#/components/schemas/ChargeTransaction"
          }
        }
      },
      "TransactionFields": {
        "type": "object",
        "required": [
          "amount",
          "debitCreditMemo",
          "description",
          "memo",
          "postedTimestamp",
          "status",
          "transactionId",
          "transactionTimestamp"
        ],
        "properties": {
          "amount": {
            "type": "number",
            "minimum": 0,
            "description": "Absolute amount in USD. Use debitCreditMemo for direction."
          },
          "debitCreditMemo": {
            "type": "string",
            "description": "For deposits, DEBIT means money leaving and CREDIT means money\nentering the account. For charge accounts, DEBIT increases the\namount owed and CREDIT represents a payment or credit.\n",
            "enum": [
              "CREDIT",
              "DEBIT"
            ]
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "memo": {
            "type": [
              "string",
              "null"
            ]
          },
          "postedTimestamp": {
            "type": "string",
            "format": "date-time"
          },
          "status": {
            "type": "string",
            "enum": [
              "POSTED"
            ]
          },
          "transactionId": {
            "type": "string",
            "format": "uuid"
          },
          "transactionTimestamp": {
            "type": "string",
            "format": "date-time",
            "description": "For deposits, the ledger activation time (also postedTimestamp).\nFor charge accounts, the transaction's creation time.\n"
          }
        }
      },
      "TransactionPage": {
        "type": "object",
        "properties": {
          "nextOffset": {
            "type": "string",
            "description": "Opaque cursor to send as offset; absent on the last page."
          }
        }
      },
      "Transactions": {
        "type": "object",
        "required": [
          "page",
          "transactions"
        ],
        "properties": {
          "page": {
            "$ref": "#/components/schemas/TransactionPage"
          },
          "transactions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Transaction"
            }
          }
        }
      },
      "TrussError": {
        "type": "object",
        "required": [
          "detail"
        ],
        "properties": {
          "detail": {
            "type": "string"
          },
          "error_code": {
            "type": "string"
          }
        }
      }
    },
    "securitySchemes": {
      "bearerAuth": {
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "description": "OAuth access token with the accounts:read scope."
      }
    }
  },
  "x-ext-urls": {}
}