Create a new certificate.
Uploads a new Certificate of Insurance (COI) PDF file, validates it, and creates a certificate record. The certificate processing is performed asynchronously in the background. The initial response indicates that the certificate has been accepted for processing with a status of "pending".
Asynchronous Processing:
After uploading a certificate, the platform automatically processes the document and evaluates it against your organization's pre-defined insurance requirements. This evaluation happens asynchronously, so the initial response will have:
status: "pending" (indicating processing has not yet started)review_results:null(will be populated once processing completes)
Monitoring Certificate Status:
You can monitor the certificate status in two ways:
Polling: Periodically retrieve the certificate using the GET endpoint to check the
statusfield. The status will transition from "pending" → "processing" → ("approved" | "flagged" | "denied" | "error") as processing completes.Webhooks: Register a webhook endpoint to receive real-time notifications when processing completes. The following events are sent:
certificate.approved- Certificate passed all requirementscertificate.flagged- Certificate failed some requirementscertificate.denied- Certificate was denied
Retrieving Review Results:
Once processing is complete, use the expand[]=review_results parameter when
retrieving the certificate to get abbreviated review results, or
expand[]=review_results.full for complete details including parsed certificate
data and detailed audit results.
curl \
--request POST 'https://api.1099policy.com/api/v1/files/certificates' \
--header "Content-Type: multipart/form-data" \
--form "certificate=@file" \
--form "contractor=string"
{
"contractor": "cn_xyz789",
"created": 1646818364,
"filename": "certificate_of_insurance.pdf",
"id": "string",
"pdf_url": "https://storage.example.com/certificates/ci_abc123.pdf",
"review_results": {
"audit_results": [
{
"created": 42,
"id": "car_result123",
"manually_approved": true,
"message": "string",
"result": "pass",
"rule_name": "CGL Limits",
"rule_path": "coverages.commercial_general_liability.limits"
}
],
"created": 42,
"id": "ca_audit123",
"parsed_certificate_json": {},
"status": "pending",
"summary": {
"failed": 0,
"passed": 5,
"total_rules": 5
},
"updated": 42
},
"status": "pending",
"updated": 1646818364
}