Fyle Reports API

Expense reports submitted for approval and reimbursement.

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/fyle-reports-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

fyle-reports-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Fyle Platform Advances Reports API
  description: 'The Fyle Platform API (Fyle is now Sage Expense Management) exposes the objects behind Fyle''s spend and expense management product - expenses, expense reports, advances, categories, projects, cost centers, employees, merchants, corporate cards and their real-time transactions, files/receipts, and webhook subscriptions - as role-scoped REST resources. Every path is served under a role segment (admin, spender, approver, or common); this document models the admin, spender, and common surfaces most commonly used for accounting/HRMS integration.


    Authentication is OAuth 2.0 using the refresh-token grant: exchange a long-lived refresh token (with client_id and client_secret) at the token endpoint for a short-lived Bearer access token, then send it as `Authorization: Bearer <access_token>`.


    List endpoints follow a PostgREST-style convention: `offset`, `limit`, and `order` query parameters are mandatory, and any response field can be filtered with operators like `id=eq.<uuid>` or `updated_at=gte.<timestamp>`. A single resource is fetched by filtering on its id.


    Endpoint paths and HTTP verbs in this document are grounded in Fyle''s open-source Python Platform SDK (github.com/fylein/fyle-platform-sdk-py). Request and response object field shapes are modeled representatively - consult the live Stoplight reference at docs.fylehq.com for exhaustive schemas.'
  version: '1.0'
  contact:
    name: Fyle (Sage Expense Management)
    url: https://www.fylehq.com
  license:
    name: Proprietary
    url: https://www.fylehq.com/legal
servers:
- url: https://api.fylehq.com/platform/v1
  description: Fyle Platform API (production cluster). The role segment (admin, spender, approver, common) is the first path element.
security:
- bearerAuth: []
tags:
- name: Reports
  description: Expense reports submitted for approval and reimbursement.
paths:
  /admin/reports:
    get:
      operationId: listAdminReports
      tags:
      - Reports
      summary: List reports (admin)
      description: Lists expense reports in the organization with filtering and pagination.
      parameters:
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Order'
      responses:
        '200':
          description: A page of reports.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: upsertAdminReport
      tags:
      - Reports
      summary: Create or update a report (admin)
      description: Creates or updates an expense report.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DataObjectRequest'
      responses:
        '200':
          description: The created or updated report.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /admin/reports/mark_paid/bulk:
    post:
      operationId: bulkMarkReportsPaid
      tags:
      - Reports
      summary: Bulk mark reports as paid
      description: Marks multiple reports as paid once they have been reimbursed outside Fyle.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkDataRequest'
      responses:
        '200':
          description: Bulk result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /spender/reports:
    get:
      operationId: listSpenderReports
      tags:
      - Reports
      summary: List my reports (spender)
      description: Lists the signed-in spender's own reports.
      parameters:
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Order'
      responses:
        '200':
          description: A page of the spender's reports.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createSpenderReport
      tags:
      - Reports
      summary: Create a report (spender)
      description: Creates a report for the signed-in spender.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DataObjectRequest'
      responses:
        '200':
          description: The created report.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /spender/reports/add_expenses:
    post:
      operationId: addExpensesToReport
      tags:
      - Reports
      summary: Add expenses to a report
      description: Adds one or more expenses to an existing report.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DataObjectRequest'
      responses:
        '200':
          description: The updated report.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /spender/reports/submit:
    post:
      operationId: submitReport
      tags:
      - Reports
      summary: Submit a report
      description: Submits a report for approval.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DataObjectRequest'
      responses:
        '200':
          description: The submitted report.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    Report:
      type: object
      properties:
        id:
          type: string
          example: rpABC123
        org_id:
          type: string
        employee_id:
          type: string
        purpose:
          type: string
        state:
          type: string
          description: Report state, e.g. DRAFT, APPROVER_PENDING, APPROVED, PAID.
        num_expenses:
          type: integer
        amount:
          type: number
          format: double
        currency:
          type: string
        is_manually_created:
          type: boolean
        created_at:
          type: string
          format: date-time
        updated_at:
          type: string
          format: date-time
    DataObjectRequest:
      type: object
      description: Generic upsert envelope; Fyle wraps the resource under a `data` object.
      required:
      - data
      properties:
        data:
          type: object
          additionalProperties: true
    Error:
      type: object
      properties:
        message:
          type: string
        error:
          type: string
    ReportListResponse:
      type: object
      properties:
        count:
          type: integer
        offset:
          type: integer
        data:
          type: array
          items:
            $ref: '#/components/schemas/Report'
    BulkDataRequest:
      type: object
      description: Generic bulk envelope; Fyle wraps a list of resources under `data`.
      required:
      - data
      properties:
        data:
          type: array
          items:
            type: object
            additionalProperties: true
    ReportResponse:
      type: object
      properties:
        data:
          $ref: '#/components/schemas/Report'
  parameters:
    Offset:
      name: offset
      in: query
      required: true
      description: Number of records to skip for pagination (mandatory).
      schema:
        type: integer
        minimum: 0
        default: 0
    Order:
      name: order
      in: query
      required: true
      description: Sort order, e.g. `created_at.desc` or `updated_at.asc` (mandatory).
      schema:
        type: string
        example: created_at.desc
    Limit:
      name: limit
      in: query
      required: true
      description: Maximum number of records to return per page (mandatory).
      schema:
        type: integer
        minimum: 1
        default: 100
  responses:
    Unauthorized:
      description: Missing, invalid, or expired access token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'OAuth 2.0 Bearer access token. Obtain it via the refresh-token grant at the Fyle OAuth token endpoint (accounts host) using your client_id, client_secret, and refresh_token, then send it as `Authorization: Bearer <access_token>`.'