> ## Documentation Index
> Fetch the complete documentation index at: https://nango.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# API configuration (`providers.yaml`)

API configurations are listed in the `providers.yaml` file, located in the [Nango GitHub repository](https://github.com/NangoHQ/nango/blob/master/packages/providers/providers.yaml).

# Examples

<Tabs>
  <Tab title="Hubspot">
    ```yaml theme={null}
    hubspot:
        display_name: HubSpot
        categories:
            - marketing
            - support
            - crm
        auth_mode: OAUTH2
        authorization_url: https://app.hubspot.com/oauth/authorize
        token_url: https://api.hubapi.com/oauth/v1/token
        connection_configuration:
            - portalId
        post_connection_script: hubspotPostConnection
        webhook_routing_script: hubspotWebhookRouting
        proxy:
            base_url: https://api.hubapi.com
            decompress: true
            paginate:
                type: cursor
                cursor_path_in_response: paging.next.after
                limit_name_in_request: limit
                cursor_name_in_request: after
                response_path: results
        docs: https://nango.dev/docs/api-integrations/hubspot
    ```
  </Tab>

  <Tab title="Salesforce">
    ```yaml theme={null}
    salesforce:
        display_name: Salesforce
        categories:
            - crm
        auth_mode: OAUTH2
        authorization_url: https://login.salesforce.com/services/oauth2/authorize
        token_url: https://login.salesforce.com/services/oauth2/token
        authorization_params:
            prompt: consent
        default_scopes:
            - offline_access
        token_response_metadata:
            - instance_url
        proxy:
            base_url: ${connectionConfig.instance_url}
        webhook_routing_script: salesforceWebhookRouting
        post_connection_script: salesforcePostConnection
        docs: https://nango.dev/docs/api-integrations/salesforce
        connection_config:
            instance_url:
                type: string
                title: Instance URL
                description: The instance URL of your Salesforce account
                format: uri
                pattern: '^https?://.*$'
    ```
  </Tab>

  <Tab title="Google">
    ```yaml theme={null}
    google:
        display_name: Google
        auth_mode: OAUTH2
        authorization_url: https://accounts.google.com/o/oauth2/v2/auth
        token_url: https://oauth2.googleapis.com/token
        authorization_params:
            response_type: code
            access_type: offline
            prompt: consent
        proxy:
            base_url: https://www.googleapis.com
            paginate:
                type: cursor
                cursor_path_in_response: nextPageToken
                limit_name_in_request: maxSize
                cursor_name_in_request: pageToken
                response_path: items
        docs: https://nango.dev/docs/api-integrations/google
    ```
  </Tab>

  <Tab title="Notion">
    ```yaml theme={null}
    notion:
        display_name: Notion
        categories:
            - knowledge-base
            - productivity
        auth_mode: OAUTH2
        authorization_url: https://api.notion.com/v1/oauth/authorize
        token_url: https://api.notion.com/v1/oauth/token
        authorization_params:
            response_type: code
            owner: user
        authorization_method: header
        body_format: json
        proxy:
            retry:
                after: 'Retry-After'
            base_url: https://api.notion.com
            headers:
                'Notion-Version': '2022-06-28'
            paginate:
                type: cursor
                cursor_path_in_response: next_cursor
                cursor_name_in_request: start_cursor
                limit_name_in_request: page_size
                response_path: results
        docs: https://nango.dev/docs/api-integrations/notion
    ```
  </Tab>

  <Tab title="Linear">
    ```yaml theme={null}
    linear:
        display_name: Linear
        categories:
            - productivity
            - ticketing
        auth_mode: OAUTH2
        authorization_url: https://linear.app/oauth/authorize
        token_url: https://api.linear.app/oauth/token
        scope_separator: ','
        authorization_params:
            prompt: consent
        proxy:
            base_url: https://api.linear.app
        disable_pkce: true
        webhook_routing_script: linearWebhookRouting
        post_connection_script: linearPostConnection
        webhook_user_defined_secret: true
        docs: https://nango.dev/docs/api-integrations/linear
    ```
  </Tab>

  <Tab title="Slack">
    ```yaml theme={null}
    slack:
        display_name: Slack
        categories:
            - productivity
        auth_mode: OAUTH2
        authorization_url: https://slack.com/oauth/v2/authorize
        token_url: https://slack.com/api/oauth.v2.access
        token_response_metadata:
            - incoming_webhook.url
            - incoming_webhook.channel
            - incoming_webhook.channel_id
            - bot_user_id
            - team.id
        proxy:
            base_url: https://slack.com/api
            paginate:
                type: cursor
                cursor_path_in_response: response_metadata.next_cursor
                cursor_name_in_request: cursor
                limit_name_in_request: limit
        webhook_routing_script: slackWebhookRouting
        docs: https://nango.dev/docs/api-integrations/slack
    ```
  </Tab>
</Tabs>

# All configuration fields

<Tip>Looking for the JSON Schema, find it in our [GitHub](https://github.com/NangoHQ/nango/blob/master/scripts/validation/providers/schema.json)</Tip>

<ResponseField name="alias" type="string">
  Allows to extend the configuration of another API.
</ResponseField>

<ResponseField name="display_name" type="string" required>
  The display name of the provider, used in the UI.
</ResponseField>

<ResponseField name="auth_mode" type="string">
  The authentication mode. Must be one of: "API\_KEY", "APP", "APP\_STORE", "BASIC", "NONE", "OAUTH1", "OAUTH2", "OAUTH2\_CC", "CUSTOM", "TBA", "JWT", "BILL", "TWO\_STEP", "SIGNATURE".
</ResponseField>

<ResponseField name="auth" type="object">
  Authentication configuration.

  <Expandable>
    <ResponseField name="response_type" type="string">
      The response type for authentication.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="authorization_method" type="string">
  The authorization method. Must be `header`
</ResponseField>

<ResponseField name="authorization_params" type="object">
  Query parameters of the authorization request.

  <Expandable>
    <ResponseField name="access_type" type="string">
      Possible value: "offline"
    </ResponseField>

    <ResponseField name="approval_prompt" type="string">
      Possible values: "auto", "force"
    </ResponseField>

    <ResponseField name="duration" type="string">
      Possible value: "permanent"
    </ResponseField>

    <ResponseField name="expiration" type="string">
      Possible value: "never"
    </ResponseField>

    <ResponseField name="force_verify" type="boolean">
      Whether to force verification
    </ResponseField>

    <ResponseField name="nonce" type="string">
      A unique string to be included in the request
    </ResponseField>

    <ResponseField name="prompt" type="string">
      Possible value: "consent"
    </ResponseField>

    <ResponseField name="response_mode" type="string">
      The mode of the response
    </ResponseField>

    <ResponseField name="response_type" type="string">
      The type of the response
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="authorization_url" type="string">
  The URL to get the OAuth 2 credentials from the external API.
</ResponseField>

<ResponseField name="authorization_url_encoded" type="boolean">
  Should the `authorization_url` be encoded or not
</ResponseField>

<ResponseField name="authorization_url_replacements" type="object">
  An object containing key-value pairs for replacements in the authorization URL.
</ResponseField>

<ResponseField name="body_format" type="string">
  The format of the request body. e.g: `json`
</ResponseField>

<ResponseField name="categories" type="array">
  An array of strings representing the categories of the API.
</ResponseField>

<ResponseField name="connection_configuration" type="array">
  An array of strings representing the `connectionConfig` that are automatically populated by post-connection functions.
</ResponseField>

<ResponseField name="decode_url" type="boolean">
  Whether to decode the URL or not.
</ResponseField>

<ResponseField name="default_scopes" type="array">
  The minimum list of scopes that are necessary to connect to the API.
</ResponseField>

<ResponseField name="disable_pkce" type="boolean">
  Disables the [PKCE](https://oauth.net/2/pkce/) extension to the Authorization Code flow.
</ResponseField>

<ResponseField name="docs" type="string">
  The URL to the developer API documentation.
</ResponseField>

<ResponseField name="docs_connect" type="string">
  The URL to the end user documentation (e.g: how to connect).
</ResponseField>

<ResponseField name="post_connection_script" type="string">
  The name of the script to run after a connection is established.
</ResponseField>

<ResponseField name="proxy" type="object">
  Proxy configuration for the API.

  <Expandable>
    <ResponseField name="base_url" type="string">
      The base URL for the API.
    </ResponseField>

    <ResponseField name="decompress" type="boolean">
      Whether to decompress the response.
    </ResponseField>

    <ResponseField name="headers" type="object">
      Headers to be sent with each request.
    </ResponseField>

    <ResponseField name="paginate" type="object">
      Pagination configuration.

      <Expandable>
        <ResponseField name="cursor_name_in_request" type="string">
          The name of the cursor parameter in the request.
        </ResponseField>

        <ResponseField name="cursor_path_in_response" type="string">
          The path to the cursor value in the response.
        </ResponseField>

        <ResponseField name="limit_name_in_request" type="string">
          The name of the limit parameter in the request.
        </ResponseField>

        <ResponseField name="link_rel_in_response_header" type="string">
          The rel attribute of the link header for pagination.
        </ResponseField>

        <ResponseField name="link_path_in_response_body" type="string">
          The path to the link in the response body.
        </ResponseField>

        <ResponseField name="offset_name_in_request" type="string">
          The name of the offset parameter in the request.
        </ResponseField>

        <ResponseField name="offset_calculation_method" type="string">
          The method to calculate the offset in the request. Must be one of: "per-page" or "by-response-size". Optional parameter that defaults to "by-response-size".
        </ResponseField>

        <ResponseField name="offset_start_value" type="number">
          The starting value for the offset.
        </ResponseField>

        <ResponseField name="response_path" type="string">
          The path to the paginated data in the response.
        </ResponseField>

        <ResponseField name="type" type="string">
          The type of pagination. Must be one of: "link", "cursor", "offset".
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="query" type="object">
      Query parameters to be sent with each request.
    </ResponseField>

    <ResponseField name="retry" type="object">
      Retry configuration.

      <Expandable>
        <ResponseField name="after" type="string">
          The name of the rate-limit header, e.g. `after: 'X-Rate-Limit-Reset'`
        </ResponseField>

        <ResponseField name="at" type="string">
          The name of the rate-limit header, e.g. `at: 'x-ratelimit-reset'`
        </ResponseField>
      </Expandable>
    </ResponseField>

    <ResponseField name="verification" type="object" required>
      Configure a HTTP call to verify if credentials are valid, only used for API Key and Basic auth.

      <Expandable>
        <ResponseField name="method" type="string">
          The HTTP method for verification. Must be either "GET" or "POST".
        </ResponseField>

        <ResponseField name="endpoint" type="string" required>
          The endpoint for verification.
        </ResponseField>

        <ResponseField name="base_url_override" type="string">
          Override the base URL for verification.
        </ResponseField>

        <ResponseField name="headers" type="object">
          Headers for the verification request.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="redirect_uri_metadata" type="array">
  The metadata to capture from the callback request.
</ResponseField>

<ResponseField name="refresh_url" type="string">
  The URL used for refreshing the access token. Defaults to the `token_url`
</ResponseField>

<ResponseField name="refresh_params" type="object">
  Parameters used for refreshing the access token.

  <Expandable>
    <ResponseField name="grant_type" type="string">
      The grant type for refreshing the token. Must be "refresh\_token".
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="request_params" type="object">
  An object containing request parameters to pass to an authorization request.
</ResponseField>

<ResponseField name="request_url" type="string">
  The URL for making API an authorization request.
</ResponseField>

<ResponseField name="scope_separator" type="string">
  The separator used between scopes in the authorization request.
  Defaults to space, but some APIs sur `,` or `+`.
</ResponseField>

<ResponseField name="signature_method" type="string">
  The signature method used for OAuth 1.0. Must be either "HMAC-SHA1" or "PLAINTEXT".
</ResponseField>

<ResponseField name="token_expiration_buffer" type="number">
  A buffer time (in seconds) before the token expiration to trigger a refresh.
</ResponseField>

<ResponseField name="token_params" type="object">
  Parameters used for obtaining the access token.

  <Expandable>
    <ResponseField name="grant_type" type="string">
      The grant type for obtaining the token. Must be either "authorization\_code" or "client\_credentials".
    </ResponseField>

    <ResponseField name="request" type="string">
      Additional request information for obtaining the token.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="token_request_auth_method" type="string">
  The authentication method used for token requests. Must be either "basic" or "custom".
</ResponseField>

<ResponseField name="expires_in_unit" type="string">
  The unit of time for token expiration. Must be "milliseconds".
</ResponseField>

<ResponseField name="token_response_metadata" type="array">
  An array of strings representing metadata from the token response that will be saved in `connection.metadata`.
</ResponseField>

<ResponseField name="token_url" type="string">
  The URL to get the OAuth 2 credentials from the external API.
</ResponseField>

<ResponseField name="token_url_encoded" type="boolean">
  Should the `token_url` be encoded or not
</ResponseField>

<ResponseField name="webhook_user_defined_secret" type="boolean">
  Wether the webhook secret is set by the user.
</ResponseField>

<ResponseField name="webhook_routing_script" type="array">
  Specifies a script to handle external [webhooks](/getting-started/use-cases/webhooks-from-external-apis).
</ResponseField>

<ResponseField name="authorization_url_fragment" type="string">
  Specifies a fragment to be appended to the authorization URL, typically used to modify the redirection flow or pass additional information in the URL before the query parameters.
</ResponseField>

<ResponseField name="connection_config" type="object">
  The list of properties available in `${connectionConfig}` and their validation.

  <Expandable>
    <ResponseField name="[name]" type="object">
      <Expandable>
        <ResponseField name="type" type="string" required>
          The type of this value. Must be "string".
        </ResponseField>

        <ResponseField name="title" type="string" required>
          The title of this value.
        </ResponseField>

        <ResponseField name="description" type="string" required>
          The description of this value.
        </ResponseField>

        <ResponseField name="example" type="string">
          An example of valid value to display in a UI.
        </ResponseField>

        <ResponseField name="pattern" type="string">
          A regex pattern for the credential.
        </ResponseField>

        <ResponseField name="format" type="string">
          The special format of this value (e.g: `hostname`, `uri`)
        </ResponseField>

        <ResponseField name="order" type="number">
          The order in which this field should be displayed in a UI
        </ResponseField>

        <ResponseField name="doc_section" type="string">
          The documentation section relative to `docs_connect`
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="credentials" type="object">
  The list of credentials and their validation, only filed if necessary (e.g: API\_KEY, BASIC)

  <Expandable>
    <ResponseField name="[credential_name]" type="object">
      <Expandable>
        <ResponseField name="type" type="string" required>
          The type of the credential. Must be "string".
        </ResponseField>

        <ResponseField name="title" type="string" required>
          The title of the credential.
        </ResponseField>

        <ResponseField name="description" type="string" required>
          The description of the credential.
        </ResponseField>

        <ResponseField name="example" type="string">
          An example of the credential.
        </ResponseField>

        <ResponseField name="pattern" type="string">
          A pattern for the credential.
        </ResponseField>

        <ResponseField name="format" type="string">
          The format of the credential.
        </ResponseField>

        <ResponseField name="doc_section" type="string">
          The documentation section for the credential.
        </ResponseField>
      </Expandable>
    </ResponseField>
  </Expandable>
</ResponseField>

<Tip>
  **Questions, problems, feedback?** Please reach out in the [Slack community](https://nango.dev/slack).
</Tip>
