Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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.

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 NameTypeDescription
usernamestringThe PPW account user name
password stringThe PPW account password
site_iduuidv4The unique site_id. Valid v4 UUID
event_namestringThe event or action being completed.
event_datastringThe 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 NameType/LengthDescription
remote_site_id uuidv4The unique site_id.
error booleanTrue or false.
success booleanTrue or false
return_error_msgstringIf error is true, contains error message.
result_data stringThe 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

Data Flow

Authentication

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 – Get Open Orders

Work orders that are in the status Unread, In Field, Follow Up, Accepted, and Rejected are sent through this action.

FieldTypeDescription
timestampstringUnix 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 NameType/LengthDescription
report_idnumberThe unique id of the order. Must be an integer.
wo_numberstringThe work order number displayed to the user.
org_wo_numnumberNot required. Is not used.
wo_statusstringFor 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.

FieldTypeDescription
timestampstringUnix 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 NameType/LengthDescription
report_idnumberThe unique id of the order. Must be an integer.
wo_numberstringThe work order number displayed to the user.
org_wo_numnumberNot required. Is not used.
wo_statusstringFor new orders, should be set to Unread
cancel_timestampstringUnix 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
FieldTypeDescription
timestampstringUnix 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 NameType/LengthDescription
report_idnumberThe unique id of the order. Must be an integer.
wo_numberstringThe work order number displayed to the user.
org_wo_numnumberThe PPW # for the work order.
wo_statusstringWill be set to the work order status. Follow Up orders will be set to RTV
update_fieldstringField to update.
update_valuestringNew value for the field.

get_order – Get Work Order

The work order info, line items and PCR forms are sent using this event.

FieldTypeDescription
report_idnumberUnique 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:

FieldTypeDescription
remote_report_idnumberUnique 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 NameType/LengthDescription
s3_urlstringURL to the photo in S3
file_metadataobjectMetadata for the file

File metadata fields

Field NameType/LengthDescription
file_sizenumberFile 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.

FieldTypeDescription
report_idnumberUnique 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

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 NameTypeDescription
pcr_form_idnumberThe unique id of the form.
form_idstringThe 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_idnumberThe version of the form.
form_requirednumberIf 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 NameType/LengthDescription
pcr_form_id numberThe unique id of the form.
org_id numberThe internal ID of the company in PPW.
pcr_form_name stringThe name of the form.
default_required boolean1 or 0. If form is required by default on new orders.
form_photos_requiredbooleanNo longer used. In photo rules information.
transfer_prev_valuesbooleanNo longer used. In question information.
form_share_name stringAlphanumeric 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 NameType/LengthDescription
pcr_question_id numberThe unique id of the question.
pcr_form_id numberThe form the question is associated with.
question_num stringNo longer used.
question_name stringQuestion displayed to the end user.
question_desc stringCurrently not used.
question_type stringThe type of question. See below for descriptions.
question_data_type stringThe data type as stored in database.
question_display_active booleanIs the question shown by default. If not a rule may make it display active.
question_required booleanIs the question required by default. Questions not shown are never required.
question_na_option booleanNo longer used.
question_flag_photos booleanNo longer used. Use photo rules.
question_photos_required booleanNo longer used. Use photo rules.
question_active booleanIs question active. In-active questions will not be used or shown.
question_deleted booleanIf question is deleted. Deleted questions are no longer shown on form builder.
question_form_length stringUsed for displaying a friendly field size on web. Does not affect PPW mobile app.
question_order numberThe order of the questions. Ordered in ascending.
pdf_field_id stringUsed for custom PDF fields.
thirdpartyfield_id stringNA
question_share_name stringAlphanumeric version of question.
question_transfer_prev_values booleanCan the user copy previous form answers.
question_show_prev_values booleanIs the previous answer displayed.
question_auto_transfer_prev_valuesbooleanIs the previous answer automatically filled in.
*_rules_cnt numberA total for each rule type. Helpful metadata.
The PCR form question types are described below.
Question TypeDescription
checkbox Multiple options shown at once, multiple can be selected.
date A date is required. Normally calendar selector is shown.
dropdown, radioMultiple 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 TypeDescription
numberAn integer. Used for checkbox, dropdown, and radio. Stores the answer as the internal PPW id for the option.
numberA number but with decimals to 2 places.
stringText limited to 255.
dateA valid date.
stringLong 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 NameDescription
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_activeIf 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 NameDescription
pcr_form_rule_idThe 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 OperatorDescription
= 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_thanTextbox 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 NameDescription
pcr_rule_check_idThe 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 NameDescription
pcr_photo_rule_idThe 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

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.

FieldTypeDescription
report_idnumberUnique 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.

FieldTypeDescriptionRequired
remote_report_idnumberReport_id of which the document will be added/inserted intoNo
report_idnumberReport_id of which the document originated fromYes
module_typestringType 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
}
FieldTypeDescription
file_namestringFile name
file_typestringMIME-type indentifier
file_sizenumberFile size
file_descstringDocument description (if any)
s3_urlstringURL to the S3 Object.
s3_url_thumbstringURL to the thumbnail (if applicable)
org_namestringOrg name of which the file originated from.
importednumberAlways 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.

FieldTypeDescriptionRequired
remote_report_id numberReport_id of which the note will be added/inserted intoNo
report_idnumberReport_id of which the note originated fromYes

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 NameDescription
note_idNote_id of which we fetched the data from.
note_revOriginal note_id from which this edit stemmed from.
report_id Report_id in which the note was originally created.
remote_report_idReport_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 – 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.

FieldTypeDescription
timestampstringUnix 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 NameType/LengthDescription
report_id numberThe unique id of the work order.
wo_number stringThe order number displayed to the user.
org_wo_num numberFor PPW to PPW, not used for 3rd party integrator.
wo_status stringNew orders set to Unread. Can also be Update, RTV, Complete, or Cancel.
transaction_idstringUnique 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
FieldTypeDescription
timestampstringUnix 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 NameType/LengthDescription
report_id numberThe unique id of the order. Must be an integer.
wo_number stringThe work order number displayed to the user.
org_wo_num numberNot required. Is not used.
wo_status stringFor updating orders, should be set to Update
update_field stringField to update.
update_value stringNew value for the field.
transaction_idstringTransaction 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 NameTypeDescription
report_id numberThe unique id of the order. Must be an integer.
wo_number stringThe work order number displayed to the user.
org_wo_num numberNot required. Is not used.
wo_status stringShould be set to Complete or Cancel
update_field stringNot used for this status.
update_value stringNot used for this status.
transaction_idstringTransaction 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 NameTypeDescription
report_id numberThe unique id of the order. Must be an integer.
wo_number stringThe work order number displayed to the user.
org_wo_num numberNot required. Is not used.
wo_status stringShould be set to RTV
update_field stringNot used for RTV
update_value stringThe comment for why the order is RTV
transaction_idstringTransaction 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.

FieldTypeDescription
dst_report_idnumberUnique identifier for the work order.
date_complete_estimatedateY/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.

FieldTypeDescription
dst_report_idnumberUnique 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 NameDescription
dst_report_idThe report_id file is being uploaded to.
checkin_dataList of check in data points

Check In Data

Field NameDescription
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_accuracyWas 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 – 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 NameDescription
dst_report_idThe report_id file is being uploaded to.
pcr_form_id The PCR form ID.
question_dataThis is a JSON array of objects with flagging info.

The photo flagging details are described below.

Field NameDescription
file_id The original file_id sent with the photo.
pcr_question_idThe 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 – 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 NameDescription
comp_note_id Unique ID from PPW system.
report_id The report_id file is being uploaded to.
dst_invoice_item_idThe 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_idThe 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 NameDescription
file_id The file_id for the photo. This file_id should match the file_id from the send_file event.
work_typeThis 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.

FieldTypeDescription
dst_report_idnumberUnique 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 NameDescription
dst_report_id The report_id file is being uploaded to.
dst_invoice_item_idA 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”.
commentThe invoice comments.
invoice_linesA list of the invoice lines. Reference Table Below

Invoice Lines

Field NameDescription
line_id The ID of the line on your system. Sending the same line_id updates it.
invoice_item_idThe 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 – 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.

  1. 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, and file_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

  1. 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 NameDescription
dst_report_idThe 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

ExtensionMime TypeFile Area
jpgimage/jpeg0
jpegimage/jpeg0
pngimage/png1
gifimage/gif1
pdfapplication/pdf1
docapplication/msword1
docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document1
pptapplication/vnd.ms-powerpoint1
pptxapplication/vnd.openxmlformats-officedocument.presentationml.presentation1
ppsapplication/vnd.ms-powerpoint1
ppsxapplication/vnd.openxmlformats-officedocument.presentationml.slideshow1
odtapplication/vnd.oasis.opendocument.text1
xlsapplication/vnd.ms-excel1
xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet1
keyapplication/pgp-keys1
zipapplication/zip1
mp3audio/mpeg1
wavaudio/x-wav1
mp4video/mp41
wmvx-ms-wmv1
avivideo/x-msvideo1
mpgvideo/mpeg1
txttext/plain1
msgapplication/vnd.ms-outlook1
emlmessage/rfc8221
jxrimage/vnd.ms-photo1

Job Notes

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 NameDescriptionRequired
dst_report_idThe Report ID in which the note will be added toyes
noteArray of note objectsyes

Note object fields

Field NameDescriptionRequired
note_idNote ID of which we fetched the data from. Used for tracking as wellyes
note_revOnly required if a revision of a note. This is the Parent Note IDno
note_typewo = Work Order. prop = Property Noteyes
note_textText of the noteyes
insert_dateOriginal Insertion time of the noteno
org_nameOrg 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_attachmentsTrue or False if a note has attachments. This will in return trigger the get_file eventyes

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 NameDescription
remote_note_idNewly 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 NameType/LengthDescription
wo_numberstringThe work order number sent previously. Must exist in PPW account.
note_idstringUnique note_id from integrator. Checked for dupes by PPW.
note_typestringCan be wo or prop.
note_textstringText of the note.
note_fromstringWho the note will display as being from.
transaction_idstringTransaction ID from integrator. Must be unique.