Complete milestone
curl --request POST \
--url https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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"
)
func main() {
url := "https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "8ef9a712-cdae-4110-b1ea-9ba95abbee6e"
}{
"code": "invalid_request_body",
"message": "The request body provided is not valid",
"params": {
"field": "Value is invalid."
}
}{
"code": "resource_not_found",
"message": "Requested resource could not be found."
}{
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}Milestones
Complete milestone
Mark a planned or rejected milestone complete. Generates a contractor invoice and returns its invoiceId, and moves the milestone to Submitted. As that invoice is approved, rejected, or paid, the milestone status updates to match.
POST
/
v1
/
persons
/
{personId}
/
milestones
/
{milestoneId}
/
complete
Complete milestone
curl --request POST \
--url https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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"
)
func main() {
url := "https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cadanapay.com/v1/persons/{personId}/milestones/{milestoneId}/complete")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"id": "8ef9a712-cdae-4110-b1ea-9ba95abbee6e"
}{
"code": "invalid_request_body",
"message": "The request body provided is not valid",
"params": {
"field": "Value is invalid."
}
}{
"code": "resource_not_found",
"message": "Requested resource could not be found."
}{
"code": "internal_error",
"message": "An unexpected error occurred. Please try again later."
}Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Headers
Required when using a Platform API token. The tenant key identifying which business to operate on.
Path Parameters
The unique identifier for the person
The unique identifier for the milestone
Response
milestone created (or completed) response
Example:
"8ef9a712-cdae-4110-b1ea-9ba95abbee6e"
⌘I