A REST API for project management
Create issues from forms and alerts, set up projects from scripts and pull your data into other tools. JSON over HTTP with an OpenAPI spec and public docs.
Prefer your own server? See self-hosted plans
$ curl -X POST https://eigenfocus.example.com/api/v1/projects/12/issues \ -H "Authorization: Bearer $EIGENFOCUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"title": "Fix broken signup form", "assignee_id": 4}' { "id": 381, "title": "Fix broken signup form", "finished": false, "status": { "id": 1, "name": "To Do" }, "web_url": "https://eigenfocus.example.com/projects/12/issues/381", ... }
What can the Eigenfocus REST API do?
The Eigenfocus REST API covers projects, statuses, types, labels, issues, comments, project members, custom fields and your time entries.
- It uses personal API keys and follows the same permissions as the user.
- The API reference and OpenAPI spec are public, so you can read them before you sign up.
Connect Eigenfocus to the rest of your stack
Copying tickets by hand
A short script can turn a form submission, a support email or a monitoring alert into an issue in the right project.
Setting up the same project again
Create a project as a copy of a template from a script. Statuses, types and labels come along and you choose the rest.
Reports outside Eigenfocus
Pull issues, statuses and custom fields into a spreadsheet, BI tool or your own dashboard.
How it works
Personal API keys
Create a key in your profile and pick when it expires: 30, 90 or 365 days or never. A key has the same access as you in the app, nothing more.
- Sent as a Bearer token
- Admins see and revoke any user's keys
- On self-hosted, admins can cap how long keys live or turn the API off
API keys
- Deploy script Expires in 84 days
- Reporting sheet Expires in 300 days
- Local experiments Never expires
Endpoints for the whole project
Work with the same data you see in the app.
Issues
- List, create, update, finish, reopen, archive and delete
- Filter by status, type, assignee, labels and title
- Read and write custom fields and start dates
- POST /api/v1/projects/{id}/issues
Projects and workflow
- Create, update, archive, delete and copy projects
- Manage statuses, types, labels and custom fields
- POST /api/v1/projects with copy_from_project_id
Team and comments
- Add, update and remove project members
- Read, write and delete comments
- POST /api/v1/projects/{id}/members
Time tracking
- List, log, edit and delete your time entries
- Start or stop timers
- PATCH /api/v1/time_entries/{id}/start
Built for scripts that run on their own
A few details that keep a script working long after you write it.
- Send the updated_at you read with each edit. If a teammate changed the issue since, you get a 409 error instead of overwriting their work
- Every project and issue includes a web_url that opens it in the app
- Public API reference and the spec at /api-docs/v1/openapi.yaml
- Point a coding agent at the OpenAPI spec and it can write the integration for you
# GET /api/v1/projects/12/issues/381
{
"id": 381,
"title": "Fix broken signup form",
"updated_at": "2026-11-08T14:02:11Z",
"web_url": "https://eigenfocus.example.com/projects/12/issues/381"
}
# PATCH with an old updated_at
409 Conflict
{ "error": "The issue changed since you read it. Get it again and retry." }
What people build
Issues from forms or alerts
A script posts new issues to an IT triage project.
IT project managementProject setup from a template
Create each new client project as a copy of your template.
Agency project managementProject reports
Pull a project's issues, statuses and custom fields into a spreadsheet or BI tool.
Two-way sync
Keep issues in step with another tool, using updated_at to avoid overwriting changes.
Frequently asked questions
How does the API authenticate?
Is there an OpenAPI spec?
What happens to a key when someone leaves?
Try it with your own projects
Flat price for your whole team. Cloud from $15/month or self-hosted.
Prefer your own server? See self-hosted plans