curl --request POST \
--url https://api.investorlift.com/v3/jobs/transactions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"property_ids": [
"<string>"
],
"transactions": [
{
"property_id": "<string>",
"date": "2023-12-25",
"deal_id": "<string>"
}
],
"since": "2023-12-25",
"outcomes": [],
"detail": true,
"wait": 10
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
property_ids: ['<string>'],
transactions: [{property_id: '<string>', date: '2023-12-25', deal_id: '<string>'}],
since: '2023-12-25',
outcomes: [],
detail: true,
wait: 10
})
};
fetch('https://api.investorlift.com/v3/jobs/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.investorlift.com/v3/jobs/transactions"
payload = {
"property_ids": ["<string>"],
"transactions": [
{
"property_id": "<string>",
"date": "2023-12-25",
"deal_id": "<string>"
}
],
"since": "2023-12-25",
"outcomes": [],
"detail": True,
"wait": 10
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": {
"job_id": "79fa768264ff3aa8569cc4ebd8772123",
"status": "done",
"n_input": 1,
"n_done": 1,
"n_steps": 1,
"created_at": "2026-10-20T23:19:38.384Z",
"started_at": "2026-10-20T23:19:38.385Z",
"finished_at": "2026-10-20T23:19:38.395Z",
"expires_at": "2026-10-21T23:19:38.384Z",
"build": {
"AZ": {
"run_id": 1792449362,
"deeds_through": "2026-09-24"
},
"CA": {
"run_id": 1790215190,
"deeds_through": "2026-09-10"
},
"FL": {
"run_id": 1790262682,
"deeds_through": "2026-09-09"
},
"TX": {
"run_id": 1790248213,
"deeds_through": "2026-09-10"
}
},
"build_moved": false,
"problem": null,
"results_url": "/v3/jobs/79fa768264ff3aa8569cc4ebd8772123/results"
},
"meta": {
"generated_at": "2026-10-20T23:19:38.016Z",
"coverage": [],
"terms": "Data: Investorlift Data Services. Public-record and MLS listing data licensed through BatchData; municipal short-term rental registries; Investorlift marketplace records. Attribution and data-use terms: https://developers.investorlift.com/guides/terms",
"build": {
"states": [
{
"state": "AZ",
"build_id": null,
"built_at": "2026-10-19T22:34:59.714Z",
"published_at": "2026-10-20T00:16:56.637Z",
"run_id": 1792449362,
"financing_as_of": "2026-06-25",
"recordings_through": "2026-06-11",
"financing_source": "replay_887",
"str_as_of": "2026-10-18"
},
{
"state": "CA",
"build_id": null,
"built_at": "2026-09-24T01:58:30.453Z",
"published_at": "2026-09-24T03:15:56.838Z",
"run_id": 1790215190,
"financing_as_of": null,
"recordings_through": null,
"financing_source": null,
"str_as_of": null
},
{
"state": "FL",
"build_id": "0e5fa9bc",
"built_at": "2026-09-24T15:08:23.506Z",
"published_at": "2026-09-24T18:59:42.805Z",
"run_id": 1790262682,
"financing_as_of": null,
"recordings_through": null,
"financing_source": null,
"str_as_of": null
},
{
"state": "TX",
"build_id": "775ed08d",
"built_at": "2026-09-24T11:08:10.587Z",
"published_at": "2026-09-24T13:16:03.157Z",
"run_id": 1790248213,
"financing_as_of": null,
"recordings_through": null,
"financing_source": null,
"str_as_of": null
}
]
}
}
}Make a job that reads the investor transactions of up to 10,000 parcels
A job over up to 10,000 parcels and transactions: the same blocks as the list form, computed in the background 500 at a time and kept for 24 hours. The answer is 202 with the record of the job, or 200 when wait held the request until the job was done.
Use it for a training set or a batch above 500. The job id is the hash of the key, the body and the build, so a repeated request answers the job that exists. Then read GET /v3/jobs/{id} and its results route.
A call costs 0 credits.
curl --request POST \
--url https://api.investorlift.com/v3/jobs/transactions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"property_ids": [
"<string>"
],
"transactions": [
{
"property_id": "<string>",
"date": "2023-12-25",
"deal_id": "<string>"
}
],
"since": "2023-12-25",
"outcomes": [],
"detail": true,
"wait": 10
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
property_ids: ['<string>'],
transactions: [{property_id: '<string>', date: '2023-12-25', deal_id: '<string>'}],
since: '2023-12-25',
outcomes: [],
detail: true,
wait: 10
})
};
fetch('https://api.investorlift.com/v3/jobs/transactions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.investorlift.com/v3/jobs/transactions"
payload = {
"property_ids": ["<string>"],
"transactions": [
{
"property_id": "<string>",
"date": "2023-12-25",
"deal_id": "<string>"
}
],
"since": "2023-12-25",
"outcomes": [],
"detail": True,
"wait": 10
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": {
"job_id": "79fa768264ff3aa8569cc4ebd8772123",
"status": "done",
"n_input": 1,
"n_done": 1,
"n_steps": 1,
"created_at": "2026-10-20T23:19:38.384Z",
"started_at": "2026-10-20T23:19:38.385Z",
"finished_at": "2026-10-20T23:19:38.395Z",
"expires_at": "2026-10-21T23:19:38.384Z",
"build": {
"AZ": {
"run_id": 1792449362,
"deeds_through": "2026-09-24"
},
"CA": {
"run_id": 1790215190,
"deeds_through": "2026-09-10"
},
"FL": {
"run_id": 1790262682,
"deeds_through": "2026-09-09"
},
"TX": {
"run_id": 1790248213,
"deeds_through": "2026-09-10"
}
},
"build_moved": false,
"problem": null,
"results_url": "/v3/jobs/79fa768264ff3aa8569cc4ebd8772123/results"
},
"meta": {
"generated_at": "2026-10-20T23:19:38.016Z",
"coverage": [],
"terms": "Data: Investorlift Data Services. Public-record and MLS listing data licensed through BatchData; municipal short-term rental registries; Investorlift marketplace records. Attribution and data-use terms: https://developers.investorlift.com/guides/terms",
"build": {
"states": [
{
"state": "AZ",
"build_id": null,
"built_at": "2026-10-19T22:34:59.714Z",
"published_at": "2026-10-20T00:16:56.637Z",
"run_id": 1792449362,
"financing_as_of": "2026-06-25",
"recordings_through": "2026-06-11",
"financing_source": "replay_887",
"str_as_of": "2026-10-18"
},
{
"state": "CA",
"build_id": null,
"built_at": "2026-09-24T01:58:30.453Z",
"published_at": "2026-09-24T03:15:56.838Z",
"run_id": 1790215190,
"financing_as_of": null,
"recordings_through": null,
"financing_source": null,
"str_as_of": null
},
{
"state": "FL",
"build_id": "0e5fa9bc",
"built_at": "2026-09-24T15:08:23.506Z",
"published_at": "2026-09-24T18:59:42.805Z",
"run_id": 1790262682,
"financing_as_of": null,
"recordings_through": null,
"financing_source": null,
"str_as_of": null
},
{
"state": "TX",
"build_id": "775ed08d",
"built_at": "2026-09-24T11:08:10.587Z",
"published_at": "2026-09-24T13:16:03.157Z",
"run_id": 1790248213,
"financing_as_of": null,
"recordings_through": null,
"financing_source": null,
"str_as_of": null
}
]
}
}
}Authorizations
API key from the developer console (starts with zpka_). Create one at https://developers.investorlift.com/get-a-key. The same key works on POST /mcp.
Body
The job form: up to 10,000 parcels and transactions in all, computed in the background.
The parcels to read, 32 hex characters each. A duplicate is answered once. The list form takes 500 parcels and transactions in all, the job form 10,000.
20000An id of the deed cut: 32 hex characters.
^[0-9a-f]{32}$The transactions to place: each a parcel id with a date, or a deal id. The parcel of a transaction joins the parcels of the request.
20000Show child attributes
Show child attributes
Keep the investor purchases dated on or after this day, YYYY-MM-DD. The set holds 20 deeds at most on a parcel, so an old purchase is absent anyway.
Keep the investor purchases of these outcomes. The counts of the block and the role of a transaction still read every investor purchase.
1The outcome of the investor purchase, one word over its resale and the data end of the state. quick_resale: the next priced deed of the parcel is 0 to 29 days after the purchase. flip: the next priced deed is 30 to 365 days after the purchase, both legs carry a price, and the resale price over the price minus one is 0.10 to 1.50. flip_window_other: the next priced deed is 30 to 365 days after the purchase, and the spread is outside that band or a leg carries no price. long_hold_sale: the next priced deed is more than 365 days after the purchase. held: no later priced deed by the data end, and the purchase is more than 365 days before the data end. open: no later priced deed by the data end, and the purchase is inside the 365 days before the data end, so the outcome is not known yet. The thresholds are the ones of the organization profile.
quick_resale, flip, flip_window_other, long_hold_sale, held, open True adds the blocks that cost a probe each: the track record of each buyer, the sellers, the buyers of the resale, the entry, the purchase loan, the exit and the owner. False, the default, answers the outcome, both legs, the flags and the investor by name and id, and reads null for the rest. The default is the fast shape.
Hold the request up to this many seconds for the job, 1 to 20. A job done in time answers 200 with its record, else 202. The job id does not read it.
1 <= x <= 20Response
The job is done inside wait: its record, with the results on the results route.
The job is done inside wait: its record, with the results on the results route.
Was this page helpful?