Hoppa till innehållet

Quote requests

Quote requests: a signed-in customer asks for a price on a set of items, then accepts or declines what comes back. An accepted quote becomes a sales order in the ERP.

5 calls GET POST Base URL https://api.erp.fluit.cloud/ecom

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

GET /portal/quotes

List quotes

Returns a paginated list of quotes for the authenticated customer.

Query parameters

Field Type
page integer
pageSize integer
status string

Responses

200 PortalQuoteListResponse
Field Type
items PortalQuote[] · nullable
page integer
pageSize integer
totalCount integer
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 401 403 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/portal/quotes" \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "items": [
    {
      "currencyCode": "SEK",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "lineCount": 42,
      "quoteDate": "string",
      "quoteNumber": "Q-2026-0184",
      "status": "string",
      "title": "string",
      "totalAmount": "299.00",
      "totalAmountIncludingTax": "299.00",
      "validUntil": "string"
    }
  ],
  "page": 1,
  "pageSize": 50,
  "totalCount": 137
}

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

GET /portal/quotes/{id}

Get quote detail

Returns the full detail of a specific quote for the authenticated customer.

Path parameters

Field Type
id Required string(uuid)

Responses

200 PortalQuoteDetailResponse
Field Type
acceptedAt string · nullable
canAccept boolean
canDecline boolean
contactName string · nullable
currencyCode string · nullable
customerMessage string · nullable
declinedAt string · nullable
description string · nullable
id string(uuid)
lines PortalQuoteLine[] · nullable
quoteDate string · nullable
quoteNumber string · nullable
sentAt string · nullable
status string · nullable
title string · nullable
totalAmount decimal
totalAmountIncludingTax decimal
totalVat decimal
validUntil string · nullable
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 401 404 Errors

Examples

curl
curl "https://api.erp.fluit.cloud/ecom/portal/quotes/{id}" \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"
Response 200
{
  "acceptedAt": "string",
  "canAccept": true,
  "canDecline": true,
  "contactName": "Anna Svensson",
  "currencyCode": "SEK",
  "customerMessage": "string",
  "declinedAt": "string",
  "description": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "lines": [
    {
      "description": "string",
      "discountPercent": "12.50",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "itemNumber": "WIDGET-A",
      "lineTotal": "299.00",
      "lineTotalIncludingTax": "299.00",
      "quantity": "10",
      "unitPrice": "299.00"
    }
  ],
  "quoteDate": "string",
  "quoteNumber": "Q-2026-0184",
  "sentAt": "string",
  "status": "string",
  "title": "string",
  "totalAmount": "299.00",
  "totalAmountIncludingTax": "299.00",
  "totalVat": "299.00",
  "validUntil": "string"
}

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

POST /portal/quotes/{id}/accept

Accept a quote

Accepts a sent quote on behalf of the authenticated customer.

Path parameters

Field Type
id Required string(uuid)

Responses

204 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 400 401 404 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/ecom/portal/quotes/{id}/accept" \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web"

Base URL https://api.erp.fluit.cloud/ecom.

POST /portal/quotes/{id}/decline

Decline a quote

Declines a sent quote on behalf of the authenticated customer.

Path parameters

Field Type
id Required string(uuid)

Body

Field Type
reason string · nullable

Responses

204 Empty body.
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 400 401 404 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/ecom/portal/quotes/{id}/decline" \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web" \
  -H "Content-Type: application/json" \
  -d @body.json

Base URL https://api.erp.fluit.cloud/ecom.

POST /portal/quotes/request

Request a quote

Creates a new quote request from the customer portal.

Body required

Field Type
lines RequestPortalQuoteRequestLine[] · nullable
message string · nullable

Responses

201 RequestPortalQuoteResponse
Field Type
quoteId string(uuid)
quoteNumber string · nullable
429 Rate limit exceeded. Wait the number of seconds given in Retry-After. The body is problem-shaped application/json, not application/problem+json. This API sends no X-RateLimit-* headers — the quota is discovered here.
  • Retry-After — Seconds to wait before retrying.

Standard errors: 400 401 403 Errors

Examples

curl
curl -X POST "https://api.erp.fluit.cloud/ecom/portal/quotes/request" \
  -H "Authorization: Bearer $SESSION_TOKEN" \
  -H "X-Tenant-Id: $FLUIT_TENANT_ID" \
  -H "X-Channel: web" \
  -H "Content-Type: application/json" \
  -d @body.json
Response 201
{
  "quoteId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "quoteNumber": "Q-2026-0184"
}

Base URL https://api.erp.fluit.cloud/ecom. 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.

PortalQuote

PortalQuoteListItem
Field Type
currencyCode string · nullable
id string(uuid)
lineCount integer
quoteDate string · nullable
quoteNumber string · nullable
status string · nullable
title string · nullable
totalAmount decimal
totalAmountIncludingTax decimal
validUntil string · nullable

PortalQuoteLine

PortalQuoteLineResponse
Field Type
description string · nullable
discountPercent decimal
id string(uuid)
itemNumber string · nullable
lineTotal decimal
lineTotalIncludingTax decimal
quantity decimal
unitPrice decimal

RequestPortalQuoteRequestLine

RequestPortalQuoteRequestLine
Field Type
itemId string(uuid)
note string · nullable
quantity decimal