Hoppa till innehållet

Tickets

Support tickets through their whole handling flow: submit one from a contact form, follow its status, update it, exchange messages with the reporter, route it to a team's queue and take it through triage, work, resolution and closure. Addressed by ticketNumber. Tickets created here land in the same queue as tickets created inside the ERP and from the support mailbox. Assignment to a named agent is not exposed — agents are ERP users, and this API routes work by queue instead. Queue codes come from GET /preview/reference/ticket-queues.

20 calls GET POST PATCH DELETE 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 /tickets

List tickets

Returns a paginated list of tickets, sorted by ticketNumber. Use ?customerNumber= to show a customer everything they have reported, ?queueCode= to mirror one team's workload, and ?open=true to skip the finished ones.

Show the full description

An unknown customerNumber or queueCode returns an empty page rather than 404 — the filter narrows the collection, it does not address a resource. ?modifiedSince= (ISO 8601 UTC datetime) returns records created or changed at or after that instant, and is the intended way to run an incremental sync. A change anywhere inside the record counts: editing a line moves the parent's modifiedDate too, so no change can hide below the resource level. Internal notes and the agent-facing history are not part of this representation; messages live under /preview/tickets/{ticketNumber}/comments.

Query parameters

Field Type Description
search string Matches ticket number, title and contact name, case-insensitively and on partial words.
status enum Returns only tickets in this status. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
type enum Returns only tickets of this type. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
priority enum Returns only tickets with this priority. Low Normal High Critical
customerNumber string Returns only tickets belonging to this customer number.
queueCode string Returns only tickets addressed to this ticket queue code.
open boolean true returns only tickets still being handled, false only the finished ones (Resolved, Closed, Cancelled). Omit for both.
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_PublicTicketResponse

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

Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails ?status=, ?type= or ?priority= 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/tickets" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "closedAt": "2026-06-11T09:24:13.418",
      "contactEmail": "order@acme.se",
      "contactName": "Anna Svensson",
      "contactPhone": "string",
      "createdDate": "2026-06-11T09:24:13.418",
      "customerNumber": "CUST-001",
      "description": "string",
      "firmwareVersion": "string",
      "firstResponseAt": "2026-06-11T09:24:13.418",
      "hardwareRevision": "string",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "isAssigned": true,
      "isSuspectedBug": true,
      "itemNumber": "WIDGET-A",
      "links": {
        "self": "string"
      },
      "modifiedDate": "2026-06-11T09:24:13.418",
      "priority": "Low",
      "queueCode": "STD",
      "queueName": "Acme AB",
      "resolutionNotes": "string",
      "resolutionType": "Fixed",
      "resolvedAt": "2026-06-11T09:24:13.418",
      "serialNumber": "ABC-001",
      "slaResolutionBreached": true,
      "slaResolutionDue": "2026-06-11T09:24:13.418",
      "slaResponseBreached": true,
      "slaResponseDue": "2026-06-11T09:24:13.418",
      "status": "New",
      "tags": [
        "string"
      ],
      "ticketNumber": "TIC-2026-0104",
      "title": "string",
      "type": "ServiceIncident"
    }
  ],
  "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 /tickets

Submit a ticket

Creates a support ticket for the authenticated tenant — the endpoint behind a public contact or support form.

Show the full description

The ticket lands in the same queue as tickets created inside the ERP and from the support mailbox. type is one of: ServiceRequest, Complaint, Support, Question (default Support). customerNumber is optional; supply it when the reporter is a known customer, and the ticket is linked to that customer. contactEmail is what the confirmation and the answer are sent to — a ticket without it can only be answered by phone. The response body is the same representation as GET /preview/tickets/{ticketNumber}; the canonical URL is returned in the Location header and in links.self.

Body required

Field Type Description
contactEmail string(email) · nullable Email address for replies. Strongly recommended — without it the reporter gets no confirmation and no answer.
contactName string · nullable Name of the person reporting the issue.
contactPhone string · nullable Phone number of the person reporting the issue.
customerNumber string · nullable Customer the ticket belongs to. Omit when the reporter is not a known customer.
description Required string The full message from the reporter.
title Required string Short summary of the issue. Becomes the ticket's subject line.
type enum The ticket types an external caller may submit. A deliberately narrow subset of PublicApi.Preview.Support.Queries.PublicTicketType: RMA, warranty and internal tickets drive internal flows with their own required fields and are not created from a contact form. ServiceRequest Complaint Support Question

Responses

201 PublicTicketResponse
  • Location — URL of the newly created resource.
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails A field failed validation, or no customer has the customer number given.
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/tickets" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Submit a ticket
{
  "contactEmail": "anna@acme.example",
  "contactName": "Anna Andersson",
  "contactPhone": "+46701234567",
  "customerNumber": "CUST-001",
  "description": "Efter senaste uppdateringen startar inte maskinen. Displayen är svart.",
  "title": "Maskinen startar inte",
  "type": "Support"
}
Response 201
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/{ticketNumber}

Get a ticket by ticket number

Returns the current state of a ticket belonging to the authenticated tenant — use it to show a submitter the status of what they reported. Internal notes and the agent-facing history are not part of this representation.

tickets:read

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to read.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
404 ProblemDetails No ticket with that ticket 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/tickets/{ticketNumber}" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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.

PATCH /tickets/{ticketNumber}

Update a ticket

Partially updates a ticket. Only provided fields are updated (JSON Merge Patch semantics). Omitted fields are left unchanged. Pass null to clear a nullable field.

Show the full description

Unknown fields are rejected with 400, naming the field and listing the ones this endpoint accepts. ticketNumber cannot be changed — it is the resource's address. title and priority cannot be set to null. Status is not patchable: it changes through the action endpoints (/triage, /start, /resolve, /close and the rest), which enforce the allowed transitions and write the ticket's history. Changing priority or customer re-evaluates which SLA policy applies and moves the response and resolution deadlines accordingly. Reference keys that do not exist return 400 with the offending field named.

tickets:write

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to update.

Body required

Field Type Description
contactEmail string(email) · nullable Email address replies are sent to. Pass `null` to clear.
contactName string · nullable Name of the person who reported the issue. Pass `null` to clear.
contactPhone string · nullable Phone number of the reporter. Pass `null` to clear.
customerNumber string · nullable Customer the ticket belongs to. Pass `null` to unlink the customer.
description string · nullable Full description of the issue. Pass `null` to clear.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Pass `null` to clear.
hardwareRevision string · nullable Hardware revision or batch of the unit. Pass `null` to clear.
itemNumber string · nullable Product the ticket concerns. Pass `null` to unlink the product.
priority enum Low Normal High Critical
queueCode string · nullable Ticket queue (team) the ticket is addressed to. Pass `null` to take it out of its queue.
serialNumber string · nullable Serial number as the reporter gave it. Pass `null` to clear.
title string · nullable Short summary of the issue. Cannot be null.

Responses

204 Empty body.
400 ProblemDetails The body is not a JSON object, contains a field this endpoint does not have, a field failed validation, a customerNumber, queueCode or itemNumber does not exist, or title or priority was sent as null.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket is closed or cancelled, so it can no longer be moved between queues.
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 PATCH "https://api.erp.fluit.cloud/preview/tickets/{ticketNumber}" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Content-Type: application/json" \
  -d @body.json
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.

POST /tickets/{ticketNumber}/attachments

Attach a file to a ticket

Uploads a file as multipart/form-data and attaches it to the ticket.

Show the full description

The field name is 'file'; everything else is a query parameter. isInternal hides the file from the reporter in the customer portal and defaults to false — a file sent through the API belongs to the conversation unless you say otherwise. createdAt backdates the attachment to when it was attached in the system the ticket was migrated from, and only works on a ticket created through POST /preview/tickets/migrate; without it the file is dated now. File types are checked by extension against the same allowlist the customer portal uses, so executables are refused no matter who uploads them. Maximum 50 MB per file. Known error codes: Ticket.AttachmentTooLarge, Ticket.AttachmentTypeNotAllowed, Ticket.NotMigrated.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to attach the file to.

Query parameters

Field Type Description
isInternal boolean Hide the file from the reporter in the customer portal. Defaults to false.
createdAt string(date-time) When the file was attached in the source system (ISO 8601). Migrated tickets only.
description string Short description shown next to the file.

Body

Field Type
file Required string(binary)

Responses

201 AddTicketAttachmentAddedAttachment
  • Location — URL of the newly created resource.
Field Type Description
fileName string · nullable The file name as stored, with any path parts removed.
id string(uuid) Id of the stored attachment.
sizeBytes integer Size of the stored file.
400 ProblemDetails The file is empty, larger than 50 MB, of a type that cannot be attached, or the Content-Type header or description is longer than allowed.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails createdAt was given for a ticket that was not migrated.
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/tickets/{ticketNumber}/attachments" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Response 201
{
  "fileName": "widget-a-front.jpg",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "sizeBytes": 42
}

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 /tickets/{ticketNumber}/cancel

Cancel a ticket

Cancels the ticket — the issue is no longer relevant, the request was withdrawn, or it was a duplicate. Nothing is deleted: the ticket stays readable and can be brought back with /reopen.

Show the full description

Use /resolve instead when something was actually done; cancelled tickets are excluded from resolution statistics. Returns the ticket in its new state. Known error codes: Ticket.AlreadyClosed, Ticket.AlreadyCancelled.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to cancel.

Body

Field Type Description
reason string · nullable Why the ticket is cancelled. Stored in the ticket's history. Optional.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
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 ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket is already closed or cancelled.
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/tickets/{ticketNumber}/cancel" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
With a reason
{
  "reason": "Dubblett av TKT-2026-00041."
}
No reason
{}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/{ticketNumber}/close

Close a ticket

Closes the ticket and stamps closedAt. A ticket is normally resolved first — /resolve records how it was solved, which is what resolution statistics read — but closing an unresolved ticket is allowed for the cases where nothing was solved and nothing more will happen.

Show the full description

A closed ticket can be brought back with /reopen. Returns the ticket in its new state. Known error codes: Ticket.AlreadyClosed, Ticket.AlreadyCancelled.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to close.

Body

Field Type Description
note string · nullable Closing note stored in the ticket's history. Optional.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails note 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 ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket is already closed or cancelled.
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/tickets/{ticketNumber}/close" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
With a note
{
  "note": "Kunden bekräftar att felet är borta."
}
No note
{}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/{ticketNumber}/comments

List ticket messages

Returns the conversation on a ticket, oldest first — what the reporter wrote and what the agents answered. This is what a status page or a support widget shows under the ticket.

Show the full description

Internal notes are left out unless ?includeInternal=true, which exists for integrations that mirror the whole ticket into another system. They are written by agents for agents and are not safe to show a customer. isFromAgent tells the two apart when rendering; the individual agent is not named.

tickets:read Paginated

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket whose messages to list.

Query parameters

Field Type Description
includeInternal boolean Includes internal notes in the result. They are excluded by default and must never be shown to the reporter.
page integer Page to return, 1-based. Default 1.
pageSize integer Number of records per page. Default 50, max 200.

Responses

200 PagedResult_PublicTicketCommentResponse

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

Field Type Description
content string · nullable The message body.
createdDate string(date-time) UTC timestamp when the message was written.
externalAuthorName string · nullable Name of the author when the message came from outside the ERP — a reporter or an integration. Null when an agent wrote it; agents are not identified in the public contract.
id string(uuid) Internal unique identifier of the comment (UUID v7).
isFromAgent boolean Whether the message was written by an agent inside the ERP rather than by the reporter.
isInternal boolean Whether the message is an internal note. Internal notes are only returned when the request asks for them explicitly, and must never be shown to the reporter.
404 ProblemDetails No ticket with that ticket 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/tickets/{ticketNumber}/comments" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 200
{
  "hasNextPage": true,
  "hasPreviousPage": true,
  "items": [
    {
      "content": "string",
      "createdDate": "2026-06-11T09:24:13.418",
      "externalAuthorName": "Acme AB",
      "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
      "isFromAgent": true,
      "isInternal": true
    }
  ],
  "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 /tickets/{ticketNumber}/comments

Add a message to a ticket

Appends a message to the ticket's conversation — the reporter answering a question, or an integration reporting what happened on its side. The message is visible to the reporter unless isInternal is true. authorName is who the message is from; it is free text because the sender is outside the ERP and has no user account here.

Show the full description

The Location header points at the ticket's message collection, which is where the message can be read back — an individual message has no URL of its own.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to add the message to.

Body required

Field Type Description
authorName string · nullable Name of the person the message is from. Shown next to the message.
content Required string The message body.
isInternal boolean · nullable Marks the message as an internal note, hidden from the reporter. Defaults to false — a message from an integration is normally the reporter answering.

Responses

201 AddTicketCommentAddedComment
  • Location — URL of the newly created resource.
Field Type Description
id string(uuid) Internal identifier of the message that was added.
400 ProblemDetails content is empty or longer than the allowed length.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No ticket with that ticket 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 -X POST "https://api.erp.fluit.cloud/preview/tickets/{ticketNumber}/comments" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Note from an integration
{
  "authorName": "Servicerobot",
  "content": "Fjärrdiagnostik körd: felkod E42 kvarstår.",
  "isInternal": true
}
Reply from the reporter
{
  "content": "Problemet kvarstår efter omstart."
}
Response 201
{
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44"
}

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 /tickets/{ticketNumber}/hold

Pause a ticket

Moves the ticket to OnHold: work is deliberately postponed, without waiting for a particular reply or delivery. Use /wait-customer or /wait-internal when there is something specific being waited for — those states are what SLA reporting reads.

Show the full description

Returns the ticket in its new state. Known error codes: Ticket.AlreadyClosed, Ticket.AlreadyCancelled, Ticket.InvalidStatusTransition.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to pause.

Body

Field Type Description
note string · nullable Why the ticket is paused. Stored in the ticket's history. Optional.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails note 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 ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket is resolved, closed or cancelled. A resolved ticket has to be reopened first.
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/tickets/{ticketNumber}/hold" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
With a note
{
  "note": "Pausat till efter semesterperioden."
}
No note
{}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/{ticketNumber}/queue

Move a ticket to a queue

Addresses the ticket to a team's queue so whoever is on duty can pick it up. This is how routing works through this API — assignment to a named agent is not exposed, because the agents are ERP users and this API does not expose users.

Show the full description

Omitting queueCode, or sending it as null, takes the ticket out of its queue. The status is untouched: a queued ticket is still unhandled until someone takes it. Valid codes come from GET /preview/reference/ticket-queues. Returns the ticket in its new state. Known error codes: Ticket.CannotAssignToClosedTicket, Ticket.AlreadyCancelled.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to move.

Body required

Field Type Description
note string · nullable Note stored in the ticket's history. Optional.
queueCode string · nullable Code of the queue to move the ticket to, from GET /preview/reference/ticket-queues. Pass `null` to take the ticket out of its queue.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails queueCode names a queue that does not exist or is inactive.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket is closed or cancelled and can no longer be moved.
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/tickets/{ticketNumber}/queue" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Take it out of its queue
{
  "note": "Hanteras direkt av säljaren.",
  "queueCode": null
}
Move to a queue
{
  "queueCode": "SERVICE"
}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/{ticketNumber}/reopen

Reopen a ticket

Brings a resolved, closed or cancelled ticket back to InProgress — the issue recurred, or it was not actually solved. resolvedAt, closedAt, resolutionType and resolutionNotes are cleared, and the resolution deadline starts over: the old target belonged to the finished round.

Show the full description

The recorded root cause is kept — it is what was found out about the product, and it stays true whether or not the fix held. This is the way back into handling; the other transitions refuse to act on a resolved ticket precisely so the reset happens here. Returns the ticket in its new state. Known error code: Ticket.InvalidStatusTransition.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to reopen.

Body

Field Type Description
note string · nullable Why the ticket is being reopened. Stored in the ticket's history. Optional.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails note 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 ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket is not resolved, closed or cancelled — there is nothing to reopen.
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/tickets/{ticketNumber}/reopen" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
With a note
{
  "note": "Felet är tillbaka efter två veckor."
}
No note
{}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/{ticketNumber}/resolve

Resolve a ticket

Marks the ticket resolved, stamps resolvedAt and records how it was solved.

Show the full description

The SLA clock stops here and the resolution target is evaluated, so a ticket resolved past its deadline comes back with slaResolutionBreached = true. resolutionType is one of: Fixed, CannotReproduce, Duplicate, WontFix, CustomerResolved, RmaApproved, RmaRejected, Refunded, Replaced, ReturnVisitRequired, ResolvedByInstruction, FirmwareUpdate, ConfigurationChange, NoFaultFound. resolutionNotes is what the reporter is told; rootCause is the internal analysis and is not part of the ticket representation. Resolving does not close the ticket — the reporter may still come back. Close it with /close, or bring it back with /reopen. Returns the ticket in its new state. Known error codes: Ticket.AlreadyClosed, Ticket.AlreadyCancelled, Ticket.ResolutionRequiredToResolve.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to resolve.

Body required

Field Type Description
resolutionNotes string · nullable The resolution as described to the reporter. Optional.
resolutionType Required enum Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
rootCause string · nullable What actually caused the issue. Optional.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails resolutionType is missing or outside its list of values, or resolutionNotes or rootCause is longer than the allowed length.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket is already closed or cancelled.
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/tickets/{ticketNumber}/resolve" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
With notes and root cause
{
  "resolutionNotes": "Uppdaterad till firmware 2.4.2, felet går inte att återskapa.",
  "resolutionType": "FirmwareUpdate",
  "rootCause": "Regression i 2.4.0 vid kall start."
}
Fixed
{
  "resolutionType": "Fixed"
}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/{ticketNumber}/start

Start work on a ticket

Moves the ticket to InProgress — someone is now working on it. Returns the ticket in its new state, so a mirror does not need a second request. Known error codes: Ticket.AlreadyClosed, Ticket.AlreadyCancelled, Ticket.InvalidStatusTransition.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to start work on.

Body

Field Type Description
note string · nullable Note stored in the ticket's history. Optional.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails note 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 ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket is resolved, closed or cancelled. A resolved ticket has to be reopened first.
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/tickets/{ticketNumber}/start" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
With a note
{
  "note": "Tekniker tilldelad, felsökning påbörjad."
}
No note
{}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/{ticketNumber}/tags

Tag a ticket

Adds a tag to the ticket for categorisation. Tags are free text and are created by being used — there is no tag register to keep in sync. Adding a tag the ticket already has changes nothing and still returns 200, so a classifier can re-run over the same ticket without special-casing. Returns the ticket with its tags.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to tag.

Body required

Field Type Description
tag Required string The tag to add, e.g. `garanti` or `fältservice`.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails tag is missing or longer than 50 characters.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No ticket with that ticket 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 -X POST "https://api.erp.fluit.cloud/preview/tickets/{ticketNumber}/tags" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
Add a tag
{
  "tag": "garanti"
}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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.

DELETE /tickets/{ticketNumber}/tags/{tag}

Remove a tag from a ticket

Removes a tag from the ticket. Removing a tag the ticket does not have is not an error — the end state is the same either way, so a retried call cannot fail on the second attempt. The 404 is about the ticket, not the tag.

tickets:write

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to untag.
tag Required string The tag to remove. Percent-encode it if it contains reserved characters.

Responses

204 Empty body.
404 ProblemDetails No ticket with that ticket 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 -X DELETE "https://api.erp.fluit.cloud/preview/tickets/{ticketNumber}/tags/{tag}" \
  -H "X-Api-Key: fluit_live_sk_..."
Response 404
{
  "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.

POST /tickets/{ticketNumber}/triage

Triage a ticket

Sets the priority on a ticket that is still New and moves it to Triaged — the first pass a support desk makes over its inbox. priority is one of: Low, Normal, High, Critical.

Show the full description

The priority decides which SLA policy applies, so the response and resolution deadlines are recalculated here. Returns the ticket in its new state. Known error code: Ticket.InvalidStatusTransition.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to triage.

Body required

Field Type Description
note string · nullable Note stored in the ticket's history. Optional.
priority Required enum Low Normal High Critical

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails priority is missing or outside its list of values.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
404 ProblemDetails No ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket has already left New — triage only applies to an unhandled ticket. Use PATCH to change the priority later.
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/tickets/{ticketNumber}/triage" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
With a note
{
  "note": "Produktionsstopp hos kunden.",
  "priority": "Critical"
}
Set the priority
{
  "priority": "High"
}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/{ticketNumber}/wait-customer

Wait for the reporter

Moves the ticket to WaitingCustomer: the handler has asked a question and cannot continue until it is answered. The distinction from WaitingInternal matters for SLA reporting — waiting on the customer is not time the supplier owns.

Show the full description

Returns the ticket in its new state. Known error codes: Ticket.AlreadyClosed, Ticket.AlreadyCancelled, Ticket.InvalidStatusTransition.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to park.

Body

Field Type Description
note string · nullable What the reporter was asked. Stored in the ticket's history. Optional.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails note 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 ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket is resolved, closed or cancelled. A resolved ticket has to be reopened first.
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/tickets/{ticketNumber}/wait-customer" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
With a note
{
  "note": "Bad kunden fotografera typskylten."
}
No note
{}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/{ticketNumber}/wait-internal

Wait for something internal

Moves the ticket to WaitingInternal: work is blocked on spare parts, a supplier delivery or another department rather than on the reporter. Returns the ticket in its new state. Known error codes: Ticket.AlreadyClosed, Ticket.AlreadyCancelled, Ticket.InvalidStatusTransition.

Path parameters

Field Type Description
ticketNumber Required string Ticket number of the ticket to park.

Body

Field Type Description
note string · nullable What is being waited for. Stored in the ticket's history. Optional.

Responses

200 PublicTicketResponse
Field Type Description
closedAt string(date-time) · nullable UTC timestamp when the ticket was closed. Null while open.
contactEmail string · nullable Email address of the person who reported the issue. Null if not set.
contactName string · nullable Name of the person who reported the issue. Null if not set.
contactPhone string · nullable Phone number of the person who reported the issue. Null if not set.
createdDate string(date-time) UTC timestamp when the ticket was created.
customerNumber string · nullable Customer number of the customer the ticket belongs to. Null when the reporter could not be matched to a customer.
description string · nullable Full description as submitted. Null if not set.
firmwareVersion string · nullable Firmware version in the unit when the fault occurred. Null if not set.
firstResponseAt string(date-time) · nullable UTC timestamp of the first reply to the reporter. Null until answered.
hardwareRevision string · nullable Hardware revision or batch of the unit. Null if not set.
id string(uuid) Internal unique identifier (UUID v7).
isAssigned boolean Whether a named agent has picked the ticket up. Who that is stays internal.
isSuspectedBug boolean Whether the ticket is flagged as a suspected product fault rather than handling.
itemNumber string · nullable Item number of the product the ticket concerns. Null when no product is linked.
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.
priority enum Ticket priority values exposed via the Public API. Mirrors `Domain.Tickets.TicketPriority` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Low Normal High Critical
queueCode string · nullable Code of the ticket queue (team) the ticket is addressed to. Null when it is in no queue.
queueName string · nullable Display name of the ticket queue. Null when the ticket is in no queue.
resolutionNotes string · nullable The resolution as described to the reporter. Null while unresolved or if not set.
resolutionType enum How a ticket was resolved, exposed via the Public API. Mirrors `Domain.Tickets.TicketResolutionType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable UTC timestamp when the ticket was resolved. Null while unresolved.
serialNumber string · nullable Serial number as the reporter gave it. Free text — it does not have to exist in the serial register.
slaResolutionBreached boolean Whether the resolution deadline was passed.
slaResolutionDue string(date-time) · nullable UTC deadline for resolution under the ticket's SLA. Null when no SLA policy applies.
slaResponseBreached boolean Whether the response deadline was passed.
slaResponseDue string(date-time) · nullable UTC deadline for the first reply under the ticket's SLA. Null when no SLA policy applies.
status enum Ticket status values exposed via the Public API. Mirrors `Domain.Tickets.TicketStatus` name-for-name and value-for-value so the projection can cast the domain value straight across. `PublicTicketEnumParityTests` fails the build if the two drift apart, which is what stops a new domain value from silently serialising as a bare number. New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags on the ticket, sorted alphabetically. Empty when the ticket has none.
ticketNumber string · nullable Unique ticket number — business key used in all URL references, e.g. `TKT-2026-00042`.
title string · nullable Short summary of the issue.
type enum Ticket type values exposed via the Public API. Mirrors `Domain.Tickets.TicketType` — see PublicApi.Preview.Support.Queries.PublicTicketStatus. ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest
400 ProblemDetails note 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 ticket with that ticket number.
Field Type
detail string · nullable
instance string · nullable
status integer · nullable
title string · nullable
type string · nullable
409 ProblemDetails The ticket is resolved, closed or cancelled. A resolved ticket has to be reopened first.
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/tickets/{ticketNumber}/wait-internal" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
With a note
{
  "note": "Väntar på reservdel, beräknad ankomst vecka 34."
}
No note
{}
Response 200
{
  "closedAt": "2026-06-11T09:24:13.418",
  "contactEmail": "order@acme.se",
  "contactName": "Anna Svensson",
  "contactPhone": "string",
  "createdDate": "2026-06-11T09:24:13.418",
  "customerNumber": "CUST-001",
  "description": "string",
  "firmwareVersion": "string",
  "firstResponseAt": "2026-06-11T09:24:13.418",
  "hardwareRevision": "string",
  "id": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "isAssigned": true,
  "isSuspectedBug": true,
  "itemNumber": "WIDGET-A",
  "links": {
    "self": "string"
  },
  "modifiedDate": "2026-06-11T09:24:13.418",
  "priority": "Low",
  "queueCode": "STD",
  "queueName": "Acme AB",
  "resolutionNotes": "string",
  "resolutionType": "Fixed",
  "resolvedAt": "2026-06-11T09:24:13.418",
  "serialNumber": "ABC-001",
  "slaResolutionBreached": true,
  "slaResolutionDue": "2026-06-11T09:24:13.418",
  "slaResponseBreached": true,
  "slaResponseDue": "2026-06-11T09:24:13.418",
  "status": "New",
  "tags": [
    "string"
  ],
  "ticketNumber": "TIC-2026-0104",
  "title": "string",
  "type": "ServiceIncident"
}

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 /tickets/migrate

Migrate a ticket from another system

Creates a ticket that already happened, with its history intact: the date it was created, the status it ended in, how it was resolved and the whole message thread.

Show the full description

This is the endpoint for moving ticket history into Fluit when a support system is replaced — use POST /preview/tickets for tickets that are happening now. externalReference is required and must be unique; prefix it with the source system, e.g. 'SuperOffice:112614'. Posting the same reference twice does not create a second ticket — the response is 200 with the ticket that already exists and alreadyExisted = true, so an interrupted migration can simply be run again. The ticket sends no notifications and gets no SLA times: the reporter should not receive a confirmation for a ticket they filed two years ago, and our SLA policies never applied to it. Attach files with POST /preview/tickets/{ticketNumber}/attachments, passing the same original date so the files do not all look like they arrived on migration day. Known error codes: Ticket.ExternalReferenceRequired, Ticket.MigratedCreatedAtRequired, Ticket.MigratedTimestampBeforeCreation, Ticket.CustomerNotFound.

Body required

Field Type Description
closedAt string(date-time) · nullable When the ticket was closed, if known.
contactEmail string · nullable Email address of the reporter, as it stood in the source system.
contactName string · nullable Name of the person who reported the issue.
contactPhone string · nullable Phone number of the reporter.
createdAt Required string(date-time) When the ticket was created in the source system.
customerNumber string · nullable Customer the ticket belongs to. Omit when unknown.
description string · nullable Full description, normally the reporter's first message.
externalReference Required string The ticket's identity in the system it comes from, prefixed with that system's name: `SuperOffice:112614`. Must be unique across tickets — it is what makes the migration resumable.
firstResponseAt string(date-time) · nullable When the first reply went out, if known.
messages MigrateTicketMessage[] · nullable The message thread, oldest first.
priority enum Low Normal High Critical
queueCode string · nullable Code of the queue the ticket should land in.
resolutionNotes string · nullable Resolution description.
resolutionType enum Fixed CannotReproduce Duplicate WontFix CustomerResolved RmaApproved RmaRejected Refunded Replaced ReturnVisitRequired ResolvedByInstruction FirmwareUpdate ConfigurationChange NoFaultFound
resolvedAt string(date-time) · nullable When the ticket was resolved, if known.
source enum Phone Email WebPortal AutomaticAlert ScheduledMaintenance Internal Ecommerce Api WebForm
sourceChannel enum Phone Email Chat WebForm SocialMedia Sms InPerson CustomerPortal
status enum New Triaged Assigned InProgress WaitingCustomer WaitingInternal OnHold Resolved Closed Cancelled
tags string[] · nullable Tags to carry over, e.g. the category from the source system.
title Required string Ticket subject.
type enum ServiceIncident ServiceRequest Maintenance Installation Inspection Rma Warranty Complaint Support Question Internal Firmware FeatureRequest

Responses

200 MigrateTicketResponse
Field Type
alreadyExisted boolean
messageCount integer
ticketId string(uuid)
ticketNumber string · nullable
201 MigrateTicketResponse
  • Location — URL of the newly created resource.
Field Type
alreadyExisted boolean
messageCount integer
ticketId string(uuid)
ticketNumber string · nullable
400 ProblemDetails A field failed validation, no customer has that customer number, or no active queue has that code.
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/tickets/migrate" \
  -H "X-Api-Key: fluit_live_sk_..." \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d @body.json
A closed ticket with one message
{
  "closedAt": "2024-12-20T16:05:00",
  "contactEmail": "john@example.com",
  "contactName": "John Smith",
  "createdAt": "2024-12-17T09:43:29",
  "description": "Matrisen ger ingen bild på utgång 3 efter uppdateringen.",
  "externalReference": "SuperOffice:112614",
  "messages": [
    {
      "authorName": "John Smith",
      "content": "Matrisen ger ingen bild på utgång 3.",
      "createdAt": "2024-12-17T09:43:29"
    }
  ],
  "status": "Closed",
  "tags": [
    "TightAV/Support"
  ],
  "title": "Ingen bild på utgång 3"
}
Response 200
{
  "alreadyExisted": true,
  "messageCount": 42,
  "ticketId": "0f8b2c1e-4d3a-4b7e-9f10-2a6c5d8e1b44",
  "ticketNumber": "TIC-2026-0104"
}

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.

MigrateTicketMessage

MigrateTicketMessageRequest
Field Type Description
authorName string · nullable Who wrote it. Shown next to the message in the thread.
content Required string The message body.
createdAt Required string(date-time) When the message was written in the source system.
isInternal boolean Internal note, never shown to the reporter in the portal.