Signature detection for KYC intake
Use the API to see whether an application image contains a signature mark before an analyst opens it. The result is a box and a score, not a check that the customer is who they claim to be.
A new account starts with 10 detection credits. The playground asks you to sign in, then calls the same API.
Where it sits in intake
A KYC file often includes an application or a consent page that is supposed to be signed, plus identity evidence that this API does not interpret. Run detection on the page that should carry the mark. Leave document authenticity, liveness, and watchlist checks on the systems you already use for those jobs.
- Store the uploaded application page where this API can read it, or base64-encode it.
POST https://signature-detector.com/api/detectwithx-api-key.- If
result.countis 0, set the case to missing signature and skip downstream approval. - If marks came back, save
detectionIdand the boxes on the case. A reviewer can crop the region later. The API does not return the crop itself.
import requests
def application_needs_review(image_url: str, api_key: str) -> dict:
response = requests.post(
"https://signature-detector.com/api/detect",
headers={
"Content-Type": "application/json",
"x-api-key": api_key,
},
json={"imageUrl": image_url},
timeout=60,
)
body = response.json()
if response.status_code == 402:
raise RuntimeError("Out of detection credits")
response.raise_for_status()
marks = body["result"]["detections"]
return {
"application_status": "review" if not marks else "has-signature-mark",
"detection_id": body["detectionId"],
"boxes": [mark["bbox"] for mark in marks],
"credits_remaining": body["creditsRemaining"],
}What not to automate
Do not treat has-signature-mark as "KYC passed." The box does not say the signature matches the person on the identity document. It does not say the form is complete. The only class in the published response is signature, so you cannot filter a separate logo or stamp class out of the JSON. A reviewer still has to reject anything that is not actually a signature. Confidence is the knob you have, and you apply it after the response. See check if a document is signed.
Packets that are PDFs
Account-opening packs are often PDFs. Send pdfUrl or pdfBase64 and inspect each item in the top-level pages array, using the contract on PDF signature detection. A page you require to be signed should not advance when its count is 0.
Cost for a pilot
- $10 per 100,000 credits, which is $0.0001 each. An image that is not served from cache spends 1 credit. A PDF spends 1 credit per page.
- 10 credits are added when the account is created.
- $1 minimum purchase. That is 10,000 credits. There is no subscription.
- Credits do not expire. The balance stays on the account until a detection spends it. A failed detection puts the credit back. Repeating an image or an identical PDF returns
cached: trueand does not spend a credit. On a PDF that hit iscreditsUsed: 0. - Buy credits from the dashboard or estimate a volume on the pricing page.
Ten free credits cover ten uncached page images, or one uncached 10-page PDF. A thousand application pages is 1,000 credits, or $0.10, when none of them hit the cache.
FAQ
Does this replace a KYC vendor?
No. KYC typically includes identity documents, sanctions lists, and a decision about the person. This API only reports visual signature marks on the image you send. It does not read the name on an ID, match a face, or screen a customer.
What file do I send?
Send the application page as imageUrl or imageBase64. imageUrl has to be fetchable by the API with no login. For a file in your own bucket, prefer a short-lived public URL or send imageBase64. A PDF application uses pdfUrl or pdfBase64. pages, count, and creditsUsed come back at the top level, and the file spends 1 credit per page unless those exact bytes were already cached.
Where should a missing signature go?
If result.count is 0, keep the application out of the approved path and show it to a person or send it back for a signature. A low confidence score, such as the 0.192 value in the API's sample response, deserves the same queue. Image requests default to a threshold of 0.1, and you can send a higher threshold from 0 to 1. PDF pages always use 0.1.
What customer data is stored?
The application database stores a SHA-256 of the image bytes and the detection JSON, including the boxes. It does not store the image file itself. The detector still receives the image in order to find the marks. Do not send a document you are not allowed to transmit to this API.
What does a check cost?
One uncached image is 1 credit, $0.0001. Ten free credits are created with the account, so you can run ten pages before buying more. The minimum purchase is $1 (10,000 credits). Credits do not expire.
Related reading
- Signature detection API
Request fields, response boxes, credits, and the errors the endpoint actually returns.
- Check if a document is signed
Turn a detection count into a review decision without treating it as identity proof.
- Lending packets
Check each required page of a loan packet and count the credits before you run it.
- PDF signature detection
Send pdfUrl or pdfBase64. pages, count, and creditsUsed are top-level.
- Crop signatures from boxes
The API returns coordinates. Pillow or sharp writes the crop.
- Pricing
$10 per 100,000 credits. Images cost 1 credit. PDFs cost 1 credit per page.
Try it on your own file
Upload an image in the playground, or create an API key from the dashboard after signup. Read the API docs for the request fields.
