Order Response APIs

Sections

Qvalia Developer Tools

Access APIs and technical requirements and get connected in no time!

Our APIs and onboarding team ensures a swift integration into your systems and processes. Qvalia integrates with major ERPs and accounting software.

All Qvalia API’s are REST based and we use both JSON and XML request and response payloads. All message formats are based upon UBL and our JSON format is a representation of the XML called UBL JSON by OASIS Open group. We strive to use the REST standards for response codes and “verbs” (e.g. GET and POST).

The Qvalia API has two separate endpoints for our Production and a Test (Quality Assurance) environment.

You must obtain a Qvalia account prior to using (or testing) the API!

Authentication

We use API keys for the Authentication of requests. You can get your API key from our Support team and you’ll get a separate key and URL for Production and Test environments. All requests are using HTTPS with a minimum of TLS 1.2

Parameters Some of our API's has the possibility to provide parameters for e.g. filtering. These parameters are sent as a query string and the options are listed per endpoint under the technical API documentation.

Error handling

We offer various error codes based upon the type of error, along with a descriptive error message (in JSON or XML). Like any other API codes in the range of 2xx is a successful request while a status of 4xx indicates an error that occurred because of the data sent or a parameter missing/in error. In the 5xx range indicate an error with our server/service and you should contact the Qvalia Support if you ever would end up getting any 5xx code as response.

Support

You can always contact Qvalia Support through your Qvalia Sales representative or by using our Support e-mail (see your Qvalia Account for details).

Coding

We use Node.js inhouse, and JSON is our format of choice, however, as many ERP and Financial systems are using XML we have opted to add support for both formats in our API. You can freely swap between XML and JSON, just by using different headers:

Omitting accept or content-type headers, we'll default to JSON!

XML

JSON (Default)

GET requests:

accept: application/xml

POST requests:

content-type: application/xml

GET requests:

accept: application/json

POST requests:

content-type: application/json

Node.js sample code for calling the API for sending a JSON request could look like:

JAVASCRIPT
async function httpsPost(registrationNumber, data) {
return new Promise(async (resolve, reject) => {
const options = {
hostname: 'api.qvalia.com',
path: `/transaction/${registrationNumber}/invoices/outgoing`,
port: 443,
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: '412ee738......d3e469a7'
}
};
const body = [];
const req = https.request(options, res => {
res.on('data', d=> {
body.push(d);
});
res.on('end', () => {
resolve(body);
});
});
req.on('error', e => {
reject(e);
});
req.write(JSON.stringify(data));
req.end();
});
}

Invoice APIs

APIs related to invoice handling

Endpoints

GET
POST
GET
GET
POST

Credit Note APIs

APIs related to credit note handing

Endpoints

GET
POST
GET
GET
POST

Order APIs

APIs related to order handing

Endpoints

GET
POST
GET
GET
POST

Order Response APIs

APIs related to order response handing

Endpoints

GET
POST
GET
GET
POST

Get incoming order responses

The response, in JSON, will always include the three latest messages, per default. Using XML you always only get one (as there's no "array" function for XML).

Use limit parameter to change the number of returned messages and combine it with offset to traverse down the list, e.g: https://api-qa.qvalia.com/transaction/{accountRegNo}/orderResponses/incoming?limit=10&offset=10

To get new messages only, use the "Get incoming read orderresponses" endpoint instead.

Header Parameters

Authorizationstring
Acceptstring

Either "application/json" (default) or "application/xml"

Query Parameters

limitstring
includeReadstring
offsetstring
documentIdstring
fromstring

YYYY-MM-DD, e.g. 2024-01-01

tostring

YYYY-MM-DD, e.g. 2024-01-01

updatedAtFromstring

YYYY-MM-DD, e.g. 2024-01-01

updatedAtTostring

YYYY-MM-DD, e.g. 2024-01-01

integrationIdstring

Path Parameters

accountRegNostring

Responses

200
Object

Response Attributes

statusstring
dataarray

Show child attributes

204
Object
No content
400
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
401
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
403
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
404
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
500
Object

Response Attributes

statusstring
typestring
datastring
metadataobject

Show child attributes

GET

/transaction/{accountRegNo}/orderResponses/incoming?limit=&includeRead=&offset=&documentId=&from=&to=&updatedAtFrom=&updatedAtTo=&integrationId=

Select
1 curl --location --globoff 'https://api.qvalia.com/transaction/{accountRegNo}/orderResponses/incoming' \

Response

{
  "status": "success",
  "data": [
    ""
  ]
}

Post incoming order response

Header Parameters

Authorizationstring
Content-Typestring
Acceptstring

Either "application/json" (default) or "application/xml"

Path Parameters

accountRegNostring

Body Parameters

OrderResponseobject

Responses

200
Object

Response Attributes

statusstring
dataobject

Show child attributes

400
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
401
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
403
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
404
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
409
Object

Response Attributes

statusstring
typestring
datastring
metadataobject

Show child attributes

422
Object

Response Attributes

statusstring
typestring
datastring
metadataobject

Show child attributes

500
Object

Response Attributes

statusstring
typestring
datastring
metadataobject

Show child attributes

POST

/transaction/{accountRegNo}/orderResponses/incoming

Select
1 2 3 4 curl --location --globoff 'https://api.qvalia.com/transaction/{accountRegNo}/orderResponses/incoming' \ --data '{ "OrderResponse": {} }'

Response

{
  "status": "success",
  "data": {
    "message": "order response 12335675 sent",
    "order_response_id": "12335675"
  }
}

Get incoming read order responses

Header Parameters

Authorizationstring
Acceptstring

Either "application/json" (default) or "application/xml"

Query Parameters

limitstring
includeReadstring
offsetstring
documentIdstring
fromstring
tostring
updatedAtFromstring
updatedAtTostring
integrationIdstring

Path Parameters

accountRegNostring

Responses

200
Object

Response Attributes

statusstring
dataarray

Show child attributes

204
Object
No content
400
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
401
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
403
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
404
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
500
Object

Response Attributes

statusstring
typestring
datastring
metadataobject

Show child attributes

GET

/transaction/{accountRegNo}/orderResponses/incoming/readOrderResponses?limit=&includeRead=&offset=&documentId=&from=&to=&updatedAtFrom=&updatedAtTo=&integrationId=

Select
1 curl --location --globoff 'https://api.qvalia.com/transaction/{accountRegNo}/orderResponses/incoming/readOrderResponses' \

Response

{
  "status": "success",
  "data": [
    ""
  ]
}

Get outgoing order responses

The response, in JSON, will always include the three latest messages, per default. Using XML you always only get one (as there's no "array" function for XML).

Use limit parameter to change the number of returned messages and combine it with offset to traverse down the list, e.g: https://api-qa.qvalia.com/transaction/{accountRegNo}/orderResponses/incoming?limit=10&offset=10

To get new messages only, use the "Get outgoing read orderresponses" endpoint instead.

Header Parameters

Authorizationstring
Acceptstring

Either "application/json" (default) or "application/xml"

Path Parameters

accountRegNostring

Responses

200
Object

Response Attributes

statusstring
dataarray

Show child attributes

204
Object
No content
400
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
401
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
403
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
404
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
500
Object

Response Attributes

statusstring
typestring
datastring
metadataobject

Show child attributes

GET

/transaction/{accountRegNo}/orderResponses/outgoing

Select
1 curl --location --globoff 'https://api.qvalia.com/transaction/{accountRegNo}/orderResponses/outgoing' \

Response

{
  "status": "success",
  "data": [
    ""
  ]
}

Post outgoing order response

Header Parameters

Authorizationstring
Content-Typestring
Acceptstring

Either "application/json" (default) or "application/xml"

Path Parameters

accountRegNostring

Body Parameters

OrderResponseobject

Responses

200
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
401
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
403
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
404
Object

Response Attributes

statusCodeinteger
errorstring
messagestring
409
Object

Response Attributes

statusstring
typestring
datastring
metadataobject

Show child attributes

422
Object

Response Attributes

statusstring
typestring
datastring
metadataobject

Show child attributes

500
Object

Response Attributes

statusstring
typestring
datastring
metadataobject

Show child attributes

POST

/transaction/{accountRegNo}/orderResponses/outgoing

Select
1 2 3 4 curl --location --globoff 'https://api.qvalia.com/transaction/{accountRegNo}/orderResponses/outgoing' \ --data '{ "OrderResponse": {} }'

Response

{
  "statusCode": 400,
  "error": "E_INVALID_PARAMETER",
  "message": "Invalid parameters from client"
}

Order Change APIs

APIs related to order change handing

Order Change is part of Advanced Ordering 3.0: https://docs.peppol.eu/poacc/upgrade-3/profiles/65-advanced-ordering/

Message Syntax: https://docs.peppol.eu/poacc/upgrade-3/syntax/OrderChange/tree/

Endpoints

GET
POST
GET
GET
POST

Order Cancellation APIs

APIs related to order cancellation handing

Order Change is part of Advanced Ordering 3.0: https://docs.peppol.eu/poacc/upgrade-3/profiles/65-advanced-ordering/

Message Syntax: https://docs.peppol.eu/poacc/upgrade-3/syntax/adv-order-cancellation-3.0/tree/

Endpoints

GET
POST
GET
GET
POST

Catalogue APIs

APIs related to catalogue handing

Endpoints

GET
POST
GET
GET
POST

Despatch Advice

APIs related to catalogue handing

Endpoints

GET
POST
GET
GET
POST
GET

Account Functions

A collection of endpoints where Qvalia account information is gathered, such as Invoice status, and automation tasks, e.g. creating an outgoing Invoice from an incoming Order.

Endpoints

POST
POST

Enrichment API

This documentation covers only Enrichment endpoint. Please use this alongside Qvalia API documentation at https://api.qvalia.com. API for uploading and enriching invoices (PDF, XML - later). PDFs are converted to digital format and presented as a Peppol XML document. Supports single and batch file processing with asynchronous polling.

Base URL

Production server.:

https://api.qvalia.com

Sandbox server for testing.:

https://api-test.qvalia.com

Language Box

Sample Data

As the request and response sample data are quite big, and scrolling through each sample on every endpoint would get quite tedious, we've opted to add sample data for the various messages here instead of in the actual Endpoint data.

Regardless if you are POST'in or GET'ing data the message structure of the messages will be the same.

As stated in the API section of the documentation, and under JSON/XML or JSON to XML all our transaction messages are bidirectional and can be transformed to/from JSON/XML.f

JSON

XML

json
Select...
{
"Invoice": {
"$": {
"xmlns:cbc": "urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2",
"xmlns:ccts-cct": "urn:un:unece:uncefact:data:specification:CoreComponentTypeSchemaModule:2",
"xmlns:udt": "urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2",
"xmlns:sdt": "urn:oasis:names:specification:ubl:schema:xsd:SpecializedDatatypes-2",
"xmlns:cac": "urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2",
"xmlns:ccts": "urn:oasis:names:specification:ubl:schema:xsd:CoreComponentParameters-2",
"xmlns:ext": "urn:oasis:names:specification:ubl:schema:xsd:CommonExtensionComponents-2",
"xmlns:ds": "http://www.w3.org/2000/09/xmldsig#",
"xmlns": "urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"
},
"cbc:CustomizationID": [
{
"_": "urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0"
}
],
"cbc:ProfileID": [
{
"_": "urn:fdc:peppol.eu:2017:poacc:billing:01:1.0"
}
],
"cbc:ID": [
{
"_": "23000"
}
],
"cbc:IssueDate": [
{
"_": "2023-02-17"
}
],
"cbc:DueDate": [
{
"_": "2022-05-24"
}
],
"cbc:InvoiceTypeCode": [
{
"_": "380"
}
],
"cbc:DocumentCurrencyCode": [
{
"_": "SEK"
}
],
"cbc:BuyerReference": [
{
"_": "Buyer Person"
}
],
"cac:AdditionalDocumentReference": [
{
"cbc:ID": [
{
"_": "AT-1"
}
],
"cac:Attachment": [
{
"cbc:EmbeddedDocumentBinaryObject": [
{
"_": "VmkgdGVzdGFyIGxpdGUgdGV4dA==",
"$": {
"filename": "Fakturabrev.csv",
"mimeCode": "text/csv"
}
}
]
}
]
}
],
"cac:AccountingSupplierParty": [
{
"cac:Party": [
{
"cbc:EndpointID": [
{
"_": "5567321707",
"$": {
"schemeID": "0007"
}
}
],
"cac:PartyIdentification": [
{
"cbc:ID": [
{
"_": "5567321707"
}
]
}
],
"cac:PartyName": [
{
"cbc:Name": [
{
"_": "Qvalia Group AB"
}
]
}
],
"cac:PostalAddress": [
{
"cbc:StreetName": [
{
"_": "Box 33"
}
],
"cbc:CityName": [
{
"_": "Stockholm"
}
],
"cbc:PostalZone": [
{
"_": "12030"
}
],
"cac:Country": [
{
"cbc:IdentificationCode": [
{
"_": "SE"
}
]
}
]
}
],
"cac:PartyTaxScheme": [
{
"cbc:CompanyID": [
{
"_": "SE556732170701"
}
],
"cac:TaxScheme": [
{
"cbc:ID": [
{
"_": "VAT"
}
]
}
]
},
{
"cbc:CompanyID": [
{
"_": "Godkänd för F-skatt"
}
],
"cac:TaxScheme": [
{
"cbc:ID": [
{
"_": "TAX"
}
]
}
]
}
],
"cac:PartyLegalEntity": [
{
"cbc:RegistrationName": [
{
"_": "Qvalia Group AB"
}
],
"cbc:CompanyID": [
{
"_": "5567321707",
"$": {
"schemeID": "0007"
}
}
],
"cbc:CompanyLegalForm": [
{
"_": "Säte Stockholm SE"
}
]
}
],
"cac:Contact": [
{
"cbc:Name": [
{
"_": "Qvalia Support"
}
],
"cbc:Telephone": [
{
"_": "01860412345"
}
],
"cbc:ElectronicMail": [
{
"_": "info@qvalia.com"
}
]
}
]
}
]
}
],
"cac:AccountingCustomerParty": [
{
"cac:Party": [
{
"cbc:EndpointID": [
{
"_": "Tester9000",
"$": {
"schemeID": "0195"
}
}
],
"cac:PartyIdentification": [
{
"cbc:ID": [
{
"_": "1234567890"
}
]
}
],
"cac:PartyName": [
{
"cbc:Name": [
{
"_": "TEST"
}
]
}
],
"cac:PostalAddress": [
{
"cbc:StreetName": [
{
"_": "Box 127"
}
],
"cbc:CityName": [
{
"_": "Uppsala"
}
],
"cbc:PostalZone": [
{
"_": "75104"
}
],
"cac:Country": [
{
"cbc:IdentificationCode": [
{
"_": "SE"
}
]
}
]
}
],
"cac:PartyLegalEntity": [
{
"cbc:RegistrationName": [
{
"_": "TEST"
}
],
"cbc:CompanyID": [
{
"_": "1234567890",
"$": {
"schemeID": "0007"
}
}
]
}
],
"cac:Contact": [
{
"cbc:Name": [
{
"_": "Test Tester"
}
],
"cbc:Telephone": [
{
"_": "0123456"
}
],
"cbc:ElectronicMail": [
{
"_": "leverantorsfaktura@sverige.se"
}
]
}
]
}
]
}
],
"cac:Delivery": [
{
"cbc:ActualDeliveryDate": [
{
"_": "2021-08-24"
}
],
"cac:DeliveryLocation": [
{
"cac:Address": [
{
"cbc:StreetName": [
{
"_": "Street 106"
}
],
"cbc:CityName": [
{
"_": "Västero"
}
],
"cbc:PostalZone": [
{
"_": "73364"
}
],
"cac:AddressLine": [
{
"cbc:Line": [
{
"_": "Tester Test"
}
]
}
],
"cac:Country": [
{
"cbc:IdentificationCode": [
{
"_": "SE"
}
]
}
]
}
]
}
]
}
],
"cac:PaymentMeans": [
{
"cbc:PaymentMeansCode": [
{
"_": "30"
}
],
"cac:PayeeFinancialAccount": [
{
"cbc:ID": [
{
"_": "55677788"
}
],
"cac:FinancialInstitutionBranch": [
{
"cbc:ID": [
{
"_": "SE:BANKGIRO"
}
]
}
]
}
]
},
{
"cbc:PaymentMeansCode": [
{
"_": "30"
}
],
"cac:PayeeFinancialAccount": [
{
"cbc:ID": [
{
"_": "SE6250000000053123456784"
}
],
"cac:FinancialInstitutionBranch": [
{
"cbc:ID": [
{
"_": "ESSESESS"
}
]
}
]
}
]
},
{
"cbc:PaymentMeansCode": [
{
"_": "30"
}
],
"cac:PayeeFinancialAccount": [
{
"cbc:ID": [
{
"_": "12345025134"
}
],
"cac:FinancialInstitutionBranch": [
{
"cbc:ID": [
{
"_": "ESSESESS"
}
]
}
]
}
]
}
],
"cac:PaymentTerms": [
{
"cbc:Note": [
{
"_": "30 dagar netto"
}
]
}
],
"cac:TaxTotal": [
{
"cbc:TaxAmount": [
{
"_": "30.00",
"$": {
"currencyID": "SEK"
}
}
],
"cac:TaxSubtotal": [
{
"cbc:TaxableAmount": [
{
"_": "120.00",
"$": {
"currencyID": "SEK"
}
}
],
"cbc:TaxAmount": [
{
"_": "30.00",
"$": {
"currencyID": "SEK"
}
}
],
"cac:TaxCategory": [
{
"cbc:ID": [
{
"_": "S"
}
],
"cbc:Percent": [
{
"_": "25.00"
}
],
"cac:TaxScheme": [
{
"cbc:ID": [
{
"_": "VAT"
}
]
}
]
}
]
}
]
}
],
"cac:LegalMonetaryTotal": [
{
"cbc:LineExtensionAmount": [
{
"_": "120.00",
"$": {
"currencyID": "SEK"
}
}
],
"cbc:TaxExclusiveAmount": [
{
"_": "120.00",
"$": {
"currencyID": "SEK"
}
}
],
"cbc:TaxInclusiveAmount": [
{
"_": "150.00",
"$": {
"currencyID": "SEK"
}
}
],
"cbc:PayableAmount": [
{
"_": "150.00",
"$": {
"currencyID": "SEK"
}
}
]
}
],
"cac:InvoiceLine": [
{
"cbc:ID": [
{
"_": "1"
}
],
"cbc:Note": [
{
"_": "Delivery reference: 161593"
}
],
"cbc:InvoicedQuantity": [
{
"_": "1",
"$": {
"unitCode": "EA"
}
}
],
"cbc:LineExtensionAmount": [
{
"_": "120.00",
"$": {
"currencyID": "SEK"
}
}
],
"cac:Item": [
{
"cbc:Name": [
{
"_": "Piké, FT, svart Herr.4XL"
}
],
"cac:SellersItemIdentification": [
{
"cbc:ID": [
{
"_": "001,FT-1-4XL"
}
]
}
],
"cac:ClassifiedTaxCategory": [
{
"cbc:ID": [
{
"_": "S"
}
],
"cbc:Percent": [
{
"_": "25.00"
}
],
"cac:TaxScheme": [
{
"cbc:ID": [
{
"_": "VAT"
}
]
}
]
}
]
}
],
"cac:Price": [
{
"cbc:PriceAmount": [
{
"_": "120.00",
"$": {
"currencyID": "SEK"
}
}
]
}
]
}
]
}
}
xml
Select...
<?xml version="1.0" encoding="UTF-8"?>
<Invoice xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns:ccts="urn:un:unece:uncefact:documentation:2" xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2" xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2">
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>1234567890</cbc:ID>
<cbc:IssueDate>2022-05-10</cbc:IssueDate>
<cbc:DueDate>2022-06-09</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>SEK</cbc:DocumentCurrencyCode>
<cbc:BuyerReference>A reference</cbc:BuyerReference>
<cac:OrderReference>
<cbc:ID>Order-12345</cbc:ID>
</cac:OrderReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0007">1234567890</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>A Supplier Company</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Box 12345</cbc:StreetName>
<cbc:CityName>Stockholm</cbc:CityName>
<cbc:PostalZone>10204</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>SE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>SE123456789001</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>A Supplier Company</cbc:RegistrationName>
<cbc:CompanyID schemeID="0007">1234567890</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Contact Person</cbc:Name>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="0007">9876543210</cbc:EndpointID>
<cac:PartyIdentification>
<cbc:ID schemeID="0007">9876543210</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>Buyer Company</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Street 1 A</cbc:StreetName>
<cbc:CityName>City</cbc:CityName>
<cbc:PostalZone>12345</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>SE</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyLegalEntity>
<cbc:RegistrationName>Buyer Company</cbc:RegistrationName>
<cbc:CompanyID schemeID="0007">9876543210</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Customer Contact</cbc:Name>
<cbc:ElectronicMail>john.doe@somewhere.com</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:PaymentMeans>
<cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
<cbc:PaymentID>2609912345678003573</cbc:PaymentID>
<cac:PayeeFinancialAccount>
<cbc:ID>57123456</cbc:ID>
<cac:FinancialInstitutionBranch>
<cbc:ID>SE:BANKGIRO</cbc:ID>
</cac:FinancialInstitutionBranch>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>
<cac:PaymentMeans>
<cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
<cbc:PaymentID>2609912345678003573</cbc:PaymentID>
<cac:PayeeFinancialAccount>
<cbc:ID>SE53 9500 0099 6042 1234 1234</cbc:ID>
<cac:FinancialInstitutionBranch>
<cbc:ID>NDEASESS</cbc:ID>
</cac:FinancialInstitutionBranch>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="SEK">3000</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="SEK">12000</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="SEK">3000</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>25</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="SEK">12000</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="SEK">12000</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="SEK">15000</cbc:TaxInclusiveAmount>
<cbc:ChargeTotalAmount currencyID="SEK">0</cbc:ChargeTotalAmount>
<cbc:PayableAmount currencyID="SEK">15000</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1</cbc:ID>
<cbc:InvoicedQuantity unitCode="EA">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="SEK">12000</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Description>An item description which can be long</cbc:Description>
<cbc:Name>Item name</cbc:Name>
<cac:SellersItemIdentification>
<cbc:ID>Item00001</cbc:ID>
</cac:SellersItemIdentification>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>25</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="SEK">12000</cbc:PriceAmount>
</cac:Price>
</cac:InvoiceLine>
</Invoice>

SFTP-Integration

The Qvalia SFTP integration handles all Peppol XML Document types by default but we also support "custom" formats.

The SFTP setup is done by our helpdesk, and you will require a Qvalia account prior to being able to test the SFTP integration.

Qvalia hosts an SFTP Server, and both sending and receiving is done through an SFTP client from your environment.

Operator

For Swedish operators Qvalia can offer support for the legacy formats Svefaktura 1.0 (Basic Invoice) as well as Svefaktura 2 (Peppol BIS2/4A).

Qvalia is primarily using the protocol SFTI Transportprofil Bas 2.0 over HTTP POST for the Swedish legacy formats. SFTP transportation can also be accepted, and configured, for any Operator who wants to send legacy formats.

We strongly encourage the usage of Peppol instead of legacy formats, but we do understand that some older systems still needs to fall back on older versions of specifications, and we try our best to meet the needs of our customers.

Please reach out to peppol@qvalia.com if you are an Operator who wants to use any of the legacy formats!

SFTI Transportprofil Bas 2.0 is an old and not supported standard, but as some companies and Operators in Sweden still cling to it Qvalia has the option of POST'ing Transportprofil Bas 2.0 over HTTP.

As we would like to follow the recommendation of the Swedish Government and the IT authorities of Sweden we have deprecated the usage of Svefaktura, and try to move all our customers over to Peppol.

After the 1st of March 2021, no new established Svefaktura connections should be added according to DIGG's recommendations and mandate MDFFS 2021:1. See article from SFTI/DIGG here (in Swedish) for more information: https://sfti.se/sfti/standarder/rekommenderadestandarder/avfordameddelanden.52834.html

Sample of a Transportprofil Bas 2.0 Envelope with Svefaktura

Select...

Content-Type: multipart/related; boundary="BoundarY"; type="text/xml";

soapaction: ebXML

Select...

--BoundarY Content-ID: <ebxhmheader1@avsandare.com> Content-Type: text/xml

<?xml version="1.0" encoding="UTF-8"?> <SOAP:Envelope xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns:eb="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://www.oasis-open.org/committees/ebxml-msg/schema/envelope.xsd http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd"> <SOAP:Header> <eb:MessageHeader SOAP:mustUnderstand="1" eb:version="2.0"> <eb:From> <eb:PartyId eb:type="countrycode:organizationid">SE1234567890</eb:PartyId> </eb:From> <eb:To> <eb:PartyId eb:type="countrycode:organizationid">SE9876543210</eb:PartyId> </eb:To> <eb:CPAId>20160214:SE1234567890:SE9876543210</eb:CPAId> <eb:ConversationId>20160214:4567:SE1234567890</eb:ConversationId> <eb:Service>urn:sfti:services:documentprocessing:BasicInvoice</eb:Service> <eb:Action>incomingBasicInvoice</eb:Action> <eb:MessageData> <eb:MessageId>20160214-102030-28572@foretag.se</eb:MessageId> <eb:Timestamp>2016-02-14T11:12:12</eb:Timestamp> </eb:MessageData> </eb:MessageHeader> <eb:AckRequested SOAP:mustUnderstand="1" eb:version="2.0" eb:signed="false" SOAP:actor="urn:oasis:names:tc:ebxml-msg:actor:toPartyMSH"/> <eb:SyncReply eb:id="" eb:version="2.0" SOAP:mustUnderstand="1" SOAP:actor="http://schemas.xmlsoap.org/soap/actor/next"> </eb:SyncReply> </SOAP:Header> <SOAP:Body> <eb:Manifest eb:version="2.0"> <eb:Reference xlink:href="cid:ebxmlpayload1@avsandare.com" xlink:type="simple"> <eb:Description xml:lang="se">Fritext beskrivning av meddelande</eb:Description> <eb:Schema eb:location="urn:se:sfti:collaborationprocesses:BasicInvoice.xsd" eb:version="1.0"></eb:Schema> </eb:Reference> </eb:Manifest> </SOAP:Body> </SOAP:Envelope>

--BoundarY Content-ID: <ebxmlpayload1@avsandare.se> Content-Type: text/xml

<?xml version="1.0" encoding="utf-8"?> <StandardBusinessDocument xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.unece.org/cefact/namespaces/StandardBusinessDocumentHeader"> <StandardBusinessDocumentHeader> <HeaderVersion>1.0</HeaderVersion> <Sender> <Identifier Authority="iso6523-actorid-upis">0088:7301234567890</Identifier> </Sender> <Receiver> <Identifier Authority="iso6523-actorid-upis">0007:1234567890</Identifier> </Receiver> <DocumentIdentification> <Standard>urn:oasis:names:specification:ubl:schema:xsd:Invoice-2</Standard> <TypeVersion>2.1</TypeVersion> <InstanceIdentifier>2016021401022</InstanceIdentifier> <Type>Invoice</Type> <CreationDateAndTime>2016-02-14T14:40:38.4644993+02:00</CreationDateAndTime> </DocumentIdentification> <BusinessScope> <Scope> <Type>DOCUMENTID</Type> <InstanceIdentifier>urn:oasis:names:specification:ubl:schema:xsd:Invoice-2::Invoice##urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0::2.1</InstanceIdentifier> </Scope> <Scope> <Type>PROCESSID</Type> <InstanceIdentifier>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</InstanceIdentifier> </Scope> </BusinessScope> </StandardBusinessDocumentHeader> <Invoice xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2" xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2" xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2"> <cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID> <cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID> <cbc:ID>...</cbc:ID> <cbc:IssueDate>2016-02-14</cbc:IssueDate> <cbc:DueDate>2016-03-31</cbc:DueDate> <cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode> <cbc:DocumentCurrencyCode>SEK</cbc:DocumentCurrencyCode> <cbc:BuyerReference>...</cbc:BuyerReference> <cac:AccountingSupplierParty> ... </cac:AccountingSupplierParty> <cac:AccountingCustomerParty> ... </cac:AccountingCustomerParty> <cac:PaymentMeans> ... </cac:PaymentMeans> <cac:PaymentTerms> ... </cac:PaymentTerms> <cac:TaxTotal> ... </cac:TaxTotal> <cac:LegalMonetaryTotal> ... </cac:LegalMonetaryTotal> <cac:InvoiceLine> ... </cac:InvoiceLine> </Invoice> </StandardBusinessDocument>

--BoundarY––

Sample of a Transportprofil Bas 2.0 Acknowledgement Response

xml
Select...
<?xml version="1.0" encoding="UTF-8"?> <SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/soap/envelope/ http://www.oasis- open.org/committees/ebxml-msg/schema/envelope.xsd" xmlns:eb="http://www.oasis- open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd"> <SOAP:Header xsi:schemaLocation="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd"> <eb:MessageHeader SOAP:mustUnderstand="1" eb:version="2.0"> <eb:From> <eb:PartyId eb:type="countrycode:organizationid">SE1234567890</eb:PartyId> </eb:From> <eb:To> <eb:PartyId eb:type="countrycode:organizationid">SE9876543210</eb:PartyId> </eb:To> <eb:CPAId>20160214:SE1234567890:SE9876543210</eb:CPAId> <eb:ConversationId>20160214:4567:SE1234567890</eb:ConversationId> <eb:Service>urn:oasis:names:tc:ebxml-msg:service</eb:Service> <eb:Action>Acknowledgment</eb:Action> <eb:MessageData> <eb:MessageId>bba2674a-4bf3-453e-a129-4f2a2da7f004@b2b.qvalia.com</eb:MessageId> <eb:Timestamp>2016-02-14T08:56:56.390Z</eb:Timestamp> <eb:RefToMessageId>20160214-102030-28572@foretag.se</eb:RefToMessageId> </eb:MessageData> </eb:MessageHeader> <eb:Acknowledgment SOAP:mustUnderstand="1" eb:version="2.0" SOAP:actor="urn:oasis:names:tc:ebxml-msg:actor:toPartyMSH"> <eb:Timestamp>2016-02-14T08:56:56.390Z</eb:Timestamp> <eb:RefToMessageId>20160214-102030-28572@foretag.se</eb:RefToMessageId> <eb:From> <eb:PartyId eb:type="countrycode:organizationid">SE9876543210</eb:PartyId> </eb:From> </eb:Acknowledgment> </SOAP:Header> <SOAP:Body xsi:schemaLocation="http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd http://www.oasis-open.org/committees/ebxml-msg/schema/msg-header-2_0.xsd"/> </SOAP:Envelope>

Partner

The Partner API contains endpoints for usage of accounts and setup of accounts

Under the Partner API section you'll find information about the endpoints used by Partners to Qvalia and how to handle the various functions offered.

Some Partner functions are partner specific and those are not documented here!

Reach out to your sales representative, or help@qvalia.com, to query about specific Partner functions, or if you can't find the information you need here.

All B2B/EDI functionality is developed, maintained and documented for each specific partner!

The Partner API is JSON only, so only content-type: application/json is used!

Endpoints

GET
GET
GET
POST
PUT
DELETE
PUT
DELETE