Get Project (v1.5)
curl --request GET \
--url https://dataapi.dncscrub.com/v1.5/projects/{projectCode} \
--header 'loginId: <loginid>'import requests
url = "https://dataapi.dncscrub.com/v1.5/projects/{projectCode}"
headers = {"loginId": "<loginid>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {loginId: '<loginid>'}};
fetch('https://dataapi.dncscrub.com/v1.5/projects/{projectCode}', 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://dataapi.dncscrub.com/v1.5/projects/{projectCode}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"loginId: <loginid>"
],
]);
$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://dataapi.dncscrub.com/v1.5/projects/{projectCode}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("loginId", "<loginid>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://dataapi.dncscrub.com/v1.5/projects/{projectCode}")
.header("loginId", "<loginid>")
.asString();require 'uri'
require 'net/http'
url = URI("https://dataapi.dncscrub.com/v1.5/projects/{projectCode}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["loginId"] = '<loginid>'
response = http.request(request)
puts response.read_bodyOther APIs
Get Project (v1.5)
Read a Project, including FTC SAN validation status and state registration status
GET
/
v1.5
/
projects
/
{projectCode}
Get Project (v1.5)
curl --request GET \
--url https://dataapi.dncscrub.com/v1.5/projects/{projectCode} \
--header 'loginId: <loginid>'import requests
url = "https://dataapi.dncscrub.com/v1.5/projects/{projectCode}"
headers = {"loginId": "<loginid>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {loginId: '<loginid>'}};
fetch('https://dataapi.dncscrub.com/v1.5/projects/{projectCode}', 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://dataapi.dncscrub.com/v1.5/projects/{projectCode}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"loginId: <loginid>"
],
]);
$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://dataapi.dncscrub.com/v1.5/projects/{projectCode}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("loginId", "<loginid>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://dataapi.dncscrub.com/v1.5/projects/{projectCode}")
.header("loginId", "<loginid>")
.asString();require 'uri'
require 'net/http'
url = URI("https://dataapi.dncscrub.com/v1.5/projects/{projectCode}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["loginId"] = '<loginid>'
response = http.request(request)
puts response.read_bodyReturns the same object as
Create or Update Project. Use it to poll
All timestamps are UTC in ISO 8601 format (
FtcValidation.Status and StateRegistrations[*].Status when you are not using the
webhook.
Request
string
required
Your API Key.
string
required
The Project code, as returned by the create call (including any account prefix).
Example Request
curl 'https://dataapi.dncscrub.com/v1.5/projects/VOXAI_BRIGHTDENTAL' \
--header 'loginId: YOUR_API_KEY'
const res = await fetch("https://dataapi.dncscrub.com/v1.5/projects/VOXAI_BRIGHTDENTAL", {
headers: { loginId: "YOUR_API_KEY" },
});
const project = await res.json();
Response
| Status | Meaning |
|---|---|
200 | Project found |
401 | Missing or invalid API key |
404 | No Project with that code in your account |
200 OK
{
"ProjectCode": "VOXAI_BRIGHTDENTAL",
"ProjectName": "Bright Dental",
"AcctId": "VOXAI",
"Status": "active",
"DefaultCampaignId": 184201,
"FtcValidation": {
"Status": "validated",
"OrgId": "10000598-10598",
"San": "10000830-100830-07",
"CheckedOn": "2026-10-01T18:04:11Z",
"Message": null,
"Expiration": "2027-03-31",
"HasEntireUs": false,
"AreaCodes": ["212", "213", "310"]
},
"StateRegistrations": {
"LA": { "Status": "approved", "Confirmation": "LPSC-2026-1234", "SubmittedOn": "2026-10-01T17:02:11Z" },
"OK": { "Status": "submitted", "Confirmation": "OK-AG-55512", "SubmittedOn": "2026-10-01T17:02:11Z" }
},
"Webhook": {
"Url": "https://example.com/dncscrub/webhook",
"LastDelivery": { "EventId": "evt_01J9F3ZQ6K8W2D5R7C0YV4T1XA", "Event": "project.ftcValidation",
"Attempt": 1, "HttpStatus": 200, "SentOn": "2026-10-01T18:04:12Z" }
},
"CreatedOn": "2026-10-01T17:02:11Z",
"LastModifiedOn": "2026-10-01T18:04:11Z"
}
2026-10-01T17:02:11Z); Expiration is a date
(2027-03-31). Field names are PascalCase, like the rest of the DNCScrub API.
Status is active or inactive. Webhook.LastDelivery is null until the first
delivery attempt; HttpStatus is null on timeout.