Appearance
Face Cutout 
It automatically segments the face and hair of a person or a pet (cat or dog) in the photo with great accuracy and fast speed. It is suitable for applications including print-on-demand (POD), emojis, avatars, headshot profile pictures, etc.
API Mode 1 : Return binary stream 
Sample Code 
bash
curl -H 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
  -F 'file=@/path/to/file.jpg'     \
  -f 'https://www.cutout.pro/api/v1/matting?mattingType=3&crop=true' \
  -o out.pngpython
  import requests
  response = requests.post(
  	'https://www.cutout.pro/api/v1/matting?mattingType=3',
  	files={'file': open('/path/to/file.jpg', 'rb')},
  	headers={'APIKEY': 'INSERT_YOUR_API_KEY_HERE'},
  )
  with open('out.png', 'wb') as out:
  	out.write(response.content)php
  $client = new GuzzleHttp\Client();
  $res = $client->post('https://www.cutout.pro/api/v1/matting?mattingType=3', [
  	'multipart' => [
  		[
  			'name'     => 'file',
  			'contents' => fopen('/path/to/file.jpg', 'r')
  		]
  	],
  	'headers' => [
  		'APIKEY' => 'INSERT_YOUR_API_KEY_HERE'
  	]
  ]);
  $fp = fopen("out.png", "wb");
  fwrite($fp, $res->getBody());
  fclose($fp);java
  File file = new File("/Your/Image/File/Path");
  
  CloseableHttpClient client = HttpClients.createDefault();
  
  HttpPost httpPost = new HttpPost("https://www.cutout.pro/api/v1/matting?mattingType=3");
  httpPost.setHeader("APIKEY", "INSERT_YOUR_API_KEY_HERE");
  
  MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
  multipartEntityBuilder.addBinaryBody("file", file);
  httpPost.setEntity(multipartEntityBuilder.build());
  
  try (CloseableHttpResponse response = client.execute(httpPost)){
  	if (response.getStatusLine().getStatusCode() == HttpStatusCode.OK) {
  		//save to local storage
  		byte[] bytes = EntityUtils.toByteArray(response.getEntity());
  		FileOutputStream outputStream = new FileOutputStream("/Image/File/Path");
  		outputStream.write(bytes);
  	}
  } catch (IOException e) {
  	e.printStackTrace();
  }nodejs
  var request = require('request');
  var fs = require('fs');
  request.post({
    url: 'https://www.cutout.pro/api/v1/matting?mattingType=3',
    formData: {
  	file: fs.createReadStream('/path/to/file.jpg')
    },
    headers: {
  	'APIKEY': 'INSERT_YOUR_API_KEY_HERE'
    },
    encoding: null
  }, function(error, response, body) {
    // console.log(response);
  });.net
  using (var client = new HttpClient())
  using (var formData = new MultipartFormDataContent())
  {
  	formData.Headers.Add("APIKEY", "INSERT_YOUR_API_KEY_HERE");
  	formData.Add(new ByteArrayContent(File.ReadAllBytes("/path/to/file.jpg")), "file", "file.jpg");
  	var response = client.PostAsync("https://www.cutout.pro/api/v1/matting?mattingType=3", formData).Result;
  	if(response.IsSuccessStatusCode) {
  		//todo: Handle your logic
  	} else {
  		//todo: Handle your logic
  	}
  }objective-c
  NSURL *fileUrl = [NSBundle.mainBundle URLForResource:@"file" withExtension:@"jpg"];
  NSData *data = [NSData dataWithContentsOfURL:fileUrl];
  if (!data) {
  	return;
  }
  AFHTTPSessionManager *manager =
  [[AFHTTPSessionManager alloc] initWithSessionConfiguration:
   NSURLSessionConfiguration.defaultSessionConfiguration];
  manager.responseSerializer = [AFImageResponseSerializer serializer];
  [manager.requestSerializer setValue:@"INSERT_YOUR_API_KEY_HERE"
  				 forHTTPHeaderField:@"APIKEY"];
  NSURLSessionDataTask *dataTask = [manager
  	  POST:@"https://www.cutout.pro/api/v1/matting?mattingType=3"
  	  parameters:nil
  	  constructingBodyWithBlock:^(id  _Nonnull formData) {
  		  [formData appendPartWithFileData:data
  									  name:@"file"
  								  fileName:@"file.jpg"
  								  mimeType:@"image/jpeg"];
  	  }
  	  progress:nil
  	  success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
  		  // Handle your logic
  	  } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  		  // Handle your logic
  	  }];
  [dataTask resume];API documentation 
User requests to segments the face and hair of a person or a pet (cat or dog) from a picture, and the server returns the transparent image of face and hair in binary format.
Request description 
- Request URL: https://www.cutout.pro/api/v1/matting?mattingType=3 
- Request method: POST 
- Return type: PNG image 
- Content-Type: multipart/form-data 
Input parameters:
(1) Request parameters (Header)
| Parameter | Parameter Type | Description | 
|---|---|---|
| APIKEY | string | Your API Key | 
(2) Request parameters (Body)
| Parameter | Description | Required | 
|---|---|---|
| file | Picture file | Yes | 
| crop | Whether to crop off all empty areas (default: false). If URL parameter is used, add the “crop” parameter after the URL. | No | 
| bgcolor | Add a solid background color to the resulting image (default: no background color specified). The color is specified in the format of hex color code (e.g., FFFFFF). If URL parameter is used, add the “bgcolor” parameter after the URL. | No | 
| preview | When this parameter is passed in preview image processing, the maximum preview image resolution received is: 500 * 500. If the maximum preview resolution is exceeded, the image will be adjusted to 500 * 500 resolution, and the number of credits deducted from each image is: 0.25, (If this parameter is not passed or the value is false, the number of credits deducted for each image is: 1), the value type: true or false, the default value is: false | No | 
| outputFormat | The output image format, which can be: png, webp, jpg_$quality($quality is the quality used to compress the image, the value is between 0 and 100, for example: jpg_75) the default value is: png | No | 
Response description 
- Normal return Return an image with background removed, in binary format and the content-type is image/png. 
- Error return if any error occurs, the response will be in json format. 
{
  "code": 1001, //
  "data": null
  "msg": 'Insufficient balance',
  "time": 1590462453264
}API Mode 2: Return base64 encoded string 
Sample Code 
bash
curl -H 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
  -F 'file=@/path/to/file.jpg'     \
  -f 'https://www.cutout.pro/api/v1/matting2?mattingType=3&crop=true' \
  -o out.pngpython
  import requests
  response = requests.post(
  	'https://www.cutout.pro/api/v1/matting2?mattingType=3',
  	files={'file': open('/path/to/file.jpg', 'rb')},
  	headers={'APIKEY': 'INSERT_YOUR_API_KEY_HERE'},
  )php
  $client = new GuzzleHttp\Client();
  $res = $client->post('https://www.cutout.pro/api/v1/matting?mattingType=3', [
  	'multipart' => [
  		[
  			'name'     => 'file',
  			'contents' => fopen('/path/to/file.jpg', 'r')
  		]
  	],
  	'headers' => [
  		'APIKEY' => 'INSERT_YOUR_API_KEY_HERE'
  	]
  ]);java
  File file = new File("/Your/Image/File/Path");
  
  CloseableHttpClient client = HttpClients.createDefault();
  
  HttpPost httpPost = new HttpPost("https://www.cutout.pro/api/v1/matting2?mattingType=3");
  httpPost.setHeader("APIKEY", "INSERT_YOUR_API_KEY_HERE");
  
  MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
  multipartEntityBuilder.addBinaryBody("file", file);
  httpPost.setEntity(multipartEntityBuilder.build());
  
  CloseableHttpResponse response = client.execute(httpPost);nodejs
  var request = require('request');
  var fs = require('fs');
  request.post({
    url: 'https://www.cutout.pro/api/v1/matting2?mattingType=3',
    formData: {
  	file: fs.createReadStream('/path/to/file.jpg')
    },
    headers: {
  	'APIKEY': 'INSERT_YOUR_API_KEY_HERE'
    },
    encoding: null
  }, function(error, response, body) {
    // console.log(response);
  });.net
  using (var client = new HttpClient())
  using (var formData = new MultipartFormDataContent())
  {
  	formData.Headers.Add("APIKEY", "INSERT_YOUR_API_KEY_HERE");
  	formData.Add(new ByteArrayContent(File.ReadAllBytes("/path/to/file.jpg")), "file", "file.jpg");
  	var response = client.PostAsync("https://www.cutout.pro/api/v1/matting2?mattingType=3", formData).Result;
  	if(response.IsSuccessStatusCode) {
  		//todo: Handle your logic
  	} else {
  		//todo: Handle your logic
  	}
  }objective-c
  NSURL *fileUrl = [NSBundle.mainBundle URLForResource:@"file" withExtension:@"jpg"];
  NSData *data = [NSData dataWithContentsOfURL:fileUrl];
  if (!data) {
  	return;
  }
  AFHTTPSessionManager *manager =
  [[AFHTTPSessionManager alloc] initWithSessionConfiguration:
   NSURLSessionConfiguration.defaultSessionConfiguration];
  manager.responseSerializer = [AFJSONResponseSerializer serializer];
  [manager.requestSerializer setValue:@"INSERT_YOUR_API_KEY_HERE"
  				 forHTTPHeaderField:@"APIKEY"];
  NSURLSessionDataTask *dataTask = [manager
  	  POST:@"https://www.cutout.pro/api/v1/matting2?mattingType=3"
  	  parameters:nil
  	  constructingBodyWithBlock:^(id  _Nonnull formData) {
  		  [formData appendPartWithFileData:data
  									  name:@"file"
  								  fileName:@"file.jpg"
  								  mimeType:@"image/jpeg"];
  	  }
  	  progress:nil
  	  success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
  		  // Handle your logic
  	  } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
  		  // Handle your logic
  	  }];
  [dataTask resume];API documentation 
User requests to segments the face and hair of a person or a pet (cat or dog) from a picture, and the server returns the transparent image of face and hair in base64 encoded format.
Request description 
- Request URL: https://www.cutout.pro/api/v1/matting?mattingType=3 
- Request method: POST 
- Return type: PNG image 
- Content-Type: multipart/form-data 
Input parameters:
(1) Request parameters (Header)
| Parameter | Parameter Type | Description | 
|---|---|---|
| APIKEY | string | Your API Key | 
(2) Request parameters (Body)
| Parameter | Description | Required | 
|---|---|---|
| file | Picture file | Yes | 
| crop | Whether to crop off all empty areas (default: false). If URL parameter is used, add the “crop” parameter after the URL. | No | 
| bgcolor | Add a solid background color to the resulting image (default: no background color specified). The color is specified in the format of hex color code (e.g., FFFFFF). If URL parameter is used, add the “bgcolor” parameter after the URL. | No | 
| preview | When this parameter is passed in preview image processing, the maximum preview image resolution received is: 500 * 500. If the maximum preview resolution is exceeded, the image will be adjusted to 500 * 500 resolution, and the number of credits deducted from each image is: 0.25, (If this parameter is not passed or the value is false, the number of credits deducted for each image is: 1), the value type: true or false, the default value is: false | No | 
| faceAnalysis | Boolean value: true or false. When true, the information with face detection points is returned. | No | 
| outputFormat | The output image format, which can be: png, webp, jpg_$quality($quality is the quality used to compress the image, the value is between 0 and 100, for example: jpg_75) the default value is: png | No | 
Response description 
- Normal return
{
    "code": 0,
    "data": {
		"imageBase: "iVBORw0KGgo..." //base64 encoded string of the image with background removed
    },
    "msg": null,
    "time": 1590462453264
}- Information return with face detection points
{
   "code": 0,
   "data":{
      "imageBase64":"iVBORw0KGgoAAAANSUhEUgAABqMAAAg3CAYAAAC7wX7xAAAgAElE....",
      "faceAnalysis":{
          "face_num": 1, //face nums
          "faces": [  //face_num*8 array, from index order:p1(x,y),p3(x,y),p2(x,y),p4(x,y).  Please refer to the picture below!
               [
                   236.4606096446514,
                   497.67069862782955,
                   1492.7539091706276,
                   2050.210829436779,
                   236.4606096446514,
                   497.67069862782955,
                   1492.7539091706276,
                   2050.210829436779
               ]
           ]
          "point":[
             [
                [
                   213.5859375, //Coordinate x point
                   1035.0703125 //Coordinate y point
                ],
                [
                   221.80078125,
                   1219.904296875
                ]
                ......//A total of 68 points are returned. Please refer to the point picture below in the order of array index values.
             ]
          ]
      }
   },
   "msg": null,
   "time": 1620798570850
}- Point sample picture  
- Error return if any error occurs, the response will be in json format. 
{
  "code": 1001, //
  "data": null
  "msg": 'Insufficient balance',
  "time": 1590462453264
}API Mode 3: Return base64 encoded via image URL 
Sample Code 
bash
  curl -X GET --header 'Accept: application/json' \
  --header 'APIKEY: INSERT_YOUR_API_KEY_HERE' \
  'https://www.cutout.pro/api/v1/mattingByUrl?url=https%3A%2F%2Fd38b044pevnwc9.cloudfront.net%2Fsite%2Fen%2FcutoutImg%2Fheadcutout%2Fh-4.jpg&mattingType=3'API documentation 
User requests to segments the face and hair of a person or a pet (cat or dog) from a picture by url, and the server returns the transparent image of face and hair in base64 encoded format.
Request description 
- Request URL: https://www.cutout.pro/api/v1/mattingByUrl?mattingType=3 
- Request method: GET 
- Content-Type: multipart/form-data 
Input parameters:
(1) Request parameters (Header)
| Parameter | Parameter Type | Description | 
|---|---|---|
| APIKEY | string | Your API Key | 
(2) Request parameters (query string)
| Parameter | Description | Required | 
|---|---|---|
| url | The URL of the source picture | Yes | 
| crop | Whether to crop off all empty areas (default: false). If URL parameter is used, add the “crop” parameter after the URL. | No | 
| bgcolor | Add a solid background color to the resulting image (default: no background color specified). The color is specified in the format of hex color code (e.g., FFFFFF). If URL parameter is used, add the “bgcolor” parameter after the URL. | No | 
| preview | When this parameter is passed in preview image processing, the maximum preview image resolution received is: 500 * 500. If the maximum preview resolution is exceeded, the image will be adjusted to 500 * 500 resolution, and the number of credits deducted from each image is: 0.25, (If this parameter is not passed or the value is false, the number of credits deducted for each image is: 1), the value type: true or false, the default value is: false | No | 
| outputFormat | The output image format, which can be: png, webp, jpg_$quality($quality is the quality used to compress the image, the value is between 0 and 100, for example: jpg_75) the default value is: png | No | 
Response description 
- Normal return
{
    "code": 0,
    "data": {
		"imageBase: "iVBORw0KGgo..." //base64 encoded string of the image with background removed
    },
    "msg": null,
    "time": 1590462453264
}- Error return if any error occurs, the response will be in json format.
{
  "code": 1001, //
  "data": null
  "msg": 'Insufficient balance',
  "time": 1590462453264
}Frequently asked questions 
- Q: What are the requirements for the input image format?
- A: Support PNG, JPG, JPEG, BMP, WEBP
- Q: Is there a limit to the supported image size?
- A: The maximum resolution uploaded at present is 4096x4096 pixels, and the image file size is less than 15MB
- Q: Request QPS limit?
- A: Supports 5 simultaneous requests per second
