Intégrez le filigranage invisible dans vos applications
/embedAuthentificationToutes les requêtes API nécessitent une authentification via une clé API ou un cookie de session. Incluez votre clé API dans l'en-tête de la requête :
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());Les clés API sont disponibles avec les formules Business et Enterprise. Les utilisateurs Free et Creator peuvent utiliser le tableau de bord web ou l'authentification par session.
/embedIntégrer un filigraneMasquez un texte de filigrane invisible dans une image ou un PDF. Le point d'accès unifié accepte les deux formats via une répartition par 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 répartit selon le Content-Type du fichier téléchargé : image/* exécute la branche image (watermarkText requis) et application/pdf exécute la branche PDF (watermarkText optionnel, traçage seul). La forme de la réponse est toujours la même — les champs image (wm_shape, watermark_content) ou les champs PDF (key_id, pages_marked, page_count, frame) sont renseignés selon le téléchargement, l'autre ensemble étant null.
/extractExtraire le filigraneRévélez le filigrane caché d'une image précédemment intégrée.
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/pdfExtraire un filigrane PDFExtrayez la key_id par page d'un PDF filigrané. Utilisez la key_id pour retracer quel utilisateur/compte a intégré le fichier.
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"
}Renvoie 404 si aucun filigrane n'est trouvé ou si la key_id n'appartient pas à l'utilisateur authentifié.
Les limites de débit API dépendent de votre formule d'abonnement.
| 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 |
Non autorisé - Clé API invalide ou manquante
Interdit - Fonctionnalité non disponible avec votre formule
Trop de requêtes - Limite mensuelle d'images atteinte
Erreur interne du serveur - Le traitement a échoué
Créez un compte gratuit et commencez à protéger vos images.