PPW Link
PPW Link (PPWL) is a web service to allow PPW systems to transfer data between accounts. These accounts can be in the same environment or different environments. This was implemented to support PPW enterprise customers. Can also support any other integrations that would like to use the same processes.
Setup PPWLink
Using your PPW account, login to the system. Go to the Admin > Auto Import - Work Orders page. Click the Setup New Import button in the toolbar. The Import From field should be set to PPW Link - Property Pres Wizard-v2. Set the client company to the desired value. Enter the PPW account username and password. The PPW Link URL should point to the receiver script of your integration.
When the Auto Import record is saved the validate_user event will be called. This event will pass the PPW Link Push URL along with verifying the authentication info is correct.
The remote_site_id is a unique UUID. You should generate a UUID and use this UUID for all responses to PPWL. A unique UUID can be generated at the site GUID Generator
PPWL uses HTTP POST to transfer all data. The basic structure of each request is similar. A single POST variable called “payload” is sent that contains the PPWL data. The contents of the “payload” variable is a JSON encoded string.
The PPWL’s production url is https://www.propertypreswizard.com/api/link/receiver.php
The “payload” fields are as follows
Field Name | Type | Description |
---|---|---|
username | string | The PPW account user name |
password | string | The PPW account password |
site_id | uuidv4 | The unique site_id. Valid v4 UUID |
event_name | string | The event or action being completed. |
event_data | string | The main data field. JSON encoded string. |
The password is a sha1 hash of the PPW password.
Example call with event data in JSON format. The examples are all shown using the curl program. But any standard HTTP programming interface should work fine.
Request payload JSON
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "ppwl_event_name",
"event_data": "{}"
}
Curl command line example
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "validate_user",
"event_data": "{}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Responses from PPWL will be in the JSON format with the following fields.
Field Name | Type/Length | Description |
---|---|---|
remote_site_id | uuidv4 | The unique site_id. |
error | boolean | True or false. |
success | boolean | True or false |
return_error_msg | string | If error is true, contains error message. |
result_data | string | The main data field. JSON encoded string. |
Response JSON
{
"remote_site_id":"1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error":false,
"success":true,
"return_error_msg":null,
"result_data":null
}
Suggested Data Flow
Authentication
validate_user
– Validate User
validate_user
– Validate User
Use the documentation for validating a user from the previous section to see what is going to be sent. The ppwlink_push
field from the request event_data can be used to alert PPW that new orders have been assigned to the account. Pinging this URL will force PPWL to check for new orders. The get_all_orders
event will be added to the event queue and ran shortly after. Timing will depend on system load and other events in the queue but usually less than a minute.
Request payload JSON
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "validate_user",
"event_data": "{\"ppwlink_push\":\"https://www.mysite.com/api/push.php?key=myrandomkey\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response for invalid authentication (JSON)
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"success": false,
"return_error_msg": "Could not validate username and password.",
"result_data": "",
"error": true
}
Work Order Events
get_all_orders
– Gets all OPEN Work Ordersget_cancel_orders
– Gets all CANCELLED Work Ordersget_all_updates
– Gets all updates for Work Ordersget_order
– Gets specific Work Order Informationget_foh
– Gets FOH (front of house) Photo for a WOmark_order_imported
– Marks Work Order as Imported
get_all_orders
– Get Open Orders
Work orders that are in the status Unread, In Field, Follow Up, Accepted, and Rejected are sent through this action.
Field | Type | Description |
---|---|---|
timestamp | string | Unix timestamp |
Request payload JSON
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_all_orders",
"event_data": "{\"timestamp\":\"1491699142\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_all_orders",
"event_data": "{\"timestamp\":\"1491699142\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
A timestamp can be passed in the event_data field. If this is sent, only work orders that have been modified after the date are sent. This allows incremental checks for new orders. We would suggest doing a full import at least once a day to make sure all orders are captured.
The response will contain an array of objects for each work order. The result data will have the PPW internal Report ID
, the Work Order #
, and the PPW #
. Using these fields, you should track each work order and if it has been received yet. Any new work orders will then be imported using the get work order event.
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error": false,
"success": true,
"return_error_msg": null,
"result_data": [{
"report_id": "12249320",
"wo_number": "import test 3-1",
"org_wo_num": "2272",
"wo_status": "Unread"
},
{
"report_id": "12249453",
"wo_number": "import test 3-5",
"org_wo_num": "2298",
"wo_status": "Unread"
},
{
"report_id": "12249455",
"wo_number": "import test 3-6",
"org_wo_num": "2299",
"wo_status": "Unread"
},
{
"report_id": "12249459",
"wo_number": "import test 3-7",
"org_wo_num": "2300",
"wo_status": "Unread"
},
{
"report_id": "12249473",
"wo_number": "import test 3-7",
"org_wo_num": "2301",
"wo_status": "Unread"
}
]
}
Field Name | Type/Length | Description |
---|---|---|
report_id | number | The unique id of the order. Must be an integer. |
wo_number | string | The work order number displayed to the user. |
org_wo_num | number | Not required. Is not used. |
wo_status | string | For new orders, should be set to Unread |
get_cancel_orders
– Get Cancelled Orders
Work orders that have been canceled will be available with the get_cancel_orders event. The timestamp value in the event data is required for this event call. The timestamp cannot be greater than 30 days in the past.
Field | Type | Description |
---|---|---|
timestamp | string | Unix timestamp |
Request payload JSON
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_cancel_orders",
"event_data": "{\"timestamp\":\"1491699142\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"success": true,
"error": false,
"return_error_msg": null,
"result_data": [{
"report_id": "12255349",
"wo_number": "PPWTEST3",
"org_wo_num": "44309",
"wo_status": "Cancelled",
"cancel_timestamp": "1529897535"
},
{
"report_id": "12255376",
"wo_number": "PPWTEST12",
"org_wo_num": "44336",
"wo_status": "Cancelled",
"cancel_timestamp": "1529895967"
}
]
}
Field Name | Type/Length | Description |
---|---|---|
report_id | number | The unique id of the order. Must be an integer. |
wo_number | string | The work order number displayed to the user. |
org_wo_num | number | Not required. Is not used. |
wo_status | string | For new orders, should be set to Unread |
cancel_timestamp | string | Unix timestamp the order was cancelled |
get_all_updates
– Retreive Updates on Existing Orders
Retreiving updates to work orders is done with the get_all_updates
event. A timestamp can be passed and only updates since that time will be sent. This will only send work orders that are currently in an open status for the user.
Work orders can be returned to the vendor (RTV) by setting the wo_status
to RTV. The reason for the followup will be passed in the update_value
field.
Fields that can be updated are as follows
- address
- city
- comments
- cust_text
- date_due
- key_code
- loan_number
- loan_type_other
- lock_code
- lot_size
- mortgage_name
- start_date
- state
- zip
Field | Type | Description |
---|---|---|
timestamp | string | Unix timestamp |
Request payload JSON
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_all_updates",
"event_data": "{\"timestamp\":\"1491699142\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_all_updates",
"event_data": "{\"timestamp\":\"1491699142\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error": false,
"success": true,
"return_error_msg": null,
"result_data": [{
"report_id": "12249320",
"wo_number": "import test 3-1",
"org_wo_num": "2272",
"wo_status": "In Field",
"update_field": "lot_size",
"update_value": "45,000 sqft"
},
{
"report_id": "12249453",
"wo_number": "import test 3-5",
"org_wo_num": "2298",
"wo_status": "In Field",
"update_field": "comments",
"update_value": "These are new comments"
},
{
"report_id": "12249320",
"wo_number": "import test 3-1",
"org_wo_num": "2272",
"wo_status": "RTV",
"update_field": "",
"update_value": "Take better photos of exterior debris."
}
]
}
Field Name | Type/Length | Description |
---|---|---|
report_id | number | The unique id of the order. Must be an integer. |
wo_number | string | The work order number displayed to the user. |
org_wo_num | number | The PPW # for the work order. |
wo_status | string | Will be set to the work order status. Follow Up orders will be set to RTV |
update_field | string | Field to update. |
update_value | string | New value for the field. |
get_order
– Get Work Order
The work order info, line items and PCR forms are sent using this event.
Field | Type | Description |
---|---|---|
report_id | number | Unique identifier for the work order |
Request payload JSON
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_order",
"event_data": "{\"report_id\":\"12249320\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_order",
"event_data": "{\"report_id\":\"12249320\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
The response will contain an array of objects for each work order. The result data will have the PPW internal Report ID
, the Work Order #
, and the PPW #
. Using these fields you should track each work order and if it has been received yet. Any new work orders will then be imported using the get work order event.
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error": false,
"success": true,
"return_error_msg": null,
"result_data": {
"wo_number": "import test 3-1",
"client_company_alias": "Test Client",
"cust_text": "Investor",
"loan_number": "XXXXXXX1234",
"loan_type_other": "CONV",
"date_received": "20170331",
"date_due": "20170415",
"start_date": "20170402",
"address": "123 Test Dr",
"city": "Tiffin",
"state": "OH",
"zip": "44883",
"comments": "",
"work_type_alias": "Inspection",
"mortgage_name": "",
"line_items": [{
"desc": "Inspection",
"qty": "0.00",
"price": "0.00",
"total": "0.00",
"add": ""
}],
"pcr_forms": [{
"pcr_form_id": "6318",
"form_id": "Exterior_Inspection",
"form_ver_id": "1",
"form_required": "0"
}],
"ppw_report_id": "12249320",
"import_user_id": null,
"key_values": {
"bg_checkin_provider": "ags"
},
"lot_size": "",
"lock_code": "",
"key_code": "",
"broker_name": null,
"broker_company": null,
"broker_phone": null,
"broker_email": null,
"vendor_id": "johndoe",
"has_foh": true
}
}
The key_values
object can be used to set the check in provider. The only option currently is “ags”
. This will set the check in provider to Aspen Grove Solutions. Leaving it blank or not even sending the value will require the default PPW mobile check in.
The vendor_id
field in the get_order
response is not required. If the field is used, it will need to be the username of a PPW user in the account being imported into. If the user exists, it will automatically be assigned to the user. The user needs to be active.
The has_foh
flag indicates that the work order is for a property that has a Front of House photo. When the order is processed, it will queue the event to retrieve the Front of House photo from the client.
get_foh
– Get Front of House Photo
The get_foh
event will return a direct link to the property’s Front of House photo. When an order is imported for a property that has a Front of House photo, a flag will be set in the json of the work order called has_foh
which will be set to a boolean true or false. When the work order is later processed in PPW, the “get_foh”
event will be queued for that work order. When this event is processed, the following payload will be sent to the client:
Field | Type | Description |
---|---|---|
remote_report_id | number | Unique identifier for the work order |
Request payload JSON
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_foh",
"event_data": "{\"remote_report_id\":\"12249320\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_foh",
"event_data": "{\"remote_report_id\":\"12249320\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
This will return a direct link to the front of house photo along with the numeric value of the file size in megabytes rounded to the nearest whole number:
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error": false,
"success": true,
"return_error_msg": null,
"result_data": {
"s3_url": "https:\/\/link-to-photo.com",
"file_metadata": {
"file_size": "7"
}
}
}
Field Name | Type/Length | Description |
---|---|---|
s3_url | string | URL to the photo in S3 |
file_metadata | object | Metadata for the file |
File metadata fields
Field Name | Type/Length | Description |
---|---|---|
file_size | number | File size |
mark_order_imported
– Mark Order as Imported
This will mark the work order as imported and will set the status of the work order in the PPW system it was imported from to In Field
. An entry will also be put in the work order Access History
indicating the work order was imported.
Field | Type | Description |
---|---|---|
report_id | number | Unique identifier for the work order |
Request payload JSON
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "mark_order_imported",
"event_data": "{\"report_id\":\"12249320\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "mark_order_imported",
"event_data": "{\"report_id\":\"12249320\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"success": true,
"return_error_msg": null,
"result_data": null,
"remote_org_id": 18,
"error": false
}
PCR Forms
get_pcr_json
– Get PCR Form Information
get_pcr_json
– Get PCR Form
The get_order
event will return a work order and can contain a key named "pcr_forms"
. This key will contain an array of objects describing the forms assigned to the work order. The object will contain the following fields.
Field Name | Type | Description |
---|---|---|
pcr_form_id | number | The unique id of the form. |
form_id | string | The friendly Form ID from the PPW account the order being imported to. Only applicable when third party is creating orders. PPW will not send this. |
form_ver_id | number | The version of the form. |
form_required | number | If the form is required or not. 1 or 0 |
To retrieve the information for the form, use the get_pcr_json
event.
Request payload JSON
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_pcr_json",
"event_data": "{\"pcr_form_id\":\"10066\",\"form_ver_id\":\"5\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_pcr_json",
"event_data": "{\"pcr_form_id\":\"10066\",\"form_ver_id\":\"5\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
The data returned will contain the full information about the PCR form. This includes some basic form info, questions, question answer options for single and multi selects, question rules, and photo rules.
The result_data field will contain an object with the key of the pcr_form_id that was requested. The options_pcr_forms
field contains the basic info on the form. There are several fields that will not be useful but are provided for completeness.
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error": false,
"success": true,
"return_error_msg": null,
"result_data": {
"10066": {
"options_pcr_forms": {
"pcr_form_id": "10066",
"org_id": "18",
"pcr_form_name": "*** TEST SKIP LOGIC",
"default_required": "1",
"form_photos_required": "0",
"transfer_prev_values": "0",
"client_new_wo": "0",
"global_form": "0",
"web_template": "",
"fillable_pdf": "",
"pcr_form_active": "1",
"pruvan_ver": "0",
"thirdparty_id": "",
"form_deleted": "0",
"form_share_name": "_TEST_SKIP_LOGIC",
"pruvan_master_id": "",
"insert_by": "55",
"insert_date": "2017-03-21 09:21:27",
"publish_changes": "1",
"inspectorade_id": null,
"cyprexx_id": null,
"pruvan_id": null
}
}
}
}
Field Name | Type/Length | Description |
---|---|---|
pcr_form_id | number | The unique id of the form. |
org_id | number | The internal ID of the company in PPW. |
pcr_form_name | string | The name of the form. |
default_required | boolean | 1 or 0. If form is required by default on new orders. |
form_photos_required | boolean | No longer used. In photo rules information. |
transfer_prev_values | boolean | No longer used. In question information. |
form_share_name | string | Alphanumeric version of form name. |
PCR Questions
The questions object contains the following data. This should allow you to recreate the form on your own system and have the same options and functionality as PPW.
Response JSON Cont.
"options_pcr_forms_questions": {
"853007": {
"pcr_question_id": "853007",
"pcr_form_id": "10066",
"question_num": "",
"question_name": "Name",
"question_desc": "",
"question_type": "textbox",
"question_data_type": "varchar",
"question_display_active": "1",
"question_required": "1",
"question_na_option": "0",
"question_flag_photos": "0",
"question_photos_required": "0",
"question_active": "0",
"question_deleted": "1",
"question_form_length": "",
"question_order": "1.00",
"pdf_field_id": "0",
"thirdpartyfield_id": "0",
"question_share_name": "Name",
"question_transfer_prev_values": "0",
"question_show_prev_values": "0",
"question_auto_transfer_prev_values": "0",
"question_field_rules_cnt": "0",
"question_action_rules_cnt": "0",
"question_photo_rules_cnt": "0",
"insert_by": "55",
"insert_date": "2017-03-21 08:49:34"
},
"853116": {
"pcr_question_id": "853116",
"pcr_form_id": "10066",
"question_num": "",
"question_name": "Able to access property."
...
}
Field Name | Type/Length | Description |
---|---|---|
pcr_question_id | number | The unique id of the question. |
pcr_form_id | number | The form the question is associated with. |
question_num | string | No longer used. |
question_name | string | Question displayed to the end user. |
question_desc | string | Currently not used. |
question_type | string | The type of question. See below for descriptions. |
question_data_type | string | The data type as stored in database. |
question_display_active | boolean | Is the question shown by default. If not a rule may make it display active. |
question_required | boolean | Is the question required by default. Questions not shown are never required. |
question_na_option | boolean | No longer used. |
question_flag_photos | boolean | No longer used. Use photo rules. |
question_photos_required | boolean | No longer used. Use photo rules. |
question_active | boolean | Is question active. In-active questions will not be used or shown. |
question_deleted | boolean | If question is deleted. Deleted questions are no longer shown on form builder. |
question_form_length | string | Used for displaying a friendly field size on web. Does not affect PPW mobile app. |
question_order | number | The order of the questions. Ordered in ascending. |
pdf_field_id | string | Used for custom PDF fields. |
thirdpartyfield_id | string | NA |
question_share_name | string | Alphanumeric version of question. |
question_transfer_prev_values | boolean | Can the user copy previous form answers. |
question_show_prev_values | boolean | Is the previous answer displayed. |
question_auto_transfer_prev_values | boolean | Is the previous answer automatically filled in. |
*_rules_cnt | number | A total for each rule type. Helpful metadata. |
The PCR form question types are described below.
Question Type | Description |
---|---|
checkbox | Multiple options shown at once, multiple can be selected. |
date | A date is required. Normally calendar selector is shown. |
dropdown, radio | Multiple options shown, only one can be selected. |
numeric | A valid number must be entered. |
photos | Question only requires a photo. |
ppwfield | A field from the work order will be displayed instead of requiring an answer. |
textarea | Large comment area. |
textbox | A text input for the user. Limited to 255 characters. |
title | A heading or informational message will be shown. No answer required. |
The PCR form question data types are described below.
Question Data Type | Description |
---|---|
number | An integer. Used for checkbox, dropdown, and radio. Stores the answer as the internal PPW id for the option. |
number | A number but with decimals to 2 places. |
string | Text limited to 255. |
date | A valid date. |
string | Long text field. |
PCR Question Options
Questions of type checkbox, dropdown and radio will all have options in the
options_pcr_forms_questions_values
field. This field is an array of all the options for all questions. They are not ordered or grouped in a specific way. You can loop through all the items and associate them as needed.
Response JSON Cont.
"options_pcr_forms_questions_values": {
"1238051": {
"question_value_id": "1238051",
"pcr_question_id": "853116",
"question_value": "Yes",
"pdf_field_id": "0",
"question_value_active": "1",
"thirdparty_value_id": "0",
"question_share_value": null
},
"1238052": {
"question_value_id": "1238052",
"pcr_question_id": "853116",
"question_value": "No",
"pdf_field_id": "0",
"question_value_active": "1",
"thirdparty_value_id": "0",
"question_share_value": null
}
},
Field Name | Description |
---|---|
question_value_id | The unique ID of the question answer option. |
pcr_question_id | The pcr_question_id associated with the answer option. |
question_value | The user displayed value of the answer option. |
pdf_field_id | Used for custom PDF files. |
question_value_active | If answer option is active. In-active options are hidden from user. |
thirdparty_value_id | Not used. |
question_share_value | Not used. |
PCR Question Rules
The rules for questions have two options. There are filed rules and action rules. Field rules determine how a question should be answered. Ex. answer must be greater than 2 and less than 12. Or you must select at least 3 of the 10 options. Action rules determine what other questions should be shown or hidden based on a question answer.
Action rules will have additional information in a field called options_pcr_forms_rules_checks
. This field will be described further in the documentation.
Response JSON Cont.
"options_pcr_forms_rules": {
"22993": {
"pcr_form_rule_id": "22993",
"pcr_form_id": "10066",
"pcr_question_id": "853116",
"rule_type": "action",
"rule_operator": "=",
"rule_value": "",
"insert_by": "55",
"insert_date": "2017-03-30 12:03:55"
},
"22994": {
"pcr_form_rule_id": "22994",
"pcr_form_id": "10066",
"pcr_question_id": "873273",
"rule_type": "action",
"rule_operator": "=",
"rule_value": "1236968",
"insert_by": "55",
"insert_date": "2017-03-29 23:32:19"
},
"24131": {
"pcr_form_rule_id": "24131",
"pcr_form_id": "10066",
"pcr_question_id": "877718",
"rule_type": "field",
"rule_operator": "length_greater_than",
"rule_value": "2",
"insert_by": "55",
"insert_date": "2017-04-08 09:04:49"
}
},
Field Name | Description |
---|---|
pcr_form_rule_id | The unique ID of the rule. |
pcr_form_id | The pcr_form_id associated with the rule. |
pcr_question_id | The pcr_question_id associated with the rule. |
rule_type | The type of rule. field or action . |
rule_operator | How the rule should be matched. |
rule_value | The value the rule matches. Could be a single value or a JSON array of multiple answers. Ex. [12345,12346,12347] |
The rule operator types are described below.
Rule Operator | Description |
---|---|
= | The answer is equal to the value(s) selected. This is an exact match. Multi select must match all items. |
not_equal | The answer is not equal to the rule_value. |
> | Greater than. Used for numeric/text fields. |
< | Less than. Used for numeric/text fields. |
contains_any | Multi select questions. If any selected values are matched, the rule applies. |
contains_all | Multi select questions. If ALL selected values are matched, the rule applies. |
doesnt_contain_any | Multi select questions. Opposite of contains_any. |
doesnt_contain_all | Multi select questions. Opposite of contains_all. |
count | Multi select questions. Number of items selected equals rule_value. |
count_less_than | Multi select questions. Number of items selected is less than rule_value. |
count_greater_than | Multi select questions. Number of items selected is greater than rule_value. |
length_greater_than | Textbox and textarea question types. Length of answer string is greater than rule_value. |
length_less_than | Textbox and textarea question types. Length of answer string is less than rule_value. |
length_equal | Textbox and textarea question types. Length of answer string equals rule_value. |
The field options_pcr_forms_rules_checks
determines what action is taken when the rule is matched. The actions are either show or hide. The JSON and fields are described below.
Response JSON Cont.
"options_pcr_forms_rules_checks": {
"43819": {
"pcr_rule_check_id": "43819",
"pcr_form_rule_id": "22993",
"pcr_question_id": "873273",
"check_operator": "show",
"check_value": "",
"insert_by": "55",
"insert_date": "2017-03-21 08:48:46"
},
"43820": {
"pcr_rule_check_id": "43820",
"pcr_form_rule_id": "22994",
"pcr_question_id": "853121",
"check_operator": "show",
"check_value": "",
"insert_by": "55",
"insert_date": "2017-03-21 08:49:15"
},
"46739": {
"pcr_rule_check_id": "46739",
"pcr_form_rule_id": "24132",
"pcr_question_id": "853121",
"check_operator": "show",
"check_value": "",
"insert_by": "55",
"insert_date": "2017-04-08 15:07:56"
}
},
Field Name | Description |
---|---|
pcr_rule_check_id | The unique ID of the rule check. |
pcr_form_rule_id | The pcr_form_rule_id associated with this rule check. |
pcr_question_id | The pcr_question_id the action is taken on. |
check_operator | The rule check action. Either show or hide . |
check_value | No longer used. |
Photo rules for the form are contained in the field options_pcr_forms_photo_rules
. Photo rules have a similar structure as the question field and action rules. Every question has a default photo rule. Photo rules have a min and max for the photo requirements. If a rule has a min set to zero, then photos are not required for the question. If the max is also set to zero, then photos can not be taken for the question. If the min is greater than 0.
Response JSON Cont.
"options_pcr_forms_photo_rules": {
"24765": {
"pcr_photo_rule_id": "24765",
"pcr_question_id": "853007",
"rule_operator": "default",
"rule_value": "default",
"take_photo": "0",
"require_photo": "0",
"min_photo": "0",
"max_photo": "20",
"insert_by": "55",
"insert_date": "2017-03-21 08:49:34"
},
"59201": {
"pcr_photo_rule_id": "59201",
"pcr_question_id": "877718",
"rule_operator": "=",
"rule_value": "red",
"take_photo": "0",
"require_photo": "0",
"min_photo": "5",
"max_photo": "10",
"insert_by": "55",
"insert_date": "2017-04-08 09:25:08"
},
"59203": {
"pcr_photo_rule_id": "59203",
"pcr_question_id": "877718",
"rule_operator": "default",
"rule_value": "default",
"take_photo": "0",
"require_photo": "0",
"min_photo": "1",
"max_photo": "5",
"insert_by": "55",
"insert_date": "2017-04-08 09:25:08"
}
}
Field Name | Description |
---|---|
pcr_photo_rule_id | The unique ID of the photo rule. |
pcr_question_id | The pcr_question_id the photo rule is associated with. |
rule_operator | How the rule should be matched. |
rule_value | The value the rule matches. Could be a single value or a JSON array of multiple answers. Ex. [12345,12346,12347] |
take_photo | No longer used. |
require_photo | No longer used. |
min_photo | Minimum photo requirements for rule. |
max_photo | Maximum photo requirements for rule. |
Bid/Comp & Invoice Items
get_invoice_items_order
– Get Bid/Comp & Invoice Items
get_invoice_items_order
– Get Bid/Comp & Invoice Items
The valid Bid/Comp and Invoice options for the work order are available through the get_invoice_items_order
event. Each work order could have a custom list of invoice options based on rules setup by each PPW customer. This function should be called for each order if you plan on using the invoicing function of PPWL. The result_data
field contains a list of objects with the invoice_item_id
and the Item Description. The first item usually has an id of zero and no description. This item can be ignored. The last item is usually “other”. This means the other item is allowed and users can add their own items to the invoice.
The invoice line items are retrieved using this event.
Field | Type | Description |
---|---|---|
report_id | number | Unique identifier for the work order |
Request payload JSON
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_invoice_items_order",
"event_data": "{\"report_id\":\"12249320\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_invoice_items_order",
"event_data": "{\"report_id\":\"12249320\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error": false,
"success": true,
"return_error_msg": null,
"result_data": {
"0": "",
"42839": "Exterior Inspection",
"42838": "aaaaaaa",
"42835": "11111",
"42766": "REO Package - Basic",
"42765": "Lock Change - Lockset",
"42764": "Lock Change - Knob",
"42759": "Carpet Replacement",
"35929": "BID ITEM TEST",
"8519": "Basements \/ Pools Needing Pumped",
"8518": "Debris Exterior",
"8517": "Debris Interior",
"8523": "Grass Recut",
"8522": "Initial Grass Cut",
"8524": "Inspection",
"8525": "Locks",
"8514": "Lock Boxes",
"8513": "Padlocks",
"8520": "Rooms With Mold",
"18560": "Test Drop down",
"8521": "Trip Charge",
"8515": "Winterization (Dry)",
"8516": "Winterization (Wet)",
"18561": "drop down option for demo",
"42841": "test cancel item",
" ": "",
"***other***": "Other"
}
}
Photo / Docs
get_file
– Get Document(s) for a Specific Work Order
get_file
– Get Documents
The get_file event retrieves files saved to a work order in PPW. These can be from one of two types, specified as the module_type: job_notes
are Job Note attachments and uploads
is for files saved in the Photos & Documents section. These files are passed as a presigned url with an expiration of 30 minutes from time of creation.
Field | Type | Description | Required |
---|---|---|---|
remote_report_id | number | Report_id of which the document will be added/inserted into | No |
report_id | number | Report_id of which the document originated from | Yes |
module_type | string | Type of file being processed. In this case “uploads” | Yes |
Request payload JSON
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_file",
"event_data": "{\"remote_report_id\":\"12249320\",\"report_id\":\"12236327\", \"module_type\":\"uploads\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_file",
"event_data": "{\"remote_report_id\":\"12249320\",\"report_id\":\"12236327\",\"module_type\":\"uploads\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON
{
"remote_site_id": "b2793f7e-319a-4d64-9d0f-6b1e87c651c6",
"success": true,
"return_error_msg": null,
"result_data": [{
"remote_report_id": "0",
"report_id": "59879",
"file_id": 21960,
"file_name": "48271_client_estimate-1.pdf",
"file_type": "application/pdf",
"file_size": "2",
"file_desc": "",
"s3_url": "https://link\to\file",
"s3_url_thumb": "https://link\to\thumbnail",
"module_type": "uploads",
"org_name": "DEMO",
"imported": 1
}],
"remote_org_id": 18,
"error": false
}
Field | Type | Description |
---|---|---|
file_name | string | File name |
file_type | string | MIME-type indentifier |
file_size | number | File size |
file_desc | string | Document description (if any) |
s3_url | string | URL to the S3 Object. |
s3_url_thumb | string | URL to the thumbnail (if applicable) |
org_name | string | Org name of which the file originated from. |
imported | number | Always 1. Used to keep track of imported vs regular files |
Job Notes
get_notes
– Get All Job Notes for a Work Order
get_notes
– Get Job Notes
Job notes can be sent via PPWLink by initiating the get_notes event. This event takes 2 inputs: A report_id
and a remote_report_id
. The report_id
is the PPW work order from which you want to fetch the job notes from. The remote_report_id
is the PPW work order to which you want the job notes to be posted. The types of these notes can be “wo”
for work order note or “prop”
for property notes.
For this event to fire, the Job Notes Import needs to be active. This can be done in the Auto Import. When active there needs to be at least one note group set. The groups selected here will be given permission to view the notes created by this import.
Field | Type | Description | Required |
---|---|---|---|
remote_report_id | number | Report_id of which the note will be added/inserted into | No |
report_id | number | Report_id of which the note originated from | Yes |
Request payload JSON
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_notes",
"event_data": "{\"remote_report_id\":\"154687\",\"report_id\":\"122367\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "get_notes",
"event_data": "{\"remote_report_id\":\"154687\",\"report_id\":\"122367\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error": false,
"success": true,
"return_error_msg": null,
"result_data": [{
"note_id": 1843,
"note_rev": 0,
"report_id": 45321,
"remote_report_id": 154687,
"note_type": "wo",
"note_text": "Some Note Text",
"insert_by": "USER_ID Of User who created the note",
"insert_date": "2024-09-19 12:07:03",
"org_name": "PPW Organization",
"has_attachments": "True"
},
{
"note_id": 1844,
"note_rev": 1843,
"report_id": 45321,
"remote_report_id": 154687,
"note_type": "wo",
"note_text": "Some Note Text. Edited",
"insert_by": 131667,
"insert_date": "2024-09-19 12:08:03",
"org_name": "PPW Organization",
"has_attachments": "True"
}
]
}
Field Name | Description |
---|---|
note_id | Note_id of which we fetched the data from. |
note_rev | Original note_id from which this edit stemmed from. |
report_id | Report_id in which the note was originally created. |
remote_report_id | Report_id in which we will be adding the note to. |
note_type | Type of note. "wo" = Work Order, "prop" = Property. |
note_text | Text from the note. |
insert_by | User ID of the user who added the note. |
insert_date | Original date the note was created. |
org_name | Org name from which the note originated from. Used in the UI to show Imported From: <Org Name> . |
has_attachments | True or False based of if the note has any attachments. If True will fire off the get_file event |
Send Results Introduction
Sending results through PPWL includes, photos, files attachments, mobile check in, PCR form answers, Bid/Completion lines, Contractor Invoices and marking orders Ready for Office. Work orders that are marked Ready for Office, Invoiced, or Complete can not have results sent to them through PPWLink.
Originating Data / Creating New Orders
PPWL can be used to create new work orders, along with PCR Forms, and Invoice Line Items. This enables an integrator to act as a PPW account, create orders, and receive the results of those work orders, through PPWL.
The previous section of the documentation that describes how to retrieve information from PPWL can be used to develop your receiver script. All PPWL calls will go to a script called receiver. It can have any extension (.php, .aspx, .jsp, .py) or none.
Example URLs:
https://www.mysite.com/api/receiver.aspx
https://www.mysite.com/ppwl/receiver
Send Results Work Order
get_all_orders
– Send New Work Ordersget_all_updates
– Update Existing Work Order. Includes RTV and Complete/Cancelsend_date_est
– Set Estimated Complete Date for a Work Ordersend_ready_for_office
– Set Work Order to RFO Statussend_checkin
– Send Check In Data
get_all_orders
– Sending New Orders
The get_all_orders event is meant to send all open orders assigned to the account. The optional timestamp
field in the event_data
is used to only send new or modified orders after the timestamp sent. The timestamp is UTC time. If the integrator’s system can support it, this can reduce the amount of data being accessed and sent.
Field | Type | Description |
---|---|---|
timestamp | string | Unix timestamp |
Request payload JSON - get_all_orders
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2ba2e-f638275db4f",
"event_name": "get_all_orders",
"event_data": "{\"timestamp\":\"1491699142\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2ba2e-f638275db4f",
"event_name": "get_all_orders",
"event_data": "{\"timestamp\":\"1491699142\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
The response will contain an array of objects for each work order. The result data will have the report_id
, wo_number
, org_wo_num
, wo_status
, and transaction_id
. PPW uses the report_id
to track the order and return the results back to the correct order. The report_id
should be a unique ID from the integrator’s system. The report_id
needs to be an unsigned integer. The wo_number
needs to be a unique value for the client company the import is assigned to in PPW. Because multiple client companies could have the same wo_number
, this field is not verified to be unique across the users PPW account, just to the client company assigned to the PPWL import.
Field descriptions.
Field Name | Type/Length | Description |
---|---|---|
report_id | number | The unique id of the work order. |
wo_number | string | The order number displayed to the user. |
org_wo_num | number | For PPW to PPW, not used for 3rd party integrator. |
wo_status | string | New orders set to Unread. Can also be Update, RTV, Complete, or Cancel. |
transaction_id | string | Unique ID. |
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error": false,
"success": true,
"return_error_msg": null,
"result_data": [{
"report_id": "12249320",
"wo_number": "import test 3-1",
"org_wo_num": "2272",
"wo_status": "Unread",
"transaction_id": "6e0fc218-d7c1-480d-82e5-0630d134a483"
},
{
"report_id": "12249453",
"wo_number": "import test 3-5",
"org_wo_num": "2298",
"wo_status": "Unread",
"transaction_id": "ba1d10ab-fe52-4022-9a7a-f92643f774bb"
},
{
"report_id": "12249455",
"wo_number": "import test 3-6",
"org_wo_num": "2299",
"wo_status": "Unread",
"transaction_id": "0b85961d-2295-42da-b0c7-36837c4f51e3"
},
{
"report_id": "12249459",
"wo_number": "import test 3-7",
"org_wo_num": "2300",
"wo_status": "Unread",
"transaction_id": "e69dc54b-c624-4943-bc9d-6bb5fec0ffd2"
},
{
"report_id": "12249473",
"wo_number": "import test 3-7",
"org_wo_num": "2301",
"wo_status": "Unread",
"transaction_id": "8cefa2e6-2f62-4715-a5df-0a6c8699fb8e"
},
{
"get_all_updates": "1"
},
{
"get_all_notes": "1"
}
]
}
Based on the result of the get_all_orders
event, any new orders will be requested using the get_order
event.
If a transaction_id is passed PPW will respond with a ack_transaction event after the event has been processed. If a new work order is being sent, the acknowledgement will not come until after the get_order
event has been called. The same transaction_id should be passed in the get_order event as was passed in the get_all_orders event.
If a duplicate order is detected in the get_all_orders
event and a transaction_id is passed, PPW will respond with an ack_transaction
event indicating the transaction_id and the reason why the order could not be imported.
If an object is sent with the value get_all_updates set to 1, then PPW will queue an event called get_all_updates
. This event is described below in the Update Existing Orders section. Order updates can be sent with either the get_all_orders
or get_all_updates
event. This functionality allows the integrator to decide how the process is handled and logically separate them.
If an object is sent with the value get_all_notes set to 1, then PPW will queue an event called get_all_notes
. Check
get_all_updates
– Update Existing Orders
Work orders can be updated by sending the order again in the get_all_orders
event with a specific wo_status and additional information about what needs updated. PPW will check that the work order is valid and still in an open status. The work order will not be updated if its status is Ready for Office, Invoiced, or Complete. If the field is the same, it will not be updated. The exception is the line_items
. These will always replace the existing items. If the work order is updated, a new import log will be saved.
Fields that can be updated are
- address
- loan_type_other
- city
- lock_code
- comments
- lot_size
- cust_text
- mortgage_name
- date_due
- start_date
- key_code
- state
- line_items
- vendor_id
- loan_number
- zip
Field | Type | Description |
---|---|---|
timestamp | string | Unix timestamp |
Request payload JSON - get_all_updates
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2ba2e-f638275db4f",
"event_name": "get_all_updates",
"event_data": "{\"timestamp\":\"1491699142\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2ba2e-f638275db4f",
"event_name": "get_all_updates",
"event_data": "{\"timestamp\":\"1491699142\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error": false,
"success": true,
"return_error_msg": null,
"result_data": [{
"report_id": "12249320",
"wo_number": "import test 3-1",
"org_wo_num": "2272",
"wo_status": "Update",
"update_field": "lot_size",
"update_value": "45,000 sqft",
"transaction_id": "57965ecc-524a-11e9-8647-d663bd873d93"
},
{
"report_id": "12249453",
"wo_number": "import test 3-5",
"org_wo_num": "2298",
"wo_status": "Update",
"update_field": "vendor_id",
"update_value": "johnsmith",
"transaction_id": "62163786"
}
]
}
Field Name | Type/Length | Description |
---|---|---|
report_id | number | The unique id of the order. Must be an integer. |
wo_number | string | The work order number displayed to the user. |
org_wo_num | number | Not required. Is not used. |
wo_status | string | For updating orders, should be set to Update |
update_field | string | Field to update. |
update_value | string | New value for the field. |
transaction_id | string | Transaction ID from integrator. Must be unique. |
Complete or Cancel Orders
Work orders can be marked complete or canceled using the wo_status of Complete or Cancel.
Response JSON
{
"remote_site_id":"1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error":false,
"success":true,
"return_error_msg":null,
"result_data":[
{
"report_id":"12249320",
"wo_number":"import test 3-1",
"org_wo_num":"2272",
"wo_status":"Complete",
"transaction_id":"57965ecc-524a-11e9-8647-d663bd873d93"
}
]
}
Field Name | Type | Description |
---|---|---|
report_id | number | The unique id of the order. Must be an integer. |
wo_number | string | The work order number displayed to the user. |
org_wo_num | number | Not required. Is not used. |
wo_status | string | Should be set to Complete or Cancel |
update_field | string | Not used for this status. |
update_value | string | Not used for this status. |
transaction_id | string | Transaction ID from integrator. Must be unique. |
Return to Vendor (Follow Up)
Work orders can be returned to the vendor (RTV) by setting the wo_status to RTV. The reason for the followup can be passed in the update_value field.
Response JSON
{
"remote_site_id":"1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error":false,
"success":true,
"return_error_msg":null,
"result_data":[
{
"report_id":"12249320",
"wo_number":"import test 3-1",
"org_wo_num":"2272",
"wo_status":"RTV",
"update_field":"",
"update_value":"Take better photos of exterior debris.",
"transaction_id":"57965ecc-524a-11e9-8647-d663bd873d93"
}
]
}
Field Name | Type | Description |
---|---|---|
report_id | number | The unique id of the order. Must be an integer. |
wo_number | string | The work order number displayed to the user. |
org_wo_num | number | Not required. Is not used. |
wo_status | string | Should be set to RTV |
update_field | string | Not used for RTV |
update_value | string | The comment for why the order is RTV |
transaction_id | string | Transaction ID from integrator. Must be unique. |
send_date_est
– Set Estimated Complete Date
Limited availability. Not enabled for all accounts.
Work orders that have an estimated complete date set on them will have this information automatically sent back to the originating work order.
Field | Type | Description |
---|---|---|
dst_report_id | number | Unique identifier for the work order. |
date_complete_estimate | date | Y/m/d Format Date |
Request payload JSON - send_date_est
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_date_est",
"event_data": " {\"dst_report_id\":\"12249481\",\"date_complete_estimate\":\"20200402\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_date_est",
"event_data": "{\"dst_report_id\":\"12249481\",\"date_complete_estimate\":\"20200402\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"success": true,
"return_error_msg": null,
"result_data": null,
"remote_org_id": 283,
"error": false
}
send_ready_for_office
– Set Ready for Office
Work orders are set as ready for Office using the send_ready_for_office
event. This will validate the work order PCR forms, photos and any other requirements set by the PPW customer. Only the dst_report_id
is passed. The result will contain any errors the function returned. These are the same errors that would normally be returned when setting a work order as Ready for Office from the website.
Field | Type | Description |
---|---|---|
dst_report_id | number | Unique identifier for the work order. |
Request payload JSON - send_ready_for_office
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_ready_for_office",
"event_data": "{\"dst_report_id\":\"12249481\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_ready_for_office",
"event_data": "{\"dst_report_id\":\"12249481\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Reponse JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"success": true,
"return_error_msg": null,
"result_data": {
"error": [],
"cell_updates": [{
"report_id": "12249481",
"cell_id": "wo_status",
"new_value": "Ready for Office",
"class": "wo_status__ready"
}],
"error_reportid": [],
"records_updated": "1",
"ready_update": "07-14-2025 10:52 AM by USER",
"log_code": "10|10111120:s:010"
},
"remote_org_id": 283,
"error": false
}
send_checkin
– Sending Check In Data
The check in data sent will always include the latitude, longitude, and timestamp. The accuracy, high accuracy and misc_data may not always be available based on the type of check in for the work order. The standard PPW check in will not have data in msic_data. Work orders set to AGS or ServiceLink check in, will contain additional data in JSON format.
The details of the JSON object are described below.
Field Name | Description |
---|---|
dst_report_id | The report_id file is being uploaded to. |
checkin_data | List of check in data points |
Check In Data
Field Name | Description |
---|---|
bg_check_id | The ID of the check in on your system. |
checkin_ts | Date/time of the check in. |
gps_lat | Latitude of check in. |
gps_lng | Longitude of check in. |
gps_accuracy | Accuracy of the check in. In meters. |
gps_high_accuracy | Was GPS high accuracy on. Will not be set for iOS devices. Varies by device on Android. |
misc_data | For AGS check in, contains the data sent to AGS. Test completing orders with AGS check ins to check format. |
Request payload JSON - send_checkin
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_checkin",
"event_data": " {\"dst_report_id\":\"12249481\",\"checkin_data\":{\"bg_check_id\":null,\"ch eckin_ts\":\"2019-02-01 06:42:17\",\"gps_lat\":\"38.2078462\",\"gps_lng\":\"-65.1647053\",\"gps_accuracy\":\"23\",\"gps_high_accuracy\":\"\",\"misc_data \":\"\"}}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_checkin",
"event_data": "{\"dst_report_id\":\"12249481\",\"checkin_data\":{\"bg_check_id\":null,\"checkin_ts\":\"2019-02-01 06:42:17\",\"gps_lat\":\"38.2078462\",\"gps_lng\":\"-65.1647053\",\"gps_accuracy\":\"23\",\"gps_high_accuracy\":\"\",\"misc_data\":\"\"}}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Reponse JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"success": true,
"return_error_msg": null,
"result_data": null,
"remote_org_id": 283,
"error": false
}
PCR Form
send_pcr_answers
– Send PCR Resultssend_photo_flag
– Associate (flag) photos to PCR Questions and Bid/Comp Items
send_pcr_answers
– Sending PCR Results
The PCR form results are sent using the information from the PCR forms JSON. The question data type and the question ID is sent with every answer object.
Request payload JSON - send_pcr_answers
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_pcr_answers",
"event_data": "{\"dst_report_id\":\"14413749\",\"pcr_form_id\":\"76\",\"pcr_ form_rows\":[ {\"pcr_question_id\":\"6716\",\"question_data_type\":\"varchar\",\"varchar_ value\":\"hello!!!\"},{\"pcr_question_id\":\"14243098\",\"question_data_type\":\"varchar\", \"varchar_value\":\"nothing to see here\"}, {\"pcr_question_id\":\"14243099\",\"question_data_type\":\"int\",\"int_valu e\":\"30932050\"}, {\"pcr_question_id\":\"1027910\",\"question_data_type\":\"date\",\"date_value\":\"2017-04-06\"}, {\"pcr_question_id\":\"877651\",\"question_data_type\":\"longtext\",\"longtext_value\":\"hello!!!\"} ]}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_pcr_answers",
"event_data": "{\"dst_report_id\":\"14413749\",\"pcr_form_id\":\"76\",\"pcr_form_rows\":[{\"pcr_question_id\":\"6716\",\"question_data_type\":\"varchar\",\"varchar_value\":\"hello!!!\"},{\"pcr_question_id\":\"14243098\",\"question_data_type\":\"varchar\",\"varchar_value\":\"nothing to see here\"},{\"pcr_question_id\":\"14243099\",\"question_data_type\":\"int\",\"int_value\":\"30932050\"},{\"pcr_question_id\":\"1027910\",\"question_data_type\":\"date\",\"date_value\":\"2017-04-06\"},{\"pcr_question_id\":\"877651\",\"question_data_type\":\"longtext\",\"longtext_value\":\"hello!!!\"}]}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Question type checkbox requires each answer to be sent as an individual record in the event data. There will be multiple entries for the pcr_question_id. An example payload is below. The first three entries represent what the data should look like.
Request payload JSON - checkbox example - send_pcr_answers
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_pcr_answers",
"event_data": "{\"dst_report_id\":\"14413749\",\"pcr_form_id\":\"76\",\"pcr_ form_rows\":[ {\"pcr_question_id\":\"6716\",\"question_data_type\":\"int\",\"int_value\": \"1\"},{\"pcr_question_id\":\"6716\",\"question_data_type\":\"int\",\"int_va lue\":\"2\"}, {\"pcr_question_id\":\"6716\",\"question_data_type\":\"int\",\"int_value\":\"3\"}, {\"pcr_question_id\":\"6717\",\"question_data_type\":\"date\",\"date_value\":\"2017-04-06\"}, {\"pcr_question_id\":\"6718\",\"question_data_type\":\"longtext\",\"longtex t_value\":\"hello!!!\"} ]}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_pcr_answers",
"event_data": "{\"dst_report_id\":\"14413749\",\"pcr_form_id\":\"76\",\"pcr_form_rows\":[{\"pcr_question_id\":\"6716\",\"question_data_type\":\"int\",\"int_value\":\"1\"},{\"pcr_question_id\":\"6716\",\"question_data_type\":\"int\",\"int_value\":\"2\"},{\"pcr_question_id\":\"6716\",\"question_data_type\":\"int\",\"int_value\":\"3\"},{\"pcr_question_id\":\"6717\",\"question_data_type\":\"date\",\"date_value\":\"2017-04-06\"},{\"pcr_question_id\":\"6718\",\"question_data_type\":\"longtext\",\"longtext_value\":\"hello!!!\"}]}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
send_photo_flag
– Sending Photo Flag Info
Associating photos with Bid/Completion items or PCR questions is called “flagging” in PPW. To flag photos to PCR questions, you must send a request with the following fields.
Field Name | Description |
---|---|
dst_report_id | The report_id file is being uploaded to. |
pcr_form_id | The PCR form ID. |
question_data | This is a JSON array of objects with flagging info. |
The photo flagging details are described below.
Field Name | Description |
---|---|
file_id | The original file_id sent with the photo. |
pcr_question_id | The PCR question ID. |
work_type | For PCR forms this must be set to “pc”. |
Request payload JSON - send_photo_flag
{
"username":"demo",
"password":"da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id":"dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name":"send_photo_flag",
"event_data":"{\"dst_report_id\":\"12249481\",\"pcr_form_id\":\"10086\",\"question_data\":[
{\"file_id\":\"1130171565\",\"pcr_question_id\":\"877651\",\"work_type\":\" pc\"},
{\"file_id\":\"1130171566\",\"pcr_question_id\":\"877651\",\"work_type\":\" pc\"},
{\"file_id\":\"1130171567\",\"pcr_question_id\":\"877652\",\"work_type\":\" pc\"}]}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_photo_flag",
"event_data": "{\"dst_report_id\":\"12249481\",\"pcr_form_id\":\"10086\",\"question_data\":[{\"file_id\":\"1130171565\",\"pcr_question_id\":\"877651\",\"work_type\":\"pc\"},{\"file_id\":\"1130171566\",\"pcr_question_id\":\"877651\",\"work_type\":\"pc\"},{\"file_id\":\"1130171567\",\"pcr_question_id\":\"877652\",\"work_type\":\"pc\"}]}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Multiple photos can flagged in a single call. There is no limit on the number of records that can be sent at once.
Send Results Bid/Comp & Invoice Items
send_bid_comp
– Send Bid/Completion Resultssend_contractor_invoice
– Send Contractor Invoicebid_comp_confirm
– Send Empty Bid/Comp Confirmation
send_bid_comp
– Sending Bid/Completion Results
Bid and Completion items are sent using the send_bid_comp
event. An item can be flagged as a bid and a completion in the same call. Or you can send them in separate calls. The ability to have a bid and completion tied to the same comp_note_id is for legacy support.
Request payload JSON - send_bid_comp
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_bid_comp",
"event_data": "{\"dst_report_id\":\"123456789\",\"dest_invoice_item_id\":\"\",\"src_invoice_item_id\":\"101\",\"invoice_item_desc\":\"HVAC\",\"qty_bid\":\"1\",\"client_price_bid\":\"360.00\",\"bid_note\":\"Service furnace and AC unit.\",\"qty_comp\":\"\",\"comp_note\":\"\",\"photo_flag_data\":[{\"file_id\":\"1506814912\",\"work_type\":\"b\",\"stage\":\"b\"},{\"file_id\":\"1506814913\",\"work_type\":\"c\",\"stage\":\"b\"},{\"file_id\":\"1506814914\",\"work_type\":\"c\",\"stage\":\"i\"},{\"file_id\":\"1506814915\",\"work_type\":\"c\",\"stage\":\"a\"}],\"remote_id\":\"\",\"total_items\":5,\"cur_index\":2}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_bid_comp",
"event_data": "{\"dst_report_id\":\"123456789\",\"dest_invoice_item_id\":\"\",\"src_invoice_item_id\":\"101\",\"invoice_item_desc\":\"HVAC\",\"qty_bid\":\"1\",\"client_price_bid\":\"360.00\",\"bid_note\":\"Service furnace and AC unit.\",\"qty_comp\":\"\",\"comp_note\":\"\",\"photo_flag_data\":[{\"file_id\":\"1506814912\",\"work_type\":\"b\",\"stage\":\"b\"},{\"file_id\":\"1506814913\",\"work_type\":\"c\",\"stage\":\"b\"},{\"file_id\":\"1506814914\",\"work_type\":\"c\",\"stage\":\"i\"},{\"file_id\":\"1506814915\",\"work_type\":\"c\",\"stage\":\"a\"}],\"remote_id\":\"\",\"total_items\":5,\"cur_index\":2}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
The details of the JSON object are described below.
Field Name | Description |
---|---|
comp_note_id | Unique ID from PPW system. |
report_id | The report_id file is being uploaded to. |
dst_invoice_item_id | The item_id from the event get_invoice_items_order. If the item is not in the list and is “Other,” this value should be null. |
src_invoice_item_id | The invoice_item_id from the local PPW account. If the item is an “Other” item then this value should be 0. |
invoice_item_desc | If the item is an “Other” item or not in the list of defined items from get_invoice_items_order, this field should be filled in. |
qty_bid | Quantity of items for the bid. If there is a value in this field, the item will be set as a bid. |
client_price_bid | The per item price for the bid. |
bid_note | Any notes or comments for the bid. |
qty_comp | Quantity of items for the completion. If there is a value in this field, the item will be set as a completion. |
comp_note | Any notes or comments for the completion. |
remote_id | The comp_note_id from the response object. If this is set, the existing Bid/Comp item will be updated. |
photo_flag_data | An array of objects that indicates how photos are flagged to the bid or completion item. |
total_items | When bid/comp items are sent from PPW, the total added to the queue will be in this field. |
cur_index | When total_items is set from PPW, this will be the number of the current item being sent. Ex total_items = 5 cur_index = 3. |
Photo Flag Data Fields
Field Name | Description |
---|---|
file_id | The file_id for the photo. This file_id should match the file_id from the send_file event. |
work_type | This can be a “b” for bid or “c” for completion. |
stage | If the work_type is “b” then this will always be set to “b”. If “c,” then can be “b” (before), “i” (in progress), or “a” (after). |
The response result_data will contain the comp_note_id of the created record. This comp_note_id can be used to update the item if needed. Bid/Comp items can only be updated while order is open and still assigned to the contractor.
Response JSON
{
"remote_site_id":"1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error":false,
"success":true,
"return_error_msg":null,
"result_data": {"comp_note_id":10161276}
}
bid_comp_confirm
– Sending Empty Bid/Completion Confirmation
If the option Send Empty Bid/Comp Confirmation is enabled in the Auto Import setup in PPW and the order contains no Bid/Comp items to send, an event called bid_comp_confirm will be sent. The event_data will contain the report_id of the order.
Field | Type | Description |
---|---|---|
dst_report_id | number | Unique identifier for the work order. |
Request payload JSON - bid_comp_confirm
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "bid_comp_confirm",
"event_data": "{\"dst_report_id\": \"123456789\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "bid_comp_confirm",
"event_data": "{\"dst_report_id\": \"123456789\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
send_contractor_invoice
– Sending Contractor Invoice
The contractor invoice is mapped from your system to PPW by using the invoice_item_id from the get_invoice_items_order
function.
The details of the JSON object are described below.
Field Name | Description |
---|---|
dst_report_id | The report_id file is being uploaded to. |
dst_invoice_item_id | A list of items to map the invoice lines invoice_item_id to on the destination invoice. Each object should contain the line_id and the item you want selected in PPW. If you want to use the “Other” option, set the value to “other”. |
comment | The invoice comments. |
invoice_lines | A list of the invoice lines. Reference Table Below |
Invoice Lines
Field Name | Description |
---|---|
line_id | The ID of the line on your system. Sending the same line_id updates it. |
invoice_item_id | The ID of the item on your system. |
quantity | Enter the quantity of the invoice line. Number with 2 decimal places. |
price | The price for the item. Not a total, but the single quantity price. |
item_desc | This is used if the “Other” item is used. |
flat_fee | If the line is charged as a flat fee. No discount will be removed. |
Request payload JSON - send_contractor_invoice
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_contractor_invoice",
"event_data": "{\"dst_report_id\":\"12250009\",\"dst_invoice_item_ids\":{\"12880771\":\"***other***\"},\"comment\":\"\",\"invoice_lines\":[{\"line_id\":\"12880771\",\"invoice_item_id\":\"42766\",\"quantity\":\"1.00\",\"price\" :\"500.00\",\"item_desc\":\"REO Package - Basic\",\"flat_fee\":\"0\"}]}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_contractor_invoice",
"event_data": "{\"dst_report_id\":\"12250009\",\"dst_invoice_item_ids\":{\"12880771\":\"***other***\"},\"comment\":\"\",\"invoice_lines\":[{\"line_id\":\"12880771\",\"invoice_item_id\":\"42766\",\"quantity\":\"1.00\",\"price\":\"500.00\",\"item_desc\":\"REO Package - Basic\",\"flat_fee\":\"0\"}]}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"success": true,
"return_error_msg": null,
"result_data": {
"line_ids_cont": {
"invoice_id": 12345,
"line_ids": [9876]
}
},
"remote_org_id": 283,
"error": false
}
Send Results Photo/Docs
send_file
– Send Photo/File
send_file
– Sending a Photo or File
Attaching photos or files to a work order is done through the send_file
event.
Files can be sent two ways.
- Files should be sent using multipart/form-data with the “file” field name. The POST data should contain four fields. The
dst_report_id
,file_id
,file_name
, andfile_area
.
Request payload JSON - multipart/form-data
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_file",
"event_data": "{\"dst_report_id\":\"12249481\",\"file_id\":\"1130171565\",\"file_area\":\"0\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_file",
"event_data": "{\"dst_report_id\":\"12249481\",\"file_id\":\"1130171565\",\"file_area\":\"0\"}"
}' \
https://devas.propertypreswizard.com/main/api/link/receiver.php
- A URL accessible to PPW can be sent in the payload for the image and thumbnail. When PPW sends results back to a third party, this method is used.
Field Name | Description |
---|---|
dst_report_id | The report_id file is being uploaded to. |
file_id | The file_id from the integrator. Used to flag photos to PCR questions. Must be unique. |
file_name | The file name, including the extension. Used to check allowed file types. |
file_area | Indicates photo or file upload. 0 = photo, 1 = file. |
s3_url | A URL accessible to PPW. |
s3_url_thumb | A URL accessible to PPW. |
Request Payload JSON - URL Accessible
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_file",
"event_data": "{\"dst_report_id\":\"12249481\",\"file_id\":\"1130171565\",\"file_area\":\"0\",\"file_name\":\"example.jpg\",\"s3_url\":\"https://your-bucket.s3.amazonaws.com/example.jpg\",\"s3_url_thumb\":\"https://your-bucket.s3.amazonaws.com/example_thumb.jpg\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_file",
"event_data": "{\"dst_report_id\":\"12249481\",\"file_id\":\"1130171565\",\"file_area\":\"0\",\"file_name\":\"example.jpg\",\"s3_url\":\"https://your-bucket.s3.amazonaws.com/example.jpg\",\"s3_url_thumb\":\"https://your-bucket.s3.amazonaws.com/example_thumb.jpg\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
The file_id passed to the PPWL web service should be the unique ID from the integrator’s system. When photos are flagged to Bid/Completion items or PCR form questions, the integrator will send the same ID from their end and PPWL will look up the information and associate the photos correctly.
Allowed File Types
Extension | Mime Type | File Area |
---|---|---|
jpg | image/jpeg | 0 |
jpeg | image/jpeg | 0 |
png | image/png | 1 |
gif | image/gif | 1 |
application/pdf | 1 | |
doc | application/msword | 1 |
docx | application/vnd.openxmlformats-officedocument.wordprocessingml.document | 1 |
ppt | application/vnd.ms-powerpoint | 1 |
pptx | application/vnd.openxmlformats-officedocument.presentationml.presentation | 1 |
pps | application/vnd.ms-powerpoint | 1 |
ppsx | application/vnd.openxmlformats-officedocument.presentationml.slideshow | 1 |
odt | application/vnd.oasis.opendocument.text | 1 |
xls | application/vnd.ms-excel | 1 |
xlsx | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet | 1 |
key | application/pgp-keys | 1 |
zip | application/zip | 1 |
mp3 | audio/mpeg | 1 |
wav | audio/x-wav | 1 |
mp4 | video/mp4 | 1 |
wmv | x-ms-wmv | 1 |
avi | video/x-msvideo | 1 |
mpg | video/mpeg | 1 |
txt | text/plain | 1 |
msg | application/vnd.ms-outlook | 1 |
eml | message/rfc822 | 1 |
jxr | image/vnd.ms-photo | 1 |
Job Notes
send_notes
– Send Job Note(s)get_all_notes
– Get All Job Note(s)
send_notes
– Send Job Notes
Job Notes can now be sent back to the client by initiating the send_notes event. Note MUST be wrapped in a note object. View the Request Payload below for an example.
The details of the JSON object are described below.
Field Name | Description | Required |
---|---|---|
dst_report_id | The Report ID in which the note will be added to | yes |
note | Array of note objects | yes |
Note object fields
Field Name | Description | Required |
---|---|---|
note_id | Note ID of which we fetched the data from. Used for tracking as well | yes |
note_rev | Only required if a revision of a note. This is the Parent Note ID | no |
note_type | wo = Work Order. prop = Property Note | yes |
note_text | Text of the note | yes |
insert_date | Original Insertion time of the note | no |
org_name | Org name from which the note originated from. Used in the UI to show Imported From: <Org Name> . Default will show user who inserted the note. | no |
has_attachments | True or False if a note has attachments. This will in return trigger the get_file event | yes |
Request payload JSON – send_notes
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_notes",
"event_data": {
"dst_report_id": "12345",
"org_name": "Sample Org Name",
"module_type": "job_notes",
"note": [{
"note_id": "67890",
"note_rev": "56789",
"note_type": "wo",
"note_text": "This is a sample note text.",
"insert_date": "2025-01-06T12:00:00Z",
"has_attachments": true
}]
}
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2-ba2e-f638275db4f",
"event_name": "send_notes",
"event_data": "{\"dst_report_id\":\"12345\",\"org_name\":\"Sample Org Name\",\"module_type\":\"job_notes\",\"notes\":[{\"note_id\":\"67890\",\"note_rev\":\"56789\",\"note_type\":\"wo\",\"note_text\":\"This is a sample note text.\",\"insert_date\":\"2025-01-06T12:00:00Z\",\"has_attachments\":true},{\"note_id\":\"67891\",\"note_rev\":\"56790\",\"note_type\":\"wo\",\"note_text\":\"This is a second sample note for testing.\",\"insert_date\":\"2025-01-07T15:30:00Z\",\"has_attachments\":false}]}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"success": true,
"return_error_msg": null,
"result_data": {
"remote_note_id": 42
},
"remote_org_id": 283,
"error": false
}
Field Name | Description |
---|---|
remote_note_id | Newly created note id |
get_all_notes
– Get All Job Notes
New job notes can be sent to PPW by initiating the get_all_notes
event. See Sending New Orders for information on this.
An array of objects containing the job notes can be sent at once. These notes will be created in PPW and an acknowledgement will be sent back if a transaction_id
was sent. Job notes can be work order or property notes. The distinction in PPW is a property note will show for all orders at the same property. A work order note will only show for the specific work order it was associated with. Multiple job notes to multiple orders can all be sent at the same time.
Request payload JSON - get_all_notes
{
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2ba2e-f638275db4f",
"event_name": "get_all_notes",
"event_data": "{\"timestamp\":\"1491699142\"}"
}
curl -X POST \
--data 'payload={
"username": "demo",
"password": "da39a3ee5e6b4b0d3255bfef95601890afd80709",
"site_id": "dcc363d0-8ed1-48a2ba2e-f638275db4f",
"event_name": "get_all_notes",
"event_data": "{\"timestamp\":\"1491699142\"}"
}' \
https://www.propertypreswizard.com/api/link/receiver.php
Response JSON - get_all_notes
{
"remote_site_id": "1fc25d06-72bd-42f8-ad34-ecbdc5f1a4a4",
"error": false,
"success": true,
"return_error_msg": null,
"result_data": [{
"wo_number": "12113528",
"note_id": "rhudf-5196-dfsdf-095mwf",
"note_type": "wo",
"note_text": "Test Note. 1",
"note_from": "XFS",
"transaction_id": "sd1sdf-1624-dfsdf-435fgdf"
},
{
"wo_number": "12113528",
"note_id": "sds1df-5196-dfsdf-435fgdf",
"note_type": "wo",
"note_text": "Test Note. 2",
"note_from": "XFS",
"transaction_id": "sd2sdf-5656-dfsdf-435fgdf"
}
]
}
Field Name | Type/Length | Description |
---|---|---|
wo_number | string | The work order number sent previously. Must exist in PPW account. |
note_id | string | Unique note_id from integrator. Checked for dupes by PPW. |
note_type | string | Can be wo or prop. |
note_text | string | Text of the note. |
note_from | string | Who the note will display as being from. |
transaction_id | string | Transaction ID from integrator. Must be unique. |