openapi: 3.2.0 info: title: Rotessa Customers 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. 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' components: responses: UnprocessableEntity: description: Unprocessable Entity - your request results in invalid data. content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' BadRequest: description: Bad Request - your request includes invalid parameters. content: application/json: schema: $ref: '#/components/schemas/ErrorEnvelope' InternalServerError: description: Internal Server Error - we had a problem with our server. Try again later. NotFound: description: Not Found - the specified resource could not be found. 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' schemas: 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 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' 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 CustomerUpdate: allOf: - type: object properties: id: type: integer description: The ID of the customer to update - $ref: '#/components/schemas/CustomerCreate' 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. Frequency: type: string description: Frequency of the transaction schedule. enum: - Once - Weekly - Every Other Week - Monthly - Every Other Month - Quarterly - Semi-Annually - Yearly 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 securitySchemes: apiKeyAuth: type: apiKey in: header name: Authorization description: 'API key placed in the Authorization header in the form `Authorization: Token token=""`. Keys are created and revoked in the Rotessa admin portal.'