1. Introducing Storecove
Storecove is the only international operating Peppol accesspoint that offers a one-stop e-invoicing solution. Large companies and ERP systems can connect with all worldwide available e-invoicing networks. By supporting every global invoice format we ensure that you only need to connect through a single connection with a single data format. Development departments worldwide love our solution. Try us today and test for free!
1.1. Getting Started
This guide will help you get started with the Storecove API in under 5 minutes.
1.1.1. Register for API access
To obtain access to our sandbox API environment, register here
The last step is very important for the type of account that is created, so choose carefully. This will impact the remainder of this 5-minute how-to!
1.1.2. Create your API key
Create a new API key by clicking the "Create New API Key" button. For the Integrator package, create a "Master" key.
1.1.3. Make your first API call
Create a file "discovery.json" with the following contents:
{
"documentTypes": ["invoice"],
"network": "peppol",
"metaScheme": "iso6523-actorid-upis",
"scheme": "nl:kvk",
"identifier":"60881119"
}
or, for the BPC network, use
{
"documentTypes": ["invoice"],
"network": "bpc",
"metaScheme": "iso6523-actorid-upis",
"scheme": "gln",
"identifier":"1200109970580"
}
Call the API with your API key to check whether this participant identifier can receive invoices on the exchange network of choice. The example below will perform the check:
curl \
-X POST "https://api.storecove.com/api/v2/discovery/receives" \
-H "Accept: application/json" \
-H "Authorization: Bearer API_KEY_HERE" \
-H "Content-Type: application/json" \
--data @discovery.json
Swap the "API_KEY_HERE" for the API key you created. Don’t remove the "Bearer" prefix! |
Since Storecove can receive invoices on the (TEST) Peppol as well as BPC network, the response is
{
"code": "OK",
"email": false
}
1.1.4. Create a sender
The first step in sending an invoice is to create a sender. This sender is called a "LegalEntity". LegalEntities can both send and receive, but for now test we will focus on their sending role. Although the LegalEntity we are creating now can contain dummy data, you should carefully choose the LegalEntity’s country, because this will be important for the contents of the invoice.
For SG and IT additional setup steps are required and so to test this you need to contact us first. |
How the LegalEntity is created, depends on the type of account you have. Click the correct tab below to see how to create a LegalEntity:
- Individual Company
- Reseller or Systems Integrator
- ERP or Accounting System (Access Point As A Service)
For a company account, creating a LegalEntity is done in the UI, on
In the UI you will be guided as to which participant identifiers to add to the LegalEntity.
Once created you will see the legalEntityId in the UI. You will need this id in the next step. Note that it can take up to a day for Storecove to approve the LegalEntity for this type of account.
In the integrator account you have two choices:
-
create the LegalEntity in the UI. To create the LegalEntity in the UI, go to
-
https://app.storecove.com/senders Once created you will see the legalEntityId in the UI. You will need this id in the next step. Note that it can take up to a day for Storecove to approve the LegalEntity.
-
-
create the LegalEntity through the API
Creating the LegalEntity through the API involves two steps:
-
Creation of the actual LegalEntity
-
Creation of the participant identifiers that identify the LegalEntity for legal and tax purposes.
For the first step, create a file called "legal_entity.json" with the following contents:
{
"party_name": "Test Party",
"line1": "Test Street 1",
"city": "Test City",
"zip": "Zippy",
"country": "DE"
}
Carefully choose the country. |
Next, call the API:
curl \
-X POST "https://api.storecove.com/api/v2/legal_entities" \
-H "Accept: application/json" \
-H "Authorization: Bearer API_KEY_HERE" \
-H "Content-Type: application/json" \
--data @legal_entity.json
The response will ook like this:
{
"id": 123456789,
"party_name": "Test Party",
"line1": "Test Street 1",
"city": "Test City",
"zip": "Zippy",
"country": "SE",
"public": true,
"advertisements": ["invoice"],
"api_keys": [ "LEGAL_ENTITY_API_KEY" ]
}
Note down the "id" and "api_keys" properties: we will need these!
Now, lets add a legal identifier, tax identifier or both, depending on what you find in this list:
Region | Country | Legal | Tax |
---|---|---|---|
AUNZ |
AU |
AU:ABN |
|
AUNZ |
NZ |
GLN |
NZ:GST |
EEA |
CH |
CH:UIDB |
CH:VAT |
EEA |
GB |
GB:VAT |
|
EEA |
IS |
IS:KTNR |
|
EEA |
LI |
LI:VAT |
|
EEA |
NO |
NO:ORG |
NO:VAT |
EU |
AD |
AD:VAT |
|
EU |
AL |
AL:VAT |
|
EU |
AT |
AT:GOV |
|
EU |
AT |
AT:KUR |
AT:VAT |
EU |
BA |
BA:VAT |
|
EU |
BE |
BE:EN |
BE:VAT |
EU |
BG |
BG:VAT |
|
EU |
CY |
CY:VAT |
|
EU |
CZ |
CZ:VAT |
|
EU |
DE |
DE:LWID |
|
EU |
DE |
DE:VAT |
|
EU |
DK |
DK:DIGST |
DK:ERST (0198) |
EU |
EE |
EE:CC |
EE:VAT |
EU |
ES |
ES:VAT |
|
EU |
FI |
FI:OVT or FI:ORG |
FI:VAT (0213) |
EU |
FR |
FR:SIRENE or FR:SIRET |
|
EU |
FR |
FR:SIRENE or FR:SIRET |
FR:VAT |
EU |
GR |
GR:VAT |
|
EU |
HR |
HR:VAT |
|
EU |
HU |
HU:VAT |
|
EU |
IE |
IE:VAT |
|
EU |
IT |
IT:IVA |
|
EU |
IT |
IT:CF and/or IT:IVA |
|
EU |
IT |
IT:CF |
|
EU |
IT |
IT:IVA |
|
EU |
LT |
LT:LEC |
LT:VAT |
EU |
LU |
LU:VAT |
|
EU |
LV |
LV:VAT |
|
EU |
MC |
MC:VAT |
|
EU |
ME |
ME:VAT |
|
EU |
MK |
MK:VAT |
|
EU |
MT |
MT:VAT |
|
EU |
NL |
NL:OINO |
|
EU |
NL |
NL:KVK |
NL:VAT |
EU |
PL |
PL:VAT |
|
EU |
PT |
PT:VAT |
|
EU |
RO |
RO:VAT |
|
EU |
RS |
RS:VAT |
|
EU |
SE |
SE:ORGNR |
SE:VAT |
EU |
SI |
SI:VAT |
|
EU |
SK |
SK:VAT |
|
EU |
SM |
SM:VAT |
|
EU |
TR |
TR:VAT |
|
EU |
VA |
VA:VAT |
|
IN |
IN |
IN:GSTIN |
|
JP |
JP |
JP:LIN |
JP:TIN |
SG |
SG |
SG:UEN |
|
SG |
SG |
SG:UEN |
|
SA |
SA |
SA:TIN |
|
Americas |
US |
DUNS, GLN, LEI |
US:EIN, US:SSN |
Americas |
CA |
CA:CBN |
|
Americas |
MX |
MX:RFC |
|
World |
DUNS, GLN, LEI |
You should create both identifiers if the list specifies that. Otherwise, your LegalEntity will be incomplete and not able to send invoices.
To create an identifier, first create a file "identifier.json" like this:
{
"superscheme": "iso6523-actorid-upis",
"scheme": "DE:VAT",
"identifier": "DE123456789SC"
}
And create it with
curl \
-X POST "https://api.storecove.com/api/v2/legal_entities/LEGAL_ENTITY_ID_HERE/peppol_identifiers" \
-H "Accept: application/json" \
-H "Authorization: Bearer API_KEY_HERE" \
-H "Content-Type: application/json" \
--data @identifier.json
Swap the "LEGAL_ENTITY_ID_HERE" and the "API_KEY_HERE" for the id and API key you received when creating it. |
Creating the LegalEntity through the API involves two steps:
-
Creation of the actual LegalEntity
-
Creation of the participant identifiers that identify the LegalEntity for legal and tax purposes.
For the first step, create a file called "legal_entity.json" with the following contents:
{
"party_name": "Test Party",
"line1": "Test Street 1",
"city": "Test City",
"zip": "Zippy",
"country": "DE"
}
Carefully choose the country. |
Next, call the API:
curl \
-X POST "https://api.storecove.com/api/v2/legal_entities" \
-H "Accept: application/json" \
-H "Authorization: Bearer API_KEY_HERE" \
-H "Content-Type: application/json" \
--data @legal_entity.json
The response will ook like this:
{
"id": 123456789,
"party_name": "Test Party",
"line1": "Test Street 1",
"city": "Test City",
"zip": "Zippy",
"country": "DE",
"public": true,
"advertisements": ["invoice"]
}
Note down the "id" property: we will need this!
Now, lets add a legal identifier, tax identifier or both, depending on what you find in this list:
Region | Country | Legal | Tax |
---|---|---|---|
AUNZ |
AU |
AU:ABN |
|
AUNZ |
NZ |
GLN |
NZ:GST |
EEA |
CH |
CH:UIDB |
CH:VAT |
EEA |
GB |
GB:VAT |
|
EEA |
IS |
IS:KTNR |
|
EEA |
LI |
LI:VAT |
|
EEA |
NO |
NO:ORG |
NO:VAT |
EU |
AD |
AD:VAT |
|
EU |
AL |
AL:VAT |
|
EU |
AT |
AT:GOV |
|
EU |
AT |
AT:KUR |
AT:VAT |
EU |
BA |
BA:VAT |
|
EU |
BE |
BE:EN |
BE:VAT |
EU |
BG |
BG:VAT |
|
EU |
CY |
CY:VAT |
|
EU |
CZ |
CZ:VAT |
|
EU |
DE |
DE:LWID |
|
EU |
DE |
DE:VAT |
|
EU |
DK |
DK:DIGST |
DK:ERST (0198) |
EU |
EE |
EE:CC |
EE:VAT |
EU |
ES |
ES:VAT |
|
EU |
FI |
FI:OVT or FI:ORG |
FI:VAT (0213) |
EU |
FR |
FR:SIRENE or FR:SIRET |
|
EU |
FR |
FR:SIRENE or FR:SIRET |
FR:VAT |
EU |
GR |
GR:VAT |
|
EU |
HR |
HR:VAT |
|
EU |
HU |
HU:VAT |
|
EU |
IE |
IE:VAT |
|
EU |
IT |
IT:IVA |
|
EU |
IT |
IT:CF and/or IT:IVA |
|
EU |
IT |
IT:CF |
|
EU |
IT |
IT:IVA |
|
EU |
LT |
LT:LEC |
LT:VAT |
EU |
LU |
LU:VAT |
|
EU |
LV |
LV:VAT |
|
EU |
MC |
MC:VAT |
|
EU |
ME |
ME:VAT |
|
EU |
MK |
MK:VAT |
|
EU |
MT |
MT:VAT |
|
EU |
NL |
NL:OINO |
|
EU |
NL |
NL:KVK |
NL:VAT |
EU |
PL |
PL:VAT |
|
EU |
PT |
PT:VAT |
|
EU |
RO |
RO:VAT |
|
EU |
RS |
RS:VAT |
|
EU |
SE |
SE:ORGNR |
SE:VAT |
EU |
SI |
SI:VAT |
|
EU |
SK |
SK:VAT |
|
EU |
SM |
SM:VAT |
|
EU |
TR |
TR:VAT |
|
EU |
VA |
VA:VAT |
|
IN |
IN |
IN:GSTIN |
|
JP |
JP |
JP:LIN |
JP:TIN |
SG |
SG |
SG:UEN |
|
SG |
SG |
SG:UEN |
|
SA |
SA |
SA:TIN |
|
Americas |
US |
DUNS, GLN, LEI |
US:EIN, US:SSN |
Americas |
CA |
CA:CBN |
|
Americas |
MX |
MX:RFC |
|
World |
DUNS, GLN, LEI |
You should create both identifiers if the list specifies that. Otherwise, your LegalEntity will be incomplete and not able to send invoices.
To create an identifier, first create a file "identifier.json" like this:
{
"superscheme": "iso6523-actorid-upis",
"scheme": "DE:VAT",
"identifier": "DE123456789SC"
}
And create it with
curl \
-X POST "https://api.storecove.com/api/v2/legal_entities/LEGAL_ENTITY_ID_HERE/peppol_identifiers" \
-H "Accept: application/json" \
-H "Authorization: Bearer API_KEY_HERE" \
-H "Content-Type: application/json" \
--data @identifier.json
Swap the "LEGAL_ENTITY_ID_HERE" for the id you received when creating the LegalEntity. |
1.1.5. Send your first invoice
Having created our sender, we now choose the sender/receiver combination and create a file "invoice.json" with the appropriate contents.
We have a list of test identifiers that we advertise on the Peppol test network that these test invoices will get sent to. So simply click on the right scenario you are using and copy/paste!
Most invoices are exchanged between LegalEntities in the same legal territory, e.g. inside the EU (or EEA), inside AU/NZ ("Trans-Tasman"), inside SG, IN, SA, etc. The dark green boxes on the diagonal represent that. When sending between legal territories, however, it becomes more complicated so we will apply our Globalization feature in those cases. |
Receiver |
||||||||
Sender |
EU/EEA |
SG |
AU/NZ |
IN |
SA |
US |
World |
|
EU/EEA |
|
|
|
|
Contact Us |
|||
SG |
|
|
|
|
|
Contact Us |
||
AU/NZ |
|
|
|
|
Contact Us |
|||
IN |
|
|
|
|
Contact Us |
|||
SA |
|
|
|
|
|
Contact Us |
||
US |
|
|
|
|
|
Contact Us |
||
World |
|
|
|
|
|
Contact Us |
Swap the "LEGAL_ENTITY_ID" in the JSON for the id you received when creating the LegalEntity. |
Next use this API call to send the invoice:
curl \
-X POST "https://api.storecove.com/api/v2/document_submissions" \
-H "Accept: application/json" \
-H "Authorization: Bearer API_KEY_HERE" \
-H "Content-Type: application/json" \
--data @invoice.json
The result will be similar to:
{
"guid": "c65d43d1-4b44-40a9-8926-6743f9fc90b2"
}
1.1.6. Sent! (Retrieve the Sending Evidence)
Congratulations! You’ve successfully submitted an invoice for sending via the (TEST) Peppol network. If you have configured Webhooks we will let you know the progress of the sending process that way. If you have not yet configured any webhooks, you can track the progress in the UI, on
When you see it has been successfully sent you can retrieve the evidence for that by calling
curl \
-X GET "https://api.storecove.com/api/v2/document_submissions/c65d43d1-4b44-40a9-8926-6743f9fc90b2/evidence" \
-H "Accept: application/json" \
-H "Authorization: Bearer API_KEY_HERE" \
-H "Content-Type: application/json"
(Change the GUID to the one you received when sending the invoice.) This will give you the exact invoice sent, as well as the digital signature from the receiving accesspoint. Or, if the invoice was sent via email, it will give you the full email that was sent with its attachments as well are response from the receiving SMTP server.
What if my Customer is not on the Peppol network?
Then we can send an email with an electronic invoice attachment that is appropriate for the country your Customer is in. For instance, in de Germany we would send a ZUFGFeRD attachment, in France Facture-X and in Italy a FatturaPA. For India, the GSTN-signed JSON with a PDF that includes the QR code will be attached. Your receiver will know how to process these!
To test the email scenario, simply include a valid email address in the examples above and leave the "eIdentifiers" array empty, like this:
{
"routing": {
"emails": [
"test@example.com"
],
"eIdentifiers": []
}
}
We recommend using the account you’ve just created for all your development purposes. When you’re ready to launch your integration, create a new account and reach out to our support to convert to 'production' API keys!
2. Using the API
The Storecove API provides all your e-invoicing and Peppol integration needs. This section outlines everything you need to use the V2 API, which is available at https://api.storecove.com/api/v2/
.
2.1. API keys
To call the Storecove V2 API, you will first need an API key from the developer portal. An API key represents your application, so if you’re building multiple solutions you’ll need multiple keys.
API keys should be considered secrets, so do not publish them in public config such as to frontend JavaScript applications.
To do this, navigate to API Keys in your Storecove admin panel. You will typically need only one, however you can create multiple for use with different environments, migrations or when rotating secrets.
The API Key must be provided in the Authorization header using the Bearer scheme for all API requests.
...
Authorization: Bearer API_KEY_HERE
...
For instance, a curl request could look like
curl \
-X POST "https://api.storecove.com/api/v2/legal_entities" \
-H "Accept: application/json" \
-H "Authorization: Bearer API_KEY_HERE" \
-H "Content-Type: application/json" \
-d "{ \"party_name\": \"Test Party\", \"line1\": \"Test Street\", \"city\": \"Test City\", \"zip\": \"Zippy\", \"country\": \"NL\", \"tenant_id\": \"my_id\"}"
These headers are safe inside the TLS tunnel that protects the Storecove API.
2.2. Webhooks
Webhooks allow you to be notified of certain events taking place on the Storeove platform. There are two types:
-
Push mode
Push mode allows you to receive notifications without the need for polling. They consist of a URL that is called with a POST body, optionally protected with HTTP Basic Authentication or a custom HTTP header.
You should reply with an HTTP OK (200) to the POST. If another status code is presented, or we fail to reach the specified URL, we will retry again at a later time for a total of 5 days.
We will keep calling the webhook until we receive an HTTP 200 from you, but only for 5 days.
During development, the following site may prove useful for viewing the webhooks we call:
https://webhook.site
-
Pull mode
Pull mode webhooks are typically used when the system that needs to receive them does not have a service to receive them. In pull mode, you use the
endpoint to retrieve a new webhook off the queue. After processing it successfully, DELETE it using
and GET the next one. When you receive an HTTP 204 response, the queue is empty and your polling process can sleep for a while.
2.3. API tools
There are several types of tools that can speed up your solution development. We publish an Open API v2 (a.k.a. Swagger) specification that allows you to generate client libraries and test API calls using API clients like Postman.
2.3.1. Client Libraries
The API is RESTful and communicates through JSON, so you can easily create your own client if we don’t have one ready to go and you don’t want to leverage the OpenAPI 2.0 API specification (see below).
The easiest way to create a client for your favourite language is by leveraging our OpenAPI 2.0 (previously known as Swagger) specification, which can be found on
There are many generic REST clients for available for different platforms. However, if you wish to roll your own, or would like to quickly generate the model classes, you could use Swagger Codegen.
2.3.2. Postman
Using our OpenAPI 2.0 specification, it is easy to test drive the API, for instance with Postman:
Click "Import," select "Import From Link," and copy/paste our OpenAPI 2.0 specification URL:
Next, click on the "Headers" tab and copy/paste the API token. You are now ready to test drive the API!
2.3.3. Swagger Codegen
This tool makes it easy to to generate a client library in your favorite language:
First, download the lastest version 2 Java jar:
wget --output-document=swagger-codegen-cli.jar https://repo1.maven.org/maven2/io/swagger/swagger-codegen-cli/2.4.24/swagger-codegen-cli-2.4.24.jar
Next, create the client library (in this example we generate a C# library):
java -jar swagger-codegen-cli.jar generate -i https://www.storecove.com/api/v2/openapi.json -l csharp -o csharp
Language support is extensive, amongst others:
-
C# (csharp, csharp-dotnet2)
-
Java (java-pkmst, java-play-framework, jaxrs-resteasy-eap)
-
Node.js (nodejs-server)
-
Objective-C (objc)
-
Android (android)
-
Perl (perl)
-
PHP (php, php-symfony, php-silex)
-
Python (python)
-
Many others, execute:
java -jar swagger-codegen-cli.jar langs
2.4. camelCase or snake_case?
When POSTing data, we allow both the use of (lower) camelCase (sometimes called dromedaryCase ) and snake_case (see Multiple-word identifier formats). So if you see them used interchangeably in our documentation, that is not something to worry about. Choose your favourite way!
When you GET data, we always send you snake_case for object properties.
3. Building Your Solution
3.1. Environments
We have two different environments:
-
Sandbox
-
Production
The Sandbox environment allows you to implement the Storecove solution. It has the following features:
-
Webhook simulation
It allows you to simulate webhooks. Webhooks are how we notify you of events that have taken place asynchronously (see Webhooks). You can simulate receiving a document, or receiving status feedback on a document that you have sent.
-
Test exchange networks
The sandbox environment is linked to test exchange networks or tax authorities:
-
Peppol
-
Italy SDI (simulated)
-
India GSTIN
So you can use the sandbox environment to see what would happen in the production environment.
-
We recommend always having both environments. So you start in sandbox and then for production you create a second account. That way, you can continue to test and develop without affecting your production environment.
3.2. Legal Entities
3.2.1. Actors
Legal entities are the actors between whom documents are exchanged. If you are sending an invoice, the sender is a legal entity and the receiver is a legal entity.
When you are sending, you create the sending LegalEntity and then that same LegalEntity can also receive documents. When you want to set up a legal entity for receiving documents, you create a LegalEntity and then that LegalEntity can also send documents.
So with a single LegalEntity, you can send documents to the whole world as well as receive documents from the whole world!
3.2.2. Basic Data
If you have a company or integrator account, a LegalEntity can be created in the UI and you can skip to the next section, Identifiers. Otherwise, a LegalEntity is created through the endpoint
The party name and a complete address are always required. There are a few special properties that we will discuss here.
advertisements
The advertisements property determines what will be advertised as receivable documents on the various exchange networks, like OpenPeppol. The default is just ["invoice"] which is what you usually want. But if you have implemented the extended webhook events (see Webhooks for Sending) then you will also want to advertise InvoiceResponse and use ["invoice", "invoice_reponse"].
public
This property determines if the LegalEntity details will be published in various directories, such as the Peppol Directory (https://directory.peppol.eu/). Note that for SG:UEN identifiers private identifiers are not allowed, so they will always be advertised on the Peppol network.
tenantId
The tenant_id property is related to the LegalEntity. If you specify it when creating or updating a LegalEntity, this field will be included in any webhooks for that LegalEntity. It can be used to determine which of your tenants the webhook is for and for instance derive a database connection string from it. If you do not have a multi-tenant platform, this field can be ignored.
thirdPartyXxx
These two credential fields are specific only for Indian LegalEntities (and are mandatory for these). These are the credentials for the GSTIN to allow us to obtain the QR-code for the invoice (see Globalization).
rea
The REA details are only for Italian LegalEntities. If your Italian LegalEntity does not have a REA iscrizione, you can leave these out.
3.2.3. Identifiers
Types
There are three types of identifiers involved, although not always all of them:
-
Business Identifiers
-
Legal Identifiers
A legal identifier identifies the legal entity from a legal perspective. It can be a local chambre of commerce number, or a DUNS, GLN, etc. However, in many countries the tax identifier is also the legal identifiers. In that case you don’t need to set this up separately.
-
Tax Identifiers
A tax identifier identifies the legal entity from a tax perspective. In the EU, all tax identifiers are VAT numbers and are prefixed with the ISO3166-2 country code, e.g. "IT12345678901". In India, the tax identifier is issued by the state in which the LegalEntity resides. It’s first two digits are always the numercial code of the state that issued it.
-
-
Routing identifiers
A routing identifier is used to route the electronic document to the receiver. The good news is that, with a few exceptions, most routing identifiers are business identifiers! An obvious exception is an email address. When the invoice is routed to an email address, that is not one of the business identifiers. But most of the time, you do not need to store routing identifiers separately.
Structure
Identifiers consist of two parts:
-
scheme
-
identifier
The scheme defines the type of identifier. For instance, the Italian VAT number "IT12345678901" has scheme IT:IVA. A New Zealand tax identifier has the scheme "NZ:GST". Most schemes are prefixed with an ISO3166-2 country code, but not all. Examples are LEI (the global Legal Entity Identifier) GLN and DUNS.
Which identifiers for my LegalEntity?
After creating the LegalEntity, you will need to add one or more business identifiers. The relevant ones will automatically be advertised on the various exchange networks by us. (If you want to create sending-only LegalEntities, please contact us.)
The list of identifers to add to your LegalEntity can be found here:
To add an identifier, use this endpoint:
Note that Singapore has special rules regarding the creation of the SG:UEN identifier for an SG LegalEntity. This process is described here:
3.2.4. Additional Tax Identifiers
There are two legal territories where additional tax identifiers are relevant:
-
EU
In the EU, when (1) a LegalEntity sends an invoice to a consumer in a receiver country different from the sender country and (2) that LegalEntity is above the threshold for that receiver country, the sender is required to apply for a VAT number in the receiver country. And that VAT number must be used in the invoice.
-
IN
In India, when a LegalEntity sends an invoice to a receiver in a state different from the sender state, the sender is required to apply for a GST number in the receiver state. And that GST number must then be used in the invoice.
This is where additional tax identifiers come in. The LegalEntity will already have a primary tax identifier, which is the one that was issued by the country in which it is located. On top of that, AdditionalTaxIdentifiers can be created created according to the following rules:
-
EU
-
You can have only one AdditionalTaxIdentifier per EU country
-
You cannot create an AdditionalTaxIdentifier for the LegalEntity’s home country, because that is the LegalEntity’s primary tax identifier.
-
-
IN
-
You can have only one AdditionalTaxIdentifier per state
-
You cannot create an AdditionalTaxIdentifier for the LegalEntity’s home state, because that is the LegalEntity’s primary tax identifier.
-
To activate this feature, for invoices that require the use of an AdditionalTaxIdentifier, you must set the "consumerTaxMode" property in the Invoice object to true.
3.3. Sending Documents
3.3.1. Sending Flows
There are two workflows for sending documents:
-
Check and submit
-
Submit and email
Check and Submit
First use the
API call. It takes one parameter, an DiscoverableParticipant object. This object contains the identifier of the recipient of the document. When you call this endpoint, Storecove will query the relevant exchange networks (e.g. Peppol) to see whether the customer has registered with this network.
A typical response is
{
"code": "OK",
"email": false
}
If the result code is ‘OK’, submit the invoice via the Invoice Submission API call.
The "email" property indicates whether the electronic invoice can be sent via Peppol, but would ultimately received as PDF via email. This could currently only be the case for Belgian receivers. In Belgium, all companies have been registered on the Peppol network by the Belgian Peppol Authority, but if they have not chosen a commercial Peppol service provider, they will only receive a PDF version of the invoice and not your/our electronic invoice. It is up to the receiver to resolve this if they want real electronic invoices, and therefore it is recommended to send via Peppol even if the "email" property is true. Nevertheless, this property does give you the opportunity to send your own email if you prefer that.
Submit and email
Submit the invoice to the Document Submissions endpoint.
When you call this endpoint, Storecove will:
-
Query the relevant exchange networks to see if the receiver has registered with one of these networks. If so, the invoice is delivered via that exchange network.
-
If the invoice could not be delivered via an exchange network, the invoice is delivered to the fallback email address.
3.3.2. Sending a document
There are two main ways to submit a document to be sent:
-
A JSON object that contains the document data
-
(only for invoices) A Base64 encoded string that contains the document data in a certain syntax, such as UBL, CII, SAP IDOC, cXML, etc. In this case, we will retrieve parse the document and transform it into the JSON object our API requires, so it is an additional tranformation step. We can enable addtional formats on request.
Two document types can currently be sent:
-
Invoice
-
Invoice Reponse
Invoice
The Invoice document (Invoice) has several sections:
-
Tax system
-
General data
-
Modifiers
-
Parties
-
References
-
Delivery details
-
Payment
-
Allowances and charges
-
Invoice lines
-
Amounts
Each will be discussed in more detail below.
Tax System
The tax system of an invoice is the first and most important choice when creating an invoice. There are two tax systems that can be used:
-
tax_line_percentages
-
tax_line_amounts
The TL;DR is that most receivers only support tax_line_percentages, so if at all possible, create invoices using that tax system.
To explain the difference, let’s look at an example. A typical invoice with three lines and one allowance and one charge could look like this:
tax_line_percentages | |||
---|---|---|---|
Item |
Excluding tax |
Tax % |
Tax amount |
Line 1 |
$819.50 |
15% |
|
Line 2 |
$2,739.00 |
15% |
|
Line 3 |
$6,600.00 |
15% |
|
Charge 1 |
$40.00 |
25% |
|
Allowance 1 |
-$461.75 |
15% |
|
Total |
$9,736.75 |
||
TaxSubtotal 15% |
$9,696.75 |
15% |
$1,454.51 |
TaxSubtotal 25% |
$40.00 |
25% |
$10.00 |
Total Tax |
$1,464.51 |
||
Total including tax |
$11,201.26 |
The same invoice in tax system tax_line_amounts would be:
tax_line_amounts | |||
---|---|---|---|
Item |
Excluding tax |
Tax % |
Tax amount |
Line 1 |
$819.50 |
15% |
$122.93 |
Line 2 |
$2,739.00 |
15% |
$410.85 |
Line 3 |
$6,600.00 |
15% |
$990.00 |
Charge 1 |
$40.00 |
25% |
$10.00 |
Allowance 1 |
-$461.75 |
15% |
-$69.26 |
Total |
$9,736.75 |
||
TaxSubtotal 15% |
$9,696.75 |
15% |
$1,454.52 |
TaxSubtotal 25% |
$40.00 |
25% |
$10.00 |
Total Tax |
$1,464.52 |
||
Total including tax |
$11,201.27 |
Notice the 1ct difference in the 15% tax subtotal and then in the invoice total. If the invoice data you give us is tax_line_amounts, but the receiver only supports tax_line_percentages, we will convert this as follows:
tax_line_amounts – converted | |||
---|---|---|---|
Item |
Excluding tax |
Tax % |
Tax amount |
Line 1 |
$819.50 |
15% |
$122.93 |
Line 2 |
$2,739.00 |
15% |
$410.85 |
Line 3 |
$6,600.00 |
15% |
$990.00 |
Charge 1 |
$40.00 |
25% |
$10.00 |
Allowance 1 |
-$461.75 |
15% |
-$69.26 |
Rounding line 15% |
-$0.07 |
15% |
-$0.01 |
Total |
$9,736.68 |
||
TaxSubtotal 15% |
$9,696.68 |
15% |
$1,454.51 |
TaxSubtotal 25% |
$40.00 |
25% |
$10.00 |
Total Tax |
$1,464.51 |
||
Total including tax |
$11,201.19 |
||
Payable rounding amount |
-$0.08 |
||
Total amount payable |
$11,201.27 |
General Data
Under general invoice data we find:
-
invoice number
-
issue date
-
tax date
Note that in many countries the tax date must be the same as the issue date, so if you provide this make sure it is correct.
-
due date
-
period
-
note
-
issue reaons
The issue reasons are only used in invoices for Italian receivers. They correspond to the <Causale> elements.
Modifiers
When you send a creditnote, you should simply provide negative amounts to make for a negative invoice total. When we see the invoice has a negative total, we will normally try to send it as a creditnote. But whether that is actually done depends on the receiver. If the invoice is sent via an exchange network such as OpenPeppol, we will send a creditnote if the receiver advertises that. Otherwise, we will send an invoice with negative amounts. When sending via email, we will do it in a way that is customary in the receiver’s country.
In some cases, even though the total invoice amount is negative, you may prefer to send a regular invoice anyway. For instance, energy providers may send a regular invoice with a single negative adjustment that is larger than the regular invoice amount and thus the total become negative. But it is still considered a regular invoice, not a creditnote. That beharvious can be controlled through this property.
Self Billing Mode essentially means the sender and receiver are reversed. The sender creates an invoice on behalf of the receiver and send it. We currently only support this via email. The OpenPeppol network does not support self billing, except in AU/NZ. But we do not support it in AU/NZ. Contact us if you require this.
Parties
We support the following parties involved in the invoice:
-
the sender
-
the receiver
The sender ("AccountingSupplierParty" in UBL parlance) is identified by the id of the LegalEntity that you created. So most sender data for the sender is taken from that. However, there are a few fields that you can control dynamically per invoice, all related to the contact. That allows you to specify different contact details per invoice, for example when invoices are issued by different departments that have different contact points in case of questions.
The receiver ("AccountingCustomerParty" in UBL parlance) consists of the following blocks:
-
name
-
address
-
identifiers
-
contact
The identifiers should contain (where applicable) the legal identifier and the tax identifier of the receiver, according to this list:
References
The references array is a flexible way to link the invoice to other documents, like a purchase order, delivery note, other invoice, etc. The most important one is the "purchase_order" which becomes the "OrderReference" element in a UBL invoice and which is what most governments use to automatically process the invoice. Without this, many invoices will get rejected.
The accounting cost field helps the receiver book the invoice against the correct general ledger account.
Delivery Details
Details regarding the delivery: to whom, where, when and how much.
Payment
Adding payment methods is relevant both when the invoice is still to be paid and when the invoice has already been paid. In the latter case, use the "prepaidAmount" property and set that to the amount already paid.
Not all formats allow multiple payment methods and not all payment methods are allowed in all formats. We will automatically ensure the most relevant are included, subject to what is possible. See also Globalization.
Invoice Lines
Invoice lines are complex objects in and of themselves. They consist of the following sections:
-
Textual Information
-
Amounts
-
Taxes
-
Period
-
Identifications
-
Key/value Pairs
An invoice line has a name and a description. The name is a short description of the item. The Description allows for describing the item and its features in more detail than the name.
You need to make sure that
The price and quantity can be specified up to 8 decimals. It is important not to round these down so the multiplication is precise. Otherwise, many invoice formats will reject your invoice.
Only the net amount of allowances and charges can be specified at the invoice line level, using the property "allowanceCharges".
Multiple Tax items is allowed only for IN (India) taxes. All other countries can only have a single Tax item in this array. For tax system "tax_line_percentages" a typical EU tax array might look like
[
{
"country": "DE",
"percentage": 6.0,
"category": "standard"
}
]
and for India:
[
{
"country": "IN",
"percentage": 14.0,
"category": "sgst"
},
{
"country": "IN",
"percentage": 14.0,
"category": "igst"
}
]
The category "export" is important for globalization (see Globalization). When sending between legal territories, use this category, the country of the sender and 0% as a percentage. This way, we will automatically perform any tax conversion that is required for the receiver.
If you are forced to use the tax system "tax_line_amounts" an additional property "amount" is available on the tax object. But the percentage should always be present.
The start and end date this invoice line is for.
Three item identifications are available:
-
buyersItemIdentification
-
sellersItemIdentification
-
standardItemIdentification
If you use this identifier, a scheme is also mandatory. It defaults to GTIN (0160).
The invoice line id "lineId" can be used to reference this invoice line in other documents. It can be anything, but it is good practice to use an integer. You may run into problems with the receiver otherwise.
It is possible to add a reference to the lineId in the purchase order on which this invoice is based ("orderLineReferenceLineId"). But that purchase order can only be specified at the invoice level. In E-invoicing it is not considerered good practice to send a single invoice for multiple purchase orders. But you obviously can send multiple invoices for a single purchase order.
The accounting cost field helps the receiver book the invoice against the correct general ledger account.
It is possible to add arbitrary key/value pairs to the invoice line. The semantics of these are not defined, but if you have agreed that with your receiver these can be very relevant. Not all invoice formats support this, so they may get dropped. But if they are, that is the responsibility of the receiver who dictates the format.
Allowances and Charges
Allowances and charges are just simplified invoice lines. But tax-wise they share the same complexity. Not all receivers support these, so we advise to be careful using these. If necessary, we will transform them into invoice lines.
Summary Amounts
Only a single document currency can be used for all the amounts in the invoice. So you can not mix-and-match currencies accross invoice lines, specify prices in a different currency, etc. There is, however, one exception: you can specify the total amount of tax in a different currency if that is required for accounting purposes.
How you calculate the tax subtotals depends on the tax system.
-
tax_line_percentages
First, create a list of unique (country, category, percentage)-keys from all the tax objects in the invoice lines and allowances and charges. Next, for each key, sum the amountsExcludingTax from all the invoice lines in which that key appears. Finally, apply the percentage to that amount to get the tax amount.
-
tax_line_amounts
For this tax system the calcuation is performed by us.
You must also provide the total payable amount for the invoice. That should be the sum of all the invoice lines + the sum of all the taxes.
3.3.3. JSON Object
An example JSON object for a sales invoice with all possible fields is:
{
"legalEntityId":100000099999,
"idempotencyGuid":"61b37456-5f9e-4d56-b63b-3b1a23fa5c73",
"createPrimaryImage":false,
"attachments": [
"filename": "myname.pdf",
"document": "JVBERi0xLjIgCjkgMCBvYmoKPDwKPj4Kc3RyZWFtCkJULyAzMiBUZiggIFlPVVIgVEVYVCBIRVJFICAgKScgRVQKZW5kc3RyZWFtCmVuZG9iago0IDAgb2JqCjw8Ci9UeXBlIC9QYWdlCi9QYXJlbnQgNSAwIFIKL0NvbnRlbnRzIDkgMCBSCj4+CmVuZG9iago1IDAgb2JqCjw8Ci9LaWRzIFs0IDAgUiBdCi9Db3VudCAxCi9UeXBlIC9QYWdlcwovTWVkaWFCb3ggWyAwIDAgMjUwIDUwIF0KPj4KZW5kb2JqCjMgMCBvYmoKPDwKL1BhZ2VzIDUgMCBSCi9UeXBlIC9DYXRhbG9nCj4+CmVuZG9iagp0cmFpbGVyCjw8Ci9Sb290IDMgMCBSCj4+CiUlRU9G",
"mimeType": "application/pdf",
"primaryImage": false,
"documentId": "myId",
"description": "A Description"
],
"routing":{
"publicIdentifiers":[
{
"scheme":"NL:KVK",
"id":"27375186"
},
{
"scheme":"NL:OIN",
"id":"00000001001490394000"
}
]
},
"document":{
"documentType":"invoice",
"invoice":{
"taxSystem":"tax_line_percentages",
"documentCurrency":"EUR",
"invoiceNumber":"F463333333336",
"issueDate":"2020-11-26",
"taxPointDate":"2020-11-26",
"dueDate":"2020-12-26",
"invoicePeriod":"2020-11-12 - 2020-11-17",
"references":[
{
"documentType":"purchase_order",
"documentId":"buyer reference or purchase order reference is recommended",
"lineId":"1",
"issueDate":"2021-12-01"
},
{
"documentType":"buyer_reference",
"documentId":"buyer reference or purchase order reference is recommended"
},
{
"documentType":"sales_order",
"documentId":"R06788111"
},
{
"documentType":"billing",
"documentId":"refers to a previous invoice"
},
{
"documentType":"contract",
"documentId":"contract123"
},
{
"documentType":"despatch_advice",
"documentId":"DDT123"
},
{
"documentType":"receipt",
"documentId":"aaaaxxxx"
},
{
"documentType":"originator",
"documentId":"bbbbyyyy"
}
],
"accountingCost":"23089",
"note":"This is the invoice note. Senders can enter free text. This may not be read by the receiver, so it is not encouraged to use this.",
"accountingSupplierParty":{
"party":{
"contact":{
"email":"sender@company.com",
"firstName":"Jony",
"lastName":"Ponski",
"phone":"088-333333333"
}
}
},
"accountingCustomerParty":{
"publicIdentifiers":[
{
"scheme":"NL:KVK",
"id":"27375186"
},
{
"scheme":"NL:OIN",
"id":"00000001001490394000"
}
],
"party":{
"companyName":"Gemeente DDDDD",
"address":{
"street1":"Streety 123",
"street2":null,
"city":"Alphen aan den Rijn",
"zip":"2400 AA",
"county":null,
"country":"NL"
},
"contact":{
"email":"receiver@company.com",
"firstName":"Pon",
"lastName":"Johnson",
"phone":"088-444444444"
}
}
},
"delivery":{
"deliveryPartyName":"Delivered To Name",
"actualDeliveryDate":"2020-11-01",
"deliveryLocation":{
"id":"871690930000478611",
"schemeId":"EAN",
"address":{
"street1":"line1",
"street2":"line2",
"city":"CITY",
"zip":"3423423",
"county":"CA",
"country":"US"
}
}
},
"paymentTerms":{
"note":"For payment terms, only a note is supported by Peppol currently."
},
"paymentMeansArray":[
{
"code":"credit_transfer",
"account":"NL50RABO0162432445",
"paymentId":"44556677"
}
],
"invoiceLines":[
{
"lineId":"1",
"amountExcludingVat":2.88,
"itemPrice":0.12332,
"baseQuantity":2.0,
"quantity":63.0,
"quantityUnitCode":"KWH",
"allowanceCharge":-1.0,
"tax":{
"percentage":21.0,
"country":"NL"
},
"orderLineReferenceLineId":"3",
"accountingCost":"23089",
"name":"Supply peak",
"description":"Supply",
"invoicePeriod":"2020-11-12 - 2020-11-17",
"note":"Only half the story...",
"buyersItemIdentification":"9 008 115",
"sellersItemIdentification":"E_DVK_PKlik_KVP_LP",
"standardItemIdentification":"8718868597083",
"standardItemIdentificationSchemeId":"GTIN",
"additionalItemProperties":[
{
"name":"UtilityConsumptionPoint",
"value":"871690930000222221"
},
{
"name":"UtilityConsumptionPointAddress",
"value":"VE HAZERSWOUDE-XXXXX"
}
]
}
],
"allowanceCharges":[
{
"reason":"late payment",
"amountExcludingVat":10.2,
"tax":{
"percentage":21.0,
"country":"NL"
}
}
],
"taxSubtotals":[
{
"taxableAmount":13.08,
"taxAmount":2.75,
"percentage":21.0,
"country":"NL"
}
],
"amountIncludingVat":15.83,
"prepaidAmount":1.00
}
}
}
Invoice Response
The Invoice Response document (DocumentInvoiceResponse,DocumentInvoiceResponse), which you can send after receiving a purchase invoice, is very simple in its most basic form:
{
"receiveGuid": "b09c5397-65cc-40b6-8274-264f487c1649",
"document": {
"documentType": "invoice_response",
"invoiceResponse": {
"responseCode":"AP"
}
}
}
The "receiveGuid" property is the guid that you received in the received_invoice webhook. The "AP" response means the document was accepted.
A more complex example is
{
"receiveGuid": "b09c5397-65cc-40b6-8274-264f487c1649",
"document": {
"documentType": "invoice_response",
"invoiceResponse": {
"responseCode": "RE",
"clarifications": [
{
"clarificationCode": "REF",
"clarificationCodeType": "OPStatusReason"
},
{
"clarificationCode": "NOA",
"clarificationCodeType": "OPStatusAction"
}
]
}
}
}
In this case, the invoice was rejected (RE) with reason "REF" (this means "References incorrect") and no further action on this invoice is expected ("NOA") since it was rejected and the defect cannot be repaired.
3.3.4. Webhooks for Sending
Invoice Submission
The invoice_submission is an event specific to the invoice document type, whereas the document_submission is more generic. Support for invoice_submission will be removed in a future release.
When an invoice submission is complete (more specifically all its actions have executed) we make a request to your webhooks in the following format:
{
"event_type": "invoice_submission",
"guid": "f4624435-7fc4-4fc2-9379-dcb641d593dc",
"result": "failed",
"actions": [{
"type": "peppol",
"destination": "NL:VAT.NL012345678B01",
"result": "error"
}],
"tenant_id": "YourTenantId"
}
Possible results are:
-
succeeded
-
failed
-
no_action_taken
The result 'no action taken' is sent when none of the Peppol identifiers were available on the Peppol network and no fallback email address was provided.
There are three types of actions:
-
peppol
-
edi
-
email
Each has the following possible results:
-
received
-
error
-
unknown
The status 'unknown' indicates that the result of the action is not yet known. This status is not actively notified, but if you request the invoice_submission status through our API, you may get this status.
We will normally take only one action, but if the action has failed we may retry and create a second, third etc. action until one succeeds.
An invoice submission is considered "succeeded" if one of its actions has status "received".
Document Submission
A webhook to convey the status for sent documents looks as follows:
{
"event_type": "document_submission",
"event_group": "invoice",
"event": "succeeded",
"details": "A textual representation of the event details, e.g. clarifications for Under Query",
"guid": "f4624435-7fc4-4fc2-9379-dcb641d593dc",
"idempotencyGuid": "7305ebe5-9a39-4981-9f98-c64e340f2886",
"tenant_id": "YourTenantId"
}
The following can be in the webhook:
Event Type | Event Group | Event | Meaning | Triggered By |
---|---|---|---|---|
document_submission |
invoice |
no_action_taken |
No recipients found to send the document to. |
Routing problem. Provide a valid destination. |
failed |
Could not send the document. This is a final state. |
Unrecoverable technical delivery problem. |
||
cleared |
Cleared by the sender’s tax authority. The next step is to send it to the receiver. |
A digital signature/QR code was obtained. Note that in some cases (currently KSA, PT) this QR code is generated by Storecove until the tax authority’s portal is ready. |
||
succeeded |
Received by corner 3 |
Receipt acknowledged by corner 3. |
||
The events below can only be received if the sender of the invoice advertises the Invoice Response document on the Peppol network (see Legal Entities). |
||||
acknowledged |
Received by corner 4 |
Receipt acknowledged by corner 4. |
||
in_process |
Processing by corner 4 started |
|||
under_query |
Under query by corner 4 |
|||
conditionally_accepted |
Conditionally accepted by corner 4 |
|||
rejected |
Rejected by corner 4 |
|||
accepted |
Accepted by corner 4 |
|||
partially_paid |
Partially paid by corner 4 |
|||
paid |
Paid by corner 4 |
|||
document_submission |
invoice_response |
no_action_taken |
No recipients found to send the document to. |
Routing problem. Provide a valid destination. |
failed |
Could not send the document. This is a final state. |
Unrecoverable technical delivery problem. |
||
succeeded |
Received by corner 3 |
Receipt acknowledged by corner 3. |
3.3.5. Sending Evidence
After you have received a webhook saying the sending was successful, you can retrieve the evidence for that. That includes the exact document that we created for your receiver as well as evidence regarding the exchange. The endpoint for retrieving the evidence can be found on
3.3.6. Globalization
Storecove provides a single and unified API through which you can send and receive documents worldwide, without worrying about the different syntaxes in use in different regions. Simply provide us with the document data and our API automatically ensures that
-
The documents we send for you are compliant with legislation in the sender’s country.
-
The document is routed to the receiver in the way they want.
-
The document we send can be processed by the receiver. This means the exact document we send will depend on the receiver and/or their country.
In order to do this, we have implemented the following features:
-
Compliance
In countries where the invoice to be sent requires approval of the local tax authority we ensure this approval is obtained before sending (e.g. India). This approval often takes the form of a (digitally signed) QR code. We can add that QR code to your PDF if applicable. In countries where the invoice to be sent requires a copy to be sent to the local tax authority we ensure this is done (e.g. Hungary).
-
Routing
-
Exchange Network Routing
When a receiver is a member of an exchange network (e.g. OpenPeppol, BPC) we will automatically route the invoice over that network.
-
Tax Authority Routing
In countries where the invoice has to be sent through a mandatory exchange network (e.g. SDI in Italy) we will automatically route the invoice through that network.
-
Public Entity Routing
In many countries the government has set up a portal service through which the invoices to the government are to be delivered. Storecove automatically takes care of that (e.g. France, Italy, Portual, Spain, Netherlands, Belgium, Germany)
-
Legacy Static Routing
When a receiver is not part of a discoverable exchange network like OpenPeppol or BPC, but is available on a private network such as SAP Ariba, Basware and others, a static route defining the channel and document format can be setup. The receiver may also be on a legacy EDI (typically AS2 with EDIFACT or ANSI X12 810) connection, either directly or through a service provider.
-
Email Routing
When a receiver cannot be reached in any other way, an email with an electronic invoice attachment appropriate for that receiver’s country can be sent. For instance for Germany we send ZUGFeRD/XRechnung, for France Factur-X, for the US ANSI X12 810, etc.
-
-
Document Generation
Two challenges exist regarding the exact document to be sent.
-
Syntax
Inside a single legal territory (EU, US, AU/NZ ("Trans-Tasman") etc.) the format tends to be well-defined. However, that does not mean a single format can be used.
For instance in the EU (mostly through OpenPeppol) Germany has XRechnung in 2 syntaxes (UBL and CII) as well as ZUGFeRD. The Netherlands has SI-1.2, NLCIUS as well as Peppol BIS V3 with country rules. Belgium Has vanilla Peppol BIS V3. Sweden, Denmark, Norway and Greece all use the Peppol BIS V3 format, but with country rules. For now, only a single UBL syntax exists in AU/NZ, but that is a recent addition and versions are bound to emerge. In the US, the BPC has defined a UBL-based format. However, ANSI X12 810 is wide-spread.
-
Contents
An additional challenge arises when sending between these legal territories. Because of differences in tax systems and payment methods, not each invoice can be generated in each format. Therefore, a sender would need to be aware of these complexities and adjust the document to be sent accordingly. To alleviate these difficulties, we perform two conversions on the invoice to be sent:
-
Tax Conversion
Suppose you want to send invoice from AU to an EU country. In the AU, GST is used. So even if you create a sales invoice with 0% GST, this is still not something that can be used to generate a valid EU format invoice, which requires 0% VAT. We take care of this by automatically recognizing when you export an item from one legal territory to another, applying 0% tax, we will take care of generating a document that has 0% in such a way that the receiver’s format can be generated. If you have to charge a non-zero percentage this is not a problem. For AU, simply provide a 10% AU GST tax percentage and it will be converted to an additinal invoice line. Try it, it will work!
A second issue with tax is rounding. A more detailed discussion of that can be found under Tax System, but in short most receivers in the world expect the tax to be calculated and rounded at the invoice level, but some countries allow the tax to be calculated and rounded at the line level. In the latter model the line taxes do not add up to a perfect percentage of the invoice total and a valid invoice in the receiver’s format can not be created. We solve this by adding one or more rounding invoice lines that do not change the invoice total.
-
Payment Method Conversion
For payment methods, an equally complex situation exists. For instance, an AU sender may use Post Billpay as a payment mean, but that is not understood in the EU and most EU formats do not allow it. So we automatically convert this to an equivalent payment method that is valid in the EU, in this case a credit transfer.
-
Because of these complexities our service includes the generation of the document to be sent. The Sending Evidence endpoint is then used to retrieve the exact document sent to store for compliancy reasons.
-
3.3.7. Advanced Routing
In many cases, the routing identifier is the same as one of the receiver’s business identifiers. Some examples:
Country | X2Y | Network | Receiver Business Identifiers | Routing | |
---|---|---|---|---|---|
Legal Identifier |
Tax Identifier |
Routing Identifier(s) |
|||
DE |
B2B |
Peppol |
DE:VAT |
DE:VAT |
DE:VAT, fallback to email |
DE |
B2G |
Peppol |
DE:LWID |
DE:LWID |
|
FI |
B2B |
Peppol |
FI:OVT, FI:ORG |
FI:VAT |
FI:OVT, FI:ORG, fallback to email |
NL |
B2B |
Peppol |
NL:KVK |
NL:VAT |
NL:KVK, NL:VAT, fallback to email |
NL |
B2G |
Peppol |
NL:OINO |
NL:OINO |
|
US |
B2B |
BPC |
DUNS, GLN, LEI |
US:EIN, US:SSN |
DUNS, GLN, LEI, US:EIN, US:SSN, fallback to email |
There are a few special-routing-needs countries/networks:
Country | X2Y | Network | Receiver Business Identifiers | Routing | |
---|---|---|---|---|---|
Legal Identifier |
Tax Identifier |
Routing Identifier(s) |
|||
FI |
B2B |
Finvoice |
FI:OVT, FI:ORG |
FI:VAT |
FI:OPID |
IT |
B2B |
Peppol |
Not allowed |
||
IT |
B2G |
Peppol |
IT:IVA |
IT:CUUO |
|
IT |
B2B |
SDI |
IT:IVA, IT:CF |
IT:CUUO |
|
IT |
B2G |
SDI |
IT:IVA |
IT:CUUO |
For these, the receiver needs to give the sender their routing identifier or one of their routing identifiers in case the have more than one. Therefore, these connections are setup one-by-one and lack the scalability of exchange networks suchs as Peppol and BPC.
When agreed between the sender and receiver, it is also possible to use speical routing identifiers, even where this is not required. For this purpose a GLN number is often used. For instance:
Country | X2Y | Network | Receiver Business Identifiers | Routing | |
---|---|---|---|---|---|
Legal Identifier |
Tax Identifier |
Advanced Routing Identifier |
|||
DE |
B2B |
Peppol |
DE:VAT |
DE:VAT |
GLN |
NL |
B2B |
Peppol |
NL:KVK |
NL:VAT |
GLN |
In these cases too, the connections are setup one-by-one and cannot benefit from the scalability of exchange networks suchs as Peppol and BPC. In some rare cases, documents need to make multiple hops via multiple service providers and in that case this makes sense. But we recommend avoiding this unless absolutely necessary.
In some cases, only email is available for routing:
Country | X2Y | Network | Receiver Business Identifiers | Routing | |
---|---|---|---|---|---|
Legal Identifier |
Tax Identifier |
Routing Identifier(s) |
|||
IN |
B2B |
India IRP |
IN:GSTIN |
email[1] |
|
IN |
B2C |
email[2] |
|||
SA |
B2B |
Storecove/ZATCA |
SA:TIN |
email[3] |
3.4. Receiving Documents
3.4.1. Receiving Flows
There are two ways to process incoming documents:
-
You are advertising identifiers for a LegalEntity on an exchange network (Peppol, BPC, etc) and someone sends a document to one of your LegalEntities. This will immediately trigger the Received Document Webhook.
-
You have received a document through another channel (for instance email) and you would like Storecove to process it. To do this, simply push that document into the
endpoint. This endpoint currently supports RFC822 emails. So when you have received an email for one of you customers that contains a purchase invoice, you can use this endpoint to process it. If the email contains a valid electronic invoice attachment (including those inside PDFs like ZUGFeRD/Factur-X) it will be processed. You will then receive a Received Document Webhook through which you can retrieve the processed purchase invoice in JSON format.
3.4.2. Received Document Webhook
When a new document has been received for you, we will send a webhook with the following contents:
{
"event_type": "received_document",
"event_group": "invoice",
"event": "received",
"receive_guid": "d9d395f8-771d-4b93-b0a5-11e9a7d7d6f5",
"document_guid": "f4624435-7fc4-4fc2-9379-dcb641d593dc",
"tenant_id": "YourTenantId"
}
The deprecated "received_invoice" looks as follows:
{
"event_type": "received_invoice",
"guid": "f4624435-7fc4-4fc2-9379-dcb641d593dc",
"tenant_id": "YourTenantId"
}
You can then use the "document_guid" to retrieve the document from the
endpoint.
Note that the "received_guid" willl be empty unless you used the ReceivedDocuments endpoint. If you used that endpoint and the document failed to be processed correctly, you will receive
{
"event_type": "received_document",
"event_group": "unknown",
"event": "failed",
"receive_guid": "d9d395f8-771d-4b93-b0a5-11e9a7d7d6f5",
"document_guid": null,
"tenant_id": "YourTenantId"
}
Event Type | Event Group | Event | Meaning |
---|---|---|---|
received_document |
invoice |
received |
A new document was received. |
unknown |
failed |
Could not process the document |
3.4.3. Document Formats
The endpoint supports two formats. In particular:
-
JSON
The document that we have received is parsed into a JSON object. This means you don’t need to worry about the format the actual document was exchanged in: the JSON always has the same structure. This makes receiving easy to implement, without having to worry about the format-zoo out there.
-
Original
Although the JSON is easy to process, for compliance reaons you may also want to store the document as it was actually exchanged. That is also possible through this endpoint. Note this is only possible for documents received via an Exchange Network.
3.4.4. JSON Object
An example JSON object for a purchase invoice with all possible fields is:
{
"guid": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"legal_entity_id": 9999999,
"system_generated_primary_image": true,
"document_type": "invoice",
"sub_type": "invoice",
"source": "peppol",
"tax_system": "tax_line_percentages",
"invoice_number": "201902088624",
"issue_date": "2019-03-01",
"tax_point_date": "2019-03-01",
"due_date": null,
"document_currency_code": "EUR",
"period_start": "2021-12-01",
"period_end": "2021-12-31",
"note": "The invoice note. If multiple notes were received these will be concatenated.",
"buyer_reference": "The buyer's reference. Used for internal routing by the receiver.",
"order_reference": "deprecated, use references",
"billing_reference": "deprecated, use references",
"contract_document_reference": "deprecated, use references",
"project_reference": "deprecated, use references",
"references": [
{
"document_type": "purchase_order",
"dcument_id": "used to be the order_reference"
},
{
"document_type": "buyer",
"dcument_id": "used to be the buyer_reference"
},
{
"document_type": "billing",
"dcument_id": "billing_reference"
},
{
"document_type": "contract",
"dcument_id": "contract_document_reference"
},
{
"document_type": "project",
"dcument_id": "used to be the project_reference"
},
{
"document_type": "despatch_advice",
"dcument_id": "Desptach Advice Reference"
},
{
"document_type": "originator",
"dcument_id": "Originator Document Reference"
},
{
"document_type": "receipt",
"dcument_id": "Receipt Document Reference"
}
],
"accounting_cost": "accounting cost or accounting cost code",
"attachments": [
{
"document": "<base64 encoded document snip>",
"content_type": "application/pdf",
"primary_image": true
}
],
"sender": {
"party_name": "Demo company",
"legal_name": "Demo company",
"department": null,
"line1": "Address 1",
"line2": null,
"zip": "Zippy",
"city": "Cityname",
"building_number": "2929",
"secondary_number": "8181",
"neighborhood": "حي العارض",
"county": null,
"country": "NL",
"billing_contact": {
"first_name": null,
"last_name": null,
"email": "info@example.com",
"phone": "0123456789"
},
"identifiers": [
{
"superscheme": "iso6523-actorid-upis",
"scheme": "NL:KVK",
"scheme_numeric": "0106",
"identifier": "999999999"
}
]
},
"payment_terms_note": "Note on the payment",
"payment_means_array": [
{
"type": "CreditTransferPaymentMean",
"account": "",
"branche_code": "",
"mandate": "",
"network": ""
}
],
"delivery": {
"actual_date": "2021-12-31",
"party": {
"name": "Receiving party"
},
"location": {
"id": "",
"scheme_id": "",
"department": "",
"line1": "",
"line2": "",
"zip": "",
"city": "",
"building_number": "2929",
"secondary_number": "8181",
"neighborhood": "حي العارض",
"county": "",
"country": ""
}
},
"invoice_lines": [
{
"line_id": "The ID of the line",
"name": "This invoice line",
"description": "A description of this invoice line",
"period_start": "2021-12-01",
"period_end": "2021-12-31",
"allowance_charges": [
{
"amount": 0.00
}
],
"price": {
"amount": 10.25,
"base_quantity": 1.0
},
"units": {
"quantity": 1.0,
"unit_code": "C62",
},
"additional_item_properites": [
{
"name": "Key1",
"value": "Value1. Note that keys can be anything, to be agreed between the sender/receiver."
},
{
"name": "Key2",
"value": "Value2"
}
],
"references": [
{
"document_type": "purchase_order",
"document_id": "The purchase order number",
"line_id": "The purchase order line id",
"issue_date": "The purchase order issue date"
},
{
"document_type": "line_standard_item_identification",
"document_id": "standard item identification",
"document_id_scheme_id": "The scheme for the identification",
"document_id_scheme_agency_id": "The agency that released the scheme",
"document_id_scheme_version_id": "The version of the scheme"
},
{
"document_type": "line_sellers_item_identification",
"document_id": "Seller's item identification"
},
{
"document_type": "line_buyers_item_identification",
"document_id": "Buyers's item identification"
},
{
"document_type": "item_classification_code",
"document_id": "The item classification code",
"document_id_list_id": "The identification scheme identifier",
"document_id_list_agency_id": "The identification scheme issuing agency identifier",
"document_id_list_version_id": "The identification scheme version identifier"
},
{
"document_type": "item_commodity_code",
"document_id": "The item commodity code",
"document_id_list_id": "The identification scheme identifier",
"document_id_list_agency_id": "The identification scheme issuing agency identifier",
"document_id_list_version_id": "The identification scheme version identifier"
},
{
"document_type": "line_document_reference",
"document_id": "The document reference",
"document_id_list_id": "The identification scheme identifier",
"document_id_list_agency_id": "The identification scheme issuing agency identifier",
"document_id_list_version_id": "The identification scheme version identifier"
},
],
"amount_excluding_tax": 10.25,
"tax": {
"tax_amount": 0.00,
"percentage": 0.00,
"country": "US",
"category": "standard",
"type": "VAT",
"category_code": "S",
},
"accounting": {
"code": "code",
"name": "code description",
"list": "list of the code",
"list_version": "list_version"
}
}
],
"allowance_charges": [
{
"amount_excluding_tax": 0.00,
"tax": {
"tax_amount": 0.00,
"percentage": 0.00,
"country": "US",
"category": "standard",
"type": "VAT",
},
"reason": ""
}
],
"document_totals": {
"total": 12.40,
"rounding": 0.00,
"prepaid": 0.00,
"payable": 12.40,
},
"tax_subtotals": [
{
"amount_excluding_tax": 0.00,
"tax": {
"tax_amount": 0.00,
"percentage": 0.00,
"country": "US",
"category": "standard",
"type": "VAT"
}
}
]
}
4. Various Deprecated
4.1. Reporting
If you use the API then you will receive feedback on the status of documents via webhooks. But if you use legacy connection types such as SFTP or SMTP, that is not possible. For those cases we can setup a daily report via email with the result of all yesterday’s documents sent.
This report contains a column "action required" that you can use to filter only those documents that require action to be taken. The subject of the email will also be prefixed with "OK" or "ACTION REQUIRED" depending on the contents of the report.
This report is often sent directly to the customer service department, where the failed documents can be investigated and fixed. For instance, for first-time revenue, often the email address was not entered correctly. Handling this proactively can save signifact cost downstream in the collections process.
Sending Sales Invoices
For companies wishing to send sales invoices to their Customers through various channels, including the Peppol network (becoming mandatory in the EU for all public entities), our service sends your invoices as e-invoices that can be automatically processed by your Customer’s accountancy software package / ERP.
There are two ways of presenting your sales invoices into the Storecove platform for e-delivery:
-
By emailing your sales invoices to <your_company_name>@send.storecove.com
-
By uploading your sales invoices via SFTP to <your_company_name>@sftp.storecove.com
-
By pushing your sales invoices into our API
We have a web interface where you can view how we processed your invoice and take action on any errors.
If you use our API, the added benefit is that you can configure Webhooks that we will call, updating you with the delivery status of your sales invoice. In addition, you can integrate the delivery status of sales invoices in your customer service environment by requesting their status.
Please see [Individual Companies] for details.
Receiving Purchase Invoices
For receiving invoices there are two solutions that we offer:
-
The Peppol European e-invoicing network
-
<your_company_name>@receive.storecove.com (with optional scan&recognize)
Both will give you not only the PDF invoice, but also the e-invoice, ready for automated processing in your ERP without any manual intervention.
These services can be fully managed via the web interface and no API integration is necessary.
We can deliver purchase invoices to most accountancy software packages, either through their API or by sending the purchase invoice to an email address. It is also possible to leverage our Webhooks, which allow you to configure a URL that we will call each time a purchase invoice is received. You can then retrieve it and process it in your ERP.
Sending Sales Invoices
For companies wishing to send sales invoices to their Customers through various channels, including the Peppol network (becoming mandatory in the EU for all public entities), our service sends your invoices as e-invoices that can be automatically processed by your Customer’s accountancy software package / ERP.
There are two ways of presenting your sales invoices into the Storecove platform for e-delivery:
-
By emailing your sales invoices to <your_company_name>@send.storecove.com
-
By uploading your sales invoices via SFTP to <your_company_name>@sftp.storecove.com
-
By pushing your sales invoices into our API
We have a web interface where you can view how we processed your invoice and take action on any errors.
If you use our API, the added benefit is that you can configure Webhooks that we will call, updating you with the delivery status of your sales invoice. In addition, you can integrate the delivery status of sales invoices in your customer service environment by requesting their status.
Please see [Individual Companies] for details.
Receiving Purchase Invoices
For receiving invoices there are two solutions that we offer:
-
The Peppol European e-invoicing network
-
<your_company_name>@receive.storecove.com (with optional scan&recognize)
Both will give you not only the PDF invoice, but also the e-invoice, ready for automated processing in your ERP without any manual intervention.
These services can be fully managed via the web interface and no API integration is necessary.
We can deliver purchase invoices to most accountancy software packages, either through their API or by sending the purchase invoice to an email address. It is also possible to leverage our Webhooks, which allow you to configure a URL that we will call each time a purchase invoice is received. You can then retrieve it and process it in your ERP.
4.2. Email Ingestion
4.2.1. Introduction
Email ingestion refers to Storecove receiving and processing your (or your Client’s) invoice via an email to <company_name>@send.storecove.com. This email should have an attachment that contains the data that makes up the invoice and optionally an attachment that has an image of the invoice, in PDF format.
4.2.2. From: Address
The address you send from determines your identity as sender of the invoice, and so therefore needs to be validated by Storecove. The entire process is described on
4.2.3. To: Address
If you have followed the previous link, you will have setup an email addresss <company_name>@send.storecove.com. You can send emails to this address with your electronic invoices to send.
4.2.4. Attachments
Data
You need to provide an attachment with the data contained in the invoice.
You can attach a UBL 2.0 or UBL 2.1 invoice. Even if these are not 100% compliant, we can probably process them. Contact us on helpdesk@storecove.com for a test if you are not sure.
If you cannot produce a UBL attachment, we also support other formats (like CII, SAP IDoc, cXML, CSV) and we can also support your custom format. Contact us on helpdesk@storecove.com if you need to use a non-UBL format.
If you have a PDF image of the invoice, you can provide it as an attachment. This attachment’s filename should end in ‘.pdf’. If you do not have a PDF to attach, just leave it out and we will create one for you
4.3. SFTP Ingestion
4.3.1. Introduction
SFTP ingestion refers to Storecove receiving and processing your (or your Client’s) invoices via secure file upload to <company_name>@sftp.storecove.com.
4.3.2. Files
The upload may consist of mulitple files, each with its own purpose. We currently support the following purposes:
-
Data
-
Primary image
-
Additional attachments
The data file contains the data of the invoice. It usually is in UBL format, but if you cannot produce a UBL file, we also support other formats (like CII, SAP Ioc, cXML, CSV) and we can also support your custom format. Contact us if you need to use a non-UBL format. The primary image file should be a PDF. The additional attachments are currently also limited to PDF only, but please contact us if you have different requirements.
The filenames, always in lowecase, have the following structure:
-
<file_id>_<purpose>.<extension> or
-
<file_id>_<purpose>_<participant_identifier>.<extension> or
-
<file_id>_additional_<counter>.<extension> or
-
<file_id>_additional_<counter>_<participant_identifier>.<extension>
All files pertaining to the same invoice should have the same file_id. The file_id should never be re-used. The file_id must be a uuid (any version) and therefore may contain only the following characters:
-
a-f, 0-9 and '-'
and have the following structure:
-
cccccccc-cccc-cccc-cccc-cccccccccccc
Note that if you use a hash of the invoice number as file_id, that may work, but you will not be able to resend that invoice. For that reason, it is recommended to include a random string to make the file_id globally unique.
The purpose must be one of:
-
data (this file contains the invoice data and may occur only once)
-
primary (this is the primary image of the invoice, i.e. a PDF of the invoice. It may occur only once.)
-
additional (this indicates an additional attachment, perhaps an invoice specification. It may occur multiple times)
-
structure (see below)
Examples of valid file names are:
-
82b3785e-0569-482d-a683-ee437eb3df13_data.xml
-
82b3785e-0569-482d-a683-ee437eb3df13_primary.pdf
-
82b3785e-0569-482d-a683-ee437eb3df13_additional_1.pdf
-
82b3785e-0569-482d-a683-ee437eb3df13_primary_nl-oin.00000000000000000000.pdf
-
82b3785e-0569-482d-a683-ee437eb3df13_additional_hr-vat.hr12345678901_1.pdf
-
82b3785e-0569-482d-a683-ee437eb3df13_primary_0190.00000000000000000000.pdf
-
82b3785e-0569-482d-a683-ee437eb3df13_additional_9934.hr12345678901_1.pdf
It is best to provide your participant identifiers in the data file. That way, you can provide as many as you have. If you are not able to include the participant identifiers in the data file, the filename is the next best option. It can, however, hold only a single participant identifier. The full list of participant identifiers can be found here: Receiver Identifiers |
4.3.3. Structure
If you always provide the same set of files (for instance: only a data file or only a data file + a PDF file) then we will configure this statically when we setup your SFTP upload capability. If, however, you wish to have the ability to provide different sets of documents (for instance: sometimes you provide one or more additional attachments, but sometimes you don’t) then it is possible to send us structure of your invoice submission through a separate file, the structure file. It contains a description of which files make up the invoice submission and so we will wait processing the already uploaded files until the set is complete. The contents of the structure file looks like this:
{
"documents": [
{
"purpose": "data",
"extension": "xml",
"count": 1
},
{
"purpose": "primary",
"extension": "pdf",
"count": 1
},
{
"purpose": "additional",
"extension": "pdf",
"count": 2
}
]
}
You have to choose: either you always provide the same set of files, or you always provide a structure file.
4.3.4. Setup
At this moment the setup cannot be done through our web interface. Therefore, please contact us on helpdesk@storecove.com to setup your SFTP upload capability.
4.3.5. Key pair
To setup SFTP, we you need to generate an SSH keypair and send us the public part. On Linux:
ssh-keygen -t rsa -b 4096 -f id_rsa
Leave the passwords empty. Send us the file
-
id_rsa.pub
Don’t send us your id_rsa file, that is to be kept private. |
4.4. Access Point as-a Service
Software suppliers use Storecove as a Peppol Access Point to provide e-invoicing to their customers. For example, if you are an e-commerce SaaS product, Storecove would provide your e-invoicing functionality to many client businesses.
You can use Storecove for your own e-invoicing (as a a company), and for your clients (Access Point as a Service).
4.5. Introduction
Use the API calls
to mange your organizations and their peppol identifiers.
4.6. Sending
For sending, you may want to first "preflight"
to check whether a Peppol identifier can be reached on the Peppol network. Next, send your invoice using
If you send all your invoices through Storecove (i.e. to an email if we cannot send it via Peppol) you do not need to preflight.
4.7. Receiving
Configure the appropriate webhook. See Webhooks.
4.8. Embedded Supplier Connections
4.8.1. Introduction
This API facilitates white label embedding Storecove Script Connections into your own service/product. This enables your users to manage the credentials with which Storecove retrieves invoices from suppliers, directly in your website.
4.8.2. Use
The typical use-case is as follows:
-
You show your user a list of suppliers to choose from.
-
When they click on a supplier, they provide their username/password in a modal form.
-
When they save, you create a ShopAccount via the Storecove API
You should not limit the list of suppliers to only suppliers the user does not yet have connected, since it is possible to have more than one connection to the same supplier (e.g. two mobile phone subscriptions with Vodafone with separate accounts).
The list of available suppliers can be found with this API call:
When a user connects a new supplier, you create a new ShopAccount with the following API call:
When a new invoice is retrieved, you are notified via a webhook (Webhooks).
Invoices will be retrieved from one month before the moment on which the ShopAccount was created.
Authorization failures
If your user provides the wrong credentials, the connection with the supplier cannot be created and invoices are not retrieved. The user needs to take action. A call is available to receive a list of ShopAccounts that have been diagnosed with an authorization problem:
The following are the relevant fields in each ShopAccount: id, external_user_id, sign_in_error_confirmed, sign_in_error_confirmed_at. Poll daily and process the result:
-
If a ShopAccount is on your list, but no longer in the list returned, then either the problem was resolved or it was not resolved for too many days and the ShopAccount has therefore been dropped by Storecove (currently after 30 days). In both cases, remove the id from your list. To determine what happened, request the ShopAccount by its id. You will receive a 200 or a 404.
-
If a ShopAccount is not yet on your list, add it. You can now start the process that you want to follow to alert the user. For instance, you could email them and/or show the problem in your web interface.
-
When someone changes their credentials in your web interface, remove the id from your list immediately after updating the ShopAccount via the API.
5. Best Practices
5.1. Job Queues
The Storecove API is highly available. However, that does not mean 100%. No one can ever guarantee that.
We therefore recommend that all POSTs to our API are done in a job queue. Jobs can be rescheduled to automatically retry after an (increasing) amount of time and should the job finally fail, you can investigate why and potentially reschedule it manually.
5.2. Production Data
It is highly recommended to use (optionally anonimized) real production data during development. Our experience is that if you make up your own invoice data, you are going to run into error message after error message, making the whole process very frustrating. Invoices are complex objects and using production data ensures your data is consistent and relevant.
5.3. Resilience to Changes
It is our policy to not introduce breaking changes in our API except with a major version upgrade. The last major version upgrade was over five years ago and the next one is not on the cards. That means once you have completed your integration, you do not need to worry about Storecove forcing you into a continouous stream of maintenance changes.
However, we do make backwards compatible changes to our API nearly every day. The following are changes that we consider to be backwards compatible:
-
Adding new API resources
-
Adding new methods for a resource
-
Adding new attributes to existing API responses
-
Changing the order of attributes in existing API responses
-
Adding new input attributes to existing API methods
-
Adding new event types, event groups and events
In order for your code to be resilient to these types of backwards compatible changes, we recommend the following best practices:
-
Ignore response attributes that you don’t recognize
-
Ignore event types, event groups and events that you don’t recognize
6. API Reference
6.1. Resources
6.1.1. AdditionalTaxIdentifiers
Create a new AdditionalTaxIdentifier
POST /legal_entities/{legal_entity_id}/additional_tax_identifiers
Description
Create a new AdditionalTaxIdentifier. An AdditionalTaxIdentifier is a seconday tax identifier that is used inside the EU when sending invoices to consumers. In that case, the VAT of the receiving country is used and if the sender has a local VAT identifier, that is used to identifiy the sender, instead of the sender’s origin country VAT number. To use these identifiers, use the invoice.consumerTaxMode = true property.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
legal_entity_id |
The id of the LegalEntity for which to create the AdditionalTaxIdentifier |
integer (int64) |
Body |
additional_tax_identifier |
AdditionalTaxIdentifier to create |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
422 |
Unprocessable Entity |
< ErrorModel > array |
Consumes
-
application/json
Get AdditionalTaxIdentifier
GET /legal_entities/{legal_entity_id}/additional_tax_identifiers/{id}
Description
Get an AdditionalTaxIdentifier
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
id |
The id of the AdditionalTaxIdentifier |
integer (int64) |
Path |
legal_entity_id |
The id of the LegalEntity the AdditionalTaxIdentifier belongs to |
integer (int64) |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
Delete AdditionalTaxIdentifier
DELETE /legal_entities/{legal_entity_id}/additional_tax_identifiers/{id}
Description
Delete an AdditionalTaxIdentifier
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
id |
The id of the AdditionalTaxIdentifier |
integer (int64) |
Path |
legal_entity_id |
The id of the LegalEntity the AdditionalTaxIdentifier belongs to |
integer (int64) |
Responses
HTTP Code | Description | Schema |
---|---|---|
204 |
Success |
No Content |
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
Update AdditionalTaxIdentifier
PATCH /legal_entities/{legal_entity_id}/additional_tax_identifiers/{id}
Description
Update an AdditionalTaxIdentifier
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
id |
The id of the AdditionalTaxIdentifier to be updated |
integer (int64) |
Path |
legal_entity_id |
The id of the LegalEntity the AdditionalTaxIdentifier belongs to |
integer (int64) |
Body |
additional_tax_identifier |
AdditionalTaxIdentifier to update |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
6.1.2. Discovery
Disover Network Participant Existence
POST /discovery/exists
Description
Discover if a network participant exists.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Body |
discoverable_participant |
The participant to check |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
422 |
Unprocessable Entity |
< ErrorModel > array |
Consumes
-
application/json
Discover Country Identifiers
GET /discovery/identifiers
Description
Disover the identifiers used in each country, for routing, for legal identification as well as for tax identification purposes.
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
Disover Network Participant
POST /discovery/receives
Description
Discover a network participant and capabilities.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Body |
discoverable_participant |
The participant to check |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
422 |
Unprocessable Entity |
< ErrorModel > array |
Consumes
-
application/json
6.1.3. DocumentSubmissions
Submit a new document.
POST /document_submissions
Description
Submit a document for delivery. This endpoint will replaces the /invoice_submissions endpoint which will soon be deprecated.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Body |
document_submission |
Document to submit |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
422 |
Unprocessable Entity |
< ErrorModel > array |
Consumes
-
application/json
Get DocumentSubmission Evidence
GET /document_submissions/{guid}/evidence/{evidence_type}
Description
Get evidence for a DocumentSubmission by GUID with corresponding status
Parameters
Type | Name | Description | Schema | Default |
---|---|---|---|---|
Path |
evidence_type |
Type of evidence requested |
enum (sending, clearing) |
|
Path |
guid |
DocumentSubmission GUID |
string (uuid) |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
Consumes
-
application/json
6.1.4. InvoiceSubmissions
Submit a new invoice
POST /invoice_submissions
Description
DEPRECATED. Use the new /document_submissions endpoint. Submit an invoice for delivery.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Body |
invoice_submission |
Invoice to submit |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
422 |
Unprocessable Entity |
< ErrorModel > array |
Consumes
-
application/json
DEPRECATED. Preflight an invoice recipient
POST /invoice_submissions/preflight
Description
Deprecated. Use the new /discovery endpoint. Check whether Storecove can deliver an invoice for a list of ids.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Body |
invoice_recipient_preflight |
The invoice recipient to preflight |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
422 |
Unprocessable Entity |
< ErrorModel > array |
Consumes
-
application/json
DEPRECATED. Get InvoiceSubmission Evidence
GET /invoice_submissions/{guid}/evidence
Description
Deprecated. Use the new /document_submissions/{guid}/evidence endpoint. Get evidence for an InvoiceSubmission by GUID with corresponding status
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
guid |
InvoiceSubmission GUID |
string (uuid) |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
Consumes
-
application/json
6.1.5. LegalEntities
Create a new LegalEntity
POST /legal_entities
Description
Create a new LegalEntity.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Body |
legal_entity |
LegalEntity to create |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
422 |
Unprocessable Entity |
< ErrorModel > array |
Consumes
-
application/json
Get LegalEntity
GET /legal_entities/{id}
Description
Get a specific LegalEntity.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
id |
legal_entity id |
integer (int64) |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
Delete LegalEntity
DELETE /legal_entities/{id}
Description
Delete a specific LegalEntity.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
id |
legal_entity id |
integer (int64) |
Responses
HTTP Code | Description | Schema |
---|---|---|
204 |
Success |
No Content |
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
Update LegalEntity
PATCH /legal_entities/{id}
Description
Update a specific LegalEntity.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
id |
legal_entity id |
integer (int64) |
Body |
legal_entity |
LegalEntity updates |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
422 |
Unprocessable Entity |
< ErrorModel > array |
6.1.6. PeppolIdentifiers
Create a new PeppolIdentifier
POST /legal_entities/{legal_entity_id}/peppol_identifiers
Description
Create a brand new new PeppolIdentifier. For [_sg_singapore], special rules apply.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
legal_entity_id |
The id of the LegalEntity for which to create the PeppolIdentifier |
integer (int64) |
Body |
peppol_identifier |
PeppolIdentifier to create |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
422 |
Unprocessable Entity |
< ErrorModel > array |
Consumes
-
application/json
Delete PeppolIdentifier
DELETE /legal_entities/{legal_entity_id}/peppol_identifiers/{superscheme}/{scheme}/{identifier}
Description
Delete a PeppolIdentifier.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
identifier |
PEPPOL identifier |
string |
Path |
legal_entity_id |
The id of the LegalEntity this PeppolIdentifier belongs to |
integer (int64) |
Path |
scheme |
PEPPOL identifier scheme id, e.g. "DE:VAT". For a full list see Receiver Identifiers. |
string |
Path |
superscheme |
The superscheme of the identifier. Should always be "iso6523-actorid-upis". |
string |
Responses
HTTP Code | Description | Schema |
---|---|---|
204 |
Success |
No Content |
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
6.1.7. PurchaseInvoices
Get Purchase invoice data as JSON
GET /purchase_invoices/{guid}
Description
Deprecated. Get a specific PurchaseInvoice, in JSON format. Recommended way of getting a PurchaseInvoice, since it provides the data in a JSON object and the JSON format is the richest we have that supports all features a PurchaseInvoice can have.
Parameters
Type | Name | Description | Schema | Default |
---|---|---|---|---|
Path |
guid |
The guid of the purchase invoice, from the webhook. |
string (uuid) |
|
Query |
pmv |
The PaymentMeans version. The default (and deprecated) version 1.0 will give BankPaymentMean, DirectDebitPaymentMean, CardPaymentMean, NppPaymentMean, SeBankGiroPaymentMean, SePlusGiroPaymentMean, SgCardPaymentMean, SgGiroPaymentMean, SgPaynowPaymentMean. Version 2.0 deprecates BankPaymentMean (now CreditTransferPaymentMean), CardPaymentMean (now CreditCardPaymentMean), NppPaymentMean (now AunzNppPayidPaymentMean), SeBankGiroPaymentMean (now SeBankgiroPaymentMean – note the lower 'g' in 'bankgiro'). It also adds OnlinePaymentServicePaymentMean, StandingAgreementPaymentMean, AunzNppPaytoPaymentMean, AunzBpayPaymentMean, AunzPostbillpayPaymentMean, AunzUriPaymentMean. |
string |
|
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
Get Purchase invoice data as JSON
GET /purchase_invoices/{guid}/{format}
Description
Get a specific PurchaseInvoice, in JSON or original format.
Parameters
Type | Name | Description | Schema | Default |
---|---|---|---|---|
Path |
format |
The format of the document. |
enum (json, original) |
|
Path |
guid |
The guid of the purchase invoice, from the webhook. |
string (uuid) |
|
Query |
pmv |
The PaymentMeans version. The default (and deprecated) version 1.0 will give BankPaymentMean, DirectDebitPaymentMean, CardPaymentMean, NppPaymentMean, SeBankGiroPaymentMean, SePlusGiroPaymentMean, SgCardPaymentMean, SgGiroPaymentMean, SgPaynowPaymentMean. Version 2.0 deprecates BankPaymentMean (now CreditTransferPaymentMean), CardPaymentMean (now CreditCardPaymentMean), NppPaymentMean (now AunzNppPayidPaymentMean), SeBankGiroPaymentMean (now SeBankgiroPaymentMean – note the lower 'g' in 'bankgiro'). It also adds OnlinePaymentServicePaymentMean, StandingAgreementPaymentMean, AunzNppPaytoPaymentMean, AunzBpayPaymentMean, AunzPostbillpayPaymentMean, AunzUriPaymentMean. |
string |
|
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
Get Purchase invoice data as JSON with a Base64-encoded SI-1.2 UBL string
GET /purchase_invoices/{guid}/{packaging}
Description
Deprecated. Get a specific PurchaseInvoice. Using /json as {packaging} is recommended (in which case you can just omit it), however, this endpoint allows getting the invoice in a differently serialized format such as UBL.
Parameters
Type | Name | Description | Schema | Default |
---|---|---|---|---|
Path |
guid |
purchase invoice guid |
string (uuid) |
|
Path |
packaging |
How to package the purchase invoice. Use "json" or "ubl" |
enum (json, ubl) |
|
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
Get Purchase invoice data as JSON with a Base64-encoded UBL string in the specified version
GET /purchase_invoices/{guid}/{packaging}/{package_version}
Description
Deprecated. Get a specific PurchaseInvoice in a non-JSON serialized format with version.
Parameters
Type | Name | Description | Schema | Default |
---|---|---|---|---|
Path |
guid |
purchase invoice guid |
string (uuid) |
|
Path |
package_version |
The version of the ubl package. |
enum (original, si11, si12, si20, aunz, sg) |
|
Path |
packaging |
How to package the purchase invoice. Use "ubl" |
enum (ubl) |
|
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
6.1.8. ReceivedDocuments
Receive a new Document
POST /legal_entities/{legal_entity_id}/received_documents
Description
Receive a new Document.
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
legal_entity_id |
The id of the LegalEntity for which the document was received. |
integer (int64) |
Body |
received_document |
Received document to process. |
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
422 |
Unprocessable Entity |
< ErrorModel > array |
Consumes
-
application/json
6.1.9. WebhookInstances
GET a WebhookInstance
GET /webhook_instances/
Description
GET a WebhookInstance from the queue. After processing it successfully, DELETE it and GET the next one. When a 204 is received, the queue is empty and the polling process can sleep for a while.
Responses
HTTP Code | Description | Schema |
---|---|---|
200 |
Success |
|
204 |
Success |
No Content |
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
DELETE a WebhookInstance
DELETE /webhook_instances/{guid}
Description
DELETE a specific WebhookInstance
Parameters
Type | Name | Description | Schema |
---|---|---|---|
Path |
guid |
WebhookInstance guid |
string (uuid) |
Responses
HTTP Code | Description | Schema |
---|---|---|
204 |
Success |
No Content |
401 |
Unauthorized |
No Content |
403 |
Forbidden |
No Content |
404 |
Not Found |
No Content |
6.2. Definitions
6.2.1. AccountingCustomerParty
The customer receiving the invoice.
Name | Description | Schema |
---|---|---|
accountId |
Deprecated. The account id you assigned to the customer. |
string |
party |
||
publicIdentifiers |
A list of legal and tax identifiers for this customer. |
< PublicIdentifier > array |
6.2.2. AccountingSupplierParty
The party sending the invoice. Most data for the AccountingSupplierParty is taken from the Storecove database, where your sender identity resides and has been validated. However, we provide a limited number of fields here that you can specify on an invoice-by-invoice basis.
Name | Schema |
---|---|
party |
6.2.3. AdditionalItemProperty
An additional property for the item
Name | Description | Schema |
---|---|---|
name |
The name of the property. |
string |
value |
The value of the property. |
string |
6.2.4. AdditionalTaxIdentifier
Name | Description | Schema |
---|---|---|
country |
The ISO3166 country code to use this identifier for in case of consumerTaxMode. |
string |
county |
The county/state inside the country code to use this identifier for in case of consumerTaxMode. |
string |
id |
The Storecove assigned id for the AdditionalTaxIdentifier. |
integer (int64) |
identifier |
The identifier. |
string |
scheme |
The scheme of the identifier. |
string |
superscheme |
The superscheme of the identifier. |
string |
6.2.5. AdditionalTaxIdentifierCreate
Name | Description | Schema |
---|---|---|
country |
The ISO3166 country code to use this identifier for in case of consumerTaxMode. |
string |
county |
The county/state inside the country code to use this identifier for in case of consumerTaxMode. Leave empty to create an additional tax identifier for the entire country. For India, use the two last characters of ISO 3166-2:IN (https://en.wikipedia.org/wiki/States_and_union_territories_of_India). |
string |
identifier |
The identifier. |
string |
scheme |
The scheme of the identifier. |
string |
superscheme |
The superscheme of the identifier. Should always be "iso6523-actorid-upis". |
string |
third_party_password |
The password to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN tax identifier. |
string |
third_party_username |
The username to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN tax identifier. |
string |
6.2.6. AdditionalTaxIdentifierUpdate
Name | Description | Schema |
---|---|---|
identifier |
The identifier. |
string |
third_party_password |
The password to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN tax identifier. |
string |
third_party_username |
The username to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN tax identifier. |
string |
6.2.7. Address
The address
Name | Description | Schema |
---|---|---|
city |
The name of the city. Mandatory in most countries. |
string |
country |
||
county |
An optional county name. |
string |
street1 |
The street name and number. Mandatory in most countries. |
string |
street2 |
The second street field. Use this if you used the first field for the building name. |
string |
zip |
The zipcode/postalzone. Mandatory unless the country does not have zip codes. |
string |
6.2.8. Administration
Name | Description | Schema |
---|---|---|
email |
The email address to send the received document to |
string |
id |
The Storecove assigned id for the Administration. |
integer (int64) |
legal_entity_id |
The LegalEntity the Administration belongs to. |
integer (int64) |
package_version |
The version of the package. |
enum (peppol_bis_v3, aunz, sg) |
packaging |
How to package the purchase invoice. |
enum (ubl) |
sender_email_identity_id |
The id of the SenderEmailIdentity. If not provided, the Storecove default sender will be used |
integer (int64) |
6.2.9. AdministrationCreate
Name | Description | Schema |
---|---|---|
email |
The email address to send the received document to |
string |
legal_entity_id |
The LegalEntity the Administration belongs to. |
integer (int64) |
package_version |
The version of the package. |
enum (peppol_bis_v3, aunz, sg) |
packaging |
How to package the purchase invoice. |
enum (ubl) |
sender_email_identity_id |
The id of the SenderEmailIdentity. If not provided, the Storecove default sender will be used |
integer (int64) |
6.2.10. AdministrationUpdate
Name | Description | Schema |
---|---|---|
email |
The email address to send the received document to |
string |
package_version |
The version of the package. |
enum (peppol_bis_v3, aunz, sg) |
packaging |
How to package the purchase invoice. |
enum (ubl) |
sender_email_identity_id |
The id of the SenderEmailIdentity. If not provided, the Storecove default sender will be used |
integer (int64) |
6.2.11. AllowanceCharge
Name | Description | Schema |
---|---|---|
amountExcludingVat |
The amount for the allowance or charge, excluding VAT |
number |
reason |
The reason for the allowance or charge, free text |
string |
reasonCode |
Do not use. Contact Storecove first if you want to use this field. |
string |
tax |
The tax for this allowance or charge. In the future, the taxes_duties_fees array will become the standard way of providing this information and you are invited to use that. |
|
taxesDutiesFees |
An array of taxes, duties and fees for this invoice line. At this moment, multiple Tax items is allowed only for IN (India) taxes. All other countries can only have a single Tax item in this array. When used, the 'tax' element must be empty. |
< Tax > array |
6.2.12. Attachment
A document attachment to the invoice.
Name | Description | Schema |
---|---|---|
description |
A description for the file attachment. |
string |
document |
The base64 encoded version of the document attachment. |
string |
documentId |
An id for the file attachment. |
string |
filename |
The name of the file attachment. |
string |
mimeType |
The document attachment mime type. Currently only application/pdf is allowed. |
enum (application/pdf) |
primaryImage |
Whether or not this document is a visual representation of the invoice data. Note that although this property is not yet deprecated, using value 'true' is discouraged, since the invoice data itself is leading, not the image, and including an image may lead to confusion. Peppol no longer allows including pirmary images. |
boolean |
6.2.13. Contact
Contact details for the invoice
Name | Description | Schema |
---|---|---|
email |
string (email) |
|
firstName |
string |
|
id |
Only supported for AccountingCustomerParty. |
string |
lastName |
string |
|
phone |
Maximal length : |
string |
6.2.14. CorpPass
Name | Description | Schema |
---|---|---|
client_redirect_fail_url |
The URL the CorpPass system will redirect to in case of a failure to perform identity verfication. Mandatory for flow_type="corppass_flow_redirect" |
string |
client_redirect_success_url |
The URL the CorpPass system will redirect to in case of successful identity verfication. Mandatory for flow_type="corppass_flow_redirect" |
string |
enabled |
Whether or not to enable the CorpPass flow. For now, defaults to false. In the future, will default to true. At some other point in the future, the value false will no longer be allowed. |
boolean |
flow_type |
The CorpPass flow type. |
enum (corppass_flow_redirect, corppass_flow_email) |
signer_email |
The email of the person who is going to perform the CorpPass process. Mandatory for flow_type="corppass_flow_email" |
string |
signer_name |
The name of the person who is going to perform the CorpPass process. Mandatory for flow_type="corppass_flow_email" |
string |
simulate_corppass |
Whether or not to simulate CorpPass. Instead of redirecting to a CorpPass URL, you will receive a redirect to a Storecove URL which will show a page with two buttons: success and fail. This makes development without having test CorpPass credentials possible. |
boolean |
6.2.15. Country
An ISO 3166-1 alpha-2 country code.
Type : enum (AD, AE, AF, AG, AI, AL, AM, AO, AQ, AR, AS, AT, AU, AW, AX, AZ, BA, BB, BD, BE, BF, BG, BH, BI, BJ, BL, BM, BN, BO, BQ, BR, BS, BT, BV, BW, BY, BZ, CA, CC, CD, CF, CG, CH, CI, CK, CL, CM, CN, CO, CR, CU, CV, CW, CX, CY, CZ, DE, DJ, DK, DM, DO, DZ, EC, EE, EG, EH, ER, ES, ET, FI, FJ, FK, FM, FO, FR, GA, GB, GD, GE, GF, GG, GH, GI, GL, GM, GN, GP, GQ, GR, GS, GT, GU, GW, GY, HK, HM, HN, HR, HT, HU, ID, IE, IL, IM, IN, IO, IQ, IR, IS, IT, JE, JM, JO, JP, KE, KG, KH, KI, KM, KN, KP, KR, KW, KY, KZ, LA, LB, LC, LI, LK, LR, LS, LT, LU, LV, LY, MA, MC, MD, ME, MF, MG, MH, MK, ML, MM, MN, MO, MP, MQ, MR, MS, MT, MU, MV, MW, MX, MY, MZ, NA, NC, NE, NF, NG, NI, NL, NO, NP, NR, NU, NZ, OM, PA, PE, PF, PG, PH, PK, PL, PM, PN, PR, PS, PT, PW, PY, QA, RE, RO, RS, RU, RW, SA, SB, SC, SD, SE, SG, SH, SI, SJ, SK, SL, SM, SN, SO, SR, SS, ST, SV, SX, SY, SZ, TC, TD, TF, TG, TH, TJ, TK, TL, TM, TN, TO, TR, TT, TV, TW, TZ, UA, UG, UM, US, UY, UZ, VA, VC, VE, VG, VI, VN, VU, WF, WS, XI, YE, YT, ZA, ZM, ZW)
6.2.16. CountrySpecification
Name | Description | Schema |
---|---|---|
country |
The ISO 3166-2 country this specification is for. |
|
receiver |
The receiver of the document. |
|
region |
The region this country belongs to. Within this region exchanging invoices is well defined. Between regions some care needs to be taken and Storecove may help in automatically converting some items. Contact us for details of inter-regional document exchange. |
enum (eu_eea, sg, aunz, in, world) |
sender |
The sender of the document. |
Receiver
Name | Description | Schema |
---|---|---|
business |
The business receiver of the document. |
|
consumer |
The consumer receiver of the document. |
|
government |
The government receiver of the document. |
Business Receiver
Name | Description | Schema |
---|---|---|
legal |
The legal identifier of the business receiver. |
|
routing |
The routing identifier of the business receiver. |
|
tax |
The tax identifier of the business receiver. |
Consumer Receiver
Name | Description | Schema |
---|---|---|
legal |
The legal identifier of the consumer receiver. |
|
routing |
The routing identifier of the consumer receiver. |
|
tax |
The tax identifier of the consumer receiver. |
Government Receiver
Name | Description | Schema |
---|---|---|
legal |
The legal identifier of the government receiver. |
|
routing |
The routing identifier of the government receiver. |
|
tax |
The tax identifier of the government receiver. |
Sender
Name | Description | Schema |
---|---|---|
legal |
The legal identifier of the sender. |
|
tax |
The tax identifier of the sender. |
6.2.17. CountrySpecificationIdentifier
Name | Description | Schema |
---|---|---|
centalized_identifier_test |
The centralized identifier to use for routing in test cases, if the "centralized" proprerty is true. May not always be available depending on the country and network. |
string |
centralized |
Whether or not the identifier represents a centralized routing identifier. This is used in SG, AT and FR where all government invoices are routed to a central accesspoint with a single identifier. This field can only be present for routing identifiers. |
boolean |
centralized_identifier |
The centralized identifier to use for routing, if the "centralized" proprerty is true. |
string |
description |
Identifier description. |
string |
scheme |
The scheme of the identifier |
string |
scheme_numercial |
The numerical version of the scheme of the identifier |
string |
scheme_type |
The scheme type of the identifier. Currently always "iso6523-actorid-upis" |
enum (iso6523-actorid-upis) |
6.2.18. CountrySpecifications
Name | Schema |
---|---|
countries |
< CountrySpecification > array |
6.2.19. CurrencyCode
The ISO 4217 currency code.
Type : enum (AED, AFN, ALL, AMD, ANG, AOA, ARS, AUD, AWG, AZN, BAM, BBD, BDT, BGN, BHD, BIF, BMD, BND, BOB, BOV, BRL, BSD, BTN, BWP, BYN, BYR, BZD, CAD, CDF, CHE, CHF, CHW, CLF, CLP, CNY, COP, COU, CRC, CUC, CUP, CVE, CZK, DJF, DKK, DOP, DZD, EGP, ERN, ETB, EUR, FJD, FKP, GBP, GEL, GHS, GIP, GMD, GNF, GTQ, GYD, HKD, HNL, HRK, HTG, HUF, IDR, ILS, INR, IQD, IRR, ISK, JMD, JOD, JPY, KES, KGS, KHR, KMF, KPW, KRW, KWD, KYD, KZT, LAK, LBP, LKR, LRD, LSL, LYD, MAD, MDL, MGA, MKD, MMK, MNT, MOP, MRO, MUR, MVR, MWK, MXN, MXV, MYR, MZN, NAD, NGN, NIO, NOK, NPR, NZD, OMR, PAB, PEN, PGK, PHP, PKR, PLN, PYG, QAR, RON, RSD, RUB, RWF, SAR, SBD, SCR, SDG, SEK, SGD, SHP, SLL, SOS, SRD, SSP, STD, SYP, SZL, THB, TJS, TMT, TND, TOP, TRY, TTD, TWD, TZS, UAH, UGX, USD, USN, UYI, UYU, UZS, VEF, VND, VUV, WST, XAF, XAG, XAU, XBA, XBB, XBC, XBD, XCD, XDR, XFU, XOF, XPD, XPF, XPT, XSU, XTS, XUA, XXX, YER, ZAR, ZMW)
6.2.20. Delivery
Name | Description | Schema |
---|---|---|
actualDate |
The actual date of the delivery. |
string |
deliveryLocation |
||
deliveryPartyName |
The name of the party that took delivery. |
string |
quantity |
The quantity of the delivery. |
number |
deliveryLocation
Name | Description | Schema |
---|---|---|
address |
||
id |
The location identifier. |
string |
schemeAgencyId |
Deprecated. The schemeAgencyId of the location identifier (e.g. 'ZZZ') |
string |
schemeId |
The schemeId of the location identifier (e.g. 'EAN') |
string |
6.2.21. DiscoverableParticipant
A participant to be discovered.
Name | Description | Schema |
---|---|---|
documentTypes |
An array of document types to discover. The default is '["invoice", "creditnote"]'. This is ignored when only checking existence. |
< enum (invoice, creditnote, invoice_response, order, order_response, despatch_notification, product_catalogue) > array |
identifier |
The actual identifier. |
string |
metaScheme |
The meta scheme of the identifier. For Peppol this is always 'iso6523-actorid-upis'. |
string |
network |
The network to check. Currently only 'peppol' is supported. |
string |
scheme |
The scheme of the identifier. See Receiver Identifiers for a list. |
string |
6.2.22. DiscoveredParticipant
A public identifier for this customer.
Name | Description | Schema |
---|---|---|
code |
The response code. |
enum (OK, NOK) |
email |
Whether or not an 'OK' response means the document will be sent via Peppol, but delivered by email. This happens in the Belgian Hermes system where all identifiers have been registered, but if the receiver hasn’t registered with a service provider, the Hermes system will send a PDF created from the electronic invoice and email that. The electronic document will itself not be emailed. Also see Hermes. |
boolean |
6.2.23. DocumentInvoiceResponse
The invoice response to send.
Name | Description | Schema |
---|---|---|
clarifications |
A list of clarifications why a received invoice was rejected (RE) or under query (UQ) and what action to take. |
< InvoiceResponseClarification > array |
effectiveDate |
The date when the status became effective. Format: yyyy-mm-dd. |
string |
note |
A note to add to the invoice reponse |
string |
responseCode |
The response code. For details see https://docs.peppol.eu/poacc/upgrade-3/codelist/UNCL4343-T111/ |
enum (AB, IP, UQ, RE, AP, PD) |
6.2.24. DocumentSubmission
The document you want Storecove to send, with some meta-data.
Name | Description | Schema |
---|---|---|
attachments |
An array of attachments. You may provide up to 10 attchments, but the total size must not exceed 10MB after Base64 encoding. |
< Attachment > array |
createPrimaryImage |
Whether or not to create a primary image (PDF) if one is not provided. |
boolean |
document |
||
idempotencyGuid |
A guid that you generated for this DocumentSubmission to achieve idempotency. If you submit multiple documents with the same idempotencyGuid, only the first one will be processed and any subsequent ones will trigger an HTTP 422 Unprocessable Entity response. |
string |
legalEntityId |
The id of the LegalEntity this document should be sent on behalf of. Either legalEntityId or receiveGuid is mandatory. |
integer |
receiveGuid |
The GUID that was in the received_invoice webhook. Either legalEntityId or receiveGuid is mandatory. |
string |
routing |
Specifies where the document is to be sent. Can be electronic identifiers or email addresses. |
6.2.25. DocumentSubmissionEvidence
Name | Description | Schema |
---|---|---|
documents |
An array of documents that were sent. For OpenPeppol, this is always a single document (it may contain a PDF inside). For Email, the number of documents depends on the number of attachments, which in turn depends on the country of the receiver. For email, the raw email in RFC822 format is also included. |
< DocumentSubmissionEvidenceDocument > array |
evidence |
The evidence for this transmission. |
|
network |
The exchange network that was used to send the document |
enum (as2, email, peppol, sdi) |
receiver |
The legal identifier of the receiver, or the tax identifier if there is no legal identifier. |
string |
sender |
The legal identifier of the sender, or the tax identifier if there is no legal identifier. |
string |
6.2.26. DocumentSubmissionEvidenceDocument
Name | Description | Schema |
---|---|---|
document |
The URL where the document can be retrieved. |
string |
expires_at |
The datetime the URL expires. Format: 'YYYY-MM-DD HH:mm:ss.' |
string |
mime_type |
The mime type of the document. |
enum (message/rfc822, application/xml, application/json, application/pdf) |
6.2.27. DocumentSubmissionEvidenceEvidence
Name | Description | Schema |
---|---|---|
message_id |
The unique message id used in the OpenPeppol SBDH. |
string |
receiving_accesspoint |
An identification of the OpenPeppol accesspoint that the invoice was sent to. |
string |
remote_mta_ip |
The IP address of the sending SMTP server. |
string |
reporting_mta |
An identification for the sending SMTP. |
string |
smtp_response |
The response of the receiving SMTP server. |
string |
timestamp |
The timestamp of the delivery to the receiving SMTP server. |
string |
transmission_id |
The unique id for this OpenPeppol transmission. |
string |
xml |
The XML evidence for the transmission. This is the XML returned by the receiving OpenPeppol accesspoint. |
string |
6.2.28. DocumentSubmissionResult
The result of a document submission
Name | Description | Schema |
---|---|---|
guid |
A (V4) GUID for the document submission |
string |
6.2.29. EIdentifiers
A list of electronic routing identifiers. These are the identifiers used on the Peppol network or for other destinations.
Type : < RoutingIdentifier > array
6.2.30. ErrorModel
Name | Schema |
---|---|
details |
string |
source |
string |
6.2.31. Invoice
The invoice to send. Provide either invoice, or invoiceData, but not both.
Name | Description | Schema |
---|---|---|
accountingCost |
The buyer’s accounting cost centre for this invoice, expressed as text. |
string |
accountingCurrencyTaxAmount |
The total amount of tax in the accounting currency. If included, must be non-zero. |
number |
accountingCurrencyTaxAmountCurrency |
The currency of the accountingCurrencyTaxAmount. This MUST be different from the documentCurrencyCode, since it makes no sence including this othterwise. Mandatory if accountingCurrencyTaxAmount is provided. |
|
accountingCustomerParty |
The party the invoice is sent to. |
|
accountingSupplierParty |
The party sending the invoice. Most data for the AccountingSupplierParty is taken from the Storecove database, where your sender identity resides and has been validated. However, we provide a limited number of fields (mainly contact fields) here that you can specify on an invoice-by-invoice basis. Contact us if you want to use this feature. |
|
allowanceCharges |
An array of allowance charges. |
< AllowanceCharge > array |
amountIncludingVat |
amountIncludingVat is important because of rounding differences. In many invoices, the sum of the line item amounts excluding VAT and the VAT amounts is not equal to first summing the line items without VAT, and then applying VAT. The difference is automatically calculated and included in the electronic invoice, so the receiving accounting package can process the electronic invoice without problems. |
number |
billingReference |
DEPRECATED. Use a reference object with a documentType 'billing'. A reference to a commercial invoice or corrective invoice of which the current invoice is a correction. This field is mandatory when sending invoiceType 384. |
string |
buyerReference |
DEPRECATED. Use a reference object with a documentType 'buyer_reference'. A reference provided by the buyer used for internal routing of the document. |
string |
consumerTaxMode |
Whether or not to process the invoice in consumer tax mode. In this mode, the VAT identifier of the sender will not be the default VAT identifier, but the one that matches with the country of the receiving consumer, if that additional VAT identifier for that country is available. These additional VAT identifiers need to be added to the sending LegalEntity by Storecove, so if you need to send invoices in this mode, please contact us. |
boolean |
contractDocumentReference |
DEPRECATED. Use a reference object with a documentType 'contract'. A reference to a contract or framework agreement that this invoice relates to. |
string |
delivery |
The delivery of the invoice. |
|
documentCurrencyCode |
The documentCurrencyCode is the currency for the entire invoice. We currently do not support invoices in multiple currencies. If left out, will default to EUR |
|
dueDate |
Format: yyyy-mm-dd. |
string |
invoiceLines |
An array of invoice lines. |
< InvoiceLine > array |
invoiceNumber |
The invoice number you assigned to the invoice. The invoiceNumber should be unique for the legalEntityId and year of the issueDate. This means invoice numbers can be reused in different years, as is customary in some countries. |
string |
invoicePeriod |
The period (or specific date) to which the invoice applies. Format: yyyy-mm-dd - yyyy-mm-dd. |
string |
invoiceType |
DEPRECATED. Do not use. This field is available for legacy reasons only. If you want to send a regular invoice (aka UBL type '380'), make sure you have a positive invoice amount. For a credit note (aka UBL type '381'), simply provide a negative invoice amount. If you, in addition to a negative invoice amount, also specify a billingReferences, your invoice will become a corrective invoice (aka UBL type '384'). If your invoice is not sent in the UBL syntax, Storecove will provide the appropriate type for the syntax the invoice is sent in. |
enum (380, 381, 384) |
issueDate |
Format: yyyy-mm-dd. |
string |
issueReasons |
An array reaons for issuing the invoice. |
< string > array |
note |
A note to add to the invoice |
string |
orderReference |
DEPRECATED. Use a reference object with a documentType 'purchase_order'. A reference to an order for this invoice, assigned by the buyer. Note that this often is a key field, since many receivers of invoices will use this field to automatically match the invoice to an order they placed. Many receivers refuse invoices that cannot be automatically matched, in particular government agencies. So it is highly recommended to fill this field whenever possible. |
string |
paymentMeansArray |
An array of payment means (ways to pay the invoice). |
< PaymentMeans > array |
paymentMeansBic |
DEPRECATED. Use paymentMeansArray. The BIC (Swift) of the bank where the amount payable should be transferred to |
string |
paymentMeansCode |
DEPRECATED. Use paymentMeansArray. How the invoice has been / will be paid. Use only online_payment_service (payment will be made or has been made by an online payment service), bank_card (e.g. debit card, credit card), direct_debit (the amount has been / will be taken out of the client’s bank account), standing_agreement (an unspecified payment means known to both buyer and seller) or credit_transfer (the buyer will do / has done a bank transfer). The numeric codes are for legacy purposes, they should not be used. |
enum (online_payment_service, bank_card, direct_debit, standing_agreement, credit_transfer, se_bankgiro, se_plusgiro, aunz_npp, , 1, 30, 31, 42, 48, 49, 57, 58) |
paymentMeansIban |
DEPRECATED. Use paymentMeansArray. The IBAN the amount payable should be transferred to |
string |
paymentMeansPaymentId |
DEPRECATED. Use the paymentId in the individual PaymentMeans object. The payment id that you will use to match the payment against the invoice. |
string |
paymentTerms |
The payment terms of the invoice. |
|
preferredInvoiceType |
In auto mode, the choice between invoice or creditnote is made by Storecove based on what is appropriate for the receiver and the receiver country, in combination with the invoice amount sign. If you wish to state a preference, use this field. It is not guaranteed that the preference will be used, since it depends also on the receiver’s document capabilities. |
enum (prefer_autodetect, prefer_invoice, prefer_creditnote) |
prepaidAmount |
The amount already paid. |
number |
projectReference |
DEPRECATED. Information about the project this invoice relates to. |
string |
references |
An array of references to other documents. Note that many syntaxes do not support multiple references of the same type in which case they will be concatenated with ','. Also, not all syntaxes support all documentTypes. |
< Reference > array |
salesOrderId |
DEPRECATED. Use a reference object with a documentType 'sales_order'. A reference to an order for this invoice, assigned by the seller. |
string |
selfBillingMode |
In self billing mode, the AccountingCustomerParty and the AccountingSupplierParty are be switched. Such an invoice can only be sent via email. Also, your account will need to allow the use of this mode, so before trying to use this please first contact Storecove. |
boolean |
taxExemptReason |
DEPRECATED. Use Tax/category and specify this per invoice line. If you do specify this field, it will be applied to all invoice lines and it is an error to specify a Tax/category at the invoice line level. This field holds the reason no tax is present in the invoice. Note that this is an invoice level field and you cannot specify it per invoice line. This field is mandatory unless tax is present in the invoice. |
enum (export, reverse_charge, zero_rated, exempt, outside_scope, intra_community) |
taxPointDate |
The tax date is the date on which the supply of goods or of services was made or completed or the date on which the payment on account was made insofar as that date can be determined and differs from the date of the issue of the invoice. EU 2006-112 Article 226 Point 7. Note: For the Dutch TAX authorities the tac date should be the same as the issue date. |
string |
taxSubtotals |
An array of tax subtotals. This element is mandatory for taxSystem 'tax_line_percentages'. |
< TaxSubtotal > array |
taxSystem |
The tax system used for the invoice. The system 'tax_line_percentages' is preferred, but for historic purposes 'tax_line_amounts' is supported and the default. Since not all invoice formats that we are required to send support 'tax_line_amounts' we will need to convert the invoice to the 'tax_line_percentags' system if we are forced to send the invoice in that tax system. Note that an invoice must always contain tax information, even if that is 0% or an item or sender is exempt or tax is completely outside scope. In that case, use the correct tax categories (see Tax) |
enum (tax_line_amounts, tax_line_percentages) |
taxesDutiesFees |
An array of taxes, duties and fees for this invoice. At this moment, the only invoice level tax allowed is the Italian '€2 bollo virtuale' |
< Tax > array |
ublExtensions |
An array of ubl extensions. |
< string > array |
vatReverseCharge |
DEPRECATED. Use taxExemptReason. |
boolean |
x2y |
The type of entities the document is sent from/to: b2b (business-to-business), b2g (business-to-government) or b2c (business-to-consumer). This field does not have a default, but it in mose cases it will be treated as b2b. Only when you explicitly specify b2g or b2c OR when it is clear from the context will a different value be used. For instance, when we see the document is being routed to DE:LWID or NL:OINO number, this tells us it is b2g. But in many cases we are unable to determine this and so it is best to always specify this field. |
enum (b2b, b2g, b2c) |
The Payment Terms
Name | Description | Schema |
---|---|---|
note |
The note for the payment terms. |
string |
6.2.32. InvoiceData
The invoice to send, in base64 encoded format. Provide either invoice, or invoiceData, but not both.
Name | Description | Schema |
---|---|---|
conversionStrategy |
How to interpret the document. |
enum (ubl, cii, idoc) |
document |
The base64 encoded version of the document. |
string |
6.2.33. InvoiceLine
Name | Description | Schema |
---|---|---|
accountingCost |
The buyer’s accounting cost centre for this invoice line, expressed as text. |
string |
additionalItemProperties |
An array of additional item properties. |
< AdditionalItemProperty > array |
allowanceCharge |
The discount or surcharge on this item. Should be negative for discounts |
number |
amountExcludingVat |
The amount excluding VAT. Should equal quantity x itemPrice + allowanceCharge. |
number |
buyersItemIdentification |
The ID the buyer assigned to this item. |
string |
description |
The description for this invoice line. |
string |
invoicePeriod |
The period (or specific date) to which the invoice line applies. Format: yyyy-mm-dd - yyyy-mm-dd. |
string |
itemPrice |
The price per item (may be fractional) |
number |
lineId |
The id for this invoice line. |
string |
name |
A short name for this invoice line. If not provided, it will be taken from description and description will be set to an emtpy string. |
string |
orderLineReferenceLineId |
A reference to the LineID of the order. The order itself is specified as the orderReference at the invoice level. It is not possible to specify an orderReference at the invoice line level. An invoice MUST at this time be for a single order only. |
string |
quantity |
The number of items (may be fractional). |
number |
quantityUnitCode |
The unit of measure that applies to the invoiced quantity. Codes for unit of packaging from UNECE Recommendation No. 21 can be used in accordance with the descriptions in the "Intro" section of UN/ECE Recommendation 20, Revision 11 (2015): The 2 character alphanumeric code values in UNECE Recommendation 21 shall be used. To avoid duplication with existing code values in UNECE Recommendation No. 20, each code value from UNECE Recommendation 21 shall be prefixed with an “X”, resulting in a 3 alphanumeric code when used as a unit of measure. Note that the following additionally allowed codes are deprecated and will be converted to C62: 04, 05, 08, 16, 17, 18, 19, 26, 29, 30, 31, 32, 36, 43, 44, 45, 46, 47, 48, 53, 54, 62, 63, 64, 66, 69, 71, 72, 73, 76, 78, 84, 90, 92, 93, 94, 95, 96, 97, 98, 1A, 1B, 1C, 1D, 1E, 1F, 1G, 1H, 1J, 1K, 1L, 1M, 1X, 2V, 2W, 3E, 3G, 3H, 3I, 4A, 4B, 4E, 5C, 5F, 5G, 5H, 5I, 5K, 5P, 5Q, A1, A25, A50, A51, A52, A57, A58, A60, A61, A62, A63, A64, A65, A66, A67, A77, A78, A79, A80, A81, A82, A83, AJ, AM, AP, AR, ARE, ATT, AV, AW, B0, B2, B36, B37, B38, B39, B40, B5, B51, B6, B65, B9, BD, BE, BG, BH, BJ, BK, BL, BO, BR, BT, BW, BX, BZ, C1, C2, C4, C5, C6, C77, C98, CA, CH, CJ, CK, CL, CO, CQ, CR, CS, CT, CU, CV, CY, CZ, D14, D28, D35, D37, D38, D39, D40, D64, D66, D67, D7, D70, D71, D72, D75, D76, D79, D8, D9, D90, D92, D96, D97, D98, D99, DC, DE, DI, DQ, DR, DRM, DS, DU, DX, DY, E2, E3, E5, EC, EP, EV, F1, F9, FB, FD, FE, FG, FM, G7, GC, GD, GH, GK, GN, GRT, GT, GW, GY, GZ, H1, H2, HAR, HD, HE, HF, HI, HJ, HK, HL, HN, HO, HP, HS, HT, HY, IC, IF, II, IL, IM, IP, IT, JB, JG, JO, JR, K5, KD, KF, KG, KS, KTM, LC, LE, LI, LJ, LX, M0, MA, MF, MK, MQ, MT, MV, N2, NB, NBB, NC, ND, NE, NG, NH, NI, NJ, NN, NPL, NPR, NQ, NR, NRL, NTT, NV, NY, OP, OZ, P0, P3, P4, P6, P7, P8, P9, PA, PB, PE, PF, PG, PK, PL, PM, PN, PT, PU, PV, PW, PY, PZ, QD, QH, QK, QT, R4, RA, RD, RG, RK, RL, RN, RO, RS, RU, S5, S6, S7, S8, SA, SD, SE, SHT, SK, SL, SN, SO, SP, SS, SST, ST, SV, T1, T4, T5, T6, T7, T8, TA, TC, TD, TE, TF, TJ, TK, TL, TN, TQ, TR, TS, TSD, TSH, TT, TU, TV, TW, TY, UA, UD, UE, UF, UH, UM, VI, VQ, VS, W4, WH, WI, WR, WW, YL, YT, Z1, Z2, Z3, Z4, Z5, Z6, Z8 |
enum (10, 11, 13, 14, 15, 20, 21, 22, 23, 24, 25, 27, 28, 33, 34, 35, 37, 38, 40, 41, 56, 57, 58, 59, 60, 61, 74, 77, 80, 81, 85, 87, 89, 91, 1I, 2A, 2B, 2C, 2G, 2H, 2I, 2J, 2K, 2L, 2M, 2N, 2P, 2Q, 2R, 2U, 2X, 2Y, 2Z, 3B, 3C, 4C, 4G, 4H, 4K, 4L, 4M, 4N, 4O, 4P, 4Q, 4R, 4T, 4U, 4W, 4X, 5A, 5B, 5E, 5J, A10, A11, A12, A13, A14, A15, A16, A17, A18, A19, A2, A20, A21, A22, A23, A24, A26, A27, A28, A29, A3, A30, A31, A32, A33, A34, A35, A36, A37, A38, A39, A4, A40, A41, A42, A43, A44, A45, A47, A48, A49, A5, A53, A54, A55, A56, A59, A6, A68, A69, A7, A70, A71, A73, A74, A75, A76, A8, A84, A85, A86, A87, A88, A89, A9, A90, A91, A93, A94, A95, A96, A97, A98, A99, AA, AB, ACR, ACT, AD, AE, AH, AI, AK, AL, AMH, AMP, ANN, APZ, AQ, AS, ASM, ASU, ATM, AWG, AY, AZ, B1, B10, B11, B12, B13, B14, B15, B16, B17, B18, B19, B20, B21, B22, B23, B24, B25, B26, B27, B28, B29, B3, B30, B31, B32, B33, B34, B35, B4, B41, B42, B43, B44, B45, B46, B47, B48, B49, B50, B52, B53, B54, B55, B56, B57, B58, B59, B60, B61, B62, B63, B64, B66, B67, B68, B69, B7, B70, B71, B72, B73, B74, B75, B76, B77, B78, B79, B8, B80, B81, B82, B83, B84, B85, B86, B87, B88, B89, B90, B91, B92, B93, B94, B95, B96, B97, B98, B99, BAR, BB, BFT, BHP, BIL, BLD, BLL, BP, BPM, BQL, BTU, BUA, BUI, C0, C10, C11, C12, C13, C14, C15, C16, C17, C18, C19, C20, C21, C22, C23, C24, C25, C26, C27, C28, C29, C3, C30, C31, C32, C33, C34, C35, C36, C37, C38, C39, C40, C41, C42, C43, C44, C45, C46, C47, C48, C49, C50, C51, C52, C53, C54, C55, C56, C57, C58, C59, C60, C61, C62, C63, C64, C65, C66, C67, C68, C69, C7, C70, C71, C72, C73, C74, C75, C76, C78, C79, C8, C80, C81, C82, C83, C84, C85, C86, C87, C88, C89, C9, C90, C91, C92, C93, C94, C95, C96, C97, C99, CCT, CDL, CEL, CEN, CG, CGM, CKG, CLF, CLT, CMK, CMQ, CMT, CNP, CNT, COU, CTG, CTM, CTN, CUR, CWA, CWI, D03, D04, D1, D10, D11, D12, D13, D15, D16, D17, D18, D19, D2, D20, D21, D22, D23, D24, D25, D26, D27, D29, D30, D31, D32, D33, D34, D36, D41, D42, D43, D44, D45, D46, D47, D48, D49, D5, D50, D51, D52, D53, D54, D55, D56, D57, D58, D59, D6, D60, D61, D62, D63, D65, D68, D69, D73, D74, D77, D78, D80, D81, D82, D83, D85, D86, D87, D88, D89, D91, D93, D94, D95, DAA, DAD, DAY, DB, DD, DEC, DG, DJ, DLT, DMA, DMK, DMO, DMQ, DMT, DN, DPC, DPR, DPT, DRA, DRI, DRL, DT, DTN, DWT, DZN, DZP, E01, E07, E08, E09, E10, E12, E14, E15, E16, E17, E18, E19, E20, E21, E22, E23, E25, E27, E28, E30, E31, E32, E33, E34, E35, E36, E37, E38, E39, E4, E40, E41, E42, E43, E44, E45, E46, E47, E48, E49, E50, E51, E52, E53, E54, E55, E56, E57, E58, E59, E60, E61, E62, E63, E64, E65, E66, E67, E68, E69, E70, E71, E72, E73, E74, E75, E76, E77, E78, E79, E80, E81, E82, E83, E84, E85, E86, E87, E88, E89, E90, E91, E92, E93, E94, E95, E96, E97, E98, E99, EA, EB, EQ, F01, F02, F03, F04, F05, F06, F07, F08, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20, F21, F22, F23, F24, F25, F26, F27, F28, F29, F30, F31, F32, F33, F34, F35, F36, F37, F38, F39, F40, F41, F42, F43, F44, F45, F46, F47, F48, F49, F50, F51, F52, F53, F54, F55, F56, F57, F58, F59, F60, F61, F62, F63, F64, F65, F66, F67, F68, F69, F70, F71, F72, F73, F74, F75, F76, F77, F78, F79, F80, F81, F82, F83, F84, F85, F86, F87, F88, F89, F90, F91, F92, F93, F94, F95, F96, F97, F98, F99, FAH, FAR, FBM, FC, FF, FH, FIT, FL, FOT, FP, FR, FS, FTK, FTQ, G01, G04, G05, G06, G08, G09, G10, G11, G12, G13, G14, G15, G16, G17, G18, G19, G2, G20, G21, G23, G24, G25, G26, G27, G28, G29, G3, G30, G31, G32, G33, G34, G35, G36, G37, G38, G39, G40, G41, G42, G43, G44, G45, G46, G47, G48, G49, G50, G51, G52, G53, G54, G55, G56, G57, G58, G59, G60, G61, G62, G63, G64, G65, G66, G67, G68, G69, G70, G71, G72, G73, G74, G75, G76, G77, G78, G79, G80, G81, G82, G83, G84, G85, G86, G87, G88, G89, G90, G91, G92, G93, G94, G95, G96, G97, G98, G99, GB, GBQ, GDW, GE, GF, GFI, GGR, GIA, GIC, GII, GIP, GJ, GL, GLD, GLI, GLL, GM, GO, GP, GQ, GRM, GRN, GRO, GV, GWH, H03, H04, H05, H06, H07, H08, H09, H10, H11, H12, H13, H14, H15, H16, H18, H19, H20, H21, H22, H23, H24, H25, H26, H27, H28, H29, H30, H31, H32, H33, H34, H35, H36, H37, H38, H39, H40, H41, H42, H43, H44, H45, H46, H47, H48, H49, H50, H51, H52, H53, H54, H55, H56, H57, H58, H59, H60, H61, H62, H63, H64, H65, H66, H67, H68, H69, H70, H71, H72, H73, H74, H75, H76, H77, H79, H80, H81, H82, H83, H84, H85, H87, H88, H89, H90, H91, H92, H93, H94, H95, H96, H98, H99, HA, HBA, HBX, HC, HDW, HEA, HGM, HH, HIU, HKM, HLT, HM, HMQ, HMT, HPA, HTZ, HUR, IA, IE, INH, INK, INQ, ISD, IU, IV, J10, J12, J13, J14, J15, J16, J17, J18, J19, J2, J20, J21, J22, J23, J24, J25, J26, J27, J28, J29, J30, J31, J32, J33, J34, J35, J36, J38, J39, J40, J41, J42, J43, J44, J45, J46, J47, J48, J49, J50, J51, J52, J53, J54, J55, J56, J57, J58, J59, J60, J61, J62, J63, J64, J65, J66, J67, J68, J69, J70, J71, J72, J73, J74, J75, J76, J78, J79, J81, J82, J83, J84, J85, J87, J90, J91, J92, J93, J95, J96, J97, J98, J99, JE, JK, JM, JNT, JOU, JPS, JWL, K1, K10, K11, K12, K13, K14, K15, K16, K17, K18, K19, K2, K20, K21, K22, K23, K26, K27, K28, K3, K30, K31, K32, K33, K34, K35, K36, K37, K38, K39, K40, K41, K42, K43, K45, K46, K47, K48, K49, K50, K51, K52, K53, K54, K55, K58, K59, K6, K60, K61, K62, K63, K64, K65, K66, K67, K68, K69, K70, K71, K73, K74, K75, K76, K77, K78, K79, K80, K81, K82, K83, K84, K85, K86, K87, K88, K89, K90, K91, K92, K93, K94, K95, K96, K97, K98, K99, KA, KAT, KB, KBA, KCC, KDW, KEL, KGM, KGS, KHY, KHZ, KI, KIC, KIP, KJ, KJO, KL, KLK, KLX, KMA, KMH, KMK, KMQ, KMT, KNI, KNM, KNS, KNT, KO, KPA, KPH, KPO, KPP, KR, KSD, KSH, KT, KTN, KUR, KVA, KVR, KVT, KW, KWH, KWO, KWT, KX, L10, L11, L12, L13, L14, L15, L16, L17, L18, L19, L2, L20, L21, L23, L24, L25, L26, L27, L28, L29, L30, L31, L32, L33, L34, L35, L36, L37, L38, L39, L40, L41, L42, L43, L44, L45, L46, L47, L48, L49, L50, L51, L52, L53, L54, L55, L56, L57, L58, L59, L60, L63, L64, L65, L66, L67, L68, L69, L70, L71, L72, L73, L74, L75, L76, L77, L78, L79, L80, L81, L82, L83, L84, L85, L86, L87, L88, L89, L90, L91, L92, L93, L94, L95, L96, L98, L99, LA, LAC, LBR, LBT, LD, LEF, LF, LH, LK, LM, LN, LO, LP, LPA, LR, LS, LTN, LTR, LUB, LUM, LUX, LY, M1, M10, M11, M12, M13, M14, M15, M16, M17, M18, M19, M20, M21, M22, M23, M24, M25, M26, M27, M29, M30, M31, M32, M33, M34, M35, M36, M37, M38, M39, M4, M40, M41, M42, M43, M44, M45, M46, M47, M48, M49, M5, M50, M51, M52, M53, M55, M56, M57, M58, M59, M60, M61, M62, M63, M64, M65, M66, M67, M68, M69, M7, M70, M71, M72, M73, M74, M75, M76, M77, M78, M79, M80, M81, M82, M83, M84, M85, M86, M87, M88, M89, M9, M90, M91, M92, M93, M94, M95, M96, M97, M98, M99, MAH, MAL, MAM, MAR, MAW, MBE, MBF, MBR, MC, MCU, MD, MGM, MHZ, MIK, MIL, MIN, MIO, MIU, MLD, MLT, MMK, MMQ, MMT, MND, MON, MPA, MQH, MQS, MSK, MTK, MTQ, MTR, MTS, MVA, MWH, N1, N10, N11, N12, N13, N14, N15, N16, N17, N18, N19, N20, N21, N22, N23, N24, N25, N26, N27, N28, N29, N3, N30, N31, N32, N33, N34, N35, N36, N37, N38, N39, N40, N41, N42, N43, N44, N45, N46, N47, N48, N49, N50, N51, N52, N53, N54, N55, N56, N57, N58, N59, N60, N61, N62, N63, N64, N65, N66, N67, N68, N69, N70, N71, N72, N73, N74, N75, N76, N77, N78, N79, N80, N81, N82, N83, N84, N85, N86, N87, N88, N89, N90, N91, N92, N93, N94, N95, N96, N97, N98, N99, NA, NAR, NCL, NEW, NF, NIL, NIU, NL, NM3, NMI, NMP, NPT, NT, NU, NX, OA, ODE, OHM, ON, ONZ, OPM, OT, OZA, OZI, P1, P10, P11, P12, P13, P14, P15, P16, P17, P18, P19, P2, P20, P21, P22, P23, P24, P25, P26, P27, P28, P29, P30, P31, P32, P33, P34, P35, P36, P37, P38, P39, P40, P41, P42, P43, P44, P45, P46, P47, P48, P49, P5, P50, P51, P52, P53, P54, P55, P56, P57, P58, P59, P60, P61, P62, P63, P64, P65, P66, P67, P68, P69, P70, P71, P72, P73, P74, P75, P76, P77, P78, P79, P80, P81, P82, P83, P84, P85, P86, P87, P88, P89, P90, P91, P92, P93, P94, P95, P96, P97, P98, P99, PAL, PD, PFL, PGL, PI, PLA, PO, PQ, PR, PS, PTD, PTI, PTL, PTN, Q10, Q11, Q12, Q13, Q14, Q15, Q16, Q17, Q18, Q19, Q20, Q21, Q22, Q23, Q24, Q25, Q26, Q27, Q28, Q29, Q30, Q31, Q32, Q33, Q34, Q35, Q36, Q37, Q38, Q39, Q40, Q3, QA, QAN, QB, QR, QTD, QTI, QTL, QTR, R1, R9, RH, RM, ROM, RP, RPM, RPS, RT, S3, S4, SAN, SCO, SCR, SEC, SET, SG, SIE, SM3, SMI, SQ, SQR, SR, STC, STI, STK, STL, STN, STW, SW, SX, SYR, T0, T3, TAH, TAN, TI, TIC, TIP, TKM, TMS, TNE, TP, TPI, TPR, TQD, TRL, TST, TTS, U1, U2, UB, UC, VA, VLT, VP, W2, WA, WB, WCD, WE, WEB, WEE, WG, WHR, WM, WSD, WTT, X1, YDK, YDQ, YRD, Z11, ZP, ZZ, X1A, X1B, X1D, X1F, X1G, X1W, X2C, X3A, X3H, X43, X44, X4A, X4B, X4C, X4D, X4F, X4G, X4H, X5H, X5L, X5M, X6H, X6P, X7A, X7B, X8A, X8B, X8C, XAA, XAB, XAC, XAD, XAE, XAF, XAG, XAH, XAI, XAJ, XAL, XAM, XAP, XAT, XAV, XB4, XBA, XBB, XBC, XBD, XBE, XBF, XBG, XBH, XBI, XBJ, XBK, XBL, XBM, XBN, XBO, XBP, XBQ, XBR, XBS, XBT, XBU, XBV, XBW, XBX, XBY, XBZ, XCA, XCB, XCC, XCD, XCE, XCF, XCG, XCH, XCI, XCJ, XCK, XCL, XCM, XCN, XCO, XCP, XCQ, XCR, XCS, XCT, XCU, XCV, XCW, XCX, XCY, XCZ, XDA, XDB, XDC, XDG, XDH, XDI, XDJ, XDK, XDL, XDM, XDN, XDP, XDR, XDS, XDT, XDU, XDV, XDW, XDX, XDY, XEC, XED, XEE, XEF, XEG, XEH, XEI, XEN, XFB, XFC, XFD, XFE, XFI, XFL, XFO, XFP, XFR, XFT, XFW, XFX, XGB, XGI, XGL, XGR, XGU, XGY, XGZ, XHA, XHB, XHC, XHG, XHN, XHR, XIA, XIB, XIC, XID, XIE, XIF, XIG, XIH, XIK, XIL, XIN, XIZ, XJB, XJC, XJG, XJR, XJT, XJY, XKG, XKI, XLE, XLG, XLT, XLU, XLV, XLZ, XMA, XMB, XMC, XME, XMR, XMS, XMT, XMW, XMX, XNA, XNE, XNF, XNG, XNS, XNT, XNU, XNV, XOA, XOB, XOC, XOD, XOE, XOF, XOK, XOT, XOU, XP2, XPA, XPB, XPC, XPD, XPE, XPF, XPG, XPH, XPI, XPJ, XPK, XPL, XPN, XPO, XPP, XPR, XPT, XPU, XPV, XPX, XPY, XPZ, XQA, XQB, XQC, XQD, XQF, XQG, XQH, XQJ, XQK, XQL, XQM, XQN, XQP, XQQ, XQR, XQS, XRD, XRG, XRJ, XRK, XRL, XRO, XRT, XRZ, XSA, XSB, XSC, XSD, XSE, XSH, XSI, XSK, XSL, XSM, XSO, XSP, XSS, XST, XSU, XSV, XSW, XSY, XSZ, XT1, XTB, XTC, XTD, XTE, XTG, XTI, XTK, XTL, XTN, XTO, XTR, XTS, XTT, XTU, XTV, XTW, XTY, XTZ, XUC, XUN, XVA, XVG, XVI, XVK, XVL, XVO, XVP, XVQ, XVN, XVR, XVS, XVY, XWA, XWB, XWC, XWD, XWF, XWG, XWH, XWJ, XWK, XWL, XWM, XWN, XWP, XWQ, XWR, XWS, XWT, XWU, XWV, XWW, XWX, XWY, XWZ, XXA, XXB, XXC, XXD, XXF, XXG, XXH, XXJ, XXK, XYA, XYB, XYC, XYD, XYF, XYG, XYH, XYJ, XYK, XYL, XYM, XYN, XYP, XYQ, XYR, XYS, XYT, XYV, XYW, XYX, XYY, XYZ, XZA, XZB, XZC, XZD, XZF, XZG, XZH, XZJ, XZK, XZL, XZM, XZN, XZP, XZQ, XZR, XZS, XZT, XZU, XZV, XZW, XZX, XZY, XZZ, 04, 05, 08, 16, 17, 18, 19, 26, 29, 30, 31, 32, 36, 43, 44, 45, 46, 47, 48, 53, 54, 62, 63, 64, 66, 69, 71, 72, 73, 76, 78, 84, 90, 92, 93, 94, 95, 96, 97, 98, 1A, 1B, 1C, 1D, 1E, 1F, 1G, 1H, 1J, 1K, 1L, 1M, 1X, 2V, 2W, 3E, 3G, 3H, 3I, 4A, 4B, 4E, 5C, 5F, 5G, 5H, 5I, 5K, 5P, 5Q, A1, A25, A50, A51, A52, A57, A58, A60, A61, A62, A63, A64, A65, A66, A67, A77, A78, A79, A80, A81, A82, A83, AJ, AM, AP, AR, ARE, ATT, AV, AW, B0, B2, B36, B37, B38, B39, B40, B5, B51, B6, B65, B9, BD, BE, BG, BH, BJ, BK, BL, BO, BR, BT, BW, BX, BZ, C1, C2, C4, C5, C6, C77, C98, CA, CH, CJ, CK, CL, CO, CQ, CR, CS, CT, CU, CV, CY, CZ, D14, D28, D35, D37, D38, D39, D40, D64, D66, D67, D7, D70, D71, D72, D75, D76, D79, D8, D9, D90, D92, D96, D97, D98, D99, DC, DE, DI, DQ, DR, DRM, DS, DU, DX, DY, E2, E3, E5, EC, EP, EV, F1, F9, FB, FD, FE, FG, FM, G7, GC, GD, GH, GK, GN, GRT, GT, GW, GY, GZ, H1, H2, HAR, HD, HE, HF, HI, HJ, HK, HL, HN, HO, HP, HS, HT, HY, IC, IF, II, IL, IM, IP, IT, JB, JG, JO, JR, K5, KD, KF, KG, KS, KTM, LC, LE, LI, LJ, LX, M0, MA, MF, MK, MQ, MT, MV, N2, NB, NBB, NC, ND, NE, NG, NH, NI, NJ, NN, NPL, NPR, NQ, NR, NRL, NTT, NV, NY, OP, OZ, P0, P3, P4, P6, P7, P8, P9, PA, PB, PE, PF, PG, PK, PL, PM, PN, PT, PU, PV, PW, PY, PZ, QD, QH, QK, QT, R4, RA, RD, RG, RK, RL, RN, RO, RS, RU, S5, S6, S7, S8, SA, SD, SE, SHT, SK, SL, SN, SO, SP, SS, SST, ST, SV, T1, T4, T5, T6, T7, T8, TA, TC, TD, TE, TF, TJ, TK, TL, TN, TQ, TR, TS, TSD, TSH, TT, TU, TV, TW, TY, UA, UD, UE, UF, UH, UM, VI, VQ, VS, W4, WH, WI, WR, WW, YL, YT, Z1, Z2, Z3, Z4, Z5, Z6, Z8) |
references |
An array of references to other documents or codes. Note that many syntaxes do not support multiple references of the same type in which case they will be concatenated with ','. Also, not all syntaxes support all documentTypes. |
< Reference > array |
sellersItemIdentification |
The ID the seller assigned to this item. |
string |
standardItemIdentification |
Standardized ID for the item. |
string |
standardItemIdentificationSchemeAgencyId |
The scheme agency for the standardized ID for the item. |
string |
standardItemIdentificationSchemeId |
The scheme for the standardized ID for the item. |
string |
tax |
Deprecated. The tax for this invoice line. In the future, the taxes_duties_fees array will become the standard way of providing this information and you are invited to use that. |
|
taxesDutiesFees |
An array of taxes, duties and fees for this invoice line. Multiple Tax items is allowed only for IN (India) taxes. All other countries can only have a single Tax item in this array. |
< Tax > array |
6.2.34. InvoiceRecipient
The different ways to send the invoice to the recipient. The publicIdentifiers are used to send via the Peppol network, if the recipient is not registered on the Peppol network, the invoice will be sent to the email addresses in the emails property. This property is only mandatory when sending the invoice data using the Invoice property, not when sending using the InvoiceData property, in which case this information will be extracted from the InvoiceData object. If you do specify an InvoiceRecipient object and an InvoiceData object, the data from the two will be merged.
Name | Description | Schema |
---|---|---|
emails |
The email addresses the invoice should be sent to if none of the other identifiers can be used |
< string (email) > array |
publicIdentifiers |
The public identifiers for this invoice recipient. These are the identifiers used on the Peppol network. Note that when sending invoices with VAT (or with a taxExemptReason), a receiver VAT number is required and that should be one of these publicIdentifiers. |
6.2.35. InvoiceRecipientPreflight
Identifies the invoice recipient to preflight
Name | Description | Schema |
---|---|---|
publicIdentifiers |
The public identifiers for this invoice recipient. |
6.2.36. InvoiceResponseClarification
A clarification for why a received invoice was rejected (RE) or under query (UQ) and what action to take.
Name | Description | Schema |
---|---|---|
clarification |
A textual description of the clarification |
string |
clarificationCode |
The code for the clarification. For details see https://docs.peppol.eu/poacc/upgrade-3/codelist/OPStatusReason/ and https://docs.peppol.eu/poacc/upgrade-3/codelist/OPStatusAction/ |
enum (REF, LEG, REC, QUA, DEL, PRI, QTY, ITM, PAY, UNR, FIN, OTH, PIN, NIN, CNF, CNP, CNA) |
clarificationCodeType |
The type of the clarification. |
enum (OPStatusReason, OPStatusAction) |
6.2.37. InvoiceSubmission
DEPRECATED. The invoice you want Storecove to process, with some meta-data.
Name | Description | Schema |
---|---|---|
attachments |
An array of attachments. You may provide up to 10 attchments, but the total size must not exceed 10MB after Base64 encoding. |
< Attachment > array |
createPrimaryImage |
Whether or not to create a primary image (PDF) if one is not provided. Note that although this property is not yet deprecated, using value 'true' is discouraged, since the invoice data itself is leading, not the image, and including an image may lead to confusion. Peppol no longer allows including pirmary images. |
boolean |
document |
DEPRECATED. Use attachments. |
string |
documentUrl |
DEPRECATED. Use attachments. |
string (uri) |
idempotencyGuid |
A guid that you generated for this InvoiceSubmission to achieve idempotency. If you submit multiple documents with the same idempotencyGuid, only the first one will be processed. |
string |
invoice |
||
invoiceData |
||
invoiceRecipient |
DEPRECATED. Use the routing and accountingCustomerParty.publicIdentifiers properties. |
|
legalEntityId |
The id of the LegalEntity this invoice should be sent for. |
integer |
legalSupplierId |
DEPRECATED. Use legalEntityId |
integer |
mode |
DEPRECATED. |
enum (direct) |
routing |
Specifies where the invoice is to be sent. Can be electronic identifiers or email addresses. |
|
supplierId |
DEPRECATED. |
integer |
6.2.38. InvoiceSubmissionActionEvidence
Name | Description | Schema |
---|---|---|
receiver_response |
The response the receiver sent. |
string |
transmission_datetime |
The DateTime of the transmission, as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z. |
string |
transmission_result |
The result of this transmission. |
enum (unknown, accepted, rejected, send_error, internal_error) |
transmission_type |
How the document was transmitted. |
enum (email, edi, as2, peppol, sandbox) |
transmitted_document |
The document that was transmitted. |
string |
6.2.39. InvoiceSubmissionEvidence
Name | Description | Schema |
---|---|---|
actions |
An array of actions taken to deliver the document. |
< InvoiceSubmissionActionEvidence > array |
guid |
The guid for the InvoiceSubmission. |
string |
status |
The overall status for this InvoiceSubmission. |
string |
6.2.40. InvoiceSubmissionResult
The result of an invoice submission
Name | Description | Schema |
---|---|---|
guid |
A (V4) GUID for the invoice submission |
string |
6.2.41. LegalEntity
Polymorphism : Composition
Name | Description | Schema |
---|---|---|
advertisements |
A list of document types to advertise. Use if this LegalEntity needs the ability to receive more than only invoice documents. |
< enum (invoice, invoice_response) > array |
city |
The city. |
string |
country |
||
county |
County, if applicable |
string |
id |
The Storecove assigned id for the LegalEntity. |
integer (int64) |
line1 |
The first address line. |
string |
line2 |
The second address line, if applicable |
string |
party_name |
The name of the company. |
string |
peppol_identifiers |
< PeppolIdentifier > array |
|
public |
Whether or not this LegalEntity is public. Public means it will be listed in the PEPPOL directory at https://directory.peppol.eu/ which is normally what you want. If you have a good reason to not want the LegalEntity listed, provide false. This property is ignored when for country SG, where it is always true. |
boolean |
rea |
The REA details for the LegalEntity. Only applies to IT LegalEntities. |
|
smart_inbox |
DEPRECATED. Use the ReceivedDocuments endpoint. The email address of the Smart Inbox for this LegalEntity. |
string |
tenant_id |
The id of the tenant, to be used in case of multi-tenant solutions. This property will included in webhook events. |
string |
third_party_password |
The password to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN LegalEntity. |
string |
third_party_username |
The username to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN LegalEntity. |
string |
zip |
The zipcode. |
string |
6.2.42. LegalEntityCreate
Name | Description | Schema |
---|---|---|
advertisements |
A list of document types to advertise. Use if this LegalEntity needs the ability to receive more than only invoice documents. |
< enum (invoice, invoice_response) > array |
city |
The city. |
string |
country |
||
county |
County, if applicable |
string |
line1 |
The first address line. |
string |
line2 |
The second address line, if applicable |
string |
party_name |
The name of the company. |
string |
public |
Whether or not this LegalEntity is public. Public means it will be entered into the PEPPOL directory at https://directory.peppol.eu/ |
boolean |
rea |
The REA details for the LegalEntity. Only applies to IT LegalEntities. |
|
tenant_id |
The id of the tenant, to be used in case of single-tenant solutions that share webhook URLs. This property will included in webhook events. |
string |
third_party_password |
The password to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN LegalEntity. |
string |
third_party_username |
The username to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN LegalEntity. |
string |
zip |
The zipcode. |
string |
6.2.43. LegalEntityUpdate
Name | Description | Schema |
---|---|---|
advertisements |
A list of document types to advertise. Use if this LegalEntity needs the ability to receive more than only invoice documents. |
< enum (invoice, invoice_response) > array |
city |
The city. |
string |
country |
||
county |
County, if applicable |
string |
id |
The Storecove assigned id for the LegalEntity. |
integer (int64) |
line1 |
The first address line. |
string |
line2 |
The second address line, if applicable |
string |
party_name |
The name of the company. |
string |
public |
Whether or not this LegalEntity is public. Public means it will be listed in the PEPPOL directory at https://directory.peppol.eu/ which is normally what you want. If you have a good reason to not want the LegalEntity listed, provide false. This property is ignored when for country SG, where it is always true. |
boolean |
rea |
The REA details for the LegalEntity. Only applies to IT LegalEntities. |
|
smart_inbox |
DEPRECATED. Use the ReceivedDocuments endpoint. The email address of the Smart Inbox for this LegalEntity. |
string |
tenant_id |
The id of the tenant, to be used in case of multi-tenant solutions. This property will included in webhook events. |
string |
third_party_password |
The password to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN LegalEntity. |
string |
third_party_username |
The username to use to authenticate to a system through which to send the document, or to obtain tax authority approval to send it. This field is currently relevant only for India and mandatory when creating an IN LegalEntity. |
string |
zip |
The zipcode. |
string |
6.2.44. Party
A party that can receive or send invoices
Name | Description | Schema |
---|---|---|
address |
||
companyName |
The name of the company receiving the invoice |
string |
contact |
6.2.45. PaymentMeans
A PaymentMeans is a way to pay the invoice.
Name | Description | Schema |
---|---|---|
account |
The account number. |
string |
branche_code |
The bank branch code. Not required for IBAN numbers. Often referred to as Swift or Bic code. |
string |
code |
How the invoice has been / will be paid. The code determines which type of PaymentMeans is used and which fields are mandatory.
|
enum (credit_transfer, direct_debit, card, bank_card, credit_card, online_payment_service, cash, bank_cheque, cashiers_cheque, standing_agreement, aunz_npp, aunz_npp_payid, aunz_npp_payto, aunz_bpay, aunz_postbillpay, aunz_uri, se_bankgiro, se_plusgiro, sg_giro, sg_card, sg_paynow, it_mav, it_pagopa, undefined) |
holder |
The name of the account holder. |
string |
mandate |
The direct debit mandate code. |
string |
network |
The name of the card network, e.g. VISA. |
string |
paymentId |
The payment id that you will use to match the payment against the invoice. |
string |
6.2.46. PeppolIdentifier
Name | Description | Schema |
---|---|---|
identifier |
The identifier. |
string |
scheme |
The scheme of the identifier. See Receiver Identifiers for a list. |
string |
superscheme |
The superscheme of the identifier. Should always be "iso6523-actorid-upis". |
string |
6.2.47. PeppolIdentifierCreate
Name | Description | Schema |
---|---|---|
corppass |
CorpPass details, used to create SG:UEN (numerical code: 0195) identifiers. For details, see [_sg_singapore]. |
|
identifier |
The identifier. |
string |
scheme |
The scheme of the identifier. See Receiver Identifiers for a list. |
string |
superscheme |
The superscheme of the identifier. Should always be "iso6523-actorid-upis". |
string |
6.2.48. PreflightInvoiceRecipientResult
The result of preflighting an invoice recipient
Name | Description | Schema |
---|---|---|
code |
The result code of the preflight request |
enum (ok, nok) |
6.2.49. PublicIdentifier
A public identifier for this customer.
Name | Description | Schema |
---|---|---|
id |
The actual identifier. |
string |
scheme |
The scheme of the identifier. See Receiver Identifiers for a list. |
string |
6.2.50. PublicIdentifiers
A list of public identifiers that uniquely identify this customer.
Type : < PublicIdentifier > array
6.2.51. PurchaseInvoice
Name | Description | Schema |
---|---|---|
accounting |
DEPRECATED - The accounting details for the invoice. Will only evern contain null properties. |
|
accounting_cost |
The accounting cost code. |
string |
allowance_charge |
DEPRECATED - Use the allowance_charges array. |
number |
allowance_charges |
< PurchaseInvoiceAllowanceCharge > array |
|
amount_including_vat |
DEPRECATED - Use amount_including_tax. |
number |
attachments |
< PurchaseInvoiceAttachment > array |
|
billing_reference |
Reference to the previous invoice this invoice relates to. |
string |
buyer_reference |
Reference provided by the buyer. Used for routing. |
string |
contract_document_reference |
Reference to the contract. |
string |
delivery |
The details of the delivery associated with this invoice. |
|
document |
DEPRECATED. Use the new atatchments array. |
string |
document_currency_code |
The ISO 4217 currency for the invoice. |
string |
document_totals |
The total amounts for this document. |
|
document_type |
The type of document. Only "invoice" for now. |
enum (invoice) |
due_date |
The date the invoice must be payed by. Format "YYYY-MM-DD". |
string |
external_key |
Deprecated. Used for accountants. The id you specified for the organization. |
string |
external_user_id |
Deprecated. Used for the embedded portal retrieval service. The external_user_id you provided when the ShopAccount was created. |
string |
guid |
The GUID of the invoice |
string (uuid) |
invoice_lines |
< PurchaseInvoiceInvoiceLine > array |
|
invoice_number |
The invoicenumber. |
string |
invoice_type |
The type of invoice. |
enum (invoice, creditnote, correctioninvoice) |
issue_date |
The date the invoice was issued. Format "YYYY-MM-DD". |
string |
legal_entity_id |
The id of the LegalEntity the invoice was received for. |
integer (int64) |
note |
The invoice level note. |
string |
order_reference |
Reference to the order. Used for matching the invoice to an order. |
string |
payment_means |
DEPRECATED - Use the new payment_means_array array. |
|
payment_means_array |
The different payment means that can be used to pay the invoice. |
< PurchaseInvoicePaymentMeans > array |
payment_means_payment_id |
DEPRECATED - use the payment_id property in the payment_means_array |
string |
payment_terms_note |
A textual description of the payment terms. |
string |
period_end |
The end date of the period this invoice relates to. Format "YYYY-MM-DD". |
string |
period_start |
The start date of the period this invoice relates to. Format "YYYY-MM-DD". |
string |
project_reference |
Reference to the project. |
string |
sender |
The organzation that sent the invoice. |
|
source |
The source the invoice was received from. |
enum (peppol, script, supplier, email) |
sub_type |
The subtype of document. |
enum (invoice, creditnote, correctioninvoice) |
system_generated_primary_image |
Whether or not the document image (PDF) was generated by Storecove. If true, it means the invoice was received without any attachments and Storecove generated one for you. If false, the invoice will contain at least one attachment, which was received from the invoice sender. |
boolean |
tax_point_date |
The date the invoice was issued for tax purposes. In most countries MUST match the issue_date. Format "YYYY-MM-DD". |
string |
tax_subtotals |
< PurchaseInvoiceTaxSubtotal > array |
|
tax_system |
The tax system of the invoice. Either tax_line_percentages or tax_line_amounts. The first tax system means the invoice lines contain only the tax percentages and the tax amounts are included only in the tax subtotals at the invoice level and so are only calculated at the invoice level. The tax system tax_line_amounts means that in addition to the percentage, each invoice line also contains the tax amount. The tax subtotals at the invoice level are calculated as the sum of the tax of the invoice lines. The distinction between the two tax systems has has implications for rounding. |
string |
vat_reverse_charge |
DEPRECATED - This is now part of each invoice line. |
boolean |
PurchaseInvoice Delivery
Name | Description | Schema |
---|---|---|
actual_date |
The actual delivery date. |
string |
location |
The location the goods/services were delivered to. |
|
party |
The party the goods/services were delivered to. |
Location
Name | Description | Schema |
---|---|---|
building_number |
The building number. Used in SA. |
string |
city |
Address city. |
string |
country |
Address country. |
string |
county |
Address county. |
string |
department |
Department name. |
string |
id |
The id of the location. |
string |
line1 |
Address line 1. |
string |
line2 |
Address line 2. |
string |
neighborhood |
The neighborhood. Used in SA. |
string |
scheme_id |
The scheme id for the id of the location. |
string |
secondary_number |
The secondary number. Used in SA. |
string |
zip |
Address zip code |
string |
PurchaseInvoice Party
Name | Description | Schema |
---|---|---|
name |
The name of the deliveyr party. |
string |
Payment Means - DEPRECATED
Name | Description | Schema |
---|---|---|
iban |
The IBAN to which to transfer. |
string |
id |
An id to mention in the transfer. |
string |
6.2.52. PurchaseInvoiceAccountingDetails
Name | Description | Schema |
---|---|---|
code |
The the code of the general ledger account. |
string |
list |
The name of the list for the code, e.g. "RGS". |
string |
list_version |
The version of the list for the code, e.g. "1.1". |
string |
name |
A textual description of the code. |
string |
6.2.53. PurchaseInvoiceAllowanceCharge
Name | Description | Schema |
---|---|---|
amount_excluding_tax |
The amount excluding tax. |
number |
amount_excluding_vat |
DEPRECATED - use amount_excluding_tax. |
string |
reason |
The reason for the allowance or charge. |
string |
tax |
||
vat |
DEPRECATED. |
6.2.54. PurchaseInvoiceAttachment
Name | Description | Schema |
---|---|---|
content_type |
The attachment content type (mime type). |
string |
document |
The Base64 encoded document attachment. |
string |
6.2.55. PurchaseInvoiceDocumentTotals
Name | Description | Schema |
---|---|---|
payable |
The total invoice amount payable including tax. |
number |
prepaid |
The amount already paid. |
number |
rounding |
The difference between the payable amount and the total invoice amount including tax. |
number |
total |
The total invoice amount, including tax. This is equal to the sum of the invoice_lines (amount_excluding_tax + tax.amount) and the allowances and charges. |
number |
6.2.56. PurchaseInvoiceInvoiceLine
Name | Description | Schema |
---|---|---|
accounting |
The accounting details for the invoice line. |
|
allowance_charge |
DEPRECATED - use allowance_charges. |
number |
allowance_charge_array |
Deprecated. |
|
allowance_charges |
||
amount_excluding_tax |
The amount excluding Tax. This is equal to quantity x price_amount + ∑ allowance_charges. |
number |
amount_excluding_vat |
DEPRECATED - use amount_excluding_tax The amount excluding VAT. |
number |
description |
The description for the invoice line. |
string |
name |
A short name for the invoice line. |
string |
period_end |
The end date of the period this invoice line relates to. Format "YYYY-MM-DD". |
string |
period_start |
The start date of the period this invoice line relates to. Format "YYYY-MM-DD". |
string |
price |
The price for one item, excluding VAT. |
|
tax |
The tax details for the invoice line. |
|
units |
The number of items |
|
vat |
The VAT details for the invoice line. |
VAT Details
Name | Description | Schema |
---|---|---|
amount |
The amount of VAT for the invoice line. |
number |
country |
The ISO 3166 country of the VAT for the invoice line. |
string |
percentage |
The percentage of VAT for the invoice line. |
number |
6.2.57. PurchaseInvoiceInvoiceLineAllowanceCharge
Name | Description | Schema |
---|---|---|
amount |
The amount of the allowance or charge. |
number |
6.2.58. PurchaseInvoiceInvoiceLineItem
Name | Description | Schema |
---|---|---|
quantity |
The quantity of the item. Can have up to digits. |
number |
unit_code |
The unit code of the quantity. |
string |
6.2.59. PurchaseInvoiceInvoiceLinePrice
Name | Description | Schema |
---|---|---|
base_quantity |
The number of items the price is for. Can have up to digits. |
number |
price_amount |
The price for one item, excluding VAT. Can have up to digits. |
number |
6.2.60. PurchaseInvoicePaymentMeans
Name | Description | Schema |
---|---|---|
account |
The account number to which to transfer. |
string |
branch_code |
The code identifying the bank branch. May contain a BIC/SWIFT or something appropriate for the payment method, such as "NPP" for type NppPaymentMean. |
string |
holder |
The account holder name to which to transfer. |
string |
mandate |
The mandate, used only for type DirectDebitPaymentMean. |
string |
network |
The payment network. Used only for type CardPaymentType. |
string |
payment_id |
The payment id to use when making the payment. The invoice sender will use this to match the received funds to the invoice. |
string |
type |
The type of payment means. Which type are returned is determined by the &pmv= query parameter. For details see documentation for that field. |
enum (BankPaymentMean, DirectDebitPaymentMean, CardPaymentMean, NppPaymentMean, SeBankGiroPaymentMean, SePlusgiroPaymentMean, SgCardPaymentMean, SgGiroPaymentMean, SgPaynowPaymentMean, CreditTransferPaymentMean, CreditCardPaymentMean, SeBankgiroPaymentMean, AunzNppPayidPaymentMean, OnlinePaymentServicePaymentMean, StandingAgreementPaymentMean, AunzNppPaytoPaymentMean, AunzBpayPaymentMean, AunzPostbillpayPaymentMean, AunzUriPaymentMean) |
6.2.61. PurchaseInvoiceSender
Name | Description | Schema |
---|---|---|
billing_contact |
The billing contact for the invoice. |
|
building_number |
The building number. Used in SA. |
string |
city |
The city. |
string |
country |
The country. |
string |
county |
The county. |
string |
department |
The department who sent the invoice. |
string |
identifiers |
The array of identifiers for this sender. |
< PeppolIdentifier > array |
legal_name |
The legal name of the party who sent the invoice. |
string |
line1 |
The address |
string |
line2 |
The address, line 2 |
string |
neighborhood |
The neighborhood. Used in SA. |
string |
party_name |
The party who sent the invoice. |
string |
peppol_identifiers |
DEPRECATED - Use the identifiers array. |
|
secondary_number |
The secondary number. Used in SA. |
string |
zip |
The zip code. |
string |
6.2.62. PurchaseInvoiceSenderBillingContact
Name | Description | Schema |
---|---|---|
email |
The email of the billing contact. |
string |
first_name |
The first name of the billing contact. |
string |
last_name |
The last name of the billing contact. |
string |
6.2.63. PurchaseInvoiceTax
Name | Description | Schema |
---|---|---|
tax |
The tax element. |
PurchaseInvoiceTaxElement
Name | Description | Schema |
---|---|---|
amount |
The tax amount. |
number |
category |
The tax category. |
enum (standard, zero_rated, reverse_charge, intra_community, exempt, export, outside_scope, regulation33_exempt, nonregulation33_exempt, deemed_supply, srca_s, srca_c, not_registered, igst, cgst, sgst, cess, state_cess) |
category_code |
Deprecated. The tax category code. |
string |
country |
The tax country. |
string |
percentage |
The tax percentage. |
number |
type |
The tax type. |
enum (VAT, GST) |
6.2.64. PurchaseInvoiceTaxSubtotal
Name | Description | Schema |
---|---|---|
amount_excluding_tax |
The amount excluding tax. |
number |
amount_excluding_vat |
DEPRECATED - use amount_excluding_tax. |
string |
tax |
||
vat |
DEPRECATED. |
6.2.65. PurchaseInvoiceUbl
Name | Description | Schema |
---|---|---|
external_key |
Used for accountants. The id you specified for the organization. |
string |
external_user_id |
Used for the embedded portal retrieval service. The external_user_id you provided when the ShopAccount was created. |
string |
guid |
The GUID of the invoice |
string (uuid) |
legal_entity_id |
The id of the LegalEntity the invoice was received for. |
integer (int64) |
system_generated_primary_image |
Whether or not the document image (PDF) was generated by Storecove. If true, it means the invoice was received without any attachments and Storecove generated one for you. If false, the invoice will contain at least one attachment, which was received from the invoice sender. |
boolean |
tax_system |
The tax system of the invoice. Either tax_line_percentages or tax_line_amounts. The first tax system means the invoice lines contain only the tax percentages and the tax amounts are included only in the tax subtotals at the invoice level and so are only calculated at the invoice level. The tax system tax_line_amounts means that in addition to the percentage, each invoice line also contains the tax amount. The tax subtotals at the invoice level are calculated as the sum of the tax of the invoice lines. The distinction between the two tax systems has has implications for rounding. |
string |
ubl |
The Base64 encoded UBL invoice. |
string |
6.2.66. PurchaseInvoiceVat
DEPRECATED - Use tax.
Name | Description | Schema |
---|---|---|
amount |
The VAT country. |
string |
percentage |
The VAT percentage. |
string |
6.2.67. RawDocumentData
A document to send, in base64 encoded format.
Name | Description | Schema |
---|---|---|
document |
The base64 encoded version of the document. |
string |
documentTypeId |
The document type id of the document. Required when parse == false. |
string |
parse |
|
boolean |
parseStrategy |
How to parse the document. Only needed when parse == true. |
enum (ubl, cii, idoc) |
processId |
The process id of the document. Required when parse == false. |
string |
6.2.68. Rea
Name | Description | Schema |
---|---|---|
capital |
The captial for the company. |
number |
identifier |
The identifier. |
string |
liquidation_status |
The liquidation status of the company. |
enum (LN, LS) |
partners |
The number of partners. |
enum (SU, SM) |
province |
The provincia of the ufficio that issued the identifier. |
enum (AG, AL, AN, AO, AQ, AR, AP, AT, AV, BA, BT, BL, BN, BG, BI, BO, BZ, BS, BR, CA, CL, CB, CI, CE, CT, CZ, CH, CO, CS, CR, KR, CN, EN, FM, FE, FI, FG, FC, FR, GE, GO, GR, IM, IS, SP, LT, LE, LC, LI, LO, LU, MC, MN, MS, MT, VS, ME, MI, MO, MB, NA, NO, NU, OG, OT, OR, PD, PA, PR, PV, PG, PU, PE, PC, PI, PT, PN, PZ, PO, RG, RA, RC, RE, RI, RN, RO, SA, SS, SV, SI, SR, SO, TA, TE, TR, TO, TP, TN, TV, TS, UD, VA, VE, VB, VC, VR, VV, VI, VT) |
6.2.69. ReceivedDocument
Name | Description | Schema |
---|---|---|
guid |
The GUID of the received document |
string (uuid) |
6.2.70. ReceivedDocumentCreate
Name | Description | Schema |
---|---|---|
document |
The Base64 encoded document. |
string |
parseStrategy |
The attachment content type (mime type). |
enum (rfc822) |
6.2.71. Reference
A reference to a document.
Name | Description | Schema |
---|---|---|
documentId |
The id of the referenced document. |
string |
documentType |
The type of the referenced document. The following types are supported:
|
enum (purchase_order, billing, sales_order, contract, despatch_advice, originator, receipt, project, item_classification_code, item_commodity_code, line_document_reference, line_standard_item_identification, line_sellers_item_identification, line_buyers_item_identification) |
issueDate |
The issue date of the referenced document. |
string |
lineId |
The line in the referenced document. |
string |
6.2.72. Routing
The different ways to send the invoice to the recipient. The publicIdentifiers are used to send via the Peppol network, if the recipient is not registered on the Peppol network, the invoice will be sent to the email addresses in the emails property. This property is only mandatory when sending the invoice data using the Invoice property, not when sending using the InvoiceData property, in which case this information will be extracted from the InvoiceData object. If you do specify an InvoiceRecipient object and an InvoiceData object, the data from the two will be merged.
Name | Description | Schema |
---|---|---|
eIdentifiers |
The electronic identifiers for this invoice recipient. These are the identifiers used on the Peppol network. |
|
emails |
The email addresses the invoice should be sent to if none of the other identifiers can be used |
< string (email) > array |
6.2.73. RoutingIdentifier
An electronic routing identifier.
Name | Description | Schema |
---|---|---|
id |
The actual identifier. |
string |
scheme |
The scheme of the identifier. See Receiver Identifiers for a list. |
string |
6.2.74. SendableDocument
The document to send.
Name | Description | Schema |
---|---|---|
documentType |
The type of document to be sent. |
enum (invoice, invoice_response) |
invoice |
||
invoiceResponse |
||
rawDocumentData |
6.2.76. Tax
Name | Description | Schema |
---|---|---|
amount |
The amount of tax. Mandatory if taxSystem == 'tax_line_amounts'. However, it is best to use taxSystem tax_line_percentages and provide only the percentage, not the actual amount. The amount is then provided at the invoice level, in the taxSubtotals element. |
number |
category |
The allowed values depend on the country of the tax:
|
enum (standard, zero_rated, reverse_charge, intra_community, exempt, export, outside_scope, regulation33_exempt, nonregulation33_exempt, deemed_supply, srca_s, srca_c, not_registered, igst, cgst, sgst, cess, state_cess) |
country |
||
percentage |
The percentage Tax. This should be a valid Tax percentage in the country at the time of the issueDate of this invoice. Mandatory if taxSystem == 'tax_line_percentages' |
number |
6.2.77. TaxSubtotal
The total amount of tax of this type in the invoice.
Name | Description | Schema |
---|---|---|
category |
The tax category. For a description see Tax |
enum (standard, zero_rated, reverse_charge, intra_community, exempt, export, outside_scope, regulation33_exempt, nonregulation33_exempt, deemed_supply, srca_s, srca_c, not_registered, igst, cgst, sgst, cess, state_cess) |
country |
The country levying the tax. |
|
percentage |
The tax percentage. This should be a valid tax percentage in the country at the time of the taxpointDate of this invoice. |
number |
taxAmount |
The amount of tax. |
number |
taxableAmount |
The amount on which the tax is levied. |
number |
6.2.78. WebhookInstance
Name | Description | Schema |
---|---|---|
body |
The webhook body that would have been pushed if this were a push-mode webhook. |
string |
guid |
The GUID of the WebhookInstance. Use this to delete it. |
string (uuid) |
7. Appendix
7.1. Countries
The API is is generic as possible. However, some countries have specific requirements or features that are listed here.
AT - Austria
When sending invoices to the Austrian government (AT:GOV / 9915), all invoices have to be routed to 9915:b (for production) or 9915:test (for test). The actual recipient will be determined from the order reference inside the document.
Invoices to companies (AT:KUR / 9919) are routed directly to that identifier.
AU - Australia
Multiple PaymentMeans in the PaymentMeansArray are only allowed if they are of the same type.
The accountingCustomerParty.party.publicIdentifiers cannot have identifiers that overlap with the one in the sending LegalEntity. This means you cannot send to yourself.
BE - Belgium
Storecove automatically transforms the deprecated BE:CBE / 9956 to the new BE:EN / 0208, however it is recommended to use the new scheme.
Belgium has the Hermes system. This means all BE:EN numbers are registered on the Peppol network. When you create a new LegalEntity for a BE:EN number, this is automatically and transparantly transferred from Hermes to Storecove.
DE - Germany
The invoice.accountingSupplierParty.party.contact is mandatory.
The invoice.paymentMeansArray must include at least a single payment means.
When sending to businesses, the VAT number is used for routing. Some service providers register this with the "DE" prefix, some without. We check both for you, but you need to always include the "DE" in any object sent to us.
Storecove automatically transforms the deprecated DE:LID / 9958 to the new DE:LWID / 0204, however it is recommended to use the new scheme.
DK - Denmark
Danish senders must provide a legal identifier DK:DIGST / 0184.
Storecove automatically transforms the deprecated DK:CVR / 9902 to the new DK:ERST / 0198, however it is recommended to use the new scheme.
FR - France
When sending invoices to the French government (Chorus Pro):
-
All invoices have to be routed to SIRET 0009:11000201100044. There is no test environment for sending to public entities.
-
The SIRET / 0009 identifier of the final recipient is to be included in the invoice.accountingCustomerParty.publicIdentifiers array.
-
The service code must be sent in invoice.buyerReference.
-
The commitment number must be sent in the invoice.orderReference.
Invoices to companies (SIRET / 0009 or SIRENE / 0002) are routed directly to that identifier.
HR - Croatia
When sending to businesses, the VAT number is used for routing. Most service providers register this without the "HR" prefix. We check both for you, but you need to always include the "HR" in any object sent to us.
IT - Italy
When using an email address to send invoices with FatturaPA attachment, make sure it is not an Italy-specific "PEC" email address. PEC (Posta Elettronica Certificata) is a closed local Italian email network run by a closed group of 19 Italian companies. These emails will bounce and you will be notified of this via webhook.
NL - The Netherlands
When sending to public entities, the invoice.accountingSupplierParty.party.contact.email is mandatory.
Dutch senders and receivers require a legal identifier. For companies, this is NL:KVK / 0106. For public entities, this is NL:OINO / 0190.
Storecove automatically transforms the deprecated NL:OIN / 9954 to the new NL:OINO / 0190, however it is recommended to use the new scheme.
NO - Norway
Storecove automatically transforms the deprecated NO:ORGNR / 9908 to the new NO:ORG / 0192. However, it is recommended to use the new scheme directly.
We also transform NO:VAT / 9909 into NO:ORG / 0192.
NZ - New Zealand
New Zealand uses the NZBN to identify businesses. However, this is not an official Peppol participant identifier. In fact, it’s a GLN under the hood. So to register a New Zealand business, use the GLN identifier. In addition, when sending invoices to a New Zealand customer, make sure you include the pseudo identifier NZ:GST / SC0001 as their tax identifier.
SG - Singapore
Singapore has some very specific requirements, for creating SG:UEN participant identifiers, as well as for sending to the Singapore government. To start using SG LegalEntities, you need to contact us first.
Creating an SG:UEN
Creating an SG:UEN identifier is done using the regular endpoint
However, the CorpPass object is mandatory. CorpPass is the Singapore eIdentification method used to identify business online. This process must be followed. There are two flavours:
-
The email flow
This flow works as follows:
-
You provide a name and an email address when creating the participant identifier;
-
An email is sent to this email address, with a (unique) link to the CorpPass system where the user can confirm their identity;
-
When the user completes the identification process, the identifier is created on the Peppol network;
-
Some time later (this may be up to 24 hours) the identifier will become active on the Storecove system;
-
-
The redirect flow
This flow is more complicated to implement, but yields a better user experience. It looks like redirecting to an external payment system in a webshop. Once the payment is done, you go back to the success page (if the payment was successful)
This flow works as follows. You provide two URLs when creating the identifier:
-
one back to your site that will be called when identification was successful;
-
one back to your site that will be called when identification has failed.
When you create the identifier you will receive the CorpPass URL to redirect to, like this:
window.location.href = "CorpPass URL here";
When the process ends, one of your URLs is called. Upon success, the identifier is immediately available on the Peppol network. Upon failure, the identifier will be automatically deleted. Then, to restart the process, simply re-create the identifier. If the process does not end, because your user does not finish it, you can also simply re-create the identifier. We will recongnize that the identifier already exists, but is in a CorpPass process, and provide you with a fresh CorpPass redirect URL.
-
Sending to the Singapore Government
For sending to the Singapore government there are a number of specific rules to follow:
-
Make sure you have a CorpPass account at CorpPass portal (corppass.gov.sg)
-
Make sure you have have an approved vendor record at Vendors@Gov (vendors.gov.sg).
-
Route to endpoint of the Accountant-General’s Department: 0195:SGUENT08GA0028A.
-
The accountingCustomerParty.party.contact.email is mandatory
-
The accountingSupplierParty.party.contact.email is mandatory
-
The property invoice.buyerReference must contain the Business Unit. This is one of this list:
-
invoice.prepaidAmount and invoice.payableRoundingAmount are not acceptable.
-
invoice.orderReference may be mandatory. To find out whether you need to bill against an Invoicing Instruction/Purchase Order, enquire with your client agency.
-
When invoicing against an Invoicing Instruction/Purchase Order, invoice.invoiceLines.orderLineReferenceLineId must hold the corresponding LineID of the Order.
-
Only a single attachment is allowed and only PDF.
When sending to Singapore companies, no specific rules apply and you can use the individual company’s UEN for routing.
7.2. Sender Identifiers
Region | Country | Legal | Tax |
---|---|---|---|
AUNZ |
AU |
AU:ABN |
|
AUNZ |
NZ |
GLN |
NZ:GST |
EEA |
CH |
CH:UIDB |
CH:VAT |
EEA |
GB |
GB:VAT |
|
EEA |
IS |
IS:KTNR |
|
EEA |
LI |
LI:VAT |
|
EEA |
NO |
NO:ORG |
NO:VAT |
EU |
AD |
AD:VAT |
|
EU |
AL |
AL:VAT |
|
EU |
AT |
AT:GOV |
|
EU |
AT |
AT:KUR |
AT:VAT |
EU |
BA |
BA:VAT |
|
EU |
BE |
BE:EN |
BE:VAT |
EU |
BG |
BG:VAT |
|
EU |
CY |
CY:VAT |
|
EU |
CZ |
CZ:VAT |
|
EU |
DE |
DE:LWID |
|
EU |
DE |
DE:VAT |
|
EU |
DK |
DK:DIGST |
DK:ERST (0198) |
EU |
EE |
EE:CC |
EE:VAT |
EU |
ES |
ES:VAT |
|
EU |
FI |
FI:OVT or FI:ORG |
FI:VAT (0213) |
EU |
FR |
FR:SIRENE or FR:SIRET |
|
EU |
FR |
FR:SIRENE or FR:SIRET |
FR:VAT |
EU |
GR |
GR:VAT |
|
EU |
HR |
HR:VAT |
|
EU |
HU |
HU:VAT |
|
EU |
IE |
IE:VAT |
|
EU |
IT |
IT:IVA |
|
EU |
IT |
IT:CF and/or IT:IVA |
|
EU |
IT |
IT:CF |
|
EU |
IT |
IT:IVA |
|
EU |
LT |
LT:LEC |
LT:VAT |
EU |
LU |
LU:VAT |
|
EU |
LV |
LV:VAT |
|
EU |
MC |
MC:VAT |
|
EU |
ME |
ME:VAT |
|
EU |
MK |
MK:VAT |
|
EU |
MT |
MT:VAT |
|
EU |
NL |
NL:OINO |
|
EU |
NL |
NL:KVK |
NL:VAT |
EU |
PL |
PL:VAT |
|
EU |
PT |
PT:VAT |
|
EU |
RO |
RO:VAT |
|
EU |
RS |
RS:VAT |
|
EU |
SE |
SE:ORGNR |
SE:VAT |
EU |
SI |
SI:VAT |
|
EU |
SK |
SK:VAT |
|
EU |
SM |
SM:VAT |
|
EU |
TR |
TR:VAT |
|
EU |
VA |
VA:VAT |
|
IN |
IN |
IN:GSTIN |
|
JP |
JP |
JP:LIN |
JP:TIN |
SG |
SG |
SG:UEN |
|
SG |
SG |
SG:UEN |
|
SA |
SA |
SA:TIN |
|
Americas |
US |
DUNS, GLN, LEI |
US:EIN, US:SSN |
Americas |
CA |
CA:CBN |
|
Americas |
MX |
MX:RFC |
|
World |
DUNS, GLN, LEI |
7.3. Receiver Identifiers
Region | Country | B2X | Legal | Tax | Routing |
---|---|---|---|---|---|
AUNZ |
AU |
B+G |
AU:ABN |
AU:ABN |
|
AUNZ |
NZ |
B+G |
GLN |
NZ:GST |
GLN |
EEA |
CH |
B+G |
CH:UIDB |
CH:VAT |
CH:UIDB |
EEA |
GB |
B |
GB:VAT |
GB:VAT |
|
EEA |
IS |
B+G |
IS:KTNR |
IS:KTNR |
|
EEA |
LI |
B+G |
LI:VAT |
LI:VAT |
|
EEA |
NO |
B+G |
NO:ORG |
NO:VAT |
NO:ORG |
EU |
AD |
B+G |
AD:VAT |
AD:VAT |
|
EU |
AL |
B+G |
AL:VAT |
AL:VAT |
|
EU |
AT |
G |
AT:GOV |
Centralized id: 9915:b |
|
EU |
AT |
B |
AT:KUR |
AT:VAT |
AT:KUR |
EU |
BA |
B+G |
BA:VAT |
BA:VAT |
|
EU |
BE |
B+G |
BE:EN |
BE:VAT |
BE:EN |
EU |
BG |
B+G |
BG:VAT |
BG:VAT |
|
EU |
CY |
B+G |
CY:VAT |
CY:VAT |
|
EU |
CZ |
B+G |
CZ:VAT |
CZ:VAT |
|
EU |
DE |
G |
DE:LWID |
DE:LWID |
|
EU |
DE |
B |
DE:VAT |
DE:VAT |
|
EU |
DK |
B+G |
DK:DIGST |
DK:ERST (0198) |
DK:DIGST or DK:ERST |
EU |
EE |
B+G |
EE:CC |
EE:VAT |
EE:CC |
EU |
ES |
B |
ES:VAT |
ES:VAT |
|
EU |
FI |
B+G |
FI:OVT or FI:ORG |
FI:VAT (0213) |
FI:OVT or FI:ORG |
EU |
FR |
G |
FR:SIRENE or FR:SIRET |
Centralized id: 0009:11000201100044 |
|
EU |
FR |
B |
FR:SIRENE or FR:SIRET |
FR:VAT |
FR:SIRENE or FR:SIRET |
EU |
GR |
B+G |
GR:VAT |
GR:VAT |
|
EU |
HR |
B+G |
HR:VAT |
HR:VAT |
|
EU |
HU |
B+G |
HU:VAT |
HU:VAT |
|
EU |
IE |
B+G |
IE:VAT |
IE:VAT |
|
EU |
IT |
G (Peppol) |
IT:IVA |
IT:CUUO |
|
EU |
IT |
B (SDI) |
IT:CF and/or IT:IVA |
IT:CUUO |
|
EU |
IT |
C (SDI) |
IT:CF |
No routing, use "x2y": "b2c" |
|
EU |
IT |
G (SDI) |
IT:IVA |
IT:CUUO |
|
EU |
LT |
B+G |
LT:LEC |
LT:VAT |
LT:LEC |
EU |
LU |
B+G |
LU:VAT |
LU:VAT |
|
EU |
LV |
B+G |
LV:VAT |
LV:VAT |
|
EU |
MC |
B+G |
MC:VAT |
MC:VAT |
|
EU |
ME |
B+G |
ME:VAT |
ME:VAT |
|
EU |
MK |
B+G |
MK:VAT |
MK:VAT |
|
EU |
MT |
B+G |
MT:VAT |
MT:VAT |
|
EU |
NL |
G |
NL:OINO |
NL:OINO |
|
EU |
NL |
B |
NL:KVK |
NL:VAT |
NL:KVK or NL:VAT |
EU |
PL |
G+B |
PL:VAT |
PL:VAT |
|
EU |
PT |
G+B |
PT:VAT |
PT:VAT |
|
EU |
RO |
G+B |
RO:VAT |
RO:VAT |
|
EU |
RS |
G+B |
RS:VAT |
RS:VAT |
|
EU |
SE |
G+B |
SE:ORGNR |
SE:VAT |
SE:ORGNR |
EU |
SI |
G+B |
SI:VAT |
SI:VAT |
|
EU |
SK |
G+B |
SK:VAT |
SK:VAT |
|
EU |
SM |
G+B |
SM:VAT |
SM:VAT |
|
EU |
TR |
G+B |
TR:VAT |
TR:VAT |
|
EU |
VA |
G+B |
VA:VAT |
VA:VAT |
|
IN |
IN |
B |
IN:GSTIN |
||
JP |
JP |
B |
JP:LIN |
JP:TIN |
JP:LIN, JP:TIN |
SG |
SG |
G |
SG:UEN |
Centralized id: 0195:SGUENT08GA0028A |
|
SG |
SG |
B |
SG:UEN |
SG:UEN |
|
SA |
SA |
B |
SA:TIN |
||
Americas |
US |
B |
DUNS, GLN, LEI |
US:EIN, US:SSN |
DUNS, GLN, LEI |
Americas |
CA |
B |
CA:CBN |
CA:CBN |
|
Americas |
MX |
B |
MX:RFC |
MX:RFC |
|
World |
B |
DUNS, GLN, LEI |
DUNS, GLN, LEI |
7.4. Test Identifiers
Peppol
Storecove offers the following test identifiers to send test invoices to via the Peppol and BPC TEST networks:
Country | Peppol | BPC |
---|---|---|
AT |
AT:VAT ATU87654321 |
|
AU |
AU:ABN SC01234567890 |
|
BE |
BE:EN 1112345678 |
|
BG |
BG:VAT BG010101010 |
|
CZ |
BG:VAT CZ01010101 |
|
DE |
DE:LWID 10101010-STO-10 |
|
DE |
DE:VAT DE010101010 |
|
DK |
DK:DIGST 10101011 |
|
EE |
BG:VAT EE010101010 |
|
FI |
BG:VAT FI01010101 |
|
FR |
FR:SIRENE 123456987 |
|
GR |
GR:VAT EL999999999 |
|
HR |
BG:VAT HR01010101010 |
|
HU |
BG:VAT HU01010101 |
|
IS |
IS:KTNR SC239282828 |
|
IT |
IT:CUUO SCSCSCS |
|
JP |
JP:TIN T1234567890123 |
|
LT |
BG:VAT LT010101010 |
|
LU |
BG:VAT LU01010101 |
|
LV |
BG:VAT LV01010101010 |
|
NL |
NL:KVK SC012345678 |
|
NO |
NO:VAT NO007303003MVA |
|
NZ |
GLN 12345678901234567890 |
|
PL |
BG:VAT PL0101010101 |
|
PT |
PT:VAT PT123456789 |
|
RO |
BG:VAT RO010101010 |
|
SE |
SE:ORGNR 0012345678 |
|
SG |
SG:UEN SGTST123457890SC |
|
SI |
BG:VAT SI01010101 |
|
SK |
BG:VAT SK0101010101 |
|
US |
GLN 1200109970580 |
7.5. FAQ
SFTP & Email integrations
Storecove does support integrating via SFTP and email however the recommended path is to use the API. SFTP and email is only supported for single enities (e.g. companies). For more detail see our documentation for Companies.