Create an adhoc proposal
curl --request POST \
--url https://anzapi.onboardme.app/api/v1/proposals \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"userKey": "11111111-2222-3333-4444-555555555555",
"entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
"name": "FY26 tax engagement",
"sendToClient": false,
"startOnAcceptance": true,
"note": "Adhoc proposal with custom services and jobs.",
"services": [
{
"serviceID": 12040,
"quantity": 1,
"packageNumber": 1
}
],
"xpmJobs": [
{
"name": "Income tax return",
"templateUuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
}
],
"fyiJobs": [
{
"jobName": "Income tax return",
"fyiTemplateId": "10492",
"state": "Planned",
"managerEmail": "[email protected]",
"partnerEmail": "[email protected]"
}
],
"invoices": [
{
"billDate": "2026-07-01",
"dueDate": "2026-07-31",
"billNow": 1,
"lineItems": [
{
"amount": 2450,
"taxPercent": 10,
"narration": "Annual tax return",
"serviceID": 12040
}
]
}
]
}
'import requests
url = "https://anzapi.onboardme.app/api/v1/proposals"
payload = {
"userKey": "11111111-2222-3333-4444-555555555555",
"entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
"name": "FY26 tax engagement",
"sendToClient": False,
"startOnAcceptance": True,
"note": "Adhoc proposal with custom services and jobs.",
"services": [
{
"serviceID": 12040,
"quantity": 1,
"packageNumber": 1
}
],
"xpmJobs": [
{
"name": "Income tax return",
"templateUuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
}
],
"fyiJobs": [
{
"jobName": "Income tax return",
"fyiTemplateId": "10492",
"state": "Planned",
"managerEmail": "[email protected]",
"partnerEmail": "[email protected]"
}
],
"invoices": [
{
"billDate": "2026-07-01",
"dueDate": "2026-07-31",
"billNow": 1,
"lineItems": [
{
"amount": 2450,
"taxPercent": 10,
"narration": "Annual tax return",
"serviceID": 12040
}
]
}
]
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userKey: '11111111-2222-3333-4444-555555555555',
entityKey: '2c4f6a88-1b3d-5e7f-90ab-cdef12345678',
name: 'FY26 tax engagement',
sendToClient: false,
startOnAcceptance: true,
note: 'Adhoc proposal with custom services and jobs.',
services: [{serviceID: 12040, quantity: 1, packageNumber: 1}],
xpmJobs: [
{
name: 'Income tax return',
templateUuid: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
}
],
fyiJobs: [
{
jobName: 'Income tax return',
fyiTemplateId: '10492',
state: 'Planned',
managerEmail: '[email protected]',
partnerEmail: '[email protected]'
}
],
invoices: [
{
billDate: '2026-07-01',
dueDate: '2026-07-31',
billNow: 1,
lineItems: [
{amount: 2450, taxPercent: 10, narration: 'Annual tax return', serviceID: 12040}
]
}
]
})
};
fetch('https://anzapi.onboardme.app/api/v1/proposals', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'userKey' => '11111111-2222-3333-4444-555555555555',
'entityKey' => '2c4f6a88-1b3d-5e7f-90ab-cdef12345678',
'name' => 'FY26 tax engagement',
'sendToClient' => false,
'startOnAcceptance' => true,
'note' => 'Adhoc proposal with custom services and jobs.',
'services' => [
[
'serviceID' => 12040,
'quantity' => 1,
'packageNumber' => 1
]
],
'xpmJobs' => [
[
'name' => 'Income tax return',
'templateUuid' => 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
]
],
'fyiJobs' => [
[
'jobName' => 'Income tax return',
'fyiTemplateId' => '10492',
'state' => 'Planned',
'managerEmail' => '[email protected]',
'partnerEmail' => '[email protected]'
]
],
'invoices' => [
[
'billDate' => '2026-07-01',
'dueDate' => '2026-07-31',
'billNow' => 1,
'lineItems' => [
[
'amount' => 2450,
'taxPercent' => 10,
'narration' => 'Annual tax return',
'serviceID' => 12040
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: 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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://anzapi.onboardme.app/api/v1/proposals"
payload := strings.NewReader("{\n \"userKey\": \"11111111-2222-3333-4444-555555555555\",\n \"entityKey\": \"2c4f6a88-1b3d-5e7f-90ab-cdef12345678\",\n \"name\": \"FY26 tax engagement\",\n \"sendToClient\": false,\n \"startOnAcceptance\": true,\n \"note\": \"Adhoc proposal with custom services and jobs.\",\n \"services\": [\n {\n \"serviceID\": 12040,\n \"quantity\": 1,\n \"packageNumber\": 1\n }\n ],\n \"xpmJobs\": [\n {\n \"name\": \"Income tax return\",\n \"templateUuid\": \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"\n }\n ],\n \"fyiJobs\": [\n {\n \"jobName\": \"Income tax return\",\n \"fyiTemplateId\": \"10492\",\n \"state\": \"Planned\",\n \"managerEmail\": \"[email protected]\",\n \"partnerEmail\": \"[email protected]\"\n }\n ],\n \"invoices\": [\n {\n \"billDate\": \"2026-07-01\",\n \"dueDate\": \"2026-07-31\",\n \"billNow\": 1,\n \"lineItems\": [\n {\n \"amount\": 2450,\n \"taxPercent\": 10,\n \"narration\": \"Annual tax return\",\n \"serviceID\": 12040\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://anzapi.onboardme.app/api/v1/proposals")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"userKey\": \"11111111-2222-3333-4444-555555555555\",\n \"entityKey\": \"2c4f6a88-1b3d-5e7f-90ab-cdef12345678\",\n \"name\": \"FY26 tax engagement\",\n \"sendToClient\": false,\n \"startOnAcceptance\": true,\n \"note\": \"Adhoc proposal with custom services and jobs.\",\n \"services\": [\n {\n \"serviceID\": 12040,\n \"quantity\": 1,\n \"packageNumber\": 1\n }\n ],\n \"xpmJobs\": [\n {\n \"name\": \"Income tax return\",\n \"templateUuid\": \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"\n }\n ],\n \"fyiJobs\": [\n {\n \"jobName\": \"Income tax return\",\n \"fyiTemplateId\": \"10492\",\n \"state\": \"Planned\",\n \"managerEmail\": \"[email protected]\",\n \"partnerEmail\": \"[email protected]\"\n }\n ],\n \"invoices\": [\n {\n \"billDate\": \"2026-07-01\",\n \"dueDate\": \"2026-07-31\",\n \"billNow\": 1,\n \"lineItems\": [\n {\n \"amount\": 2450,\n \"taxPercent\": 10,\n \"narration\": \"Annual tax return\",\n \"serviceID\": 12040\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://anzapi.onboardme.app/api/v1/proposals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userKey\": \"11111111-2222-3333-4444-555555555555\",\n \"entityKey\": \"2c4f6a88-1b3d-5e7f-90ab-cdef12345678\",\n \"name\": \"FY26 tax engagement\",\n \"sendToClient\": false,\n \"startOnAcceptance\": true,\n \"note\": \"Adhoc proposal with custom services and jobs.\",\n \"services\": [\n {\n \"serviceID\": 12040,\n \"quantity\": 1,\n \"packageNumber\": 1\n }\n ],\n \"xpmJobs\": [\n {\n \"name\": \"Income tax return\",\n \"templateUuid\": \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"\n }\n ],\n \"fyiJobs\": [\n {\n \"jobName\": \"Income tax return\",\n \"fyiTemplateId\": \"10492\",\n \"state\": \"Planned\",\n \"managerEmail\": \"[email protected]\",\n \"partnerEmail\": \"[email protected]\"\n }\n ],\n \"invoices\": [\n {\n \"billDate\": \"2026-07-01\",\n \"dueDate\": \"2026-07-31\",\n \"billNow\": 1,\n \"lineItems\": [\n {\n \"amount\": 2450,\n \"taxPercent\": 10,\n \"narration\": \"Annual tax return\",\n \"serviceID\": 12040\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"engagementKey": "8f9e2b1c-3d4a-5e6f-7890-abcdef012345",
"sentToClient": true
}{
"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>"
}{
"type": "<string>",
"title": "<string>",
"status": 123,
"detail": "<string>",
"instance": "<string>"
}Proposals
Create an adhoc proposal
Create an adhoc proposal.
POST
/
api
/
v1
/
proposals
Create an adhoc proposal
curl --request POST \
--url https://anzapi.onboardme.app/api/v1/proposals \
--header 'Authorization: Basic <encoded-value>' \
--header 'Content-Type: application/json' \
--data '
{
"userKey": "11111111-2222-3333-4444-555555555555",
"entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
"name": "FY26 tax engagement",
"sendToClient": false,
"startOnAcceptance": true,
"note": "Adhoc proposal with custom services and jobs.",
"services": [
{
"serviceID": 12040,
"quantity": 1,
"packageNumber": 1
}
],
"xpmJobs": [
{
"name": "Income tax return",
"templateUuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
}
],
"fyiJobs": [
{
"jobName": "Income tax return",
"fyiTemplateId": "10492",
"state": "Planned",
"managerEmail": "[email protected]",
"partnerEmail": "[email protected]"
}
],
"invoices": [
{
"billDate": "2026-07-01",
"dueDate": "2026-07-31",
"billNow": 1,
"lineItems": [
{
"amount": 2450,
"taxPercent": 10,
"narration": "Annual tax return",
"serviceID": 12040
}
]
}
]
}
'import requests
url = "https://anzapi.onboardme.app/api/v1/proposals"
payload = {
"userKey": "11111111-2222-3333-4444-555555555555",
"entityKey": "2c4f6a88-1b3d-5e7f-90ab-cdef12345678",
"name": "FY26 tax engagement",
"sendToClient": False,
"startOnAcceptance": True,
"note": "Adhoc proposal with custom services and jobs.",
"services": [
{
"serviceID": 12040,
"quantity": 1,
"packageNumber": 1
}
],
"xpmJobs": [
{
"name": "Income tax return",
"templateUuid": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee"
}
],
"fyiJobs": [
{
"jobName": "Income tax return",
"fyiTemplateId": "10492",
"state": "Planned",
"managerEmail": "[email protected]",
"partnerEmail": "[email protected]"
}
],
"invoices": [
{
"billDate": "2026-07-01",
"dueDate": "2026-07-31",
"billNow": 1,
"lineItems": [
{
"amount": 2450,
"taxPercent": 10,
"narration": "Annual tax return",
"serviceID": 12040
}
]
}
]
}
headers = {
"Authorization": "Basic <encoded-value>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Basic <encoded-value>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userKey: '11111111-2222-3333-4444-555555555555',
entityKey: '2c4f6a88-1b3d-5e7f-90ab-cdef12345678',
name: 'FY26 tax engagement',
sendToClient: false,
startOnAcceptance: true,
note: 'Adhoc proposal with custom services and jobs.',
services: [{serviceID: 12040, quantity: 1, packageNumber: 1}],
xpmJobs: [
{
name: 'Income tax return',
templateUuid: 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
}
],
fyiJobs: [
{
jobName: 'Income tax return',
fyiTemplateId: '10492',
state: 'Planned',
managerEmail: '[email protected]',
partnerEmail: '[email protected]'
}
],
invoices: [
{
billDate: '2026-07-01',
dueDate: '2026-07-31',
billNow: 1,
lineItems: [
{amount: 2450, taxPercent: 10, narration: 'Annual tax return', serviceID: 12040}
]
}
]
})
};
fetch('https://anzapi.onboardme.app/api/v1/proposals', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'userKey' => '11111111-2222-3333-4444-555555555555',
'entityKey' => '2c4f6a88-1b3d-5e7f-90ab-cdef12345678',
'name' => 'FY26 tax engagement',
'sendToClient' => false,
'startOnAcceptance' => true,
'note' => 'Adhoc proposal with custom services and jobs.',
'services' => [
[
'serviceID' => 12040,
'quantity' => 1,
'packageNumber' => 1
]
],
'xpmJobs' => [
[
'name' => 'Income tax return',
'templateUuid' => 'aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
]
],
'fyiJobs' => [
[
'jobName' => 'Income tax return',
'fyiTemplateId' => '10492',
'state' => 'Planned',
'managerEmail' => '[email protected]',
'partnerEmail' => '[email protected]'
]
],
'invoices' => [
[
'billDate' => '2026-07-01',
'dueDate' => '2026-07-31',
'billNow' => 1,
'lineItems' => [
[
'amount' => 2450,
'taxPercent' => 10,
'narration' => 'Annual tax return',
'serviceID' => 12040
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Basic <encoded-value>",
"Content-Type: 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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://anzapi.onboardme.app/api/v1/proposals"
payload := strings.NewReader("{\n \"userKey\": \"11111111-2222-3333-4444-555555555555\",\n \"entityKey\": \"2c4f6a88-1b3d-5e7f-90ab-cdef12345678\",\n \"name\": \"FY26 tax engagement\",\n \"sendToClient\": false,\n \"startOnAcceptance\": true,\n \"note\": \"Adhoc proposal with custom services and jobs.\",\n \"services\": [\n {\n \"serviceID\": 12040,\n \"quantity\": 1,\n \"packageNumber\": 1\n }\n ],\n \"xpmJobs\": [\n {\n \"name\": \"Income tax return\",\n \"templateUuid\": \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"\n }\n ],\n \"fyiJobs\": [\n {\n \"jobName\": \"Income tax return\",\n \"fyiTemplateId\": \"10492\",\n \"state\": \"Planned\",\n \"managerEmail\": \"[email protected]\",\n \"partnerEmail\": \"[email protected]\"\n }\n ],\n \"invoices\": [\n {\n \"billDate\": \"2026-07-01\",\n \"dueDate\": \"2026-07-31\",\n \"billNow\": 1,\n \"lineItems\": [\n {\n \"amount\": 2450,\n \"taxPercent\": 10,\n \"narration\": \"Annual tax return\",\n \"serviceID\": 12040\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Basic <encoded-value>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://anzapi.onboardme.app/api/v1/proposals")
.header("Authorization", "Basic <encoded-value>")
.header("Content-Type", "application/json")
.body("{\n \"userKey\": \"11111111-2222-3333-4444-555555555555\",\n \"entityKey\": \"2c4f6a88-1b3d-5e7f-90ab-cdef12345678\",\n \"name\": \"FY26 tax engagement\",\n \"sendToClient\": false,\n \"startOnAcceptance\": true,\n \"note\": \"Adhoc proposal with custom services and jobs.\",\n \"services\": [\n {\n \"serviceID\": 12040,\n \"quantity\": 1,\n \"packageNumber\": 1\n }\n ],\n \"xpmJobs\": [\n {\n \"name\": \"Income tax return\",\n \"templateUuid\": \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"\n }\n ],\n \"fyiJobs\": [\n {\n \"jobName\": \"Income tax return\",\n \"fyiTemplateId\": \"10492\",\n \"state\": \"Planned\",\n \"managerEmail\": \"[email protected]\",\n \"partnerEmail\": \"[email protected]\"\n }\n ],\n \"invoices\": [\n {\n \"billDate\": \"2026-07-01\",\n \"dueDate\": \"2026-07-31\",\n \"billNow\": 1,\n \"lineItems\": [\n {\n \"amount\": 2450,\n \"taxPercent\": 10,\n \"narration\": \"Annual tax return\",\n \"serviceID\": 12040\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://anzapi.onboardme.app/api/v1/proposals")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Basic <encoded-value>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userKey\": \"11111111-2222-3333-4444-555555555555\",\n \"entityKey\": \"2c4f6a88-1b3d-5e7f-90ab-cdef12345678\",\n \"name\": \"FY26 tax engagement\",\n \"sendToClient\": false,\n \"startOnAcceptance\": true,\n \"note\": \"Adhoc proposal with custom services and jobs.\",\n \"services\": [\n {\n \"serviceID\": 12040,\n \"quantity\": 1,\n \"packageNumber\": 1\n }\n ],\n \"xpmJobs\": [\n {\n \"name\": \"Income tax return\",\n \"templateUuid\": \"aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee\"\n }\n ],\n \"fyiJobs\": [\n {\n \"jobName\": \"Income tax return\",\n \"fyiTemplateId\": \"10492\",\n \"state\": \"Planned\",\n \"managerEmail\": \"[email protected]\",\n \"partnerEmail\": \"[email protected]\"\n }\n ],\n \"invoices\": [\n {\n \"billDate\": \"2026-07-01\",\n \"dueDate\": \"2026-07-31\",\n \"billNow\": 1,\n \"lineItems\": [\n {\n \"amount\": 2450,\n \"taxPercent\": 10,\n \"narration\": \"Annual tax return\",\n \"serviceID\": 12040\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"engagementKey": "8f9e2b1c-3d4a-5e6f-7890-abcdef012345",
"sentToClient": true
}{
"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>"
}{
"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.
Body
application/jsontext/jsonapplication/*+json
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes