Everhour Reports API

Dashboard reports for projects, clients, and users.

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/everhour-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

everhour-reports-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Everhour Clients Reports API
  description: The Everhour API is a RESTful interface providing programmatic access to time tracking, timesheets, timers, projects, tasks, clients, invoices, expenses, resource scheduling, time off, and reporting data in Everhour. The API accepts and returns JSON (UTF-8 only). All requests are authenticated with an X-Api-Key header carrying an API key found at the bottom of your Everhour profile page. An optional X-Accept-Version header pins a specific API version (the most recent, 1.2, is used by default). The API is labeled BETA by Everhour, meaning some calls can be slightly adjusted; breaking changes are pushed in separate API versions. Time values are in seconds and money amounts are in cents throughout.
  version: '1.2'
  contact:
    name: Everhour
    url: https://everhour.com
    email: ask@everhour.com
servers:
- url: https://api.everhour.com
  description: Everhour production API
security:
- apiKey: []
tags:
- name: Reports
  description: Dashboard reports for projects, clients, and users.
paths:
  /dashboards/projects:
    get:
      operationId: getProjectsReport
      tags:
      - Reports
      summary: Projects report
      description: Returns aggregated time, billable amounts, costs, profit, and expense metrics per project. Time columns are in seconds and amounts in cents.
      parameters:
      - $ref: '#/components/parameters/DateGte'
      - $ref: '#/components/parameters/DateLte'
      - $ref: '#/components/parameters/FilterProjectId'
      - $ref: '#/components/parameters/FilterClientId'
      - $ref: '#/components/parameters/FilterMemberId'
      responses:
        '200':
          description: Per-project report rows.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ProjectsDashboardItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /dashboards/clients:
    get:
      operationId: getClientsReport
      tags:
      - Reports
      summary: Clients report
      description: Returns aggregated time, billable amounts, costs, profit, and expense metrics per client.
      parameters:
      - $ref: '#/components/parameters/DateGte'
      - $ref: '#/components/parameters/DateLte'
      - $ref: '#/components/parameters/FilterProjectId'
      - $ref: '#/components/parameters/FilterClientId'
      - $ref: '#/components/parameters/FilterMemberId'
      responses:
        '200':
          description: Per-client report rows.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ClientsDashboardItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /dashboards/users:
    get:
      operationId: getUsersReport
      tags:
      - Reports
      summary: Users report
      description: Returns aggregated time, time off, billable amounts, costs, and profit metrics per team member.
      parameters:
      - $ref: '#/components/parameters/DateGte'
      - $ref: '#/components/parameters/DateLte'
      - $ref: '#/components/parameters/FilterProjectId'
      - $ref: '#/components/parameters/FilterClientId'
      - $ref: '#/components/parameters/FilterMemberId'
      responses:
        '200':
          description: Per-user report rows.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UsersDashboardItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  parameters:
    DateGte:
      name: date.gte
      in: query
      description: Report start date (YYYY-MM-DD).
      schema:
        type: string
        format: date
    FilterProjectId:
      name: projectId
      in: query
      description: Filter by project ID.
      schema:
        type: string
    FilterMemberId:
      name: memberId
      in: query
      description: Filter by user ID.
      schema:
        type: integer
    FilterClientId:
      name: clientId
      in: query
      description: Filter by client ID.
      schema:
        type: integer
    DateLte:
      name: date.lte
      in: query
      description: Report end date (YYYY-MM-DD).
      schema:
        type: string
        format: date
  schemas:
    Error:
      type: object
      properties:
        code:
          type: integer
        message:
          type: string
    UsersDashboardItem:
      type: object
      description: Per-user report row. Time is in seconds and amounts in cents.
      properties:
        memberId:
          type: integer
        memberName:
          type: string
        memberHeadline:
          type: string
        memberStatus:
          type: string
          enum:
          - active
          - invited
          - pending
          - removed
        time:
          type: integer
        billableTime:
          type: integer
        nonBillableTime:
          type: integer
        timeOffTime:
          type: integer
        timeOffDays:
          type: number
        billableAmount:
          type: integer
        costs:
          type: integer
        profit:
          type: integer
        expenses:
          type: integer
    ProjectsDashboardItem:
      type: object
      description: Per-project report row. Time is in seconds and amounts in cents.
      properties:
        projectId:
          type: string
        projectName:
          type: string
        projectStatus:
          type: string
          enum:
          - open
          - archived
        clientId:
          type: integer
        clientName:
          type: string
        billingType:
          type: string
          enum:
          - non_billable
          - hourly
          - fixed_fee
        time:
          type: integer
        billableTime:
          type: integer
        nonBillableTime:
          type: integer
        billableAmount:
          type: integer
        costs:
          type: integer
        profit:
          type: integer
        uninvoicedAmount:
          type: integer
        expenses:
          type: integer
    ClientsDashboardItem:
      type: object
      description: Per-client report row. Time is in seconds and amounts in cents.
      properties:
        clientId:
          type: integer
        clientName:
          type: string
        time:
          type: integer
        billableTime:
          type: integer
        nonBillableTime:
          type: integer
        billableAmount:
          type: integer
        costs:
          type: integer
        profit:
          type: integer
        uninvoicedAmount:
          type: integer
        expenses:
          type: integer
  responses:
    Unauthorized:
      description: Missing or invalid X-Api-Key header.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    TooManyRequests:
      description: Rate limit exceeded (around 20 requests per 10 seconds per API key). The Retry-After response header specifies the number of seconds to wait before making another request.
      headers:
        Retry-After:
          description: Seconds to wait before retrying.
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: X-Api-Key
      description: API key from the bottom of your Everhour profile page.