Partner Integration API
Embed PGI's scoring engine, quoting, policy binding, claims, and support directly into your platform. One API key, one base URL, full lifecycle coverage.
Who is this for?
The Partner API is built for platforms that want to offer Personal Guarantee Insurance without sending users to a separate website. If you're building any of these, this is for you:
- Lending platforms -- offer PGI coverage alongside loan origination
- M&A marketplaces -- protect buyers on acquisition financing
- Financial advisors & brokerages -- embed scoring and quoting into client workflows
- Accounting & ERP platforms -- flag guarantee risk in financial dashboards
Get a Free Sandbox Key
What you can do
CORE Score
Run PGI's credit scoring engine on a borrower. Get an instant approve or decline decision.
Applications & Quotes
Submit a full application. Quotes arrive via webhook after underwriter approval.
Bind & Payment
Bind a policy from an accepted quote. Payment flows through First Insurance Funding.
Policies
List, retrieve, and download bound policy PDFs for your portfolio.
Claims
Submit claims against bound policies. Track claim status and workflow.
Support
Create support tickets and exchange messages with PGI underwriters.
Document Upload
Upload financial documents (P&L, balance sheet, forecasts) linked to an application. Extraction runs automatically.
Webhooks
Receive real-time notifications when quotes, policies, claims, documents, or tickets change state.
Idempotency
Safely retry POST requests without creating duplicate records. 24-hour cache with conflict detection.
Base URL
https://api.pgicover.com/api/v2/
All endpoints are under this base. Append the resource path to this URL.
Authentication
Every request requires a Bearer token in the Authorization header. You'll get an API key when your partner account is provisioned.
Authorization: Bearer pk_live_abc123def456ghi789jkl012mno345
Key prefixes
| Prefix | Environment | Behavior |
|---|---|---|
| pk_test_* | Sandbox | Real scoring results, but no production records are created. Data is isolated from live workflows. |
| pk_live_* | Production | Creates real applications, quotes, policies, and claims visible to PGI underwriters. |
Sandbox mode
Use a pk_test_* key to build and test your integration. Sandbox mode hits the same endpoints as production, but:
- All created records are flagged
is_sandbox=True - Sandbox data is hidden from PGI's production admin by default
- Scoring returns real CORE scores from the engine
- No real policies or claims are created
- Higher rate limit (1,000 requests/hour) for rapid development
541511 (approve), 721110 (decline). Pair with the sample payloads in the CORE Score docs.
Rate limiting
Every response includes rate limit headers so you can track your usage:
| Header | Description |
|---|---|
| X-RateLimit-Limit | Maximum requests allowed per hour |
| X-RateLimit-Remaining | Requests remaining in the current window |
| X-RateLimit-Reset | Unix timestamp when the window resets |
Default limits:
- Live keys: 100 requests/hour
- Sandbox keys: 1,000 requests/hour
When you exceed the limit, you'll receive a 429 Too Many Requests response with a Retry-After header (in seconds).
Error responses
All errors follow the same shape:
{
"error": {
"code": "invalid_request",
"message": "The loan_amount field is required.",
"details": {
"loan_amount": ["This field is required."]
}
}
}
Common error codes
| HTTP Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | Missing or invalid fields in the request body |
| 401 | authentication_failed | Missing, invalid, or revoked API key |
| 403 | forbidden | Valid key, but no access to this resource (tenant isolation) |
| 404 | not_found | Resource does not exist or belongs to another partner |
| 429 | rate_limited | Too many requests. Check Retry-After header. |
| 500 | internal_error | Something broke on our end. Contact support. |
Quick start
Make your first API call in under a minute. This scores a sample borrower:
curl -X POST https://api.pgicover.com/api/v2/score/ \
-H "Authorization: Bearer pk_test_abc123def456ghi789jkl012mno345" \
-H "Content-Type: application/json" \
-d '{
"country": "CA",
"naics_code": "541511",
"formation_date": "2019-03-15",
"loan_amount": 500000,
"pgi_limit": 250000,
"annual_revenue": 2000000,
"ebitda": 400000,
"total_debt": 300000,
"monthly_debt_service": 8000,
"collateral_value": 600000,
"enterprise_value": 3000000
}'
import requests
resp = requests.post(
"https://api.pgicover.com/api/v2/score/",
headers={
"Authorization": "Bearer pk_test_abc123def456ghi789jkl012mno345",
},
json={
"country": "CA",
"naics_code": "541511",
"formation_date": "2019-03-15",
"loan_amount": 500000,
"pgi_limit": 250000,
"annual_revenue": 2000000,
"ebitda": 400000,
"total_debt": 300000,
"monthly_debt_service": 8000,
"collateral_value": 600000,
"enterprise_value": 3000000,
},
)
print(resp.json())
const resp = await fetch("https://api.pgicover.com/api/v2/score/", {
method: "POST",
headers: {
"Authorization": "Bearer pk_test_abc123def456ghi789jkl012mno345",
"Content-Type": "application/json",
},
body: JSON.stringify({
country: "CA",
naics_code: "541511",
formation_date: "2019-03-15",
loan_amount: 500000,
pgi_limit: 250000,
annual_revenue: 2000000,
ebitda: 400000,
total_debt: 300000,
monthly_debt_service: 8000,
collateral_value: 600000,
enterprise_value: 3000000,
}),
});
const data = await resp.json();
console.log(data);
A successful response looks like this:
{
"score_id": "A1B2C3D4E5F6789012345678AB",
"score": 83,
"decision": "approve",
"country": "CA",
"naics_code": "541511",
"created_at": "2026-04-03T14:22:31Z"
}