Partner API
The Partner API protects images with SASHA SafeShare technology, and identifies protected images later. You send an image to SASHA and get back a protected image carrying an invisible Signature, together with the SignatureID that identifies it. Send any image later and a lookup tells you whether it carries a Signature, and which one.
You can also attach a Record to a signature you registered, declaring where and when that media is allowed to appear. When the image is looked up later, SASHA evaluates the Record against the location supplied with the lookup and returns Guidance: a verdict on whether the media belongs there. Guidance goes to every looker. The Record itself reaches the partner that owns the signature, partners that owner has granted access to, and — for any field the owner has explicitly marked public — every looker.
The API is built for server-to-server integration: you authenticate with a Client ID and Client Secret, submit each image as an asynchronous job, and collect the result by polling the job, by receiving a callback, or over the gRPC WatchJob stream. If your images live in a mobile app rather than on your servers, the Mobile SDK protects them on the device instead.
Access to the Partner API requires partner credentials issued by SASHA.
What you can do
Embed and Lookup run as asynchronous jobs. The Record operations are direct calls that return immediately.
Privacy
The Partner API is the one SASHA integration where images are sent to SASHA: the job runs on SASHA's servers, so the image leaves yours. SASHA stores it only while the job runs, deletes it as soon as the job completes, and never uses it for any other purpose.
REST and gRPC
Both interfaces expose almost all the same operations, so pick the one that fits your stack. REST is HTTP and JSON and works with any HTTP client. gRPC uses Protocol Buffers and supports streaming, which keeps large image files efficient to send. Two exceptions: gRPC's WatchJob streams job status changes with no REST equivalent, and REST's DeleteSignatureRecord has no gRPC counterpart - remove a Record over gRPC with UpdateSignatureRecord, naming the record path in the mask and leaving its value unset.