API docs

Every dashboard action is also exposed as a REST endpoint so you can wire AppetiteMatch directly into your AMS, CRM, or batch import.

Authentication

Every request needs a bearer token. Generate yours from Settings → API key → Show key in the dashboard, or via cookie auth if you're calling from the same origin.

curl -H "Authorization: Bearer <your-key>" \
  https://submission-triage-api.onrender.com/me

Triage a submission (JSON)

curl -X POST -H "Authorization: Bearer <your-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "submission_id": "SUB-1",
    "received_at": "2026-04-26",
    "insured": {
      "legal_name": "Acme HVAC LLC",
      "naics": "238220",
      "primary_state": "TX",
      "annual_revenue": "5000000"
    },
    "coverages": [{"line": "general_liability"}]
  }' \
  https://submission-triage-api.onrender.com/triage

Returns ranked carrier matches and drafted cover emails.

Triage from an ACORD PDF

curl -X POST -H "Authorization: Bearer <your-key>" \
  -F "file=@./acord_125.pdf" \
  https://submission-triage-api.onrender.com/triage/upload

Document AI extracts fields, the triage runs as above, and the uploaded PDF is stashed so the next /drafts/[id]/send attaches the original to the carrier email.

Manage carriers

# List
curl -H "Authorization: Bearer <key>" https://submission-triage-api.onrender.com/carriers

# Upsert
curl -X POST -H "Authorization: Bearer <key>" \
  -H "Content-Type: application/json" \
  -d '{
    "carrier_id": "atlas_specialty",
    "name": "Atlas Specialty E&S",
    "submission_email": "newbiz@atlas.example",
    "typical_quote_back_days": 4,
    "appetite": [{
      "naics_prefixes": ["238","236"],
      "states_in": ["TX","FL","GA"],
      "states_out": ["NY","CA"],
      "lines": ["general_liability","commercial_auto"],
      "revenue_min": "500000",
      "revenue_max": "15000000"
    }]
  }' \
  https://submission-triage-api.onrender.com/carriers

# Delete
curl -X DELETE -H "Authorization: Bearer <key>" \
  https://submission-triage-api.onrender.com/carriers/atlas_specialty

Inbound quote-back webhook

When a carrier replies via email, your inbound mail handler should forward to:

POST https://submission-triage-api.onrender.com/webhooks/inbound

# Body
{
  "provider_message_id": "<SES Message-ID we returned on send>",
  "body": "Quoting at $42,000. Effective 06/01/2026."
}

# Signed with HMAC-SHA256 of body using your org's webhook_secret:
X-Triage-Signature: sha256=...

Full OpenAPI surface

Every endpoint is documented with request/response schemas at the interactive Swagger UI (also available as raw JSON at https://submission-triage-api.onrender.com/openapi.json).

Rate limits

Triage endpoints (/triage, /triage/upload) are limited to 30 requests/minute per IP by default. Inbound webhook endpoints are 300 requests/minute. If you need higher, hit Pro tier or talk to us.