Search docs...

Search docs...

Search docs...

Getting Started

Getting Started

Getting Started

Getting Started

Upload your first Certificate of Insurance and retrieve the review results in minutes.

Prerequisites

Before you begin, make sure you have:

  • [ ] An API key (find this in your Dashboard under Settings → API Keys)
  • [ ] At least one insurance requirement configured (see Configuring Insurance Requirements)
  • [ ] A contractor record to associate the certificate with

If you don't have a contractor yet, create one:

bash
curl https://api.1099policy.com/api/v1/contractors \
  -u YOUR_SECRET_KEY: \
  -d email="contractor@example.com" \
  -d first_name="Jane" \
  -d last_name="Smith"

Save the returned id (e.g., cn_abc123) — you'll need it in the next step.

Step 1: Upload a certificate

Submit a COI PDF for review:

bash
curl https://api.1099policy.com/api/v1/files/certificates \
  -u YOUR_SECRET_KEY: \
  -F "contractor=cn_abc123" \
  -F "certificate=@/path/to/certificate.pdf"

Response:

json
{
  "id": "ci_YnsHeB9PTo",
  "contractor": "cn_abc123",
  "status": "pending",
  "created": 1760509809,
  "filename": "certificate.pdf",
  "review_results": null
}

The certificate is now queued for processing. Save the id to retrieve results later.

File requirements

PDF only, maximum 15 MB. Only the first 2 pages are analyzed.

Step 2: Wait for the webhook

When processing completes, we send a webhook event to your registered endpoint. Processing typically completes within 1-2 minutes.

You'll receive one of these events:

  • certificate.approved — All requirements passed
  • certificate.flagged — Some requirements failed
  • certificate.denied — Critical requirements failed

Example webhook payload:

json
{
  "id": "evt_abc123",
  "type": "certificate.approved",
  "created": 1760509813,
  "data": {
    "object": {
      "id": "ci_YnsHeB9PTo",
      "contractor": "cn_abc123",
      "status": "approved",
      "created": 1760509809
    }
  }
}

See Using Webhooks for setup instructions and signature verification.

Testing without webhooks

You can poll GET /api/v1/files/certificates/{id} until status is no longer pending or processing.

Step 3: Retrieve review results

Once you receive the webhook (or confirm processing is complete), fetch the results using the expand parameter:

bash
curl "https://api.1099policy.com/api/v1/files/certificates/ci_YnsHeB9PTo?expand[]=review_results" \
  -u YOUR_SECRET_KEY:

Response:

json
{
  "id": "ci_YnsHeB9PTo",
  "contractor": "cn_abc123",
  "status": "flagged",
  "review_results": {
    "id": "ca_xyz789",
    "status": "flagged",
    "summary": {
      "total_rules": 8,
      "passed": 6,
      "failed": 2
    },
    "created": 1760509813
  }
}

This tells you the certificate failed 2 of 8 requirements. To see exactly which rules failed, request the full results:

bash
curl "https://api.1099policy.com/api/v1/files/certificates/ci_YnsHeB9PTo?expand[]=review_results.full" \
  -u YOUR_SECRET_KEY:

See Working with Review Results for details on interpreting the full response.

What's next?

You've successfully uploaded a certificate and retrieved results. From here:

GoalGuide
Configure what coverage rules to checkConfiguring Insurance Requirements
Handle different certificate statuses in your appWorking with Review Results
Set up webhooks for real-time notificationsUsing Webhooks
Understand file limits, timeouts, and error handlingEdge Cases & Troubleshooting

Was this page helpful?

Yes

No

Was this page helpful?

Yes

No

Was this page helpful?

Yes

No

Was this page helpful?

Yes

No

Was this page helpful?

Yes

No

Was this page helpful?

Yes

No

Insurance Requirements

© Copyright 2024. All rights reserved.

© Copyright 2024. All rights reserved.

© Copyright 2024. All rights reserved.

© Copyright 2024. All rights reserved.

© Copyright 2024. All rights reserved.

© Copyright 2024. All rights reserved.