01
Partner portals
Keep a delivery record connected to every image shared with a partner.

Invisible watermarking API
Embed invisible recipient-level identities into every image your platform delivers. Decode an image later to trace where it came from.
The attribution gap
Filenames change, metadata disappears, and forwarded links lose their origin. Once an image leaves your platform, its delivery context is easy to lose.
Renamed files
A download becomes final_v7.jpg, then something else entirely.
Stripped metadata
Export tools and social platforms routinely remove the context attached to an image.
Forwarded links
A shared asset can travel far beyond the original delivery without a useful trail.
How it works
01
Send an image and recipient identifier through the API.
02
Receive a visually unchanged, uniquely marked copy.
03
Submit a recovered image and decode its embedded identity.


Developer preview
Send an image and the recipient context you already have. This illustrative contract shows an accepted job, status polling, and protected-image retrieval.
REQUEST
await etchv.encode({
source: "https://cdn.example.com/campaign-final.jpg",
payload: { recipient_id: "partner_84f2" }
});RESPONSE
{
"job_id": "job_9a31",
"status": "accepted"
}GET /v1/jobs/job_9a31
Poll immediately, then wait one second between up to five status checks before retrieving the protected image.
const wait = (milliseconds) => new Promise((resolve) => setTimeout(resolve, milliseconds));
let job;
for (let attempt = 0; attempt < 5; attempt += 1) {
if (attempt > 0) await wait(1000);
job = await fetch("/v1/jobs/job_9a31").then((response) => response.json());
if (job.status !== "accepted" && job.status !== "processing") break;
}
if (job.status !== "complete") {
throw new Error("Encode job " + job.job_id + " did not complete.");
}
if (!job.protected_image_url) {
throw new Error("Encode job " + job.job_id + " has no protected image URL.");
}
const protectedImage = await fetch(job.protected_image_url);{
"job_id": "job_9a31",
"status": "complete",
"protected_image_url": "https://preview.etchv.com/v1/jobs/job_9a31/image"
}Illustrative contract only; no live backend is connected.
Delivery primitives
A compact request model for the image delivery work your product already performs.
Where it fits
01
Keep a delivery record connected to every image shared with a partner.
02
Attach recipient context as campaign imagery moves between teams and destinations.
03
Make traceability part of a polished, recipient-specific delivery experience.