Getting started
Disclaimer (sandboxed version)
This CAMARA Sandbox - KYC Match - Orange lab API is a sandboxed version of the production-grade CAMARA - KYC Match API.
It is running in our lab, against a small list of lab-specific mobile devices (see list of phone number available for test below).
This API could be suspended or upgraded any time without any notice.
Introduction
The CAMARA KYC Match API provides a standardized mechanism to customer with the ability to compare the information it (Service Provider, SP) has for a particular user with that on file (and verified) by the user's Operator in their own KYC records, in order for the SP to confirm the accuracy of the information and provide a specific service to the user
Subscribe to the API
You get the Authorization header credentials when you register your application on the [Orange Developer Console] (https://developer.orange.com/myapps).
API Authentication
Note: In production environment the KYC Match API will require a 3-Legged OAuth 2.0 flow but as this implementation is provided on Orange Lab, the API works with a 2-Legged OAuth.
To learn more about how Orange Developer handles authentication, please refer to our documentation.
In short, you will use your Orange Developer Authorization header as authorization_header for the Basic authentication with Orange Developer.
curl -X POST \
-H "Authorization: {{ authorization_header }}" \
-d "grant_type=client_credentials" \
https://api.orange.com/oauth/v3/token
In response, you will get an access_token
.
{
"token_type": "Bearer",
"access_token": "66AeYJF8eJQ...2SjkFg9LB1LePC",
"expires_in": "3600"
}
API Description
Summary of resources
This API has one resource match. MatchResult attribute provides in the response information about mobile equipment location check.
Summary of methods and URL
Use case of operation | URL method |
---|---|
I want to confirm (using my application server/backend service) the identity of a customer by comparison to MNO user's information. Information which could be provided are phone number, given name, family name, street address, city, country, region, postal code, birthdate, email address, etc. | POST "https://api.orange.com/camara/orange-lab/kyc-match/v0/match" |
Summary of request body parameters
In bold parameters currently available in Orange France API
Name | Type | Description | Mandatory |
---|---|---|---|
phoneNumber | string | Subscriber number in E.164 format (starting with country code). Optionally prefixed with '+' | No |
idDocument | string | Id number associated to the official identity document in the country. It may contain alphanumeric characters | No |
name | string | Complete name of the customer, usually composed of first/given name and last/family/sur- name in a country. Depending on the country, the order of first/give name and last/family/sur- name varies, and middle name could be included. It can use givenName, middleNames, familyName and/or familyNameAtBirth. For example, in ESP, name+familyName; in NLD, it can be name+middleNames+familyName or name+middleNames+familyNameAtBirth, etc | |
givenName | string | First/given name or compound first/given name of the customer | No |
familyName | string | Last name, family name, or surname of the customer | No |
nameKanaHankaku | string | Complete name of the customer in Hankaku-Kana format (reading of name) for Japan | No |
nameKanaZenkaku | string | Complete name of the customer in Zenkaku-Kana format (reading of name) for Japan | No |
middleNames | string | Middle name/s of the customer | No |
familyNameAtBirth | string | Last/family/sur- name at birth of the customer | No |
address | string | Complete address of the customer. For some countries, it is built following the usual concatenation of parameters in a country, but for other countries, this is not the case. For some countries, it can use streetName, streetNumber and/or houseNumberExtension. For example, in ESP, streetName+streetNumber; in NLD, it can be streetName+streetNumber or streetName+streetNumber+houseNumberExtension | No |
streetName | string | Name of the street of the customer's address. It should not include the type of the street | No |
streetNumber | string | The street number of the customer's address. Number identifying a specific property on the 'streetName' | No |
postalCode | string | Zip code or postal code | No |
region | string | Region/prefecture of the customer's address | No |
locality | string | Locality of the customer's address | No |
country | string | Country of the customer's address. Format ISO 3166-1 alpha-2 | No |
houseNumberExtension | string | Specific identifier of the house needed depending on the property type. For example, number of apartment in an apartment building | No |
birthdate | string | The birthdate of the customer, in ISO 8601 calendar date format (YYYY-MM-DD) | No |
string | Email address of the customer in the RFC specified format (local-part@domain) | No | |
gender | string | Gender of the customer (Male/Female/Other) | No |
Lab implementation specific:
As KYC Match - CAMARA Sandbox - Orange lab offer implements a 2-Legged authentication, phoneNumber is required in the request body and must belong to the following list and corresponding identities (other will not work).
Note:
- Identities are a pure fake identities generated with a tool.
Phone Number | Given name | Family Name | address | Postal code | Locality | country | birthdate | |
---|---|---|---|---|---|---|---|---|
+33699901031 | Maeva | Huart | 12 impasse Samson | 70691 | Pottiernec | fr | 1978-08-22 | maeva.huart@voila.fr |
+33699901032 | Victoria | Picard | avenue de Dupuy | 54779 | Besnard | fr | 1989-10-15 | victoria.picard@ledoux.fr |
+33699901033 | Lise | Lambrecq | 17 boulevard Delorme | 96344 | Charrier | fr | 2001-05-01 | lise.lambrecq@schmitt.org |
+33699901034 | Britney | Renaud | 7 avenue Berthelot | 93017 | Lamy-les-Bains | fr | 1965-11-04 | britney.renaud@bourgeois.com |
+33699901035 | Albane | Guillaume | 98 rue Blin | 79346 | Blindan | fr | 1999-08-14 | albane.guillaume@live.com |
+33699901036 | Achille | Lefevre | 57 rue Céline Aubry | 82909 | Thomas | fr | 1979-09-74 | achille.lefevre@stp.com |
+33699901037 | Thibault | Bonnet | 66 rue de Pottier | 52953 | Devaux | fr | 2002-08-21 | thibault.bonnet@wanadoo.fr |
+33699901038 | Joseph | Mauvieux | chemin Pruvost | 46570 | Ribeiro | fr | 1983-04-04 | joseph.mauvieux@perret.net |
+33699901039 | Elie | Coolen | 529 place Jacqueline Robin | 28307 | Bouchetboeuf | fr | 1983-10-14 | elie.coolen@ifrance.com |
+33699901040 | Peter | Lefebvre | 14 boulevard de Perrier | 44000 | Gilbert | fr | 1998-07-18 | peter.lefebvre@sfr.fr |
Example of Body value:
{
"phoneNumber": "+33699901031",
"givenName": "Maeva",
"familyName": "Huart",
"locality": "Pottiernec",
"address": "12 impasse Samson",
"postalCode": "70691",
"country": "fr",
"email": "maeva.huart@voila.fr",
"birthdate": "1978-08-22"
}
Summary of response parameters
In bold parameters currently available in Orange France API
Name | Type | Description | Mandatory |
---|---|---|---|
idDocumentMatch | string | Indicates whether Id number associated to the id_document of the customer matches with the one on the Operator's system | No |
nameMatch | string | Indicates whether the complete name of the customer matches with the one on the Operator's system | No |
nameMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the name stored in the operator's system | No |
givenNameMatch | string | Indicates whether the complete given name of the customer matches with the one on the Operator's system | No |
givenNameMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the given name stored in the operator's system | No |
familyNameMatchMatch | string | Indicates whether last name/ family name/ surname of the customer matches with the one on the Operator's system | No |
familyNameMatchMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the family name stored in the operator's system | No |
nameKanaHankakuMatch | string | Indicates whether complete name of the customer in Hankaku-Kana format (reading of name) for Japan matches with the one on the Operator's system | No |
nameKanaHankakuMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the name in Hankaku-Kana format stored in the operator's system | No |
nameKanaZenkakuMatch | string | Indicates whether complete name of the customer in Zenkaku-Kana format (reading of name) for Japan matches with the one on the Operator's system | No |
nameKanaZenkakuMatchScore | float | Indicat es the similarity score assigned to the input value when it does not exactly match the name in Zenkaku-Kana format stored in the operator's system | No |
middleNamesMatch | string | Indicates whether the middle names of the customer matches with the one on the Operator's system | No |
middleNamesMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the middle names stored in the operator's system | No |
familyNameAtBirthMatch | string | Indicates whether the Family Name At Birth of the customer matches with the one on the Operator's system | No |
familyNameAtBirthMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the family name at birth stored in the operator's system | No |
addressMatch | string | Indicates whether complete address of the customer matches with the one on the Operator's system | No |
addressMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the address stored in the operator's system | No |
streetNameMatch | string | Indicates whether the street name of the customer matches with the one on the Operator's system | No |
streetNameMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the street name stored in the operator's system | No |
streetNumberMatch | string | Indicates whether the street number of the customer matches with the one on the Operator's system | No |
streetNumberMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the street number stored in the operator's system | No |
postalCodeMatch | string | Indicates whether the postal code / zip code of the customer matches with the one on the Operator's system | No |
regionMatch | string | Indicates whether the region of the customer's address matches with the one on the Operator's system | No |
regionMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the region stored in the operator's system | No |
localityMatch | string | Indicates whether the locality of the customer's locality matches with the one on the Operator's system | No |
localityMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the locality stored in the operator's system | No |
countryMatch | string | Indicates whether the country of the customer's address matches with the one on the Operator's system | No |
countryMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the country stored in the operator's system | No |
houseNumberExtensionMatch | string | Indicates whether the house number extension of the customer's address with the one on the Operator's system | No |
birthdateMatch | string | Indicates whether the birthdate of the customer matches with the one on the Operator's system | No |
emailMatch | string | Indicates whether the email address of the customer matches with the one on the Operator's system | No |
emailMatchScore | float | Indicates the similarity score assigned to the input value when it does not exactly match the email stored in the operator's system | No |
genderMatch | string | Indicates whether the gender of the customer matches with the one on the Operator's system | No |
Request
curl -X POST "https://api.orange.com/camara/orange-lab/kyc-match/v0/match"
-H "Authorization: Bearer {your access token}"
-H "Cache-Control: no-cache"
-H 'accept: application/json'
-H 'Content-Type: application/json'
-d {
"phoneNumber": "+33699901031",
"givenName": "Maeva",
"familyName": "Hurt",
"address": "12 impasse Samson",
"locality": "Pottrnec",
"email": "maeva.huart@voila.fr"
}
Response
200 Match successful
Content-Type: application/json
{
"giventNameMatch": "True",
"familyNameMatch": "False",
"familyNameMatchScore": 90.85,
"addressMatch": "True",
"localityMatch": "False",
"localityMatchScore": 95.12,
"emailMatch": "True"
}
Fields description
The response contains
- MatchResult attributes valued to
true
when user's information matches exactely with information held by the MNO,false
when it doesn't match exactly ornot_available
when the MNO doesn't hold user's information. - MatchScore, a numerical value that quantifies the similarity between two pieces of text based on the words they contain for some MatchResult attributes in case of value is equal to
false
.
Most frequent errors
If invalid input are provided in particular for the device identifier a 400 error is triggered.
HTTP/1.1 400 Invalid input
Content-Type: application/json
{
"code": "INVALID_ARGUMENT",
"status": 400,
"message": "Invalid input"
}
If the network back end is not able to localize the equipment, a 404 error is sent.
HTTP/1.1 404 Not Found
Content-Type: application/json
{
"status": 404,
"code": "NOT_FOUND",
"message": "Unknown Location"
}
If the localisation service is not up and running, a 503 error is sent.
HTTP/1.1 503 Service unavailable
Content-Type: application/json
{
"code": "UNAVAILABLE",
"status": 503,
"message": "Service unavailable"
}
There are some cases where your client application will no longer gain access to API resources, and get an error back.
Please check the following points:
- Here, you attempt to use an expired or revoked access_token and you get an invalid token error. You will have to request a new access_token. As an example:
HTTP/1.1 401 Unauthorized
Content-Type: application/json
{
"code": "UNAUTHENTICATED",
"status": 401,
"message": "Authorization failed: ..."
}
- Here, you removed your subscription to the API so that the capability to generate an access_token is not allowed anymore. As an example:
HTTP/1.1 403 Forbidden
Content-Type: application/json
{
"code": "PERMISSION_DENIED",
"status": 403,
"message": "Operation not allowed: ..."
}
Looking for support ?
Facing technical issue when using this API ? please contact us
History of document
Version of the document | modification date | description of modifications |
---|---|---|
1.0 | 08/03/2024 | initialization by Orange CAMARA APIs team |