DealHub Partner API

Two-step PRM integration that authenticates a partner user from a partner relationship management system and returns redirect URLs to create a quote, open an existing quote, or view an opportunity's quotes in DealHub CPQ.

OpenAPI Specification

dealhub-partner-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Partner API
  description: 'This API allows users from Partner Relationship Management (PRM) systems and partner portals to securely access
    DealHub''s CPQ functionality. The integration follows a two-request flow:

    1.  **Authentication (Server-to-Server):** The PRM system makes a server-side call to `/api/v1/authenticate/user` using
    a long-lived secret key to get a short-lived (60 seconds) one-time access token for a specific partner user.

    2.  **Open DealHub CPQ (Client-Side):** The PRM''s client-side application uses the one-time access token to make a request
    to a DealHub endpoint (e.g., `/api/v1/create/quote`). DealHub returns a unique URL. The PRM should then redirect the user''s
    browser to this URL, giving them a seamless and authenticated session in the DealHub portal.'
  version: 1.0.0
servers:
- url: https://api.dealhub.io
  description: The base URL for your DealHub instance.
  variables:
    your-dealhub-instance:
      default: app
      description: Your specific DealHub instance name (e.g., 'app', 'service-eu1').
security:
- oneTimeAccessToken: []
tags:
- name: Partner Integration
  description: Endpoints for integrating Partner Relationship Management (PRM) systems.
paths:
  /api/v1/authenticate/user:
    post:
      tags:
      - Partner Integration
      summary: Authenticate Partner User
      description: Authenticates a partner user from a PRM system and returns a short-lived (60 seconds) one-time access token.
        This is a server-to-server call that does not require a bearer token in the header, instead, the long-lived authentication
        key is sent in the request body.
      operationId: authenticatePartnerUser
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AuthenticationRequest'
            examples:
              authenticatePartnerExample:
                summary: Authenticate a partner user
                value:
                  authentication: 480zZQNXR8zoTicG.7MIkom0ETwBjYWzi
                  user_information:
                    type: partner
                    user_id: qwerty1234356
                    login: david.s@domain.com
                    email: david.s@domain.com
                    name: David Solomon
                    position: Sales
                    phone: 03-12345678
                    mobile: 058-12345678
                    fax: 03-12345679
                    company: Acme Partnerl
                    street: 12nd Broadway
                    city: New York
                    state: NY
                    country: USA
                    postal_code: '1234567'
                    profile_img: https://domain.com/img.png
      responses:
        '200':
          description: Authentication successful.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AuthenticationResponse'
              examples:
                authResponseExample:
                  summary: Successful authentication response
                  value:
                    access_token: 4D114DAD97361C84B154A828FF991
                    errors: []
        '403':
          description: Forbidden. The authentication key is invalid or the request is from an untrusted IP.
  /api/v1/create/quote:
    post:
      tags:
      - Partner Integration
      summary: Get URL to Create a New Quote
      description: Retrieves a URL that redirects an authenticated partner user to the quote creation page within DealHub
        for a specific opportunity. This is a client-side call using the one-time access token.
      operationId: createPartnerQuote
      security:
      - oneTimeAccessToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                opportunity_id:
                  type: string
                  description: This is the CRM's Opportunity ID.
              required:
              - opportunity_id
            examples:
              createQuoteExample:
                summary: Request to create a quote
                value:
                  opportunity_id: x444sh231hr2jkk2
      responses:
        '200':
          description: Success. The response contains the URL for redirection.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RedirectResponse'
              examples:
                redirectResponseExample:
                  summary: Successful redirect response
                  value:
                    url: https://service-eul.dealhub.io/.../
                    errors: []
        '403':
          description: Unauthenticated. The one-time access token is missing, invalid, or expired.
  /api/v1/open/quote:
    post:
      tags:
      - Partner Integration
      summary: Get URL to Open an Existing Quote
      description: Retrieves a URL that redirects an authenticated partner user to an existing quote within DealHub. This
        is a client-side call using the one-time access token.
      operationId: openPartnerQuote
      security:
      - oneTimeAccessToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                opportunity_id:
                  type: string
                  description: This is the CRM's Opportunity ID.
                quote_id:
                  type: string
                  description: This is the CRM's Quote ID.
              required:
              - opportunity_id
              - quote_id
            examples:
              openQuoteExample:
                summary: Request to open an existing quote
                value:
                  opportunity_id: lkdash231hr2jkk2
                  quote_id: urhnvfkjsfdfdgrfdnbkg
      responses:
        '200':
          description: Success. The response contains the URL for redirection.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RedirectResponse'
        '403':
          description: Unauthenticated. The one-time access token is missing, invalid, or expired.
  /api/v1/open/opportunity:
    post:
      tags:
      - Partner Integration
      summary: Get URL to View an Opportunity's Quotes
      description: Retrieves a URL that redirects an authenticated partner user to the opportunity details page in DealHub,
        listing all associated quotes. This is a client-side call using the one-time access token.
      operationId: openPartnerOpportunity
      security:
      - oneTimeAccessToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                opportunity_id:
                  type: string
                  description: This is the CRM's Opportunity ID.
              required:
              - opportunity_id
            examples:
              openOpportunityExample:
                summary: Request to view an opportunity's quotes
                value:
                  opportunity_id: lkdash231hr2jkk2
      responses:
        '200':
          description: Success. The response contains the URL for redirection.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RedirectResponse'
        '403':
          description: Unauthenticated. The one-time access token is missing, invalid, or expired.
components:
  securitySchemes:
    oneTimeAccessToken:
      type: http
      scheme: bearer
      description: The short-lived (60s) one-time access token returned by the `/authenticate/user` endpoint, used for client-side
        requests.
  schemas:
    UserInformation:
      type: object
      description: A list of fields required to create a user in DealHub.
      properties:
        type:
          type: string
          enum:
          - partner
          description: The type of user, which must be 'partner'.
        user_id:
          type: string
          description: The external ID of the user in the PRM system.
        login:
          type: string
          description: Login of the user.
        email:
          type: string
          format: email
          description: The user's email to receive notifications.
        name:
          type: string
          description: The user's first and last name.
        position:
          type: string
          description: The user's position or job title.
        phone:
          type: string
          description: The user's phone number.
        mobile:
          type: string
          description: The user's mobile phone number.
        company:
          type: string
          description: The user's company name.
        street:
          type: string
          description: The user's street address.
        city:
          type: string
          description: The user's city.
        state:
          type: string
          description: The user's state or province.
        country:
          type: string
          description: The user's country.
        postal_code:
          type: string
          description: The user's postal code.
        profile_img:
          type: string
          format: uri
          description: A URL to the user's profile image.
      required:
      - type
      - user_id
      - login
      - email
      - name
    AuthenticationRequest:
      type: object
      properties:
        authentication:
          type: string
          description: The long-lived DealHub authentication key generated in the system settings screen.
        user_information:
          $ref: '#/components/schemas/UserInformation'
      required:
      - authentication
      - user_information
    AuthenticationResponse:
      type: object
      properties:
        access_token:
          type: string
          description: A one-time access token, which expires after 60 seconds.
        errors:
          type: array
          items:
            type: object
    RedirectResponse:
      type: object
      properties:
        url:
          type: string
          format: uri
          description: The URL to which the user's browser should be redirected.
        errors:
          type: array
          items:
            type: object
x-readme:
  explorer-enabled: true
  proxy-enabled: true