The Hiveo API uses several notions and objects. We will describe them here.
Companies and their work sites are call organisations. Each organisation has a corresponding national identifier, called national ID, and a reference country code.
For example:
On Hiveo, collector organisations (our customers) invite their suppliers as depositors. Thus they create relations between them.
Each organisation is referenced with an Hiveo ID (also called internal ID), built by concatening the country code and the national ID of the organisation (ex: Hiveo top level organisation has the Hiveo ID FR-841226053):
"country": "FR"
"nationalId": "841226053"
"internalId": "FR-841226053"
Each depositor uploads documents on Hiveo. A Hiveo document has:
Every depositor has a legal dossier, containing documents from the following usages:
If you collect more than these 3 usages, your depositors will also have a complementary dossier, containing the rest of the collected documents.
Versions of documents are called revisions. A same PDF file can be linked to several revisions, corresponding to either:
A revision has several attributes related to its validity state:
usable
if the depositor has gone through the whole upload process (non usable revisions are drafts that never reach the depositor’s dossiers)valid
if the document has passed all validation rules: it has a start validity date, and an end validity date, but the revision will always be considered valid between these 2 datesoperational
if the document is valid at the specified date – This notion is relativeUsers can be attached to one of several companies (e.g top-level organisations). Once a user is invited to join a company, she can subscribe to every work site (e.g child organisations) she needs to.
When subscribing to a child organisation, a user:
With the Hiveo API you can:
Hiveo provide collectors with the ability to send reminders to their suppliers. These reminders are of several types:
Reminds are only sent when needed: A supplier with valid dossiers and contacts will NOT be notified.
Invitation reminders are only manual: They can be sent by users, or programmatically. Documents reminders are automatically sent by Hiveo, and can also be sent manually or programmatically by users.
To get all your suppliers at once, use:
GET /api/collectors/{internal-id}/relations
This call can be used to synchronize the first time, or once in a while to force a full synchronisation.
Then to only get modifications since your last call, use:
GET /api/collectors/{internal-id}/relations?fromLastModifiedDate={previous call date, such as 2019-04-01T17:32:28Z}
Type | Name | Needed rights | Authentication theme | Resource |
---|---|---|---|---|
Invitation | Invite a user to your own organisation | Write | User | POST /api/organisations/{internal-id}/contacts |
Invitation | Invite a new supplier | Write | User | POST /api/invite-depositor |
Dossiers | Get all information from your suppliers | Read | Machine | GET /api/collectors/{internal-id}/relations |
Dossiers | Get information for a specific supplier | Read | Machine | GET accept: application/json /api/collectors/{internal-id}/relations?depositor={depositor-internal-id} |
Dossiers | Get information for a specific document | Read | User | GET /api/revisions/{revision} |
Dossiers | Get a specific PDF file | Read | User | GET accept: application/pdf /api/revisions/{revision}/file |
Dossiers | Get all current documents and dossiers for a specific supplier | Read | Machine | GET accept: application/zip /api/collectors/{internal-id}/relations?depositor={depositor-internal-id} |
Dossiers | Get all modifications on your suppliers since your last update | Read | Machine | GET /api/collectors/{internal-id}/relations?fromLastModifiedDate=2019-04-01T17:32:28Z |
Reminders | send reminders to all suppliers who require it | Write | User | POST /api/collectors/{internal-id}/manual-reminds |
Reminders | Get a supplier’s reminder history | Read | Machine | GET /api/collectors/{internal-id}/reminds |
Our Swagger file is available here.
The Hiveo API allows Hiveo customers to programmatically manage their own organisation and their suppliers.
Through the API you can:
The Hiveo API is organised around REST and JSON, and uses standard HTTP response codes, verbs and authentication.
The Hiveo API is accessed through an generic URL. If you want to call a specific version of the Hiveo API, use the x-version
HTTP header to specify it. For example:
x-version:1.2
Any breaking changes to the API will be introduced through a new version number.
Non-breaking changes may be introduced without changing version. These may include additional fields to JSON data structures, optional parameters to API calls, new features that can be exposed through existing API calls, or new API calls.
Our API versioning uses 2 digits, such as major.minor (1.0, 1.1…). An increment in the major digit means that ground-breaking changes have been introduced (ex: rework on entire resources, major changes in the authentication system…).
We provide 2 different environnements:
When creating your account, we will provide credentials for both environnements.
All endpoints of the Hiveo API require authentication.
We accept the following Oauth2 grant types:
Operations types | Oauth2 grant types | Label |
---|---|---|
read-only | Client Credentials Grant | OauthClientSecurity |
write | Password Grant or Authorization Code Grant | OauthUserSecurity |
Many of our API resources use pagination.
You can select whatever you want to receive using page
and size
parameters.
Hiveo uses conventional HTTP response codes to indicate the success or failure of an API request.
In general:
HTTP code | Label | Meaning |
---|---|---|
200 | OK | Success. |
201 | Created | A resource has been created |
202 | Accepted | The request has been accepted for processing, but the processing has not been completed |
400 | Bad Request | The request was unacceptable, often due to missing a required parameter |
401 | Unauthorized | No valid API key provided |
402 | Request Failed | The parameters were valid but the request failed |
403 | Forbidden | The API key doesn’t have permissions to perform the request |
404 | Not Found | The requested resource doesn’t exist |
409 | Conflict | The request conflicts with another request |
429 | Too Many Requests | Too many requests hit the API too quickly |
500, 502, 503, 504 | Server Errors | Something went wrong on Hiveo’s side |
Get the contacts of a specific organisation, using its Hiveo internal ID.
internal-id required | string Hiveo internal ID ( |
direct | boolean Default: false If true, only get the direct contacts. If false, also get the parent's contacts |
query | string Term to search in the contacts list. Search works on username, email, firstName, lastName, phone, jobs |
page | integer <int32> Pagination - Page number of the requested page |
size | integer <int32> Pagination - Number of elements on each page |
sort | Array of strings Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported |
OK
Unauthorized
Forbidden
The organisation cannot be found
Get a document revision. A document revision contains all metadata relative to this document.
A revision is:
usable
if the depositor has gone through the whole upload processvalid
if the document has passed all validation rulesoperational
if the document is valid at the specified daterevision required | string Identifier of the revision |
OK
Unauthorized
Forbidden
Not Found
Get the PDF file corresponding to this specific revision.
revision required | string Identifier of the revision |
Accept-Language | string User locale (ex: fr-FR) |
OK
Unauthorized
Forbidden
Not Found
If it exists, get the proof file corresponding to this specific revision.
revision required | string Identifier of the revision |
Accept-Language | string User locale (ex: fr-FR) |
OK
Unauthorized
Forbidden
Not Found
Invite a depositor organisation to join your network.
When successful, this will create a new relation between the selected inviting organisation (must be one of your scope, such as one of your work site) and the invited depositor organisation.
An invitation request, composed of:
categories | Array of strings |
guests | Array of objects (Guest) |
internalCode | string |
invitedOrganisationInternalId | string |
invitingOrganisationInternalId | string |
OK
Created
Unauthorized
Forbidden
One of the specified organisations (inviter or invitee) cannot be found
{- "categories": [
- "string"
], - "guests": [
- {
- "email": "string",
- "firstName": "string",
- "jobs": [
- "string"
], - "lastName": "string",
- "login": "string",
- "phone": "string"
}
], - "internalCode": "string",
- "invitedOrganisationInternalId": "string",
- "invitingOrganisationInternalId": "string"
}
Invite new contacts to one of the collector's organisations. This resource is used to invite new internal contacts of your company.
internal-id required | string Hiveo internal ID ( |
Contacts to invite on this organisation
guests required | Array of objects (Guest) Users to add to the organisation |
OK
Created
Unauthorized
Forbidden
Not Found
{- "guests": [
- {
- "email": "string",
- "firstName": "string",
- "jobs": [
- "string"
], - "lastName": "string",
- "login": "string",
- "phone": "string"
}
]
}
Get a specific organisation using its Hiveo internal ID.
internal-id required | string Hiveo internal ID ( |
OK
Unauthorized
Forbidden
Not Found
Get the direct children of a specific organisation using its Hiveo internal ID.
internal-id required | string Hiveo internal ID ( |
page | integer <int32> Default: 0 Pagination - Page number of the requested page |
size | integer <int32> Default: 5 Pagination - Number of elements on each page |
OK
Unauthorized
Forbidden
If the organisation can't be found
Send reminders to the specified relations.
Only relations with non operational documents, or with pending contact invitations will receive reminder notifications.
internal-id required | string Hiveo internal ID ( |
query
actualDossiersToFilter | Array of integers <int64> |
categories | Array of strings |
collectors | Array of strings |
depositors | Array of strings |
filterDate | string <date-time> |
filterDossiers | Array of integers <int64> |
onlyHasExempted | boolean |
onlyNoRegisteredContact | boolean |
onlyNotOperational | boolean |
onlyOperational | boolean |
providers | Array of strings |
query | string |
OK
Created
Unauthorized
Forbidden
Not Found
{- "actualDossiersToFilter": [
- 0
], - "categories": [
- "string"
], - "collectors": [
- "string"
], - "depositors": [
- "string"
], - "filterDate": "2020-07-10T10:38:27Z",
- "filterDossiers": [
- 0
], - "onlyHasExempted": true,
- "onlyNoRegisteredContact": true,
- "onlyNotOperational": true,
- "onlyOperational": true,
- "providers": [
- "string"
], - "query": "string"
}
Get the reminders history of a specific organisation.
internal-id required | string Hiveo internal ID ( |
depositor | string Hiveo internal ID ( |
page | integer <int32> Default: 0 Pagination - Page number of the requested page |
size | integer <int32> Default: 10 Pagination - Number of elements on each page |
OK
Unauthorized
Forbidden
Not Found
Get all your relations at once. With this resource you can:
Use:
application/zip
to export relation files (*.zip)application/pdf
to get your relations' conformity certificates (*.pdf)internal-id required | string Hiveo internal ID ( |
fromLastModifiedDate | string <date-time> Get all modifications on relations that have occured since the given date |
filterDate | string Get relations statuses at the given date |
filterDossiers | string Id of the dossiers to search for not operational relations. If not setted, will search on all selected dossiers for the relation |
onlyNoRegisteredContact | string Only get relations without active contacts |
onlyHasExempted | string Only get relations with at least one operational exempted revision |
onlyOperational | string Only get operational relations on requested dossiers |
onlyNotOperational | string Only get not operational relations on requested dossiers |
categories | string Only get relations with the specified categories |
depositors | string Only get relations corresponding to these Hiveo internal ID ( |
providers | string Only get relations with at least one document from this external provider |
query | string Terms to search in the relation |
page | integer <int32> Pagination - Page number of the requested page |
size | integer <int32> Pagination - Number of elements on each page |
sort | Array of strings Sorting criteria in the format: property(,asc|desc). Default sort order is ascending. Multiple sort criteria are supported. |
Accept-Language | string User locale (ex: fr-FR) |
OK
Unauthorized
Forbidden
Not Found
{- "content": [
- {
- "categories": [
- "string"
], - "collector": {
- "additionalInformation": {
- "contacts": {
- "nbActive": 0,
- "nbAdminProfile": 0,
- "nbMemberProfile": 0,
- "nbTotal": 0,
- "withActive": false,
- "withAdmin": false
}
}, - "address": "string",
- "collector": false,
- "contacts": [
- {
- "admin": false,
- "jobs": [
- "string"
], - "user": {
- "active": true,
- "email": "string",
- "firstName": "string",
- "lastName": "string",
- "login": "string",
- "phone": "string"
}
}
], - "country": "string",
- "depositor": false,
- "documentProviders": [
- {
- "code": "string",
- "documentTypes": [
- "string"
]
}
], - "internalId": "string",
- "level": 0,
- "name": "string",
- "nationalId": "string",
- "organisationLevel": {
- "lastChild": false,
- "level": 0,
- "topParent": false
}, - "parentInternalId": "string",
- "postalCode": "string",
- "topLevelParentInternalId": "string",
- "town": "string",
- "tradingName": "string"
}, - "depositor": {
- "additionalInformation": {
- "contacts": {
- "nbActive": 0,
- "nbAdminProfile": 0,
- "nbMemberProfile": 0,
- "nbTotal": 0,
- "withActive": false,
- "withAdmin": false
}
}, - "address": "string",
- "collector": false,
- "contacts": [
- {
- "admin": false,
- "jobs": [
- "string"
], - "user": {
- "active": true,
- "email": "string",
- "firstName": "string",
- "lastName": "string",
- "login": "string",
- "phone": "string"
}
}
], - "country": "string",
- "depositor": false,
- "documentProviders": [
- {
- "code": "string",
- "documentTypes": [
- "string"
]
}
], - "internalId": "string",
- "level": 0,
- "name": "string",
- "nationalId": "string",
- "organisationLevel": {
- "lastChild": false,
- "level": 0,
- "topParent": false
}, - "parentInternalId": "string",
- "postalCode": "string",
- "topLevelParentInternalId": "string",
- "town": "string",
- "tradingName": "string"
}, - "depositorInternalIdForCollector": "string",
- "depositorUsualNameForCollector": "string",
- "state": {
- "dossiers": [
- {
- "documents": [
- {
- "exempted": true,
- "label": "string",
- "order": 0,
- "providers": [
- "string"
], - "state": {
- "expired": false,
- "notOperationalStateReasons": [
- "NO_FILE"
], - "operational": false,
- "validityEnd": "2020-07-10T10:38:27Z",
- "validityStart": "2020-07-10T10:38:27Z"
}
}
], - "dossierId": 0,
- "label": "string",
- "shortLabel": "string",
- "state": {
- "expired": false,
- "notOperationalStateReasons": [
- "NO_FILE"
], - "operational": false,
- "validityEnd": "2020-07-10T10:38:27Z",
- "validityStart": "2020-07-10T10:38:27Z"
}
}
], - "state": {
- "expired": false,
- "notOperationalStateReasons": [
- "NO_FILE"
], - "operational": false,
- "validityEnd": "2020-07-10T10:38:27Z",
- "validityStart": "2020-07-10T10:38:27Z"
}
}, - "status": "ACTIVE",
- "validityPeriods": [
- {
- "endDate": "2020-07-10T10:38:27Z",
- "startDate": "2020-07-10T10:38:27Z"
}
]
}
], - "first": true,
- "last": true,
- "number": 0,
- "numberOfElements": 0,
- "size": 0,
- "sort": { },
- "totalElements": 0,
- "totalPages": 0
}