Send eSignature requests on behalf of another user
With BoldSign sender identities, your app sends documents as a colleague or client after they approve. Nobody shares a login.
- The identity owner approves first
- Signers see the owner as the sender
When do teams send signature requests on behalf of others?
BoldSign sender identities suit teams where one person prepares documents and another is the face of them.
Executive assistants
Send NDAs, offer letters, and approvals as the executive, and track every reply.
See the 3 setup stepsSales operations
Send quotes and order forms as the assigned rep, so customers see a name they know.
See what you can doPlatforms and apps
Your software drives the signing flow, while each business user stays the official sender.
See the code
Why choose BoldSign for sending on behalf of others
With BoldSign, delegation stays approved, visible, and easy to undo.
-
Approval before any send
Nothing goes out in the owner’s name until they approve your request.
-
Private to the person who set it up
Each sender identity belongs to the user who created it. Teammates and admins cannot see or use it.
-
Access the owner can revoke
The identity owner can withdraw your access at any time.
-
A full audit trail
Every action on a document is logged, so you can show who did what.
-
Free help on every plan
Help by chat, email, or support ticket, free on every plan.
How can your app send eSignature requests as someone else?
With the BoldSign sender identity feature, you send and manage signature requests as another person, once they approve. You add their name and email, and they approve by email. Your API calls then carry their address, and signers see them as the sender. See the three setup steps below.
Works in: the BoldSign API. Create identities in the API or the web app.
Why sending signature requests for someone else gets messy
Shared logins
An assistant or an app signs in with someone else’s password. Nobody can tell who really sent what. With BoldSign, the owner approves your access instead.
See how approval worksThe wrong sender name
Signers ignore a request from an address they do not know. With BoldSign, the request shows the identity owner as the sender.
See what signers seeNo way to take access back
Once a password is shared, access is hard to undo. With BoldSign, the owner keeps a switch to end your access.
See the controls
How do you send documents on behalf of another user?
With BoldSign, you set up sending on behalf of someone in 3 steps.
Create the sender identity
Add the person’s name and email through the API or the web app.
1const senderIdentityRequest = new CreateSenderIdentityRequest();2senderIdentityRequest.name = "Luther Cooper";3senderIdentityRequest.email = "luthercooper@cubeflakes.com";4senderIdentitiesApi.createSenderIdentities(senderIdentityRequest);Code excerpt: the name and email of the sender identity, Luther Cooper, are highlighted The owner approves
They get an email and approve your request. From then on, you act for them.
Approve a sender identity requestDaniel Ortiz asks to send documents on your behalf.ApproveRejectSample approval email: Daniel Ortiz asks Luther Cooper to approve sending documents on his behalf, with Approve and Reject buttons Send on their behalf
Put their email in the
OnBehalfOfproperty of your send request.1sendForSign.title = "SDK Document Test case";2sendForSign.signers = [documentSigner];3sendForSign.onBehalfOf = "luthercooper@cubeflakes.com";4const documentCreated = documentApi.sendDocument(sendForSign);Code excerpt: the onBehalfOf line with Luther Cooper’s email is highlighted
What you can do as the sender identity
After approval, BoldSign lets you run the whole signing request as the owner, not only the send.
-
Send and remind
Send documents, then send reminders as the owner.
-
Revoke and change access codes
Revoke a request or change its access code without the owner’s login.
-
Download audit trails
Download the audit log for every document you sent for them.
-
The owner stays informed
The owner gets an email when a document is viewed, signed, or completed. You choose which events notify them.
-
Your brand on the approval page
Show your logo on the approval email and page, in the owner’s language.
How are documents sent on behalf of others kept secure?
BoldSign encrypts every document twice with AES-256. Its security controls are independently audited for SOC 2 Type 2. Each standard is listed on your account’s Compliance page, shown below.
Compliance
BoldSign meets global security and compliance standards to protect your documents and data. Manage the settings below to align with your organization’s requirements.
Data Residency
Active (US - Global)Your documents and signer data are securely stored in your selected region to meet data sovereignty and local regulatory requirements.
HIPAA Compliance
EnabledEnable HIPAA mode to protect PHI using administrative, technical, and physical safeguards aligned with HIPAA regulations.
PCI DSS
CompliantPayments are securely processed through Stripe, a PCI DSS Level 1-certified provider, ensuring the safe handling and encryption of all payment data.
CCPA & CPRA
CompliantEnsures compliance with California privacy laws, giving residents transparency and control over their personal data, including rights to access, delete, and opt out.
SOC 2 Type II
CompliantBoldSign has successfully completed a SOC 2 Type II audit, validating our controls for security, availability, confidentiality, and data integrity.
UETA & ESIGN
CompliantBoldSign ensures that all e-signatures are legally binding and compliant with the U.S. ESIGN Act and the Uniform Electronic Transactions Act (UETA).
eIDAS (SES)
CompliantBoldSign complies with the EU eIDAS Regulation (910/2014) and supports Simple Electronic Signatures (SES) by default.
eIDAS (QES)
EnabledEnable Qualified Electronic Signatures (QES) for contracts requiring the highest legal assurance under eIDAS.
Limits and costs to know before you send on behalf of others with BoldSign
BoldSign sends on behalf of others through the API only. The web app lists those documents but does not send them.
Prices are in USD.
- $30 Enterprise API plan, a month Includes 40 envelopes. Prices are in USD.
- $0.75 per envelope after 40 Billed as you go.
Before you set up sender identities
- 1 account per identity email An email cannot be a sender identity in two accounts.
- You cannot create a sender identity for your own email.
Code to send eSignature requests on behalf of another user
BoldSign SDKs cover cURL, .NET, Python, PHP, Java, and Node. Each sample below comes from the developer docs.
Step 1: create a sender identity
curl -X 'POST' \
'https://api.boldsign.com/v1/senderIdentities/create' \
-H 'accept: */*' \
-H 'X-API-KEY: {your API key}' \
-H 'Content-Type: application/json;odata.metadata=minimal;odata.streaming=true' \
-d '{
"Name": "Luther Cooper",
"Email": "luthercooper@cubeflakes.com",
"RedirectUrl": "",
"BrandId": "c94d34e9-8f1f-4ab1-926d-daa32095a851",
"NotificationSettings": {
"Viewed": true,
"Sent": false,
"DeliveryFailedFor": true,
"Declined": true,
"Revoked": true,
"Reassigned": true,
"Completed": true,
"Signed": true,
"Expired": true,
"AuthenticationFailed": true,
"Reminders": true,
"AttachSignedDocument": false
},
"MetaData": {
"TenantId": "xxxxx070-xxxx-xxxx-xxxx-757xxxxxxxxx",
"AccountPlan": "Free"
},
"Locale": "EN"
}' var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key");
var senderIdentityClient = new SenderIdentityClient(apiClient);
var senderIdentityRequest = new SenderIdentityRequest("Luther Cooper", "luthercooper@cubeflakes.com", null);
senderIdentityRequest.MetaData = new Dictionary<string, string>()
{
["tenantId"] = "xxxxx070-xxxx-xxxx-xxxx-757xxxxxxxxx",
["accountPlan"] = "Free"
};
var senderIdentityCreated = senderIdentityClient.CreateSenderIdentity(senderIdentityRequest); import boldsign
configuration = boldsign.Configuration(host = "https://api.boldsign.com", api_key="YOUR_API_KEY")
with boldsign.ApiClient(configuration) as api_client:
sender_identities_api = boldsign.SenderIdentitiesApi(api_client)
sender_identity_request = boldsign.CreateSenderIdentityRequest(
name="Luther Cooper",
email="luthercooper@cubeflakes.com",
)
sender_identities_api.create_sender_identities(sender_identity_request) <?php require_once "vendor/autoload.php";
use BoldSign\Configuration;
use BoldSign\Api\SenderIdentitiesApi;
use BoldSign\Model\CreateSenderIdentityRequest;
$config = new Configuration();
$config->setHost('https://api.boldsign.com');
$config->setApiKey('YOUR_API_KEY');
$sender_identities_api = new SenderIdentitiesApi($config);
$sender_identity_request = new CreateSenderIdentityRequest();
$sender_identity_request->setName('Luther Cooper');
$sender_identity_request->setEmail('luthercooper@cubeflakes.com');
$sender_identities_api->createSenderIdentities($sender_identity_request); ApiClient client = Configuration.getDefaultApiClient();
client.setBasePath("https://api.boldsign.com");
client.setApiKey("YOUR_API_KEY");
SenderIdentitiesApi senderIdentitiesApi = new SenderIdentitiesApi(client);
CreateSenderIdentityRequest senderIdentityRequest = new CreateSenderIdentityRequest();
senderIdentityRequest.setName("Luther Cooper");
senderIdentityRequest.setEmail("luthercooper@cubeflakes.com");
senderIdentitiesApi.createSenderIdentities(senderIdentityRequest); import { SenderIdentitiesApi, CreateSenderIdentityRequest } from "boldsign";
const senderIdentitiesApi = new SenderIdentitiesApi("https://api.boldsign.com");
senderIdentitiesApi.setApiKey("YOUR_API_KEY");
const senderIdentityRequest = new CreateSenderIdentityRequest();
senderIdentityRequest.name = "Luther Cooper";
senderIdentityRequest.email = "luthercooper@cubeflakes.com";
senderIdentitiesApi.createSenderIdentities(senderIdentityRequest); Step 2: the owner approves
No code is needed here. BoldSign emails the owner, and they approve or reject. To send the email again, call the resend invitation endpoint.
Step 3: send a document on behalf of the owner
curl -X 'POST' \ 'https://api.boldsign.com/v1/document/send' \
-H 'accept: application/json' \
-H 'X-API-KEY: {your API key}' \
-H 'Content-Type: multipart/form-data' \
-F 'DisableExpiryAlert=false' \
-F 'ReminderSettings.ReminderDays=3' \
-F 'BrandId=' \
-F 'ReminderSettings.ReminderCount=5' \
-F 'EnableReassign=true' \
-F 'Message=Please sign this.' \
-F 'Signers={
"Name": "David",
"EmailAddress": "david@cubeflakes.com",
"FormFields": [
{
"FieldType": "Signature",
"PageNumber": 1,
"Bounds": {
"X": 100,
"Y": 100,
"Width": 100,
"Height": 50
},
"IsRequired": true
}
]
}' \
-F 'ExpiryDays=10' \
-F 'EnablePrintAndSign=false' \
-F 'AutoDetectFields=false' \
-F 'OnBehalfOf=luthercooper@cubeflakes.com' \
-F 'EnableSigningOrder=false' \
-F 'UseTextTags=false' \
-F 'SendLinkValidTill=' \
-F 'Files=@agreement.pdf;type=application/pdf' \
-F 'Title=Agreement' \
-F 'HideDocumentId=false' \
-F 'EnableEmbeddedSigning=false' \
-F 'ExpiryDateType=Days' \
-F 'ReminderSettings.EnableAutoReminder=false' \
-F 'ExpiryValue=60' \
-F 'DisableEmails=false' \
-F 'DisableSMS=false' var apiClient = new ApiClient("https://api.boldsign.com", "Your_API_Key");
var documentClient = new DocumentClient(apiClient);
List<FormField> formField = new List<FormField>
{
new FormField(
id: "Signature",
type: FieldType.Signature,
pageNumber: 1,
bounds: new Rectangle(x: 50, y: 50, width: 200, height: 30))
};
var documentDetails = new SendForSign
{
Title = "Agreement",
Signers = new List<DocumentSigner>
{
new DocumentSigner(
signerName: "David",
signerType: SignerType.Signer,
signerEmail: "david@cubeflakes.com",
formFields: formField)
},
Files = new List<IDocumentFile>
{
new DocumentFilePath
{
ContentType = "application/pdf",
FilePath = "YOUR_FILE_PATH",
}
},
OnBehalfOf = "luthercooper@cubeflakes.com"
};
var documentCreated = documentClient.SendDocument(documentDetails); import boldsign
configuration = boldsign.Configuration(host = "https://api.boldsign.com", api_key="YOUR_API_KEY")
with boldsign.ApiClient(configuration) as api_client:
document_api = boldsign.DocumentApi(api_client)
form_field = boldsign.FormField(
fieldType="Signature",
pageNumber=1,
bounds=boldsign.Rectangle(x=50, y=50, width=200, height=25))
document_signer = boldsign.DocumentSigner(
name="David",
emailAddress="david@cubeflakes.com",
signerType="Signer",
formFields=[form_field])
send_for_sign = boldsign.SendForSign(
title="Agreement",
files=["YOUR_FILE_PATH"],
signers=[document_signer],
onBehalfOf="luthercooper@cubeflakes.com")
document_created = document_api.send_document(send_for_sign) <?php require_once "vendor/autoload.php";
use BoldSign\Configuration;
use BoldSign\Api\DocumentApi;
use BoldSign\Model\{FormField, Rectangle, DocumentSigner, SendForSign, FileInfo};
$config = new Configuration();
$config->setHost('https://api.boldsign.com');
$config->setApiKey('YOUR_API_KEY');
$document_api = new DocumentApi($config);
$form_field = new FormField();
$form_field->setFieldType('Signature');
$form_field->setPageNumber(1);
$bounds = new Rectangle([100, 100, 100, 50]);
$form_field->setBounds($bounds);
$document_signer = new DocumentSigner();
$document_signer->setName('David');
$document_signer->setEmailAddress('david@cubeflakes.com');
$document_signer->setSignerType('Signer');
$document_signer->setFormFields([$form_field]);
$send_for_sign = new SendForSign();
$files = new FileInfo();
$files = 'YOUR_FILE_PATH';
$send_for_sign->setFiles([$files]);
$send_for_sign->setSigners([$document_signer]);
$send_for_sign->setOnBehalfOf('luthercooper@cubeflakes.com');
$send_for_sign->setTitle('Document sdk api');
$document_created = $document_api->sendDocument($send_for_sign); ApiClient client = Configuration.getDefaultApiClient();
client.setBasePath("https://api.boldsign.com");
client.setApiKey("YOUR_API_KEY");
DocumentApi documentApi = new DocumentApi(client);
FormField signatureField = new FormField();
signatureField.setFieldType(FormField.FieldTypeEnum.SIGNATURE);
signatureField.setPageNumber(1);
Rectangle bounds = new Rectangle().x(100f).y(100f).width(100f).height(50f);
signatureField.setBounds(bounds);
DocumentSigner signer = new DocumentSigner();
signer.setName("David");
signer.setEmailAddress("david@cubeflakes.com");
signer.setSignerType(DocumentSigner.SignerTypeEnum.SIGNER);
signer.setFormFields(Arrays.asList(signatureField));
SendForSign sendForSign = new SendForSign();
File file = new File("YOUR_FILE_PATH");
sendForSign.setFiles(Arrays.asList(file));
sendForSign.setSigners(Arrays.asList(signer));
sendForSign.setOnBehalfOf("luthercooper@cubeflakes.com");
sendForSign.setTitle("Document SDK API");
DocumentCreated documentCreated = documentApi.sendDocument(sendForSign); import { DocumentApi, FormField, Rectangle, DocumentSigner, SendForSign } from "boldsign";
import * as fs from 'fs';
const documentApi = new DocumentApi("https://api.boldsign.com");
documentApi.setApiKey("YOUR_API_KEY");
const bounds = new Rectangle();
bounds.x = 50;
bounds.y = 50;
bounds.width = 200;
bounds.height = 25;
const formField = new FormField();
formField.fieldType = FormField.FieldTypeEnum.Signature;
formField.pageNumber = 1;
formField.bounds = bounds;
const documentSigner = new DocumentSigner();
documentSigner.name = "David";
documentSigner.emailAddress = "david@cubeflakes.com";
documentSigner.signerType = DocumentSigner.SignerTypeEnum.Signer;
documentSigner.formFields = [formField];
const files = fs.createReadStream("YOUR_FILE_PATH");
const sendForSign = new SendForSign();
sendForSign.title = "SDK Document Test case";
sendForSign.files = [files];
sendForSign.signers = [documentSigner];
sendForSign.onBehalfOf = "luthercooper@cubeflakes.com";
const documentCreated = documentApi.sendDocument(sendForSign); Samples from the BoldSign developer documentation.
Questions about sending on behalf of another user
What is a sender identity?
A sender identity is a person you are approved to send signature requests for. You act in their name, and they see every step. Start in the free API sandbox.
How do I create a sender identity?
Through the API or the web app, enter the owner’s name and email address. They then approve by email, as the create identity guide shows.
What do signers see when I send on someone’s behalf?
Signers see the identity owner’s email as the sender. Notifications follow the owner’s branding and settings, set in the branding options.
Who can see and use a sender identity?
Only the user who created it. It stays private to that user, so teammates and admins cannot use it. Read more in the identities reference.
What happens if I delete a sender identity?
New documents can no longer use it. Past documents keep their original sender details, listed under behalf documents.
Can I test sender identities for free?
Yes. The API sandbox is free for building and testing. Sandbox documents are watermarked and deleted after 14 days.
Are documents sent on behalf of others legally binding?
Yes. BoldSign complies with the ESIGN Act, UETA, and eIDAS, so its signatures are secure and legally binding. Read more on eSignature legality.
More on building eSignature into your app
BoldSign guides cover the full API, embedded signing, and how sender identities compare with OAuth.
- Page
eSignature API
Everything the BoldSign API can do.
See the page - Page
Embedded signing
Let users sign inside your app.
See the page - Blog
OAuth or sender identities
Which one fits your integration.
Read the post - Docs
Send document on behalf
Every property of the send request.
Read the docs
Send as your colleagues and clients, with their approval
Build and test BoldSign sender identities in the free API sandbox.
- 30-day free trial
- No credit card required
Last updated: October 17, 2026.