Skip to main content
This guide walks you through detecting a watermark in an image — from creating an order to reading the extraction result.

Prerequisites

  • A BIZ MORI API key (get one here)
  • A watermarked image file (jpeg, jpg, png, webp, bmp, or tiff) or PDF

Step 1: Create an order

Create a watermark extraction order with your file.
curl -X POST https://api.bizmori.com/api/v2/orders/wtr-extract \
  -H "Authorization: Bearer YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "idempotencyKey": "my-extract-001",
    "file": {
      "fileName": "watermarked.jpg"
    }
  }'
Response:
{
  "data": {
    "orderName": "wtr_extract_2026-03-18",
    "orderId": "123456789",
    "file": {
      "fileId": 1,
      "fileName": "watermarked.jpg",
      "uploadUrl": "https://s3.amazonaws.com/...",
      "fileKey": "123/456/watermarked.jpg"
    }
  }
}
You can include the original (pre-watermarked) image for more accurate extraction. Set "includeOriginal": true and provide "originalFile": { "fileName": "original.jpg" } in the request. This option is available for images only, not PDFs.

Step 2: Upload the file

PUT your file to the presigned uploadUrl from Step 1. This is a direct S3 upload — no Authorization header needed.
cURL
curl -X PUT "https://s3.amazonaws.com/..." \
  -H "Content-Type: image/jpeg" \
  --data-binary @watermarked.jpg
No confirm step needed. Like Watermark Embed, Watermark Extract processing starts automatically after your file upload completes. Proceed directly to checking the result.
Presigned URLs expire after 1 hour. If yours has expired, use the Refresh URLs endpoint to generate new ones.

Step 3: Check the result

Poll the order or use webhooks to receive a push notification when extraction completes.
curl https://api.bizmori.com/api/v2/orders/123456789 \
  -H "Authorization: Bearer YOUR_API_TOKEN"
Response (watermark detected):
{
  "data": {
    "type": "watermarkExtract",
    "orderId": "123456789",
    "status": "detected",
    "statusCode": "detected",
    "watermarkText": "MORI_WATERMARK"
  }
}
Response (no watermark found):
{
  "data": {
    "type": "watermarkExtract",
    "orderId": "123456789",
    "status": "undetected",
    "statusCode": "undetected",
    "watermarkText": null
  }
}
StatusMeaning
detectedWatermark found — check watermarkText for the extracted text
undetectedNo watermark detected in the image
failedExtraction failed

Error handling

HTTP StatusMeaningAction
400Invalid requestCheck parameters and file format
401Authentication failedVerify your API key
429Rate limit exceededReduce request frequency or upgrade plan
For the complete error code reference, see Error Codes.

Next steps

Anti-AI

Protect images from AI training and generation.

Watermark Embed

Embed invisible watermarks into images.

AI Detection

Detect AI-generated images with probability scores.

Webhooks

Set up webhooks to get notified when processing completes.