Constructing Signing URLs
Overview
This guide demonstrates how to construct direct signing URLs that allow you to seamlessly integrate Circularo's signing functionality into your applications. By using these URLs, you can redirect users directly to the signing interface without requiring them to navigate through email notifications.
Key benefits:
-
Create direct links to signing interfaces for both internal and external recipients
-
Integrate document signing directly into your application workflows
-
Improve user experience by eliminating the need to check email for signing links
-
Support embedded signing experiences within iframes or custom interfaces
Use Cases
-
E-commerce Checkout: Have customers sign terms and conditions or purchase agreements directly in the checkout flow
-
Customer Onboarding: Streamline new customer onboarding by embedding document signing in your registration process
-
Employee Portals: Allow employees to sign internal documents directly from your company portal
-
Service Applications: Enable clients to sign service agreements within your application workflow
Understanding the difference between recipient types is crucial for implementing the correct URL construction approach:
-
External recipient: A user without a Circularo account who will sign using a secure link
-
Internal recipient: A user with a Circularo account who will sign after authentication
Constructing URLs for External Recipients
External recipients need a secure method to access and sign documents. This approach requires implementing OTP (One-Time Password) verification to maintain security when bypassing the standard email notification flow.
Step 1: Request Signature with OTP Protection
First, share the document with the external recipient using OTP protection. This is crucial because you're bypassing the email notification, which normally serves as an initial authentication layer.
POST /share
{
"id": "documentId",
"type": "documentType",
"objectType": "document",
"data": [
{
"sharePurpose": "sign",
"shareTo": "recipient@example.com",
"phone": "+1234567890", // For SMS OTP
// OR
"mail": "recipient@example.com" // For Email OTP
}
],
"signatureFields": [
{
"user": ["recipient@example.com"],
"timestamp": false,
"required": true,
"type": "signature",
"pages": [1],
"position": {
"percentX": 0.2,
"percentY": 0.6,
"percentWidth": 0.4,
"percentHeight": 0.1
}
}
]
}
The response will contain a shareId that you'll need for the next step:
{
"shareId": "eNkm-YkBaRhWjrzWZ0-W",
...
}
OTP protection is mandatory when creating direct signing URLs for external recipients. Without it, the system will reject the URL generation request as it would create a security vulnerability.
Step 2: Obtain the Share Token
Next, validate the share to obtain a secure share token:
GET /share/{shareId}/validate
Example request:
GET /share/eNkm-YkBaRhWjrzWZ0-W/validate
The response will contain the shareToken needed to construct the signing URL:
{
"shareToken": "91befa40e26bc81b828c2c6e8ced7f2555b0f1539a25a7ac888ccc75b3ec63ee",
...
}
If you didn't secure the document with OTP in Step 1, you'll receive a 400 error with the message: "Share needs to be secured by mail or phone OTP or oAuth."
Step 3: Construct the Signing URL
With the share token obtained, construct the signing URL using this format:
<frontendURL>/share?shareToken={shareToken}
Example:
https://sandbox.circularo.com/share?shareToken=91befa40e26bc81b828c2c6e8ced7f2555b0f1539a25a7ac888ccc75b3ec63ee
Step 4: User Experience Flow
When an external recipient accesses this URL:
-
They will be prompted to enter the OTP sent to their email or phone
-
After successful verification, they'll be taken directly to the signing interface
-
They can complete the signing process without needing a Circularo account
-
Once signed, they'll receive a confirmation and can download a copy of the signed document
For a seamless user experience, consider informing users that they'll receive an OTP and will need to enter it to access the document. This sets proper expectations and reduces confusion.
Constructing URLs for Internal Recipients
For internal recipients (users with Circularo accounts), the process is simpler as they already have authentication credentials.
Step 1: Request Signature
Share the document with the internal recipient:
POST /share
{
"id": "documentId",
"type": "documentType",
"objectType": "document",
"data": [
{
"sharePurpose": "sign",
"shareTo": "internal.user@example.com"
}
],
"signatureFields": [
{
"user": ["internal.user@example.com"],
"timestamp": false,
"required": true,
"type": "signature",
"pages": [1],
"position": {
"percentX": 0.2,
"percentY": 0.6,
"percentWidth": 0.4,
"percentHeight": 0.1
}
}
]
}
Step 2: Construct the Signing URL
For internal recipients, construct the URL using this format:
<frontendURL>/#!/sign?documentId={documentId}&documentType={documentType}
Parameters:
-
documentId: The ID of the document to be signed (same as in Step 1) -
documentType: The metadata definition of the document (same as in Step 1)
Example:
https://sandbox.circularo.com/#!/sign?documentId=e2461c31-9d65-472d-8d85-90bcefbac3f7&documentType=d_default
Step 3: User Experience Flow
When an internal recipient accesses this URL:
-
If not already logged in, they'll be prompted to sign in to their Circularo account
-
After authentication, they'll be taken directly to the signing interface
-
They can complete the signing process using their stored signature or creating a new one
-
Once signed, the document will be updated in their Circularo account
Advanced Implementation Considerations
Error Handling
Implement proper error handling for scenarios such as:
-
Expired or invalid share tokens
-
Documents that have already been signed
-
Authentication failures
-
Network connectivity issues
Testing Considerations
Before deploying to production:
-
Test the complete flow in your sandbox environment
-
Verify the user experience on different devices and browsers
-
Ensure OTP delivery and verification works correctly
-
Test with both internal and external recipients
Best Practices
-
Security First: Always use OTP protection for external recipients to maintain document security
-
Clear Instructions: Provide clear guidance to users about what to expect in the signing process
-
Responsive Design: Ensure your application handles the redirect and return flow smoothly on all devices
-
Fallback Options: Implement fallback mechanisms in case direct signing fails
Conclusion
Direct signing URLs provide a powerful way to integrate Circularo's document signing capabilities into your application workflows. By following the approaches outlined in this guide, you can create seamless signing experiences for both internal and external recipients while maintaining appropriate security measures.
For more advanced integration scenarios or custom requirements, consult the Circularo API documentation