curl --request GET \
--url https://anzapi.onboardme.app/api/v1/proposals/list \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://anzapi.onboardme.app/api/v1/proposals/list"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://anzapi.onboardme.app/api/v1/proposals/list', 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://anzapi.onboardme.app/api/v1/proposals/list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$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://anzapi.onboardme.app/api/v1/proposals/list"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://anzapi.onboardme.app/api/v1/proposals/list")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://anzapi.onboardme.app/api/v1/proposals/list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body[
{
"engagementKey": "8f9e2b1c-3d4a-5e6f-7890-abcdef012345",
"engagementID": 12450,
"name": "FY25 — Corporate tax proposal",
"statusID": 3,
"statusName": "Sent",
"sentOn": "2025-04-08T11:30:00Z",
"endDate": "2025-06-30T00:00:00Z",
"expiryDate": "2025-05-15T00:00:00Z",
"updatedOn": "2025-04-10T09:15:00Z",
"entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
"clientName": "Riverstone Holdings Ltd"
}
]{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}List proposals
Returns proposal rows for your practice. Use entityKey to look up all proposals for one client (then GET /api/v1/proposals/{key}/pricing for services and billings, or POST /api/v1/proposals/{key}/duplicate to replicate).
Query tips
statusID: filter by proposal status ID.entityKey: limit to one client (same key as GET/api/v1/entities/{key}).searchFilter: free-text search across common proposal fields.pageNumber: 1-based page (omit to use the server default window).userID: filter by user (see GET/api/v1/users/listfor IDs).lastUpdated: only rows changed on or after this UTC instant (must not be in the future).excludeCompleted: when true, completed proposals are omitted.
400: Invalid pageNumber or lastUpdated.
429: Rate limit exceeded.
curl --request GET \
--url https://anzapi.onboardme.app/api/v1/proposals/list \
--header 'Authorization: Basic <encoded-value>'import requests
url = "https://anzapi.onboardme.app/api/v1/proposals/list"
headers = {"Authorization": "Basic <encoded-value>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Basic <encoded-value>'}};
fetch('https://anzapi.onboardme.app/api/v1/proposals/list', 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://anzapi.onboardme.app/api/v1/proposals/list",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>"
],
]);
$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://anzapi.onboardme.app/api/v1/proposals/list"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Basic <encoded-value>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://anzapi.onboardme.app/api/v1/proposals/list")
.header("Authorization", "Basic <encoded-value>")
.asString();require 'uri'
require 'net/http'
url = URI("https://anzapi.onboardme.app/api/v1/proposals/list")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Basic <encoded-value>'
response = http.request(request)
puts response.read_body[
{
"engagementKey": "8f9e2b1c-3d4a-5e6f-7890-abcdef012345",
"engagementID": 12450,
"name": "FY25 — Corporate tax proposal",
"statusID": 3,
"statusName": "Sent",
"sentOn": "2025-04-08T11:30:00Z",
"endDate": "2025-06-30T00:00:00Z",
"expiryDate": "2025-05-15T00:00:00Z",
"updatedOn": "2025-04-10T09:15:00Z",
"entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
"clientName": "Riverstone Holdings Ltd"
}
]{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}Authorizations
Swagger / Postman only: Client ID as username, Client secret as password. In Postman, set this once on the collection (Authorization → Basic Auth) so all requests inherit. For production server-to-server code, prefer X-OM-Auth-ID and X-OM-Auth-Key headers.
Query Parameters
Filter by proposal status ID.
If set, only proposals linked to this entity (client) key.
Case-insensitive search across key proposal text fields.
1-based page index (1–10000). Omit for default paging.
Restrict to proposals associated with this user ID.
Return only items updated at or after this UTC time (incremental sync).
When true, excludes completed proposals from the result set.
Response
OK