Hoppa till innehållet

Quotes

Sales quotes with lines and validity. Addressed by quoteNumber. A quote that is accepted or explicitly converted becomes a sales order.

8 calls GET POST Base URL https://api.erp.fluit.cloud/preview

Authentication, error codes, rate limits, idempotency and pagination apply to every call and are documented once under Getting started.

GET /quotes

List sales quotes

Returns a paginated list of quotes, sorted by quoteNumber. ?modifiedSince= returns both created and modified quotes, so it can be used for delta sync; deletions are reported by GET /preview/deletions. Unlike sales orders, draft quotes are visible — a quote created through this API starts in Draft.

Query parameters

Field Type Description
search string Matches quote number and title, case-insensitively and on partial words.
status enum Filters on where the quote stands in its lifecycle. Draft Sent Accepted Declined Expired Converted
customerNumber string Returns only the quotes made out to this customer number.
modifiedSince string(date-time) Returns only records created or changed at or after this instant (ISO 8601 UTC datetime). A change anywhere inside the record counts, including on its lines.
page integer Page to return, 1-based. Default 1.
pageSize integer Number of records per page. Default 50, max 200.

Responses

200 PagedResult_PublicQuoteResponse

Paginated response: the fields below sit in items[], wrapped in totalCount, page, pageSize, totalPages, hasPreviousPage and hasNextPage. Paginated

Field Type Description
acceptedAt string(date-time) · nullable UTC timestamp when the customer accepted. Null unless accepted.
convertedToOrderNumber string · nullable Order number the quote was converted into. Null until converted.
createdDate string(date-time) UTC timestamp when the quote was created.
currencyCode string · nullable ISO 4217 currency code the quote is priced in.
customerName string · nullable Customer name at the time of reading.
customerNumber string · nullable Customer number the quote is addressed to. Null for a prospect that has not been given one yet — quoting a prospect is the point of a pipeline, so the field is not guaranteed.
declinedAt string(date-time) · nullable UTC timestamp when the customer declined. Null unless declined.
declinedReason string · nullable Reason given for declining. Null unless declined with a reason.
description string · nullable Longer description. Null if not set.
lines QuoteLine[] · nullable The quote's lines.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp when the quote was last modified. Null if never modified.
quoteDate string(date) Quote date (ISO 8601 date).
quoteNumber string · nullable Unique quote number.
sentAt string(date-time) · nullable UTC timestamp when the quote was sent. Null while Draft.
status enum Status of a sales quote. Draft Sent Accepted Declined Expired Converted
title string · nullable Short title. Null if not set.
totalAmount decimal Net total in the quote currency. Serialised as a decimal string.
totalAmountIncludingTax decimal Gross total in the quote currency. Serialised as a decimal string.
totalVat decimal Total VAT in the quote currency. Serialised as a decimal string.
validUntil string(date) Last date the quote is valid (ISO 8601 date).
400 ProblemDetails ?status= got a value outside its list.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/preview/quotes" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "acceptedAt": "2026-06-11T09:24:13.418",
      "convertedToOrderNumber": "ABC-001",
      "createdDate": "2026-06-11T09:24:13.418",
      "currencyCode": "SEK",
      "customerName": "Acme AB",
      "customerNumber": "CUST-001",
      "declinedAt": "2026-06-11T09:24:13.418",
      "declinedReason": "string",
      "description": "string",
      "lines": [
        {
          "description": "string",
          "discountPercent": "12.50",
          "itemNumber": "WIDGET-A",
          "lineNumber": 1,
          "lineTotal": "299.00",
          "quantity": "10",
          "taxPercent": "12.50",
          "unit": "st",
          "unitPrice": "299.00"
        }
      ],
      "links": {
        "self": "string"
      },
      "modifiedDate": "2026-06-11T09:24:13.418",
      "quoteDate": "2026-06-11",
      "quoteNumber": "Q-2026-0184",
      "sentAt": "2026-06-11T09:24:13.418",
      "status": "Draft",
      "title": "string",
      "totalAmount": "299.00",
      "totalAmountIncludingTax": "299.00",
      "totalVat": "299.00",
      "validUntil": "2026-06-11"
    }
  ],
  "page": 1,
  "pageSize": 50,
  "totalCount": 137,
  "totalPages": 3
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /quotes

Create a sales quote

Creates a quote in Draft status and returns it in the same shape as GET /preview/quotes/{quoteNumber}. Every line must reference an existing item by itemNumber.

Show the full description

Free-text lines are rejected: a sales order line requires an item, so such a line could never be carried into the order the quote is meant to become, and would silently disappear on conversion. description overrides the item's name on the printed quote. Lines carry the price you pass; they are not repriced from the customer's price list, but VAT is calculated per line from the customer's tax setup and the item's tax class. customerContactId must belong to customerNumber; a contact from another customer returns 400. The quote is not sent to the customer by creating it — use POST /preview/quotes/{quoteNumber}/send for that. Known error codes: Customer.NotFound, Item.NotFound, Quote.InvalidValidUntil.

Body required

Field Type Description
currencyCode string · nullable ISO 4217 currency code. Defaults to the customer's currency.
customerContactId string(uuid) · nullable ID of the customer contact person the quote is addressed to.
customerNumber Required string Number of an existing customer.
description string · nullable Longer description shown on the quote.
lines CreateQuoteLine[] · nullable Quote lines to create atomically with the quote.
quoteDate string(date) · nullable Quote date. Defaults to today.
title string · nullable Short title shown on the quote.
validUntil string(date) · nullable Last date the quote is valid. Defaults to the tenant's quote validity setting.

Responses

201 PublicQuoteResponse
  • Location — URL of the newly created resource.
Field Type Description
acceptedAt string(date-time) · nullable UTC timestamp when the customer accepted. Null unless accepted.
convertedToOrderNumber string · nullable Order number the quote was converted into. Null until converted.
createdDate string(date-time) UTC timestamp when the quote was created.
currencyCode string · nullable ISO 4217 currency code the quote is priced in.
customerName string · nullable Customer name at the time of reading.
customerNumber string · nullable Customer number the quote is addressed to. Null for a prospect that has not been given one yet — quoting a prospect is the point of a pipeline, so the field is not guaranteed.
declinedAt string(date-time) · nullable UTC timestamp when the customer declined. Null unless declined.
declinedReason string · nullable Reason given for declining. Null unless declined with a reason.
description string · nullable Longer description. Null if not set.
lines QuoteLine[] · nullable The quote's lines.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp when the quote was last modified. Null if never modified.
quoteDate string(date) Quote date (ISO 8601 date).
quoteNumber string · nullable Unique quote number.
sentAt string(date-time) · nullable UTC timestamp when the quote was sent. Null while Draft.
status enum Status of a sales quote. Draft Sent Accepted Declined Expired Converted
title string · nullable Short title. Null if not set.
totalAmount decimal Net total in the quote currency. Serialised as a decimal string.
totalAmountIncludingTax decimal Gross total in the quote currency. Serialised as a decimal string.
totalVat decimal Total VAT in the quote currency. Serialised as a decimal string.
validUntil string(date) Last date the quote is valid (ISO 8601 date).
400 ProblemDetails The customer or an item does not exist, customerContactId belongs to another customer, or validUntil falls before the quote date.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 409 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/quotes" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Titled quote with a volume discount
{
  "currencyCode": "SEK",
  "customerNumber": "10001",
  "description": "Prices valid on the stated volume.",
  "lines": [
    {
      "description": "Widget, blue",
      "discountPercent": "12.5",
      "itemNumber": "ART-1001",
      "quantity": "100",
      "unit": "st",
      "unitPrice": "249.00"
    }
  ],
  "title": "Autumn delivery",
  "validUntil": "2026-09-30"
}
One line
{
  "customerNumber": "10001",
  "lines": [
    {
      "itemNumber": "ART-1001",
      "quantity": "10",
      "unitPrice": "249.00"
    }
  ]
}
Response 201
{
  "acceptedAt": "2026-06-11T09:24:13.418",
  "convertedToOrderNumber": "ABC-001",
  "createdDate": "2026-06-11T09:24:13.418",
  "currencyCode": "SEK",
  "customerName": "Acme AB",
  "customerNumber": "CUST-001",
  "declinedAt": "2026-06-11T09:24:13.418",
  "declinedReason": "string",
  "description": "string",
  "lines": [
    {
      "description": "string",
      "discountPercent": "12.50",
      "itemNumber": "WIDGET-A",
      "lineNumber": 1,
      "lineTotal": "299.00",
      "quantity": "10",
      "taxPercent": "12.50",
      "unit": "st",
      "unitPrice": "299.00"
    }
  ],
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "quoteDate": "2026-06-11",
  "quoteNumber": "Q-2026-0184",
  "sentAt": "2026-06-11T09:24:13.418",
  "status": "Draft",
  "title": "string",
  "totalAmount": "299.00",
  "totalAmountIncludingTax": "299.00",
  "totalVat": "299.00",
  "validUntil": "2026-06-11"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

GET /quotes/{quoteNumber}

Get a quote by quote number

Returns a quote with its lines and totals. Once the quote has been converted, convertedToOrderNumber points at the resulting sales order. Responses carry a weak ETag; pass it back in If-None-Match to get 304 Not Modified while the record is unchanged.

quotes:read Supports ETag

Path parameters

Field Type Description
quoteNumber Required string Quote number of the quote to read.

Responses

200 PublicQuoteResponse
  • ETag — Weak validator for this representation. Pass it back in If-None-Match to get 304 Not Modified while the record is unchanged.
Field Type Description
acceptedAt string(date-time) · nullable UTC timestamp when the customer accepted. Null unless accepted.
convertedToOrderNumber string · nullable Order number the quote was converted into. Null until converted.
createdDate string(date-time) UTC timestamp when the quote was created.
currencyCode string · nullable ISO 4217 currency code the quote is priced in.
customerName string · nullable Customer name at the time of reading.
customerNumber string · nullable Customer number the quote is addressed to. Null for a prospect that has not been given one yet — quoting a prospect is the point of a pipeline, so the field is not guaranteed.
declinedAt string(date-time) · nullable UTC timestamp when the customer declined. Null unless declined.
declinedReason string · nullable Reason given for declining. Null unless declined with a reason.
description string · nullable Longer description. Null if not set.
lines QuoteLine[] · nullable The quote's lines.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp when the quote was last modified. Null if never modified.
quoteDate string(date) Quote date (ISO 8601 date).
quoteNumber string · nullable Unique quote number.
sentAt string(date-time) · nullable UTC timestamp when the quote was sent. Null while Draft.
status enum Status of a sales quote. Draft Sent Accepted Declined Expired Converted
title string · nullable Short title. Null if not set.
totalAmount decimal Net total in the quote currency. Serialised as a decimal string.
totalAmountIncludingTax decimal Gross total in the quote currency. Serialised as a decimal string.
totalVat decimal Total VAT in the quote currency. Serialised as a decimal string.
validUntil string(date) Last date the quote is valid (ISO 8601 date).
304 Empty body.
  • ETag — Weak validator for this representation. Pass it back in If-None-Match to get 304 Not Modified while the record is unchanged.
404 ProblemDetails No quote with that quote number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/preview/quotes/{quoteNumber}" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 200
{
  "acceptedAt": "2026-06-11T09:24:13.418",
  "convertedToOrderNumber": "ABC-001",
  "createdDate": "2026-06-11T09:24:13.418",
  "currencyCode": "SEK",
  "customerName": "Acme AB",
  "customerNumber": "CUST-001",
  "declinedAt": "2026-06-11T09:24:13.418",
  "declinedReason": "string",
  "description": "string",
  "lines": [
    {
      "description": "string",
      "discountPercent": "12.50",
      "itemNumber": "WIDGET-A",
      "lineNumber": 1,
      "lineTotal": "299.00",
      "quantity": "10",
      "taxPercent": "12.50",
      "unit": "st",
      "unitPrice": "299.00"
    }
  ],
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "quoteDate": "2026-06-11",
  "quoteNumber": "Q-2026-0184",
  "sentAt": "2026-06-11T09:24:13.418",
  "status": "Draft",
  "title": "string",
  "totalAmount": "299.00",
  "totalAmountIncludingTax": "299.00",
  "totalVat": "299.00",
  "validUntil": "2026-06-11"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /quotes/{quoteNumber}/accept

Accept a quote

Records the customer's acceptance and stamps acceptedAt. Returns the quote so a storefront can show the confirmed state without a second request. Accepting does not create a sales order — call POST /preview/quotes/{quoteNumber}/convert-to-order for that.

Show the full description

Keeping the two apart means an acceptance can be recorded the moment the customer clicks, and the order created when your flow is ready for it.

Path parameters

Field Type Description
quoteNumber Required string Quote number of the quote the customer accepted.

Responses

200 PublicQuoteResponse
Field Type Description
acceptedAt string(date-time) · nullable UTC timestamp when the customer accepted. Null unless accepted.
convertedToOrderNumber string · nullable Order number the quote was converted into. Null until converted.
createdDate string(date-time) UTC timestamp when the quote was created.
currencyCode string · nullable ISO 4217 currency code the quote is priced in.
customerName string · nullable Customer name at the time of reading.
customerNumber string · nullable Customer number the quote is addressed to. Null for a prospect that has not been given one yet — quoting a prospect is the point of a pipeline, so the field is not guaranteed.
declinedAt string(date-time) · nullable UTC timestamp when the customer declined. Null unless declined.
declinedReason string · nullable Reason given for declining. Null unless declined with a reason.
description string · nullable Longer description. Null if not set.
lines QuoteLine[] · nullable The quote's lines.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp when the quote was last modified. Null if never modified.
quoteDate string(date) Quote date (ISO 8601 date).
quoteNumber string · nullable Unique quote number.
sentAt string(date-time) · nullable UTC timestamp when the quote was sent. Null while Draft.
status enum Status of a sales quote. Draft Sent Accepted Declined Expired Converted
title string · nullable Short title. Null if not set.
totalAmount decimal Net total in the quote currency. Serialised as a decimal string.
totalAmountIncludingTax decimal Gross total in the quote currency. Serialised as a decimal string.
totalVat decimal Total VAT in the quote currency. Serialised as a decimal string.
validUntil string(date) Last date the quote is valid (ISO 8601 date).
404 ProblemDetails No quote with that quote number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The quote is not in Sent status.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 400 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/quotes/{quoteNumber}/accept" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)"
Response 200
{
  "acceptedAt": "2026-06-11T09:24:13.418",
  "convertedToOrderNumber": "ABC-001",
  "createdDate": "2026-06-11T09:24:13.418",
  "currencyCode": "SEK",
  "customerName": "Acme AB",
  "customerNumber": "CUST-001",
  "declinedAt": "2026-06-11T09:24:13.418",
  "declinedReason": "string",
  "description": "string",
  "lines": [
    {
      "description": "string",
      "discountPercent": "12.50",
      "itemNumber": "WIDGET-A",
      "lineNumber": 1,
      "lineTotal": "299.00",
      "quantity": "10",
      "taxPercent": "12.50",
      "unit": "st",
      "unitPrice": "299.00"
    }
  ],
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "quoteDate": "2026-06-11",
  "quoteNumber": "Q-2026-0184",
  "sentAt": "2026-06-11T09:24:13.418",
  "status": "Draft",
  "title": "string",
  "totalAmount": "299.00",
  "totalAmountIncludingTax": "299.00",
  "totalVat": "299.00",
  "validUntil": "2026-06-11"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /quotes/{quoteNumber}/convert-to-order

Convert a quote to a sales order

Creates a sales order from an accepted quote and returns the order in the same shape as GET /preview/orders/{orderNumber} — the Location header points at the new order, not back at the quote.

Show the full description

The quote moves to Converted and its convertedToOrderNumber is set, so the link between the two is readable from either side. Only lines that reference an item are carried over. A sales order line requires an item, so free-text lines — services, one-off charges — are left behind: compare the returned order's lines against the quote's before relying on the totals. A quote consisting only of free-text lines cannot be converted. The quote must be Accepted, and can only be converted once. Known error codes: Quote.NotFound, Quote.NotAccepted, Quote.AlreadyConverted, Quote.NoConvertibleLines.

Path parameters

Field Type Description
quoteNumber Required string Quote number of the accepted quote to turn into a sales order.

Responses

201 PublicOrderDetailResponse
  • Location — URL of the newly created resource.
Field Type Description
createdDate string(date-time) UTC timestamp when the order was created.
currencyCode string · nullable ISO 4217 currency code for all monetary values on this order.
customerName string · nullable Display name of the customer at the time of ordering. Null if not set.
customerNumber string · nullable Customer number of the buyer. Null if the order has no customer.
customerReference string · nullable Customer's own reference / purchase order number. Null if not provided.
deliveredPercentage decimal Share of the ordered quantity that has been delivered, 0-100. Serialised as a decimal string.
deliveryAddress DeliveryAddress Delivery address attached to a sales order.
deliveryStatus enum How much of an order has actually been delivered. Derived from the ordered and delivered quantities on the order lines, so it stays correct for partial deliveries — the common case in B2B, where one line ships today and the rest next week. NotDelivered PartiallyDelivered FullyDelivered
deliveryTermCode string · nullable Delivery / Incoterm code, e.g. `DAP`. Null if not set.
deliveryTermName string · nullable Display name of the delivery term. Null if not set.
externalNotes string · nullable Free-text notes printed on order documents. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
lines OrderLine[] · nullable Order lines. Empty list if the order has no lines.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp of the last modification. Null if never modified after creation.
orderDate string(date) Date the order was placed (ISO 8601 date).
orderNumber string · nullable Unique order number, e.g. `ORD-2024-00042`.
paymentTermCode string · nullable Payment term code, e.g. `NET30`. Null if not set.
paymentTermName string · nullable Display name of the payment term. Null if not set.
plannedDeliveryDate string(date) · nullable Planned delivery date set by fulfilment. Null if not yet planned.
requestedDeliveryDate string(date) · nullable Requested delivery date from the customer. Null if not provided.
shippingMethodName string · nullable Name of the shipping method / carrier. Null if not set.
status enum Sales order status values exposed via the Public API. Draft orders are never visible through the public API. This describes where the order stands commercially, not what the warehouse is doing. Warehouse progress belongs to shipments (see GET /preview/orders/{id}/shipments) — an order can be split across several of them. How much has actually left the building is reported separately as PublicApi.Preview.Orders.Queries.PublicDeliveryStatus. Placed Released Closed Cancelled
totalAmount decimal Total order amount excluding tax, in the order currency. Serialised as a decimal string.
totalAmountIncludingTax decimal Total order amount including tax, in the order currency. Serialised as a decimal string.
totalVat decimal Total VAT / tax amount, in the order currency. Serialised as a decimal string.
400 ProblemDetails The quote is not Accepted, has already been converted, or has no line that can be carried into an order. Also returned when the tenant has no default warehouse or order type configured.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No quote with that quote number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 409 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/quotes/{quoteNumber}/convert-to-order" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)"
Response 201
{
  "createdDate": "2026-06-11T09:24:13.418",
  "currencyCode": "SEK",
  "customerName": "Acme AB",
  "customerNumber": "CUST-001",
  "customerReference": "PO-2026-042",
  "deliveredPercentage": "12.50",
  "deliveryAddress": {
    "city": "Stockholm",
    "contactPerson": "string",
    "countryCode": "SE",
    "email": "order@acme.se",
    "name": "Acme AB",
    "phone": "+46 8 123 45 67",
    "postalCode": "11122",
    "street1": "Storgatan 1",
    "street2": "string"
  },
  "deliveryStatus": "NotDelivered",
  "deliveryTermCode": "STD",
  "deliveryTermName": "DAP Stockholm",
  "externalNotes": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "lines": [
    {
      "deliveredQuantity": "10",
      "discountPercent": "12.50",
      "itemName": "Widget A",
      "itemNumber": "WIDGET-A",
      "lineNumber": 1,
      "lineTotal": "299.00",
      "lineTotalIncludingTax": "299.00",
      "notes": "string",
      "outstandingQuantity": "10",
      "plannedDeliveryDate": "2026-06-11",
      "quantity": "10",
      "status": "Open",
      "taxPercent": "12.50",
      "unit": "st",
      "unitPrice": "299.00"
    }
  ],
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "orderDate": "2026-06-11",
  "orderNumber": "SO-2026-1041",
  "paymentTermCode": "STD",
  "paymentTermName": "30 days net",
  "plannedDeliveryDate": "2026-06-11",
  "requestedDeliveryDate": "2026-06-11",
  "shippingMethodName": "Parcel, next day",
  "status": "Placed",
  "totalAmount": "299.00",
  "totalAmountIncludingTax": "299.00",
  "totalVat": "299.00"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /quotes/{quoteNumber}/decline

Decline a quote

Records the customer's rejection and stamps declinedAt. Returns the quote so a storefront can show the final state without a second request. Send a reason when you have one — it is what makes win/loss reporting usable.

Path parameters

Field Type Description
quoteNumber Required string Quote number of the quote the customer declined.

Body

Field Type Description
reason string · nullable Why the customer declined. Feeds win/loss reporting.

Responses

200 PublicQuoteResponse
Field Type Description
acceptedAt string(date-time) · nullable UTC timestamp when the customer accepted. Null unless accepted.
convertedToOrderNumber string · nullable Order number the quote was converted into. Null until converted.
createdDate string(date-time) UTC timestamp when the quote was created.
currencyCode string · nullable ISO 4217 currency code the quote is priced in.
customerName string · nullable Customer name at the time of reading.
customerNumber string · nullable Customer number the quote is addressed to. Null for a prospect that has not been given one yet — quoting a prospect is the point of a pipeline, so the field is not guaranteed.
declinedAt string(date-time) · nullable UTC timestamp when the customer declined. Null unless declined.
declinedReason string · nullable Reason given for declining. Null unless declined with a reason.
description string · nullable Longer description. Null if not set.
lines QuoteLine[] · nullable The quote's lines.
links Links Hypermedia links for a public API resource. Exposed as a computed `links` property on the public response DTOs so that create and read responses carry the same self-reference — the canonical URL is derived from the business key already present on the DTO and can never drift from the route it points at.
modifiedDate string(date-time) · nullable UTC timestamp when the quote was last modified. Null if never modified.
quoteDate string(date) Quote date (ISO 8601 date).
quoteNumber string · nullable Unique quote number.
sentAt string(date-time) · nullable UTC timestamp when the quote was sent. Null while Draft.
status enum Status of a sales quote. Draft Sent Accepted Declined Expired Converted
title string · nullable Short title. Null if not set.
totalAmount decimal Net total in the quote currency. Serialised as a decimal string.
totalAmountIncludingTax decimal Gross total in the quote currency. Serialised as a decimal string.
totalVat decimal Total VAT in the quote currency. Serialised as a decimal string.
validUntil string(date) Last date the quote is valid (ISO 8601 date).
400 ProblemDetails reason is longer than 1000 characters.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No quote with that quote number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The quote is not in Sent status, so there is nothing to decline.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/quotes/{quoteNumber}/decline" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Decline with a reason
{
  "reason": "Chose a competitor on lead time"
}
Decline without a reason
{}
Response 200
{
  "acceptedAt": "2026-06-11T09:24:13.418",
  "convertedToOrderNumber": "ABC-001",
  "createdDate": "2026-06-11T09:24:13.418",
  "currencyCode": "SEK",
  "customerName": "Acme AB",
  "customerNumber": "CUST-001",
  "declinedAt": "2026-06-11T09:24:13.418",
  "declinedReason": "string",
  "description": "string",
  "lines": [
    {
      "description": "string",
      "discountPercent": "12.50",
      "itemNumber": "WIDGET-A",
      "lineNumber": 1,
      "lineTotal": "299.00",
      "quantity": "10",
      "taxPercent": "12.50",
      "unit": "st",
      "unitPrice": "299.00"
    }
  ],
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "quoteDate": "2026-06-11",
  "quoteNumber": "Q-2026-0184",
  "sentAt": "2026-06-11T09:24:13.418",
  "status": "Draft",
  "title": "string",
  "totalAmount": "299.00",
  "totalAmountIncludingTax": "299.00",
  "totalVat": "299.00",
  "validUntil": "2026-06-11"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

GET /quotes/{quoteNumber}/lines

List quote lines

Returns the lines on a quote, sorted by line number ascending. The same lines are also embedded in GET /preview/quotes/{quoteNumber}; this endpoint exists so that quotes with many lines can be paged through rather than arriving as one unbounded array.

quotes:read Paginated

Path parameters

Field Type Description
quoteNumber Required string Quote number of the quote whose lines to list.

Query parameters

Field Type Description
page integer Page to return, 1-based. Default 1.
pageSize integer Number of records per page. Default 50, max 200.

Responses

200 PagedResult_PublicQuoteLineResponse

Paginated response: the fields below sit in items[], wrapped in totalCount, page, pageSize, totalPages, hasPreviousPage and hasNextPage. Paginated

Field Type Description
description string · nullable Line description as it appears on the quote.
discountPercent decimal Line discount in percent. Serialised as a decimal string.
itemNumber string · nullable Item number. Null on a free-text line — quotes created through this API always carry an item, but quotes written inside the ERP may have lines that are pure text.
lineNumber integer Line number, unique within the quote.
lineTotal decimal Line total excluding VAT, after discount. Serialised as a decimal string.
quantity decimal Quantity. Serialised as a decimal string.
taxPercent decimal VAT rate applied to the line, in percent. Serialised as a decimal string.
unit string · nullable Unit of measure code. Null if not set.
unitPrice decimal Net unit price in the quote currency. Serialised as a decimal string.
404 ProblemDetails No quote with that quote number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/preview/quotes/{quoteNumber}/lines" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "description": "string",
      "discountPercent": "12.50",
      "itemNumber": "WIDGET-A",
      "lineNumber": 1,
      "lineTotal": "299.00",
      "quantity": "10",
      "taxPercent": "12.50",
      "unit": "st",
      "unitPrice": "299.00"
    }
  ],
  "page": 1,
  "pageSize": 50,
  "totalCount": 137,
  "totalPages": 3
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

POST /quotes/{quoteNumber}/send

Send a quote

Moves the quote from Draft to Sent. mode=MarkAsSent (the default) only records the transition — use it when your own system delivers the quote to the customer. mode=Email makes Fluit render the quote PDF and email it.

Show the full description

With mode=Email the mail leaves immediately and cannot be recalled, so treat a retry as a second email to the customer rather than a no-op.

Path parameters

Field Type Description
quoteNumber Required string Quote number of the draft quote to send.

Body

Field Type Description
language string · nullable ISO 639-1 language for the document, e.g. `sv`. Defaults to the customer's language.
message string · nullable Email body. Defaults to the tenant's quote template.
mode enum Email MarkAsSent
subject string · nullable Email subject. Defaults to the tenant's quote template.
toEmail string(email) · nullable Recipient address. Required with mode Email unless the contact has one.

Responses

204 Empty body.
400 ProblemDetails mode is Email but no recipient address could be resolved, the quote has no lines to send, or a field failed validation.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No quote with that quote number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The quote is not in Draft.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable

Standard errors: 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/preview/quotes/{quoteNumber}/send" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Let Fluit email the quote
{
  "language": "sv",
  "message": "Hi, please find our quote attached.",
  "mode": "Email",
  "subject": "Your quote from Fluit",
  "toEmail": "inkop@kund.se"
}
Mark as sent
{}
Response 400
{
  "detail": "string",
  "instance": "string",
  "status": 42,
  "title": "string",
  "type": "string"
}

Base URL https://api.erp.fluit.cloud/preview. The response example is generated from the schema: the shape is right, the values are made up.

Schemas

The objects this group's calls refer to. The field tables above go one level deep and link here rather than repeating the same schema on every endpoint.

CreateQuoteLine

CreateQuoteLineInput
Field Type Description
description string · nullable Line text shown to the customer. Defaults to the item's name.
discountPercent decimal · nullable Line discount in percent (0–100).
itemNumber Required string Item number of an existing item. Required: a quote line without an item cannot be carried into a sales order, so the API does not accept one.
quantity decimal Quantity. Must be greater than zero.
unit string · nullable Unit of measure code, e.g. `st`.
unitPrice decimal Net unit price in the quote currency.

DeliveryAddress

PublicDeliveryAddressResponse

Delivery address attached to a sales order.

Field Type Description
city string · nullable City name.
contactPerson string · nullable Contact person at the delivery address. Null if not set.
countryCode string · nullable ISO 3166-1 alpha-2 country code, e.g. `SE`.
email string · nullable Email address at the delivery address. Null if not set.
name string · nullable Recipient company or person name.
phone string · nullable Phone number at the delivery address. Null if not set.
postalCode string · nullable Postal / ZIP code.
street1 string · nullable Street address line 1.
street2 string · nullable Street address line 2 (c/o, suite, etc.). Null if not set.

OrderLine

PublicOrderLineResponse

A single order line returned as part of a sales order detail response.

Field Type Description
deliveredQuantity decimal Quantity already delivered / shipped. Serialised as a decimal string.
discountPercent decimal Line discount in percent (0–100). Serialised as a decimal string.
itemName string · nullable Display name of the ordered item at the time of ordering.
itemNumber string · nullable Item number of the ordered item.
lineNumber integer 1-based sequential line number within the order.
lineTotal decimal Line total excluding tax (UnitPrice × Quantity × (1 − DiscountPercent / 100)). Serialised as a decimal string.
lineTotalIncludingTax decimal Line total including tax. Serialised as a decimal string.
notes string · nullable Free-text line notes. Null if not set.
outstandingQuantity decimal Remaining quantity not yet delivered (Quantity − DeliveredQuantity). Serialised as a decimal string.
plannedDeliveryDate string(date) · nullable Planned delivery date for this specific line. Null if not yet set.
quantity decimal Ordered quantity. Serialised as a decimal string.
status enum Sales order line status values exposed via the Public API. Draft is intentionally omitted. Open Delivered Cancelled
taxPercent decimal Applicable tax / VAT rate in percent. Serialised as a decimal string.
unit string · nullable Unit of measure code, e.g. `st`, `kg`.
unitPrice decimal Net unit price in the order currency. Serialised as a decimal string.

QuoteLine

PublicQuoteLineResponse

A line on a sales quote.

Field Type Description
description string · nullable Line description as it appears on the quote.
discountPercent decimal Line discount in percent. Serialised as a decimal string.
itemNumber string · nullable Item number. Null on a free-text line — quotes created through this API always carry an item, but quotes written inside the ERP may have lines that are pure text.
lineNumber integer Line number, unique within the quote.
lineTotal decimal Line total excluding VAT, after discount. Serialised as a decimal string.
quantity decimal Quantity. Serialised as a decimal string.
taxPercent decimal VAT rate applied to the line, in percent. Serialised as a decimal string.
unit string · nullable Unit of measure code. Null if not set.
unitPrice decimal Net unit price in the quote currency. Serialised as a decimal string.