Rotessa API

Rotessa API from Rotessa — 9 path(s) described in OpenAPI.

OpenAPI Specification

rotessa-openapi.yml Raw ↑
# generated: '2026-07-24'
# method: generated
# source: https://rotessa.com/docs/
# note: Rotessa publishes no machine-readable OpenAPI. This spec is a faithful
#   generation from the published Slate REST reference at https://rotessa.com/docs/
#   (operations, parameters, auth, error format, and response codes as documented).
openapi: 3.1.0
info:
  title: Rotessa API
  version: v1
  description: >-
    The Rotessa API provides programmatic access to the core Rotessa platform for
    collecting recurring payments directly from customers' bank accounts over
    Canadian pre-authorized debit (PAD) and US ACH rails. It lets you manage
    customers (bank-account holders), create one-time and recurring transaction
    schedules against a customer's bank account, and query the resulting financial
    transactions via the transaction report. Authentication is by API key placed in
    the Authorization header. Faithful generation from https://rotessa.com/docs/.
  contact:
    name: Rotessa Support
    url: https://support.rotessa.com/
    email: support@rotessa.com
  termsOfService: https://rotessa.com/legal/
servers:
  - url: https://api.rotessa.com/v1
    description: Production
  - url: https://sandbox-api.rotessa.com/v1
    description: Sandbox / test environment
security:
  - apiKeyAuth: []
tags:
  - name: Customers
    description: Create, retrieve, and update the bank-account holders Rotessa withdraws from.
  - name: Transaction Schedules
    description: Create and manage one-time and recurring PAD/ACH transaction schedules.
  - name: Transaction Report
    description: Retrieve financial transaction records and their status for reconciliation.
paths:
  /customers:
    get:
      operationId: listCustomers
      tags: [Customers]
      summary: Get all customers
      description: Retrieve the list of customers associated with your Rotessa account.
      responses:
        '200':
          description: A list of customers.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Customer' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '500': { $ref: '#/components/responses/InternalServerError' }
    post:
      operationId: createCustomer
      tags: [Customers]
      summary: Create a customer
      description: >-
        Create a customer (bank-account holder) that Rotessa can withdraw funds from.
        Provide Canadian bank coordinates (institution_number, transit_number) or US
        coordinates (routing_number, bank_account_type), plus the account_number.
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/CustomerCreate' }
      responses:
        '200':
          description: The created customer.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Customer' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '422': { $ref: '#/components/responses/UnprocessableEntity' }
    patch:
      operationId: updateCustomer
      tags: [Customers]
      summary: Update a customer via PATCH
      description: Update an existing customer identified by its Rotessa customer id.
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/CustomerUpdate' }
      responses:
        '200':
          description: The updated customer.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Customer' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
        '422': { $ref: '#/components/responses/UnprocessableEntity' }
  /customers/{id}:
    get:
      operationId: getCustomer
      tags: [Customers]
      summary: Get a specific customer based on Rotessa ID
      parameters:
        - name: id
          in: path
          required: true
          description: The ID of the customer to retrieve.
          schema: { type: integer }
      responses:
        '200':
          description: The requested customer.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Customer' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
  /customers/show_with_custom_identifier:
    post:
      operationId: showCustomerByCustomIdentifier
      tags: [Customers]
      summary: Get a specific customer based on custom identifier
      description: Retrieve a customer by the merchant-supplied custom_identifier.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [custom_identifier]
              properties:
                custom_identifier:
                  type: string
                  description: The custom identifier of the customer to retrieve.
      responses:
        '200':
          description: The requested customer.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Customer' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
  /customers/update_via_post:
    post:
      operationId: updateCustomerViaPost
      tags: [Customers]
      summary: Update a customer via POST
      description: >-
        Update an existing customer using POST (for clients that cannot issue PATCH).
        Identify the customer by its Rotessa id.
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/CustomerUpdate' }
      responses:
        '200':
          description: The updated customer.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Customer' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
        '422': { $ref: '#/components/responses/UnprocessableEntity' }
  /transaction_schedules:
    post:
      operationId: createTransactionSchedule
      tags: [Transaction Schedules]
      summary: Create a transaction schedule with Rotessa Customer ID
      description: >-
        Create a one-time or recurring transaction schedule against a customer's bank
        account, identifying the customer by Rotessa customer_id.
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/TransactionScheduleCreate' }
      responses:
        '200':
          description: The created transaction schedule.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TransactionSchedule' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '422': { $ref: '#/components/responses/UnprocessableEntity' }
  /transaction_schedules/create_with_custom_identifier:
    post:
      operationId: createTransactionScheduleWithCustomIdentifier
      tags: [Transaction Schedules]
      summary: Create a transaction schedule with custom identifier
      description: >-
        Create a transaction schedule identifying the customer by the merchant-supplied
        custom_identifier instead of the Rotessa customer_id.
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/TransactionScheduleCreateWithCustomIdentifier' }
      responses:
        '200':
          description: The created transaction schedule.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TransactionSchedule' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '422': { $ref: '#/components/responses/UnprocessableEntity' }
  /transaction_schedules/{id}:
    get:
      operationId: getTransactionSchedule
      tags: [Transaction Schedules]
      summary: Get a specific transaction schedule
      parameters:
        - name: id
          in: path
          required: true
          description: The ID of the transaction schedule to retrieve.
          schema: { type: integer }
      responses:
        '200':
          description: The requested transaction schedule.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TransactionSchedule' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
    patch:
      operationId: updateTransactionSchedule
      tags: [Transaction Schedules]
      summary: Update a specific transaction schedule with transaction ID
      parameters:
        - name: id
          in: path
          required: true
          description: The ID of the transaction schedule to update.
          schema: { type: integer }
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/TransactionScheduleUpdate' }
      responses:
        '200':
          description: The updated transaction schedule.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TransactionSchedule' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
        '422': { $ref: '#/components/responses/UnprocessableEntity' }
    delete:
      operationId: deleteTransactionSchedule
      tags: [Transaction Schedules]
      summary: Delete a specific transaction schedule
      parameters:
        - name: id
          in: path
          required: true
          description: The ID of the transaction schedule to delete.
          schema: { type: integer }
      responses:
        '200':
          description: The transaction schedule was deleted.
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
  /transaction_schedules/update_via_post:
    post:
      operationId: updateTransactionScheduleViaPost
      tags: [Transaction Schedules]
      summary: Update a specific transaction schedule via POST
      description: Update a transaction schedule using POST (for clients that cannot issue PATCH).
      requestBody:
        required: true
        content:
          application/json:
            schema: { $ref: '#/components/schemas/TransactionScheduleUpdate' }
      responses:
        '200':
          description: The updated transaction schedule.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/TransactionSchedule' }
        '400': { $ref: '#/components/responses/BadRequest' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '404': { $ref: '#/components/responses/NotFound' }
        '422': { $ref: '#/components/responses/UnprocessableEntity' }
  /transaction_report:
    get:
      operationId: showTransactionReport
      tags: [Transaction Report]
      summary: Show transaction report
      description: >-
        Retrieve financial transaction records and their status for reconciliation and
        reporting. Paginated at 1000 transactions per page.
      parameters:
        - name: start_date
          in: query
          required: true
          description: The earliest process date (YYYY-MM-DD) of the list of transactions.
          schema: { type: string, format: date }
        - name: end_date
          in: query
          required: false
          description: The last process date (YYYY-MM-DD) of the list of transactions. Optional.
          schema: { type: string, format: date }
        - name: status
          in: query
          required: false
          description: Filter by the given financial status of the transactions.
          schema:
            type: string
            enum: [All, Pending, Approved, Declined, Chargeback]
            default: All
        - name: page
          in: query
          required: false
          description: Page selected based on 1000 transactions per page.
          schema: { type: integer, minimum: 1 }
      responses:
        '200':
          description: A list of financial transactions.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/FinancialTransaction' }
        '401': { $ref: '#/components/responses/Unauthorized' }
        '406': { $ref: '#/components/responses/NotAcceptable' }
components:
  securitySchemes:
    apiKeyAuth:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        API key placed in the Authorization header in the form
        `Authorization: Token token="<your_api_key>"`. Keys are created and revoked
        in the Rotessa admin portal.
  responses:
    BadRequest:
      description: Bad Request - your request includes invalid parameters.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/ErrorEnvelope' }
    Unauthorized:
      description: Unauthorized - your API key is not valid or is missing.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/ErrorEnvelope' }
    NotFound:
      description: Not Found - the specified resource could not be found.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/ErrorEnvelope' }
    NotAcceptable:
      description: Not Acceptable - you requested a format that isn't json.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/ErrorEnvelope' }
    UnprocessableEntity:
      description: Unprocessable Entity - your request results in invalid data.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/ErrorEnvelope' }
    InternalServerError:
      description: Internal Server Error - we had a problem with our server. Try again later.
  schemas:
    Address:
      type: object
      description: Customer address.
      properties:
        address_1: { type: string }
        address_2: { type: string }
        city: { type: string }
        province_code: { type: string, description: Province/state code }
        postal_code: { type: string }
        country: { type: string }
    Customer:
      type: object
      properties:
        id: { type: integer, description: ID of the customer }
        uuid: { type: string, description: UUID of the customer }
        custom_identifier: { type: string, description: Your own unique customer identifier }
        name: { type: string, description: Full name of customer }
        email: { type: string, description: Customer email address }
        customer_type: { type: string, enum: [Personal, Business] }
        home_phone: { type: string }
        phone: { type: string }
        bank_name: { type: string }
        institution_number: { type: string, description: Bank institution number for Canadian customers }
        transit_number: { type: string, description: Bank transit number for Canadian customers }
        bank_account_type: { type: string, enum: [Savings, Checking], description: For American customers }
        authorization_type: { type: string, enum: ['In Person', 'Online'] }
        routing_number: { type: string, description: Bank routing number for American customers }
        account_number: { type: string, description: Bank account number }
        address: { $ref: '#/components/schemas/Address' }
        transaction_schedules:
          type: array
          items: { $ref: '#/components/schemas/TransactionSchedule' }
        financial_transactions:
          type: array
          items: { $ref: '#/components/schemas/FinancialTransaction' }
    CustomerCreate:
      type: object
      required: [name, account_number]
      properties:
        name: { type: string, description: Full name of customer }
        custom_identifier: { type: string, description: Your own customer identifier. Must be unique. }
        email: { type: string }
        home_phone: { type: string }
        phone: { type: string }
        bank_name: { type: string }
        institution_number: { type: string, description: Bank institution number for Canadian customers }
        transit_number: { type: string, description: Bank transit number for Canadian customers }
        bank_account_type: { type: string, enum: [Savings, Checking], description: For American customers }
        authorization_type: { type: string, enum: ['In Person', 'Online'] }
        routing_number: { type: string, description: Routing number for American customers }
        account_number: { type: string, description: Bank account number }
        address: { $ref: '#/components/schemas/Address' }
        customer_type: { type: string, enum: [Personal, Business] }
    CustomerUpdate:
      allOf:
        - type: object
          properties:
            id: { type: integer, description: The ID of the customer to update }
        - $ref: '#/components/schemas/CustomerCreate'
    TransactionSchedule:
      type: object
      properties:
        id: { type: integer, description: ID of the transaction schedule }
        uuid: { type: string, description: UUID of the transaction schedule }
        amount: { type: number, description: Amount for schedule }
        process_date: { type: string, description: The initial date to begin withdrawing funds }
        frequency: { $ref: '#/components/schemas/Frequency' }
        installments: { type: integer, description: The number of installments. Leave blank to continue indefinitely. }
        comment: { type: string, description: A place to enter notes for the transaction schedule }
        next_process_date: { type: string, description: The next date that funds will be withdrawn }
        financial_transactions:
          type: array
          items: { $ref: '#/components/schemas/FinancialTransaction' }
    TransactionScheduleCreate:
      type: object
      required: [customer_id, amount, process_date, frequency]
      properties:
        customer_id: { type: integer, description: ID of customer }
        amount: { type: number, description: Amount for schedule }
        process_date: { type: string, description: The initial date to begin withdrawing funds (e.g. November 20, 2016) }
        frequency: { $ref: '#/components/schemas/Frequency' }
        installments: { type: integer, description: The number of installments. If excluded, schedule is indefinite. }
        comment: { type: string, description: Optional comment for schedule }
    TransactionScheduleCreateWithCustomIdentifier:
      type: object
      required: [custom_identifier, amount, process_date, frequency]
      properties:
        custom_identifier: { type: string, description: Your own unique custom identifier for the customer }
        amount: { type: number, description: Amount for schedule }
        process_date: { type: string, description: The initial date to begin withdrawing funds }
        frequency: { $ref: '#/components/schemas/Frequency' }
        installments: { type: integer, description: The number of installments. If excluded, schedule is indefinite. }
        comment: { type: string, description: Optional comment for schedule }
    TransactionScheduleUpdate:
      type: object
      required: [id]
      properties:
        id: { type: integer, description: The ID of the transaction schedule to update }
        amount: { type: number, description: Amount for the schedule }
        comment: { type: string, description: Optional comment for schedule }
    Frequency:
      type: string
      description: Frequency of the transaction schedule.
      enum:
        - Once
        - Weekly
        - Every Other Week
        - Monthly
        - Every Other Month
        - Quarterly
        - Semi-Annually
        - Yearly
    FinancialTransaction:
      type: object
      properties:
        id: { type: integer, description: ID of the financial transaction }
        uuid: { type: string, description: UUID of the financial transaction }
        amount: { type: number, description: Transaction amount }
        process_date: { type: string, description: The scheduled process date of the transaction }
        status:
          type: string
          description: The current status of the transaction.
          enum: [Future, Pending, Approved, Declined, Chargeback]
        status_reason:
          type: string
          description: The reason for the Declined or Chargeback status of a transaction.
        transaction_schedule_id: { type: integer, description: ID of the transaction schedule that created this transaction }
        bank_name: { type: string }
        institution_number: { type: string }
        transit_number: { type: string }
        account_number: { type: string }
    ErrorEnvelope:
      type: object
      description: >-
        Rotessa error envelope. Errors are returned as a list of objects each carrying
        a machine-readable error_code and a human-readable error_message.
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              error_code: { type: string, example: installments_required }
              error_message: { type: string, example: Installments value must be at least 1. }