Certificate of incorporation

Comprehensive capture and extraction of Certificates of incorporation.

Certificate of incorporation is a legal document for every company. Some government services or financial companies may require that document to provide their services.

Introduction

Datakeen's OCR service automatically extracts information from Certificates of incorporation.

  • Information is captured as structured data and can be extracted as a .json file through our API.
Extracted information
- RCS
- Date of registration
- Company address
- Company activity
- Legal form
- Company name
- Capital
- Members' information

Setting up the API

The synchronous API model extracts data from ID cards in real time. The synchronous API model also performs verification checks in order to control Document Validity, MRZ conformity and Data consistency.

📘

API token is required

In order to perform any call, you will need an API token that can be retrieved thanks your API credentials. To learn about authentification, please refer to this page

curl --request POST \
     --url https://api.datakeen.co/api/v1/reco/kbis \
     --header 'accept: application/json' \
     --header 'content-type: application/json'
npm install api --save

const sdk = require('api')('@datakeen/v1.4.0#ax268r1ilnd0liqe');

sdk.postRecoId()
  .then(({ data }) => console.log(data))
  .catch(err => console.error(err));
require 'uri'
require 'net/http'

url = URI("https://api.datakeen.co/api/v1/reco/kbis")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["accept"] = 'application/json'
request["content-type"] = 'application/json'

response = http.request(request)
puts response.read_body
composer require guzzlehttp/guzzle

<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://api.datakeen.co/api/v1/reco/kbis', [
  'headers' => [
    'accept' => 'application/json',
    'content-type' => 'application/json',
  ],
]);

echo $response->getBody();
python -m pip install requests

import requests

url = "https://api.datakeen.co/api/v1/reco/kbis"

headers = {
    "accept": "application/json",
    "content-type": "application/json"
}

response = requests.post(url, headers=headers)

print(response.text)
CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.datakeen.co/api/v1/reco/kbis");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "accept: application/json");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);
dotnet add package RestSharp

using RestSharp;


var options = new RestClientOptions("https://api.datakeen.co/api/v1/reco/kbis");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("content-type", "application/json");
var response = await client.PostAsync(request);

Console.WriteLine("{0}", response.Content);

CURL *hnd = curl_easy_init();

curl_easy_setopt(hnd, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(hnd, CURLOPT_WRITEDATA, stdout);
curl_easy_setopt(hnd, CURLOPT_URL, "https://api.datakeen.co/api/v1/reco/kbis");

struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "accept: application/json");
headers = curl_slist_append(headers, "content-type: application/json");
curl_easy_setopt(hnd, CURLOPT_HTTPHEADER, headers);

CURLcode ret = curl_easy_perform(hnd);
(require '[clj-http.client :as client])

(client/post "https://api.datakeen.co/api/v1/reco/kbis" {:content-type :json
                                                       :accept :json})
package main

import (
	"fmt"
	"net/http"
	"io"
)

func main() {

	url := "https://api.datakeen.co/api/v1/reco/kbis"

	req, _ := http.NewRequest("POST", url, nil)

	req.Header.Add("accept", "application/json")
	req.Header.Add("content-type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(string(body))

}
POST /api/v1/reco/kbis HTTP/1.1
Accept: application/json
Content-Type: application/json
Host: api.datakeen.co
OkHttpClient client = new OkHttpClient();

Request request = new Request.Builder()
  .url("https://api.datakeen.co/api/v1/reco/kbis")
  .post(null)
  .addHeader("accept", "application/json")
  .addHeader("content-type", "application/json")
  .build();

Response response = client.newCall(request).execute();
const options = {
  method: 'POST',
  headers: {accept: 'application/json', 'content-type': 'application/json'}
};

fetch('https://api.datakeen.co/api/v1/reco/kbis', options)
  .then(response => response.json())
  .then(response => console.log(response))
  .catch(err => console.error(err));
val client = OkHttpClient()

val request = Request.Builder()
  .url("https://api.datakeen.co/api/v1/reco/kbis")
  .post(null)
  .addHeader("accept", "application/json")
  .addHeader("content-type", "application/json")
  .build()

val response = client.newCall(request).execute()
#import <Foundation/Foundation.h>

NSDictionary *headers = @{ @"accept": @"application/json",
                           @"content-type": @"application/json" };

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://api.datakeen.co/api/v1/reco/kbis"]
                                                       cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setAllHTTPHeaderFields:headers];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
                                            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                                                if (error) {
                                                    NSLog(@"%@", error);
                                                } else {
                                                    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
                                                    NSLog(@"%@", httpResponse);
                                                }
                                            }];
[dataTask resume];
open Cohttp_lwt_unix
open Cohttp
open Lwt

let uri = Uri.of_string "https://api.datakeen.co/api/v1/reco/kbis" in
let headers = Header.add_list (Header.init ()) [
  ("accept", "application/json");
  ("content-type", "application/json");
] in

Client.call ~headers `POST uri
>>= fun (res, body_stream) ->
  (* Do stuff with the result *)
$headers=@{}
$headers.Add("accept", "application/json")
$headers.Add("content-type", "application/json")
$response = Invoke-WebRequest -Uri 'https://api.datakeen.co/api/v1/reco/kbis' -Method POST -Headers $headers
library(httr)

url <- "https://api.datakeen.co/api/v1/reco/kbis"

response <- VERB("POST", url, content_type("application/json"), accept("application/json"))

content(response, "text")
import Foundation

let headers = [
  "accept": "application/json",
  "content-type": "application/json"
]

let request = NSMutableURLRequest(url: NSURL(string: "https://api.datakeen.co/api/v1/reco/kbis")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()

🚧

Sending multiple documents

Scans, pictures and documents should be sent one by one. Front and back the same document cannot be sent in the same file. If you want to send multiple scans at the same time, please refer to the multi-docs API.

API Response

An instance of the usual response is displayed in the following JSON. You will find the complete information, including extraction and checks. More detailed examples of each extracted field are given below.

{
    "extractedInformation": {
        "activity": {
            "confidence": null,
            "value": ""
        },
        "capital": {
            "confidence": 1.0,
            "value": "10000,00 EUROS"
        },
        "companyAddress": {
            "confidence": 1.0,
            "value": "75 avenue des Champs-Elys\u00e9es 75008 Paris"
        },
        "companyName": {
            "confidence": 0.98,
            "value": "INFONET"
        },
        "legalForm": {
            "confidence": 1.0,
            "value": "Soci\u00e9t\u00e9 par actions simplifi\u00e9e"
        },
        "persons": [
            {
                "birthDate": {
                    "confidence": 1.0,
                    "value": "19/02/1979"
                },
                "birthPlace": {
                    "confidence": 1.0,
                    "value": "PARIS 9\u00e8me (75)"
                },
                "citizenship": {
                    "confidence": 1.0,
                    "value": "Fran\u00e7aise"
                },
                "name": {
                    "confidence": 0.88,
                    "value": "JULIEN DUP\u00c9"
                },
                "personalAddress": {
                    "confidence": 1.0,
                    "value": "42 rue Duris 75020 Paris"
                }
            }
        ],
        "rcs": {
            "confidence": 0.9,
            "value": "123 456 789 R.C.S. Paris"
        },
        "registrationDate": {
            "confidence": 1.0,
            "value": "16/09/2014"
        }
    },
    "message": "",
    "status": 200
}

Extracted information format

For each field, the confidence value indicates the degree of certainty of the extraction with regard to the data on the certificate of incorportation.

Company Name

The companyName (key) on the document is returned as a string (value).

companyNameValue
valuestring
confidencenumber
"companyName": {
  "confidence": 0.98,
  "value": "INFONET"
}

RCS

The rcs (key) on the document is returned as a string (value).

rcsValue
valuestring
confidencenumber
"rcs": {
  "confidence": 0.9,
  "value": "123 456 789 R.C.S. Paris"
}

Date of registration

The registrationDate (key) on the document is returned as a string (value).

registrationDateValue
valuestring
confidencenumber
"registrationDate": {
  "confidence": 1.0,
  "value": "16/09/2014"
}

Company address

The companyAddress (key) on the document is returned as a string (value).

companyAddressValue
valuestring
confidencenumber
"companyAddress": {
  "confidence": 1.0,
  "value": "75 avenue des Champs-Elys\u00e9es 75008 Paris"
}

Company activity

The activity (key) on the document is returned as a string (value).

activityValue
valuestring
confidencenumber
"activity": {
  "confidence": null,
  "value": ""
}

Legal form

The legalForm (key) on the document is returned as a string (value).

legalFormValue
valuestring
confidencenumber
"legalForm": {
  "confidence": 1.0,
  "value": "Soci\u00e9t\u00e9 par actions simplifi\u00e9e"
}

Capital

The capital (key) on the document is returned as a string (value).

capitalValue
valuestring
confidencenumber
"capital": {
  "confidence": 1.0,
  "value": "10000,00 EUROS"
}

Members' information

The persons (key) on the document is returned as a list (value). Each element of list describes a member's information. These information are: full name (name), date of birth (birthDate), place of birth (birthPlace), country of citizenship (citizenship) and personal address (personalAddress)

nameValue
valuestring
confidencenumber
"persons": [
            {
                "birthDate": {
                    "confidence": 1.0,
                    "value": "19/02/1979"
                },
                "birthPlace": {
                    "confidence": 1.0,
                    "value": "PARIS 9\u00e8me (75)"
                },
                "citizenship": {
                    "confidence": 1.0,
                    "value": "Fran\u00e7aise"
                },
                "name": {
                    "confidence": 0.88,
                    "value": "JULIEN DUP\u00c9"
                },
                "personalAddress": {
                    "confidence": 1.0,
                    "value": "42 rue Duris 75020 Paris"
                }
            }
        ]

🚧

Loaded scans must pass prerequisites

To provide a qualitative service and a comprehensive data capture, every picture, scan, or document sent to our API must comply with determined prerequisites which can be found on this page

❗️

API limitations

  • Maximum size : 5 MB
  • Maximum number of calls per minute : 10 calls

What’s Next

Ready to process certificates of incorporation ? See our API Reference for detailed information