On a mobile?
Click to use the mobile web app.

Developer API

Got some sweet programming skills? Join others making cool things using our developer API.

  • Mobile & Desktop Apps or Extensions
  • Complex Reports & Time Analysis
  • Custom Integrations

Documentation

You should be able to find everything you need to create your project below. If there is any missing functionality that you want, please let us know and we'll see what we can do!

If there are any issues, bugs, questions, or suggestions please email us at support@minutedock.com

Authentication

All authentication is per user (not per account). The MinuteDock API requires SSL.

HTTP Basic

HTTP basic request with user email and password.

curl -u user@email.com:password https://minutedock.com/api/v1/accounts.json

API Key

Get your API key from your user account page.

curl https://minutedock.com/api/v1/users.json?api_key=API_KEY

Specifying Account

By default, the currently active user account in MinuteDock is used. This can (and generally should) be overridden by specifying an Account ID in API requests.

curl -u user@email.com:password https://minutedock.com/api/v1/users.json?account_id=ACCOUNT_ID

Request Format

For request payload bodies, please use Content-Type: x-www-form-urlencoded. Documented parameter names for POST body payloads assume this content-type.


Accounts

List all available accounts

GET /api/v1/accounts.json

[{"name":"MinuteDock","id":1},
{"name":"Demo Company (NZ)","id":314},
{"name":"Demo Company (NZ)","id":381}]

Show: Active Account

GET /api/v1/accounts/current.json

{"name":"MinuteDock","id":1}

Show: Account By ID

GET /api/v1/accounts/1.json

{"name":"MinuteDock","id":1}


Users

List all users

GET /api/v1/users.json

[{"email":"jared@minutedock.com","first_name":"Jared","last_name":"Armstrong","id":43},
{"email":"james@minutedock.com","first_name":"James","last_name":"Nisbet","id":3},
{"email":"nik@minutedock.com","first_name":"Nik","last_name":"Wakelin","id":1}]


Entries

Show current entry

GET /api/v1/entries/current.json

{"project_id":1166,"task_ids":[16],"account_id":1,"id":579020, "duration":3006,"description":"working on api documentation ", "invoice_id":null,"contact_id":68,"logged_at":null,"user_id":43, "timer_active":true}

Update entry

PUT /api/v1/entries/579020.json

Parameters should be provided in the format entry[duration], entry[description], etc.

Valid attributes: contact_id, project_id, duration (in seconds), description, task_ids[]

Start entry timer

POST /api/v1/entries/current/start.json

Starts the timer on the current entry.

Pause entry timer

POST /api/v1/entries/1345/pause.json

Pauses the timer on the current entry.

Log entry

POST /api/v1/entries/current/log.json

Log the current entry.

Create entry

POST /api/v1/entries.json

Parameters should be provided in the format entry[duration], entry[description], etc.

Valid attributes: contact_id, project_id, task_ids[], duration (in seconds), description, logged_at (datetime), user_id (only available for users with Entry admin permission)

Search entries

GET /api/v1/entries.json?users=all&projects=1,5,11&from=10 Feb 2012&to=17 Feb 2012&offset=20

Note that an error will be raised if user does not have permission to filter users.

users, contacts, projects, tasks

Comma separated list of User/Contact/Project/Task IDs to filter entries by. Also accepts "all" for all users/tasks/projects/contacts. Defaults to current user, and all tasks/projects/contacts.

task_detail

Task detail metadata filtering. This is a hidden feature - for more info drop us a line.

to, from

Filter range of entries. Ruby Time.parse parseable datetime. Defaults to current week.

limit, offset

Limit of entries to return (default/max: 50). Offset to start at (default: 0)


Contacts

List all available contacts

GET /api/v1/contacts.json

[{"name":"Client 1","default_rate_dollars":"100.00","id":2,"short_code":"client_1"},
{"name":"Client 2","default_rate_dollars":"","id":3,"short_code":"client_2"},
{"name":"Internal","default_rate_dollars":"","id":1,"short_code":"internal"}]

Create Contact

POST /api/v1/contacts.json

Post fields as contact[name], etc.

Valid fields: name, short_code, default_rate_dollars

Update Contact

PUT /api/v1/contacts/13.json

Post fields as contact[name], etc.

Valid fields: name, short_code, default_rate_dollars


Tasks

List all available tasks

GET /api/v1/tasks.json

[{"name":"unbillable","default_rate_dollars":"0.00","detail_name":null,"id":1,"description":"This is the description.","has_detail":false,"short_code":"unbillable"},
{"name":"meetings","default_rate_dollars":"","detail_name":null,"id":2,"description":null,"has_detail":false,"short_code":"meetings"},
{"name":"admin","default_rate_dollars":"","detail_name":null,"id":3, "description":null, "has_detail":false,"short_code":"admin"}]

Create Task

POST /api/v1/tasks.json

Post parameters as task[name], task[short_code], task[description], etc.

Valid fields: name, short_code, default_rate_dollars, has_detail, detail_name, description

Note: "detail" is a hidden feature. Drop us a line for more info.

Update Task

PUT /api/v1/tasks/1.json

Post parameters as task[name], task[short_code], task[description], etc.

Valid fields: name, short_code, default_rate_dollars, has_detail, detail_name, description

Delete Task

DELETE /api/v1/tasks/1.json

Will remove task from any associated entries, and destroy the task.

Archive Task

POST /api/v1/tasks/1/archive.json

Will hide a task from # menus in MinuteDock, but not delete the task.


Projects

List all available projects

GET /api/v1/projects.json

[{"name":"Job 1515","default_rate_dollars":"500.00","contact_id":2,"id":1,"description":"Joe Blogs needs something fixed.", "short_code":"job_1515"}]

Create Project

POST /api/v1/projects.json

Post parameters as project[name], project[short_code], project[description], etc.

Valid fields: name, short_code, default_rate_dollars, description, contact_id

Note: A project must have a contact_id

Update Project

PUT /api/v1/projects/1.json

Post parameters as project[name], project[short_code], project[description], etc.

Valid fields: name, short_code, default_rate_dollars, description, contact_id

Delete Project

DELETE /api/v1/projects/1.json

Will remove project from any associated entries, and destroy the project.

Archive Project

POST /api/v1/projects/1/archive.json

Will hide a project from # menus in MinuteDock, but not delete the project.

Something missing or broken?

We want to hear from you! Please drop us a line.