Untitled Document
  1. The partner must first be provisioned properly.
  2. The partner needs to create a JWT using their partner code (and optionally their contact email address), and the libraries we have approved:

Steps to create a JSON Web Token (JWT)

Creating a JWT using Java

This example uses jsontoken-1.1.jar (https://code.google.com/p/jsontoken/) to create a JWT token using Java. Partners are free to choose any JWT library to create their JWT tokens. But, they must strictly follow the JSON schema we publish for the Partner API application. See the Partner API JWT schema below. For more details about JWT tokens, see https://scotch.io/tutorials/the-anatomy-of-a-json-web-token. If you choose to use a different library to create your JWT tokens, then please refer to the documentation for that JWT library, which will show you how to create your JWT tokens and how to add the required fields.

To start, you will need your PartnerCode(PC, password, and, if you desire, the email assigned to your partnercode with ZoomInfo.

  1. Create the signer. This will encrypt the entire payload using the secret key. For Partner API partners, the secret key will be their partner password. Only Zoominfo and the partner should know this password and it should be protected to prevent security issues. We are using the HmacSHA256Signer class. For example:
    signer = new HmacSHA256Signer(ISSUER, keyID, secret value in bytes);  //The ISSUER is "zoominfo", the keyID is null, and the "secret value in bytes" is the partner password.
  2. The JWT token should contain issuedAt and expiration time. The issuedAt and the expiration time will be in seconds. We allow an expiration time up to 1 hour. For ex.
    token.setIssuedAt(new Instant(issuedTimeInMillis)); //Current time in milliseconds
    token.setExpiration(new Instant(issuedTimeInMillis + 3600000)); // current time + 1 hour is the expiration time.

    Note: Refer to your JWT library for setting time. The JSON Token-1.1.jar sets the time in seconds. In this example, I am setting the value in milliseconds, because the "Instant" object expects the value to be in milliseconds. Internally, the "setIssuedAt" and the "setExpiration" calls convert the value to seconds. So when the ZoomInfo OAuth web server receives this value, it will treat the issued at and the expiration time as if they are in seconds. There is no way for the ZoomInfo OAuth web server to know whether the incoming 'issued at' and 'expiration' values sent in from the partner are set in seconds or milliseconds. So you MUST set the expiration time and the issued time in seconds.

  3. Create the "jti" attribute and set the value to a random UUID. The "jti" attribute is used to determine whether the JWT is being used again in a second request. ZoomInfo will use the "jti" attribute to prevent all JWT tokens from being used more than once. For example:
    token.setParam("jti", UUID.randomUUID().toString());
  4. Create the JSON object for the payload. Please refer to the JWT schema's ziPayLoad section below for the parameters which should be set. In the example below, the addProperty() calls set the payload's attributes and values. Example:
    JsonObject infoObject = new JsonObject();
    infoObject.addProperty("ziPartnerCode", "Your Partner Code");
    infoObject.addProperty("ziPartnerContactEmail", "Your contact email address"); //Optional!
    JsonObject payload = token.getPayloadAsJsonObject();
    payload.add("ziPayLoad", infoObject);
  5. Finally sign the token. Example:
    token.serializeAndSign(); 

    This will give you a JWT token as a String.

    The JWT token is used to get the OAuth Access token. To get the access token you should send the JWT token to the https://partnerapi.zoominfo.com/partnerapi/v2/token endpoint and ZoomInfo will decrypt the token, check the values in the payload, and make sure the token is not expired and not being re-used. See below for more details.

Creating a JWT using C#

This example uses JWT version 1.3.4 (https://github.com/jwt-dotnet/jwt) to create a JWT token using C#. Partners are free to choose any JWT library to create their JWT tokens. But, they must strictly follow the JSON schema we publish for the Partner API application. See the Partner API JWT schema below. For more details about JWT tokens, see: https://scotch.io/tutorials/the-anatomy-of-a-json-web-token. If you choose to use a different library to create your JWT tokens, then please refer the documentation for that JWT library which will show you how to create your JWT tokens and add the required fields. To start, you will need your PartnerCode(PC), password, and, if you desire, the email assigned to your partnercode with ZoomInfo.

  1. Declare a Dictionary with Zoom Specific fields:
     var ziPayLoad = new Dictionary()
                {
                    {"ziPartnerCode",pc }
                };
    
                //Add email, if set, to ziPayLoad
                if (email.Length > 0)
                {
                    ziPayLoad.Add("ziPartnerContactEmail", email);
                }
    
  2. Set the creation date and the expiration date. We allow an expiration time up to 1 hour. You may create your JWT to be valid for shorter than that if you desire.
      var utc0 = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
                var issueTime = DateTime.UtcNow;
    
                //Set creation Time for token
                var iat = (int)issueTime.Subtract(utc0).TotalSeconds;
                //Set Expire time for token
                var exp = (int)issueTime.AddMinutes(55).Subtract(utc0).TotalSeconds;
  3. Create new Dictionary. This will contain all the required payload information.
    var payload = new Dictionary()
                {
                    {"iss","zoominfo" }, //Issuer
                    {"iat", iat}, //Issue time
                    {"exp",exp},// Expire time
                    {"jti",Guid.NewGuid().ToString() }, //JTI - random ID
                    { "ziPayLoad", ziPayLoad } //ziPayLoad - Dict created previously
                };
  4. Finally, Encode the data and generate the JWT:
    string token = JsonWebToken.Encode(payload, your password, JWT.JwtHashAlgorithm.HS256); 

    You can access different types ofJWT libraries here: http://jwt.io/

    Partner API JWT Schema:

    {
      "$schema": "http://json-schema.org/draft-04/schema#",
      "type": "object",
      "properties": {
        "iss": { //JWT standard.  Issuer- Whoever is issuing this token.  
          "type": "string",
          "maximum":1
        },
        "iat": { //JWT standard.  Issued at.  Contains the value of the time the token was created in seconds.
          "type": "long"
          "maximum":1
        },
        "exp": { //JWT standard.  Token life time in seconds.  The value will be current time in seconds + 3600.  We at Zoominfo can set the maximum life time, to 1hr (minimum expiration time will be 5 minutes) and let the partner know to set this field within the time range of 5minutes – 1 hr.
          "type": "long"
          "maximum":1
        },
        "jti": { //JWT standard.  JSON Token ID.  This is a UUID.  Useful to enforce the number of times the token can be requested.  Usually, one time token request.
          "type": "string",
          "minimum":0,
          "maximum":1
        },
        "ziPayLoad": { //This entry will be specific to the Zoom Info Partner API.  In the JWT world, it is called private claim.
          "type": "object",
          "maximum":1,
          "properties": {
            "ziPartnerCode": { //The partner code
              "type": "string",
              "minimum":1,
              "maximum":1
            },
            "ziPartnerContactEmail": { //The partner's contact email.  If this is set, then it must be one of the contact email that Zoom Info knows about (i.e. the email to which Zoom Info sends daily usage emails).
              "type": "string",
              "minimum":0,
              "maximum":1
            }
          }
        }
      },
      "required": [
        "iss",
        "iat",
        "jti",
        "exp",
        "ziPayLoad"
      ]
    }
    
  5. Next, the partner needs to request an Access Token. This must be an HTTPS POST request: https://partnerapi.zoominfo.com/partnerapi/v2/token (Enter the data as shown below):

    Method: POST

    Then under Headers, do Custom Header twice for:
    Accept: application/xml
    Content-Type: application/xml

    Body:

    <?xml version="1.0" encoding="utf-8"?> 
    <TokenPostInput xmlns="http://partnerapi.zoominfo.com/partnerapistatic/xsd/V1/TokenPostInput.xsd">   
                   <pc>PartnerCode</pc>   
                   <ziToken>PARTNER GENERATED JWT GOES HERE</ziToken> 
    </TokenPostInput>
     
    Example Responses from https://partnerapi.zoominfo.com/partnerapi/v2/token request:
    <TokenResponse xmlns="http://partnerapi.zoominfo.com/partnerapistatic/xsd/V1/TokenResponse.xsd">
        <token>89e967f5-d637-4cdf-9f72-453dedb65dfc</token>
    </TokenResponse> 
    Error response: 
    <TokenResponse xmlns="http://partnerapi.zoominfo.com/partnerapistatic/xsd/V1/TokenResponse.xsd">
        <tokenError>
            <errorCode>9001</errorCode>
            <errorMessage>Invalid token request</errorMessage>
        </tokenError>
    </TokenResponse> 
    
    
  6. The partner should then call person match (parameter values below are just examples). The input parameters are all the same as they are for a normal person match request, except that the key will be an OAuth access token rather than the normal MD5 encrypted key: https://partnerapi.zoominfo.com/partnerapi/v2/person/match?firstName=jon&lastName=smith&emailAddress=jsmith@leonardinsurance.com&pc=PartnerCode &outputType=xml&key=ACCESSTOKENRETURNEDFROMCALLABOVE&echoInput=true &outputFieldOptions=companyEmployeeCount,companyRevenueNumeric,jobfunction,managementlevel&numMatches=10
  7. Access tokens expire every 6 hours, so the partner will have to create a mechanism for generating new access tokens every 6 hours to continue calling the Enhanced API person match request.

Please wait while we redirect you to your content.

Sign up for a free trial of ZoomInfo

Smarter Sourcing with ZoomInfo

Grow your talent pipeline, improve response rates and fill positions faster with access to millions of passive candidate profiles – complete with direct-dial phone numbers and email addresses. Bring qualified job candidates to clients more than 25 percent faster!

The ZoomInfo database has over 135 million passive candidate profiles.

Provides access to more direct dial phone numbers and email addresses than any other market intelligence provider on the planet.

Allows users to create targeted alerts to be notified when new candidates match their criteria.

“ “The best tool we’ve ever used to identify senior executives, managers and high-end individual contributors, has been a staple in our tool kit since the turn of this century – ZoomInfo.com… ZoomInfo’s power, breadth of information, and its simplicity of use cannot be overstated.” ”

David Perry
Executive Recruiter and Managing Partner of Perry-Martel International

READY TO CRUSH YOUR RECRUITING GOALS?

Get Started

Get Contact Info in 3 Easy Steps

Step 1:

Add Extension

Stop wasting time researching your prospects and digging for direct contact information. You can spend hours searching for phone numbers and email addresses on the Internet, or, you can add the ReachOut extension and have prospects’ direct contact information at your fingertips.

ReachOut is powered by the ZoomInfo database with information on over 135 million business people and 8.5 million companies.


Step 2:

Create Account

You will need to create an account before you can begin using ReachOut. To do this, click on the ReachOut icon in your browser and then click “Create Account.” When prompted, enter your name, email address and password and click “Sign Up.” You will need to provide a mobile phone number for account verification. We will only use this number to send you a verification code via text message. Once you receive that code, enter it in the space provided and click “Verify.”


Step 3:

Access Contact Info

You can now use ReachOut to access direct contact information on your prospects using their LinkedIn or ZoomInfo profile. Navigate to the appropriate profile, then click on the ReachOut icon in your toolbar. Once the profile appears in ReachOut, click “Get contact info.” You can choose whether to email the information to yourself or export it directly to Salesforce as a new lead.

  • Get info in ZoomInfo - Return to Profile
  • Get info in LinkedIn





Copyright © 2015 Zoom Information, Inc. All rights reserved

Sign up for a free trial of ZoomInfo

What Makes ZoomInfo Different?

Remarkable growth requires productivity and efficiency. ZoomInfo’s Growth Acceleration Platform helps businesses achieve both by combining the world’s most comprehensive database with solutions that optimize success.

The database has over 135 million professional profiles and 10 million business profiles.

Data is gathered from proprietary technology that constantly validates B2B contact information.

Provides access to more direct dial phone numbers and email addresses than any other market intelligence provider on the planet.

“ZoomInfo has been extremely helpful in revamping our call list. The timesaver is the biggest plus on my end. Going to one place to find a direct line and email is way more efficient then googling and searching around company websites, which almost never have direct lines. It is an extremely user friendly and beneficial tool.”

Amber Akhtar
Associate Financial Representative at Northwestern Mutual

READY TO CRUSH YOUR GOALS?

Get Started

Subcategories