API Reference
Welcome to MasterPlan’s API (V2)! You can use this API to access all our API endpoints
The API is organized around REST. All request and response bodies, including errors, are encoded in JSON.
Currently we support the following official client bindings:
Authentication
An example to get Job 1234 on Client 1234 using the Bearer token in the Authorization header of the cURL request.
curl -X GET 'https://masterplan.circularsoftware.com/api/v2/Client1234/Job1234/' -H 'Authorization: Bearer YmVhcmVyX3Rva2VuX2dvZXNfaGVyZQ=='
We have simplified our authentication in favour of using a Bearer token. This is passed as part of the Authentication header with your cURL requests.
You create your Bearer token by base64 encoding your Secret Key as pass it as a header to every request to the API.
For brevity, we omit this section from the below code examples.
Errors
Our API returns standard HTTP success or error status codes. For errors, we will also include extra information about what went wrong encoded in the response as JSON under the variable "error". The various HTTP status codes we might return are listed below.
HTTP Status codes
Code | Title | Description |
---|---|---|
200 | OK | The request was successful. |
400 | Bad request | Bad request |
401 | Unauthorized | Your API key or token is invalid. |
404 | Not found | The resource does not exist. |
601 | Missing Parameters | Your request is not complete. |
602 | Invalid Parameters | One or more of your parameters were invalid. |
604 | Request object not found | Subject of the request was not found. |
500 | Internal Server Error | An error occurred with our API. |
Error types
All errors are returned in the form of JSON with a type and optional message.
Example response.
{"status":200}
{
"status":401,
"error": "Your request was not valid. Please check you have included all necessary variables"
}
Global API
This set of endpoints allow for non-Client specific MasterPlan operations.
Job Lookup by ISBN
No Authentication Necessary - Locate a MasterPlan job associated to a specified ISBN
API Request
curl 'https://masterplan.circularsoftware.com/api/v2/ISBN/XXXXXXXXXXXXX'
Example API RequestCreates a new Job on Client0001 with the ID Job1234, sets the Title of the publication to "My New MasterPlan Job" and sets the job to LIVE mode.
curl 'https://masterplan.circularsoftware.com/api/v2/ISBN/5554567890123/'
Successful response
{
"status":200,
"result":[
{
"clientID":"5352",
"is_membersOnly":"no",
"isbn":"9781783425228",
"jobID":"9781783425228",
"mode":"WORK",
"publication_type":"visual",
"url":"https:\/\/masterplan.circularsoftware.com\/Client5352\/Job9781783425228\/",
"users_only":"yes",
"users_only_embeds":"no"
}
]
}
Unsuccessful response
{
"status" : 404,
"error" : "Unable to locate any job with ISBN \"5554567890123\""
}
HTTP Request
GET https://masterplan.circularsoftware.com/api/v2/ISBN/XXXXXXXXXXXXX/
Response Types
Code | Description |
---|---|
200 | ISBN Lookup successful. Returns an array of located Jobs on MasterPlan. |
404 | The ISBN was not found as a JobID on the MasterPlan platform. |
Client API
This set of endpoint allow for fetching, modification and deletion of Client resources such as creating, editted and deleting jobs.
Create/Update a Job
Creating and Updating a job within MasterPlan is simple. POST-ing to the client/job
endpoint allows you to both create and update any job which you have access to within MasterPlan.
Please note:
If the jobID exists on the given Client on MasterPlan, this endpoint will UPDATE that job rather than create a duplicate jobID.
When using this endpoint to update a pre-existing job, only supply the parameters you wish to update, blank parameters such as coverURL=""
will truncate that value.
Example API RequestCreates a new Job on Client0001 with the ID Job1234, sets the Title of the publication to "My New MasterPlan Job" and sets the job to LIVE mode.
curl -d 'jobTitle=My New MasterPlan Job& jobMode=LIVE' 'https://masterplan.circularsoftware.com/api/v2/Client0001/Job1234/'
Successful response
{
"status":200
}
Unsuccessful response
{
"status" : 602,
"error" : "Parameter 'coverURL' is invalid. Ensure it begins with a valid protocol such as https://.",
"invalid_fields": [
"coverURL"
]
}
Example API Request WITH publication file upload
Note that this endpoint requires FORM-DATA in order to correctly process the publication and upload it to AWS.
AWS credentials must already be supplied to MasterPlan, and where more than one set of credentials are present for your Client, there must be a default set of credentials.Creates a new Job on Client0001 with the ID Job1234, sets the Title of the publication to "My New MasterPlan Audiobook" and uploads the LPF audiobook.
curl
--location --request POST \
'https://masterplan.circularsoftware.com/api/v2/Client0001/Job1234/' \
--header 'Authorization: Bearer XXXXXXXXXXXXXXXXXX=' \
--form 'publicationType="audiobook"' \
--form 'jobTitle="My New MasterPlan Audiobook"' \
--form 'publication=@"MyNewAudiobook.lpf"'
Example API Request WITH publication URL upload
AWS credentials must already be supplied to MasterPlan, and where more than one set of credentials are present for your Client, there must be a default set of credentials.Creates a new Job on Client0001 with the ID Job1234, sets the Title of the publication to "My New URL-Uploaded Publication", the Job Mode to LIVE, Spread Type to Single and removes the cover from being shown alongside thumbs.
This route requires two API calls, the first to create a Job in MasterPlan and the second to request extraction of data from the uploaded publication
First API Call
curl --location 'https://masterplan.circularsoftware.com/api/v2/Client0001/Job1234/' \
--header 'Authorization: Bearer XXXXXXXXXXXXXXXXXX=' \
--form 'publication_url="https://BUCKET.s3.eu-west-2.amazonaws.com/MyPDF.pdf"' \
--form 'jobTitle="My New URL-Uploaded Publication"' \
--form 'jobMode="LIVE"' \
--form 'spreadType="single"' \
--form 'showCoverWithThumbs="no"'
Response from First API Call
{
"status": 200,
"affected_fields": [
"jobTitle",
"jobMode",
"spreadType",
"showCoverWithThumbs"
],
"completed_actions": [...],
"xml_result": [],
"job": {
"jobID": "1234",
"jobName": "My New URL-Uploaded Publication",
"coverURL": "",
"jobMode": "LIVE",
"uid": "ZXUtd2VzdC0xL21hc3RlcnBsYW4tdGV...XXXXXXXXXX"
},
"plugins": {}
}
Second API CallUsing the resulting
json.job.uid
parameter from the above response asuid
...
curl --location 'https://masterplan.circularsoftware.com/api/v2/Client9999/Job1234/AwsInvokeLambda' \
--header 'Authorization: Bearer XXXXXXXXXXXXXXXXXX=' \
--form 'uid="ZXUtd2VzdC0xL21hc3RlcnBsYW4tdGV...XXXXXXXXXX"' \
--form 'extraction_opts[getThumbnails]="true"' \
--form 'extraction_opts[getCover]="true"' \
--form 'extraction_opts[getTexts]="true"' \
--form 'extraction_opts[coverIsPageOne]="true"' \
--form 'extraction_opts[readerPageOne]="3"
Response from Second API Call
{
"status": 200,
"aws_data": {
"uid": "ZXUtd2VzdC0xL21hc3RlcnBsYW4tdGV...XXXXXXXXXX",
"clientID": "9999",
"jobID": "1234",
"region": "eu-west-1",
"bucket": "masterplan-bucket",
"prefix": "uploads/Client9999/Job1234"
}
}
HTTP Request
POST https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/
HTTP POST params
The supported parameters are:
Parameter | Description | Values |
---|---|---|
jobID | string (required) The jobID concerned. | |
coverURL | url (optional) A valid and complete URL to the cover. If blank, we attempt to use "cover.jpg" in your spread image folder. | |
slackHookURL | url (optional) A valid and complete URL to a Slack Hook. Required only if you want Annotation/Status changes sent to Slack. | |
jobTitle | string (optional) The title of the publication. | |
shareDescription | string (optional) A description used when sharing spreads on social media platforms. | |
shareLink | url (optional) A URL to redirect users to clicking on a spread. | |
epubLink | url (optional) If using the Colibrio reader. Supply the EPUB to load when clicking a spread. | |
pdfLink | url (optional) If using the Colibrio reader. Supply the PDF to load when clicking a spread. | |
spreadWidth | int (optional) The typical width of the spreads in this publication. Used to create a ratio prior to spread loading. | |
spreadHeight | int (optional) The typical height of the spreads in this publication. Used to create a ratio prior to spread loading. | |
jobMode | enum (optional) The initial mode of the job. | "LIVE", "WIP" |
spreadType | enum (optional) The spread type. | "double", "single" |
hasOverlay | enum (optional) WIP MODE ONLY. Whether or not overlays are used, these display information about the spread when hovered over. | "no", "yes" |
hasAnnotator | enum (optional) WIP MODE ONLY. Whether or not the annotator is permitted. | "no", "yes" |
annotatorAllowNonUsers | enum (optional) WIP MODE ONLY. Requires "annotator" set to "yes". Allow non users to access the annotator. | "no", "yes" |
hideMembersOnlySpreads | enum (optional) Hides Members Only spreads to Non-Memebers. Non-Members will only see public spreads in Job View. | "no", "yes" |
showCoverWithThumbs | enum (optional) Show the publication's cover alongside the spreads. | "yes", "no" |
jobIsAdminOnly | enum (optional) Set whether or not the job is only viewable to Admin accounts. | "no", "yes" |
spreadViewType | enum (optional) The means of viewing spreads when clicked. | "slides", "epub", "custom", "pdf_colibrio", "epub_colibrio" |
readerFirstPage | int (optional) If using the Colibrio reader. Supply the First Page of the main publication. Used to factor in prelims. | |
jobIsSample | enum (optional) Set whether this job is a sample for another Job within MasterPlan | "no", "yes" |
fullVersionJobID | string (optional) Required if jobIsSample is set to "yes". Supply the JobID for the Main Publication. | |
enableTwitterCard | enum (optional) Allow interactive Colibrio reader when sharing to Twitter. | "no", "yes" |
enableWatermarking | enum (optional) Switch on or off spread watermarking. | "no", "yes" |
forceRenderer | enum (optional) Require Colibrio to force a given renderer. | "none", "__responsive", "flipbookRenderer", "stackRenderer", "verticalScrollRenderer" |
jobIsMembersOnly | enum (optional) Set whether job is only viewable by logged in members. | "no", "yes" |
publicationType | enum (optional) Specify the type of publication. | "visual", "textual", "audiobook", "data" |
onixXML | string (optional) Specify an XML datasource | |
publication | FILE (optional) Upload a publication for this Job. Accepted filetypes: pdf, epub, lpf. NOTE: You must use FORM-DATA to upload files to MasterPlan. See example. |
|
cf-_draft | bool (optional) If Webflow is enabled and setup, whether to create this job in draft mode | "true", "false" |
Response Types
Code | Description |
---|---|
200 | Job has been created or updated successfully. |
402 | Unauthorised. You do not have the appropriate access to perform the requested action. |
601 | A parameter was missing. See "invalid_fields" and "error" for more information. |
602 | A parameter was invalid. See "invalid_fields" and "error" for more information. |
Add/Update Spreads
Main API Request
curl -X POST -d 'spreads=[json]& texts=[json]' 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/Spreads/'
Example API RequestAdds the following spreads and texts to Job1234 on Client0001.
Spread 001 - 001_1234567.jpg, members only with Status "2".
Spread 002 - 002_1234567.jpg
Spread Text for Spread 001 - Contents of file found on CDN PATH /uploads/Client0001/Job1234/TXT/001.txt
Spread Text for Spread 002 - "Test Spread Text"
curl -X POST -d 'spreads={\"001\":{\"spreadID\":\"001_1234567\", \"membersOnly\":\"yes\", \"status\":2}, \"002\":{\"spreadID\":\"002_1234567\"}}& texts={\"001\":{\"filename\":\"001.txt\"}, \"002\":{\"data\":\"Test Spread Text\"}}' 'https://masterplan.circularsoftware.com/api/v2/Client0001/Job1234/Spreads/'
Example XML Request
curl -T '/path/to/xml/file.xhtml' 'https://masterplan.circularsoftware.com/api/v2/Client0001/Job1234/Spreads/'
Successful response
{
"status":200
}
Unsuccessful response
{
"status" : 402,
"error" : "You are not authorised to commit this action. Requires administrator access."
}
HTTP Request
POST/PUT https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/Spreads/
Notes - Purging
Sometimes our CDN will have cached the thumbnail images and a full purge will need to take place to see updated spreads. Load MasterPlan with the ?purge query string to run a purge.
https://masterplan.circularsoftware.com/ClientXXXX/JobXXXX/?purge
HTTP POST/PUT params
The supported parameters are:
Parameter | Description |
---|---|
spreads | json (optional) A JSON string containing a list of Spreads (as key) and the value containg the key "spreadID". i.e. {"001":{"spreadID":"001_1122334455"}} Permitted JSON keys:
|
texts |
json (optional)
A JSON string containing a list of Spreads (as key) and the value containg the key "filename" or "data". i.e. {"001":{"filename":"myfile.txt"}} or {"001":{"data":"Spread Text Here in full"}}
|
file |
json, xml (optional)
Providing an JSON or XML file as your page list. It does not work alongside the spreads parameter.
JSON not yet implemented. Example XHTML file |
Response Types
Code | Description |
---|---|
200 | Spreads and texts successfully created. |
402 | Unauthorised. You do not have the appropriate access to perform the requested action. |
Get Spreads
Main API Request
curl 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/Spreads/'
Successful response
{
"status":200,
"data":[
{
"spreadID":"008_15717XXXXX",
"clientID":"XXXX",
"jobID":"XXXX",
"date_created":"2019-10-11 14:12:59",
"is_membersOnly":"no",
"revertOn":null,
"is_commented":"no",
"commented_icon":null,
"last_modified_date":"2019-10-22 13:04:21",
"last_modified_byUserID":"2",
"last_modified_byUserName":"Ken Jones",
"last_modified_byUserEmail":"ken@circularsoftware.com",
"spread_status":"1"
},
{
"spreadID":"010_15717XXXXX",
"clientID":"XXXX",
"jobID":"XXXX",
"date_created":
"2019-10-11 14:12:59",
"is_membersOnly":"no",
"revertOn":null,
"is_commented":"yes",
"commented_icon":{
"icon":"fa-comment",
"color":"rgb(83, 164, 176)"
},
"last_modified_date":"2019-10-22 14:29:25",
"last_modified_byUserID":null,
"last_modified_byUserName":null,
"last_modified_byUserEmail":null,
"spread_status":"2"
}
]
}
Unsuccessful response
{
"status" : 402,
"error" : "You are not authorised to commit this action. Requires administrator access."
}
HTTP Request
GET https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/Spreads/
HTTP GET params
The supported parameters are:
Parameter | Description | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
fields |
A comma separated list of fields to include in the response
Accepted fields include:
|
|||||||||||||||
order |
The order in which to return the spreads, comma separated field and order direction i.e. spreadID,asc or last_modified_date,desc
|
Response Types
Code | Description |
---|---|
200 | Spreads lookup successful. |
402 | Unauthorised. You do not have the appropriate access to perform the requested action. |
Delete Spreads
Main API Request
curl -X DELETE -G 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/Spreads/'
Example API Request - Single SpreadDelete Spread 002 on Client0001 Job1234
curl -X DELETE -G 'https://masterplan.circularsoftware.com/api/v2/Client0001/Job1234/Spreads/' --data-raw '["002"]'
Example API Request - Multiple SpreadsDelete Spread 002 and 004 on Client0001 Job1234
curl -X DELETE -G 'https://masterplan.circularsoftware.com/api/v2/Client0001/Job1234/Spreads/' --data-raw '["002","004"]'
Successful response
{
"status":200,
"result": [
"002",
"004"
]
}
Unsuccessful response
{
"status" : 402,
"error" : "You are not authorised to commit this action. Requires administrator access."
}
HTTP Request
DELETE https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/Spreads/
HTTP DELETE params
The supported parameters are:
Parameter | Description |
---|---|
Body | A RAW JSON post body containing the SpreadIDs to delete. |
Response Types
Code | Description |
---|---|
200 | Spreads successfully deleted. |
402 | Unauthorised. You do not have the appropriate access to perform the requested action. |
Get a Job
Main API Request
curl -X GET -G 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/'
Example API RequestGet Job1234 on Client0001
curl -X GET -G 'https://masterplan.circularsoftware.com/api/v2/Client0001/Job1234/'
Successful response
{
"status":200,
"data": {
"jobID":"1234",
"jobTitle":"My New MasterPlan Job",
"spreadWidth":"976",
"spreadHeight":"732",
"author":"",
"publisher":"",
"slackHookURL":"",
"coverURL":""
}
}
Unsuccessful response
{
"status" : 404,
"error" : "Job not found on Client0001."
}
HTTP Request
GET https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/
HTTP GET params
There are no additional parameters for this request.
Response Types
Code | Description |
---|---|
200 | Job lookup successful. Job details found in "result" object. |
402 | Unauthorised. You do not have the appropriate access to perform the requested action. |
404 | The requested Job doesn't exist on this Client. |
Get all Jobs
Main API Request
curl -X GET -G 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Jobs/'
Example API RequestGet all Jobs on Client0001
curl -X GET -G 'https://masterplan.circularsoftware.com/api/v2/Client0001/Jobs/'
Successful response
{
"status":200,
"data":[{
"jobID":"1234",
"jobTitle":"My New MasterPlan Job",
"spreadWidth":"976",
"spreadHeight":"732",
"author":"",
"publisher":"",
"slackHookURL":"",
"coverURL":""
},
{
"jobID":"5678",
"jobTitle":"My Second MasterPlan Job",
"spreadWidth":"976",
"spreadHeight":"732",
"author":"",
"publisher":"",
"slackHookURL":"",
"coverURL":""
}]
}
Unsuccessful response
{
"status" : 402,
"error" : "You are not authorised to commit this action. Requires administrator access."
}
HTTP Request
GET https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Jobs/
HTTP GET params
There are no additional parameters for this request.
Response Types
Code | Description |
---|---|
200 | Job lookup successful. Job details found in "result" object. |
402 | Unauthorised. You do not have the appropriate access to perform the requested action. |
Delete Job
Main API Request
curl -X DELETE -G 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/'
Example API RequestDelete Job1234 on Client0001
curl -X DELETE -G 'https://masterplan.circularsoftware.com/api/v2/Client0001/Job1234/'
Successful response
{
"status":200,
}
Unsuccessful response
{
"status" : 402,
"error" : "You are not authorised to commit this action. Requires administrator access."
}
HTTP Request
DELETE https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/
HTTP GET params
There are no additional parameters for this request.
Response Types
Code | Description |
---|---|
200 | Job was successfully deleted. |
402 | Unauthorised. You do not have the appropriate access to perform the requested action. |
Get Statuses
Main API Request
curl -G 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Statuses/'
Example API RequestGet Statuses for Client0001
curl -G 'https://masterplan.circularsoftware.com/api/v2/Client0001/Statuses/'
Successful response
{
"status":200,
"data": {
"status1": {
"name": "Planning",
"color": "255, 0, 0"
},
"status2": {
"name": "Work In Progress",
"color": "255, 165, 8"
},
"status3": {
"name": "Images Approved",
"color": "255, 255, 0"
},
"status4": {
"name": "Editorial Approved",
"color": "33, 153, 204"
},
"status5": {
"name": "Proof Approved",
"color": "148, 0, 211"
},
"status6": {
"name": "Print Ready",
"color": "54, 211, 0"
}
}
}
Unsuccessful response
{
"status" : 402,
"error" : "You are not authorised to commit this action. Requires administrator access."
}
HTTP Request
GET https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Statuses/
HTTP GET params
There are no additional parameters for this request.
Response Types
Code | Description |
---|---|
200 | Statuses were found and resulted in the data parameter |
402 | Unauthorised. You do not have the appropriate access to perform the requested action. |
Get a User by ID
Access a user on the Client.
API Request
curl 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Users/XXXX/'
Example API Request
curl 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Users/XXXX/'
Getting a User using the DesktopID
curl 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Users/?desktopId=1234567890'
Successful response
{
"status":200,
"data":[
{
"userId": "1648",
"userType": "User",
"userPass": "*********",
"userName": "User Name",
"userEmail": "user.name@example.com",
"memberstackId": "mem_sag4gr8s64g846sxxxxxx",
"assignedClient": "0001",
"userPermissions": [
"clientAdmin"
],
"accessScheme": "",
"desktopId": "1234578900",
"passwordToken": "*********",
"customAccess": null,
"isSuperAdmin": false,
"isClientAdmin": true,
"isJobAdmin": false,
"isClientMember": null
}
]
}
Unsuccessful response
{
"status":404,
"error":"User \"XXXX\" not found on Client XXXX."
}
HTTP Request
GET https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Users/XXXX/
GET https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Users/?desktopId=XXXX
Response Types
Code | Description |
---|---|
200 | Fetch was successful. Returns data for the given user on this Client. |
404 | User was not found on this Client. |
Get all Users
Access all users on the Client.
API Request
curl 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Users/'
Example API Request
curl 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Users/'
Successful response
{
"status":200,
"data":[
{
"userID":"XXXX",
"userName":"Name",
"userEmail":"email",
"desktopID":"XXXXXXXXXXXXX",
"clientAccessLevel":"2",
"spreadAccess":null,
"customAccess":null
},
{
"userID":"XXXX",
"userName":"Name",
"userEmail":"email",
"desktopID":"XXXXXXXXXXXXX",
"clientAccessLevel":"2",
"spreadAccess":null,
"customAccess":null
},
{
"userID":"XXXX",
"userName":"Name",
"userEmail":"email",
"desktopID":"XXXXXXXXXXXXX",
"clientAccessLevel":"2",
"spreadAccess":"{\"0000\": {\"access\": \"default\"}, \"XXXXXXXXXXXXX\": {\"access\": \"001~016\"}, \"XXXXXXXXXXXXX\": {\"access\": \"all\"}, \"XXXXXXXXXXXXX\":{\"access\": \"none\"}}",
"customAccess":null
}
]
}
HTTP Request
GET https://masterplan.circularsoftware.com/api/v2/ClientXXXX/Users/
Response Types
Code | Description |
---|---|
200 | Returns an array of users on the supplied Client. |
Get Annotations for Spread
Get all of the annotations (including Notes and Regions) for a given spreadID.
API Request
curl 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/SpreadXXXX/Annotations'
Example API Request
curl 'https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/SpreadXXXX/Annotations'
Successful response
{
"status": 200,
"result": {
"notes": [
{
"note": "Text attached to note",
"x": 0.000,
"y": 0.00,
"colour": "rgb(0, 0, 0)",
"icon": "fa-solid fa-thumbs-down fa-xl",
"user": "Creator Name",
"userID": "1",
"ts": 1681749666311,
"last_modified": 1681749671471
}
],
"regions": [
{
"x": 10.000,
"y": 10.000,
"user": "Creator Name",
"width": 100.000,
"height": 100.000,
"userID": "1"
}
]
}
}
HTTP Request
GET https://masterplan.circularsoftware.com/api/v2/ClientXXXX/JobXXXX/SpreadXXXX/Annotations/
Response Types
Code | Description |
---|---|
200 | Returns an array containing the keys notes and regions . |