MinuteDock

Entries

Entries are MinuteDock time entries - each of these corresponds to a single entry on your MinuteDock dashboard.

Entries Overview

{
  "id": 123,
Integer (Int32)

Primary Key identifier for this entry

  "duration": 3600,
Integer

Entry time duration (in seconds)

  "contact_id": 456,
Integer

The primary key identifier for the Contact selected for this Entry.

  "account_id": 123,
Integer

The primary key identifier of the Account this entry belongs to.

  "description": "Doing some amazing billable work!",
String

This is the description entered by the user for this entry.

  "updated_at": null,
String (Date-time)

A timestamp for when this Entry was last updated.

  "invoice_id": "foo",
String

The primary key identifier of the Invoice this entry belongs to. This will be "null" if the Entry is not included in an invoice.

  "logged_at": null,
String (Date-time)

A timestamp for when the entry was "logged" (i.e first created). This will be "null" if the entry is still in the user's log bar.

  "log_at": null,
String (Date-time)

This is set if the user has chosen to log this entry at a specific date/time rather than the current date/time.

  "project_id": 42,
Integer

The primary key identifier of the Project this entry belongs to.

  "user_account_id": 256,
Integer (Int32)

For internal use, best not to rely on this.

  "user_id": 256,
Integer (Int32)

The primary key identifier of the User this entry belongs to.

  "logged": false,
Boolean

A boolean recording whether the entry has been "logged" or not in MinuteDock.

  "timer_active": true,
Boolean

A boolean recording whether or not the "active timer" is currently ticking for this entry in MinuteDock.

  "version_id": "2cfd049ed46249a272a0a76e11f06ab566e8dd23",
String

For internal use only.

  "version_client_id": "4792be967a1065f5180858935598af87",
String

For internal use only.

  "version_number": 3,
Integer

For internal use only.

  "task_ids": [
    42,
    42,
    42
  ]
Array

An array of integers recording the Tasks that this Entry belongs to.

}

Show current entry

Open in API Explorer
GET /entries/current.json

Show the current entry for the current authenticated user and account.

Example Request

Format:
curl --request GET \
  --url 'https://minutedock.com/api/v1/entries/current.json?user_id=123' \
  --header 'accept: application/json' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001'
require 'uri'
require 'net/http'

url = URI("https://minutedock.com/api/v1/entries/current.json?user_id=123")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["content-type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request["accept"] = 'application/json'

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "GET",
  "hostname": "minutedock.com",
  "port": null,
  "path": "/api/v1/entries/current.json?user_id=123",
  "headers": {
    "content-type": "multipart/form-data; boundary=---011000010111000001101001",
    "accept": "application/json"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
import http.client

conn = http.client.HTTPSConnection("minutedock.com")

payload = ""

headers = {
    'content-type': "multipart/form-data; boundary=---011000010111000001101001",
    'accept': "application/json"
    }

conn.request("GET", "/api/v1/entries/current.json?user_id=123", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://minutedock.com/api/v1/entries/current.json?user_id=123",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "content-type: multipart/form-data; boundary=---011000010111000001101001"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://minutedock.com/api/v1/entries/current.json?user_id=123"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001")
	req.Header.Add("accept", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Query Parameters

Name Type Required Description Example
user_id Integer Optional

The ID of the User to return the current entry for. Only available to Users with the Reporting Admin permission.

123

Responses

200 Success

The current entry for either the authenticated or specified User.

Entries Default
{
  "id": 123,
Integer (Int32)

Primary Key identifier for this entry

  "duration": 3600,
Integer

Entry time duration (in seconds)

  "contact_id": 456,
Integer

The primary key identifier for the Contact selected for this Entry.

  "account_id": 123,
Integer

The primary key identifier of the Account this entry belongs to.

  "description": "Doing some amazing billable work!",
String

This is the description entered by the user for this entry.

  "updated_at": null,
String (Date-time)

A timestamp for when this Entry was last updated.

  "invoice_id": "foo",
String

The primary key identifier of the Invoice this entry belongs to. This will be "null" if the Entry is not included in an invoice.

  "logged_at": null,
String (Date-time)

A timestamp for when the entry was "logged" (i.e first created). This will be "null" if the entry is still in the user's log bar.

  "log_at": null,
String (Date-time)

This is set if the user has chosen to log this entry at a specific date/time rather than the current date/time.

  "project_id": 42,
Integer

The primary key identifier of the Project this entry belongs to.

  "user_account_id": 256,
Integer (Int32)

For internal use, best not to rely on this.

  "user_id": 256,
Integer (Int32)

The primary key identifier of the User this entry belongs to.

  "logged": false,
Boolean

A boolean recording whether the entry has been "logged" or not in MinuteDock.

  "timer_active": true,
Boolean

A boolean recording whether or not the "active timer" is currently ticking for this entry in MinuteDock.

  "version_id": "2cfd049ed46249a272a0a76e11f06ab566e8dd23",
String

For internal use only.

  "version_client_id": "4792be967a1065f5180858935598af87",
String

For internal use only.

  "version_number": 3,
Integer

For internal use only.

  "task_ids": [
    42,
    42,
    42
  ]
Array

An array of integers recording the Tasks that this Entry belongs to.

}

Search Entries

Open in API Explorer
GET /entries.json

Unless specified this endpoint will return Entries for the current user and all contacts, projects and tasks.

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

Example Request

Format:
curl --request GET \
  --url 'https://minutedock.com/api/v1/entries.json?tasks=123%2C123%2C123&users=123%2C123%2C123&contacts=123%2C123%2C123&projects=123%2C123%2C123&task_detail=foo&to=2012-01-01%2B00%253A00%253A00&from=2012-01-01%2B00%253A00%253A00&limit=50&offset=0&billable_only=true&unbillable_only=true&invoiced_only=true&uninvoiced_only=true&api_key=YOUR%20API%20KEY%20HERE' \
  --header 'accept: application/json'
require 'uri'
require 'net/http'

url = URI("https://minutedock.com/api/v1/entries.json?tasks=123%2C123%2C123&users=123%2C123%2C123&contacts=123%2C123%2C123&projects=123%2C123%2C123&task_detail=foo&to=2012-01-01%2B00%253A00%253A00&from=2012-01-01%2B00%253A00%253A00&limit=50&offset=0&billable_only=true&unbillable_only=true&invoiced_only=true&uninvoiced_only=true&api_key=YOUR%20API%20KEY%20HERE")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Get.new(url)
request["accept"] = 'application/json'

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "GET",
  "hostname": "minutedock.com",
  "port": null,
  "path": "/api/v1/entries.json?tasks=123%2C123%2C123&users=123%2C123%2C123&contacts=123%2C123%2C123&projects=123%2C123%2C123&task_detail=foo&to=2012-01-01%2B00%253A00%253A00&from=2012-01-01%2B00%253A00%253A00&limit=50&offset=0&billable_only=true&unbillable_only=true&invoiced_only=true&uninvoiced_only=true&api_key=YOUR%20API%20KEY%20HERE",
  "headers": {
    "accept": "application/json"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
import http.client

conn = http.client.HTTPSConnection("minutedock.com")

headers = { 'accept': "application/json" }

conn.request("GET", "/api/v1/entries.json?tasks=123%2C123%2C123&users=123%2C123%2C123&contacts=123%2C123%2C123&projects=123%2C123%2C123&task_detail=foo&to=2012-01-01%2B00%253A00%253A00&from=2012-01-01%2B00%253A00%253A00&limit=50&offset=0&billable_only=true&unbillable_only=true&invoiced_only=true&uninvoiced_only=true&api_key=YOUR%20API%20KEY%20HERE", headers=headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://minutedock.com/api/v1/entries.json?tasks=123%2C123%2C123&users=123%2C123%2C123&contacts=123%2C123%2C123&projects=123%2C123%2C123&task_detail=foo&to=2012-01-01%2B00%253A00%253A00&from=2012-01-01%2B00%253A00%253A00&limit=50&offset=0&billable_only=true&unbillable_only=true&invoiced_only=true&uninvoiced_only=true&api_key=YOUR%20API%20KEY%20HERE",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://minutedock.com/api/v1/entries.json?tasks=123%2C123%2C123&users=123%2C123%2C123&contacts=123%2C123%2C123&projects=123%2C123%2C123&task_detail=foo&to=2012-01-01%2B00%253A00%253A00&from=2012-01-01%2B00%253A00%253A00&limit=50&offset=0&billable_only=true&unbillable_only=true&invoiced_only=true&uninvoiced_only=true&api_key=YOUR%20API%20KEY%20HERE"

	req, _ := http.NewRequest("GET", url, nil)

	req.Header.Add("accept", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Query Parameters

Name Type Required Description Example
tasks Array Optional

Either a comma separated string of Task IDs to match or the string "all" to match all Tasks.

123,123,123
users Array Optional

Either a comma separated string of User IDs to match or the string "all" to match all Users.

123,123,123
contacts Array Optional

Either a comma separated string of Contact IDs to match or the string "all" to match all Contacts.

123,123,123
projects Array Optional

Either a comma separated string of Project IDs to match or the string "all" to match all Projects.

123,123,123
task_detail String Optional

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

foo
to String (date-time) Optional

Return only entries logged before this date

2012-01-01+00%3A00%3A00
from String (date-time) Optional

Return only entries logged after this date

2012-01-01+00%3A00%3A00
limit Integer Optional

Limit of entries to return (default/max: 50)

50
offset Integer Optional

Offset to start at (default: 0)

0
billable_only Boolean Optional

Include only billable entries in results.

true
unbillable_only Boolean Optional

Include only unbillable entries in results.

true
invoiced_only Boolean Optional

Include only entries included in an invoice.

true
uninvoiced_only Boolean Optional

Include only entries not included in an invoice.

true

Responses

200 Success

The Entries that match your search criteria.

Entries List
[
  "id": 123,
Integer (Int32)

Primary Key identifier for this entry

  "duration": 3600,
Integer

Entry time duration (in seconds)

  "contact_id": 456,
Integer

The primary key identifier for the Contact selected for this Entry.

  "account_id": 123,
Integer

The primary key identifier of the Account this entry belongs to.

  "description": "Doing some amazing billable work!",
String

This is the description entered by the user for this entry.

  "updated_at": null,
String (Date-time)

A timestamp for when this Entry was last updated.

  "invoice_id": "foo",
String

The primary key identifier of the Invoice this entry belongs to. This will be "null" if the Entry is not included in an invoice.

  "logged_at": null,
String (Date-time)

A timestamp for when the entry was "logged" (i.e first created). This will be "null" if the entry is still in the user's log bar.

  "log_at": null,
String (Date-time)

This is set if the user has chosen to log this entry at a specific date/time rather than the current date/time.

  "project_id": 42,
Integer

The primary key identifier of the Project this entry belongs to.

  "user_account_id": 256,
Integer (Int32)

For internal use, best not to rely on this.

  "user_id": 256,
Integer (Int32)

The primary key identifier of the User this entry belongs to.

  "logged": false,
Boolean

A boolean recording whether the entry has been "logged" or not in MinuteDock.

  "timer_active": true,
Boolean

A boolean recording whether or not the "active timer" is currently ticking for this entry in MinuteDock.

  "version_id": "2cfd049ed46249a272a0a76e11f06ab566e8dd23",
String

For internal use only.

  "version_client_id": "4792be967a1065f5180858935598af87",
String

For internal use only.

  "version_number": 3,
Integer

For internal use only.

  "task_ids": [
    42,
    42,
    42
  ]
Array

An array of integers recording the Tasks that this Entry belongs to.

]

Start Entry timer

Open in API Explorer
POST /entries/{id}/start

Start the timer on the specified entry.

Example Request

Format:
curl --request POST \
  --url https://minutedock.com/api/v1/entries/123/start \
  --header 'accept: application/json' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001'
require 'uri'
require 'net/http'

url = URI("https://minutedock.com/api/v1/entries/123/start")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["accept"] = 'application/json'
request["content-type"] = 'multipart/form-data; boundary=---011000010111000001101001'

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "POST",
  "hostname": "minutedock.com",
  "port": null,
  "path": "/api/v1/entries/123/start",
  "headers": {
    "accept": "application/json",
    "content-type": "multipart/form-data; boundary=---011000010111000001101001"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
import http.client

conn = http.client.HTTPSConnection("minutedock.com")

payload = ""

headers = {
    'accept': "application/json",
    'content-type': "multipart/form-data; boundary=---011000010111000001101001"
    }

conn.request("POST", "/api/v1/entries/123/start", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://minutedock.com/api/v1/entries/123/start",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "content-type: multipart/form-data; boundary=---011000010111000001101001"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://minutedock.com/api/v1/entries/123/start"

	req, _ := http.NewRequest("POST", url, nil)

	req.Header.Add("accept", "application/json")
	req.Header.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Path Parameters

Name Type Required Description Example
id Integer Required

You may also pass "current" in as the ID to start the timer on the current entry.

123

Responses

200 Success

The Entry you've just started the timer for.

Entries Default
{
  "id": 123,
Integer (Int32)

Primary Key identifier for this entry

  "duration": 3600,
Integer

Entry time duration (in seconds)

  "contact_id": 456,
Integer

The primary key identifier for the Contact selected for this Entry.

  "account_id": 123,
Integer

The primary key identifier of the Account this entry belongs to.

  "description": "Doing some amazing billable work!",
String

This is the description entered by the user for this entry.

  "updated_at": null,
String (Date-time)

A timestamp for when this Entry was last updated.

  "invoice_id": "foo",
String

The primary key identifier of the Invoice this entry belongs to. This will be "null" if the Entry is not included in an invoice.

  "logged_at": null,
String (Date-time)

A timestamp for when the entry was "logged" (i.e first created). This will be "null" if the entry is still in the user's log bar.

  "log_at": null,
String (Date-time)

This is set if the user has chosen to log this entry at a specific date/time rather than the current date/time.

  "project_id": 42,
Integer

The primary key identifier of the Project this entry belongs to.

  "user_account_id": 256,
Integer (Int32)

For internal use, best not to rely on this.

  "user_id": 256,
Integer (Int32)

The primary key identifier of the User this entry belongs to.

  "logged": false,
Boolean

A boolean recording whether the entry has been "logged" or not in MinuteDock.

  "timer_active": true,
Boolean

A boolean recording whether or not the "active timer" is currently ticking for this entry in MinuteDock.

  "version_id": "2cfd049ed46249a272a0a76e11f06ab566e8dd23",
String

For internal use only.

  "version_client_id": "4792be967a1065f5180858935598af87",
String

For internal use only.

  "version_number": 3,
Integer

For internal use only.

  "task_ids": [
    42,
    42,
    42
  ]
Array

An array of integers recording the Tasks that this Entry belongs to.

}

Pause Entry timer

Open in API Explorer
POST /entries/{id}/pause.json

Pause the timer for the specified entry.

Example Request

Format:
curl --request POST \
  --url 'https://minutedock.com/api/v1/entries/123/pause.json?api_key=YOUR%20API%20KEY%20HERE' \
  --header 'accept: application/json' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001'
require 'uri'
require 'net/http'

url = URI("https://minutedock.com/api/v1/entries/123/pause.json?api_key=YOUR%20API%20KEY%20HERE")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["accept"] = 'application/json'
request["content-type"] = 'multipart/form-data; boundary=---011000010111000001101001'

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "POST",
  "hostname": "minutedock.com",
  "port": null,
  "path": "/api/v1/entries/123/pause.json?api_key=YOUR%20API%20KEY%20HERE",
  "headers": {
    "accept": "application/json",
    "content-type": "multipart/form-data; boundary=---011000010111000001101001"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
import http.client

conn = http.client.HTTPSConnection("minutedock.com")

payload = ""

headers = {
    'accept': "application/json",
    'content-type': "multipart/form-data; boundary=---011000010111000001101001"
    }

conn.request("POST", "/api/v1/entries/123/pause.json?api_key=YOUR%20API%20KEY%20HERE", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://minutedock.com/api/v1/entries/123/pause.json?api_key=YOUR%20API%20KEY%20HERE",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "content-type: multipart/form-data; boundary=---011000010111000001101001"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://minutedock.com/api/v1/entries/123/pause.json?api_key=YOUR%20API%20KEY%20HERE"

	req, _ := http.NewRequest("POST", url, nil)

	req.Header.Add("accept", "application/json")
	req.Header.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Path Parameters

Name Type Required Description Example
id Integer Required

You may also pass "current" in as the ID to pause the timer on the current entry.

123

Responses

200 Success

The Entry you've just paused the timer for.

Entries Default
{
  "id": 123,
Integer (Int32)

Primary Key identifier for this entry

  "duration": 3600,
Integer

Entry time duration (in seconds)

  "contact_id": 456,
Integer

The primary key identifier for the Contact selected for this Entry.

  "account_id": 123,
Integer

The primary key identifier of the Account this entry belongs to.

  "description": "Doing some amazing billable work!",
String

This is the description entered by the user for this entry.

  "updated_at": null,
String (Date-time)

A timestamp for when this Entry was last updated.

  "invoice_id": "foo",
String

The primary key identifier of the Invoice this entry belongs to. This will be "null" if the Entry is not included in an invoice.

  "logged_at": null,
String (Date-time)

A timestamp for when the entry was "logged" (i.e first created). This will be "null" if the entry is still in the user's log bar.

  "log_at": null,
String (Date-time)

This is set if the user has chosen to log this entry at a specific date/time rather than the current date/time.

  "project_id": 42,
Integer

The primary key identifier of the Project this entry belongs to.

  "user_account_id": 256,
Integer (Int32)

For internal use, best not to rely on this.

  "user_id": 256,
Integer (Int32)

The primary key identifier of the User this entry belongs to.

  "logged": false,
Boolean

A boolean recording whether the entry has been "logged" or not in MinuteDock.

  "timer_active": true,
Boolean

A boolean recording whether or not the "active timer" is currently ticking for this entry in MinuteDock.

  "version_id": "2cfd049ed46249a272a0a76e11f06ab566e8dd23",
String

For internal use only.

  "version_client_id": "4792be967a1065f5180858935598af87",
String

For internal use only.

  "version_number": 3,
Integer

For internal use only.

  "task_ids": [
    42,
    42,
    42
  ]
Array

An array of integers recording the Tasks that this Entry belongs to.

}

Create Entry

Open in API Explorer
POST /entries.json

Create a new entry.

Note that to set the user_id for a new entry, the currently authenticated user will need the "entry_admin" permission.

Example Request

Format:
curl --request POST \
  --url https://minutedock.com/api/v1/entries.json \
  --header 'accept: application/json' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \
  --form 'entry[task_ids]=entry[task_ids]=1&entry[task_ids]=1' \
  --form 'entry[duration]=2000' \
  --form 'entry[contact_id]=123' \
  --form user_id=123 \
  --form 'entry[description]=Did some awesome work' \
  --form 'entry[logged_at]=2012-01-01 00:00:01'
require 'uri'
require 'net/http'

url = URI("https://minutedock.com/api/v1/entries.json")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["accept"] = 'application/json'
request["content-type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[task_ids]\"\r\n\r\nentry[task_ids]=1&entry[task_ids]=1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[duration]\"\r\n\r\n2000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[contact_id]\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[description]\"\r\n\r\nDid some awesome work\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[logged_at]\"\r\n\r\n2012-01-01 00:00:01\r\n-----011000010111000001101001--"

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "POST",
  "hostname": "minutedock.com",
  "port": null,
  "path": "/api/v1/entries.json",
  "headers": {
    "accept": "application/json",
    "content-type": "multipart/form-data; boundary=---011000010111000001101001"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[task_ids]\"\r\n\r\nentry[task_ids]=1&entry[task_ids]=1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[duration]\"\r\n\r\n2000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[contact_id]\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[description]\"\r\n\r\nDid some awesome work\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[logged_at]\"\r\n\r\n2012-01-01 00:00:01\r\n-----011000010111000001101001--");
req.end();
import http.client

conn = http.client.HTTPSConnection("minutedock.com")

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[task_ids]\"\r\n\r\nentry[task_ids]=1&entry[task_ids]=1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[duration]\"\r\n\r\n2000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[contact_id]\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[description]\"\r\n\r\nDid some awesome work\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[logged_at]\"\r\n\r\n2012-01-01 00:00:01\r\n-----011000010111000001101001--"

headers = {
    'accept': "application/json",
    'content-type': "multipart/form-data; boundary=---011000010111000001101001"
    }

conn.request("POST", "/api/v1/entries.json", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://minutedock.com/api/v1/entries.json",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[task_ids]\"\r\n\r\nentry[task_ids]=1&entry[task_ids]=1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[duration]\"\r\n\r\n2000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[contact_id]\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[description]\"\r\n\r\nDid some awesome work\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[logged_at]\"\r\n\r\n2012-01-01 00:00:01\r\n-----011000010111000001101001--",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "content-type: multipart/form-data; boundary=---011000010111000001101001"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://minutedock.com/api/v1/entries.json"

	payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[task_ids]\"\r\n\r\nentry[task_ids]=1&entry[task_ids]=1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[duration]\"\r\n\r\n2000\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[contact_id]\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"user_id\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[description]\"\r\n\r\nDid some awesome work\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[logged_at]\"\r\n\r\n2012-01-01 00:00:01\r\n-----011000010111000001101001--")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("accept", "application/json")
	req.Header.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Form Data Parameters

Name Type Required Description Example
entry[task_ids] Array Optional

An array of Task IDs for the new Entry.

entry[task_ids]=1&entry[task_ids]=1
entry[duration] Integer Optional

New entry duration (in seconds)

2000
entry[description] String Optional

Description of the new entry

Did some awesome work
entry[contact_id] Integer Optional

Contact ID for new entry

123
user_id Integer Optional

The primary key of the User this entry belongs to.

Note: You can only specify this if the currently authenticated user has the "Entry Admin" permission.

123
entry[logged_at] String (date-time) Optional

When this Entry should be logged as of.

2012-01-01 00:00:01

Name Type Required Description Example
entry[project_id] Integer Optional

Project ID for the new entry

123

Responses

200 Success

The new Entry you've just created

Entries Default
{
  "id": 123,
Integer (Int32)

Primary Key identifier for this entry

  "duration": 3600,
Integer

Entry time duration (in seconds)

  "contact_id": 456,
Integer

The primary key identifier for the Contact selected for this Entry.

  "account_id": 123,
Integer

The primary key identifier of the Account this entry belongs to.

  "description": "Doing some amazing billable work!",
String

This is the description entered by the user for this entry.

  "updated_at": null,
String (Date-time)

A timestamp for when this Entry was last updated.

  "invoice_id": "foo",
String

The primary key identifier of the Invoice this entry belongs to. This will be "null" if the Entry is not included in an invoice.

  "logged_at": null,
String (Date-time)

A timestamp for when the entry was "logged" (i.e first created). This will be "null" if the entry is still in the user's log bar.

  "log_at": null,
String (Date-time)

This is set if the user has chosen to log this entry at a specific date/time rather than the current date/time.

  "project_id": 42,
Integer

The primary key identifier of the Project this entry belongs to.

  "user_account_id": 256,
Integer (Int32)

For internal use, best not to rely on this.

  "user_id": 256,
Integer (Int32)

The primary key identifier of the User this entry belongs to.

  "logged": false,
Boolean

A boolean recording whether the entry has been "logged" or not in MinuteDock.

  "timer_active": true,
Boolean

A boolean recording whether or not the "active timer" is currently ticking for this entry in MinuteDock.

  "version_id": "2cfd049ed46249a272a0a76e11f06ab566e8dd23",
String

For internal use only.

  "version_client_id": "4792be967a1065f5180858935598af87",
String

For internal use only.

  "version_number": 3,
Integer

For internal use only.

  "task_ids": [
    42,
    42,
    42
  ]
Array

An array of integers recording the Tasks that this Entry belongs to.

}

Log Entry

Open in API Explorer
POST /entries/{id}/log.json

Log the specified entry.

Example Request

Format:
curl --request POST \
  --url https://minutedock.com/api/v1/entries/123/log.json \
  --header 'accept: application/json' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001'
require 'uri'
require 'net/http'

url = URI("https://minutedock.com/api/v1/entries/123/log.json")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Post.new(url)
request["accept"] = 'application/json'
request["content-type"] = 'multipart/form-data; boundary=---011000010111000001101001'

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "POST",
  "hostname": "minutedock.com",
  "port": null,
  "path": "/api/v1/entries/123/log.json",
  "headers": {
    "accept": "application/json",
    "content-type": "multipart/form-data; boundary=---011000010111000001101001"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.end();
import http.client

conn = http.client.HTTPSConnection("minutedock.com")

payload = ""

headers = {
    'accept': "application/json",
    'content-type': "multipart/form-data; boundary=---011000010111000001101001"
    }

conn.request("POST", "/api/v1/entries/123/log.json", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://minutedock.com/api/v1/entries/123/log.json",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "content-type: multipart/form-data; boundary=---011000010111000001101001"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://minutedock.com/api/v1/entries/123/log.json"

	req, _ := http.NewRequest("POST", url, nil)

	req.Header.Add("accept", "application/json")
	req.Header.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Path Parameters

Name Type Required Description Example
id Integer Required

You can also pass "current" here to log the current entry.

123

Responses

200 Success

The Entry you've just logged.

Entries Default
{
  "id": 123,
Integer (Int32)

Primary Key identifier for this entry

  "duration": 3600,
Integer

Entry time duration (in seconds)

  "contact_id": 456,
Integer

The primary key identifier for the Contact selected for this Entry.

  "account_id": 123,
Integer

The primary key identifier of the Account this entry belongs to.

  "description": "Doing some amazing billable work!",
String

This is the description entered by the user for this entry.

  "updated_at": null,
String (Date-time)

A timestamp for when this Entry was last updated.

  "invoice_id": "foo",
String

The primary key identifier of the Invoice this entry belongs to. This will be "null" if the Entry is not included in an invoice.

  "logged_at": null,
String (Date-time)

A timestamp for when the entry was "logged" (i.e first created). This will be "null" if the entry is still in the user's log bar.

  "log_at": null,
String (Date-time)

This is set if the user has chosen to log this entry at a specific date/time rather than the current date/time.

  "project_id": 42,
Integer

The primary key identifier of the Project this entry belongs to.

  "user_account_id": 256,
Integer (Int32)

For internal use, best not to rely on this.

  "user_id": 256,
Integer (Int32)

The primary key identifier of the User this entry belongs to.

  "logged": false,
Boolean

A boolean recording whether the entry has been "logged" or not in MinuteDock.

  "timer_active": true,
Boolean

A boolean recording whether or not the "active timer" is currently ticking for this entry in MinuteDock.

  "version_id": "2cfd049ed46249a272a0a76e11f06ab566e8dd23",
String

For internal use only.

  "version_client_id": "4792be967a1065f5180858935598af87",
String

For internal use only.

  "version_number": 3,
Integer

For internal use only.

  "task_ids": [
    42,
    42,
    42
  ]
Array

An array of integers recording the Tasks that this Entry belongs to.

}

Update Entry

Open in API Explorer
PUT /entries/{id}.json

Update entry details.

Example Request

Format:
curl --request PUT \
  --url 'https://minutedock.com/api/v1/entries/123.json?api_key=YOUR%20API%20KEY%20HERE' \
  --header 'accept: application/json' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \
  --form 'entry[description]=Something new I did' \
  --form 'entry[contact_id]=567' \
  --form 'entry[task_ids]=entry[task_ids]=123&entry[task_ids]=123' \
  --form 'entry[duration]=3600' \
  --form 'entry[project_id]=891'
require 'uri'
require 'net/http'

url = URI("https://minutedock.com/api/v1/entries/123.json?api_key=YOUR%20API%20KEY%20HERE")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

request = Net::HTTP::Put.new(url)
request["accept"] = 'application/json'
request["content-type"] = 'multipart/form-data; boundary=---011000010111000001101001'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[description]\"\r\n\r\nSomething new I did\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[contact_id]\"\r\n\r\n567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[task_ids]\"\r\n\r\nentry[task_ids]=123&entry[task_ids]=123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[duration]\"\r\n\r\n3600\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[project_id]\"\r\n\r\n891\r\n-----011000010111000001101001--"

response = http.request(request)
puts response.read_body
var http = require("https");

var options = {
  "method": "PUT",
  "hostname": "minutedock.com",
  "port": null,
  "path": "/api/v1/entries/123.json?api_key=YOUR%20API%20KEY%20HERE",
  "headers": {
    "accept": "application/json",
    "content-type": "multipart/form-data; boundary=---011000010111000001101001"
  }
};

var req = http.request(options, function (res) {
  var chunks = [];

  res.on("data", function (chunk) {
    chunks.push(chunk);
  });

  res.on("end", function () {
    var body = Buffer.concat(chunks);
    console.log(body.toString());
  });
});

req.write("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[description]\"\r\n\r\nSomething new I did\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[contact_id]\"\r\n\r\n567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[task_ids]\"\r\n\r\nentry[task_ids]=123&entry[task_ids]=123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[duration]\"\r\n\r\n3600\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[project_id]\"\r\n\r\n891\r\n-----011000010111000001101001--");
req.end();
import http.client

conn = http.client.HTTPSConnection("minutedock.com")

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[description]\"\r\n\r\nSomething new I did\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[contact_id]\"\r\n\r\n567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[task_ids]\"\r\n\r\nentry[task_ids]=123&entry[task_ids]=123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[duration]\"\r\n\r\n3600\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[project_id]\"\r\n\r\n891\r\n-----011000010111000001101001--"

headers = {
    'accept': "application/json",
    'content-type': "multipart/form-data; boundary=---011000010111000001101001"
    }

conn.request("PUT", "/api/v1/entries/123.json?api_key=YOUR%20API%20KEY%20HERE", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))
<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://minutedock.com/api/v1/entries/123.json?api_key=YOUR%20API%20KEY%20HERE",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[description]\"\r\n\r\nSomething new I did\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[contact_id]\"\r\n\r\n567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[task_ids]\"\r\n\r\nentry[task_ids]=123&entry[task_ids]=123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[duration]\"\r\n\r\n3600\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[project_id]\"\r\n\r\n891\r\n-----011000010111000001101001--",
  CURLOPT_HTTPHEADER => array(
    "accept: application/json",
    "content-type: multipart/form-data; boundary=---011000010111000001101001"
  ),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io/ioutil"
)

func main() {

	url := "https://minutedock.com/api/v1/entries/123.json?api_key=YOUR%20API%20KEY%20HERE"

	payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[description]\"\r\n\r\nSomething new I did\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[contact_id]\"\r\n\r\n567\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[task_ids]\"\r\n\r\nentry[task_ids]=123&entry[task_ids]=123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[duration]\"\r\n\r\n3600\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"entry[project_id]\"\r\n\r\n891\r\n-----011000010111000001101001--")

	req, _ := http.NewRequest("PUT", url, payload)

	req.Header.Add("accept", "application/json")
	req.Header.Add("content-type", "multipart/form-data; boundary=---011000010111000001101001")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := ioutil.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}

Path Parameters

Name Type Required Description Example
id Integer Required

Primary Key of the entry to update. Use "current" as the ID for the current entry in the Dock.

123

Form Data Parameters

Name Type Required Description Example
entry[contact_id] Integer Optional

The new Contact for the entry

567
entry[project_id] Integer Optional

The new Project for this entry

891
entry[duration] Integer Optional

New duration for the entry (in seconds)

3600
entry[description] String Optional

New description for the entry

Something new I did
entry[task_ids] Array Optional

Pass this parameter multiple times to specify a list of Task IDs for this entry.

entry[task_ids]=123&entry[task_ids]=123

Responses

200 Success

The updated Entry.

Entries Default
{
  "id": 123,
Integer (Int32)

Primary Key identifier for this entry

  "duration": 3600,
Integer

Entry time duration (in seconds)

  "contact_id": 456,
Integer

The primary key identifier for the Contact selected for this Entry.

  "account_id": 123,
Integer

The primary key identifier of the Account this entry belongs to.

  "description": "Doing some amazing billable work!",
String

This is the description entered by the user for this entry.

  "updated_at": null,
String (Date-time)

A timestamp for when this Entry was last updated.

  "invoice_id": "foo",
String

The primary key identifier of the Invoice this entry belongs to. This will be "null" if the Entry is not included in an invoice.

  "logged_at": null,
String (Date-time)

A timestamp for when the entry was "logged" (i.e first created). This will be "null" if the entry is still in the user's log bar.

  "log_at": null,
String (Date-time)

This is set if the user has chosen to log this entry at a specific date/time rather than the current date/time.

  "project_id": 42,
Integer

The primary key identifier of the Project this entry belongs to.

  "user_account_id": 256,
Integer (Int32)

For internal use, best not to rely on this.

  "user_id": 256,
Integer (Int32)

The primary key identifier of the User this entry belongs to.

  "logged": false,
Boolean

A boolean recording whether the entry has been "logged" or not in MinuteDock.

  "timer_active": true,
Boolean

A boolean recording whether or not the "active timer" is currently ticking for this entry in MinuteDock.

  "version_id": "2cfd049ed46249a272a0a76e11f06ab566e8dd23",
String

For internal use only.

  "version_client_id": "4792be967a1065f5180858935598af87",
String

For internal use only.

  "version_number": 3,
Integer

For internal use only.

  "task_ids": [
    42,
    42,
    42
  ]
Array

An array of integers recording the Tasks that this Entry belongs to.

}