iOS Certificate Checker API

RESTful API for analyzing iOS certificates and provisioning profiles - V1.0

🚀 Quick Start

The iOS Certificate Checker API allows you to programmatically check and analyze iOS certificates (.p12) and provisioning profiles (.mobileprovision).

Base URL

https://tools.sidelix.vip/cert-ios-checker/api/

Rate Limiting

Note: API is rate-limited to 30 requests per minute per IP address.

Authentication

Currently, the API is open and does not require authentication. API key support may be added in the future.

📍 Endpoints

POST /api/

Check and analyze iOS certificate or provisioning profile

Request Parameters

Parameter Type Required Description
file File Required .p12 or .mobileprovision file
secondary_file File Optional Second file for comparison (must be different type)
password String Optional Password for P12 file (if encrypted)
disable_telegram String Optional Set to "true" to disable Telegram notifications (default: enabled)

Example Requests

Single File (P12 with password):

curl -X POST https://tools.sidelix.vip/cert-ios-checker/api/ \ -F "[email protected]" \ -F "password=your_password"

Single File (Mobileprovision):

curl -X POST https://tools.sidelix.vip/cert-ios-checker/api/ \ -F "[email protected]"

Both Files (P12 + Mobileprovision):

curl -X POST https://tools.sidelix.vip/cert-ios-checker/api/ \ -F "[email protected]" \ -F "[email protected]" \ -F "password=your_password"

Disable Telegram Notifications:

curl -X POST https://tools.sidelix.vip/cert-ios-checker/api/ \ -F "[email protected]" \ -F "password=your_password" \ -F "disable_telegram=true"

Single File:

const formData = new FormData(); formData.append('file', fileInput.files[0]); formData.append('password', 'your_password'); fetch('https://tools.sidelix.vip/cert-ios-checker/api/', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error));

Both Files (P12 + Mobileprovision):

const formData = new FormData(); formData.append('file', p12FileInput.files[0]); formData.append('secondary_file', mobileprovisionFileInput.files[0]); formData.append('password', 'your_password'); fetch('https://tools.sidelix.vip/cert-ios-checker/api/', { method: 'POST', body: formData }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error('Error:', error));

Single File:

import requests files = {'file': open('certificate.p12', 'rb')} data = {'password': 'your_password'} response = requests.post( 'https://tools.sidelix.vip/cert-ios-checker/api/', files=files, data=data ) print(response.json())

Both Files (P12 + Mobileprovision):

import requests files = { 'file': open('certificate.p12', 'rb'), 'secondary_file': open('profile.mobileprovision', 'rb') } data = {'password': 'your_password'} response = requests.post( 'https://tools.sidelix.vip/cert-ios-checker/api/', files=files, data=data ) print(response.json())

Single File:

$curl = curl_init(); $postData = [ 'file' => new CURLFile('certificate.p12'), 'password' => 'your_password' ]; curl_setopt_array($curl, [ CURLOPT_URL => 'https://tools.sidelix.vip/cert-ios-checker/api/', CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postData ]); $response = curl_exec($curl); curl_close($curl); $data = json_decode($response, true); print_r($data);

Both Files (P12 + Mobileprovision):

$curl = curl_init(); $postData = [ 'file' => new CURLFile('certificate.p12'), 'secondary_file' => new CURLFile('profile.mobileprovision'), 'password' => 'your_password' ]; curl_setopt_array($curl, [ CURLOPT_URL => 'https://tools.sidelix.vip/cert-ios-checker/api/', CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $postData ]); $response = curl_exec($curl); curl_close($curl); $data = json_decode($response, true); print_r($data);

📤 Response Format

🔗 Live Example

See a real certificate result page to understand the data structure and available information:

📱 View Example Certificate Result

This example shows all the certificate information, status, fingerprints, and entitlements returned by the API.

Success Response - Single P12 File

HTTP Status: 200 OK
{ "success": true, "data": { "result_id": "6ea2b7b4681caa270fc10d7752624a44", "result_url": "https://tools.sidelix.vip/cert-ios-checker/results.php?id=6ea2b7b4681caa270fc10d7752624a44", "certificate": { "certificate_info": { "subject": { "commonName": "iPhone Distribution: Company Name", "organizationName": "Company Name Ltd", "organizationalUnitName": "ABC123DEF4", "countryName": "US" }, "issuer": { "commonName": "Apple Worldwide Developer Relations Certification Authority", "organizationName": "Apple Inc.", "countryName": "US" }, "serial_number": "1234567890ABCDEF1234567890ABCDEF12345678", "validity_period": { "valid_from": "2024-01-15T10:30:45+00:00", "valid_to": "2025-01-14T10:30:45+00:00" }, "fingerprint_sha256": "A1:B2:C3:D4:E5:F6:..." }, "certificate_status": { "status": "Signed", "ocsp_status": "Good" }, "type": "Distribution Certificate", "entitlements": "Entitlements not applicable for p12 files" }, "cached": false, "files": { "primary": { "name": "certificate.p12", "type": "p12", "hash": "abc123def456..." }, "secondary": null } }, "message": "Certificate processed successfully" }

Success Response - Single Mobileprovision File

HTTP Status: 200 OK
{ "success": true, "data": { "certificate": { "certificate_info": { "subject": { "commonName": "iPhone Distribution: Company Name", "organizationName": "Company Name Ltd", "countryName": "US" }, "serial_number": "1234567890ABCDEF1234567890ABCDEF12345678", "validity_period": { "valid_from": "2024-01-15T10:30:45+00:00", "valid_to": "2025-01-14T10:30:45+00:00" } }, "certificate_status": { "status": "Signed", "ocsp_status": "Good" }, "type": "Enterprise Certificate", "entitlements": { "application-identifier": "ABC123DEF4.com.example.app", "com.apple.developer.team-identifier": "ABC123DEF4", "get-task-allow": false, "keychain-access-groups": [ "ABC123DEF4.*" ] }, "provisioning_info": { "name": "Company App Distribution Profile", "app_id_name": "Company App", "application_identifier": "ABC123DEF4.com.example.app", "team_name": "Company Name Ltd", "team_identifier": "ABC123DEF4", "provisions_all_devices": true, "expiration_date": "2025-01-14T10:30:45", "creation_date": "2024-01-14T10:30:45", "uuid": "abc12345-1234-5678-abcd-123456789012" } }, "cached": false, "files": { "primary": { "name": "profile.mobileprovision", "type": "mobileprovision", "hash": "def456abc789..." }, "secondary": null } }, "message": "Certificate processed successfully" }

Success Response - Both Files (P12 + Mobileprovision)

HTTP Status: 200 OK
{ "success": true, "data": { "certificate": { "certificate_info": { "subject": { "commonName": "iPhone Distribution: Company Name", "organizationName": "Company Name Ltd", "organizationalUnitName": "ABC123DEF4", "countryName": "US" }, "serial_number": "1234567890ABCDEF1234567890ABCDEF12345678", "validity_period": { "valid_from": "2024-01-15T10:30:45+00:00", "valid_to": "2025-01-14T10:30:45+00:00" } }, "certificate_status": { "status": "Signed", "ocsp_status": "Good" }, "type": "Distribution Certificate", "entitlements": { "application-identifier": "ABC123DEF4.com.example.app", "com.apple.developer.team-identifier": "ABC123DEF4", "get-task-allow": false }, "comparison_data": { "certificates_match": true, "p12_serial": "1234567890ABCDEF1234567890ABCDEF12345678", "mobileprovision_serial": "1234567890ABCDEF1234567890ABCDEF12345678", "match_status": "✅ Certificates Match" } }, "cached": false, "files": { "primary": { "name": "certificate.p12", "type": "p12", "hash": "abc123def456..." }, "secondary": { "name": "profile.mobileprovision", "type": "mobileprovision", "hash": "def456abc789..." } } }, "message": "Certificate processed successfully" }

Fake Certificate Detection Response

Note: The API automatically detects fake, renamed, or tampered certificates. When detected, additional fields are added to the response.
{ "success": true, "data": { "certificate": { "certificate_info": { "subject": { "commonName": "iPhone Distribution: Company Name", "organizationName": "Company Name Ltd" }, "serial_number": "1234567890..." }, "type": "Enterprise Certificate", "fake_detection": { "is_fake": true, "confidence": "high", "reason": "Certificate authenticity verification failed." }, "WARNING": "⚠️ FAKE/RENAMED CERTIFICATE DETECTED", "fake_alert": { "is_fake": true, "message": "This certificate failed our verifications.", "recommendation": "Do NOT use this certificate. It has been tampered with or is not from a legitimate source." } }, "cached": false }, "message": "Certificate processed successfully" }
Important: Fake certificates will NOT trigger Telegram notifications to prevent spam. The detection uses proprietary verification methods to ensure accuracy.

Error Response

HTTP Status: 400, 429, 500
{ "success": false, "error": { "message": "Invalid file type", "code": 400 } }

HTTP Status Codes

Code Description
200 Success - Certificate processed successfully
400 Bad Request - Invalid parameters or file
405 Method Not Allowed - Use POST method
429 Too Many Requests - Rate limit exceeded
500 Internal Server Error - Processing failed

Common Error Messages

Error Message Cause Solution
P12 file is missing the private key The P12 file contains only the certificate without a private key Ensure the P12 file was exported with the private key included. The certificate cannot be used for signing without it.
Incorrect password Wrong password provided for P12 file Verify the password is correct. If uploading both files, the API will fall back to the mobileprovision certificate.
Invalid file type File is not a valid .p12 or .mobileprovision Ensure you're uploading the correct file types (.p12 or .mobileprovision)
P12 file is empty or corrupted The P12 file structure is invalid Try re-exporting the certificate from Keychain Access or Xcode

✨ Features

🔍 Fake Certificate Detection

Our API includes advanced detection to identify fake, renamed, or tampered iOS certificates. This feature protects you from using compromised certificates that could lead to app revocation or security issues.

What We Detect

Detection Response Fields

When a fake certificate is detected, the following fields are added to the response:

Field Type Description
fake_detection.is_fake Boolean Whether the certificate is detected as fake
fake_detection.confidence String Confidence level: "high", "medium", or "low"
fake_detection.reason String Generic description of why it failed verification
WARNING String Warning message if fake detected
fake_alert.message String Detailed alert message
fake_alert.recommendation String Recommended action to take
Privacy: Our detection methods are proprietary and not disclosed to prevent circumvention. We use advanced cryptographic verification that goes beyond standard certificate validation.

Fake Certificate Behavior

💡 Use Cases

🆘 Support

For issues, questions, or feature requests: