Create Quote Request

POST/v1/quotes

Creates a quote request from the insured's business data, the lines of business being quoted, and the carriers the agent selected. This creates or matches the client record and stages one job per carrier per line. Nothing is dispatched until you start the run.

Request

POST /v1/quotes
Authorization: Bearer qs_live_xxxxx
Content-Type: application/json
Idempotency-Key: crm-opp-0065f00000ABCDE-001
{
  "externalReference": "0065f00000ABCDE",
  "externalSource": "salesforce",
  "linesRequested": ["bop", "wc"],
  "carrierIds": ["carrier-a", "carrier-b", "carrier-c"],
  "input": {
    "businessName": "Acme Logistics LLC",
    "dba": "Acme Freight",
    "businessType": "llc",
    "industryCode": "484121",
    "industryDescription": "General freight trucking, long-distance",
    "yearEstablished": 2014,

    "streetAddress": "1200 Commerce St",
    "city": "Dallas",
    "state": "TX",
    "zipCode": "75202",

    "annualRevenue": 4200000,
    "numberOfEmployees": 28,
    "fullTimeEmployees": 24,
    "partTimeEmployees": 4,
    "annualPayroll": 1450000,
    "fein": "75-1234567",

    "bopCoverageLimit": "1M/2M",
    "deductible": "1000",
    "propertyValue": 850000,
    "policyStartDate": "10/01/2026",
    "policyExpirationDate": "10/01/2027",

    "contactName": "Dana Reyes",
    "contactEmail": "dana@acmelogistics.com",
    "contactPhone": "2145550137",

    "agentContactName": "Sam Patel",
    "agentContactEmail": "sam@agency.com",
    "agentContactPhone": "2145550188"
  },
  "workersComp": { }
}

Top Level Fields

FieldTypeDescription

The input Object

Always Required

FieldTypeDescription

Required When Quoting BOP

Only enforced when bop appears in linesRequested.

FieldTypeDescription

Optional, Strongly Recommended

FieldTypeDescription

Response 201 Created

{
  "success": true,
  "data": {
    "quoteRequestId": "qr_01HV...",
    "externalReference": "0065f00000ABCDE",
    "status": "pending",
    "linesRequested": ["bop", "wc"],
    "jobs": [
      {
        "jobId": "job_01HV...",
        "carrierId": "carrier-a",
        "lineOfBusiness": "bop",
        "status": "standby"
      }
    ],
    "skippedCarriers": [
      {
        "carrierId": "carrier-c",
        "reasons": [{ "line": "wc", "reason": "State not written by this carrier" }]
      }
    ],
    "deepLink": "https://app.quotesweep.com/quotes/qr_01HV...",
    "createdAt": "2026-08-25T14:02:11Z"
  }
}

Selected carriers can be skipped

QuoteSweep runs an appetite and eligibility check at creation. A carrier the agent picked may be skipped for a line when the risk falls outside appetite — wrong state, industry, or revenue band. Skips are returned in skippedCarriers (all lines skipped) and partialSkips (some lines skipped) with reasons. Surface them, or agents will not understand why a carrier they selected returned nothing.

Validation Errors

Field-level validation failures return 400 with every failing field, not just the first.

{
  "success": false,
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Request contains invalid fields",
    "field_errors": {
      "contactPhone": ["Insured phone must be 10 digits"],
      "zipCode": ["Valid ZIP code is required (e.g., 12345)"]
    }
  }
}

Idempotency

Send an Idempotency-Key header — the source record ID plus an attempt number works well. A repeated request carrying the same key returns the original quote request instead of creating a duplicate client record and a duplicate carrier submission.

Next step

After creating the request, start the run to dispatch AI agents against the selected carriers.