Skip to main content

Getting started with the Examply API

Authenticate and make your first calls to the Examply REST API.

The Examply API lets you read and write projects, tasks, and teams programmatically — useful for custom integrations, internal tooling, or migrating data at scale. This article walks through authentication and your first few requests.

Note: The API is available on the Starter, Pro, and Enterprise plans. It's not available on the Free plan.

Creating an API token

  1. Go to workspace settings and open Developers.

  2. Click Generate token and give it a name that identifies what it's for.

  3. Copy the token immediately — Examply only shows it once.

  4. Store the token as a secret in whatever system calls the API. Never commit it to a repository.

Making your first request

All requests go to https://api.examply.com/v1 and use a bearer token in the Authorization header:

curl https://api.examply.com/v1/projects 
  -H "Authorization: Bearer $EXAMPLY_TOKEN"

A successful response returns a JSON array of the projects your token can see. To list tasks for one project, pass a query parameter:

curl https://api.examply.com/v1/tasks 
  -H "Authorization: Bearer $EXAMPLY_TOKEN"
  -G --data-urlencode "project_id=proj_9f21"

Core endpoints

Endpoint

Method

Description

/v1/projects

GET, POST

List or create projects

/v1/tasks

GET, POST, PATCH

List, create, or update tasks

/v1/teams

GET

List teams and their members

/v1/timesheets

GET

Read time entries for a date range

/v1/webhooks

GET, POST, DELETE

Manage webhook subscriptions

Rate limits

Requests are limited per token, per minute. Every response includes headers you can use to back off before hitting the limit:

  • X-RateLimit-Limit — requests allowed per minute

  • X-RateLimit-Remaining — requests left in the current window

  • X-RateLimit-Reset — seconds until the window resets

A request that exceeds the limit returns a 429 status. Retry after the window resets rather than immediately re-sending.

Pagination

List endpoints like /v1/projects and /v1/tasks return up to 50 records per page. Pass a page query parameter to fetch the next page, and check the has_more field in the response to know when to stop:

curl https://api.examply.com/v1/tasks 
  -H "Authorization: Bearer $EXAMPLY_TOKEN"
  -G --data-urlencode "project_id=proj_9f21" --data-urlencode "page=2"

Handling errors

The API returns standard HTTP status codes along with a JSON body describing what went wrong:

Status

Meaning

400

Malformed request — check required fields and types

401

Missing or invalid bearer token

403

Token doesn't have access to the requested resource

404

The project, task, or team doesn't exist or isn't visible to this token

429

Rate limit exceeded — back off and retry


Next steps

Pair the API with webhooks to react to changes in real time instead of polling — see the Zapier and webhooks article in Integrations for the event payload format. For anything the API doesn't cover yet, email support@examply.com.

Did this answer your question?