The Quotes API powers Krafta’s custom-order workflow. A client submits a quote request specifying what they want, how many units, and where to ship; the platform creates aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/PloutusLab/krafta-web/llms.txt
Use this file to discover all available pages before exploring further.
Quote record with all pricing fields zeroed out and status PENDING_REVIEW. An admin then reviews the request, fills in the pricing via a PUT call, and moves the quote to APPROVED. Once the customer accepts, the quote converts to a live order.
POST /api/quotes
Create a new quote request. No authentication is required — anonymous visitors may submit requests. The response includes a human-readable quote number in the formatCOT-XXXXXX that can be shown to the customer as a reference.
Request body
UUID of the
ProductVariant being quoted. Must match an existing variant in the catalog.Number of units the customer wants to order. Parsed as an integer server-side.
Customer’s email address used for follow-up communication about the quote.
Customer’s full name. Defaults to
"Cliente Anónimo" if omitted.Customer’s phone number for WhatsApp or direct contact.
Venezuelan state the order will be shipped to (e.g.,
"Lara", "Miranda").City within the destination state (e.g.,
"Barquisimeto", "Caracas").Free-form text for special requirements, custom artwork instructions, or other notes relevant to production.
Response
Always
true on a successful submission.UUID of the newly created
Quote record.Human-readable reference code in the format
COT-XXXXXX (six random digits). Show this to customers so they can reference their quote without exposing the internal UUID.Default values on creation
| Field | Default |
|---|---|
status | PENDING_REVIEW |
subtotal | 0.00 |
shippingCost | 0.00 |
total | 0.00 |
totalBs | 0.00 |
exchangeRate | 40.00 (BCV fallback) |
currency | USD |
expiresAt | 15 days from creation |
Error responses
| Status | Condition |
|---|---|
400 | variantId, quantity, or email missing. |
500 | Unexpected server error. |
PUT /api/quotes ADMIN
Review a submitted quote and set the final pricing. Requires theADMIN role. The admin supplies subtotal and shippingCost; the server calculates total and totalBs automatically using the exchange rate stored on the quote.
Request body
UUID of the
Quote to update.New quote status. Accepted values:
"APPROVED" or "REJECTED".Product subtotal in USD. Defaults to
0.00 if omitted or non-numeric.Shipping cost in USD. Defaults to
0.00 if omitted or non-numeric.Response
Computed fields
The server derives the following values automatically — do not send them in the request body:| Field | Derivation |
|---|---|
total | subtotal + shippingCost |
totalBs | total × exchangeRate (BCV fallback: 40.00) |
Error responses
| Status | Condition |
|---|---|
400 | quoteId or status missing. |
401 / 403 | Caller does not hold the ADMIN role. |
500 | Unexpected server error. |
GET /api/quotes ADMIN
Retrieve all quote records, ordered bycreatedAt descending. Each record includes its items array and the associated user object. Requires the ADMIN role.
Response
QuoteStatus lifecycle
EveryQuote moves through the following states. Transitions are driven by admin actions (via PUT) or automated expiry logic.
| Status | Meaning |
|---|---|
DRAFT | Quote was started but not yet submitted. Not yet used by the public API — reserved for future editor flows. |
PENDING_REVIEW | Default state after a customer submits a request via POST /api/quotes. Awaiting admin pricing. |
APPROVED | Admin has set pricing and approved the quote. The customer can review total cost and accept. |
ACCEPTED | Customer has accepted the approved quote. The quote is ready to be converted into an Order. |
EXPIRED | The quote was not accepted before its expiresAt date (15 days after creation). |
REJECTED | Admin explicitly rejected the request (e.g., product unavailable, insufficient quantity). |
REPLACED | A new revised quote superseded this one. The previous quote is archived as REPLACED to preserve history. |
