openapi: 3.0.0
info:
title: Xentral Account SalesOrder API
version: v0.1
description: Xentral is an ERP platform.
contact:
name: Xentral
url: https://xentral.com
email: api@xentral.com
servers:
- url: https://{xentralId}.xentral.biz
description: Your Xentral Instance
variables:
xentralId:
default: xentral
- url: https://{domain}
description: Xentral at a custom domain
variables:
domain:
default: xentral.com
security:
- BearerAuth: []
tags:
- name: SalesOrder
description: SalesOrder
paths:
/api/v3/salesOrders:
get:
tags:
- SalesOrder
summary: List sales orders V3
description: 'This endpoint requires the following scopes: `salesOrder:read`.
Paginated list of Sales Orders'
operationId: GET::api-v3-salesorders
parameters:
- name: filter
in: query
description: "The filter parameter is used to filter the results of the given endpoint. \n\n\n**Supported filter operators by key:** \n\n`id`: *equals*, *notEquals*, *in*, *notIn* \n\n`documentNumber`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentDate`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`writeProtection`: *equals*, *notEquals* \n\n`address.id`: *equals*, *notEquals*, *in*, *notIn* \n\n`project.id`: *equals*, *notEquals*, *in*, *notIn* \n\n`tags`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`tags.id`: *equals*, *notEquals*, *in*, *notIn* \n\n`language`: *equals*, *notEquals*, *in*, *notIn* \n\n`bodyIntroduction`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`bodyOutroduction`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`project.abbreviation`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`internalDesignation`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`vatId`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deliveryTerms`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`internalComment`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`isDocumentSent`: *equals*, *notEquals* \n\n`editor.id`: *equals*, *notEquals*, *in*, *notIn* \n\n`createdAt`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals*, *isNull*, *isNotNull* \n\n`updatedAt`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals*, *isNull*, *isNotNull* \n\n`documentAddress.name`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.title`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.contactPerson`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.department`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.subDepartment`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.addressSupplement`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.street`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.zipCode`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.city`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.state`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.country`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.gln`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.email`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.phone`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`documentAddress.fax`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`financials.paymentMethod.id`: *equals*, *notEquals*, *in*, *notIn* \n\n`financials.tax.disableTaxNotice`: *equals*, *notEquals* \n\n`financials.tax.taxRates.standard`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`financials.tax.taxRates.reduced`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`financials.tax.taxation`: *equals*, *notEquals*, *in*, *notIn* \n\n`totals.net.amount`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`totals.net.currency`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`financials.paymentTerms.paymentTargetDays`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`financials.paymentTerms.paymentTargetDiscount`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`financials.paymentTerms.paymentTargetDiscountDays`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`totals.gross.amount`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`trafficLights.stock`: *equals*, *notEquals* \n\n`trafficLights.vat`: *equals*, *notEquals* \n\n`trafficLights.cashOnDelivery`: *equals*, *notEquals* \n\n`trafficLights.autoShipping`: *equals*, *notEquals* \n\n`trafficLights.customerCheck`: *equals*, *notEquals* \n\n`trafficLights.dateOfDelivery`: *equals*, *notEquals* \n\n`trafficLights.creditLimit`: *equals*, *notEquals* \n\n`trafficLights.deliveryBlock`: *equals*, *notEquals* \n\n`trafficLights.addressValidation`: *equals*, *notEquals* \n\n`trafficLights.production`: *equals*, *notEquals*, *in*, *notIn* \n\n`trafficLights.payment`: *equals*, *notEquals*, *in*, *notIn* \n\n`trafficLights.stockAvailableOpenSupply`: *equals*, *notEquals*, *in*, *notIn* \n\n`trafficLights.stockAvailableFifo`: *equals*, *notEquals*, *in*, *notIn* \n\n`status`: *equals*, *notEquals*, *in*, *notIn* \n\n`sales.id`: *equals*, *notEquals*, *in*, *notIn* \n\n`costCenter`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`customerNumber`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`supplierNumber`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.name`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.title`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.contactPerson`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.department`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.subDepartment`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.addressSupplement`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.street`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.zipCode`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.city`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.state`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.country`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.gln`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.email`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.phone`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`deviatingDeliveryAddress.fax`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`isSalesOrderToSupplier`: *equals*, *notEquals* \n\n`externalOrderNumber`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`customerOrderNumber`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`transactionNumber`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`externalOrderId`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`masterReferenceNumber`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`desiredDeliveryDate`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`desiredDeliveryDateAsCalendarWeek`: *equals*, *notEquals* \n\n`earliestFulfillmentDate`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`reservationDate`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`preferredWarehouse.id`: *equals*, *notEquals*, *in*, *notIn* \n\n`commissionConsignmentWarehouse.id`: *equals*, *notEquals*, *in*, *notIn* \n\n`storageCountry`: *equals*, *notEquals*, *in*, *notIn* \n\n`useAlternativeDocumentTitle`: *equals*, *notEquals* \n\n`autoDispatch`: *equals*, *notEquals* \n\n`vatChecked`: *equals*, *notEquals* \n\n`createDocuments`: *equals*, *notEquals*, *in*, *notIn* \n\n`manualPaymentApproval`: *equals*, *notEquals* \n\n`manualShippingCostApproval`: *equals*, *notEquals* \n\n`manualDeliveryBlockApproval`: *equals*, *notEquals* \n\n`fastLane`: *equals*, *notEquals* \n\n`disableCancellationEmail`: *equals*, *notEquals* \n\n`disableTrackingEmail`: *equals*, *notEquals* \n\n`disablePaymentEmail`: *equals*, *notEquals* \n\n`directDebitDate`: *equals*, *notEquals*, *lessThan*, *lessThanOrEquals*, *greaterThan*, *greaterThanOrEquals* \n\n`shippingMethod.id`: *equals*, *notEquals*, *in*, *notIn* \n\n`lineItems.externalNumber`: *equals*, *notEquals*, *in*, *notIn*, *contains*, *notContains*, *startsWith*, *endsWith* \n\n`hasInvoice`: *equals*, *notEquals*"
required: false
style: deepObject
schema:
type: array
items:
properties:
key:
type: string
enum:
- id
- documentNumber
- documentDate
- writeProtection
- address.id
- project.id
- tags
- tags.id
- language
- bodyIntroduction
- bodyOutroduction
- project.abbreviation
- internalDesignation
- vatId
- deliveryTerms
- internalComment
- isDocumentSent
- editor.id
- createdAt
- updatedAt
- documentAddress.name
- documentAddress.title
- documentAddress.contactPerson
- documentAddress.department
- documentAddress.subDepartment
- documentAddress.addressSupplement
- documentAddress.street
- documentAddress.zipCode
- documentAddress.city
- documentAddress.state
- documentAddress.country
- documentAddress.gln
- documentAddress.email
- documentAddress.phone
- documentAddress.fax
- financials.paymentMethod.id
- financials.tax.disableTaxNotice
- financials.tax.taxRates.standard
- financials.tax.taxRates.reduced
- financials.tax.taxation
- totals.net.amount
- totals.net.currency
- financials.paymentTerms.paymentTargetDays
- financials.paymentTerms.paymentTargetDiscount
- financials.paymentTerms.paymentTargetDiscountDays
- totals.gross.amount
- trafficLights.stock
- trafficLights.vat
- trafficLights.cashOnDelivery
- trafficLights.autoShipping
- trafficLights.customerCheck
- trafficLights.dateOfDelivery
- trafficLights.creditLimit
- trafficLights.deliveryBlock
- trafficLights.addressValidation
- trafficLights.production
- trafficLights.payment
- trafficLights.stockAvailableOpenSupply
- trafficLights.stockAvailableFifo
- status
- sales.id
- costCenter
- customerNumber
- supplierNumber
- deviatingDeliveryAddress.name
- deviatingDeliveryAddress.title
- deviatingDeliveryAddress.contactPerson
- deviatingDeliveryAddress.department
- deviatingDeliveryAddress.subDepartment
- deviatingDeliveryAddress.addressSupplement
- deviatingDeliveryAddress.street
- deviatingDeliveryAddress.zipCode
- deviatingDeliveryAddress.city
- deviatingDeliveryAddress.state
- deviatingDeliveryAddress.country
- deviatingDeliveryAddress.gln
- deviatingDeliveryAddress.email
- deviatingDeliveryAddress.phone
- deviatingDeliveryAddress.fax
- isSalesOrderToSupplier
- externalOrderNumber
- customerOrderNumber
- transactionNumber
- externalOrderId
- masterReferenceNumber
- desiredDeliveryDate
- desiredDeliveryDateAsCalendarWeek
- earliestFulfillmentDate
- reservationDate
- preferredWarehouse.id
- commissionConsignmentWarehouse.id
- storageCountry
- useAlternativeDocumentTitle
- autoDispatch
- vatChecked
- createDocuments
- manualPaymentApproval
- manualShippingCostApproval
- manualDeliveryBlockApproval
- fastLane
- disableCancellationEmail
- disableTrackingEmail
- disablePaymentEmail
- directDebitDate
- shippingMethod.id
- lineItems.externalNumber
- hasInvoice
op:
description: operator
type: string
enum:
- equals
- notEquals
- in
- notIn
- contains
- notContains
- startsWith
- endsWith
- lessThan
- lessThanOrEquals
- greaterThan
- greaterThanOrEquals
- isNull
- isNotNull
value:
description: The property value.
oneOf:
- title: String
type: string
- title: Array
type: array
items:
type: string
type: object
additionalProperties: false
- name: sort
in: query
description: Sort via id, -id, documentNumber, -documentNumber, documentDate, -documentDate, customerNumber, -customerNumber, documentAddress.country, -documentAddress.country, project.id, -project.id, createdAt, -createdAt, updatedAt and -updatedAt. Default sort is id
required: false
style: form
explode: false
schema:
type: array
items:
enum:
- id
- -id
- documentNumber
- -documentNumber
- documentDate
- -documentDate
- customerNumber
- -customerNumber
- documentAddress.country
- -documentAddress.country
- project.id
- -project.id
- createdAt
- -createdAt
- updatedAt
- -updatedAt
- name: search
in: query
description: Full-text-style search across predefined columns.
required: false
schema:
type: string
- name: include
in: query
required: false
explode: false
schema:
type: array
items:
type: string
enum:
- lineItems
- project
- address
- lineItems.product
- tags
- activity
- customFields
- lineItems.customFields
- name: x-pagination
in: header
description: 'Controls the pagination format. Available types: simple, table, cursor. Defaults to ''simple'' if not specified.'
required: false
schema:
type: string
enum:
- simple
- table
- cursor
example: simple
- name: perPage
in: query
description: 'Number of items per page. Default: 15, Max: 1000'
required: false
schema:
type: integer
example: 15
- name: page
in: query
description: Page number. Only used with simple and table pagination.
required: false
schema:
type: integer
example: 1
- name: cursor
in: query
description: The cursor to use for the paginated call. Only used with cursor pagination. Not compatible with page parameter
required: false
schema:
type: string
example: eyJpZCI6MTUsIl9wb2ludHNUb05leHRJdGVtcyI6dHJ1ZX0
responses:
'200':
description: Paginated list of Sales Orders
content:
application/json:
schema:
anyOf:
- title: 'Paginated Response: simple'
properties:
data:
type: array
items:
description: Sales order document
type: object
allOf:
- properties:
id:
description: ID of the document
type: string
example: '1'
documentNumber:
description: Document number. For drafts, this will be null.
type:
- string
- 'null'
example: I-12343
documentDate:
description: Main date of the document.
type:
- string
- 'null'
format: date
example: '2023-10-01'
writeProtection:
description: Indicates if the document is write protected.
type: boolean
example: false
customerNumber:
description: Customer number of the document.
type:
- string
- 'null'
example: CUST-54321
address:
description: Address entity of the document. By default, only the ID is returned. To get the full Address object, use the `include` parameter.
anyOf:
- required:
- id
- createdAt
- updatedAt
properties:
id:
type: string
example: '42'
isDeleted:
description: Flagged if the entry was deleted.
type: boolean
example: false
createdAt:
description: Creation timestamp
type: string
format: date-time
example: '2025-03-15T09:27:00+01:00'
updatedAt:
description: Last update timestamp
type: string
format: date-time
example: '2025-10-20T14:45:12+01:00'
type: object
additionalProperties: false
- properties:
id:
type: string
type: object
- type: 'null'
project:
description: Project entity of the document. By default, only the ID is returned. To get the full Project object, use the `include` parameter.
anyOf:
- required:
- id
- name
- abbreviation
properties:
id:
type: string
example: '54'
name:
type: string
example: Standard Project
abbreviation:
type: string
example: STANDARD
type: object
additionalProperties: false
- properties:
id:
type: string
type: object
- type: 'null'
tags:
description: Tags assigned to the document. This property is only returned if the `tags` include is used.
type: array
items:
properties:
id:
description: ID of the tag
type: string
example: '4'
title:
description: Title of the tag
type: string
example: important
type: object
documentAddress:
description: The recipients postal address of the document. This is is usually the postal address of the document's address entitiy, (e.g. customer), or is populated based on the preceding document. As this address is persisted on the document level, it can however be modified independently, and does not reflect changes that occurred since the document was created.
required:
- name
properties:
name:
description: 'Represents an address consisting of a physical address and contact information.
It is used in various documents, such as invoices, delivery notes, etc.'
type: string
example: John
type:
type:
- string
- 'null'
enum:
- mrs
- mr
- company
- other
example: mr
title:
type:
- string
- 'null'
example: Ms.
contactPerson:
type:
- string
- 'null'
example: Laura Schneider
department:
type:
- string
- 'null'
example: Research & Development
subDepartment:
type:
- string
- 'null'
example: AI Lab
addressSupplement:
type:
- string
- 'null'
example: Gebäude B, 4. Etage
street:
type:
- string
- 'null'
example: Fuggerstraße 11
zipCode:
type:
- string
- 'null'
example: '86150'
city:
type:
- string
- 'null'
example: Augsburg
state:
type:
- string
- 'null'
example: BY
country:
type:
- string
- 'null'
example: DE
salutation:
type:
- string
- 'null'
example: Sehr geehrte Damen und Herren
gln:
type:
- string
- 'null'
example: '1234567890123'
email:
type:
- string
- 'null'
example: laura.schneider@xentral.com
phone:
type:
- string
- 'null'
example: +1-234-567-8900
fax:
type:
- string
- 'null'
example: +1-234-567-8901
mobile:
type:
- string
- 'null'
example: +1-234-567-8902
type: object
example:
name: John
type: mr
title: Ms.
contactPerson: Laura Schneider
department: Research & Development
subDepartment: CAI Lab
addressSupplement: Gebäude B, 4. Etage
street: Fuggerstraße 11
zipCode: '86150'
city: Augsburg
state: BY
country: DE
salutation: Sehr geehrte Damen und Herren
gln: '1234567890123'
email: alice@example.com
phone: +1-234-567-8900
fax: +1-234-567-8901
mobile: +1-234-567-8902
additionalProperties: false
internalDesignation:
description: Internal designation, might be displayed in the letterhead.
type:
- string
- 'null'
example: FB-3860-L
isDocumentSent:
description: Indicates if the document has been sent to the recipient.
type: boolean
example: false
language:
description: ISO 639-1 Language of the document.
type: string
example: de
bodyIntroduction:
description: Text displayed on the document before the line items.
type:
- string
- 'null'
example: Dear customer, we are pleased to send you the following invoice.
bodyOutroduction:
description: Text displayed on the document after the line items.
type:
- string
- 'null'
example: Thank you for your business.
vatId:
description: VAT ID of the document.
type:
- string
- 'null'
example: DE123456789
deliveryTerms:
description: Delivery terms of the document.
type:
- string
- 'null'
example: DDP
internalComment:
description: Internal comment, does not s
# --- truncated at 32 KB (668 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/xentral/refs/heads/main/openapi/xentral-salesorder-api-openapi.yml