MinuteDock

Projects

Projects are a higher level organisation method for MinuteDock Entries. Each Entry can only belong to a single Project, and Projects belong to specific Contacts.

Projects Overview

{
  "id": 123,
Integer
  "contact_id": 123,
Integer

The primary key id of the Contact for this Project.

  "name": "New Website Deisgn",
String

A name for this project

  "short_code": "newsite",
String

A short code for referencing this project ("#-code")

  "hidden": false,
Boolean

Whether or not this Project has been hidden in MinuteDock.

  "description": "We're designing an amazing new website, it's gonna rock!",
String

A longer description of this project

  "default_rate_dollars": 42,
Integer

The default rate for time tracked on this Project.

  "active": true,
Boolean (Literals)

Whether or not this Project has been hidden in MinuteDock.

  "budget_type": "hours",
String

The type of budget, if any. One of: hours, billable.

  "budget_frequency": "monthly",
String

The frequency of the budget, if any. Either "total" - a budget tracking all time for the project, or "monthly", a budget for time across the current month, or "weekly - a budget of time across the current week.

  "budget_target": 12.5,
Number

The target for the budget. If an "hours" budget_type, then this is the number of hours targeted. If a "billable" budget type, then this is the value of billable time targeted.

  "budget_progress": 10.25
Number

The current value of the budget's progress. Blank if there is no budget.

}

List all Projects

Open in API Explorer
GET /projects.json

List all available projects

Example Request

Format:
curl --request GET \
  --url 'https://minutedock.com/api/v1/projects.json?active=true&pinned=true&api_key=YOUR%20API%20KEY%20HERE' \
  --header 'accept: application/json'
require 'uri'
require 'net/http'

url = URI("https://minutedock.com/api/v1/projects.json?active=true&pinned=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/projects.json?active=true&pinned=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/projects.json?active=true&pinned=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/projects.json?active=true&pinned=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/projects.json?active=true&pinned=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
active Boolean Optional

Retrieve only Active projects.

true
pinned Boolean Optional

Retrieve only Pinned projects.

true

Responses

200 Success

All available projects for the current authenticated User.

Projects List
[
  "id": 123,
Integer
  "contact_id": 123,
Integer

The primary key id of the Contact for this Project.

  "name": "New Website Deisgn",
String

A name for this project

  "short_code": "newsite",
String

A short code for referencing this project ("#-code")

  "hidden": false,
Boolean

Whether or not this Project has been hidden in MinuteDock.

  "description": "We're designing an amazing new website, it's gonna rock!",
String

A longer description of this project

  "default_rate_dollars": 42,
Integer

The default rate for time tracked on this Project.

  "active": true,
Boolean (Literals)

Whether or not this Project has been hidden in MinuteDock.

  "budget_type": "hours",
String

The type of budget, if any. One of: hours, billable.

  "budget_frequency": "monthly",
String

The frequency of the budget, if any. Either "total" - a budget tracking all time for the project, or "monthly", a budget for time across the current month, or "weekly - a budget of time across the current week.

  "budget_target": 12.5,
Number

The target for the budget. If an "hours" budget_type, then this is the number of hours targeted. If a "billable" budget type, then this is the value of billable time targeted.

  "budget_progress": 10.25
Number

The current value of the budget's progress. Blank if there is no budget.

]

Create a New Project

Open in API Explorer
POST /projects.json

Create a new project

Example Request

Format:
curl --request POST \
  --url 'https://minutedock.com/api/v1/projects.json?api_key=YOUR%20API%20KEY%20HERE' \
  --header 'accept: application/json' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \
  --form 'project[default_rate_dollars]=100' \
  --form 'project[name]=foo' \
  --form 'project[short_code]=#apollo' \
  --form 'project[description]=We'\''re going to the moon!' \
  --form 'project[contact_id]=123' \
  --form 'project[budget_type]=hours' \
  --form 'project[budget_frequency]=monthly' \
  --form 'project[budget_target]=12.5'
require 'uri'
require 'net/http'

url = URI("https://minutedock.com/api/v1/projects.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'
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[default_rate_dollars]\"\r\n\r\n100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[name]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[short_code]\"\r\n\r\n#apollo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[description]\"\r\n\r\nWe're going to the moon!\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[contact_id]\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_type]\"\r\n\r\nhours\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_frequency]\"\r\n\r\nmonthly\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_target]\"\r\n\r\n12.5\r\n-----011000010111000001101001--\r\n"

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

var options = {
  "method": "POST",
  "hostname": "minutedock.com",
  "port": null,
  "path": "/api/v1/projects.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=\"project[default_rate_dollars]\"\r\n\r\n100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[name]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[short_code]\"\r\n\r\n#apollo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[description]\"\r\n\r\nWe're going to the moon!\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[contact_id]\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_type]\"\r\n\r\nhours\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_frequency]\"\r\n\r\nmonthly\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_target]\"\r\n\r\n12.5\r\n-----011000010111000001101001--\r\n");
req.end();
import http.client

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

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[default_rate_dollars]\"\r\n\r\n100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[name]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[short_code]\"\r\n\r\n#apollo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[description]\"\r\n\r\nWe're going to the moon!\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[contact_id]\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_type]\"\r\n\r\nhours\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_frequency]\"\r\n\r\nmonthly\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_target]\"\r\n\r\n12.5\r\n-----011000010111000001101001--\r\n"

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

conn.request("POST", "/api/v1/projects.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/projects.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 => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[default_rate_dollars]\"\r\n\r\n100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[name]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[short_code]\"\r\n\r\n#apollo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[description]\"\r\n\r\nWe're going to the moon!\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[contact_id]\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_type]\"\r\n\r\nhours\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_frequency]\"\r\n\r\nmonthly\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_target]\"\r\n\r\n12.5\r\n-----011000010111000001101001--\r\n",
  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/projects.json?api_key=YOUR%20API%20KEY%20HERE"

	payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[default_rate_dollars]\"\r\n\r\n100\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[name]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[short_code]\"\r\n\r\n#apollo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[description]\"\r\n\r\nWe're going to the moon!\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[contact_id]\"\r\n\r\n123\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_type]\"\r\n\r\nhours\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_frequency]\"\r\n\r\nmonthly\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_target]\"\r\n\r\n12.5\r\n-----011000010111000001101001--\r\n")

	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
project[default_rate_dollars] Integer Optional

Default hourly rate for your new project (in dollars)

100
project[name] String Optional

Name for your project

foo
project[short_code] String Optional

Short reference name for your project

#apollo
project[description] String Optional

A longer project description

We're going to the moon!
project[contact_id] Integer Required

Contact for this project.

Note You must provide a Contact ID for a Project.

123
project[budget_type] String Optional

The type of budget, if any. One of: "hours" or "billable". Leave blank for no budget.

hours
project[budget_frequency] String Optional

The frequency of the budget, if any. Either "total" - a budget tracking all time for the project, or "monthly", a budget for time across the current month, or "weekly - a budget of time across the current week. Leave blank for no budget.

monthly
project[budget_target] Number Optional

The target for the budget. If an "hours" budget_type, then this is the number of hours targeted. If a "billable" budget type, then this is the value of billable time targeted.

12.5

Responses

200 Success

The Project you've just created.

Projects Default
{
  "id": 123,
Integer
  "contact_id": 123,
Integer

The primary key id of the Contact for this Project.

  "name": "New Website Deisgn",
String

A name for this project

  "short_code": "newsite",
String

A short code for referencing this project ("#-code")

  "hidden": false,
Boolean

Whether or not this Project has been hidden in MinuteDock.

  "description": "We're designing an amazing new website, it's gonna rock!",
String

A longer description of this project

  "default_rate_dollars": 42,
Integer

The default rate for time tracked on this Project.

  "active": true,
Boolean (Literals)

Whether or not this Project has been hidden in MinuteDock.

  "budget_type": "hours",
String

The type of budget, if any. One of: hours, billable.

  "budget_frequency": "monthly",
String

The frequency of the budget, if any. Either "total" - a budget tracking all time for the project, or "monthly", a budget for time across the current month, or "weekly - a budget of time across the current week.

  "budget_target": 12.5,
Number

The target for the budget. If an "hours" budget_type, then this is the number of hours targeted. If a "billable" budget type, then this is the value of billable time targeted.

  "budget_progress": 10.25
Number

The current value of the budget's progress. Blank if there is no budget.

}

Update a Project

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

This will update a Project record.

Example Request

Format:
curl --request PUT \
  --url 'https://minutedock.com/api/v1/projects/%7Bid%7D.json?api_key=YOUR%20API%20KEY%20HERE' \
  --header 'accept: application/json' \
  --header 'content-type: multipart/form-data; boundary=---011000010111000001101001' \
  --form 'project[name]=foo' \
  --form 'project[short_code]=foo' \
  --form 'project[description]=foo' \
  --form 'project[default_rate_dollars]=42' \
  --form 'project[contact_id]=42' \
  --form 'project[budget_type]=hours' \
  --form 'project[budget_frequency]=monthly' \
  --form 'project[budget_target]=12.5'
require 'uri'
require 'net/http'

url = URI("https://minutedock.com/api/v1/projects/%7Bid%7D.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=\"project[name]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[short_code]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[description]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[default_rate_dollars]\"\r\n\r\n42\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[contact_id]\"\r\n\r\n42\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_type]\"\r\n\r\nhours\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_frequency]\"\r\n\r\nmonthly\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_target]\"\r\n\r\n12.5\r\n-----011000010111000001101001--\r\n"

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

var options = {
  "method": "PUT",
  "hostname": "minutedock.com",
  "port": null,
  "path": "/api/v1/projects/%7Bid%7D.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=\"project[name]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[short_code]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[description]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[default_rate_dollars]\"\r\n\r\n42\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[contact_id]\"\r\n\r\n42\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_type]\"\r\n\r\nhours\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_frequency]\"\r\n\r\nmonthly\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_target]\"\r\n\r\n12.5\r\n-----011000010111000001101001--\r\n");
req.end();
import http.client

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

payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[name]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[short_code]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[description]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[default_rate_dollars]\"\r\n\r\n42\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[contact_id]\"\r\n\r\n42\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_type]\"\r\n\r\nhours\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_frequency]\"\r\n\r\nmonthly\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_target]\"\r\n\r\n12.5\r\n-----011000010111000001101001--\r\n"

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

conn.request("PUT", "/api/v1/projects/%7Bid%7D.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/projects/%7Bid%7D.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=\"project[name]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[short_code]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[description]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[default_rate_dollars]\"\r\n\r\n42\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[contact_id]\"\r\n\r\n42\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_type]\"\r\n\r\nhours\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_frequency]\"\r\n\r\nmonthly\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_target]\"\r\n\r\n12.5\r\n-----011000010111000001101001--\r\n",
  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/projects/%7Bid%7D.json?api_key=YOUR%20API%20KEY%20HERE"

	payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[name]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[short_code]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[description]\"\r\n\r\nfoo\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[default_rate_dollars]\"\r\n\r\n42\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[contact_id]\"\r\n\r\n42\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_type]\"\r\n\r\nhours\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_frequency]\"\r\n\r\nmonthly\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"project[budget_target]\"\r\n\r\n12.5\r\n-----011000010111000001101001--\r\n")

	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))

}

Form Data Parameters

Name Type Required Description Example
project[name] String Optional

The new name for this project.

foo
project[short_code] String Optional

The new short reference code for this project

foo
project[description] String Optional

The new description for this project.

foo
project[default_rate_dollars] Integer Optional

A new default rate to use for this project.

42
project[contact_id] Integer Optional

The new Contact to associate this Project with.

42
project[budget_type] String Optional

The type of budget, if any. One of: "hours" or "billable". Leave blank for no budget.

hours
project[budget_frequency] String Optional

The frequency of the budget, if any. Either "total" - a budget tracking all time for the project, or "monthly", a budget for time across the current month, or "weekly - a budget of time across the current week. Leave blank for no budget.

monthly
project[budget_target] Number Optional

The target for the budget. If an "hours" budget_type, then this is the number of hours targeted. If a "billable" budget type, then this is the value of billable time targeted.

12.5

Responses

200 Success

The project you've just updated.

Projects Default
{
  "id": 123,
Integer
  "contact_id": 123,
Integer

The primary key id of the Contact for this Project.

  "name": "New Website Deisgn",
String

A name for this project

  "short_code": "newsite",
String

A short code for referencing this project ("#-code")

  "hidden": false,
Boolean

Whether or not this Project has been hidden in MinuteDock.

  "description": "We're designing an amazing new website, it's gonna rock!",
String

A longer description of this project

  "default_rate_dollars": 42,
Integer

The default rate for time tracked on this Project.

  "active": true,
Boolean (Literals)

Whether or not this Project has been hidden in MinuteDock.

  "budget_type": "hours",
String

The type of budget, if any. One of: hours, billable.

  "budget_frequency": "monthly",
String

The frequency of the budget, if any. Either "total" - a budget tracking all time for the project, or "monthly", a budget for time across the current month, or "weekly - a budget of time across the current week.

  "budget_target": 12.5,
Number

The target for the budget. If an "hours" budget_type, then this is the number of hours targeted. If a "billable" budget type, then this is the value of billable time targeted.

  "budget_progress": 10.25
Number

The current value of the budget's progress. Blank if there is no budget.

}