Routable Payments API

Create, validate, and manage payment methods (bank, international, and check) and estimate currency conversions and fees for payments to vendors in more than 200 countries via ACH, SWIFT, and check.

OpenAPI Specification

routable-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Routable API
  description: >-
    Specification of the Routable v1 REST API for B2B payments, accounts payable
    and receivable automation, and mass payouts. Manage vendor and customer
    companies, contacts, payment methods, funding accounts, payables,
    receivables, and webhook events. All requests are JSON over HTTPS and
    authenticated with a Bearer API token.
  termsOfService: https://www.routable.com/terms-of-service/
  contact:
    name: Routable Support
    url: https://developers.routable.com/docs
  version: '1.0'
servers:
  - url: https://api.routable.com/v1
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Companies
    description: Vendor and customer companies.
  - name: Contacts
    description: Contacts associated with companies.
  - name: Payment Methods
    description: Bank, international, and check payment methods.
  - name: Funding Sources
    description: Funding accounts and the Routable Balance.
  - name: Payables
    description: Bills owed to vendors.
  - name: Receivables
    description: Amounts owed to you by customers.
  - name: Webhooks
    description: Webhook events.
paths:
  /companies:
    get:
      operationId: listCompanies
      tags:
        - Companies
      summary: List companies
      description: Returns a paginated list of vendor and customer companies.
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/StartingAfter'
      responses:
        '200':
          description: A list of companies.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CompanyList'
    post:
      operationId: createCompany
      tags:
        - Companies
      summary: Create a company
      description: Creates a new vendor or customer company.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompanyCreate'
      responses:
        '201':
          description: The created company.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
  /companies/{id}:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    get:
      operationId: retrieveCompany
      tags:
        - Companies
      summary: Retrieve a company
      responses:
        '200':
          description: The requested company.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
    patch:
      operationId: updateCompany
      tags:
        - Companies
      summary: Update a company
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CompanyUpdate'
      responses:
        '200':
          description: The updated company.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
  /companies/{id}/archive:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    post:
      operationId: archiveCompany
      tags:
        - Companies
      summary: Archive a company
      responses:
        '200':
          description: The archived company.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
  /companies/{id}/unarchive:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    post:
      operationId: unarchiveCompany
      tags:
        - Companies
      summary: Unarchive a company
      responses:
        '200':
          description: The unarchived company.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
  /companies/{id}/invite:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    post:
      operationId: inviteCompany
      tags:
        - Companies
      summary: Invite a company
      description: Sends or re-sends an invitation for the company to provide payment information.
      responses:
        '200':
          description: The invited company.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Company'
  /contacts:
    get:
      operationId: listContacts
      tags:
        - Contacts
      summary: List contacts
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/StartingAfter'
      responses:
        '200':
          description: A list of contacts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactList'
    post:
      operationId: createContact
      tags:
        - Contacts
      summary: Create a contact
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactCreate'
      responses:
        '201':
          description: The created contact.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
  /contacts/{id}:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    get:
      operationId: retrieveContact
      tags:
        - Contacts
      summary: Retrieve a contact
      responses:
        '200':
          description: The requested contact.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
    patch:
      operationId: updateContact
      tags:
        - Contacts
      summary: Update a contact
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ContactCreate'
      responses:
        '200':
          description: The updated contact.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Contact'
  /payment_methods:
    get:
      operationId: listPaymentMethods
      tags:
        - Payment Methods
      summary: List payment methods
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/StartingAfter'
      responses:
        '200':
          description: A list of payment methods.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentMethodList'
    post:
      operationId: createPaymentMethod
      tags:
        - Payment Methods
      summary: Create a payment method
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentMethodCreate'
      responses:
        '201':
          description: The created payment method.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentMethod'
  /payment_methods/{id}:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    get:
      operationId: retrievePaymentMethod
      tags:
        - Payment Methods
      summary: Retrieve a payment method
      responses:
        '200':
          description: The requested payment method.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentMethod'
    patch:
      operationId: updatePaymentMethod
      tags:
        - Payment Methods
      summary: Update a payment method
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentMethodCreate'
      responses:
        '200':
          description: The updated payment method.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentMethod'
  /payment_methods/validate:
    post:
      operationId: validatePaymentMethod
      tags:
        - Payment Methods
      summary: Validate a payment method
      description: Validates bank or international payment details before creating a payment method.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PaymentMethodCreate'
      responses:
        '200':
          description: Validation result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid:
                    type: boolean
  /settings/accounts:
    get:
      operationId: listAccounts
      tags:
        - Funding Sources
      summary: List funding accounts
      responses:
        '200':
          description: A list of funding accounts.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundingAccountList'
  /settings/accounts/{id}:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    get:
      operationId: retrieveAccount
      tags:
        - Funding Sources
      summary: Retrieve a funding account
      responses:
        '200':
          description: The requested funding account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundingAccount'
  /settings/accounts/balance:
    get:
      operationId: retrieveBalanceAccount
      tags:
        - Funding Sources
      summary: Retrieve the Routable Balance account
      responses:
        '200':
          description: The Routable Balance account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundingAccount'
  /settings/accounts/{id}/deposit:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    post:
      operationId: depositFunds
      tags:
        - Funding Sources
      summary: Deposit funds into Routable Balance
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - amount
              properties:
                amount:
                  type: string
                  description: Amount to deposit, as a decimal string.
      responses:
        '200':
          description: The updated funding account.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundingAccount'
  /payables:
    get:
      operationId: listPayables
      tags:
        - Payables
      summary: List payables
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/StartingAfter'
      responses:
        '200':
          description: A list of payables.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PayableList'
    post:
      operationId: createPayable
      tags:
        - Payables
      summary: Create a payable
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayableCreate'
      responses:
        '201':
          description: The created payable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payable'
  /payables/{id}:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    get:
      operationId: retrievePayable
      tags:
        - Payables
      summary: Retrieve a payable
      responses:
        '200':
          description: The requested payable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payable'
    patch:
      operationId: updatePayable
      tags:
        - Payables
      summary: Update a payable
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PayableCreate'
      responses:
        '200':
          description: The updated payable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payable'
  /payables/{id}/cancel:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    post:
      operationId: cancelPayable
      tags:
        - Payables
      summary: Cancel a payable
      responses:
        '200':
          description: The cancelled payable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Payable'
  /payables/{id}/remind:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    post:
      operationId: remindPayable
      tags:
        - Payables
      summary: Send a payable reminder
      responses:
        '200':
          description: Reminder sent.
  /payables/{id}/estimate:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    post:
      operationId: estimatePayableFees
      tags:
        - Payables
      summary: Estimate fees for a payable
      responses:
        '200':
          description: Fee estimate.
          content:
            application/json:
              schema:
                type: object
                properties:
                  fee:
                    type: string
                  total:
                    type: string
                  currency:
                    type: string
  /payables/{id}/confirmation:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    get:
      operationId: downloadPayableConfirmation
      tags:
        - Payables
      summary: Download confirmation PDF
      responses:
        '200':
          description: Confirmation PDF.
          content:
            application/pdf:
              schema:
                type: string
                format: binary
  /receivables:
    get:
      operationId: listReceivables
      tags:
        - Receivables
      summary: List receivables
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/StartingAfter'
      responses:
        '200':
          description: A list of receivables.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReceivableList'
    post:
      operationId: createReceivable
      tags:
        - Receivables
      summary: Create a receivable
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReceivableCreate'
      responses:
        '201':
          description: The created receivable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Receivable'
  /receivables/{id}:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    get:
      operationId: retrieveReceivable
      tags:
        - Receivables
      summary: Retrieve a receivable
      responses:
        '200':
          description: The requested receivable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Receivable'
    patch:
      operationId: updateReceivable
      tags:
        - Receivables
      summary: Update a receivable
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReceivableCreate'
      responses:
        '200':
          description: The updated receivable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Receivable'
  /receivables/{id}/cancel:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    post:
      operationId: cancelReceivable
      tags:
        - Receivables
      summary: Cancel a receivable
      responses:
        '200':
          description: The cancelled receivable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Receivable'
  /receivables/{id}/remind:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    post:
      operationId: remindReceivable
      tags:
        - Receivables
      summary: Send a receivable reminder
      responses:
        '200':
          description: Reminder sent.
  /webhook_events:
    get:
      operationId: listWebhookEvents
      tags:
        - Webhooks
      summary: List webhook events
      parameters:
        - $ref: '#/components/parameters/Limit'
        - $ref: '#/components/parameters/StartingAfter'
      responses:
        '200':
          description: A list of webhook events.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookEventList'
  /webhook_events/{id}:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    get:
      operationId: retrieveWebhookEvent
      tags:
        - Webhooks
      summary: Retrieve a webhook event
      responses:
        '200':
          description: The requested webhook event.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookEvent'
  /webhook_events/{id}/retry:
    parameters:
      - $ref: '#/components/parameters/IdPath'
    post:
      operationId: retryWebhookEvent
      tags:
        - Webhooks
      summary: Retry a webhook event
      responses:
        '200':
          description: The retried webhook event.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookEvent'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: >-
        API token presented as `Authorization: Bearer {your_token}`. Generate
        tokens in the Routable dashboard. A sandbox environment is available for
        testing without moving real money.
  parameters:
    IdPath:
      name: id
      in: path
      required: true
      description: The unique identifier of the resource.
      schema:
        type: string
    Limit:
      name: limit
      in: query
      required: false
      description: Maximum number of records to return per page.
      schema:
        type: integer
        default: 25
    StartingAfter:
      name: starting_after
      in: query
      required: false
      description: Cursor for pagination; the id of the last record on the previous page.
      schema:
        type: string
  schemas:
    Pagination:
      type: object
      properties:
        count:
          type: integer
        next:
          type: string
          nullable: true
        previous:
          type: string
          nullable: true
    Company:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        type:
          type: string
          description: Whether the company is a vendor, customer, or both.
          enum:
            - vendor
            - customer
            - both
        status:
          type: string
          description: Onboarding status of the company.
          enum:
            - pending
            - invited
            - accepted
            - archived
        email:
          type: string
          format: email
        is_archived:
          type: boolean
        date_created:
          type: string
          format: date-time
        date_modified:
          type: string
          format: date-time
    CompanyCreate:
      type: object
      required:
        - name
        - type
      properties:
        name:
          type: string
        type:
          type: string
          enum:
            - vendor
            - customer
            - both
        email:
          type: string
          format: email
    CompanyUpdate:
      type: object
      properties:
        name:
          type: string
        email:
          type: string
          format: email
    CompanyList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Company'
        pagination:
          $ref: '#/components/schemas/Pagination'
    Contact:
      type: object
      properties:
        id:
          type: string
        company:
          type: string
          description: The id of the company this contact belongs to.
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        date_created:
          type: string
          format: date-time
    ContactCreate:
      type: object
      required:
        - company
        - email
      properties:
        company:
          type: string
        first_name:
          type: string
        last_name:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
    ContactList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Contact'
        pagination:
          $ref: '#/components/schemas/Pagination'
    PaymentMethod:
      type: object
      properties:
        id:
          type: string
        company:
          type: string
        type:
          type: string
          description: The kind of payment method.
          enum:
            - bank
            - international
            - check
            - address
        status:
          type: string
        is_archived:
          type: boolean
        date_created:
          type: string
          format: date-time
    PaymentMethodCreate:
      type: object
      required:
        - company
        - type
      properties:
        company:
          type: string
        type:
          type: string
          enum:
            - bank
            - international
            - check
            - address
        account_number:
          type: string
        routing_number:
          type: string
        account_type:
          type: string
          enum:
            - checking
            - savings
    PaymentMethodList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/PaymentMethod'
        pagination:
          $ref: '#/components/schemas/Pagination'
    FundingAccount:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        type:
          type: string
          description: The kind of funding account (e.g., bank or balance).
        balance:
          type: string
          description: Available balance as a decimal string, when applicable.
        currency:
          type: string
        date_created:
          type: string
          format: date-time
    FundingAccountList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/FundingAccount'
        pagination:
          $ref: '#/components/schemas/Pagination'
    Payable:
      type: object
      properties:
        id:
          type: string
        company:
          type: string
          description: The vendor company being paid.
        status:
          type: string
          enum:
            - new
            - scheduled
            - processing
            - completed
            - cancelled
            - failed
        amount:
          type: string
        currency:
          type: string
        reference_code:
          type: string
        due_date:
          type: string
          format: date
        date_created:
          type: string
          format: date-time
    PayableCreate:
      type: object
      required:
        - company
        - amount
      properties:
        company:
          type: string
        amount:
          type: string
        currency:
          type: string
          default: USD
        reference_code:
          type: string
        due_date:
          type: string
          format: date
        funding_account:
          type: string
          description: The funding account id used to source the payment.
    PayableList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Payable'
        pagination:
          $ref: '#/components/schemas/Pagination'
    Receivable:
      type: object
      properties:
        id:
          type: string
        company:
          type: string
          description: The customer company being billed.
        status:
          type: string
          enum:
            - new
            - sent
            - processing
            - completed
            - cancelled
            - failed
        amount:
          type: string
        currency:
          type: string
        reference_code:
          type: string
        due_date:
          type: string
          format: date
        date_created:
          type: string
          format: date-time
    ReceivableCreate:
      type: object
      required:
        - company
        - amount
      properties:
        company:
          type: string
        amount:
          type: string
        currency:
          type: string
          default: USD
        reference_code:
          type: string
        due_date:
          type: string
          format: date
    ReceivableList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Receivable'
        pagination:
          $ref: '#/components/schemas/Pagination'
    WebhookEvent:
      type: object
      properties:
        id:
          type: string
        event_type:
          type: string
          description: The type of event, e.g. payable.completed or company.accepted.
        status:
          type: string
          enum:
            - pending
            - delivered
            - failed
        payload:
          type: object
          additionalProperties: true
        date_created:
          type: string
          format: date-time
    WebhookEventList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/WebhookEvent'
        pagination:
          $ref: '#/components/schemas/Pagination'