Download OpenAPI specification:
This API is dedicated to Air France to retrieve information on request and end to end request.
API endpoints are using Bearer authentication (bearerAuth). So all API request calls must include a valid JWT token in the Authorization HTTP header, which is issued by Air France.
Token validation involves claim validation and certificate verification from a JWKS endpoint provided by Air France.
The URL depends on the environment and the value of the iss field in JWT payload.
When the token is invalid, a 401 error code is returned.
Here is the list of errors message according to the type of issue:
| Error message | Description |
|---|---|
| Issuer of the token invalid | The claim iss is not present in the JWT claim issuers list |
| Audience of the token invalid | The claim aud is not present in the JWT claim audiences list |
| Token has expired | The claim exp exceeds the current date |
| Token invalid | Token verification failed |
Access to paginated resources accept filtering with query parameters. Example : route_to_my_paginated_resources?myFilter1=myValue1&myFilter2=myValue2.
When a query parameter is a collection, the values must be delimited with a comma. To escape a comma in a value, double it.
Example to pass list of id : "id1", "id2" to "_ids" parameter : route_to_my_paginated_resources?_ids=id1,id2.
For paginated resources, provide query option's startIndex, count, fields, sort for ascending ordering and desc for descending ordering.
Example : route_to_my_paginated_resources?startIndex=0&count=10&fields=field1,field2&sort=field2
Example of response :
{
"data": [
{
"field1": "My field 1 value 1",
"field2": "My field 2 value 1"
},
{
"field1": "My field 1 value 2",
"field2": "My field 2 value 2"
}
],
"paging": {
"pageCount": 1,
"totalItemCount": 2,
"pageNumber": 1,
"pageSize": 10,
"hasPreviousPage": false,
"hasNextPage": false,
"isFirstPage": true,
"isLastPage": true
}
}
In case of errors, an object Problem Details is returned with its http status code.
It corresponds to the standard problem details, with an additional property data.
See more details about http list error here.
You can find below common used error response.
| Code | Signification | comment |
|---|---|---|
| 200 | Success | Body response contains the returned information.. |
| 400 | Bad Request | The provided elements, URL parameters, or request body information are incorrect (missing or invalid, whether in format or value). Functional error messages are found in the response message |
| 401 | Authentication Failed | The provided credentials do not allow authentication, or the authentication token has expired |
| 403 | Forbidden | The call is authenticated, but the concerned identity is not authorized to access the resource |
| 404 | Not Found | The server cannot find the requested endpoint |
| 429 | Too Many Requests | Quota is exceeded. Wait before making a new request. (at least of 1 second to return one capacity of 10 requests) |
| 429 | Too Many Requests | Another request is still in progress. As the application cannot handle a parallel request, you must wait before making a new one. |
| 500 | Internal Server Error | An error occurred on the server side. Contact support for a status update. |
All dates in the system are UTC date using ISO 8601 format Year-month-dayThour:minute:second.millisecons+00:00
Example : 2023-10-30T07:24:00.000+00:00
This API is versioned to handle changes in API contract. The versioning is done with URI path. Example : https://myapi/v1/myresource. The versioning applies on all the operations except /token and /revoke endpoints. Example: https://myapi/token.
A new version is released when a breaking change is made. The previous versions remain maintained for a certain time. After a time, old versions may be deprecated (marked as obsolete) then removed. Remark: breaking changes can be made on pre-release versions. These versions can also be removed from the API and replaced with a release version.
Examples of breaking changes :
Change a property name or type in a request or response
Add a required parameter in a request
Remove a property in a response
Remove an operation in the API
Examples of non-breaking changes :
Add a value in a response
Add an optional parameter in a request
Add an operation in the API
Change the format of any opaque identifier
Replacing a success status code with another success status code (i.e: replacing a 200 with a 201)
Replacing a failure status code with another failure status code (i.e: replacing a 500 with a 400)
This API uses consumption quotas to prevent excessive calls and to maintain service availability.
Two types of rate limiting are applied :
When a quota is exceeded, the API returns the error code 429 (Too Many Requests).
A leaky bucket rate limiting is applied, it depends on two parameters :
100.10.When a request is received :
The bucket counter is decreased periodically to accept new requests.
There is no specific limit for the number of concurrent calls, however you are limited by the remaining bucket capacity
| _ids | string List of request _id, separated by a comma |
| dateFrom required | string The inclusive start date and time for the search |
| dateTo | string <date-time> The exclusive end date and time for the search. |
| startIndex | integer Default: 0 Pagination start index (offset). |
| count | integer <= 200 Default: 10 Pagination count (page size). |
{- "data": [
- {
- "_id": "string",
- "source": "string",
- "requestId": "string",
- "requestIdType": "string",
- "requestTypeCategory": "string",
- "requestType": "string",
- "creationType": "string",
- "creationDate": "2019-08-24T14:15:22Z",
- "startDate": "2019-08-24T14:15:22Z",
- "displayedStartDate": "2019-08-24T14:15:22Z",
- "displayedCompletionDate": "2019-08-24T14:15:22Z",
- "plannedStartDate": "2019-08-24T14:15:22Z",
- "plannedCompletionDate": "2019-08-24T14:15:22Z",
- "contractualStartDate": "2019-08-24T14:15:22Z",
- "contractualCompletionDate": "2019-08-24T14:15:22Z",
- "completionDate": "2019-08-24T14:15:22Z",
- "status": "string",
- "progression": 0,
- "departurePoint": "string",
- "arrivalPoint": "string",
- "alert": "string",
- "emergencyLevel": "string",
- "requestedBy": {
- "firstName": "string",
- "lastName": "string",
- "fullName": "string",
- "phone": "string",
- "email": "string"
}, - "followers": [
- {
- "email": "string"
}
], - "success": 1,
- "successAfterRectification": 1,
- "flow": "string",
- "pickupLogisticSite": "string",
- "deliveryLogisticSite": "string",
- "flowSite": "string",
- "lastUpdateDate": "2019-08-24T14:15:22Z",
- "transportationInfo": {
- "principalTransportSection": {
- "departure": {
- "address": {
- "addressId": "string",
- "name": "string",
- "position": {
- "latitude": 0,
- "longitude": 0
}, - "site": "string",
- "stoppingPoint": "string",
- "type": "string"
}, - "pointType": "string",
- "estimatedArrivalDate": "2019-08-24T14:15:22Z",
- "arrivalDate": "2019-08-24T14:15:22Z",
- "estimatedDepartureDate": "2019-08-24T14:15:22Z",
- "departureDate": "2019-08-24T14:15:22Z",
- "estimatedActionDate": "2019-08-24T14:15:22Z",
- "actionDate": "2019-08-24T14:15:22Z",
- "secondPartFullName": "string",
- "secondPartNote": "string",
- "driverPartNote": "string"
}, - "arrival": {
- "address": {
- "addressId": "string",
- "name": "string",
- "position": {
- "latitude": 0,
- "longitude": 0
}, - "site": "string",
- "stoppingPoint": "string",
- "type": "string"
}, - "pointType": "string",
- "estimatedArrivalDate": "2019-08-24T14:15:22Z",
- "arrivalDate": "2019-08-24T14:15:22Z",
- "estimatedDepartureDate": "2019-08-24T14:15:22Z",
- "departureDate": "2019-08-24T14:15:22Z",
- "estimatedActionDate": "2019-08-24T14:15:22Z",
- "actionDate": "2019-08-24T14:15:22Z",
- "secondPartFullName": "string",
- "secondPartNote": "string",
- "driverPartNote": "string"
}, - "subStates": [
- {
- "date": "2019-08-24T14:15:22Z",
- "code": "string",
- "label": "string",
- "note": "string",
- "type": "string",
- "photos": [
- "string"
], - "position": {
- "latitude": 0,
- "longitude": 0
}
}
]
}, - "transportSections": [
- {
- "departure": {
- "address": {
- "addressId": "string",
- "name": "string",
- "position": {
- "latitude": 0,
- "longitude": 0
}, - "site": "string",
- "stoppingPoint": "string",
- "type": "string"
}, - "pointType": "string",
- "estimatedArrivalDate": "2019-08-24T14:15:22Z",
- "arrivalDate": "2019-08-24T14:15:22Z",
- "estimatedDepartureDate": "2019-08-24T14:15:22Z",
- "departureDate": "2019-08-24T14:15:22Z",
- "estimatedActionDate": "2019-08-24T14:15:22Z",
- "actionDate": "2019-08-24T14:15:22Z",
- "secondPartFullName": "string",
- "secondPartNote": "string",
- "driverPartNote": "string"
}, - "arrival": {
- "address": {
- "addressId": "string",
- "name": "string",
- "position": {
- "latitude": 0,
- "longitude": 0
}, - "site": "string",
- "stoppingPoint": "string",
- "type": "string"
}, - "pointType": "string",
- "estimatedArrivalDate": "2019-08-24T14:15:22Z",
- "arrivalDate": "2019-08-24T14:15:22Z",
- "estimatedDepartureDate": "2019-08-24T14:15:22Z",
- "departureDate": "2019-08-24T14:15:22Z",
- "estimatedActionDate": "2019-08-24T14:15:22Z",
- "actionDate": "2019-08-24T14:15:22Z",
- "secondPartFullName": "string",
- "secondPartNote": "string",
- "driverPartNote": "string"
}, - "subStates": [
- {
- "date": "2019-08-24T14:15:22Z",
- "code": "string",
- "label": "string",
- "note": "string",
- "type": "string",
- "photos": [
- "string"
], - "position": {
- "latitude": 0,
- "longitude": 0
}
}
]
}
], - "packages": [
- {
- "barCode": "string",
- "ict": "string",
- "partNo": "string",
- "customerReference": "string",
- "packageNature": "string",
- "width": 0,
- "length": 0,
- "height": 0,
- "weight": 0
}
], - "hazardousMaterialInfo": {
- "unCode": "string",
- "specialDisposition274": "string"
}
}, - "finalAnomalies": [
- {
- "code": "string",
- "label": "string",
- "note": "string"
}
], - "contractualLogisticVolumeInfo": {
- "contract": "string",
- "site": "string",
- "activity": "string",
- "macroFlow": "string",
- "detailedFlow": "string"
}, - "contractualLogisticDeliveryVolumeInfo": {
- "contract": "string",
- "site": "string",
- "activity": "string",
- "macroFlow": "string",
- "detailedFlow": "string"
}, - "contractualLogisticSLAInfo": {
- "contract": "string",
- "site": "string",
- "activity": "string",
- "macroFlow": "string",
- "detailedFlow": "string"
}, - "contractualTransportVolumeInfo": {
- "contract": "string",
- "activity": "string"
}, - "contractualTransportSLAInfo": {
- "contract": "string",
- "criticality": "string",
- "mode": "string",
- "slaFlow": "string",
- "packageType": "string"
}
}
], - "paging": {
- "pageCount": 0,
- "totalItemCount": 0,
- "pageNumber": 0,
- "pageSize": 0,
- "hasPreviousPage": true,
- "hasNextPage": true,
- "isFirstPage": true,
- "isLastPage": true
}
}| _ids | string List of request _id, separated by a comma |
| dateFrom required | string The inclusive start date and time for the search |
| dateTo | string <date-time> The exclusive end date and time for the search. |
| startIndex | integer Default: 0 Pagination start index (offset). |
| count | integer <= 200 Default: 10 Pagination count (page size). |
{- "data": [
- {
- "_id": "string",
- "endToEndCommonReference": "string",
- "requests": [
- "string"
], - "requestedByFullName": "string",
- "creationDate": "2019-08-24T14:15:22Z",
- "startDate": "2019-08-24T14:15:22Z",
- "displayedStartDate": "2019-08-24T14:15:22Z",
- "displayedCompletionDate": "2019-08-24T14:15:22Z",
- "plannedStartDate": "2019-08-24T14:15:22Z",
- "plannedCompletionDate": "2019-08-24T14:15:22Z",
- "contractualStartDate": "2019-08-24T14:15:22Z",
- "contractualCompletionDate": "2019-08-24T14:15:22Z",
- "lastUpdateDate": "2019-08-24T14:15:22Z",
- "completionDate": "2019-08-24T14:15:22Z",
- "status": "string",
- "progression": 0,
- "departurePoint": "string",
- "arrivalPoint": "string",
- "alert": "string",
- "emergencyLevel": "string",
- "success": 1,
- "successAfterRectification": 1,
- "successScan": 1,
- "finalAnomalies": [
- {
- "code": "string",
- "label": "string",
- "note": "string"
}
], - "site": "string",
- "contractualEndToEndSLAInfo": {
- "category": "string",
- "mode": "string",
- "detail": "string"
}
}
], - "paging": {
- "pageCount": 0,
- "totalItemCount": 0,
- "pageNumber": 0,
- "pageSize": 0,
- "hasPreviousPage": true,
- "hasNextPage": true,
- "isFirstPage": true,
- "isLastPage": true
}
}