Abacus Expenses API

Expense report management and operations

OpenAPI Specification

abacus-expenses-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Abacus Authentication Expenses API
  version: 1.0.0
  description: The Abacus API (now part of Emburse Spend) provides programmatic access to expense management functionality, including member management and expense operations. Available to partners and enterprise customers using OAuth 2.0 authentication. The API enables third-party integrations with the Abacus expense platform for automating expense workflows, member provisioning, and data synchronization.
  contact:
    name: Abacus Support
    url: https://support.abacus.com/hc/en-us
  x-generated-from: documentation
servers:
- url: https://api.abacus.com
  description: Production server
security:
- OAuth2: []
tags:
- name: Expenses
  description: Expense report management and operations
paths:
  /expenses:
    get:
      tags:
      - Expenses
      summary: Abacus List Expenses
      description: Retrieve a list of expense reports for the organization.
      operationId: listExpenses
      parameters:
      - name: page
        in: query
        description: Page number for pagination
        required: false
        schema:
          type: integer
          default: 1
        example: 1
      - name: per_page
        in: query
        description: Number of results per page
        required: false
        schema:
          type: integer
          default: 25
          maximum: 100
        example: 25
      - name: status
        in: query
        description: Filter by expense status
        required: false
        schema:
          type: string
          enum:
          - pending
          - approved
          - rejected
          - reimbursed
        example: pending
      - name: member_id
        in: query
        description: Filter expenses by member ID
        required: false
        schema:
          type: string
        example: '500123'
      - name: from_date
        in: query
        description: Filter expenses from this date (ISO 8601)
        required: false
        schema:
          type: string
          format: date
        example: '2025-01-01'
      - name: to_date
        in: query
        description: Filter expenses to this date (ISO 8601)
        required: false
        schema:
          type: string
          format: date
        example: '2025-03-31'
      responses:
        '200':
          description: List of expenses retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExpenseListResponse'
              examples:
                ListExpenses200Example:
                  summary: Default listExpenses 200 response
                  x-microcks-default: true
                  value:
                    expenses:
                    - id: exp-500123
                      member_id: '500123'
                      amount: 45.5
                      currency: USD
                      category: meals
                      description: Team lunch
                      date: '2025-03-15'
                      status: pending
                    total: 1
                    page: 1
                    per_page: 25
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '403':
          $ref: '#/components/responses/ForbiddenError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
  /expenses/{expense_id}:
    get:
      tags:
      - Expenses
      summary: Abacus Get Expense
      description: Retrieve details for a specific expense report.
      operationId: getExpense
      parameters:
      - $ref: '#/components/parameters/ExpenseId'
      responses:
        '200':
          description: Expense details retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Expense'
              examples:
                GetExpense200Example:
                  summary: Default getExpense 200 response
                  x-microcks-default: true
                  value:
                    id: exp-500123
                    member_id: '500123'
                    amount: 45.5
                    currency: USD
                    category: meals
                    description: Team lunch
                    date: '2025-03-15'
                    status: pending
                    receipt_url: https://portal.example.com/path/abc123
        '401':
          $ref: '#/components/responses/UnauthorizedError'
        '404':
          $ref: '#/components/responses/NotFoundError'
      x-microcks-operation:
        delay: 0
        dispatcher: FALLBACK
components:
  schemas:
    ExpenseListResponse:
      type: object
      description: Paginated list of expenses
      properties:
        expenses:
          type: array
          items:
            $ref: '#/components/schemas/Expense'
        total:
          type: integer
          description: Total number of expenses
          example: 250
        page:
          type: integer
          description: Current page number
          example: 1
        per_page:
          type: integer
          description: Number of results per page
          example: 25
    Error:
      type: object
      description: Error response
      properties:
        error:
          type: string
          description: Error code
          example: invalid_request
        message:
          type: string
          description: Human-readable error message
          example: The request is missing required parameters
    Expense:
      type: object
      description: An expense report submitted by a member
      properties:
        id:
          type: string
          description: Unique expense identifier
          example: exp-500123
        member_id:
          type: string
          description: ID of the member who submitted the expense
          example: '500123'
        amount:
          type: number
          description: Expense amount
          example: 45.5
        currency:
          type: string
          description: Currency code (ISO 4217)
          example: USD
        category:
          type: string
          description: Expense category
          enum:
          - meals
          - travel
          - lodging
          - office_supplies
          - software
          - other
          example: meals
        description:
          type: string
          description: Description of the expense
          example: Team lunch
        date:
          type: string
          format: date
          description: Date of the expense
          example: '2025-03-15'
        status:
          type: string
          description: Current status of the expense
          enum:
          - pending
          - approved
          - rejected
          - reimbursed
          example: pending
        receipt_url:
          type: string
          format: uri
          description: URL to the uploaded receipt
          example: https://api.abacus.com/receipts/abc123
        created_at:
          type: string
          format: date-time
          description: Timestamp when the expense was created
          example: '2025-03-15T14:30:00Z'
        updated_at:
          type: string
          format: date-time
          description: Timestamp when the expense was last updated
          example: '2025-03-16T10:00:00Z'
  responses:
    UnauthorizedError:
      description: Authentication required or failed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: unauthorized
            message: Invalid or missing access token
    NotFoundError:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: not_found
            message: The requested resource was not found
    ForbiddenError:
      description: Insufficient permissions for this operation
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: forbidden
            message: You do not have permission to perform this action
  parameters:
    ExpenseId:
      name: expense_id
      in: path
      required: true
      description: Unique identifier for the expense
      schema:
        type: string
      example: exp-500123
  securitySchemes:
    OAuth2:
      type: oauth2
      description: OAuth 2.0 client credentials flow for API authentication
      flows:
        clientCredentials:
          tokenUrl: https://api.abacus.com/oauth/token
          scopes:
            members:read: Read member information
            members:write: Create and update members
            expenses:read: Read expense reports