Find an API

Search public APIs with auth details & Postman guides

← All APIs

Duck Creek Suite API (Policy, Claims, Billing)

duckcreek.com · Company

Company OAuth2 Paid Insurance Policy Administration Claims Billing

REST API for Duck Creek Technologies — a leading P&C insurance platform competing directly with Guidewire. Duck Creek Suite covers Policy (policy administration and rating), Claims (FNOL through closure), and Billing (premium collection and disbursements). Deployed as SaaS on Duck Creek OnDemand. The API enables carrier portals, agency integrations, and ecosystem partner connections. Used by 70+ insurers including AmFam, Employers, and Donegal.

Authentication

OAuth2 OAuth2 client credentials. Duck Creek partner API credentials provisioned through the Duck Creek Exchange partner program. Contact [email protected].

Sample Requests

GET Search and retrieve policy

Searches active policies by insured name, policy number, or agent code. Returns policy summary including coverages, premium, and status.

https://api.duckcreek.com/suite/v3/policy/policies?status=Active&policyNumber=DCPOL-2024-001234

Hover any highlighted part to learn what it does

Headers — extra info sent with the request
Authorization Bearer YOUR_ACCESS_TOKEN
curl -X GET "https://api.duckcreek.com/suite/v3/policy/policies?status=Active&policyNumber=DCPOL-2024-001234" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
import requests
params = {
    "status": "Active",
    "policyNumber": "DCPOL-2024-001234"
}
headers = {
    "Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
response = requests.get(
    "https://api.duckcreek.com/suite/v3/policy/policies",
    params=params,
    headers=headers,
)
print(response.json())
const url = new URL('https://api.duckcreek.com/suite/v3/policy/policies');
url.searchParams.set('status', 'Active');
url.searchParams.set('policyNumber', 'DCPOL-2024-001234');

const response = await fetch(url, {
  headers: {
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
  },
}); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"net/url"
)

func main() {
	baseURL, _ := url.Parse("https://api.duckcreek.com/suite/v3/policy/policies")
	q := baseURL.Query()
	q.Set("status", "Active")
	q.Set("policyNumber", "DCPOL-2024-001234")
	baseURL.RawQuery = q.Encode()
	targetURL := baseURL.String()
	req, _ := http.NewRequest("GET", targetURL, nil)
	req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.duckcreek.com/suite/v3/policy/policies")
uri.query = URI.encode_www_form({
  "status" => "Active",
  "policyNumber" => "DCPOL-2024-001234"
})

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Get.new(uri)
req["Authorization"] = "Bearer YOUR_ACCESS_TOKEN"

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.duckcreek.com/suite/v3/policy/policies?" . http_build_query([
    "status" => "Active",
    "policyNumber" => "DCPOL-2024-001234"
]);
$opts = ["http" => [
    "method" => "GET",
    "header" => implode("\r\n", [
        "Authorization: Bearer YOUR_ACCESS_TOKEN"
    ]),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));
POST Create FNOL (first notice of loss)

Opens a new claim from a first notice of loss. Triggers Duck Creek Claims assignment and reserve workflows.

https://api.duckcreek.com/suite/v3/claims/claims

Hover any highlighted part to learn what it does

Headers — extra info sent with the request
Content-Type application/json
Authorization Bearer YOUR_ACCESS_TOKEN
Request Body — data you're sending
{
  "lossDate": "2024-04-05",
  "lossType": "Auto Collision",
  "reportedBy": {
    "name": "Alex Torres",
    "phone": "702-555-8765",
    "relationship": "Insured"
  },
  "description": "Rear-end collision at intersection",
  "policyNumber": "DCPOL-2024-001234",
  "estimatedDamage": 12000
}
curl -X POST "https://api.duckcreek.com/suite/v3/claims/claims" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"lossDate":"2024-04-05","lossType":"Auto Collision","reportedBy":{"name":"Alex Torres","phone":"702-555-8765","relationship":"Insured"},"description":"Rear-end collision at intersection","policyNumber":"DCPOL-2024-001234","estimatedDamage":12000}'
import requests
headers = {
    "Content-Type": "application/json",
    "Authorization": "Bearer YOUR_ACCESS_TOKEN"
}
data = {
    "lossDate": "2024-04-05",
    "lossType": "Auto Collision",
    "reportedBy": {
        "name": "Alex Torres",
        "phone": "702-555-8765",
        "relationship": "Insured"
    },
    "description": "Rear-end collision at intersection",
    "policyNumber": "DCPOL-2024-001234",
    "estimatedDamage": 12000
}
response = requests.post(
    "https://api.duckcreek.com/suite/v3/claims/claims",
    headers=headers,
    json=data,
)
print(response.json())
const url = 'https://api.duckcreek.com/suite/v3/claims/claims';

const response = await fetch(url, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Authorization': 'Bearer YOUR_ACCESS_TOKEN'
  },
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
  "lossDate": "2024-04-05",
  "lossType": "Auto Collision",
  "reportedBy": {
    "name": "Alex Torres",
    "phone": "702-555-8765",
    "relationship": "Insured"
  },
  "description": "Rear-end collision at intersection",
  "policyNumber": "DCPOL-2024-001234",
  "estimatedDamage": 12000
}),
}); 
const data = await response.json();
console.log(data);
package main

import (
	"fmt"
	"io"
	"net/http"
	"bytes"
	"encoding/json"
)

func main() {
	targetURL := "https://api.duckcreek.com/suite/v3/claims/claims"
	jsonData, _ := json.Marshal({"lossDate":"2024-04-05","lossType":"Auto Collision","reportedBy":{"name":"Alex Torres","phone":"702-555-8765","relationship":"Insured"},"description":"Rear-end collision at intersection","policyNumber":"DCPOL-2024-001234","estimatedDamage":12000})
	req, _ := http.NewRequest("POST", targetURL, bytes.NewBuffer(jsonData))
	req.Header.Set("Content-Type", "application/json")
	req.Header.Set("Authorization", "Bearer YOUR_ACCESS_TOKEN")
	req.Header.Set("Content-Type", "application/json")

	client := &http.Client{}
	resp, _ := client.Do(req)
	defer resp.Body.Close()
	body, _ := io.ReadAll(resp.Body)
	fmt.Println(string(body))
}
require "net/http"
require "json"

uri = URI("https://api.duckcreek.com/suite/v3/claims/claims")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = uri.scheme == "https"

req = Net::HTTP::Post.new(uri)
req["Content-Type"] = "application/json"
req["Authorization"] = "Bearer YOUR_ACCESS_TOKEN"
req["Content-Type"] = "application/json"
req.body = "{\"lossDate\":\"2024-04-05\",\"lossType\":\"Auto Collision\",\"reportedBy\":{\"name\":\"Alex Torres\",\"phone\":\"702-555-8765\",\"relationship\":\"Insured\"},\"description\":\"Rear-end collision at intersection\",\"policyNumber\":\"DCPOL-2024-001234\",\"estimatedDamage\":12000}"

res = http.request(req)
puts JSON.parse(res.body)
<?php
$url = "https://api.duckcreek.com/suite/v3/claims/claims";
$opts = ["http" => [
    "method" => "POST",
    "header" => implode("\r\n", [
        "Content-Type: application/json",
        "Authorization: Bearer YOUR_ACCESS_TOKEN",
        "Content-Type: application/json"
    ]),
    "content" => json_encode({"lossDate":"2024-04-05","lossType":"Auto Collision","reportedBy":{"name":"Alex Torres","phone":"702-555-8765","relationship":"Insured"},"description":"Rear-end collision at intersection","policyNumber":"DCPOL-2024-001234","estimatedDamage":12000}),
]];
$ctx = stream_context_create($opts);
$res = file_get_contents($url, false, $ctx);
print_r(json_decode($res, true));

Postman Setup Guide

Get Postman ↗
  1. Join Duck Creek Exchange partner program at exchange.duckcreek.com for API credentials
  2. Duck Creek APIs are tenant-specific — base URL includes client subdomain in some deployments
  3. Duck Creek OnDemand (SaaS) vs on-premises deployments have different API versioning
  4. Separate API credentials for Policy, Claims, and Billing modules — request all three
  5. Duck Creek provides a sandbox tenant on OnDemand for partner development
  6. Duck Creek Exchange marketplace lists certified partner integrations — review before building custom

What can you build with Duck Creek Suite API (Policy, Claims, Billing)?

Duck Creek Suite API (Policy, Claims, Billing) is a Company API. Developers commonly use company APIs for:

  • enriching CRM records with company firmographics
  • building lead-generation and prospecting tools
  • verifying business identity and registration details
  • monitoring competitors and market intelligence
  • powering B2B data enrichment pipelines

OAuth 2.0. OAuth lets your app act on behalf of a user. You redirect them to authorise access, receive a token, then use that token in requests. Best for accessing user-owned data. Duck Creek Suite API (Policy, Claims, Billing) is a paid API — check the provider's pricing page before building a production integration.

New to APIs? Read our beginner's guide · Learn about API keys · What is REST?

Open documentation ↗