D&B Direct+ API

D&B Direct+ is Dun & Bradstreet's flagship RESTful API platform that exposes the D&B Data Cloud — covering more than 500 million companies worldwide — to developers. Direct+ is organized into a small number of capability groups: Identity Resolution (match an input record to a D-U-N-S Number), Search (find candidate businesses by name, address, registration number, contact, or other criteria), Enrich (retrieve "data blocks" of company, principal, hierarchy, financial, beneficial- ownership, ESG, and risk data for a known D-U-N-S Number), Multi-Process (combine match + enrich in a single call), Data File / Batch (asynchronous bulk processing), Research (audit historical responses), and Monitoring (subscribe to change notifications on a managed portfolio of D-U-N-S records). All endpoints accept and return JSON, are versioned via the URI path, and require an OAuth 2.0 client-credentials bearer token.

D&B Direct+ API is one of 8 APIs that Dun & Bradstreet publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 4 JSON Schema definitions.

Tagged areas include Business Data, Identity Resolution, Enrichment, Hierarchy, and Monitoring. The published artifact set on APIs.io includes API documentation, an API reference, a getting-started guide, authentication docs, a changelog, a support channel, and 4 JSON Schemas.

Documentation

Specifications

Examples

📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-generate-access-token-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-cleanse-match-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-search-companies-by-criteria-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-search-contacts-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-get-data-blocks-by-duns-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-multi-process-match-and-enrich-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-submit-batch-file-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-get-batch-file-status-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-download-batch-file-results-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-create-monitoring-registration-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-add-duns-to-registration-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-remove-duns-from-registration-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-pull-monitoring-notifications-example.json
📝
Example
https://raw.githubusercontent.com/api-evangelist/dun-and-bradstreet/refs/heads/main/examples/dnb-direct-plus-get-audit-record-example.json

Schemas & Data

Other Resources

OpenAPI Specification

dnb-direct-plus-openapi-original.yml Raw ↑
openapi: 3.0.3
info:
  title: D&B Direct+ API
  description: >-
    D&B Direct+ is Dun & Bradstreet's RESTful API platform that exposes the
    D&B Data Cloud — more than 500 million companies worldwide — for identity
    resolution, search, enrichment, multi-process (match plus enrich), batch
    processing, change monitoring, and historical research. All endpoints
    return JSON, are versioned in the URI path, and require an OAuth 2.0
    bearer token obtained from the /v3/token endpoint via client-credentials
    grant. This profile is an OpenAPI sketch of the public surface based on
    Dun & Bradstreet's published Direct+ documentation; the canonical
    operation definitions live behind the gated developer portal at
    https://directplus.documentation.dnb.com/.
  version: '3.0'
  contact:
    name: D&B Direct+ Support
    url: https://service.dnb.com/
  termsOfService: https://www.dnb.com/utility-pages/terms-of-use.html
  license:
    name: Proprietary
    url: https://www.dnb.com/utility-pages/terms-of-use.html
servers:
  - url: https://plus.dnb.com
    description: Production
tags:
  - name: Authentication
    description: OAuth 2.0 token issuance for Direct+.
  - name: Identity Resolution
    description: Match an input record to a D-U-N-S Number.
  - name: Search
    description: Find companies, principals, and related entities.
  - name: Enrich
    description: Retrieve Data Blocks for a known D-U-N-S Number.
  - name: Multi-Process
    description: Combined match plus enrich in a single call.
  - name: Data File
    description: Asynchronous batch file submission, status, and download.
  - name: Monitoring
    description: Subscribe to and consume change notifications on a portfolio.
  - name: Research
    description: Retrieve historical responses for audit and reconciliation.
paths:
  /v3/token:
    post:
      tags:
        - Authentication
      summary: Generate Direct+ Access Token
      description: >-
        Exchange Direct+ API credentials for an OAuth 2.0 bearer access token
        using the client-credentials grant. The returned token is included as
        a Bearer authorization header on all subsequent Direct+ calls.
      operationId: generateAccessToken
      security:
        - basicAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TokenRequest'
      responses:
        '200':
          description: Access token issued.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TokenResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/match/cleanseMatch:
    get:
      tags:
        - Identity Resolution
      summary: Match Candidate To D-U-N-S Number
      description: >-
        Submit a candidate business record (name, address, registration
        number, phone, email) and receive a ranked list of D-U-N-S Number
        matches with match-grade, confidence-code, and quality indicators
        suitable for auto-acceptance or manual review.
      operationId: cleanseMatch
      security:
        - bearerAuth: []
      parameters:
        - name: name
          in: query
          required: true
          schema: { type: string }
          description: Business name as supplied by the caller.
        - name: countryISOAlpha2Code
          in: query
          required: true
          schema: { type: string, minLength: 2, maxLength: 2 }
          description: ISO 3166-1 alpha-2 country code.
        - name: streetAddressLine1
          in: query
          schema: { type: string }
        - name: addressLocality
          in: query
          schema: { type: string }
        - name: addressRegion
          in: query
          schema: { type: string }
        - name: postalCode
          in: query
          schema: { type: string }
        - name: telephoneNumber
          in: query
          schema: { type: string }
        - name: registrationNumber
          in: query
          schema: { type: string }
        - name: candidateMaximumQuantity
          in: query
          schema: { type: integer, minimum: 1, maximum: 50, default: 9 }
        - name: confidenceLowerLevelThresholdValue
          in: query
          schema: { type: integer, minimum: 1, maximum: 10 }
      responses:
        '200':
          description: Ranked match candidates returned.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MatchResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/search/criteria:
    get:
      tags:
        - Search
      summary: Search Companies By Criteria
      description: >-
        Find companies matching free-form criteria such as name, address,
        registration number, industry, or contact. Returns a paginated list
        of candidate records intended for browse-and-pick workflows rather
        than authoritative match.
      operationId: searchCompaniesByCriteria
      security:
        - bearerAuth: []
      parameters:
        - name: searchTerm
          in: query
          schema: { type: string }
        - name: countryISOAlpha2Code
          in: query
          schema: { type: string }
        - name: pageNumber
          in: query
          schema: { type: integer, minimum: 1, default: 1 }
        - name: pageSize
          in: query
          schema: { type: integer, minimum: 1, maximum: 50, default: 50 }
      responses:
        '200':
          description: Search results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SearchResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/search/contact:
    get:
      tags:
        - Search
      summary: Search Contacts By Criteria
      description: >-
        Find named principals or contacts (executives, beneficial owners,
        decision-makers) matching the supplied criteria, returning a
        paginated candidate list.
      operationId: searchContacts
      security:
        - bearerAuth: []
      parameters:
        - name: searchTerm
          in: query
          schema: { type: string }
        - name: countryISOAlpha2Code
          in: query
          schema: { type: string }
        - name: pageSize
          in: query
          schema: { type: integer, minimum: 1, maximum: 50, default: 50 }
      responses:
        '200':
          description: Contact search results.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ContactSearchResponse'
  /v1/data/duns/{duns}:
    get:
      tags:
        - Enrich
      summary: Retrieve Data Blocks For D-U-N-S
      description: >-
        Retrieve one or more Data Blocks for a given D-U-N-S Number. The
        caller specifies which blocks (Company Information, Principals &
        Contacts, Hierarchy & Connections, Financial Strength, Risk &
        Compliance, Beneficial Ownership, ESG, etc.) to include via the
        blockIDs query parameter. Each block is independently versioned.
      operationId: getDataBlocksByDuns
      security:
        - bearerAuth: []
      parameters:
        - name: duns
          in: path
          required: true
          schema:
            type: string
            pattern: '^[0-9]{9}$'
          description: Nine-digit D-U-N-S Number.
        - name: blockIDs
          in: query
          required: true
          schema:
            type: string
          description: >-
            Comma-separated list of block IDs with version (e.g.
            companyinfo_L2_v1,principalscontacts_L1_v2).
        - name: tradeUp
          in: query
          schema: { type: string, enum: [hq] }
      responses:
        '200':
          description: Requested data blocks for the D-U-N-S Number.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EnrichResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/multiProcess:
    post:
      tags:
        - Multi-Process
      summary: Match Plus Enrich In One Call
      description: >-
        Combine Identity Resolution and Enrich in a single request: supply
        a candidate input record and the desired data blocks; Direct+ returns
        the resolved D-U-N-S match together with all requested enrichment
        payloads.
      operationId: multiProcessMatchAndEnrich
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MultiProcessRequest'
      responses:
        '200':
          description: Resolved match plus enrichment payloads.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MultiProcessResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/file:
    post:
      tags:
        - Data File
      summary: Submit Batch Data File
      description: >-
        Submit a batch input file for asynchronous match and enrichment.
        Returns a fileID the caller polls until processing is complete.
      operationId: submitBatchFile
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/BatchFileSubmission'
      responses:
        '202':
          description: File accepted for processing.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchSubmissionResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
  /v1/file/{fileId}/status:
    get:
      tags:
        - Data File
      summary: Get Batch File Status
      description: >-
        Poll the processing status of a previously submitted batch file.
        Returns a state of PENDING, PROCESSING, COMPLETED, or FAILED along
        with progress counters.
      operationId: getBatchFileStatus
      security:
        - bearerAuth: []
      parameters:
        - name: fileId
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Batch file status.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BatchStatusResponse'
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/file/{fileId}/download:
    get:
      tags:
        - Data File
      summary: Download Batch File Results
      description: >-
        Download the matched and enriched output file once status is
        COMPLETED. The response is an octet-stream containing the result
        file in the originally requested format.
      operationId: downloadBatchFileResults
      security:
        - bearerAuth: []
      parameters:
        - name: fileId
          in: path
          required: true
          schema: { type: string }
      responses:
        '200':
          description: Batch result file.
          content:
            application/octet-stream:
              schema: { type: string, format: binary }
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/monitoring/registrations:
    post:
      tags:
        - Monitoring
      summary: Create Monitoring Registration
      description: >-
        Register a portfolio of D-U-N-S Numbers for change monitoring. The
        registration declares which data blocks to monitor and how
        notifications should be delivered.
      operationId: createMonitoringRegistration
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MonitoringRegistrationRequest'
      responses:
        '201':
          description: Monitoring registration created.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitoringRegistrationResponse'
  /v1/monitoring/registrations/{registrationReference}/duns:
    post:
      tags:
        - Monitoring
      summary: Add D-U-N-S To Registration
      description: >-
        Add one or more D-U-N-S Numbers to an existing monitoring
        registration's portfolio.
      operationId: addDunsToRegistration
      security:
        - bearerAuth: []
      parameters:
        - name: registrationReference
          in: path
          required: true
          schema: { type: string }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortfolioMembershipRequest'
      responses:
        '200':
          description: Portfolio updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortfolioMembershipResponse'
    delete:
      tags:
        - Monitoring
      summary: Remove D-U-N-S From Registration
      description: >-
        Remove one or more D-U-N-S Numbers from a monitoring registration's
        portfolio.
      operationId: removeDunsFromRegistration
      security:
        - bearerAuth: []
      parameters:
        - name: registrationReference
          in: path
          required: true
          schema: { type: string }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PortfolioMembershipRequest'
      responses:
        '200':
          description: Portfolio updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PortfolioMembershipResponse'
  /v1/monitoring/registrations/{registrationReference}/notifications:
    get:
      tags:
        - Monitoring
      summary: Pull Monitoring Notifications
      description: >-
        Pull pending change notifications for a monitoring registration.
        Each notification describes the D-U-N-S Number affected, the block
        that changed, the previous and new values, and the change timestamp.
      operationId: pullMonitoringNotifications
      security:
        - bearerAuth: []
      parameters:
        - name: registrationReference
          in: path
          required: true
          schema: { type: string }
        - name: maximumQuantity
          in: query
          schema: { type: integer, default: 100, maximum: 1000 }
      responses:
        '200':
          description: Notifications package.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MonitoringNotificationsResponse'
  /v2/audit/duns/{duns}:
    get:
      tags:
        - Research
      summary: Retrieve Historical Audit Record
      description: >-
        Retrieve a historical Direct+ response previously returned for a
        D-U-N-S Number, supporting audit, dispute, and reconciliation use
        cases.
      operationId: getAuditRecord
      security:
        - bearerAuth: []
      parameters:
        - name: duns
          in: path
          required: true
          schema:
            type: string
            pattern: '^[0-9]{9}$'
        - name: transactionTimestamp
          in: query
          required: true
          schema: { type: string, format: date-time }
      responses:
        '200':
          description: Historical record.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuditResponse'
        '404':
          $ref: '#/components/responses/NotFound'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
    basicAuth:
      type: http
      scheme: basic
  responses:
    Unauthorized:
      description: Missing or invalid bearer token.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Error' }
    NotFound:
      description: Resource not found for the supplied identifier.
      content:
        application/json:
          schema: { $ref: '#/components/schemas/Error' }
  schemas:
    TokenRequest:
      type: object
      required: [grant_type]
      properties:
        grant_type:
          type: string
          enum: [client_credentials]
    TokenResponse:
      type: object
      properties:
        access_token: { type: string }
        token_type: { type: string, example: Bearer }
        expirationDateTime: { type: string, format: date-time }
    MatchCandidate:
      type: object
      properties:
        displaySequence: { type: integer }
        matchQualityInformation:
          type: object
          properties:
            confidenceCode: { type: integer }
            matchGrade: { type: string }
            matchDataProfile: { type: string }
        organization:
          $ref: '#/components/schemas/OrganizationSummary'
    MatchResponse:
      type: object
      properties:
        transactionDetail:
          $ref: '#/components/schemas/TransactionDetail'
        inquiryDetail:
          type: object
        matchCandidates:
          type: array
          items: { $ref: '#/components/schemas/MatchCandidate' }
    OrganizationSummary:
      type: object
      properties:
        duns: { type: string, pattern: '^[0-9]{9}$' }
        primaryName: { type: string }
        primaryAddress:
          $ref: '#/components/schemas/Address'
        countryISOAlpha2Code: { type: string }
        telephone:
          type: array
          items: { type: object, properties: { telephoneNumber: { type: string } } }
        registrationNumbers:
          type: array
          items: { type: object, properties: { registrationNumber: { type: string }, typeDescription: { type: string } } }
    Address:
      type: object
      properties:
        streetAddress:
          type: object
          properties:
            line1: { type: string }
            line2: { type: string }
        addressLocality: { type: object, properties: { name: { type: string } } }
        addressRegion: { type: object, properties: { name: { type: string }, abbreviatedName: { type: string } } }
        postalCode: { type: string }
        addressCountry: { type: object, properties: { isoAlpha2Code: { type: string } } }
    SearchResponse:
      type: object
      properties:
        transactionDetail: { $ref: '#/components/schemas/TransactionDetail' }
        candidatesReturnedQuantity: { type: integer }
        candidatesMatchedQuantity: { type: integer }
        searchCandidates:
          type: array
          items:
            type: object
            properties:
              organization: { $ref: '#/components/schemas/OrganizationSummary' }
    ContactSearchResponse:
      type: object
      properties:
        transactionDetail: { $ref: '#/components/schemas/TransactionDetail' }
        candidatesReturnedQuantity: { type: integer }
        searchCandidates:
          type: array
          items:
            type: object
            properties:
              contact:
                type: object
                properties:
                  fullName: { type: string }
                  jobTitles:
                    type: array
                    items: { type: object, properties: { title: { type: string } } }
              organization: { $ref: '#/components/schemas/OrganizationSummary' }
    EnrichResponse:
      type: object
      properties:
        transactionDetail: { $ref: '#/components/schemas/TransactionDetail' }
        inquiryDetail: { type: object }
        organization:
          type: object
          properties:
            duns: { type: string }
            primaryName: { type: string }
            primaryAddress: { $ref: '#/components/schemas/Address' }
            registrationNumbers:
              type: array
              items: { type: object }
            corporateLinkage: { type: object }
            financials:
              type: array
              items: { type: object }
            principals:
              type: array
              items: { type: object }
            beneficialOwnership: { type: object }
            riskAssessment: { type: object }
    MultiProcessRequest:
      type: object
      required: [inquiryDetail, blockIDs]
      properties:
        inquiryDetail:
          type: object
          properties:
            name: { type: string }
            countryISOAlpha2Code: { type: string }
            address: { $ref: '#/components/schemas/Address' }
        blockIDs:
          type: array
          items: { type: string }
    MultiProcessResponse:
      type: object
      properties:
        transactionDetail: { $ref: '#/components/schemas/TransactionDetail' }
        matchCandidates:
          type: array
          items: { $ref: '#/components/schemas/MatchCandidate' }
        organization:
          type: object
          description: Resolved enrichment payload for the top-ranked match.
    BatchFileSubmission:
      type: object
      properties:
        file:
          type: string
          format: binary
        processId: { type: string, description: 'Direct+ process identifier (match, enrich, etc).' }
        productId: { type: string }
    BatchSubmissionResponse:
      type: object
      properties:
        fileId: { type: string }
        submissionTimestamp: { type: string, format: date-time }
        status: { type: string, enum: [PENDING] }
    BatchStatusResponse:
      type: object
      properties:
        fileId: { type: string }
        status: { type: string, enum: [PENDING, PROCESSING, COMPLETED, FAILED] }
        processedRecordCount: { type: integer }
        totalRecordCount: { type: integer }
    MonitoringRegistrationRequest:
      type: object
      required: [registrationReference]
      properties:
        registrationReference: { type: string }
        description: { type: string }
        blockIDs:
          type: array
          items: { type: string }
        deliveryMethod: { type: string, enum: [SFTP, API_PULL] }
    MonitoringRegistrationResponse:
      type: object
      properties:
        registrationReference: { type: string }
        status: { type: string }
        createdTimestamp: { type: string, format: date-time }
    PortfolioMembershipRequest:
      type: object
      required: [dunsList]
      properties:
        dunsList:
          type: array
          items: { type: string, pattern: '^[0-9]{9}$' }
    PortfolioMembershipResponse:
      type: object
      properties:
        addedQuantity: { type: integer }
        removedQuantity: { type: integer }
        rejectedDuns:
          type: array
          items: { type: object, properties: { duns: { type: string }, reason: { type: string } } }
    MonitoringNotificationsResponse:
      type: object
      properties:
        notifications:
          type: array
          items:
            type: object
            properties:
              duns: { type: string }
              changeTimestamp: { type: string, format: date-time }
              blockID: { type: string }
              elementId: { type: string }
              previousValue: {}
              currentValue: {}
    AuditResponse:
      type: object
      properties:
        duns: { type: string }
        transactionTimestamp: { type: string, format: date-time }
        originalResponse: { type: object }
    TransactionDetail:
      type: object
      properties:
        transactionID: { type: string }
        transactionTimestamp: { type: string, format: date-time }
        inLanguage: { type: string }
        serviceVersion: { type: string }
    Error:
      type: object
      properties:
        transactionDetail: { $ref: '#/components/schemas/TransactionDetail' }
        error:
          type: object
          properties:
            errorMessage: { type: string }
            errorCode: { type: string }
            errorDetails:
              type: array
              items: { type: object }