openapi: 3.0.3
info:
title: Everhour Clients Projects 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: Projects
description: Projects, sections, billing, budgets, and integration sync.
paths:
/projects:
get:
operationId: getAllProjects
tags:
- Projects
summary: Get all projects
description: Returns projects, optionally filtered by name query or source integration platform.
parameters:
- name: limit
in: query
description: Max results.
schema:
type: integer
- name: query
in: query
description: Search projects by name.
schema:
type: string
- name: platform
in: query
description: Filter by integration platform code (for example as, ev, b3, b2, pv, gh, in, tr, jr).
schema:
type: string
responses:
'200':
description: A list of projects.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
post:
operationId: createProject
tags:
- Projects
summary: Create project
description: Creates a native Everhour project.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectRequest'
responses:
'201':
description: The created project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/projects/{projectId}:
parameters:
- $ref: '#/components/parameters/ProjectId'
get:
operationId: getProject
tags:
- Projects
summary: Get project
description: Returns a single project by ID.
responses:
'200':
description: The project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
put:
operationId: updateProject
tags:
- Projects
summary: Update project
description: Updates a project.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectRequest'
responses:
'200':
description: The updated project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
delete:
operationId: deleteProject
tags:
- Projects
summary: Delete project
description: Deletes a project.
responses:
'204':
description: Project deleted.
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/projects/{projectId}/archive:
patch:
operationId: archiveProject
tags:
- Projects
summary: Archive or unarchive project
description: Archives or unarchives a project.
parameters:
- $ref: '#/components/parameters/ProjectId'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
archived:
type: boolean
responses:
'201':
description: The project after archiving/unarchiving.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/projects/{projectId}/billing:
put:
operationId: updateProjectBilling
tags:
- Projects
summary: Update project billing and budget
description: Updates a project's billing type (non_billable, hourly, fixed_fee), rate configuration (project_rate or user_rate with per-user overrides), and budget (money, time, or costs; general, monthly, weekly, or daily periods).
parameters:
- $ref: '#/components/parameters/ProjectId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProjectBilling'
responses:
'200':
description: The updated project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/projects/{projectId}/sync:
post:
operationId: syncIntegrationProject
tags:
- Projects
summary: Sync integration project
description: Instantly synchronizes a project from a connected integration (Asana, Trello, ClickUp, GitHub, and more) into Everhour instead of waiting for background sync. Safe to call multiple times; returns the existing project if already synced.
parameters:
- $ref: '#/components/parameters/ProjectId'
responses:
'200':
description: The synced project.
content:
application/json:
schema:
$ref: '#/components/schemas/Project'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/projects/{projectId}/sections:
parameters:
- $ref: '#/components/parameters/ProjectId'
get:
operationId: getProjectSections
tags:
- Projects
summary: Get project sections
description: Returns the sections of a project.
responses:
'200':
description: A list of sections.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/Section'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
post:
operationId: createSection
tags:
- Projects
summary: Create section
description: Creates a section in a project.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SectionRequest'
responses:
'201':
description: The created section.
content:
application/json:
schema:
$ref: '#/components/schemas/Section'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
/sections/{sectionId}:
parameters:
- name: sectionId
in: path
required: true
description: Section ID.
schema:
type: integer
get:
operationId: getSection
tags:
- Projects
summary: Get section
description: Returns a single section by ID.
responses:
'200':
description: The section.
content:
application/json:
schema:
$ref: '#/components/schemas/Section'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
put:
operationId: updateSection
tags:
- Projects
summary: Update section
description: Updates a section.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SectionRequest'
responses:
'200':
description: The updated section.
content:
application/json:
schema:
$ref: '#/components/schemas/Section'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
delete:
operationId: deleteSection
tags:
- Projects
summary: Delete section
description: Deletes a section.
responses:
'204':
description: Section deleted.
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/TooManyRequests'
components:
schemas:
Error:
type: object
properties:
code:
type: integer
message:
type: string
ProjectBillingRate:
type: object
properties:
type:
type: string
enum:
- project_rate
- user_rate
rate:
type: integer
description: Flat rate in cents per hour (project_rate type only).
userRateOverrides:
type: object
description: Per-user rate overrides in cents per hour, keyed by user ID.
additionalProperties:
type: integer
SectionRequest:
type: object
required:
- name
properties:
name:
type: string
position:
type: integer
status:
type: string
enum:
- open
- archived
ProjectBilling:
type: object
properties:
billing:
$ref: '#/components/schemas/ProjectBillingBilling'
rate:
$ref: '#/components/schemas/ProjectBillingRate'
budget:
$ref: '#/components/schemas/ProjectBillingBudget'
ProjectBillingBilling:
type: object
properties:
type:
type: string
enum:
- non_billable
- hourly
- fixed_fee
fee:
type: integer
description: Fixed fee in cents (fixed_fee type only).
ProjectRequest:
type: object
required:
- name
- type
properties:
name:
type: string
type:
type: string
enum:
- board
- list
users:
type: array
description: Assigned user IDs.
items:
type: integer
Project:
type: object
properties:
id:
type: string
description: Project ID in {platform code}:{platform ID} format.
name:
type: string
workspaceId:
type: string
workspaceName:
type: string
client:
type: integer
description: Client ID.
type:
type: string
enum:
- board
- list
favorite:
type: boolean
users:
type: array
description: Assigned user IDs.
items:
type: integer
billing:
$ref: '#/components/schemas/ProjectBillingBilling'
rate:
$ref: '#/components/schemas/ProjectBillingRate'
budget:
$ref: '#/components/schemas/ProjectBillingBudget'
ProjectBillingBudget:
type: object
properties:
type:
type: string
description: Budget type - money, time, or costs.
enum:
- money
- time
- costs
budget:
type: integer
description: Budget value in cents (money) or seconds (time).
progress:
type: integer
readOnly: true
description: Current budget usage in cents or seconds.
timeProgress:
type: integer
readOnly: true
expenseProgress:
type: integer
readOnly: true
period:
type: string
enum:
- general
- monthly
- weekly
- daily
appliedFrom:
type: string
format: date
disallowOverbudget:
type: boolean
excludeUnbillableTime:
type: boolean
excludeExpenses:
type: boolean
showToUsers:
type: boolean
threshold:
type: integer
description: Email admins when this percentage (1-100) of the budget is reached.
Section:
type: object
properties:
id:
type: integer
name:
type: string
project:
type: string
position:
type: integer
status:
type: string
enum:
- open
- archived
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'
parameters:
ProjectId:
name: projectId
in: path
required: true
description: Project ID in {platform code}:{platform ID} format (for example ev:1234567789001 or as:1234567789001).
schema:
type: string
securitySchemes:
apiKey:
type: apiKey
in: header
name: X-Api-Key
description: API key from the bottom of your Everhour profile page.
ⓘ
Where this information came from
This is an independent, third-party profile of Everhour Projects API, published by
API Evangelist. We do not operate, host, resell, or
support these APIs, and we are not affiliated with or endorsed by the company unless stated above.
Everything here is built from publicly available information — the company's own site,
developer portal, documentation, public repositories, and the specifications it publishes for public use.
Nothing is obtained by breaching a system, defeating an access control, or using credentials.
The Kin Score and Agent Readiness rating are independently calculated assessments of a company's
public API artifacts, scored against a published rubric. They are not certifications,
endorsements, security assessments, or audits.
Corrections, re-scores, and removal are free — no partnership or purchase required, and
you do not need to justify the request. A removed company is recorded as unrated, never scored
zero for having asked. Acknowledgement within one business day; removal within two.
info@apievangelist.com
·
Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and
you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.