Our API is based on the OAuth2 standard which works with following entities:
You should choose the grant type 'Client credentials', if you would only like to access your own data of your own account. When creating a client, and choosing this grant type, your credentials will only enable you to access your data.
A typical usecase is if you are a programmer yourself, and would like to write a software that interacts with your own data in smallinvoice.
The Grant type 'Authorization Code' is available for software developers that would like to integrate our API into their software and let other clients access their data, without having to hand over their private application credentials.
A typical usecase of the grant type 'Authorization Code' would be a webshop-softwareprovider that lets their users connect smallinvoice-accounts to automatically create invoices upon incoming orders for them.
You can create as many client ids (every application / usecase should be separated by creating a separate client id) in your account in the main section 'Home' then 'Users->API V2'.
To obtain the access token required for making an API call you need to make following HTTP request
URL: https://api.smallinvoice.com/v2/auth/access-tokens
Method: POST
HTTP-Header: Content-Type: application/json
BODY:
{
"grant_type":"client_credentials",
"client_id":"YOUR_CLIENT_ID",
"client_secret":"YOUR_CLIENT_SECRET",
"scope":"YOURSCOPES SEPARATED BY SPACE"
}
If successfull, this will return you the following
{
"token_type":"Bearer",
"expires_in":43200,
"access_token":"YOUR_ACCESS_TOKEN"
}
This access token can now be used to make API-Requests, and is passed as header value 'Authorization' (See Introduction)
When the token expires, a new access token should be generated in the same manner.
The process of retreiving the access and refresh token from a user is interactive. The user who wants to provide access to his account, will have to follow through an authorization process that in the end will deliver a refresh and access token to the initiator/software provider/client.
Either open a popup, or redirect the user to the URL with below described GET parameters
https://api.smallinvoice.com/v2/auth/authorize
GET Parameter | Value |
---|---|
scope | All scopes you require to access, separated by space |
response_type | Always use 'code' |
client_id | The client id of the application provider (software developer) |
redirect_uri | The URL that will receive the authorization code. Has to be identical to the one that was entered when registering the client. |
state | Randomly generated string that will be returned after the user has authenticated himself. Remember this value and compare it to the incoming value as a security measure. |
Example: https://api.smallinvoice.com/v2/auth/authorize?scope=contact&state=RANDOMGENERATEDSTRING&response_type=code&client_id=YOURCLIENTID&redirect_uri=YOURREDIRECTURI
The user will be promted to login with his credentials, and grant access to the specified scopes of the requesting application.
Upon granting access, the browser will make a GET request to the provided redirect_uri passing following GET parameters
GET Parameter | Value |
---|---|
code | This is your Authorization code to be used further below |
state | Compare the provided state, with the state value you generated earlier (reject the proces if those values do not match) |
At this point you can fetch the Access and Refresh-Token making the following POST-Request:
URL: https://api.smallinvoice.com/v2/auth/access-tokens
Method: POST
HTTP-Header: Content-Type: application/json
BODY:
{
"grant_type":"authorization_code",
"client_id":"YOUR_CLIENT_ID",
"client_secret":"YOUR_CLIENT_SECRET",
"scope":"YOURSCOPES SEPARATED BY SPACE",
"redirect_uri":"YOUR_REDIRECT_URI",
"code":"THE_RECEIVED_AUTHORIZATION_CODE"
}
If the call is successfull, you will receive the following output
{
"token_type":"Bearer",
"expires_in":43200,
"access_token":"ACCESS_TOKEN_OF_USER",
"refresh_token":"REFRESH_TOKEN_OF_USER"
}
You can now immediately use the access token to make an API-Request.
If you would like to be able to make API requests after the access token has expired, you need to store the refresh token of this user in your database / permanent storage.
To get a new access token (and refresh token) for the user, you can make following POST-Request using the stored Refresh token
URL: https://api.smallinvoice.com/v2/auth/access-tokens
Method: POST
HTTP-Header: Content-Type: application/json
BODY:
{
"grant_type":"refresh_token",
"client_id":"YOUR_CLIENT_ID",
"client_secret":"YOUR_CLIENT_SECRET",
"scope":"YOURSCOPES SEPARATED BY SPACE",
"refresh_token":"YOUR_STORED_REFRESH_TOKEN_FROM_USER"
}
This will return you a new access token for the user:
{
"token_type":"Bearer",
"expires_in":43200,
"access_token":"ACCESS_TOKEN_OF_USER",
"refresh_token":"NEW_REFRESH_TOKEN_OF_USER_THAT_YOU_HAVE_TO_STORE"
}
IMPORTANT: When using the refresh token for fetching new access tokens, the refresh token used is automatically revoked, and you will have to store the new refresh token received for the next time you want to fetch a new access token.