Fyle Projects API

Projects used to tag and allocate spend.

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-projects-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-projects-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Fyle Platform Advances Projects 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: Projects
  description: Projects used to tag and allocate spend.
paths:
  /admin/projects:
    get:
      operationId: listProjects
      tags:
      - Projects
      summary: List projects (admin)
      description: Lists projects with filtering and pagination.
      parameters:
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Order'
      responses:
        '200':
          description: A page of projects.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: upsertProject
      tags:
      - Projects
      summary: Create or update a project (admin)
      description: Creates or updates a single project.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DataObjectRequest'
      responses:
        '200':
          description: The created or updated project.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericObjectResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /admin/projects/bulk:
    post:
      operationId: bulkUpsertProjects
      tags:
      - Projects
      summary: Bulk create or update projects (admin)
      description: Creates or updates many projects in one request.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkDataRequest'
      responses:
        '200':
          description: The bulk result.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericListResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  schemas:
    GenericListResponse:
      type: object
      properties:
        count:
          type: integer
        offset:
          type: integer
        data:
          type: array
          items:
            type: object
            additionalProperties: true
    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
    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
    GenericObjectResponse:
      type: object
      properties:
        data:
          type: object
          additionalProperties: true
  responses:
    Unauthorized:
      description: Missing, invalid, or expired access token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  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
  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>`.'