Dinero API documentation

These pages describe how to get started with the Dinero API.

Getting started

The Dinero API is REST based, which is easy to work with and familiar to developers.

The base endpoint for the current version of the API is:

https://api.dinero.dk/v1

To use the API, you need to apply as a developer. We will send you a Client ID and a client secret, which you should use to authenticate yourself through the API.

If you want to use an API key on behalf of your account, you will also need to obtain the key for the organization. Please navigate to the API page in Dinero to generate the key. You need an active Dinero Pro subscription for the organization that you need to access. You can upgrade your subscription on the subscription page

Basic authentication

Authentication is done through the following endpoint:

https://authz.dinero.dk/dineroapi/oauth/token

Dinero uses token based authentication through OAuth2. This means that you use a token on every request to authorize yourself. Your Client ID and client secret is used with the above endpoint, in exchange for a token, which you then append on every future requests.
Obtaining an access token is done by sending an HTTP POST request to the above endpoint. The request should contain the following headers:

Authorization: Basic [client_id]:[client_secret]
Content-Type: application/x-www-form-urlencoded

Where [client_id] and [client_secret] should be replaced with your information. The composed [client_id]:[client_secret] string should be base64 encoded.

The header should look something like this: Authorization: Basic bXlfY2xpZW50X2lkOnBFUnkyTGhLYko0U2FkY3ZLcklpQW5xWnprakg5bm9STUc3aUxZcWl2MA==

Finally, you need the following request body:

grant_type=password&scope=read write&username=[username]&password=[password]

Where [username] and [password] should be replaced with your credentials. If you are accessing the API with an API-key you should replace both [username] and [password] with the API-key obtained above.

If your request was composed correctly, and your credentials were correct, the server will return an access_token in JSON format for you to use:

{
    "access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9(...)",
    "token_type":"Bearer",
    "expires_in":3600,
    "refresh_token":null
}

Basic usage

After obtaining an access token, you append it on every request using the following header:

Authorization: Bearer [access_token]

Where [access_token] should be replaced with the token you just received.

Here is an example of how to create four new ledger items on the current ledger

POST https://api.dinero.dk/v1/[organization_id]/ledgeritems HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9(...)
Host: api.dinero.dk
Content-Type: application/json
Content-Length: 821
[
    {"VoucherNumber":3,"AccountNumber":1000,"AccountVatCode":"I25","Amount":-500,"BalancingAccountNumber":null,"BalancingAccountVatCode":null,"Description":"produkt, lille","VoucherDate":"2015-05-27"},
    {"VoucherNumber":3,"AccountNumber":1300,"AccountVatCode":"none","Amount":-25,"BalancingAccountNumber":null,"BalancingAccountVatCode":null,"Description":"Momsfrit fragt","VoucherDate":"2015-05-27"},
    {"VoucherNumber":3,"AccountNumber":53000,"AccountVatCode":null,"Amount":525,"BalancingAccountNumber":null,"BalancingAccountVatCode":null,"Description":"Faktura 12","VoucherDate":"2015-05-27"},
    {"VoucherNumber":4,"AccountNumber":2000,"AccountVatCode":"none","Amount":100,"BalancingAccountNumber":52000,"BalancingAccountVatCode":null,"Description":"Vareforbrug ifbm fak 12","VoucherDate":"2015-05-27"},
]

Where [organization_id] is replaced by the organization id of the organization you would like to access. See the API endpoints documentation for a description of all available endpoints

Post Image

An example of how a post call to our files service could look like:
POST https://api.dinero.dk/v1/[organization_id]/files/?fileName=sample-invoice.jpg HTTP/1.1
Authorization: Bearer eyJ0eXAiOiJKV1QiLC....
Accept: application/json
Content-Type: multipart/form-data; boundary="-------abcdefg1234"
Host: api.dinero.dk
Content-Length: 313036
Expect: 100-continue
Connection: Keep-Alive

---------abcdefg1234
Content-Type: image/jpeg
Content-Disposition: form-data; name=image; filename=sample-invoice.jpg; filename*=utf-8''sample-invoice.jpg
[ReplaceWithYourImage]
---------abcdefg1234--
        

Filters

Filters are not available on all properties, so be sure to check the endpoints queryFilter URI parameter description to see which. If the endpoint do not contain a queryFilter URI parameter, then it does not support filtering.

Each filter command is built after the structure: [PropertyName] [Operator] '[Value]'

Be aware that the [Value] is case sensitive. And remember the ' around it.

Each filter command should be separated with: ;

Name Types Operator Example
Equals string, int, bool eq Name eq ’John Doe’
Contains string contains Name contains ’John D’

Example:


https://api.dinero.dk/v1/[ComapnyId]/contacts?queryFilter=Name+contains+'a';IsPerson+eq+'False'

Pagination

Get methods that potentially has a very large output implements pagination. It can maximum return 1000 entries per page, if a higher pageSize is given an Exception with error code 43 is thrown. The pagination defaults to a pageSize of 100 entries, and returns the first page if left empty.

The pagination URI properties are listed below:

Name Description Type Additional information
page The 0-based page number integer Default value is 0
pageSize The maximum number of items to include in a page. Max 1000. integer Default value is 100. Max value is 1000.

Throttling

There are no limit on the number of API requests per day. However, requests will be rate-limited if too many calls are made within a short period of time. Rate limiting is considered on a per API-key basis. An organization can have multiple API-keys associated to it. Each api-key will be considered separately. There are currently no limitations on the client_id

If you hit the rate limit, this is the body of the HTTP 429 message that you will see:

API calls quota exceeded! (...)

Using the Dinero client SDK

If you are using our C# SDK, you don't need to think about authentication. This is done automatically. You just need to provide your client_id and client_secret when creating your instance of the Dinero class:

For more details check out the GitHub page.

Subscribe to our mailing list

Please subscribe to our developer mailing list for news and updates on the API.