Aadhaar eSign from Zoho Creator with Deluge
Zoho Creator apps often hold exactly the data an agreement needs: the customer, the amount and the PDF. This guide uses Deluge's invokeurl task to send a PDF to SignYu for Aadhaar eSign when a record is approved, writes the signing links back into the record, and keeps the status in sync.
Updated 2026-10-01
What you need
- A Zoho Creator app where you can add workflows and functions.
- A SignYu API key (starts with sk_live_). API access costs ₹999/month with a 3-day free trial; create the key under Developers in the dashboard.
- Signature credits for your signers, from ₹15 per signature (₹15 per signature on packs of 10 or more). Sending uses one credit per signer.
- A form with fields for the signer's name, mobile and email, plus text fields for SignYu Document ID, Status and Sign Link.
Step 1: Create a connection for the API key
In Creator, open Microservices, then Connections, and create a Custom Service connection named signyu with API Key authentication. Add a header parameter called Authorization and enter Bearer followed by a space and your sk_live_ key as its value. Deluge then adds the header for you, and the key never appears in your scripts.
Step 2: Get the PDF as a file object
invokeurl can upload a file object as multipart. A simple source is a URL that returns your PDF, for example a Zoho Writer merge or a file stored elsewhere. Keep it under 10MB.
pdfFile = invokeurl
[
url :input.Agreement_PDF_URL
type :GET
];
pdfFile.setParamName("file");Step 3: Create, add signers and send
Pass the file and the name field together in files; the name part is a string part. detailed: true returns the HTTP status code so you can react to 402 and 409.
base = "https://signyu.com/api/v1";
namePart = Map();
namePart.put("paramName","name");
namePart.put("content","Agreement " + input.ID);
namePart.put("stringPart","true");
parts = List();
parts.add(pdfFile);
parts.add(namePart);
created = invokeurl
[
url :base + "/documents"
type :POST
files :parts
connection :"signyu"
];
documentId = created.get("documentId");
signer = Map();
signer.put("name",input.Customer_Name);
signer.put("phone",input.Customer_Mobile.replaceAll("[^0-9]",""));
signer.put("email",input.Customer_Email);
signers = List();
signers.add(signer);
body = Map();
body.put("signers",signers);
invokeurl
[
url :base + "/documents/" + documentId + "/signers"
type :POST
parameters :body.toString()
headers :{"Content-Type":"application/json"}
connection :"signyu"
];
sendResp = invokeurl
[
url :base + "/documents/" + documentId + "/send"
type :POST
connection :"signyu"
detailed :true
];
code = sendResp.get("responseCode");
if(code == 200)
{
result = sendResp.get("responseText").toString().toMap();
input.SignYu_Document_ID = documentId;
input.eSign_Status = "SENT";
input.Sign_Link = result.get("signers").get(0).get("signUrl");
}
else if(code == 402)
{
input.eSign_Status = "NO CREDITS";
}Verify webhooks
SignYu webhooks must be verified against the raw request body and the X-SignSetu-Signature header. If your Creator setup cannot give you both, do not trust incoming payloads directly. The safe pattern is a scheduled function that asks the API for the current status of every record still marked SENT, since that call is authenticated with your key. Run it every 15 or 30 minutes.
for each rec in Agreements[eSign_Status == "SENT"]
{
doc = invokeurl
[
url :"https://signyu.com/api/v1/documents/" + rec.SignYu_Document_ID
type :GET
connection :"signyu"
];
if(doc.get("status") == "COMPLETED")
{
rec.eSign_Status = "COMPLETED";
rec.Signed_PDF_URL = doc.get("downloadUrl");
rec.Completed_On = now;
}
}Common mistakes
- The downloadUrl expires. If you want to keep the signed PDF in Creator, download it in the same scheduled run and attach or store the file, rather than saving only the link.
- Mobile numbers stored with +91, spaces or dashes fail validation; strip everything except digits, as in the example.
- Without detailed: true, invokeurl returns only the body and you cannot tell a 402 from a 409; check the error field or use detailed mode.
- The file part must be sent with Content-Type application/pdf. A part labelled application/octet-stream is rejected with 400 invalid_file even if the bytes are a valid PDF.
- Send is one way. A second POST to /send returns 409 invalid_state, and signers cannot be added after sending. Add every signer (up to 6) before you call send.
Frequently asked questions
Does this work in Zoho CRM too?
Yes. Deluge and invokeurl work the same way in Zoho CRM functions. Create the connection in CRM and trigger the function from a workflow rule or a button.
Can the customer sign from the Creator portal?
Yes. Show the stored Sign_Link field in the portal report as a URL. The customer opens it and signs with Aadhaar OTP. SignYu also emails the link to the address you provided.
How many signers can one record send?
Up to 6. Add more maps to the signers list in the order they should sign; each uses one credit.
What does it cost to run from Creator?
API access at ₹999/month with a 3-day free trial, plus one credit per signer from ₹15 per signature (₹15 per signature on packs of 10 or more). Zoho's own invokeurl limits apply to your plan.
API reference
Get your API key
Start a 3-day free trial of API access and send your first document today.