Documentation API
Référence complète de l'API Aprovall EDGE. Explorez tous les endpoints disponibles.
Authenticate
/auth/realms/eat_realm/protocol/openid-connect/tokenAccount information
Informations about your e-Attestations Account and statistics like the number of thirdparties you monitore on e-Attestations
/api/v1/account/api/v1/account/{{account_id}}/api/v1/account/{{account_id}}/dossierTypes/api/v1/account/{{account_id}}/attributesRequirements
Account's requirements are the documents you are allowed to ask to your thirdpartis in your dossiers.
It depends on your e-Attestations configuration that you've designed with the help of you key account manager or automaticaly with your e-attestations subscription.
/api/v1/account/{{account_id}}/requirements/api/v1/account/{{account_id}}/dossiers/{{dossierId}}/requirementsThirdparties
Account's thirdparties list and details.
/api/v1/account/{{account_id}}/thirdparties/search/api/v1/account/{{account_id}}/thirdparties/api/v1/account/{{account_id}}/thirdparties/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/attributes/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/stop/api/v1/account/{{account_id}}/thirdparties/api/v1/account/{{account_id}}/thirdparties/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/contacts/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/contacts/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/contacts/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/attributes/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/calculated-attributes/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/indicators/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/scores/api/v1/account/{{account_id}}/legalstatus/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/history/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/notes/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/notes/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/notes/{{note_id}}/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/notes/{{note_id}}Dossiers
All account's dossiers.
The 'dossier' resource is the materialization of the client / third party relationship.
In the response :
monitored: active / inactive dossierstate: true for an active and complete dossierthirdpartyState: true for a registered userstateLastChangeDate: complete / incomplete date for an active dossier (null for an inative dossier)
/api/v1/account/{{account_id}}/dossiers/all/api/v1/account/{{account_id}}/dossiers/api/v1/account/{{account_id}}/dossiers/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/attributesDossiers creation & Processes
Dossier creation is an asynchronous process, you can find more details here
/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/dossiers/api/v1/account/{{account_id}}/dossiers/api/v1/account/{{account_id}}/dossiers/process/8af2b4a592fc4d0701930b248bc20000/api/v1/account/{{account_id}}/dossiers/processesDossiers updates
/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/stop/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/reactivate/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/requirements/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/attributesDossier's notes
Add notes on your dossier. They will be visible when you do a GET on a dossier.
/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/notes/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/notes/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/notes/{{note_id}}/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/notes/{{note_id}}Dossier's documents
/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/documents/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/documents/{{document_id}}/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/documents/{{document_id}}Dossier's Evidences & Files
get all evidences :
- a form filled
- a document fetched
- a document uploaded
Each evidence is a file ( binary file + informations).
/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/documents/{{document_id}}/files/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/documents/{{document_id}}/files/{{file_id}}/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/documents/{{document_id}}/files/{{file_id}}/link/api/v1/account/{{account_id}}/dossiers/{{dossier_id}}/files/downloadDocuments
/api/v1/account/{{account_id}}/documents/search/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/responses/{{response_id}}/notes/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/responses/{{response_id}}/notes/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/responses/{{response_id}}/notes/{{note_id}}/api/v1/account/{{account_id}}/thirdparties/{{thirdparty_id}}/responses/{{response_id}}/notes/{{note_id}}Documents actions
/api/v1/account/{{account_id}}/responses/{{responseId}}/approve/api/v1/account/{{account_id}}/responses/{{responseId}}/rejectContexts
Contexts let you group the third parties you monitor around a specific business situation — a public tender, a project, a purchasing campaign — and follow their compliance together.
Key concepts
- Context model — a ready-made template defined for your account (its name, the attributes it carries, and whether a supply-chain declaration is expected). You choose a model when you create a context.
- Context — one concrete instance of a model (e.g. "Tender 2026-001"), with its own reference, attributes and third parties.
- Context third party — a third party attached to a context. Third parties can be organised as a tree (a supplier and its sub-suppliers) when the supply-chain option is enabled on the context.
- Notes — free comments you can attach to a context or to one of its third parties.
Typical flow
- List context models to get the model name to use.
- Create context from that model.
- Attach third parties (at first level, or as a full supply-chain tree).
- Follow up with attributes, dossiers and notes.
/api/v1/accounts/{{account_id}}/context-models/api/v1/account/{{account_id}}/contexts/api/v1/account/{{account_id}}/contexts/{{context_id}}/api/v1/account/{{account_id}}/contexts/api/v1/account/{{account_id}}/contexts/api/v1/account/{{account_id}}/contexts/{{context_id}}/attributes/{{ctx_attr_id}}/api/v1/account/{{account_id}}/contexts/{{context_id}}/archive/api/v1/account/{{account_id}}/contexts/{{context_id}}/reactivate/api/v1/account/{{account_id}}/contexts/{{context_id}}/notes/api/v1/account/{{account_id}}/contexts/{{context_id}}/notes/api/v1/account/{{account_id}}/contexts/{{context_id}}/notes/{{note_id}}/api/v1/account/{{account_id}}/contexts/{{context_id}}/notes/{{note_id}}Third parties contexts
The third parties attached to a context.
They can form a tree: a first-level third party, its sub-suppliers (children), and so on — when the supply-chain option is enabled on the context. Each third party in the tree has its own id (called a context third party id), distinct from the third party's own identifier.
/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/{{ctp_id}}/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/{{ctp_id}}/attributes/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/{{ctp_id}}/attributes/{{ctp_ctx_attr_id}}/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/{{ctp_id}}/archive/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/{{ctp_id}}/reactivate/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/{{ctp_id}}/dossiers/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/{{ctp_id}}/notes/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/{{ctp_id}}/notes/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/{{ctp_id}}/notes/{{note_id}}/api/v1/account/{{account_id}}/contexts/{{context_id}}/context-thirdparties/{{ctp_id}}/notes/{{note_id}}Advanced search V2
Query your third parties, dossiers and documents with a criteria builder: a tree of boolean conditions (AND / OR) that you compose freely, over any field available for your account.
📖 For an illustrated, step-by-step walkthrough of the concepts, see the Advanced Search concept guide.
How it works — 3 steps
-
Discover the filterable fields — first call
reference-data(endpoint below). It returns, for your account, the list of fields you can filter on, each with: its technical name (field), type (fieldType), nature (nature), resource (resourceType), allowed operators (availableOperators) and, for coded fields, the possible values (options). -
Build the query — copy these descriptors into the conditions of your
filterstree (see "Anatomy of a condition" below). Each condition'sfieldalways comes from reference-data: you never invent a field name or a coded value. -
Search or export — send the request to the search endpoint of the target resource (Third parties / Dossiers / Documents), or to its export twin to get a file.
Anatomy of a condition
A condition = a field + an operator + values:
{
"field": {
"field": "addressCountryCode",
"fieldType": "TEXT",
"nature": "MAIN_FIELD",
"resourceType": "THIRD_PARTY"
},
"operator": "EQUAL",
"values": ["FR"]
}
| Key | Role | Where to find it |
|---|---|---|
field.field | Field technical name | field in reference-data |
field.fieldType | TEXT · NUMERIC · DATE · BOOLEAN | fieldType in reference-data |
field.nature | MAIN_FIELD · ATTRIBUTE · SCORE · CALCULATED_ATTRIBUTE · INDICATOR · FORM_FIELD | nature in reference-data |
field.resourceType | THIRD_PARTY · DOSSIER · DOCUMENT | resourceType in reference-data |
field.id | Required for ATTRIBUTE / CALCULATED_ATTRIBUTE / INDICATOR / FORM_FIELD | id in reference-data |
operator | Comparison operator | the field's availableOperators |
values | Values — always strings: ["FR"], ["50"], ["true"], ["2026-01-01"] | the field's options (coded fields) |
A condition can target a resource other than the one queried (cross-resource filtering) via its resourceType — e.g. find third parties that have a dossier of a given type.
Filter groups: childGroups (nested AND / OR)
A group has a single connectiveOperator (AND or OR) that joins all its conditions and all its childGroups. To mix AND and OR, nest sub-groups in childGroups — depth is unlimited.
Example — third parties FR AND (headcount ≥ 50 OR turnover ≥ 1,000,000):
{
"filters": {
"connectiveOperator": "AND",
"conditions": [
{
"field": { "field": "addressCountryCode", "fieldType": "TEXT", "nature": "MAIN_FIELD", "resourceType": "THIRD_PARTY" },
"operator": "EQUAL",
"values": ["FR"]
}
],
"childGroups": [
{
"connectiveOperator": "OR",
"conditions": [
{
"field": { "field": "workforce", "fieldType": "NUMERIC", "nature": "MAIN_FIELD", "resourceType": "THIRD_PARTY" },
"operator": "GREATER_OR_EQUAL",
"values": ["50"]
},
{
"field": { "field": "turnover", "fieldType": "NUMERIC", "nature": "MAIN_FIELD", "resourceType": "THIRD_PARTY" },
"operator": "GREATER_OR_EQUAL",
"values": ["1000000"]
}
],
"childGroups": []
}
]
}
}
The root group applies AND between the "country = FR" condition and the sub-group; the sub-group applies OR between its two conditions.
/api/v1/reference-data/advanced-search-fields/api/v1/account/{{account_id}}/third-parties/advanced-search-v2/api/v1/account/{{account_id}}/dossiers/advanced-search-v2/api/v1/account/{{account_id}}/documents/advanced-search-v2/api/v1/account/{{account_id}}/third-parties/advanced-search-v2/export/api/v1/account/{{account_id}}/dossiers/advanced-search-v2/export/api/v1/account/{{account_id}}/documents/advanced-search-v2/export(Deprecated) Advanced search
🔍 Advanced Search Endpoints
These three endpoints (thirdparties, dossiers, and documents advanced-search) allow you to perform complex multi-criteria searches with flexible filtering logic.
Filter Logic:
-
Within a single criteria object: All fields are combined with AND logic
- A result must match ALL specified criteria
-
Between multiple criteria objects: Results are combined with OR logic
- A result must match ANY of the criteria objects
Example:
{
"filters": {
"dossiers": [
{
"dossierType": "SUPPLY_CONTRACT",
"status": "VALID"
},
{
"dossierType": "PARTNERSHIP",
"status": "IN_PROGRESS"
}
]
}
}
This searches for:
-
Dossiers that are (type = SUPPLY_CONTRACT AND status = VALID)
-
OR
-
Dossiers that are (type = PARTNERSHIP AND status = IN_PROGRESS)
This flexible approach allows you to build complex queries that match your specific business needs.
/api/v1/account/{{account_id}}/thirdparties/advanced-search/api/v1/account/{{account_id}}/dossiers/advanced-search/api/v1/account/{{account_id}}/documents/advanced-searchErrors codes
Here are the HTTP Status Codes and Error Codes used by our API:
| HTTP Status Code | Description |
|---|---|
200 OK | Successful. |
400 Bad Request | In the API response, field which is missing or invalid will be emphasized. |
401 Unauthorized | The client passed in the invalid Auth token. Client should refresh the token and then try again. |
403 Forbidden | Access to this resource is forbidden in this context. |
404 Not Found | The ressource is missing. |
500 Internal Server Error | Servers are not working as expected. The request is probably valid but needs to be requested again later. |
In case you receive a 400 ou 500 Http Status Code, you will find in the response a custom error code which give more information on the error cause:
| Error code | Error description |
|---|---|
| E001 | Missing parameter |
| E002 | Unknown parameter |
| E003 | Empty parameter |
| E010 | Wrong format |
| E011 | Maximum size exceeded |
| E021 | Expiration date is in the past |
| E022 | Date in future |
| E030 | Invalid E-mail domain |
| E100 | No company matching your search |
| E101 | Error qualifying the company |
| E102 | Company does not exist |
| E103 | Company is closed |
| E104 | Too many companies for this criteria |
| E105 | Company ID has change to |
| E111 | Thirdparty code (supplierCode) is different regarding the existing one |
| E112 | Thirdparty code (supplierCode) is already used for another thirdparty |
| E113 | Thirdparty account disabled |
| E122 | Impossible to import an international company. 'The international' option is not activated. |
| E200 | No dossier matching your search |
| E201 | Dossier disabled |
| E202 | Reference exists for third party |
| E203 | No dossier with this reference |
| E204 | Dossier already enabled |
| E205 | Dossier is reactivated with a date in the past. You should modify the date. |
| E206 | Dossier type not found |
| E207 | Updating documents is forbidden on a typed dossier |
| E301 | Requirement disabled |
| E302 | Requirement not allowed |
| E303 | Requirement disabled from the dossier type |
| E304 | Requirement not allowed from the dossier type |
| E401 | Unauthorised to make request on your DnB account. |
| E402 | You have reach the request limit of your DnB account. |
| E1000 | Error during id encryption |
| E1001 | Error during id decryption |
| E1002 | SIREN or SIRET type must be used with FR countryCode |
| E1005 | Invalid value |
| E1006 | Service temporarily unavailable |