Vault-API-Library 25.1.1 API

VAPIL Introduction and Getting Started Guide

Introduction

The Vault API Library (VAPIL) is an open-source Java library for the Vault REST API. VAPIL provides full API endpoint coverage for Vault integrations.

The VAPIL release cycle follows the Vault API release cycle, with three general releases a year. Each VAPIL release aligns with the features of the Vault API release for consistency and coverage.

  • Vault API version v21.1 is released, VAPIL version v21.1.0 is released
  • When defects are fixed, VAPIL version v21.1.1, v21.1.2, etc will be released
  • Vault API version v21.2 is released, VAPIL version v21.2.0 is released
Consistent integration solution with Vault API requests/responses
  • One solution to develop and support
  • Consistent development patterns that are similar the Vault Java SDK
  • Full coverage of all platform API endpoints
  • Expose API requests/responses in clearly defined Java classes, getters, setters, and methods
Dedication to documentation, available in Javadoc
  • Easily find API endpoints from Vault help webpage in the source or Javadoc
  • One-to-one alignment between VAPIL methods and the Vault API endpoint/documentation
Developer friendly
  • Easy to start, quick to build
  • Allow integration developer full control of design/implementation decisions, processing rules, exception handling
Developer Ownership

VAPIL developers are responsible for:

  • Following integration best practices with Vault and related systems
  • Using bulk and batch processes whenever possible
  • Respecting API authentication and burst limits
  • Exception handling

Support and Issue Tracking

Enhancements, Issues, and documentation update requests can be reported via the Vault for Developers community on Veeva Connect

Source Code

Source code is available on GitHub: Vault API Library

Getting Started - Hello World

  1. Import VAPIL to a Maven project by adding the following to the project pom.xml file
    <repositories>
         <repository>
              <id>vapil</id>
              <url>https://veeva.github.io/vault-api-library/maven</url>
              <releases>
                   <enabled>true</enabled>
                   <updatePolicy>never</updatePolicy>
              </releases>
         </repository>
    </repositories>
    <dependencies>
         <dependency>
              <groupId>com.veeva.vault</groupId>
              <artifactId>vapil</artifactId>
              <version>25.1.1</version>
         </dependency>
    </dependencies>
  2. Create a class "HelloWorld" and add the following code
    public class HelloWorld {
            public static void main(String[] args) {
                    // Set the Vault Client Id, which is required for all API calls
                    String vaultClientId = "verteobiotech-vault-quality-client-myintegration";
                    // Instantiate the VAPIL VaultClient using user name and password authentication
                    VaultClient vaultClient = VaultClient
                                    .newClientBuilder(VaultClient.AuthenticationType.BASIC)
                                    .withVaultDNS("verteobiotech.veevavault.com")
                                    .withVaultUsername("username@verteobiotech.com")
                                    .withVaultPassword("password")
                                    .withVaultClientId(vaultClientId)
                                    .build();
                    // Perform a VQL query and display the results
                    QueryResponse resp = vaultClient.newRequest(QueryRequest.class)
                                    .query("SELECT name__v, email__sys FROM user__sys MAXROWS 3");
                    if (resp != null) {
                            System.out.println("-----------------------------------------");
                            System.out.println("Response Status = " + resp.getResponseStatus());
                            System.out.println("Total Records = " + resp.getData().size());
                            for (QueryResponse.QueryResult row : resp.getData())
                                    System.out.println("Name = " + row.get("name__v") + ", Email = " + row.get("email__sys"));
                    }
            }
    }
                    
  3. Run the code and verify the results
    -----------------------------------------
    Response Status = SUCCESS
    Total Records = 3
    Name = System, Email = System
    Name = Todd Taylor, Email = todd.taylor@verteobiotech.com
    Name = Mark Arnold, Email = mark.arnold@verteobiotech.com
                    
  4. Now that you have a starting point, check out the sample code and go build your interface!

Sample Code

Instantiate the Vault Client with an Existing Session
String vaultClientId = "verteobiotech-vault-quality-client-myintegration";

String sessionId = "xxxxxxxxxxxxxxxxx";
VaultClient vaultClient = VaultClient
        .newClientBuilder(VaultClient.AuthenticationType.SESSION_ID)
        .withVaultDNS("verteobiotech.veevavault.com")
        .withVaultSessionId(sessionId)
        .withVaultClientId(vaultClientId)
        .build();
Create a Single Document
Document doc = new Document();

doc.setName("VAPIL Single Document");
doc.setLifecycle("General Lifecycle");
doc.setType("General");
doc.setTitle("Test Upload VAPIL");
doc.set("custom_field__c", "value");

DocumentResponse documentResponse = vaultClient.newRequest(DocumentRequest.class)
        .setInputPath(filePath)
        .createSingleDocument(doc);
Bulk Create Multiple Documents from CSV File
DocumentBulkResponse documentResponse = vaultClient.newRequest(DocumentRequest.class)
        .setInputPath(csvFilePath)
        .createMultipleDocuments();
Bulk Update Object Records (Input CSV, JSON Response)
ObjectRecordBulkResponse objectResponse = vaultClient.newRequest(ObjectRecordRequest.class)
        .setContentTypeCsv()
        .setInputPath(localPath)
        .updateObjectRecords("product__v");
Retrieve the Audit Trail for Documents in past 30 days
DocumentAuditResponse auditResponse = vaultClient.newRequest(LogRequest.class)
                .setStartDateTime(ZonedDateTime.now(ZoneId.of("UTC")).minusDays(29))
                .setEndDateTime(ZonedDateTime.now(ZoneId.of("UTC")).minusDays(1))
                .setLimit(4)
                .retrieveAuditDetails(LogRequest.AuditTrailType.DOCUMENT);

AuditDetailsResponse.ResponseDetails details = auditResponse.getResponseDetails();
System.out.println("Offset = " + details.getOffset());
System.out.println("Limit = " + details.getLimit());
System.out.println("Size = " + details.getSize());
System.out.println("Total = " + details.getTotal());
System.out.println("Object/Name = " + details.getDetailsObject().getName());
System.out.println("Object/Label = " + details.getDetailsObject().getLabel());
System.out.println("Object/Url = " + details.getDetailsObject().getUrl());

System.out.println("Items ****");
for (DocumentAuditResponse.DocumentAudit audit : auditResponse.getData()) {
        System.out.println("\n**** Data Item **** ");
        System.out.println("id = " + audit.getId());
        System.out.println("timestamp = " + audit.getTimestamp());
        System.out.println("UserName = " + audit.getUserName());
        System.out.println("Full Name = " + audit.getFullName());
        System.out.println("Action = " + audit.getAction());
        System.out.println("Item = " + audit.getItem());
        System.out.println("Field Name = " + audit.getFieldName());
        System.out.println("Workflow Name = " + audit.getWorkflowName());
        System.out.println("Task Name = " + audit.getTaskName());
        System.out.println("Signature Meaning = " + audit.getSignatureMeaning());
        System.out.println("View License = " + audit.getViewLicense());
        System.out.println("Job Instance ID = " + audit.getJobInstanceId());
        System.out.println("Doc ID = " + audit.getDocId());
        System.out.println("Version = " + audit.getVersion());
        System.out.println("Document Url = " + audit.getDocumentUrl());
        System.out.println("Event Description = " + audit.getEventDescription());
}
Packages
Package
Description
Full coverage of the Vault API including requests and responses
HTTPS Client for the Vault API
Models for all responses, metadata, and data
Builder pattern to create models
Models for Vault data such as documents, object records, users, and groups
Models for Vault metadata such as Vault Objects, Vault Object Fields, and Document Fields
Models for Vault API responses
Methods to perform Vault API calls, with each method mapping to a Vault API endpoint
Generic connector methods for Vault API