将隐形水印集成到您的应用程序中
/embed认证所有 API 请求需要通过 API 密钥或会话 Cookie 进行认证。请在请求头中包含您的 API 密钥:
curl -X POST https://copyseal.online/embed \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@example.png" \
-F "watermarkText=hello"// Browser / Deno / Node 18+
const form = new FormData();
form.append("file", fileInput.files[0]);
form.append("watermarkText", "hello");
const res = await fetch("https://copyseal.online/embed", {
method: "POST",
headers: { "Authorization": "Bearer YOUR_API_KEY" },
body: form,
});
const data = await res.json();import requests
res = requests.post(
"https://copyseal.online/embed",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"file": open("example.png", "rb")},
data={"watermarkText": "hello"},
)
print(res.json())import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Path;
HttpRequest req = HttpRequest.newBuilder(URI.create("https://copyseal.online/embed"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "multipart/form-data; boundary=---xyz")
.POST(HttpRequest.BodyPublishers.ofFile(Path.of("example.png")))
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());API 密钥在 Business 和 Enterprise 套餐中可用。Free 和 Creator 用户可使用 Web 仪表板或基于会话的认证。
/embed嵌入水印在图片或 PDF 中隐藏隐形水印文本。统一端点通过 Content-Type 调度接受两种格式。
Content-Type: multipart/form-data
{
"file": <binary>, // Image (PNG/JPG/WebP) or PDF
"watermarkText": "string", // Text to hide
}{
"id": "uuid",
"file_type": "image" | "pdf",
"wm_shape": 42,
"watermark_content": "hello",
"download_url": "/api/download/{id}",
"expires_at": "2024-01-02T00:00:00Z"
}curl -X POST https://copyseal.online/embed \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@example.png" \
-F "watermarkText=hello"const form = new FormData();
form.append("file", fileInput.files[0]);
form.append("watermarkText", "hello");
const res = await fetch("https://copyseal.online/embed", {
method: "POST",
headers: { "Authorization": "Bearer YOUR_API_KEY" },
body: form,
});
const { id, download_url, watermark_content } = await res.json();import requests
res = requests.post(
"https://copyseal.online/embed",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"file": open("example.png", "rb")},
data={"watermarkText": "hello"},
)
data = res.json()
print(data["id"], data["download_url"], data["watermark_content"])import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Path;
HttpRequest req = HttpRequest.newBuilder(URI.create("https://copyseal.online/embed"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "multipart/form-data; boundary=---xyz")
.POST(HttpRequest.BodyPublishers.ofFile(Path.of("example.png")))
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());POST /embed 根据上传文件的 Content-Type 进行调度:image/* 走图片分支(需要 watermarkText),application/pdf 走 PDF 分支(watermarkText 可选,仅用于追踪)。响应结构始终一致 —— 根据上传类型填充图片字段 (wm_shape、watermark_content) 或 PDF 字段 (key_id、pages_marked、page_count、frame),另一组为 null。
/extract提取水印从先前嵌入的图片中揭示隐藏的水印。
Content-Type: multipart/form-data
{
"file": <binary>,
"wmShape": 42,
}{
"watermark_content": "Copyright 2024"
}curl -X POST https://copyseal.online/extract \
-H "Authorization: Bearer wsk_your_api_key" \
-F "file=@watermarked_photo.png" \
-F "wmShape=42"const form = new FormData();
form.append("file", fileInput.files[0]);
form.append("wmShape", "42");
const res = await fetch("https://copyseal.online/extract", {
method: "POST",
headers: { "Authorization": "Bearer YOUR_API_KEY" },
body: form,
});
const { watermark_content } = await res.json();import requests
res = requests.post(
"https://copyseal.online/extract",
headers={"Authorization": "Bearer YOUR_API_KEY"},
files={"file": open("watermarked_photo.png", "rb")},
data={"wmShape": 42},
)
print(res.json()["watermark_content"])import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Path;
HttpRequest req = HttpRequest.newBuilder(URI.create("https://copyseal.online/extract"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "multipart/form-data; boundary=---xyz")
.POST(HttpRequest.BodyPublishers.ofFile(Path.of("watermarked_photo.png")))
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());/extract/pdf提取 PDF 水印从已加水印的 PDF 中提取逐页 key_id。使用 key_id 追踪是哪个用户/账户嵌入了文件。
curl -X POST https://copyseal.online/extract/pdf \
-H "Authorization: Bearer wsk_your_api_key" \
-H "Content-Type: application/pdf" \
--data-binary "@watermarked_contract.pdf"const res = await fetch("https://copyseal.online/extract/pdf", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/pdf",
},
body: fileInput.files[0], // File object
});
const { key_id, frame, page_index, plaintext } = await res.json();import requests
with open("watermarked_contract.pdf", "rb") as f:
res = requests.post(
"https://copyseal.online/extract/pdf",
headers={"Authorization": "Bearer YOUR_API_KEY"},
data=f, # raw bytes; requests sets Content-Type automatically
)
data = res.json()
print(data["key_id"], data["page_index"], data["plaintext"])import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.file.Path;
HttpRequest req = HttpRequest.newBuilder(URI.create("https://copyseal.online/extract/pdf"))
.header("Authorization", "Bearer YOUR_API_KEY")
.header("Content-Type", "application/pdf")
.POST(HttpRequest.BodyPublishers.ofFile(Path.of("watermarked_contract.pdf")))
.build();
HttpResponse<String> res = HttpClient.newHttpClient()
.send(req, HttpResponse.BodyHandlers.ofString());
System.out.println(res.body());{
"key_id": "8f3a2b1c4d5e6f70",
"frame": 0,
"page_index": 3,
"plaintext": "optional-payload"
}如果未找到水印或 key_id 不属于当前认证用户,则返回 404。
API 速率限制取决于您的订阅套餐。
| Tier | Monthly | File size | API/day | Batch |
|---|---|---|---|---|
| Free | 5 | 5MB | -- | -- |
| Creator | 100 | 25MB | -- | 10 |
| Business | 500 | 50MB | 100 | 50 |
| Enterprise | 2,000 | 100MB | Unlimited | 500 |
未授权 - API 密钥无效或缺失
禁止 - 您的套餐不包含此功能
请求过多 - 已达到月度图片限额
内部服务器错误 - 处理失败
创建免费账户,开始保护您的图片。