Skip to main content
Redmine exposes a REST API that lets you programmatically read and write project data. All standard resources — issues, projects, users, time entries, and wiki pages — are available as JSON or XML.
The REST API must be enabled by an administrator before it can be used. Go to Administration → Settings → API and enable the Enable REST web service option.

Base URL

All API endpoints are relative to your Redmine installation’s root URL:
https://redmine.example.com
Append .json or .xml to any resource path to request that format:
GET https://redmine.example.com/issues.json
GET https://redmine.example.com/issues.xml

Response formats

Redmine supports two response formats.
Append .json to the resource path or set the Accept: application/json header.
curl -H "X-Redmine-API-Key: YOUR_API_KEY" \
  https://redmine.example.com/issues.json
{
  "issues": [
    {
      "id": 1,
      "subject": "Example issue",
      "status": { "id": 1, "name": "New" }
    }
  ],
  "total_count": 1,
  "offset": 0,
  "limit": 25
}

Pagination

List endpoints return paginated results. Use offset and limit to navigate pages.
offset
number
default:"0"
Number of records to skip before returning results.
limit
number
default:"25"
Maximum number of records to return. The server-side maximum is typically 100.
The response always includes total_count, offset, and limit fields so you can calculate whether more pages exist.
# Fetch the second page of 25 issues
curl -H "X-Redmine-API-Key: YOUR_API_KEY" \
  "https://redmine.example.com/issues.json?offset=25&limit=25"

Common query parameters

Most list endpoints accept these parameters in addition to their own resource-specific filters.
ParameterTypeDescription
offsetintegerNumber of records to skip.
limitintegerNumber of records per page (max 100).
sortstringColumn to sort by, optionally suffixed with :desc (e.g., created_on:desc).
includestringComma-separated list of extra associations to embed in the response.

Requesting extra associations

Some endpoints support an include parameter that embeds related objects directly in the response, avoiding additional requests.
# Include journals and relations with an issue
curl -H "X-Redmine-API-Key: YOUR_API_KEY" \
  "https://redmine.example.com/issues/42.json?include=journals,relations"
Common include values per resource:
ResourceSupported values
Issuejournals, relations, changesets, attachments, children, watchers, allowed_statuses
Projecttrackers, issue_categories, enabled_modules
Usermemberships, groups

HTTP methods

MethodPurpose
GETRetrieve a resource or list of resources.
POSTCreate a new resource.
PUTUpdate an existing resource.
DELETEDelete a resource.

Content type for write requests

When sending a request body (POST or PUT), set the Content-Type header to match your payload format.
curl -X POST \
  -H "X-Redmine-API-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"issue":{"project_id":1,"subject":"New issue"}}' \
  https://redmine.example.com/issues.json

HTTP status codes

CodeMeaning
200 OKRequest succeeded.
201 CreatedResource created successfully.
204 No ContentRequest succeeded with no response body (e.g., DELETE).
401 UnauthorizedAuthentication failed or missing.
403 ForbiddenAuthenticated user lacks permission.
404 Not FoundResource does not exist.
409 ConflictConflict with the current state (e.g., stale update).
422 Unprocessable EntityValidation failed. Response body contains error details.
500 Internal Server ErrorUnexpected server error.

Validation error response

When a 422 is returned, the body contains the validation errors:
{
  "errors": [
    "Subject cannot be blank",
    "Project is invalid"
  ]
}

Rate limiting

Redmine does not enforce rate limiting by default. If you are running Redmine behind a reverse proxy (nginx, Apache), you can configure rate limiting at that layer.
For high-volume integrations, prefer bulk or filtered queries over fetching individual resources in a loop.

Quick reference

Authentication

API key, HTTP Basic Auth, and OAuth2.

Issues API

Create, read, update, and delete issues.

Projects API

Manage projects and their settings.

Users API

Manage user accounts (admin only).

Time entries API

Log and query time entries.

Wiki API

Read and write wiki pages.