LogoSignature Detection API

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.

Open the playground

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.

  1. Store the uploaded application page where this API can read it, or base64-encode it.
  2. POST https://signature-detector.com/api/detect with x-api-key.
  3. If result.count is 0, set the case to missing signature and skip downstream approval.
  4. If marks came back, save detectionId and the boxes on the case. A reviewer can crop the region later. The API does not return the crop itself.
Python
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

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

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.

Open the playground