This SDK contains methods for interacting easily with the ZeroBounce API. More information about ZeroBounce can be found in the official documentation.
You can install by searching for ZeroBounce.SDK in the NuGet Package Manager, or run:
Install-Package ZeroBounce.SDKImport the SDK:
using ZeroBounceSDK;Initialize the wrapper with your API key and preferred API base URL:
ZeroBounce.Instance.Initialize("<YOUR_API_KEY>", ZBApiURL.ApiDefaultURL);You can also use a custom base URL (e.g. for testing). Trailing slashes are removed automatically:
ZeroBounce.Instance.Initialize("<YOUR_API_KEY>", "https://api.zerobounce.net/v2");Note: Initialize throws ZBClientException if the API key is null or whitespace. Other client-side validations (e.g. empty email_batch, empty file_id, or using both domain and company_name together in Email Finder/Domain Search) are reported via the failure callback.
- ZBConfidence – Used in Email Finder and Domain Search for confidence levels:
High,Medium,Low,Unknown,Undetermined. Exposed onZBEmailFinderResponse.EmailConfidence,ZBDomainSearchResponse.Confidence, andZBDomainFormat.Confidence. - ZBValidateStatus / ZBValidateSubStatus – Validation result status and sub-status. Used on
ZBValidateResponseand on eachZBValidateBatchResponseRowin batch validate responses. See the API docs for allowed values. - ZBGetApiUsageResponse – Includes per-status and per–sub-status counts (e.g.
SubStatusMxForward,SubStatusAlternate,SubStatusAllowed,SubStatusBlocked,SubStatusGold). - ZBFileStatusResponse – Includes
ErrorReasonfor file processing errors when present. - ZBGetFileResponse – When the API returns JSON (e.g. file not ready), the SDK uses
Success,Message, andErrorand invokes the failure callback with the error message.
You can now use any of the SDK methods, for example:
var email = "<EMAIL_ADDRESS>"; // The email address you want to validate
var ipAddress = "127.0.0.1"; // The IP Address the email signed up from (Optional)
ZeroBounce.Instance.Validate(email, ipAddress,
response =>
{
Debug.WriteLine("Validate success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("Validate failure error " + error);
// ... your implementation
});var email = "<EMAIL_ADDRESS>"; // The email address you want to validate
var ipAddress = "127.0.0.1"; // The IP Address the email signed up from (Optional)
List<ZBValidateEmailRow> emailBatch = new List<ZBValidateEmailRow>
{
new ZBValidateEmailRow { EmailAddress = email, IpAddress = ipAddress }
};
ZeroBounce.Instance.ValidateBatch(emailBatch,
response =>
{
Debug.WriteLine(response.EmailBatch[0].Address);
// ... your implementation
},
error =>
{
Debug.WriteLine("Validate failure error " + error);
// ... your implementation
});ZeroBounce.Instance.GetCredits(
response =>
{
Debug.WriteLine("GetCredits success response " + response);
// your implementation
},
error =>
{
Debug.WriteLine("GetCredits failure error " + error);
// your implementation
});var startDate = new DateTime(2024, 01, 01); // Start date (yyyy-MM-dd)
var endDate = new DateTime(2024, 01, 31); // End date (yyyy-MM-dd)
ZeroBounce.Instance.GetApiUsage(startDate, endDate,
response =>
{
Debug.WriteLine("GetApiUsage success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("GetApiUsage failure error " + error);
// ... your implementation
});var email = "valid@example.com"; // Subscriber email address
ZeroBounce.Instance.GetActivity(email,
response =>
{
Debug.WriteLine("GetActivity success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("GetActivity failure error " + error);
// ... your implementation
});var domain = "example.com"; // The email domain for which to find the email format.
var companyName = "Example"; // The company name for which to find the email format.
var firstName = "john"; // The first name of the person whose email format is being searched.
var middleName = ""; // The middle name of the person whose email format is being searched. [optional]
var lastName = "doe"; // The last name of the person whose email format is being searched. [optional]
ZeroBounce.Instance.FindEmailByDomain(domain, firstName, middleName, lastName,
response =>
{
Debug.WriteLine("EmailFinder success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("EmailFinder failure error " + error);
// ... your implementation
});
ZeroBounce.Instance.FindEmailByCompanyName(companyName, firstName, middleName, lastName,
response =>
{
Debug.WriteLine("EmailFinder success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("EmailFinder failure error " + error);
// ... your implementation
});var domain = "example.com"; // The email domain for which to find the email format.
var companyName = "Example"; // The company name for which to find the email format.
ZeroBounce.Instance.FindDomainByDomain(domain,
response =>
{
Debug.WriteLine("DomainSearch success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("DomainSearch failure error " + error);
// ... your implementation
});
ZeroBounce.Instance.FindDomainByCompanyName(companyName,
response =>
{
Debug.WriteLine("DomainSearch success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("DomainSearch failure error " + error);
// ... your implementation
});var filePath = "<FILE_PATH>"; // The csv or txt file
var options = new SendFileOptions();
options.ReturnUrl = "https://domain.com/called/after/processing/request";
options.EmailAddressColumn=3; // The index of "email" column in the file. Index starts at 1
options.FirstNameColumn = 4; // The index of "first name" column in the file
options.LastNameColumn = 5; // The index of "last name" column in the file
options.GenderColumn = 6; // The index of "gender" column in the file
options.IpAddressColumn = 7; // The index of "IP address" column in the file
options.HasHeaderRow = true; // If this is `true` the first row is considered as table headers
options.RemoveDuplicate = false; // If you want the system to remove duplicate emails (true or false, default is true). Please note that if we remove more than 50% of the lines because of duplicates (parameter is true), system will return a 400 bad request error as a safety net to let you know that more than 50% of the file has been modified.
ZeroBounce.Instance.SendFile(
filePath,
options,
response =>
{
Debug.WriteLine("SendFile success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("SendFile failure error " + error);
// ... your implementation
});var fileId = "<FILE_ID>"; // The returned file ID when calling sendfile API
var localDownloadPath = "<FILE_DOWNLOAD_PATH>"; // The location where the downloaded file will be saved
ZeroBounce.Instance.GetFile(fileId, localDownloadPath,
response =>
{
Debug.WriteLine("GetFile success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("GetFile failure error " + error);
// ... your implementation
});var fileId = "<FILE_ID>"; // The returned file ID when calling sendfile API
ZeroBounce.Instance.FileStatus(fileId,
response =>
{
Debug.WriteLine("FileStatus success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("FileStatus failure error " + error);
// ... your implementation
});var fileId = "<FILE_ID>"; // The returned file ID when calling sendfile API
ZeroBounce.Instance.DeleteFile(fileId,
response =>
{
Debug.WriteLine("DeleteFile success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("DeleteFile failure error " + error);
// ... your implementation
});var filePath = "<FILE_PATH>"; // The csv or txt file
var options = new SendFileOptions();
options.ReturnUrl = "https://domain.com/called/after/processing/request";
options.EmailAddressColumn=3; // The index of "email" column in the file. Index starts at 1
options.HasHeaderRow = true; // If this is `true` the first row is considered as table headers
ZeroBounce.Instance.ScoringSendFile(
filePath,
options,
response =>
{
Debug.WriteLine("SendFile success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("SendFile failure error " + error);
// ... your implementation
});var fileId = "<FILE_ID>"; // The returned file ID when calling scoringSendfile API
var localDownloadPath = "<FILE_DOWNLOAD_PATH>"; // The location where the downloaded file will be saved
ZeroBounce.Instance.ScoringGetFile(fileId, localDownloadPath,
response =>
{
Debug.WriteLine("GetFile success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("GetFile failure error " + error);
// ... your implementation
});var fileId = "<FILE_ID>"; // The returned file ID when calling scoringSendfile API
ZeroBounce.Instance.ScoringFileStatus(fileId,
response =>
{
Debug.WriteLine("FileStatus success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("FileStatus failure error " + error);
// ... your implementation
});var fileId = "<FILE_ID>"; // The returned file ID when calling scoringSendfile API
ZeroBounce.Instance.ScoringDeleteFile(fileId,
response =>
{
Debug.WriteLine("DeleteFile success response " + response);
// ... your implementation
},
error =>
{
Debug.WriteLine("DeleteFile failure error " + error);
// ...your implementation
});From the parent repository root (the folder that contains all SDKs and docker-compose.yml):
docker compose build csharp
docker compose run --rm csharpdotnet testdotnet buildPrerequisites: NuGet API key from https://www.nuget.org/account/apikeys
If the .NET SDK is not installed, the script uses Docker (requires the repo to be inside the SDKs monorepo with docker-compose.yml at the parent directory).
export NUGET_API_KEY=your_api_key
./scripts/publish-nuget.sh # publish current checkout
./scripts/publish-nuget.sh --last-tag # checkout latest git tag and publish itOr run manually:
dotnet restore && dotnet build -c Release && dotnet test --no-build -c Release
dotnet pack ZeroBounceSDK/ZeroBounceSDK.csproj -c Release --no-build
dotnet nuget push ZeroBounceSDK/bin/Release/ZeroBounce.SDK.*.nupkg \
--api-key $NUGET_API_KEY --source https://api.nuget.org/v3/index.jsonFor version bump and more detail, see the sdk-docs (NuGet) guide.