curl --request POST \
--url https://app.withforerunner.com/api/v1/records \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"data": {
"type": "phone",
"date": "2024-03-20",
"address": "456 Oak Ave, Springfield, IL",
"status": "open",
"contactName": "Jane Doe",
"contactEmail": "jane.doe@example.com",
"contactPhone": "(555) 987-6543",
"contactType": "homeowner",
"firmPanel": "17167C0033E",
"floodZone": "AE",
"bfe": "12.5",
"baseFloodDepth": "2",
"insuranceInfoGiven": "verbally",
"siteVisit": true,
"propertyProtectionAdvice": true,
"financialAdvice": true,
"coastalOrCBRS": true,
"pastFlood": true,
"erosion": true,
"requestedHelpWith": "Flood zone status inquiry",
"internalNotes": "<string>"
},
"recordType": "Log",
"externalSystemId": "LOG-2024-0320",
"propertyId": "a1b2c3d4-e5f6-4890-abcd-ef0123456789",
"coordinates": [
39.7817,
-89.6501
]
}
'import requests
url = "https://app.withforerunner.com/api/v1/records"
payload = {
"data": {
"type": "phone",
"date": "2024-03-20",
"address": "456 Oak Ave, Springfield, IL",
"status": "open",
"contactName": "Jane Doe",
"contactEmail": "jane.doe@example.com",
"contactPhone": "(555) 987-6543",
"contactType": "homeowner",
"firmPanel": "17167C0033E",
"floodZone": "AE",
"bfe": "12.5",
"baseFloodDepth": "2",
"insuranceInfoGiven": "verbally",
"siteVisit": True,
"propertyProtectionAdvice": True,
"financialAdvice": True,
"coastalOrCBRS": True,
"pastFlood": True,
"erosion": True,
"requestedHelpWith": "Flood zone status inquiry",
"internalNotes": "<string>"
},
"recordType": "Log",
"externalSystemId": "LOG-2024-0320",
"propertyId": "a1b2c3d4-e5f6-4890-abcd-ef0123456789",
"coordinates": [39.7817, -89.6501]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: {
type: 'phone',
date: '2024-03-20',
address: '456 Oak Ave, Springfield, IL',
status: 'open',
contactName: 'Jane Doe',
contactEmail: 'jane.doe@example.com',
contactPhone: '(555) 987-6543',
contactType: 'homeowner',
firmPanel: '17167C0033E',
floodZone: 'AE',
bfe: '12.5',
baseFloodDepth: '2',
insuranceInfoGiven: 'verbally',
siteVisit: true,
propertyProtectionAdvice: true,
financialAdvice: true,
coastalOrCBRS: true,
pastFlood: true,
erosion: true,
requestedHelpWith: 'Flood zone status inquiry',
internalNotes: '<string>'
},
recordType: 'Log',
externalSystemId: 'LOG-2024-0320',
propertyId: 'a1b2c3d4-e5f6-4890-abcd-ef0123456789',
coordinates: [39.7817, -89.6501]
})
};
fetch('https://app.withforerunner.com/api/v1/records', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.withforerunner.com/api/v1/records",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'type' => 'phone',
'date' => '2024-03-20',
'address' => '456 Oak Ave, Springfield, IL',
'status' => 'open',
'contactName' => 'Jane Doe',
'contactEmail' => 'jane.doe@example.com',
'contactPhone' => '(555) 987-6543',
'contactType' => 'homeowner',
'firmPanel' => '17167C0033E',
'floodZone' => 'AE',
'bfe' => '12.5',
'baseFloodDepth' => '2',
'insuranceInfoGiven' => 'verbally',
'siteVisit' => true,
'propertyProtectionAdvice' => true,
'financialAdvice' => true,
'coastalOrCBRS' => true,
'pastFlood' => true,
'erosion' => true,
'requestedHelpWith' => 'Flood zone status inquiry',
'internalNotes' => '<string>'
],
'recordType' => 'Log',
'externalSystemId' => 'LOG-2024-0320',
'propertyId' => 'a1b2c3d4-e5f6-4890-abcd-ef0123456789',
'coordinates' => [
39.7817,
-89.6501
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.withforerunner.com/api/v1/records"
payload := strings.NewReader("{\n \"data\": {\n \"type\": \"phone\",\n \"date\": \"2024-03-20\",\n \"address\": \"456 Oak Ave, Springfield, IL\",\n \"status\": \"open\",\n \"contactName\": \"Jane Doe\",\n \"contactEmail\": \"jane.doe@example.com\",\n \"contactPhone\": \"(555) 987-6543\",\n \"contactType\": \"homeowner\",\n \"firmPanel\": \"17167C0033E\",\n \"floodZone\": \"AE\",\n \"bfe\": \"12.5\",\n \"baseFloodDepth\": \"2\",\n \"insuranceInfoGiven\": \"verbally\",\n \"siteVisit\": true,\n \"propertyProtectionAdvice\": true,\n \"financialAdvice\": true,\n \"coastalOrCBRS\": true,\n \"pastFlood\": true,\n \"erosion\": true,\n \"requestedHelpWith\": \"Flood zone status inquiry\",\n \"internalNotes\": \"<string>\"\n },\n \"recordType\": \"Log\",\n \"externalSystemId\": \"LOG-2024-0320\",\n \"propertyId\": \"a1b2c3d4-e5f6-4890-abcd-ef0123456789\",\n \"coordinates\": [\n 39.7817,\n -89.6501\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.withforerunner.com/api/v1/records")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"type\": \"phone\",\n \"date\": \"2024-03-20\",\n \"address\": \"456 Oak Ave, Springfield, IL\",\n \"status\": \"open\",\n \"contactName\": \"Jane Doe\",\n \"contactEmail\": \"jane.doe@example.com\",\n \"contactPhone\": \"(555) 987-6543\",\n \"contactType\": \"homeowner\",\n \"firmPanel\": \"17167C0033E\",\n \"floodZone\": \"AE\",\n \"bfe\": \"12.5\",\n \"baseFloodDepth\": \"2\",\n \"insuranceInfoGiven\": \"verbally\",\n \"siteVisit\": true,\n \"propertyProtectionAdvice\": true,\n \"financialAdvice\": true,\n \"coastalOrCBRS\": true,\n \"pastFlood\": true,\n \"erosion\": true,\n \"requestedHelpWith\": \"Flood zone status inquiry\",\n \"internalNotes\": \"<string>\"\n },\n \"recordType\": \"Log\",\n \"externalSystemId\": \"LOG-2024-0320\",\n \"propertyId\": \"a1b2c3d4-e5f6-4890-abcd-ef0123456789\",\n \"coordinates\": [\n 39.7817,\n -89.6501\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.withforerunner.com/api/v1/records")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"type\": \"phone\",\n \"date\": \"2024-03-20\",\n \"address\": \"456 Oak Ave, Springfield, IL\",\n \"status\": \"open\",\n \"contactName\": \"Jane Doe\",\n \"contactEmail\": \"jane.doe@example.com\",\n \"contactPhone\": \"(555) 987-6543\",\n \"contactType\": \"homeowner\",\n \"firmPanel\": \"17167C0033E\",\n \"floodZone\": \"AE\",\n \"bfe\": \"12.5\",\n \"baseFloodDepth\": \"2\",\n \"insuranceInfoGiven\": \"verbally\",\n \"siteVisit\": true,\n \"propertyProtectionAdvice\": true,\n \"financialAdvice\": true,\n \"coastalOrCBRS\": true,\n \"pastFlood\": true,\n \"erosion\": true,\n \"requestedHelpWith\": \"Flood zone status inquiry\",\n \"internalNotes\": \"<string>\"\n },\n \"recordType\": \"Log\",\n \"externalSystemId\": \"LOG-2024-0320\",\n \"propertyId\": \"a1b2c3d4-e5f6-4890-abcd-ef0123456789\",\n \"coordinates\": [\n 39.7817,\n -89.6501\n ]\n}"
response = http.request(request)
puts response.read_body{
"errors": [],
"record": {
"id": "c7d8e9f0-1a2b-4c4d-8e6f-7a8b9c0d1e2f",
"externalSystemId": "PDA-2024-0417",
"data": {},
"property": {
"id": "a1b2c3d4-e5f6-4890-abcd-ef0123456789",
"address": "123 Main St, Springfield, IL 62701",
"url": "https://demoville.app.withforerunner.com/map?propertyId=a1b2c3d4-e5f6-4890-abcd-ef0123456789&tab=overview",
"publicURL": "https://demoville.withforerunner.com/properties/a1b2c3d4-e5f6-4890-abcd-ef0123456789",
"coordinates": [
39.7817,
-89.6501
]
}
}
}{
"errors": [
{
"message": "Required",
"field": "data"
}
],
"record": null
}Create Record
Creates a record. Only Log records can be created on v1 — use the v2 endpoint for any other record type.
Logs track resident inquiries, document how you responded, and are the evidence behind CRS credit.
data.address is required on every log. The property the log attaches to is resolved from propertyId, coordinates, or data.address, in that order, so send propertyId or coordinates as well when you want a specific property rather than whichever one the address matches.
curl --request POST \
--url https://app.withforerunner.com/api/v1/records \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"data": {
"type": "phone",
"date": "2024-03-20",
"address": "456 Oak Ave, Springfield, IL",
"status": "open",
"contactName": "Jane Doe",
"contactEmail": "jane.doe@example.com",
"contactPhone": "(555) 987-6543",
"contactType": "homeowner",
"firmPanel": "17167C0033E",
"floodZone": "AE",
"bfe": "12.5",
"baseFloodDepth": "2",
"insuranceInfoGiven": "verbally",
"siteVisit": true,
"propertyProtectionAdvice": true,
"financialAdvice": true,
"coastalOrCBRS": true,
"pastFlood": true,
"erosion": true,
"requestedHelpWith": "Flood zone status inquiry",
"internalNotes": "<string>"
},
"recordType": "Log",
"externalSystemId": "LOG-2024-0320",
"propertyId": "a1b2c3d4-e5f6-4890-abcd-ef0123456789",
"coordinates": [
39.7817,
-89.6501
]
}
'import requests
url = "https://app.withforerunner.com/api/v1/records"
payload = {
"data": {
"type": "phone",
"date": "2024-03-20",
"address": "456 Oak Ave, Springfield, IL",
"status": "open",
"contactName": "Jane Doe",
"contactEmail": "jane.doe@example.com",
"contactPhone": "(555) 987-6543",
"contactType": "homeowner",
"firmPanel": "17167C0033E",
"floodZone": "AE",
"bfe": "12.5",
"baseFloodDepth": "2",
"insuranceInfoGiven": "verbally",
"siteVisit": True,
"propertyProtectionAdvice": True,
"financialAdvice": True,
"coastalOrCBRS": True,
"pastFlood": True,
"erosion": True,
"requestedHelpWith": "Flood zone status inquiry",
"internalNotes": "<string>"
},
"recordType": "Log",
"externalSystemId": "LOG-2024-0320",
"propertyId": "a1b2c3d4-e5f6-4890-abcd-ef0123456789",
"coordinates": [39.7817, -89.6501]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
data: {
type: 'phone',
date: '2024-03-20',
address: '456 Oak Ave, Springfield, IL',
status: 'open',
contactName: 'Jane Doe',
contactEmail: 'jane.doe@example.com',
contactPhone: '(555) 987-6543',
contactType: 'homeowner',
firmPanel: '17167C0033E',
floodZone: 'AE',
bfe: '12.5',
baseFloodDepth: '2',
insuranceInfoGiven: 'verbally',
siteVisit: true,
propertyProtectionAdvice: true,
financialAdvice: true,
coastalOrCBRS: true,
pastFlood: true,
erosion: true,
requestedHelpWith: 'Flood zone status inquiry',
internalNotes: '<string>'
},
recordType: 'Log',
externalSystemId: 'LOG-2024-0320',
propertyId: 'a1b2c3d4-e5f6-4890-abcd-ef0123456789',
coordinates: [39.7817, -89.6501]
})
};
fetch('https://app.withforerunner.com/api/v1/records', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://app.withforerunner.com/api/v1/records",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'data' => [
'type' => 'phone',
'date' => '2024-03-20',
'address' => '456 Oak Ave, Springfield, IL',
'status' => 'open',
'contactName' => 'Jane Doe',
'contactEmail' => 'jane.doe@example.com',
'contactPhone' => '(555) 987-6543',
'contactType' => 'homeowner',
'firmPanel' => '17167C0033E',
'floodZone' => 'AE',
'bfe' => '12.5',
'baseFloodDepth' => '2',
'insuranceInfoGiven' => 'verbally',
'siteVisit' => true,
'propertyProtectionAdvice' => true,
'financialAdvice' => true,
'coastalOrCBRS' => true,
'pastFlood' => true,
'erosion' => true,
'requestedHelpWith' => 'Flood zone status inquiry',
'internalNotes' => '<string>'
],
'recordType' => 'Log',
'externalSystemId' => 'LOG-2024-0320',
'propertyId' => 'a1b2c3d4-e5f6-4890-abcd-ef0123456789',
'coordinates' => [
39.7817,
-89.6501
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://app.withforerunner.com/api/v1/records"
payload := strings.NewReader("{\n \"data\": {\n \"type\": \"phone\",\n \"date\": \"2024-03-20\",\n \"address\": \"456 Oak Ave, Springfield, IL\",\n \"status\": \"open\",\n \"contactName\": \"Jane Doe\",\n \"contactEmail\": \"jane.doe@example.com\",\n \"contactPhone\": \"(555) 987-6543\",\n \"contactType\": \"homeowner\",\n \"firmPanel\": \"17167C0033E\",\n \"floodZone\": \"AE\",\n \"bfe\": \"12.5\",\n \"baseFloodDepth\": \"2\",\n \"insuranceInfoGiven\": \"verbally\",\n \"siteVisit\": true,\n \"propertyProtectionAdvice\": true,\n \"financialAdvice\": true,\n \"coastalOrCBRS\": true,\n \"pastFlood\": true,\n \"erosion\": true,\n \"requestedHelpWith\": \"Flood zone status inquiry\",\n \"internalNotes\": \"<string>\"\n },\n \"recordType\": \"Log\",\n \"externalSystemId\": \"LOG-2024-0320\",\n \"propertyId\": \"a1b2c3d4-e5f6-4890-abcd-ef0123456789\",\n \"coordinates\": [\n 39.7817,\n -89.6501\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://app.withforerunner.com/api/v1/records")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"data\": {\n \"type\": \"phone\",\n \"date\": \"2024-03-20\",\n \"address\": \"456 Oak Ave, Springfield, IL\",\n \"status\": \"open\",\n \"contactName\": \"Jane Doe\",\n \"contactEmail\": \"jane.doe@example.com\",\n \"contactPhone\": \"(555) 987-6543\",\n \"contactType\": \"homeowner\",\n \"firmPanel\": \"17167C0033E\",\n \"floodZone\": \"AE\",\n \"bfe\": \"12.5\",\n \"baseFloodDepth\": \"2\",\n \"insuranceInfoGiven\": \"verbally\",\n \"siteVisit\": true,\n \"propertyProtectionAdvice\": true,\n \"financialAdvice\": true,\n \"coastalOrCBRS\": true,\n \"pastFlood\": true,\n \"erosion\": true,\n \"requestedHelpWith\": \"Flood zone status inquiry\",\n \"internalNotes\": \"<string>\"\n },\n \"recordType\": \"Log\",\n \"externalSystemId\": \"LOG-2024-0320\",\n \"propertyId\": \"a1b2c3d4-e5f6-4890-abcd-ef0123456789\",\n \"coordinates\": [\n 39.7817,\n -89.6501\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.withforerunner.com/api/v1/records")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"data\": {\n \"type\": \"phone\",\n \"date\": \"2024-03-20\",\n \"address\": \"456 Oak Ave, Springfield, IL\",\n \"status\": \"open\",\n \"contactName\": \"Jane Doe\",\n \"contactEmail\": \"jane.doe@example.com\",\n \"contactPhone\": \"(555) 987-6543\",\n \"contactType\": \"homeowner\",\n \"firmPanel\": \"17167C0033E\",\n \"floodZone\": \"AE\",\n \"bfe\": \"12.5\",\n \"baseFloodDepth\": \"2\",\n \"insuranceInfoGiven\": \"verbally\",\n \"siteVisit\": true,\n \"propertyProtectionAdvice\": true,\n \"financialAdvice\": true,\n \"coastalOrCBRS\": true,\n \"pastFlood\": true,\n \"erosion\": true,\n \"requestedHelpWith\": \"Flood zone status inquiry\",\n \"internalNotes\": \"<string>\"\n },\n \"recordType\": \"Log\",\n \"externalSystemId\": \"LOG-2024-0320\",\n \"propertyId\": \"a1b2c3d4-e5f6-4890-abcd-ef0123456789\",\n \"coordinates\": [\n 39.7817,\n -89.6501\n ]\n}"
response = http.request(request)
puts response.read_body{
"errors": [],
"record": {
"id": "c7d8e9f0-1a2b-4c4d-8e6f-7a8b9c0d1e2f",
"externalSystemId": "PDA-2024-0417",
"data": {},
"property": {
"id": "a1b2c3d4-e5f6-4890-abcd-ef0123456789",
"address": "123 Main St, Springfield, IL 62701",
"url": "https://demoville.app.withforerunner.com/map?propertyId=a1b2c3d4-e5f6-4890-abcd-ef0123456789&tab=overview",
"publicURL": "https://demoville.withforerunner.com/properties/a1b2c3d4-e5f6-4890-abcd-ef0123456789",
"coordinates": [
39.7817,
-89.6501
]
}
}
}{
"errors": [
{
"message": "Required",
"field": "data"
}
],
"record": null
}Authorizations
Your account's API key, sent as Authorization: Bearer <your API key>. Keys are issued per environment, so a staging key will not work against production.
Body
The log's fields. Forerunner computes firmPanel, floodZone, bfe, baseFloodDepth, and coastalOrCBRS from the resolved property when you omit them.
Show child attributes
Show child attributes
The record type to create. Must be Log on v1.
"Log"Your system's identifier for this log. Forerunner stores it without checking for duplicates.
"LOG-2024-0320"
UUID of an existing Forerunner property to attach the log to. When set, the log goes straight to that property instead of geocoding data.address.
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-4[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$"a1b2c3d4-e5f6-4890-abcd-ef0123456789"
Location as a [latitude, longitude] pair in EPSG:4326 (WGS 84).
Show child attributes
Show child attributes
[39.7817, -89.6501]
Response
Success. errors is empty.
Empty when the request succeeded. Otherwise one entry per failure, and the resource fields on the response are empty: null for single resources, [] for lists, with pageInfo omitted.
Show child attributes
Show child attributes
[]
The created record. Null when creation failed.
Show child attributes
Show child attributes
Was this page helpful?