Data Rules
List a rule's results
Lists the per-record outcome of a rule, one entry per record it evaluated. Defaults to the rule’s latest version.
GET
/
projects
/
{project_id}
/
rules
/
{rule_id}
/
results
List a rule's results
curl --request GET \
--url https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results \
--header 'Authorization: <api-key>'import requests
url = "https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results', 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.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "dpres_8XF1QtGs79oX9A6k",
"status": "pass",
"entered_value": "13.75",
"corrected": false,
"rule_id": "rule_Qb3k9TzdL0pWnXyz",
"rule_version": 1,
"rule_name": "Negative Temp Alert",
"data_point_id": "in_JuGzRS08MbVSEkCj",
"data_point_slug": "ambient-temperature-c",
"dismissed_at": null,
"dismissed_by": null,
"dismissal_reason": null,
"evaluated_at": "2026-08-14T23:01:46.637Z"
}
],
"info": {
"items": 1,
"page_size": 10,
"total_items": 15,
"current_page": 1,
"next_page": 2,
"previous_page": null,
"total_pages": 2
}
}Authorizations
Query Parameters
Filter to one outcome. On a substitute rule a successful correction is recorded as a pass, so fail returns the records it fired on and did not correct, and pass mixes the records that never matched with the corrected ones. Read corrected per record to tell those apart. The app's Substituted and Measured filters map the other way round.
Available options:
pass, fail, dismissed Read an earlier version of the rule instead of the latest.
⌘I
List a rule's results
curl --request GET \
--url https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results \
--header 'Authorization: <api-key>'import requests
url = "https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
fetch('https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results', 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.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results")
.header("Authorization", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://app.gomangrove.com/api/v1/projects/{project_id}/rules/{rule_id}/results")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "dpres_8XF1QtGs79oX9A6k",
"status": "pass",
"entered_value": "13.75",
"corrected": false,
"rule_id": "rule_Qb3k9TzdL0pWnXyz",
"rule_version": 1,
"rule_name": "Negative Temp Alert",
"data_point_id": "in_JuGzRS08MbVSEkCj",
"data_point_slug": "ambient-temperature-c",
"dismissed_at": null,
"dismissed_by": null,
"dismissal_reason": null,
"evaluated_at": "2026-08-14T23:01:46.637Z"
}
],
"info": {
"items": 1,
"page_size": 10,
"total_items": 15,
"current_page": 1,
"next_page": 2,
"previous_page": null,
"total_pages": 2
}
}