Knak OAuth2 API

Endpoints that need to be implemented to support OAuth2 — the token and authorize endpoints a CUSTOMER exposes so Knak can authenticate against their Custom DAM or Custom Sync Location service. Not a Knak-hosted API; the base URL is the placeholder host Knak publishes in its specifications.

OpenAPI Specification

knak-oauth2-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  description: |
    ## Overview
    An API specification to search and use DAM content in Knak.

    By implementing a service conforming to this API specification, you will be able to search for and use
    content in your custom DAM in Knak.

    ## Authentication
    Knak can use OAuth 2.0 or HTTP Basic to authenticate with your API.

    ### OAuth 2.0
    For OAuth 2.0, you will need to implement the necessary endpoints under the
    `/oauth2` path to support this. The flow used is the standard [Authorization Code Grant](https://tools.ietf.org/html/rfc6749#section-4.1).

    Knak will use the tokens generated to make requests to your service on behalf of the current authenticated user.

    ### HTTP Basic
    For HTTP Basic, Knak will include a valid username and password that are base64 encoded in the Authorization
    header for the request to your service. The credentials can be set in Knak when creating a new custom DAM integration.

    ## DAM Assets
    Knak will call the `/dam-assets` and `/search` endpoints to retrieve assets from your DAM. The two main use cases are:
    - reading all assets and folders in a given folder
    - searching for assets matching a given search term, within a selected path

    Note that Knak will use the URL\'s of the fetched assets for both preview and final deployment,
    and will never transfer any asset content from your DAM to Knak directly.
  version: V1
  title: Custom Digital Asset Management (DAM) API Reference — OAuth2
  x-logo:
    url: https://s3.amazonaws.com/assets.knak.io/img/Knak-Logo-Medium.png
servers:
- url: https://yourService.com/yourDamApi
tags:
- name: OAuth2
  description: Endpoints that need to be implemented to support OAuth2
paths:
  /v1/oauth/token:
    post:
      tags:
      - OAuth2
      summary: Provide an Access Token
      description: If using an Oauth2 configured custom sync location integration Knak will call this
        endpoint to get an access token for your service. This is used to authenticate requests from Knak
        to your service.
      requestBody:
        required: true
        content:
          application/x-www-form-urlencoded:
            schema:
              type: object
              properties:
                grant_type:
                  type: string
                  description: The grant type. This should be `authorization_code`.
                  example: authorization_code
                code:
                  type: string
                  description: The authorization code.
                  example: '123456'
                redirect_uri:
                  type: string
                  description: The redirect URI.
                  example: https://yourService.com/oauth/callback
                client_id:
                  type: string
                  description: The client ID.
                  example: your-client-id
                client_secret:
                  type: string
                  description: The client secret.
                  example: your-client-secret
      responses:
        200:
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  access_token:
                    type: string
                    description: The access token.
                    example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
                  token_type:
                    type: string
                    description: The token type.
                    example: Bearer
                  expires_in:
                    type: integer
                    description: The number of seconds until the token expires.
                    example: 3600
        400:
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  error:
                    type: string
                    description: The error message.
                    example: invalid_request
                  error_description:
                    type: string
                    description: A description of the error.
                    example: The request is missing a required parameter.
        401:
          description: Unauthorized
    servers:
    - url: https://yourService.com/your-sync-location-api
  /oauth2/authorize:
    get:
      tags:
      - OAuth2
      summary: OAuth2 Authorization
      description: <p> <a href='https://tools.ietf.org/html/rfc6749#section-3.1'>OAuth2 Authorize</a>
        endpoint. Will need to be configured in Knak. </p>
      parameters:
      - name: response_type
        in: query
        required: true
        schema:
          type: string
        description: The expected response type. This field should be `code`
        example: code
      - name: client_id
        in: query
        required: true
        schema:
          type: string
        description: The client ID (will need to be configured in Knak)
        example: '1948194'
      - name: redirect_uri
        in: query
        required: true
        schema:
          type: string
        description: The URI that expected authorization code should be sent to.
        example: https://enterprise.knak.io/account/integrations/custom-dam/authorize
      - name: state
        in: query
        required: true
        schema:
          type: string
        description: State
        example: za81js910s
      - name: scope
        in: query
        required: false
        schema:
          type: string
        description: 'Optional: if your application requires a set of scopes, they can be configured in
          Knak'
        example: read:assets
      responses:
        200:
          description: success
    servers:
    - url: https://yourService.com/yourDamApi
  /oauth2/token:
    post:
      tags:
      - OAuth2
      summary: OAuth2 Token
      description: |
        <p>
        <a href='https://tools.ietf.org/html/rfc6749#section-3.2'>OAuth2 Token</a>
        endpoint. Please note that this authorization url is configured in Knak.
        The required parameters depend on the grant type requested:
        </p>

        <p>Authorization Code:</p>
        <ul>
          <li>grant_type: authorization_code</li>
          <li>client_id</li>
          <li>client_secret</li>
          <li>code</li>
          <li>redirect_uri</li>
        </ul>

        <p>Refresh Token</p>
        <ul>
          <li>grant_type: refresh_token</li>
          <li>client_id </li>
          <li>client_secret </li>
          <li>refresh_token </li>
        </ul>
      parameters:
      - name: tokenRequest
        in: body
        schema:
          $ref: '#/components/schemas/OAuth2TokenRequest'
      responses:
        200:
          description: success
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OAuth2TokenResponse'
    servers:
    - url: https://yourService.com/yourDamApi
components:
  schemas:
    OAuth2TokenRequest:
      type: object
      required:
      - grant_type
      properties:
        grant_type:
          type: string
          description: The expected OAuth2 grant type. This field should be `authorization_code` or `refresh_token`
          example: authorization_code
        code:
          type: string
          description: 'The authorization code granted by the application. Used with grant type: authorization_code'
          example: 1as314rdfv291si2
        client_id:
          type: string
          description: The client ID
          example: '1948194'
        client_secret:
          type: string
          description: The client secret
          example: '1948194'
        redirect_uri:
          type: string
          description: 'The URI that expected authorization code was sent to. Used with grant type: authorization_code'
          example: https://enterprise.knak.io/account/integrations/custom-dam/authorize
        refresh_token:
          type: string
          description: 'The refresh token for the member that needs its token to be refreshed. Used with
            grant type: refresh_token'
          example: 'null'
    OAuth2TokenResponse:
      type: object
      properties:
        access_token:
          type: string
          description: The member's assigned access token
          example: wj1ds92jdowk132
        refresh_token:
          type: string
          description: 'The member''s assigned refresh token '
          example: ai298dj2od01kde
        expires_in:
          type: string
          description: The number of seconds in which the access token is valid
          example: '7200'
        token_type:
          type: string
          description: The type of access token
          example: ai298dj2od01kde