Submissions
List, read, and update customer submissions
GET /submissions
Query params: status (new|quoted|closed), templateId, createdAfter / createdBefore (ms), limit, cursor.
curl -H "Authorization: Bearer $WF_API_KEY" \
"https://app.winfactor.app/api/v1/submissions?status=new&limit=20"{
"data": [
{
"id": "k57…", "templateId": "k12…", "status": "new",
"customer": { "name": "Jane Doe", "email": "[email protected]", "phone": null,
"companyName": null, "address": null, "postalCode": null,
"city": null, "country": null },
"dimensions": { "width": 2400, "height": 1800 },
"unitAmount": 1, "locale": "en", "externalRef": null,
"createdAt": 1781100202000
}
],
"nextCursor": null
}GET /submissions/{id}
Everything from the list shape, plus:
configuration— the canonical pricing configuration (raw IDs)resolvedConfiguration— the human-readable version:componentSelections[](name, type, width, height, options with codes/names/groups),selectedOptions[],insideColor/outsideColornames,notes,selectedSectionexternalPricing— your frozen live-pricing adjustment (configHash,lineItems,subtotal,receivedAt) ornulllatestQuoteId
PATCH /submissions/{id}
Body (at least one field): status (new|quoted|closed), externalRef (≤200 chars — your CRM linkage).
POST /submissions/{id}/quotes
Create a draft quote for the submission. Body (all optional): taxRate, validityDays, currency, reference, notes, lineItems[].
- Without
lineItems: WinFactor calculates the breakdown, preferring frozen external pricing when its hash matches. - With
lineItems: your array IS the quote — one call, no intermediate wrong-priced draft, and thequote.createdevent carries your items.
Returns 201 { "quoteId": "k61…" }. Defaults for omitted terms come from the organization's quote settings.