View a public compliance portal
get
https://api.expiryedge.com/v1/viewPortalPublic - no API key60/min
Request
curl 'https://api.expiryedge.com/v1/viewPortal?token=0f5c2a8e-6d4b-4e3a-9c1f-7b2d8e9a3c41'Response
{
"success": true,
"portal": {
"name": "Northwind Dental - Vendor Compliance",
"description": "Current licenses and insurance certificates for Northwind Dental.",
"client_name": "Northwind Dental"
},
"summary": {
"total": 2,
"compliant": 1,
"expired": 1,
"completed": 0,
"expiring_soon": 1,
"compliance_rate": 50
},
"expiries": [
{
"name": "General Liability Insurance",
"document_type": "Insurance",
"expiry_date": "2026-09-20",
"start_date": "2025-09-20",
"state": "todo",
"is_done": false,
"priority": "High",
"vendor": "Contoso Insurance",
"issuing_authority": null,
"reference_number": "GL-448120",
"share_token": null,
"days_left": -7,
"status": "expired"
},
{
"name": "Northwind Dental - State Dental License",
"document_type": "License",
"expiry_date": "2026-10-15",
"start_date": "2025-10-15",
"state": "todo",
"is_done": false,
"priority": "High",
"vendor": null,
"issuing_authority": "State Board of Dentistry",
"reference_number": "DL-20931",
"share_token": "5c0e7a52-3f7e-4b3e-9a2e-1d2f0b6c9e11",
"days_left": 18,
"status": "active"
}
],
"generated_at": "2026-09-27T14:05:00.000Z"
}Prefer POST with the password in the body; ?password= is kept for legacy clients. Each successful view is logged (count, time, IP).
tokenstringrequiredPortal access token (the last segment of the portal URL).passwordstringPortal password (legacy; prefer the POST form).
200
Portal contents.
successbooleanportalobjectsummaryobjectexpiriesarray of objectsExpired first, then by days_left ascending.generated_atstringUTC timestamp, ISO 8601. Every v1 response uses this form, never a raw Firestore Timestamp ({_seconds, _nanoseconds}).format: date-time
400 | The request is missing required fields or contains invalid values. |
401 | The portal is password protected and the password is missing or wrong. |
404 | The record does not exist or is not in your organization. |
410 | The portal link has expired ( link_expires_at passed). |
429 | Too many requests for this endpoint from your IP. Wait Retry-After seconds. |
500 | Unexpected server error. Retry later; quote requestId to support. |
