RequestByEmail
RequestByEmail
This is a payer-initiated method where the API sends a secure, personalized email to each recipient with a unique URL to complete their W-9 or W-8 form online. Each URL is scoped to that specific recipient and cannot be accessed by anyone else.
This is the most direct collection method when you have a known list of recipients and want to reach them through a familiar, professional channel.
When to use
- You have the complete list of recipients and their email addresses on file.
- You want each recipient to receive a personalized invitation with their name and details pre-filled.
- You prefer TaxBandits to handle email delivery rather than managing it through your own system.
If recipients are more likely to respond to an SMS, use RequestByText instead.
How it works
Authenticate
Obtain a Bearer token via the OAuth 2.0 flow and include it in all request headers.
Ensure a business (payer) exists
Before calling this endpoint, confirm the payer has been created using the Business endpoint. If no
BusinessIdis provided in the request, the request will be associated with the default payer (the first payer created in your account).Call the endpoint
Along with the payer and recipient details, your request may include the following optional parameters:
DBAId / DBARef— Scope the URL to a specific DBA under the payer. The DBA name will appear as the requester on the form.Customization— Apply your logo and primary/secondary colors to brand the form page. Alternatively, pass aCustomizationIdgenerated from the PortalCustomization endpoint.EmailCustomization— Customizes the email sent to the recipient. You can apply your logo, primary/secondary colors, sender name, and sender email address to brand the email. Alternatively, pass anEmailCustomizationIdgenerated from the EmailCustomization endpoint.InterviewFlow— Set to TRUE to present the W-9 as a guided interview rather than a traditional form.PrefLang— Specify the language for the form. Recipients can also change their preferred language if needed. Supported languages: English, French, Spanish, German, Ukrainian, and Portuguese.IsReminderEnabled— Set automated reminders to recipients who haven’t completed their forms.
Automate TIN MatchingSet
IsTINMatchingto TRUE to automatically trigger IRS TIN Matching once the recipient submits their form.Recipient completes the form
TaxBandits sends the email to each recipient. When they open the link, they select the applicable form — W-9, W-8BEN, W-8BEN-E, W-8ECI, W-8IMY, or W-8EXP — and complete, e-sign, and submit it.
Get notified
Once a recipient submits, you can receive notification through any of the following:
- Webhooks — Configure the 'WhCertificate Status Change' webhook event to receive a payload with the recipient's name, TIN, address, and a link to download the completed form. Learn more
- Status endpoint — Poll the Status endpoint on demand to retrieve the current form status for a given recipient.
- Web messaging — Receive in-browser notifications when a recipient completes their form. Learn more
POST WhCertificate/RequestByEmail Request Body
| Field | Type | Description |
|---|---|---|
| SubmissionManifest | Object | Submission-level settings for this request. |
| IsTINMatching | Boolean | Optional Set to TRUE to automatically trigger IRS TIN Matching once the recipient submits their W-9. |
| IsReminderEnabled | Boolean | Optional Set to TRUE to send automatic reminder emails to recipients who have not yet completed their form. |
| RemainderSchdDays | Number | Optional Frequency (in days) at which reminder emails are sent. Requires IsReminderEnabled to be TRUE. |
| Requester | Object | Identifies the payer associated with this request. If omitted, the default payer in your account is used. |
| PayerRef | String | Optional Your unique identifier for the payer. Size: 1-50 |
| BusinessId | Guid | Optional TaxBandits-generated unique identifier for the payer. |
| TIN | String | Optional Taxpayer Identification Number of the payer. Can be used in place of BusinessId or PayerRef.Size: 9-11 Allowed values"EIN", "SSN" (Including hyphen) |
| DBAId | String | Optional Unique identifier for the DBA. The DBA name appears as the requester on the form. |
| DBARef | String | Optional Your reference identifier for the DBA. Size: 1-50 |
| Recipients | Object[] | List of recipients to send the email request to. Each element represents one recipient. |
| PayeeRef | String | Optional Your unique identifier for the recipient, used to reference them in future API calls. Size: 1-50 |
| Name | String | Optional Recipient's name. Pre-filled on the form. Size: 1-50 |
| String | Email address of the recipient. The collection request email is sent to this address. Size: 1-100 | |
| Address | Object | Optional Recipient's mailing address. Pre-filled on the form. |
| Address1 | String | Optional Street address or PO Box. Size: 1-46 |
| Address2 | String | Optional Suite or apartment number. Size: 1-46 |
| City | String | Optional City. Size: 1-46 |
| State | String | Optional Two-letter state code. Size: 2 Allowed values"AL", "AK", "AZ", "AR", "CA", "CO", "CT", "DE", "DC", "FL", "GA", "HI", "ID", "IL", "IN", "IA", "KS", "KY", "LA", "ME", "MD", "MA", "MI", "MN", "MS", "MO", "MT", "NE", "NV", "NH", "NJ", "NM", "NY", "NC", "ND", "OH", "OK", "OR", "PA", "RI", "SC", "SD", "TN", "TX", "UT", "VT", "VA", "WA", "WV", "WI", "WY", "AS", "FM", "GU", "MH", "MP", "PW", "PR", "VI", "AA", "AE", "AP" |
| ZipCd | String | Optional ZIP code. Format: 99999 or 99999-9999. Size: 5-10 |
| WebhookRef | Guid | Optional Unique identifier for a specific webhook callback URL configured in the Developer Console. If omitted, the response is posted to the default callback URL. |
| CustomizationId | Guid | Optional A unique identifier for a saved customization profile, generated via the Developer Console or the PortalCustomization endpoint. Applies your branding to the form page. |
| EmailCustomizationId | Guid | Optional Unique identifier for a saved email customization profile, generated via the Developer Console or the EmailCustomization endpoint. Applies your branding to the email. |
| Customization | Object | Optional Inline branding settings for the form completion page. Use this if you do not have a CustomizationId. |
| BusinessLogoUrl | String | Optional URL of the logo to display on the form page. Size: 1-150 |
| LogoPosition | String | Optional Position of the logo on the form page.Allowed values"LEFT", "CENTER", "RIGHT" |
| InterviewFlow | Boolean | Optional Set to TRUE to present the W-9 as a guided step-by-step interview instead of the traditional form layout. |
| PrimaryColor | String | Optional Primary brand color for the form page. |
| SecondaryColor | String | Optional Secondary brand color for the form page. |
| PrefLang | String | Optional Default display language for the form. Defaults to English if not set.Allowed values"en-US", "es-ES", "fr-FR", "de-DE", "uk-UA", "pt-PT" |
Response Body
| Field | Type | Description |
|---|---|---|
| SubmissionId | Guid | TaxBandits-generated unique identifier for this submission. |
| Requester | Object | Payer details associated with this request. |
| BusinessId | Guid | TaxBandits-generated unique identifier for the payer. |
| BusinessNm | String | Payer name. Returns the business name if the payer is an entity, or the full name if the payer is an individual. |
| FirstNm | String | First name of the payer (individual). Size: 1-20 |
| MiddleNm | String | Middle name of the payer (individual). Size: 1-20 |
| LastNm | String | Last name of the payer (individual). Size: 1-20 |
| Suffix | String | Suffix of the payer (individual).Allowed values"Jr", "Sr", "I", "II", "III", "IV", "V", "VI", "VII" |
| PayerRef | String | Your unique identifier for the payer. |
| TINType | String | TIN type of the payer. |
| TIN | String | Taxpayer Identification Number of the payer. |
| DBAId | String | Unique identifier for the DBA. |
| DBARef | String | Your reference identifier for the DBA. |
| WhCertificate | Object | Results of the W-9/W-8 collection requests submitted in this call. |
| SuccessRecords | Object[] | Recipients for whom the request was successfully processed. |
| PayeeRef | String | Your unique identifier for the recipient. |
| String | Email address to which the W-9/W-8 request was sent. | |
| WhCertificateStatus | String | Current status of the W-9/W-8 request. |
| StatusTs | String | Timestamp of the last status update. |
| ErrorRecords | Object[] | Recipients for whom the request failed. |
| PayeeRef | String | Your unique identifier for the failed recipient. |
| String | Email address provided for the failed recipient. | |
| Errors | Object[] | List of error details for this recipient. |
| Id | String | TaxBandits-assigned error code. |
| Name | String | Field or node that triggered the error. |
| Message | String | Human-readable error description. |
| Errors | Object[] | Top-level errors that prevented the entire submission from being processed. Null on success. |
| Id | String | TaxBandits-assigned error code. |
| Name | String | Field or node that triggered the error. |
| Message | String | Human-readable error description. |
Request JSON
- Sample 1
- Sample 2
- Sample 3
Send email request and get notified via webhooks
Send a W-9/W-8 collection email to a recipient and link the completed form to a specific payer using BusinessId. When the recipient submits, the webhook is triggered automatically with the submitted form data.
{
"SubmissionManifest": {
"IsTINMatching": true,
"IsReminderEnabled": true,
"ReminderSchdDays": 10
},
"Requester": {
"BusinessId": "959763e4-26d3-4d52-a8eb-b954b22616fd",
"PayerRef": "Pay025",
"TIN": "39-4589707",
"DBAId": null,
"DBARef": null
},
"Recipients": [
{
"PayeeRef": "payeeref016",
"Name": "Shawn Williams",
"Email": "shawn@sample.com",
"Address": {
"Address1": "1751 Kinsey Rd",
"Address2": "Main St",
"City": "Dothan",
"State": "AL",
"ZipCd": "36303"
}
}
],
"WebhookRef": "2E9C7CA0-F0CF-4257-99AA-7FD6CCFD9D4",
"CustomizationId": "D6ACC1C4-74E5-4A60-B569-77F4612BD988",
"EmailCustomizationId": "2FF35B72-2EEF-466F-90EB-505FD250FD1L",
"Customization": {
"InterviewFlow": true,
"BusinessLogoUrl": "https://www.spanenterprises.com/Content/Images/span.png",
"LogoPosition": "CENTER",
"PrimaryColor": "#1321E6",
"SecondaryColor": "#0F700C",
"PrefLang": "es-ES"
}
}
Send email request with DBA details
Send a request email scoped to a specific DBA under the payer. The DBA name appears as the requester on both the email and the form completion page
{
"SubmissionManifest": {
"IsTINMatching": false,
"IsReminderEnabled": true,
"ReminderSchdDays": 10
},
"Requester": {
"BusinessId": null,
"PayerRef": null,
"TIN": null,
"DBAId": "dfb13337-f49b-42fb-b989-07c674a7b81c",
"DBARef": "#001"
},
"Recipients": [
{
"PayeeRef": "1452631",
"Name": "Mark Davis",
"Email": "mark@sample.com"
}
]
}
Send email request with a customized portal and email
Send an email request with pre-configured customization profiles — CustomizationId for the form completion page and EmailCustomizationId for the email, so both touchpoints reflect your platform's branding.
{
"SubmissionManifest": {
"IsTINMatching": false
},
"Requester": null,
"Recipients": [
{
"PayeeRef": "536STH01",
"Name": "Klaus Thomas",
"Email": "klaus@sample.com"
}
],
"CustomizationId": "95185CFF-61DB-41B3-8282-20CE18F51FB4",
"EmailCustomizationId": "74ED9EF3-1801-46EB-BDC7-3DBA343CEF70"
}
Response JSON
- 200
- 400
- 401
Success Response - This is a sample response for successful API requests.
{
"SubmissionId": "2d1797a2-5e56-4da4-a59d-e82e858ffbd8",
"Requester": {
"BusinessId": "9e284b90-aa98-4287-8e9a-38cc590a90d3",
"BusinessNm": "Snowdaze LLC",
"PayerRef": "Pe12rtgr3",
"TINType": "EIN",
"TIN": "39-4589707",
},
"WhCertificate": {
"SuccessRecords": [
{
"PayeeRef": "T@122",
"Email": "mark@sample.com",
"WhCertificateStatus": "ORDER_CREATED",
"StatusTs": "2025-06-14 07:05:18 +05:30"
},
{
"PayeeRef": "mia@345",
"Email": "daniel@sample.com",
"WhCertificateStatus": "ORDER_CREATED",
"StatusTs": "2025-06-14 07:05:18 +05:30"
}
],
"ErrorRecords": null
},
"Errors": null
}
Bad Request Response - You'll get the below response when your API requests contain any validation errors.
{
"SubmissionId": null,
"Requester": null,
"WhCertificate": null,
"Errors": [
{
"Id": "F75-100017",
"Name": "Requester.BusinessId",
"Message": "Invalid BusinessId. The given BusinessId does not match with any of the Business."
}
]
}
Unauthorized Response - You'll get the below response when your API requests don't contain valid authentication credentials.
{
"StatusCode": 401,
"StatusName": "Unauthorized",
"StatusMessage": "Invalid authorization credentials",
"Errors": [
{
"Id": "AUTH-100025",
"Name": "Authorization",
"Message": "Authorization should not be empty"
}
]
}