commit 95185fe472404d014ee7103e4c2070a9418079fd Author: Ikraam Ghoor Date: Tue Feb 3 16:49:00 2026 +0000 Added OAuth2 provider templates repository Established community-maintained OAuth2 provider templates for TRMNL private plugins. Includes a YAML catalogue of 352 providers with schema documentation, GitHub Actions CI validation, issue templates, contributing guidelines, and MIT license. diff --git a/.github/ISSUE_TEMPLATE/broken-provider.md b/.github/ISSUE_TEMPLATE/broken-provider.md new file mode 100644 index 0000000..71e2d2b --- /dev/null +++ b/.github/ISSUE_TEMPLATE/broken-provider.md @@ -0,0 +1,27 @@ +--- +name: Broken / Outdated Provider +about: Report a provider that no longer works or has outdated URLs +title: "[Broken] PROVIDER NAME" +labels: broken-provider +--- + +## Provider + +- **Keyname:** (from `providers.yml`) +- **Display name:** + +## What's wrong? + +- [ ] Authorization URL no longer works +- [ ] Token URL no longer works +- [ ] Scopes are outdated +- [ ] Provider shut down or deprecated their OAuth2 API +- [ ] Other (describe below) + +## Details + +Describe the issue. Include any error messages or links to the provider's updated docs if available. + +## Suggested fix + +If you know the correct values, paste them here. Otherwise, leave blank and we'll investigate. diff --git a/.github/ISSUE_TEMPLATE/new-provider.md b/.github/ISSUE_TEMPLATE/new-provider.md new file mode 100644 index 0000000..72880ff --- /dev/null +++ b/.github/ISSUE_TEMPLATE/new-provider.md @@ -0,0 +1,23 @@ +--- +name: New Provider Request +about: Request a new OAuth2 provider template +title: "Add [PROVIDER NAME]" +labels: new-provider +--- + +## Provider + +- **Name:** +- **Website:** + +## OAuth Details + +- **OAuth docs URL:** +- **Authorize URL:** +- **Token URL:** +- **PKCE required:** yes / no +- **Default scopes:** + +## Notes + +Any additional context (special headers, non-standard token responses, etc.) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..598f13b --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,15 @@ +## Checklist + +- [ ] YAML is valid +- [ ] Required fields present (`keyname`, `display_name`, `category`, `authorize_url`, `token_url`, `pkce_enabled`) +- [ ] `keyname` is unique and lowercase-hyphenated +- [ ] `category` is from the valid list +- [ ] Tested OAuth flow or linked to provider's OAuth documentation + +## Provider(s) + + + +## OAuth Documentation + + diff --git a/.github/scripts/validate_providers.rb b/.github/scripts/validate_providers.rb new file mode 100644 index 0000000..0df307f --- /dev/null +++ b/.github/scripts/validate_providers.rb @@ -0,0 +1,87 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +# Validates providers.yml for CI +# Checks: valid YAML, required fields, no duplicate keynames, URL format, valid categories + +require "yaml" + +PROVIDERS_PATH = File.expand_path("../../providers.yml", __dir__) + +REQUIRED_FIELDS = %w[keyname display_name category authorize_url token_url pkce_enabled].freeze + +VALID_CATEGORIES = %w[ + ai analytics communication content crm design dev-tools e-commerce + education entertainment file-storage finance fitness gaming healthcare + hr identity logistics marketing other productivity security smart-home + social support travel +].freeze + +errors = [] + +# Parse YAML +begin + providers = YAML.load_file(PROVIDERS_PATH) +rescue Psych::SyntaxError => e + puts "FAIL: Invalid YAML syntax" + puts e.message + exit 1 +end + +unless providers.is_a?(Array) + puts "FAIL: providers.yml must be a YAML array" + exit 1 +end + +puts "Loaded #{providers.size} providers" + +# Check each provider +keynames = [] + +providers.each_with_index do |provider, index| + label = provider["keyname"] || "entry ##{index + 1}" + + # Required fields + REQUIRED_FIELDS.each do |field| + if provider[field].nil? || provider[field].to_s.strip.empty? + errors << "#{label}: missing required field '#{field}'" + end + end + + # Duplicate keynames + keyname = provider["keyname"].to_s + if keynames.include?(keyname) + errors << "#{label}: duplicate keyname" + end + keynames << keyname + + # URL format + %w[authorize_url token_url].each do |url_field| + url = provider[url_field].to_s + next if url.empty? + + unless url.start_with?("https://") || url.include?("${connectionConfig") + errors << "#{label}: #{url_field} must start with https:// or contain ${connectionConfig" + end + end + + # Category validation + category = provider["category"].to_s + unless category.empty? || VALID_CATEGORIES.include?(category) + errors << "#{label}: invalid category '#{category}' (valid: #{VALID_CATEGORIES.join(", ")})" + end + + # pkce_enabled format + pkce = provider["pkce_enabled"].to_s + unless %w[yes no].include?(pkce) + errors << "#{label}: pkce_enabled must be 'yes' or 'no', got '#{pkce}'" + end +end + +if errors.any? + puts "\nFAIL: #{errors.size} validation error(s)\n\n" + errors.each { |e| puts " - #{e}" } + exit 1 +else + puts "PASS: All #{providers.size} providers valid" +end diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..bd38f7f --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,23 @@ +name: Validate Providers + +on: + pull_request: + paths: + - 'providers.yml' + push: + branches: [main] + paths: + - 'providers.yml' + +jobs: + validate: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.3' + + - name: Validate providers.yml + run: ruby .github/scripts/validate_providers.rb diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..e573ee4 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,36 @@ +# Contributing + +Thanks for helping grow the OAuth2 provider list! + +## Fixing or Removing a Provider + +Some providers may have outdated URLs or no longer support OAuth2. If you spot one: + +1. **Report it** — [open a broken provider issue](../../issues/new?template=broken-provider.md) +2. **Fix it** — update the entry in `providers.yml` and open a PR +3. **Remove it** — if the service has shut down, delete the entry and open a PR + +## Adding a Provider + +1. **One provider per PR** — keeps review simple +2. Copy a similar existing entry in `providers.yml` +3. Fill in all required fields: `keyname`, `display_name`, `category`, `authorize_url`, `token_url`, `pkce_enabled` +4. Open a PR + +## Naming Conventions + +- `keyname`: lowercase, hyphenated (e.g., `google-calendar`, `hubspot`) +- `display_name`: official product name (e.g., `Google Calendar`, `HubSpot`) + +## PR Checklist + +- [ ] YAML is valid (CI will check this) +- [ ] All required fields are present +- [ ] `keyname` is unique +- [ ] `category` is from the valid list (see README) +- [ ] URLs use `https://` (or contain `${connectionConfig` for dynamic URLs) +- [ ] Tested the OAuth flow, or linked to the provider's OAuth documentation + +## Questions? + +Open an issue — we're happy to help. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cdae0c8 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 TRMNL (trmnl.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..4d62cb0 --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +# OAuth2 Provider Templates + +Community-maintained OAuth2 provider templates for [TRMNL](https://trmnl.com) private plugins. + +These templates auto-fill OAuth configuration when users select a provider. Users still need to create their own OAuth app and enter their `client_id` / `client_secret`. + +## Adding a Provider + +1. Fork this repo +2. Edit `providers.yml` — copy a similar existing entry and fill in the fields +3. Open a PR + +### Required Fields + +| Field | Description | +|-------|-------------| +| `keyname` | Unique identifier (lowercase, hyphenated) | +| `display_name` | Human-readable name shown in dropdown | +| `category` | Category for grouping(see providors.yml) | +| `authorize_url` | OAuth2 authorization endpoint | +| `token_url` | OAuth2 token endpoint | +| `pkce_enabled` | `'yes'` or `'no'` | + +### Optional Fields + +All optional fields are documented in the YAML header comments at the top of `providers.yml`. + +## Community Help Wanted + +This list is community-maintained and some providers may have outdated URLs or deprecated OAuth2 endpoints. We welcome contributions to keep things current: + +- **Report a broken provider** — [open an issue](../../issues/new?template=broken-provider.md) if a provider no longer works +- **Fix a provider** — submit a PR with corrected URLs, scopes, or fields +- **Remove a dead provider** — if a service has shut down, open a PR to remove it + +## Schema Reference + +The full schema is documented in the YAML header comments at the top of `providers.yml`. + +## Attribution + +Part of the factual api data was ported from the aggregated lists located in: +- Nango https://github.com/NangoHQ/nango +- NextAuth https://github.com/nextauthjs/next-auth +- Grant https://github.com/simov/grant +- Handshake https://github.com/portalform/handshake + + +## License + +MIT — see [LICENSE](LICENSE). diff --git a/providers.yml b/providers.yml new file mode 100644 index 0000000..9e6183b --- /dev/null +++ b/providers.yml @@ -0,0 +1,3775 @@ +# OAuth2 Provider Templates +# Community-maintained collection for TRMNL (https://trmnl.com) +# Part of the factual api data was sourced from the aggregated lists located in: +# - Nango https://github.com/NangoHQ/nango +# - NextAuth https://github.com/nextauthjs/next-auth +# - Grant https://github.com/simov/grant +# - Handshake https://github.com/portalform/handshake +# +# Supported Auth Modes: +# OAUTH2 - Standard OAuth2 authorization code flow (user authorization required) +# +# These templates auto-fill OAuth configuration when users select a provider. +# Users still need to create their own OAuth app and enter client_id/secret. +# +# Schema: +# keyname: unique identifier (lowercase, hyphenated) +# display_name: Human-readable name shown in dropdown +# category: Category for grouping (productivity, dev-tools, marketing, etc.) +# authorize_url: OAuth2 authorization endpoint (may contain ${connectionConfig.xxx}) +# token_url: OAuth2 token endpoint (may contain ${connectionConfig.xxx} placeholders) +# scopes: Default scopes (space-separated by default) +# pkce_enabled: yes/no - whether to use PKCE (OAUTH2 only) +# auth_params: JSON object of extra authorization params +# token_headers: JSON object of headers for token request +# token_params: JSON object of extra token request params +# token_site: Base URL for token requests (if different from authorize) +# api_headers: Suggested headers for API calls (shown as hint) +# help_url: URL to documentation or OAuth app creation +# notes: Additional tips for users +# scope_separator: Character to join scopes (default: ' ', some use ',') +# token_request_auth_method: How to send credentials for token exchange ('body' or 'header' for Basic auth) +# body_format: Content type for token request ('form' or 'json') +# refresh_url: Different endpoint for token refresh (optional, defaults to token_url) +# refresh_params: JSON object of extra params for refresh (if different from token_params) +# authorization_method: Where to send client creds: 'header' (Basic auth) or 'body' (default) +# token_response_metadata: Array of extra fields to extract from token response +# +# Token Response Mapping (when API uses non-standard field names): +# token_field_name: Field name in response containing the token (default: 'access_token') +# expiry_field_name: Field name for expiration (default: 'expires_in') +# expiry_strategy: 'expireIn' (seconds from now) or 'expiresAt' (timestamp) +# fixed_expiry_ms: Fixed expiry in milliseconds when not in response +# +# Rate Limiting Hints: +# retry_after_headers: Array of headers to check for retry-after value +# rate_limit_headers: Array of headers to check before making requests +# +# Connection Verification: +# verification_endpoint: Endpoint to test connection validity +# verification_method: HTTP method for verification (default: 'GET') +# +# Pagination Configuration: +# paginate_type: 'link' or 'cursor' +# paginate_config: JSON string with full pagination config +# +# Connection Config (user-provided config for dynamic URLs): +# connection_config: Array of fields for ${connectionConfig.xxx} placeholders +# - field: field name used in placeholders +# title: Human-readable label +# description: Help text +# pattern: Regex for validation (optional) +# example: Example value (optional) +# prefix: Visual prefix (optional) +# suffix: Visual suffix (optional) +# optional: Whether optional (default: false) +# format: Validation format (hostname, email, etc.) (optional) +# order: Display order in UI (optional) +# default_value: Pre-fill value (optional) + +- keyname: addepar + display_name: Addepar (OAuth) + category: analytics + authorize_url: https://id.addepar.com/oauth2/authorize + token_url: https://api.addepar.com/public/oauth2/token + pkce_enabled: 'no' + token_site: https://api.addepar.com + api_headers: '{"addepar-firm":"${connectionConfig.firmId}"}' + retry_after_headers: ["x-ratelimit-retry-after"] + connection_config: + - field: firmId + title: 'Firm ID' + description: 'Your Addepar Firm ID' + pattern: '^[0-9]+$' + +- keyname: segment + display_name: Segment + category: analytics + authorize_url: https://id.segmentapis.com/oauth2/auth + token_url: https://id.segmentapis.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.segment.io + token_request_auth_method: 'basic' + +- keyname: wakatime + display_name: Wakatime + category: analytics + authorize_url: https://wakatime.com/oauth/authorize + token_url: https://wakatime.com/oauth/token + pkce_enabled: 'yes' + token_site: https://wakatime.com + +- keyname: dialpad + display_name: Dialpad + category: communication + authorize_url: https://dialpad.com/oauth2/authorize + token_url: https://dialpad.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://dialpad.com + +- keyname: fathom-oauth + display_name: Fathom (OAuth) + category: communication + authorize_url: https://fathom.video/external/v1/oauth2/authorize + token_url: https://fathom.video/external/v1/oauth2/token + pkce_enabled: 'no' + token_site: https://api.fathom.ai + rate_limit_headers: ["ratelimit-reset"] + +- keyname: gong-oauth + display_name: Gong (Oauth) + category: communication + authorize_url: https://app.gong.io/oauth2/authorize + token_url: https://app.gong.io/oauth2/generate-customer-token + pkce_enabled: 'no' + auth_params: '{"access_type":"offline"}' + token_site: ${connectionConfig.api_base_url_for_customer} + token_request_auth_method: 'basic' + token_response_metadata: ["api_base_url_for_customer"] + retry_after_headers: ["retry-after"] + +- keyname: google + display_name: Google + category: communication + authorize_url: https://accounts.google.com/o/oauth2/v2/auth + token_url: https://oauth2.googleapis.com/token + pkce_enabled: 'yes' + auth_params: '{"access_type":"offline","prompt":"consent"}' + token_site: https://www.googleapis.com + paginate_type: 'cursor' + paginate_config: '{"type":"cursor","cursor_path_in_response":"nextPageToken","limit_name_in_request":"maxSize","cursor_name_in_request":"pageToken","response_path":"items"}' + notes: 'Use access_type=offline to receive a refresh_token. PKCE and state checks recommended.' + help_url: https://developers.google.com/identity/protocols/oauth2 + +- keyname: mailcow + display_name: Mailcow + category: communication + authorize_url: https://${connectionConfig.subdomain}/oauth/authorize + token_url: https://${connectionConfig.subdomain}/oauth/token + scopes: 'profile' + pkce_enabled: 'yes' + notes: 'Self-hosted email server. Requires your Mailcow instance URL.' + connection_config: + - field: subdomain + title: 'Mailcow Instance URL' + description: 'Your Mailcow server hostname (e.g., mail.example.com)' + example: 'mail.example.com' + +- keyname: microsoft + display_name: Microsoft + category: communication + authorize_url: https://login.microsoftonline.com/common/oauth2/v2.0/authorize + token_url: https://login.microsoftonline.com/common/oauth2/v2.0/token + scopes: 'offline_access .default' + pkce_enabled: 'no' + auth_params: '{"response_mode":"query"}' + token_site: https://graph.microsoft.com + retry_after_headers: ["retry-after"] + +- keyname: microsoft-admin + display_name: Microsoft (Admin) + category: communication + authorize_url: https://login.microsoftonline.com/${connectionConfig.tenantId}/adminconsent + token_url: https://login.microsoftonline.com/${connectionConfig.tenantId}/oauth2/v2.0/token + pkce_enabled: 'yes' + token_site: https://graph.microsoft.com + retry_after_headers: ["retry-after"] + connection_config: + - field: tenantId + title: 'Tenant ID' + description: 'The unique identifier for your organization that uses Microsoft services' + example: 'a1b2c3d4-e5f6-47a8-9b0c-d1234567890f' + format: 'uuid' + order: 1 + +- keyname: podium + display_name: Podium + category: communication + authorize_url: https://api.podium.com/oauth/authorize + token_url: https://api.podium.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.podium.com + api_headers: '{"podium-version":"${connectionConfig.apiVersion}","content-type":"application/json"}' + body_format: 'json' + retry_after_headers: ["x-ratelimit-reset"] + connection_config: + - field: apiVersion + title: 'API Version' + description: 'The API version of your Podium account' + +- keyname: webex + display_name: Webex + category: communication + authorize_url: https://webexapis.com/v1/authorize + token_url: https://webexapis.com/v1/access_token + pkce_enabled: 'yes' + token_site: https://webexapis.com + retry_after_headers: ["retry-after"] + scopes: 'spark:kms spark:people_read' + help_url: https://developer.webex.com/docs/integrations + +- keyname: attio + display_name: Attio + category: crm + authorize_url: https://app.attio.com/authorize + token_url: https://app.attio.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.attio.com + retry_after_headers: ["retry-after"] + +- keyname: blackbaud + display_name: Blackbaud + category: crm + authorize_url: https://app.blackbaud.com/oauth/authorize + token_url: https://oauth2.sky.blackbaud.com/token + pkce_enabled: 'yes' + token_site: https://api.sky.blackbaud.com + +- keyname: close + display_name: Close + category: crm + authorize_url: https://app.close.com/oauth2/authorize + token_url: https://api.close.com/oauth2/token/ + scopes: 'offline_access' + pkce_enabled: 'yes' + token_site: https://api.close.com/api + +- keyname: copper + display_name: Copper (OAuth) + category: crm + authorize_url: https://app.copper.com/oauth/authorize + token_url: https://app.copper.com/oauth/token + scopes: 'developer/v1/all' + pkce_enabled: 'yes' + token_site: https://api.copper.com/developer_api + +- keyname: highlevel-white-label + display_name: HighLevel (LeadConnector) + category: crm + authorize_url: https://marketplace.leadconnectorhq.com/oauth/chooselocation + token_url: https://services.leadconnectorhq.com/oauth/token + pkce_enabled: 'no' + token_site: https://services.leadconnectorhq.com + +- keyname: jobber + display_name: Jobber + category: crm + authorize_url: https://api.getjobber.com/api/oauth/authorize + token_url: https://api.getjobber.com/api/oauth/token + pkce_enabled: 'yes' + token_site: https://api.getjobber.com/api + api_headers: '{"x-jobber-graphql-version":"${connectionConfig.version} || 2025-01-20"}' + +- keyname: pipedrive + display_name: Pipedrive + category: crm + authorize_url: https://oauth.pipedrive.com/oauth/authorize + token_url: https://oauth.pipedrive.com/oauth/token + pkce_enabled: 'no' + token_site: ${connectionConfig.api_domain}/api + token_request_auth_method: 'basic' + token_response_metadata: ["api_domain"] + paginate_type: 'offset' + paginate_config: '{"type":"offset","offset_name_in_request":"start","response_path":"data","limit_name_in_request":"limit"}' + verification_endpoint: https://api.pipedrive.com/users/me + help_url: https://pipedrive.readme.io/docs/marketplace-oauth-authorization + +- keyname: precisefp + display_name: PreciseFP + category: crm + authorize_url: https://app.precisefp.com/oauth/authorize + token_url: https://app.precisefp.com/oauth/token + pkce_enabled: 'yes' + auth_params: '{"scope":"*"}' + token_site: https://app.precisefp.com + authorization_method: 'header' + +- keyname: reapit + display_name: Reapit Connect + category: crm + authorize_url: https://connect.reapit.cloud/authorize + token_url: https://connect.reapit.cloud/token + pkce_enabled: 'no' + token_site: https://platform.reapit.cloud + api_headers: '{"api-version":"${connectionConfig.version} || 2020-01-31"}' + +- keyname: salesforce + display_name: Salesforce + category: crm + authorize_url: https://${connectionConfig.hostname}/services/oauth2/authorize + token_url: https://${connectionConfig.hostname}/services/oauth2/token + scopes: 'offline_access' + pkce_enabled: 'yes' + auth_params: '{"prompt":"consent"}' + token_site: ${connectionConfig.instance_url} + token_response_metadata: ["instance_url"] + help_url: https://help.salesforce.com/s/articleView?id=sf.remoteaccess_oauth_tokens_scopes.htm&type=5 + notes: 'Include refresh_token scope to get a refresh token. Must also be enabled in Connected App settings.' + connection_config: + - field: hostname + title: 'Hostname' + description: 'The hostname to your Salesforce instance' + example: 'acme.my.salesforce.com' + prefix: 'https://' + optional: true + format: 'hostname' + +- keyname: wealthbox + display_name: Wealthbox + category: crm + authorize_url: https://app.crmworkspace.com/oauth/authorize + token_url: https://app.crmworkspace.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.crmworkspace.com + +- keyname: wiseagent + display_name: Wiseagent + category: crm + authorize_url: https://sync.thewiseagent.com/WiseAuth/auth + token_url: https://sync.thewiseagent.com/WiseAuth/token + pkce_enabled: 'no' + token_site: https://sync.thewiseagent.com + body_format: 'json' + +- keyname: zendesk-sell + display_name: Zendesk Sell + category: crm + authorize_url: https://api.getbase.com/oauth2/authorize + token_url: https://api.getbase.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.getbase.com + token_request_auth_method: 'basic' + +- keyname: adobe + display_name: Adobe + category: design + authorize_url: https://ims-na1.adobelogin.com/ims/authorize/v2 + token_url: https://ims-na1.adobelogin.com/ims/token/v3 + scopes: 'offline_access' + pkce_enabled: 'yes' + token_site: https://ims-na1.adobelogin.com/ims + +- keyname: autodesk + display_name: Autodesk + category: design + authorize_url: https://developer.api.autodesk.com/authentication/v2/authorize + token_url: https://developer.api.autodesk.com/authentication/v2/token + pkce_enabled: 'no' + token_site: https://developer.api.autodesk.com + retry_after_headers: ["retry-after"] + +- keyname: canva + display_name: Canva + category: design + authorize_url: https://www.canva.com/api/oauth/authorize + token_url: https://api.canva.com/rest/v1/oauth/token + pkce_enabled: 'yes' + token_site: https://api.canva.com + token_request_auth_method: 'basic' + verification_endpoint: '/rest/v1/users/me' + +- keyname: figma + display_name: Figma + category: design + authorize_url: https://www.figma.com/oauth + token_url: https://api.figma.com/v1/oauth/token + pkce_enabled: 'no' + token_site: https://api.figma.com + scope_separator: ',' + token_request_auth_method: 'basic' + refresh_url: https://api.figma.com/v1/oauth/refresh + scopes: files:read + verification_endpoint: https://api.figma.com/v1/me + help_url: https://www.figma.com/developers/api#oauth2 + +- keyname: gumroad + display_name: Gumroad + category: design + authorize_url: https://gumroad.com/oauth/authorize + token_url: https://api.gumroad.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.gumroad.com + +- keyname: miro + display_name: Miro + category: design + authorize_url: https://miro.com/oauth/authorize + token_url: https://api.miro.com/v1/oauth/token + pkce_enabled: 'yes' + token_site: https://api.miro.com + +- keyname: mural + display_name: Mural + category: design + authorize_url: https://app.mural.co/api/public/v1/authorization/oauth2 + token_url: https://app.mural.co/api/public/v1/authorization/oauth2/token + pkce_enabled: 'yes' + token_site: https://app.mural.co + +- keyname: pinterest + display_name: Pinterest + category: design + authorize_url: https://www.pinterest.com/oauth + token_url: https://api.pinterest.com/v5/oauth/token + pkce_enabled: 'yes' + token_site: https://api.pinterest.com + token_request_auth_method: 'basic' + scopes: user_accounts:read + verification_endpoint: https://api.pinterest.com/v5/user_account + help_url: https://developers.pinterest.com/docs/getting-started/authentication/ + +- keyname: bigcommerce + display_name: BigCommerce + category: e-commerce + authorize_url: https://login.bigcommerce.com/oauth2/authorize + token_url: https://login.bigcommerce.com/oauth2/token + pkce_enabled: 'yes' + auth_params: '{"context":"stores/${connectionConfig.storeHash}","account_uuid":"${connectionConfig.accountUuid}"}' + token_params: '{"context":"stores/${connectionConfig.storeHash}"}' + token_site: https://api.bigcommerce.com/stores/${connectionConfig.storeHash} + help_url: https://developer.bigcommerce.com/docs/start/authentication/api-accounts + connection_config: + - field: storeHash + title: 'Store Hash' + description: 'The store hash of your BigCommerce account' + pattern: '^[a-zA-Z0-9]+$' + - field: accountUuid + title: 'Account UUID' + description: 'The account UUID of your BigCommerce account' + example: '123e4567-e89b-12d3-a456-426614174000' + format: 'uuid' + +- keyname: ebay + display_name: eBay + category: e-commerce + authorize_url: https://auth.ebay.com/oauth2/authorize + token_url: https://api.ebay.com/identity/v1/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.ebay.com/ + token_request_auth_method: 'basic' + +- keyname: etsy + display_name: Etsy + category: e-commerce + authorize_url: https://www.etsy.com/oauth/connect + token_url: https://api.etsy.com/v3/public/oauth/token + scopes: 'transactions_r' + pkce_enabled: 'yes' + token_site: https://api.etsy.com + help_url: https://www.etsy.com/developers/your-apps + notes: 'Uses PKCE (S256). API key format is client_id:client_secret for x-api-key header.' + +- keyname: fera + display_name: Fera + category: e-commerce + authorize_url: https://app.fera.ai/oauth/authorize + token_url: https://app.fera.ai/oauth/token + scopes: 'read' + pkce_enabled: 'no' + token_site: https://app.fera.ai + notes: 'Product and merchant reviews platform.' + +- keyname: gorgias + display_name: Gorgias + category: e-commerce + authorize_url: https://${connectionConfig.subdomain}.gorgias.com/oauth/authorize + token_url: https://${connectionConfig.subdomain}.gorgias.com/oauth/token + scopes: 'offline' + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.gorgias.com + token_request_auth_method: 'basic' + retry_after_headers: ["retry-after"] + connection_config: + - field: subdomain + title: 'Gorgias Domain' + description: 'The subdomain of your Gorgias account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.gorgias.com' + +- keyname: shopify + display_name: Shopify (OAuth) + category: e-commerce + authorize_url: https://${connectionConfig.subdomain}.myshopify.com/admin/oauth/authorize + token_url: https://${connectionConfig.subdomain}.myshopify.com/admin/oauth/access_token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.myshopify.com + api_headers: '{"x-shopify-access-token":"${accessToken}"}' + scope_separator: ',' + help_url: https://shopify.dev/docs/apps/auth/get-access-tokens/authorization-code-grant + notes: 'Requires shop subdomain (e.g. my-store.myshopify.com). Scopes are comma-separated.' + connection_config: + - field: subdomain + title: 'Shopify Domain' + description: 'The subdomain of your Shopify account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.myshopify.com' + +- keyname: thrivecart-oauth + display_name: ThriveCart (OAuth) + category: e-commerce + authorize_url: https://thrivecart.com/authorization/new + token_url: https://thrivecart.com/authorization/token + pkce_enabled: 'yes' + token_site: https://thrivecart.com/api/external + +- keyname: battlenet + display_name: Battle.net + category: entertainment + authorize_url: https://oauth.battle.${connectionConfig.extension}/authorize + token_url: https://oauth.battle.${connectionConfig.extension}/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.apiDomain} + connection_config: + - field: extension + title: 'Domain Extension' + description: 'The domain extension of your Battle.net account' + pattern: '^[a-z.]+$' + example: 'com' + order: 1 + - field: apiDomain + title: 'API Domain' + description: 'The domain to where you will access your API' + pattern: '^[a-z.]+$' + example: 'us.api.blizzard.com' + prefix: 'https://' + help_url: https://develop.battle.net/documentation/guides/using-oauth + +- keyname: coros + display_name: Coros + category: entertainment + authorize_url: https://open.coros.com/oauth2/authorize + token_url: https://open.coros.com/oauth2/accesstoken + pkce_enabled: 'yes' + token_site: https://open.coros.com + refresh_url: https://open.coros.com/oauth2/refresh-token + token_response_metadata: ["openId"] + +- keyname: discord + display_name: Discord + category: entertainment + authorize_url: https://discord.com/api/oauth2/authorize + token_url: https://discord.com/api/oauth2/token + pkce_enabled: 'yes' + token_site: https://discord.com + retry_after_headers: ["retry-after"] + scopes: 'identify email' + verification_endpoint: https://discord.com/api/users/@me + help_url: https://discord.com/developers/docs/topics/oauth2 + +- keyname: epic-games + display_name: Epic Games + category: entertainment + authorize_url: https://www.epicgames.com/id/authorize + token_url: https://api.epicgames.dev/epic/oauth/v1/token + pkce_enabled: 'yes' + token_site: https://api.epicgames.dev + authorization_method: 'header' + +- keyname: fitbit + display_name: Fitbit + category: entertainment + authorize_url: https://www.fitbit.com/oauth2/authorize + token_url: https://api.fitbit.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.fitbit.com + authorization_method: 'header' + +- keyname: grain + display_name: Grain (OAuth) + category: entertainment + authorize_url: https://grain.com/_/public-api/oauth2/authorize + token_url: https://api.grain.com/_/public-api/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.grain.com + +- keyname: osu + display_name: Osu + category: entertainment + authorize_url: https://osu.ppy.sh/oauth/authorize + token_url: https://osu.ppy.sh/oauth/token + scopes: 'identify' + pkce_enabled: 'yes' + token_site: https://osu.ppy.sh + verification_endpoint: https://osu.ppy.sh/api/v2/me + help_url: https://osu.ppy.sh/docs/index.html#authentication + +- keyname: oura + display_name: Oura + category: entertainment + authorize_url: https://cloud.ouraring.com/oauth/authorize + token_url: https://api.ouraring.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.ouraring.com + +- keyname: patreon + display_name: Patreon + category: entertainment + authorize_url: https://www.patreon.com/oauth2/authorize + token_url: https://www.patreon.com/api/oauth2/token + scopes: 'identity identity[email]' + pkce_enabled: 'yes' + token_site: https://www.patreon.com + help_url: https://www.patreon.com/portal/registration/register-clients + notes: 'Profile response is nested: data.attributes.email, data.attributes.full_name' + verification_endpoint: https://www.patreon.com/api/oauth2/api/current_user + +- keyname: twitch + display_name: Twitch + category: entertainment + authorize_url: https://id.twitch.tv/oauth2/authorize + token_url: https://id.twitch.tv/oauth2/token + pkce_enabled: 'yes' + auth_params: '{"force_verify":false}' + token_site: https://api.twitch.tv + scopes: 'openid user:read:email' + token_request_auth_method: body + +- keyname: vimeo + display_name: Vimeo (OAuth) + category: entertainment + authorize_url: https://api.vimeo.com/oauth/authorize + token_url: https://api.vimeo.com/oauth/access_token + pkce_enabled: 'yes' + token_site: https://api.vimeo.com + token_request_auth_method: 'basic' + +- keyname: whoop + display_name: Whoop + category: entertainment + authorize_url: https://api.prod.whoop.com/oauth/oauth2/auth + token_url: https://api.prod.whoop.com/oauth/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.prod.whoop.com/ + retry_after_headers: ["x-ratelimit-reset"] + paginate_type: 'cursor' + paginate_config: '{"type":"cursor","offset_name_in_request":"nextToken","limit_name_in_request":"limit"}' + +- keyname: zoom + display_name: Zoom + category: entertainment + authorize_url: https://zoom.us/oauth/authorize + token_url: https://zoom.us/oauth/token + pkce_enabled: 'yes' + token_site: https://api.zoom.us/v2 + scope_separator: ',' + paginate_type: 'cursor' + paginate_config: '{"type":"cursor","cursor_path_in_response":"next_page_token","cursor_name_in_request":"next_page_token","limit_name_in_request":"page_size"}' + verification_endpoint: https://api.zoom.us/v2/users/me + help_url: https://developers.zoom.us/docs/integrations/oauth/ + +- keyname: accelo + display_name: Accelo + category: finance + authorize_url: https://${connectionConfig.subdomain}.api.accelo.com/oauth2/v0/authorize + token_url: https://${connectionConfig.subdomain}.api.accelo.com/oauth2/v0/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.api.accelo.com + scope_separator: ',' + connection_config: + - field: subdomain + title: 'Accelo Domain' + description: 'The subdomain of your Accelo account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.api.accelo.com' + +- keyname: brex + display_name: Brex (OAuth) + category: finance + authorize_url: https://accounts-api.brex.com/oauth2/default/v1/authorize + token_url: https://accounts-api.brex.com/oauth2/default/v1/token + scopes: 'openid offline_access' + pkce_enabled: 'yes' + token_site: https://platform.brexapis.com + +- keyname: cheddar + display_name: Cheddar + category: finance + authorize_url: https://api.cheddarapp.com/oauth/authorize + token_url: https://api.cheddarapp.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.cheddarapp.com/v1/me' + +- keyname: exact-online + display_name: Exact Online + category: finance + authorize_url: https://start.exactonline.${connectionConfig.extension}/api/oauth2/auth + token_url: https://start.exactonline.${connectionConfig.extension}/api/oauth2/token + pkce_enabled: 'yes' + token_site: https://start.exactonline.${connectionConfig.extension}/ + api_headers: '{"accept":"application/json"}' + authorization_method: 'header' + rate_limit_headers: ["x-ratelimit-minutely-reset","x-ratelimit-reset"] + paginate_type: 'link' + paginate_config: '{"type":"link","link_path_in_response_body":"d.__next"}' + connection_config: + - field: extension + title: 'Domain Extension' + description: 'The domain extension of your Exact Online account' + pattern: '^[a-z.]+$' + example: 'nl' + +- keyname: fortnox + display_name: Fortnox + category: finance + authorize_url: https://apps.fortnox.se/oauth-v1/auth + token_url: https://apps.fortnox.se/oauth-v1/token + pkce_enabled: 'yes' + auth_params: '{"access_type":"offline"}' + token_site: https://api.fortnox.se/3 + token_request_auth_method: 'basic' + +- keyname: freeagent + display_name: FreeAgent + category: finance + authorize_url: https://api.freeagent.com/v2/approve_app + token_url: https://api.freeagent.com/v2/token_endpoint + pkce_enabled: 'yes' + token_site: https://api.freeagent.com + token_request_auth_method: 'basic' + +- keyname: freshbooks + display_name: FreshBooks + category: finance + authorize_url: https://auth.freshbooks.com/oauth/authorize + token_url: https://api.freshbooks.com/auth/oauth/token + pkce_enabled: 'yes' + token_site: https://api.freshbooks.com + verification_endpoint: https://api.freshbooks.com/auth/api/v1/users/me + +- keyname: intuit + display_name: Intuit + category: finance + authorize_url: https://appcenter.intuit.com/connect/oauth2 + token_url: https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer + pkce_enabled: 'yes' + token_site: https://quickbooks.api.intuit.com + +- keyname: netsuite + display_name: NetSuite (OAuth) + category: finance + authorize_url: https://${connectionConfig.accountId}.app.netsuite.com/app/login/oauth2/authorize.nl + token_url: https://${connectionConfig.accountId}.suitetalk.api.netsuite.com/services/rest/auth/oauth2/v1/token + scopes: 'rest_webservices' + pkce_enabled: 'yes' + auth_params: '{"prompt":"consent"}' + token_site: https://${connectionConfig.accountId}.suitetalk.api.netsuite.com/services/rest/record/v1 + retry_after_headers: ["retry-after"] + connection_config: + - field: accountId + title: 'Account ID' + description: 'The account ID of your NetSuite account' + pattern: '^[a-zA-Z0-9-_]+$' + example: 'tstdrv231585' + verification_endpoint: https://1234567.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=123&deploy=1 + help_url: https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4567507062.html#Tracking-RESTlet-Calls-Made-with-TBA-and-OAuth-2.0 + +- keyname: pennylane + display_name: Pennylane + category: finance + authorize_url: https://app.pennylane.com/oauth/authorize + token_url: https://app.pennylane.com/oauth/token + pkce_enabled: 'yes' + token_site: https://app.pennylane.com + scope_separator: '+' + rate_limit_headers: ["ratelimit-reset"] + +- keyname: quickbooks + display_name: Quickbooks + category: finance + authorize_url: https://appcenter.intuit.com/connect/oauth2 + token_url: https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer + pkce_enabled: 'yes' + token_site: https://quickbooks.api.intuit.com + connection_config: + - field: realmId + title: 'Quickbooks Realm ID' + description: 'The realmId of your quickbooks company' + pattern: '^\d{16}$' + example: '9341453474484455' + optional: true + +- keyname: ramp + display_name: Ramp + category: finance + authorize_url: https://app.ramp.com/v1/authorize + token_url: https://api.ramp.com/developer/v1/token + pkce_enabled: 'yes' + token_site: https://api.ramp.com + authorization_method: 'header' + +- keyname: sage + display_name: Sage + category: finance + authorize_url: https://www.sageone.com/oauth2/auth/central + token_url: https://oauth.accounting.sage.com/token + pkce_enabled: 'yes' + auth_params: '{"filter":"apiv3.1"}' + token_site: https://api.accounting.sage.com + +- keyname: sage-intacct-oauth + display_name: Sage Intacct (OAuth) + category: finance + authorize_url: https://api.intacct.com/ia/api/v1/oauth2/authorize + token_url: https://api.intacct.com/ia/api/v1/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.intacct.com/ia/api + +- keyname: schwab + display_name: Schwab + category: finance + authorize_url: https://api.schwabapi.com/v1/oauth/authorize + token_url: https://api.schwabapi.com/v1/oauth/token + pkce_enabled: 'yes' + token_site: https://api.schwabapi.com + +- keyname: sellsy + display_name: Sellsy + category: finance + authorize_url: https://login.sellsy.com/oauth2/authorization + token_url: https://login.sellsy.com/oauth2/access-tokens + pkce_enabled: 'yes' + token_site: https://api.sellsy.com + help_url: https://api.sellsy.com/doc/v2/#section/Authentication + +- keyname: teamleader + display_name: Teamleader Focus + category: finance + authorize_url: https://focus.teamleader.eu/oauth2/authorize + token_url: https://focus.teamleader.eu/oauth2/access_token + pkce_enabled: 'yes' + token_site: https://api.focus.teamleader.eu + rate_limit_headers: ["x-ratelimit-reset"] + +- keyname: wave-accounting + display_name: Wave Accounting + category: finance + authorize_url: https://api.waveapps.com/oauth2/authorize + token_url: https://api.waveapps.com/oauth2/token/ + pkce_enabled: 'yes' + token_site: https://gql.waveapps.com + +- keyname: xero + display_name: Xero + category: finance + authorize_url: https://login.xero.com/identity/connect/authorize + token_url: https://identity.xero.com/connect/token + scopes: 'offline_access openid' + pkce_enabled: 'yes' + token_site: https://api.xero.com + retry_after_headers: ["retry-after"] + help_url: https://developer.xero.com/documentation/guides/oauth2/scopes/ + notes: 'Include offline_access scope for refresh tokens. Must combine with at least one other scope.' + +- keyname: zoho + display_name: Zoho + category: finance + authorize_url: https://accounts.zoho.${connectionConfig.extension}/oauth/v2/auth + token_url: https://accounts.zoho.${connectionConfig.extension}/oauth/v2/token + pkce_enabled: 'yes' + auth_params: '{"prompt":"consent","access_type":"offline"}' + token_site: https://www.zohoapis.${connectionConfig.extension} + token_response_metadata: ["api_domain"] + paginate_type: 'offset' + paginate_config: '{"type":"offset","response_path":"data","offset_name_in_request":"page","limit_name_in_request":"per_page"}' + connection_config: + - field: extension + title: 'Domain Extension' + description: 'The domain extension of your Zoho account' + pattern: '^[a-z.]+$' + example: 'com' + prefix: 'https://accounts.zoho.' + suffix: '/' + optional: true + scopes: AaaServer.profile.Read + verification_endpoint: https://accounts.zoho.com/oauth/user/info + help_url: https://www.zoho.com/accounts/protocol/oauth/web-server-applications.html + +- keyname: bamboohr + display_name: BambooHR (OAuth) + category: hr + authorize_url: https://${connectionConfig.subdomain}.bamboohr.com/authorize.php + token_url: https://${connectionConfig.subdomain}.bamboohr.com/token.php + pkce_enabled: 'yes' + auth_params: '{"request":"authorize"}' + token_params: '{"request":"token"}' + token_site: https://api.bamboohr.com/api/gateway.php/${connectionConfig.subdomain} + refresh_params: '{"request":"token"}' + connection_config: + - field: subdomain + title: 'Subdomain' + description: 'The subdomain of your BambooHR account' + pattern: '^[a-z0-9_-]+$' + example: 'acme' + prefix: 'https://' + suffix: '.bamboohr.com' + order: 1 + +- keyname: bullhorn + display_name: Bullhorn + category: hr + authorize_url: https://auth-west.bullhornstaffing.com/oauth/authorize + token_url: https://auth-west.bullhornstaffing.com/oauth/token + pkce_enabled: 'no' + auth_params: '{"username":"${connectionConfig.username}","password":"${connectionConfig.password}","action":"Login"}' + token_site: ${connectionConfig.restUrl} + api_headers: '{"bhresttoken":"${accessToken}"}' + token_response_metadata: ["restUrl"] + connection_config: + - field: username + title: 'Username' + description: 'Your API Username' + - field: password + title: 'Password' + description: 'Your API Password' + +- keyname: deel + display_name: Deel + category: hr + authorize_url: https://app.deel.com/oauth2/authorize + token_url: https://app.deel.com/oauth2/tokens + pkce_enabled: 'yes' + token_site: https://api.letsdeel.com + token_request_auth_method: 'basic' + +- keyname: employment-hero + display_name: Employment Hero + category: hr + authorize_url: https://oauth.employmenthero.com/oauth2/authorize + token_url: https://oauth.employmenthero.com/oauth2/token + pkce_enabled: 'no' + token_site: https://api.employmenthero.com/api + +- keyname: factorial + display_name: Factorial + category: hr + authorize_url: https://api.factorialhr.com/oauth/authorize + token_url: https://api.factorialhr.com/oauth/token + pkce_enabled: 'no' + token_site: https://api.factorialhr.com/api + +- keyname: gusto + display_name: Gusto + category: hr + authorize_url: https://api.gusto.com/oauth/authorize + token_url: https://api.gusto.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.gusto.com + +- keyname: jobadder + display_name: Jobadder + category: hr + authorize_url: https://id.jobadder.com/connect/authorize + token_url: https://id.jobadder.com/connect/token + scopes: 'offline_access' + pkce_enabled: 'yes' + token_site: https://api.jobadder.com + verification_endpoint: '/v2/users/current' + +- keyname: justworks + display_name: Justworks + category: hr + authorize_url: https://payroll.justworks.com/oauth/authorize + token_url: https://public-api.justworks.com/oauth/token + pkce_enabled: 'yes' + token_site: https://public-api.justworks.com + +- keyname: namely + display_name: Namely + category: hr + authorize_url: https://${connectionConfig.company}.namely.com/api/v1/oauth2/authorize + token_url: https://${connectionConfig.company}.namely.com/api/v1/oauth2/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.company}.namely.com/api + connection_config: + - field: company + title: 'Company' + description: 'The name of your Namely company' + example: 'example' + +- keyname: paycor + display_name: Paycor + category: hr + authorize_url: https://hcm.paycor.com/AppActivation/Authorize + token_url: https://apis.paycor.com/sts/v1/common/token?subscription-key=${connectionConfig.subscriptionKey} + scopes: 'offline_access' + pkce_enabled: 'yes' + auth_params: '{"subscription-key":"${connectionConfig.subscriptionKey}"}' + token_site: https://apis.paycor.com + api_headers: '{"ocp-apim-subscription-key":"${connectionConfig.subscriptionKey}"}' + connection_config: + - field: tenantId + title: 'Company ID' + description: 'The company ID for your Paycor account' + pattern: '^\d+$' + example: '290180' + +- keyname: payfit + display_name: Payfit + category: hr + authorize_url: https://oauth.payfit.com/authorize + token_url: https://app.pagerduty.com/oauth/token + pkce_enabled: 'yes' + token_site: https://partner-api.payfit.com + +- keyname: rippling-shop-app + display_name: Rippling Shop App + category: hr + authorize_url: https://app.rippling.com/apps/PLATFORM/${connectionConfig.appName}/authorize + token_url: https://api.rippling.com/api/o/token/ + pkce_enabled: 'yes' + token_site: https://api.rippling.com + +- keyname: sage-people + display_name: Sage People + category: hr + authorize_url: https://login.salesforce.com/services/oauth2/authorize + token_url: https://login.salesforce.com/services/oauth2/token + scopes: 'offline_access api' + pkce_enabled: 'yes' + auth_params: '{"prompt":"consent"}' + token_site: https://${connectionConfig.instance_url}/services/apexrest/spapi + api_headers: '{"accept":"application/json"}' + token_response_metadata: ["instance_url"] + +- keyname: tsheetsteam + display_name: TSheets + category: hr + authorize_url: https://rest.tsheets.com/api/v1/authorize + token_url: https://rest.tsheets.com/api/v1/grant + pkce_enabled: 'yes' + token_site: https://rest.tsheets.com/api/v1 + +- keyname: ukg-pro-wfm + display_name: UKG Pro (Workforce Management) + category: hr + authorize_url: https://welcome-us.ukg.net/authorize + token_url: https://welcome-us.ukg.net/oauth/token + pkce_enabled: 'yes' + auth_params: '{"audience":"https://wfm.ukg.net/api","realm":"${connectionConfig.tenantName}"}' + token_site: https://${connectionConfig.hostname}/api + connection_config: + - field: hostname + title: 'Tenant URL' + description: 'The tenant URL of your UKG Pro instance' + example: 'wfm.us1.ukg.com' + prefix: 'https://' + suffix: '/api' + format: 'hostname' + - field: tenantName + title: 'Tenant Name' + description: 'The tenant name of your UKG Pro instance' + example: 'wfm' + +- keyname: workday-oauth + display_name: Workday (OAuth) + category: hr + authorize_url: https://${connectionConfig.authorizationDomain}/${connectionConfig.tenant}/authorize + token_url: https://${connectionConfig.tokenDomain}/ccx/oauth2/${connectionConfig.tenant}/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.tokenDomain}/ccx/api + token_request_auth_method: 'basic' + connection_config: + - field: authorizationDomain + title: 'Authorization Domain' + description: 'The domain used to authorize your Workday account' + example: 'impl.workday.com' + prefix: 'https://' + suffix: '/mytenant' + format: 'hostname' + order: 1 + - field: tokenDomain + title: 'Token Domain' + description: 'The domain used to obtain the token for your Workday account' + example: 'wd3-impl-services1.workday.com' + prefix: 'https://' + suffix: '/ccx' + format: 'hostname' + order: 2 + - field: tenant + title: 'Tenant' + description: 'The tenant of your Workday account' + example: 'yourtenant' + order: 2 + +- keyname: zenefits + display_name: Zenefits + category: hr + authorize_url: https://secure.zenefits.com/oauth2/platform-authorize + token_url: https://secure.zenefits.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.zenefits.com + +- keyname: apollo-oauth + display_name: Apollo (OAuth) + category: marketing + authorize_url: https://app.apollo.io + token_url: https://app.apollo.io/api/v1/oauth/token + pkce_enabled: 'no' + token_site: https://app.apollo.io/api + body_format: 'json' + +- keyname: bitly + display_name: Bitly + category: marketing + authorize_url: https://bitly.com/oauth/authorize + token_url: https://api-ssl.bitly.com/oauth/access_token + pkce_enabled: 'yes' + token_site: https://api-ssl.bitly.com + +- keyname: constant-contact + display_name: Constant Contact + category: marketing + authorize_url: https://authz.constantcontact.com/oauth2/default/v1/authorize + token_url: https://authz.constantcontact.com/oauth2/default/v1/token + scopes: 'offline_access' + pkce_enabled: 'no' + token_site: https://api.cc.email + +- keyname: eventbrite + display_name: Eventbrite + category: marketing + authorize_url: https://www.eventbrite.com/oauth/authorize + token_url: https://www.eventbrite.com/oauth/token + pkce_enabled: 'yes' + token_site: https://www.eventbriteapi.com + scopes: user.profile + verification_endpoint: https://www.eventbriteapi.com/v3/users/me/ + token_request_auth_method: body + +- keyname: facebook + display_name: Facebook + category: marketing + authorize_url: https://www.facebook.com/v22.0/dialog/oauth + token_url: https://graph.facebook.com/v22.0/oauth/access_token + pkce_enabled: 'yes' + token_site: https://graph.facebook.com + scopes: email + help_url: https://developers.facebook.com/docs/facebook-login/manually-build-a-login-flow/ + notes: 'Production applications cannot use localhost URLs to sign in with Facebook. You need to use a dedicated development application in Facebook to use localhost callback URLs.' + +- keyname: highlevel + display_name: HighLevel + category: marketing + authorize_url: https://marketplace.gohighlevel.com/oauth/chooselocation + token_url: https://services.leadconnectorhq.com/oauth/token + pkce_enabled: 'no' + token_site: https://services.leadconnectorhq.com + +- keyname: hubspot + display_name: HubSpot + category: marketing + authorize_url: https://app.hubspot.com/oauth/authorize + token_url: https://api.hubapi.com/oauth/v1/token + pkce_enabled: 'yes' + token_site: https://api.hubapi.com + paginate_type: 'cursor' + paginate_config: '{"type":"cursor","cursor_path_in_response":"paging.next.after","limit_name_in_request":"limit","cursor_name_in_request":"after","response_path":"results"}' + token_request_auth_method: 'body' + help_url: https://developers.hubspot.com/docs/api/oauth-quickstart-guide + notes: 'Client credentials must be sent in the request body (not Basic auth). All configured scopes must be requested.' + scopes: oauth + +- keyname: instagram + display_name: Instagram + category: marketing + authorize_url: https://api.instagram.com/oauth/authorize + token_url: https://api.instagram.com/oauth/access_token + pkce_enabled: 'yes' + token_site: https://graph.instagram.com + scope_separator: ',' + refresh_url: https://graph.instagram.com/refresh_access_token + scopes: user_profile + verification_endpoint: https://graph.instagram.com/me?fields=id,username,account_type,name + help_url: https://developers.facebook.com/docs/instagram-basic-display-api/getting-started + token_request_auth_method: body + +- keyname: intercom + display_name: Intercom + category: marketing + authorize_url: https://app.${connectionConfig.region}.intercom.com/oauth + token_url: https://api.${connectionConfig.region}.intercom.io/auth/eagle/token + pkce_enabled: 'yes' + token_site: https://api.${connectionConfig.region}.intercom.io + rate_limit_headers: ["x-ratelimit-reset"] + connection_config: + - field: region + title: 'Region' + description: 'The API region for your Intercom workspace.' + pattern: '^(eu|au)$' + example: 'eu' + optional: true + +- keyname: jumplead + display_name: Jumplead + category: marketing + authorize_url: https://account.mooloop.com/oauth/authorize + token_url: https://account.mooloop.com/oauth/access_token + pkce_enabled: 'no' + +- keyname: keap + display_name: Keap + category: marketing + authorize_url: https://accounts.infusionsoft.com/app/oauth/authorize + token_url: https://api.infusionsoft.com/token + pkce_enabled: 'yes' + token_site: https://api.infusionsoft.com + +- keyname: klaviyo-oauth + display_name: Klaviyo (OAuth) + category: marketing + authorize_url: https://www.klaviyo.com/oauth/authorize + token_url: https://a.klaviyo.com/oauth/token + pkce_enabled: 'yes' + token_site: https://a.klaviyo.com + api_headers: '{"revision":"2024-07-15"}' + token_request_auth_method: 'basic' + retry_after_headers: ["retry-after"] + +- keyname: mailchimp + display_name: Mailchimp + category: marketing + authorize_url: https://login.mailchimp.com/oauth2/authorize + token_url: https://login.mailchimp.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.dc}.api.mailchimp.com + verification_endpoint: https://login.mailchimp.com/oauth2/metadata + help_url: https://admin.mailchimp.com/account/oauth2/client/ + +- keyname: outreach + display_name: Outreach + category: marketing + authorize_url: https://api.outreach.io/oauth/authorize + token_url: https://api.outreach.io/oauth/token + pkce_enabled: 'yes' + token_site: https://api.outreach.io + +- keyname: salesloft + display_name: Salesloft + category: marketing + authorize_url: https://accounts.salesloft.com/oauth/authorize + token_url: https://accounts.salesloft.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.salesloft.com + +- keyname: twitter-v2 + display_name: Twitter (v2) + category: marketing + authorize_url: https://twitter.com/i/oauth2/authorize + token_url: https://api.twitter.com/2/oauth2/token + scopes: 'offline.access' + pkce_enabled: 'yes' + auth_params: '{"response_mode":"query"}' + token_site: https://api.twitter.com + token_request_auth_method: 'basic' + +- keyname: aimfox-oauth + display_name: Aimfox (OAuth) + category: other + authorize_url: https://id.aimfox.com/realms/aimfox-prod/protocol/openid-connect/auth + token_url: https://id.aimfox.com/realms/aimfox-prod/protocol/openid-connect/token + pkce_enabled: 'no' + token_site: https://api.aimfox.com/api + +- keyname: airtable + display_name: Airtable + category: other + authorize_url: https://airtable.com/oauth2/v1/authorize + token_url: https://airtable.com/oauth2/v1/token + pkce_enabled: 'yes' + token_site: https://api.airtable.com + authorization_method: 'header' + +- keyname: amazon-selling-partner + display_name: Amazon Selling Partner + category: other + authorize_url: https://${connectionConfig.domain}/apps/authorize/consent + token_url: https://api.amazon.com/auth/o2/token + pkce_enabled: 'no' + auth_params: '{"application_id":"${connectionConfig.applicationId}"}' + token_site: https://sellingpartnerapi-${connectionConfig.region}.amazon.com + api_headers: '{"x-amz-access-token":"${accessToken}"}' + connection_config: + - field: applicationId + title: 'Application ID' + description: 'The unique identifier for your Amazon Selling Partner application' + pattern: '^[a-zA-Z0-9.-]+$' + example: 'amzn1.sellerapps.app.0bf296b5-36a6-4942-a13e-EXAMPLEfcd28' + order: 1 + - field: domain + title: 'Domain' + description: 'The domain representing the Amazon platform you are integrating with' + pattern: '^[a-z0-9.-]+\.amazon\.[a-z.]+$' + example: 'sellercentral.amazon.com' + order: 2 + - field: region + title: 'Proxy BaseUrl Region' + description: 'The geographical region associated with the Amazon marketplace.' + pattern: '^[a-z]+$' + example: 'eu' + order: 3 + +- keyname: apaleo + display_name: Apaleo + category: other + authorize_url: https://identity.apaleo.com/connect/authorize + token_url: https://identity.apaleo.com/connect/token + pkce_enabled: 'yes' + token_site: https://api.apaleo.com + api_headers: '{"content-type":"application/json"}' + retry_after_headers: ["retry-after"] + +- keyname: atlassian + display_name: Atlassian + category: other + authorize_url: https://auth.atlassian.com/authorize + token_url: https://auth.atlassian.com/oauth/token + scopes: 'offline_access' + pkce_enabled: 'yes' + auth_params: '{"audience":"api.atlassian.com","prompt":"consent"}' + token_site: https://api.atlassian.com + verification_endpoint: https://api.atlassian.com/me + help_url: https://developer.atlassian.com + +- keyname: aws + display_name: AWS + category: other + authorize_url: https://${connectionConfig.subdomain}.auth.${connectionConfig.extension}.amazoncognito.com/oauth2/authorize + token_url: https://${connectionConfig.subdomain}.auth.${connectionConfig.extension}.amazoncognito.com/oauth2/token + scopes: 'openid' + pkce_enabled: 'yes' + token_site: https://cognito-${apiSubdomain}.amazonaws.com + connection_config: + - field: subdomain + title: 'AWS Domain' + description: 'The subdomain of your AWS account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.amazoncognito.com' + - field: extension + title: 'Domain Extension' + description: 'The domain extension of your AWS account' + pattern: '^[a-z.]+$' + example: 'com' + - field: apiSubdomain + title: 'API Subdomain' + description: 'The API subdomain to the API you want to connect to' + pattern: '^[a-z.-]+$' + example: 'idp.us-east-2' + prefix: 'https://cognito-' + suffix: '.amazonaws.com' + +- keyname: bitbucket + display_name: Bitbucket + category: other + authorize_url: https://bitbucket.org/site/oauth2/authorize + token_url: https://bitbucket.org/site/oauth2/access_token + pkce_enabled: 'yes' + token_site: https://api.bitbucket.org + scopes: account + verification_endpoint: https://api.bitbucket.org/2.0/user + help_url: https://support.atlassian.com/bitbucket-cloud/docs/use-oauth-on-bitbucket-cloud/ + +- keyname: boldsign + display_name: BoldSign + category: other + authorize_url: https://account.boldsign.com/connect/authorize + token_url: https://account.boldsign.com/connect/token + pkce_enabled: 'yes' + token_site: https://api.boldsign.com + +- keyname: braintree + display_name: Braintree + category: other + authorize_url: https://api.braintreegateway.com/oauth/connect + token_url: https://api.braintreegateway.com/oauth/access_tokens + pkce_enabled: 'yes' + token_site: https://api.braintreegateway.com + scope_separator: ',' + body_format: 'json' + authorization_method: 'header' + +- keyname: checkr-partner + display_name: Checkr Partner + category: other + authorize_url: https://partners.checkr.com/authorize/${connectionConfig.client_id} + token_url: https://api.checkr.com/oauth/tokens + pkce_enabled: 'no' + token_site: https://api.checkr.com + token_response_metadata: ["checkr_account_id"] + rate_limit_headers: ["x-ratelimit-reset"] + connection_config: + - field: client_id + title: 'Client ID' + description: 'The client ID of your Checkr Partner account' + +- keyname: cloudbeds + display_name: Cloudbeds + category: other + authorize_url: https://api.cloudbeds.com/api/v1.3/oauth + token_url: https://api.cloudbeds.com/api/v1.3/access_token + pkce_enabled: 'no' + token_site: https://api.cloudbeds.com + +- keyname: contentful + display_name: Contentful + category: other + authorize_url: https://be.contentful.com/oauth/authorize + token_url: https://be.contentful.com/oauth/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.contentful.com + retry_after_headers: ["x-contentful-ratelimit-reset"] + connection_config: + - field: subdomain + title: 'Contentful Domain' + description: 'The subdomain of your Contentful account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.contentful.com' + +- keyname: contentstack + display_name: Contentstack + category: other + authorize_url: https://${connectionConfig.subdomain}.contentstack.com/apps/${connectionConfig.appId}/authorize + token_url: https://${connectionConfig.subdomain}.contentstack.com/apps-api/apps/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.apiDomain} + connection_config: + - field: subdomain + title: 'Contentstack Domain' + description: 'The subdomain of your Contentstack account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.contentstack.com' + order: 2 + - field: appId + title: 'App ID' + description: 'The app ID of your Contentstack account' + order: 1 + - field: apiDomain + title: 'API Domain' + description: 'The domain to where you will access your API' + pattern: '^[a-z0-9_-]+$' + example: 'eu-api.contentstack.com' + prefix: 'https://' + order: 3 + +- keyname: datev + display_name: Datev + category: other + authorize_url: https://login.datev.de/openid/authorize + token_url: https://api.datev.de/token + scopes: 'openid' + pkce_enabled: 'yes' + auth_params: '{"response_mode":"query","nonce":"AnotherRandomStringDatev"}' + token_site: https://api.datev.de + token_request_auth_method: 'basic' + +- keyname: digitalocean + display_name: DigitalOcean + category: other + authorize_url: https://cloud.digitalocean.com/v1/oauth/authorize + token_url: https://cloud.digitalocean.com/v1/oauth/token + pkce_enabled: 'yes' + token_site: https://api.digitalocean.com + +- keyname: docusign + display_name: DocuSign + category: other + authorize_url: https://account.docusign.com/oauth/auth + token_url: https://account.docusign.com/oauth/token + pkce_enabled: 'yes' + token_site: https://www.docusign.net + token_request_auth_method: 'basic' + +- keyname: dropbox-sign + display_name: Dropbox Sign + category: other + authorize_url: https://app.hellosign.com/oauth/authorize + token_url: https://app.hellosign.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.hellosign.com + refresh_url: https://app.hellosign.com/oauth/token?refresh + rate_limit_headers: ["x-ratelimit-reset"] + +- keyname: egnyte + display_name: Egnyte + category: other + authorize_url: https://${connectionConfig.subdomain}.egnyte.com/puboauth/token + token_url: https://${connectionConfig.subdomain}.egnyte.com/puboauth/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.egnyte.com/pubapi + connection_config: + - field: subdomain + title: 'Egnyte Domain' + description: 'The subdomain of your Egnyte account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.egnyte.com' + +- keyname: exist + display_name: Exist + category: other + authorize_url: https://exist.io/oauth2/authorize + token_url: https://exist.io/oauth2/access_token + pkce_enabled: 'yes' + token_site: https://exist.io/ + paginate_type: 'link' + paginate_config: '{"type":"link","link_path_in_response_body":"next"}' + +- keyname: fanvue + display_name: Fanvue + category: other + authorize_url: https://auth.fanvue.com/oauth2/auth + token_url: https://auth.fanvue.com/oauth2/token + scopes: 'offline_access offline' + pkce_enabled: 'yes' + token_site: https://api.fanvue.com + api_headers: '{"x-fanvue-api-version":"${connectionConfig.version} || 2025-06-26"}' + token_request_auth_method: 'basic' + retry_after_headers: ["retry-after"] + +- keyname: fillout + display_name: Fillout (Oauth) + category: other + authorize_url: https://build.fillout.com/authorize/oauth + token_url: https://server.fillout.com/public/oauth/accessToken + pkce_enabled: 'yes' + token_site: ${connectionConfig.base_url} + token_response_metadata: ["base_url"] + +- keyname: github + display_name: GitHub (User OAuth) + category: other + authorize_url: https://github.com/login/oauth/authorize + token_url: https://github.com/login/oauth/access_token + pkce_enabled: 'yes' + token_site: https://api.github.com + rate_limit_headers: ["x-ratelimit-reset"] + paginate_type: 'link' + paginate_config: '{"type":"link","limit_name_in_request":"per_page","link_rel_in_response_header":"next"}' + scopes: 'read:user user:email' + help_url: https://docs.github.com/en/rest/users/users#get-the-authenticated-user + +- keyname: gitlab + display_name: GitLab + category: other + authorize_url: https://gitlab.com/oauth/authorize + token_url: https://gitlab.com/oauth/token + pkce_enabled: 'yes' + token_site: https://gitlab.com + help_url: https://docs.gitlab.com/ee/api/oauth2.html + +- keyname: google-play + display_name: Google Play + category: other + authorize_url: https://accounts.google.com/o/oauth2/auth + token_url: https://accounts.google.com/o/oauth2/token + pkce_enabled: 'yes' + auth_params: '{"access_type":"offline","prompt":"consent"}' + token_site: https://play.googleapis.com + +- keyname: greenhouse + display_name: Greenhouse (OAuth) + category: other + authorize_url: https://api.greenhouse.io/oauth/authorize + token_url: https://api.greenhouse.io/oauth/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.resource}.greenhouse.io + retry_after_headers: ["retry-after"] + paginate_type: 'link' + paginate_config: '{"type":"link","limit_name_in_request":"per_page","link_rel_in_response_header":"next"}' + connection_config: + - field: resource + title: 'Greenhouse API Domain' + description: 'The Greenhouse API product domain you want to connect to' + pattern: '^[a-z0-9_-]+$' + example: 'api' + prefix: 'https://' + suffix: '.greenhouse.io' + +- keyname: greenhouse-harvest-partner + display_name: Greenhouse Harvest Partner (V3) + category: other + authorize_url: https://auth.greenhouse.io/authorize + token_url: https://auth.greenhouse.io/token + pkce_enabled: 'no' + token_site: https://harvest.greenhouse.io + token_request_auth_method: 'basic' + rate_limit_headers: ["x-ratelimit-reset"] + +- keyname: helpscout-mailbox + display_name: Help Scout Mailbox + category: other + authorize_url: https://secure.helpscout.net/authentication/authorizeClientApplication + token_url: https://api.helpscout.net/v2/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.helpscout.net + retry_after_headers: ["x-ratelimit-retry-after"] + +- keyname: ironclad + display_name: Ironclad + category: other + authorize_url: https://${connectionConfig.subdomain}.ironcladapp.com/oauth/authorize + token_url: https://${connectionConfig.subdomain}.ironcladapp.com/oauth/token + pkce_enabled: 'no' + token_site: https://${connectionConfig.subdomain}.ironcladapp.com + connection_config: + - field: subdomain + title: 'Subdomain' + description: 'Your Ironclad Environment Subdomain' + pattern: '^(na1|demo|eu1)$' + example: 'na1' + prefix: 'https://' + suffix: '.ironcladapp.com' + +- keyname: jira + display_name: Jira (OAuth) + category: other + authorize_url: https://auth.atlassian.com/authorize + token_url: https://auth.atlassian.com/oauth/token + scopes: 'offline_access' + pkce_enabled: 'yes' + auth_params: '{"audience":"api.atlassian.com","prompt":"consent"}' + token_site: https://api.atlassian.com + paginate_type: 'link' + paginate_config: '{"type":"link","link_rel_in_response_header":"next","limit_name_in_request":"limit","response_path":"results","link_path_in_response_body":"_links.next"}' + connection_config: + - field: subdomain + title: 'Subdomain' + description: 'The subdomain of your Attlassian account' + pattern: '^[a-zA-Z0-9.-]+$' + example: 'subdomain' + prefix: 'https://' + suffix: '.atlassian.net' + optional: true + +- keyname: lever + display_name: Lever (OAuth) + category: other + authorize_url: https://auth.lever.co/authorize + token_url: https://auth.lever.co/oauth/token + pkce_enabled: 'yes' + auth_params: '{"audience":"https://api.lever.co/v1/"}' + token_site: https://api.lever.co + +- keyname: linear + display_name: Linear + category: other + authorize_url: https://linear.app/oauth/authorize + token_url: https://api.linear.app/oauth/token + pkce_enabled: 'no' + auth_params: '{"prompt":"consent"}' + token_site: https://api.linear.app + scope_separator: ',' + rate_limit_headers: ["x-ratelimit-requests-reset"] + +- keyname: linkedin + display_name: LinkedIn + category: other + authorize_url: https://www.linkedin.com/oauth/v2/authorization + token_url: https://www.linkedin.com/oauth/v2/accessToken + pkce_enabled: 'no' + token_site: https://api.linkedin.com + help_url: https://docs.microsoft.com/en-us/linkedin/shared/authentication/authorization-code-flow + token_request_auth_method: body + +- keyname: linkhut + display_name: LinkHut + category: other + authorize_url: https://ln.ht/_/oauth/authorize + token_url: https://api.ln.ht/v1/oauth/token + pkce_enabled: 'yes' + token_site: https://api.ln.ht + +- keyname: microsoft-tenant-specific + display_name: Microsoft (Tenant) + category: other + authorize_url: https://login.microsoftonline.com/${connectionConfig.tenant}/oauth2/v2.0/authorize + token_url: https://login.microsoftonline.com/${connectionConfig.tenant}/oauth2/v2.0/token + scopes: 'offline_access' + pkce_enabled: 'no' + auth_params: '{"response_mode":"query","prompt":"consent"}' + token_site: https://graph.microsoft.com + connection_config: + - field: tenant + title: 'Tenant' + description: 'The tenant of your Microsoft account' + +- keyname: mollie + display_name: Mollie + category: other + authorize_url: https://my.mollie.com/oauth2/authorize + token_url: https://api.mollie.com/oauth2/tokens + pkce_enabled: 'no' + token_site: https://api.mollie.com + +- keyname: nationbuilder + display_name: NationBuilder + category: other + authorize_url: https://${connectionConfig.accountId}.nationbuilder.com/oauth/authorize + token_url: https://${connectionConfig.accountId}.nationbuilder.com/oauth/token + scopes: 'default' + pkce_enabled: 'yes' + token_site: https://${connectionConfig.accountId}.nationbuilder.com/api + connection_config: + - field: accountId + title: 'Account ID' + description: 'The account ID of your NationBuilder account' + +- keyname: odoo + display_name: Odoo (OAuth) + category: other + authorize_url: https://${connectionConfig.serverUrl}/restapi/1.0/common/oauth2/authorize + token_url: https://${connectionConfig.serverUrl}/restapi/1.0/common/oauth2/access_token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.serverUrl} + connection_config: + - field: serverUrl + title: 'Domain' + description: 'The domain of your Odoo account' + prefix: 'https://' + format: 'hostname' + +- keyname: pagerduty + display_name: PagerDuty + category: other + authorize_url: https://app.pagerduty.com/oauth/authorize + token_url: https://app.pagerduty.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.pagerduty.com + retry_after_headers: ["ratelimit-reset"] + +- keyname: pandadoc + display_name: Pandadoc + category: other + authorize_url: https://app.pandadoc.com/oauth2/authorize + token_url: https://api.pandadoc.com/oauth2/access_token + pkce_enabled: 'yes' + token_site: https://api.pandadoc.com + +- keyname: paypal + display_name: Paypal + category: other + authorize_url: https://www.paypal.com/signin/authorize + token_url: https://api.paypal.com/v1/oauth2/token + pkce_enabled: 'yes' + token_site: https://api-m.paypal.com + token_request_auth_method: 'basic' + +- keyname: procore + display_name: Procore + category: other + authorize_url: https://login.procore.com/oauth/authorize + token_url: https://login.procore.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.procore.com + api_headers: '{"procore-company-id":"${connectionConfig.companyId}"}' + rate_limit_headers: ["x-rate-limit-reset"] + connection_config: + - field: companyId + title: 'Company ID' + description: 'Your Procore company ID' + pattern: '^[0-9]+$' + example: '598134325779301' + optional: true + +- keyname: qualtrics + display_name: Qualtrics + category: other + authorize_url: https://${connectionConfig.subdomain}.qualtrics.com/oauth2/auth + token_url: https://${connectionConfig.subdomain}.qualtrics.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.qualtrics.com + connection_config: + - field: subdomain + title: 'Qualtrics Domain' + description: 'The subdomain of your Qualtrics account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.qualtrics.com' + +- keyname: signnow + display_name: SignNow + category: other + authorize_url: https://app.signnow.com/authorize + token_url: https://api.signnow.com/oauth2/token + pkce_enabled: 'no' + token_site: https://api.signnow.com + token_request_auth_method: 'basic' + +- keyname: slack + display_name: Slack + category: other + authorize_url: https://slack.com/oauth/v2/authorize + token_url: https://slack.com/api/oauth.v2.access + pkce_enabled: 'no' + token_site: https://slack.com/api + scope_separator: ',' + token_response_metadata: ["incoming_webhook.url","incoming_webhook.channel","incoming_webhook.channel_id","bot_user_id","team.id"] + retry_after_headers: ["retry-after"] + paginate_type: 'cursor' + paginate_config: '{"type":"cursor","cursor_path_in_response":"response_metadata.next_cursor","cursor_name_in_request":"cursor","limit_name_in_request":"limit"}' + help_url: https://api.slack.com/docs/sign-in-with-slack + +- keyname: slice + display_name: Slice + category: other + authorize_url: https://api.slice.com/oauth/authorize + token_url: https://api.slice.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.slice.com/api/v1/users/self' + +- keyname: smartsheet + display_name: Smartsheet + category: other + authorize_url: https://app.smartsheet.com/b/authorize + token_url: https://api.${connectionConfig.domain}/2.0/token + pkce_enabled: 'yes' + token_site: https://api.${connectionConfig.domain} + connection_config: + - field: domain + title: 'Domain' + description: 'The domain where your account is hosted' + pattern: '^(smartsheet\.com|smartsheet\.eu|smartsheet\.au|smartsheetgov\.com)$' + example: 'smartsheet.com' + prefix: 'https://api.' + +- keyname: snowflake + display_name: Snowflake + category: other + authorize_url: https://${connectionConfig.snowflake_account_url}/oauth/authorize + token_url: https://${connectionConfig.snowflake_account_url}/oauth/token-request + pkce_enabled: 'yes' + token_site: https://${connectionConfig.snowflake_account_url} + token_request_auth_method: 'basic' + connection_config: + - field: snowflake_account_url + title: 'Domain' + description: 'The domain of your Snowflake account' + prefix: 'https://' + format: 'hostname' + +- keyname: splitwise + display_name: Splitwise + category: other + authorize_url: https://secure.splitwise.com/oauth/authorize + token_url: https://secure.splitwise.com/oauth/token + pkce_enabled: 'yes' + token_site: https://secure.splitwise.com + +- keyname: spotify + display_name: Spotify (OAuth) + category: other + authorize_url: https://accounts.spotify.com/authorize + token_url: https://accounts.spotify.com/api/token + pkce_enabled: 'yes' + token_site: https://api.spotify.com + scopes: user-read-email + verification_endpoint: https://api.spotify.com/v1/me + help_url: https://developer.spotify.com/documentation/general/guides/authorization-guide + +- keyname: squarespace + display_name: Squarespace + category: other + authorize_url: https://login.squarespace.com/api/1/login/oauth/provider/authorize + token_url: https://login.squarespace.com/api/1/login/oauth/provider/tokens + pkce_enabled: 'yes' + token_site: https://api.squarespace.com + api_headers: '{"user-agent":"${connectionConfig.customappDescription}"}' + scope_separator: ',' + token_request_auth_method: 'basic' + connection_config: + - field: customappDescription + title: 'User Agent' + description: 'The user agent of your custom app' + +- keyname: squareup + display_name: Squareup + category: other + authorize_url: https://connect.squareup.com/oauth2/authorize + token_url: https://connect.squareup.com/oauth2/token + pkce_enabled: 'no' + auth_params: '{"session":false}' + token_site: https://connect.squareup.com + +- keyname: stripe-app + display_name: Stripe App + category: other + authorize_url: https://marketplace.stripe.com/oauth/v2/authorize + token_url: https://api.stripe.com/v1/oauth/token + pkce_enabled: 'no' + token_site: https://api.stripe.com + +- keyname: stripe + display_name: Stripe Connect + category: other + authorize_url: https://connect.stripe.com/oauth/authorize + token_url: https://connect.stripe.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.stripe.com + token_request_auth_method: 'body' + notes: 'Uses Stripe Connect OAuth. Client credentials sent in request body.' + +- keyname: stripe-express + display_name: Stripe Express + category: other + authorize_url: https://connect.stripe.com/express/oauth/authorize + token_url: https://connect.stripe.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.stripe.com + token_response_metadata: ["stripe_user_id"] + +- keyname: survey-monkey + display_name: SurveyMonkey + category: other + authorize_url: https://api.surveymonkey.com/oauth/authorize + token_url: https://api.surveymonkey.com/oauth/token + pkce_enabled: 'no' + token_site: https://api.surveymonkey.com + +- keyname: tremendous + display_name: Tremendous + category: other + authorize_url: https://api.tremendous.com/oauth/authorize + token_url: https://api.tremendous.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.tremendous.com/api/v2 + +- keyname: twinfield + display_name: Twinfield + category: other + authorize_url: https://login.twinfield.com/auth/authentication/connect/authorize + token_url: https://login.twinfield.com/auth/authentication/connect/token + scopes: 'openid twf.user twf.organisation twf.organisationUser offline_access' + pkce_enabled: 'no' + auth_params: '{"nonce":"AnotherRandomStringTwinfield"}' + token_site: https://${connectionConfig.cluster}.twinfield.com + connection_config: + - field: cluster + title: 'Twinfield Cluster' + description: 'The cluster to your Twinfield instance' + pattern: '^[a-z0-9_-]+$' + example: 'accounting' + prefix: 'https://' + suffix: '.twinfield.com' + +- keyname: typeform + display_name: Typeform + category: other + authorize_url: https://api.typeform.com/oauth/authorize + token_url: https://api.typeform.com/oauth/token + scopes: 'offline' + pkce_enabled: 'no' + token_site: https://api.typeform.com + +- keyname: uber + display_name: Uber + category: other + authorize_url: https://login.uber.com/oauth/v2/authorize + token_url: https://login.uber.com/oauth/v2/token + pkce_enabled: 'yes' + token_site: https://api.uber.com + +- keyname: webflow + display_name: Webflow + category: other + authorize_url: https://webflow.com/oauth/authorize + token_url: https://api.webflow.com/oauth/access_token + pkce_enabled: 'yes' + token_site: https://api.webflow.com + +- keyname: wildix-pbx + display_name: Wildix PBX + category: other + authorize_url: https://${connectionConfig.subdomain}.wildixin.com/authorization/oauth2 + token_url: https://${connectionConfig.subdomain}.wildixin.com/authorization/oauth2Token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.wildixin.com + connection_config: + - field: subdomain + title: 'Wildix Domain' + description: 'The subdomain of your Wildix instance' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.wildixin.com' + +- keyname: wordpress + display_name: WordPress + category: other + authorize_url: https://public-api.wordpress.com/oauth2/authorize + token_url: https://public-api.wordpress.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://public-api.wordpress.com/rest/v1 + scopes: auth + verification_endpoint: https://public-api.wordpress.com/rest/v1/me + help_url: https://developer.wordpress.com/docs/oauth2/ + +- keyname: workable-oauth + display_name: Workable (OAuth) + category: other + authorize_url: https://www.workable.com/oauth/authorize + token_url: https://www.workable.com/oauth/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.workable.com + scope_separator: '+' + rate_limit_headers: ["x-rate-limit-reset"] + connection_config: + - field: subdomain + title: 'Workable Domain' + description: 'The subdomain of your Workable account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.workable.com' + +- keyname: zapier + display_name: Zapier + category: other + authorize_url: https://api.zapier.com/v2/authorize + token_url: https://zapier.com/oauth/token + scopes: 'authentication authentication:write profile zap zap:write' + pkce_enabled: 'yes' + auth_params: '{"response_mode":"query","state":"N@nG0s%rinG"}' + token_site: https://api.zapier.com + +- keyname: zendesk + display_name: Zendesk + category: other + authorize_url: https://${connectionConfig.subdomain}.zendesk.com/oauth/authorizations/new + token_url: https://${connectionConfig.subdomain}.zendesk.com/oauth/tokens + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.zendesk.com + retry_after_headers: ["retry-after"] + paginate_type: 'link' + paginate_config: '{"type":"link","limit_name_in_request":"per_page","link_path_in_response_body":"next_page"}' + connection_config: + - field: subdomain + title: 'Zendesk Domain' + description: 'The subdomain of your Zendesk account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.zendesk.com' + +- keyname: acuity-scheduling + display_name: Acuity Scheduling + category: productivity + authorize_url: https://acuityscheduling.com/oauth2/authorize + token_url: https://acuityscheduling.com/oauth2/token + scopes: 'api-v1' + pkce_enabled: 'yes' + token_site: https://acuityscheduling.com/api/v1 + +- keyname: adobe-workfront + display_name: Adobe Workfront + category: productivity + authorize_url: https://${connectionConfig.hostname}/integrations/oauth2/authorize + token_url: https://${connectionConfig.hostname}/integrations/oauth2/api/v1/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.hostname}/attask/api + body_format: 'json' + authorization_method: 'header' + connection_config: + - field: hostname + title: 'Hostname' + description: 'The hostname of your Adobe Workfront account' + pattern: '^[a-zA-Z0-9-]+\.my\.workfront(\.adobe)?\.com$' + example: 'acme.my.workfront.com' + prefix: 'https://' + +- keyname: asana + display_name: Asana + category: productivity + authorize_url: https://app.asana.com/-/oauth_authorize + token_url: https://app.asana.com/-/oauth_token + scopes: 'default' + pkce_enabled: 'yes' + token_site: https://app.asana.com + retry_after_headers: ["retry-after"] + paginate_type: 'cursor' + paginate_config: '{"type":"cursor","cursor_path_in_response":"next_page.offset","cursor_name_in_request":"offset","response_path":"data","limit_name_in_request":"limit"}' + +- keyname: atlassian-government-cloud + display_name: Atlassian Government Cloud + category: productivity + authorize_url: https://auth.atlassian-us-gov-mod.com/authorize + token_url: https://auth.atlassian-us-gov-mod.com/oauth/token + scopes: 'offline_access' + pkce_enabled: 'yes' + auth_params: '{"audience":"api.atlassian-us-gov-mod.com","prompt":"consent"}' + token_site: https://api.atlassian-us-gov-mod.com + rate_limit_headers: ["x-ratelimit-reset"] + connection_config: + - field: subdomain + title: 'Subdomain' + description: 'The subdomain of your Atlassian Government Cloud account' + pattern: '^[a-zA-Z0-9.-]+$' + example: 'acme' + prefix: 'https://' + suffix: '.atlassian-us-gov-mod.net' + optional: true + +- keyname: basecamp + display_name: Basecamp + category: productivity + authorize_url: https://launchpad.37signals.com/authorization/new + token_url: https://launchpad.37signals.com/authorization/token + pkce_enabled: 'yes' + auth_params: '{"type":"web_server"}' + token_params: '{"type":"web_server"}' + token_site: https://3.basecampapi.com/${connectionConfig.accountId} + api_headers: '{"user-agent":"${connectionConfig.appDetails} || App (support@nango.dev)"}' + refresh_params: '{"type":"refresh"}' + retry_after_headers: ["retry-after"] + connection_config: + - field: accountId + title: 'Account ID' + description: 'Your Account ID' + pattern: '^[0-9]+$' + example: '5899981' + optional: true + +- keyname: box + display_name: Box + category: productivity + authorize_url: https://account.box.com/api/oauth2/authorize + token_url: https://api.box.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.box.com + verification_endpoint: https://api.box.com/2.0/users/me + help_url: https://developer.box.com/reference/ + +- keyname: calendly + display_name: Calendly + category: productivity + authorize_url: https://auth.calendly.com/oauth/authorize + token_url: https://auth.calendly.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.calendly.com + token_response_metadata: ["owner"] + rate_limit_headers: ["x-ratelimit-reset"] + paginate_type: 'link' + paginate_config: '{"type":"link","link_path_in_response_body":"pagination.next_page"}' + +- keyname: canvas-lms + display_name: Canvas LMS + category: productivity + authorize_url: https://${connectionConfig.hostname}/login/oauth2/auth + token_url: https://${connectionConfig.hostname}/login/oauth2/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.hostname} + connection_config: + - field: hostname + title: 'Canvas Install URL' + description: 'The base URL of your Canvas instance' + example: 'canvas.instructure.com' + prefix: 'https://' + format: 'hostname' + order: 1 + +- keyname: clickup + display_name: ClickUp + category: productivity + authorize_url: https://app.clickup.com/api + token_url: https://api.clickup.com/api/v2/oauth/token + pkce_enabled: 'yes' + token_site: https://api.clickup.com + +- keyname: dropbox + display_name: Dropbox + category: productivity + authorize_url: https://www.dropbox.com/oauth2/authorize + token_url: https://api.dropboxapi.com/oauth2/token + pkce_enabled: 'yes' + auth_params: '{"token_access_type":"offline"}' + token_site: https://api.dropboxapi.com + scopes: account_info.read + help_url: https://developers.dropbox.com/oauth-guide + +- keyname: envoy + display_name: Envoy + category: productivity + authorize_url: https://app.envoy.com/a/auth/v0/authorize + token_url: https://app.envoy.com/a/auth/v0/token + pkce_enabled: 'yes' + token_site: https://api.envoy.com + +- keyname: harvest + display_name: Harvest + category: productivity + authorize_url: https://id.getharvest.com/oauth2/authorize + token_url: https://id.getharvest.com/api/v2/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.harvestapp.com + api_headers: '{"user-agent":"${connectionConfig.appDetails} || App (support@nango.dev)"}' + retry_after_headers: ["retry-after"] + +- keyname: hover + display_name: Hover + category: productivity + authorize_url: https://hover.to/oauth/authorize + token_url: https://hover.to/oauth/token + pkce_enabled: 'no' + token_site: https://api.hover.to + token_request_auth_method: 'basic' + +- keyname: jira-data-center + display_name: Jira Data Center + category: productivity + authorize_url: https://${connectionConfig.endpointURL}/rest/oauth2/latest/authorize + token_url: https://${connectionConfig.endpointURL}/rest/oauth2/latest/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.endpointURL}/rest/api/latest + connection_config: + - field: endpointURL + title: 'Domain' + description: 'The domain of your Jira Data Center account' + pattern: '^[A-Za-z0-9.-]+(?::\d+(?:/[-A-Za-z0-9.]*)*)?$' + example: 'foobar.atlassian.net' + prefix: 'https://' + +- keyname: kintone + display_name: Kintone + category: productivity + authorize_url: https://${connectionConfig.subdomain}.kintone.com/oauth2/authorization + token_url: https://${connectionConfig.subdomain}.kintone.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.kintone.com + token_request_auth_method: 'basic' + connection_config: + - field: subdomain + title: 'Subdomain' + description: 'The subdomain for your Kintone account' + pattern: '^[a-z0-9_-]+$' + example: 'urdzw8p24agp' + +- keyname: monday + display_name: Monday + category: productivity + authorize_url: https://auth.monday.com/oauth2/authorize + token_url: https://auth.monday.com/oauth2/token + pkce_enabled: 'no' + auth_params: '{"force_install_if_needed":true}' + token_site: https://api.monday.com + token_request_auth_method: 'body' + help_url: https://developer.monday.com/apps/docs/oauth + notes: 'Client credentials must be sent in the request body (not Basic auth).' + +- keyname: notion + display_name: Notion + category: productivity + authorize_url: https://api.notion.com/v1/oauth/authorize + token_url: https://api.notion.com/v1/oauth/token + pkce_enabled: 'yes' + auth_params: '{"owner":"user"}' + token_site: https://api.notion.com + api_headers: '{"notion-version":"2022-06-28"}' + body_format: 'json' + authorization_method: 'header' + token_response_metadata: ["workspace_id"] + retry_after_headers: ["retry-after"] + paginate_type: 'cursor' + paginate_config: '{"type":"cursor","cursor_path_in_response":"next_cursor","cursor_name_in_request":"start_cursor","limit_name_in_request":"page_size","response_path":"results"}' + help_url: https://developers.notion.com/docs + +- keyname: one-drive-personal + display_name: OneDrive Personal + category: productivity + authorize_url: https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize + token_url: https://login.microsoftonline.com/consumers/oauth2/v2.0/token + scopes: 'offline_access' + pkce_enabled: 'no' + auth_params: '{"response_mode":"query"}' + token_site: https://api.onedrive.com + retry_after_headers: ["retry-after"] + +- keyname: productboard + display_name: Productboard + category: productivity + authorize_url: https://app.productboard.com/oauth2/authorize + token_url: https://app.productboard.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.productboard.com + api_headers: '{"x-version":"1"}' + +- keyname: projectplace2 + display_name: Projectplace2 + category: productivity + authorize_url: https://api.projectplace.com/oauth2/authorize + token_url: https://api.projectplace.com/oauth2/access_token + pkce_enabled: 'no' + +- keyname: servicem8 + display_name: ServiceM8 + category: productivity + authorize_url: https://go.servicem8.com/oauth/authorize + token_url: https://go.servicem8.com/oauth/access_token + pkce_enabled: 'yes' + token_site: https://api.servicem8.com + +- keyname: servicenow + display_name: ServiceNow + category: productivity + authorize_url: https://${connectionConfig.subdomain}.service-now.com/oauth_auth.do + token_url: https://${connectionConfig.subdomain}.service-now.com/oauth_token.do + pkce_enabled: 'yes' + token_site: https://${connectionConfig.subdomain}.service-now.com + connection_config: + - field: subdomain + title: 'ServiceNow Domain' + description: 'The subdomain of your ServiceNow account' + pattern: '^[a-z0-9_-]+$' + example: 'domain' + prefix: 'https://' + suffix: '.service-now.com' + +- keyname: stackexchange + display_name: Stack Exchange + category: productivity + authorize_url: https://stackoverflow.com/oauth + token_url: https://stackoverflow.com/oauth/access_token/json + scopes: 'no_expiry' + pkce_enabled: 'yes' + token_site: https://api.stackexchange.com + +- keyname: teamwork + display_name: Teamwork + category: productivity + authorize_url: https://www.teamwork.com/launchpad/login + token_url: https://www.teamwork.com/launchpad/v1/token.json + pkce_enabled: 'yes' + token_site: ${connectionConfig.installation.apiEndPoint} + token_response_metadata: ["installation.apiEndPoint"] + +- keyname: ticktick + display_name: TickTick + category: productivity + authorize_url: https://ticktick.com/oauth/authorize + token_url: https://ticktick.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api.ticktick.com + +- keyname: timely + display_name: Timely + category: productivity + authorize_url: https://api.timelyapp.com/1.1/oauth/authorize + token_url: https://api.timelyapp.com/1.1/oauth/token + pkce_enabled: 'no' + token_site: https://api.timelyapp.com + +- keyname: todoist + display_name: Todoist + category: productivity + authorize_url: https://todoist.com/oauth/authorize + token_url: https://todoist.com/oauth/access_token + pkce_enabled: 'yes' + token_site: https://api.todoist.com + scope_separator: ',' + scopes: data:read + help_url: https://developer.todoist.com/guides/#oauth + token_request_auth_method: body + +- keyname: wrike + display_name: Wrike + category: productivity + authorize_url: https://login.wrike.com/oauth2/authorize/v4 + token_url: https://login.wrike.com/oauth2/token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.host}/api/v4 + scope_separator: ',' + token_response_metadata: ["host"] + connection_config: + - field: host + title: 'Domain' + description: 'The domain of your Wrike account' + prefix: 'https://' + format: 'hostname' + +- keyname: netatmo + display_name: Netatmo + category: smart-home + authorize_url: https://api.netatmo.com/oauth2/authorize + token_url: https://api.netatmo.com/oauth2/token + scopes: 'read_station' + pkce_enabled: 'no' + token_site: https://api.netatmo.com + help_url: https://dev.netatmo.com/apps + notes: 'Use Bearer (capitalized) in Authorization header. Netatmo is case-sensitive.' + +- keyname: tempest-weather + display_name: Tempest Weather Station + category: smart-home + authorize_url: https://tempestwx.com/authorize.html + token_url: https://swd.weatherflow.com/id/oauth2/token + pkce_enabled: 'no' + token_site: https://swd.weatherflow.com + help_url: https://tempestwx.com/settings/tokens + notes: 'Token endpoint is on different domain (swd.weatherflow.com) than authorization (tempestwx.com).' + +- keyname: withings + display_name: Withings + category: smart-home + authorize_url: https://account.withings.com/oauth2_user/authorize2 + token_url: https://wbsapi.withings.net/v2/oauth2 + scopes: 'user.info,user.metrics,user.activity' + pkce_enabled: 'no' + token_params: '{"action": "requesttoken"}' + token_site: https://wbsapi.withings.net + help_url: https://developer.withings.com/dashboard/ + notes: 'Token endpoint requires action=requesttoken parameter' + scope_separator: ',' + +- keyname: reddit + display_name: Reddit + category: social + authorize_url: https://www.reddit.com/api/v1/authorize + token_url: https://www.reddit.com/api/v1/access_token + pkce_enabled: 'yes' + auth_params: '{"duration":"permanent"}' + token_site: https://oauth.reddit.com + authorization_method: 'header' + scopes: identity + verification_endpoint: https://oauth.reddit.com/api/v1/me + +- keyname: strava + display_name: Strava (Mobile) + category: social + authorize_url: https://www.strava.com/oauth/mobile/authorize + token_url: https://www.strava.com/api/v3/oauth/token + pkce_enabled: 'yes' + auth_params: '{"approval_prompt":"auto"}' + token_site: https://www.strava.com + scope_separator: ',' + scopes: read + verification_endpoint: https://www.strava.com/api/v3/athlete + help_url: http://developers.strava.com/docs/reference/ + token_request_auth_method: body + +- keyname: tiktok-ads + display_name: TikTok Ads + category: social + authorize_url: https://business-api.tiktok.com/portal/auth + token_url: https://business-api.tiktok.com/open_api/v1.3/oauth2/access_token/ + pkce_enabled: 'yes' + token_site: https://business-api.tiktok.com/open_api/v1.3/ + api_headers: '{"access-token":"${accessToken}"}' + +- keyname: tumblr + display_name: Tumblr + category: social + authorize_url: https://www.tumblr.com/oauth2/authorize + token_url: https://api.tumblr.com/v2/oauth2/token + pkce_enabled: 'yes' + token_site: https://api.tumblr.com/v2 + +- keyname: yahoo + display_name: Yahoo + category: social + authorize_url: https://api.login.yahoo.com/oauth2/request_auth + token_url: https://api.login.yahoo.com/oauth2/get_token + pkce_enabled: 'yes' + token_site: https://${connectionConfig.apiDomain} + connection_config: + - field: apiDomain + title: 'API Domain' + description: 'The domain to the API you want to connect to' + example: 'fantasysports.yahooapis.com' + prefix: 'https://' + format: 'hostname' + +- keyname: yandex + display_name: Yandex + category: social + authorize_url: https://oauth.yandex.com/authorize + token_url: https://oauth.yandex.com/token + pkce_enabled: 'yes' + token_site: https://translate.yandex.net + scopes: 'login:info login:email login:avatar' + verification_endpoint: https://login.yandex.ru/info?format=json + help_url: https://oauth.yandex.com/ + +- keyname: aircall + display_name: Aircall (OAuth) + category: support + authorize_url: https://dashboard.aircall.io/oauth/authorize + token_url: https://api.aircall.io/v1/oauth/token + pkce_enabled: 'yes' + auth_params: '{"scope":"public_api"}' + token_site: https://api.aircall.io + rate_limit_headers: ["x-aircallapi-reset"] + paginate_type: 'link' + paginate_config: '{"type":"link","link_path_in_response_body":"meta.next_page_link","response_path":"results"}' + +- keyname: datto-rmm + display_name: Datto RMM + category: support + authorize_url: https://${connectionConfig.platform}-api.centrastage.net/auth/oauth/authorize + token_url: https://${connectionConfig.platform}-api.centrastage.net/auth/oauth/token + pkce_enabled: 'no' + token_site: https://${connectionConfig.platform}-api.centrastage.net/api + token_request_auth_method: 'basic' + connection_config: + - field: platform + title: 'Platform' + description: 'The Datto RMM platform (region) for your account' + pattern: '^(pinotage|merlot|concord|vidal|zinfandel|syrah)$' + example: 'merlot' + prefix: 'https://' + suffix: '-api.centrastage.net' + order: 1 + +- keyname: front + display_name: Front + category: support + authorize_url: https://app.frontapp.com/oauth/authorize + token_url: https://app.frontapp.com/oauth/token + pkce_enabled: 'yes' + token_site: https://api2.frontapp.com + retry_after_headers: ["retry-after"] + paginate_type: 'link' + paginate_config: '{"type":"link","response_path":"_results","link_path_in_response_body":"_pagination.next"}' + +- keyname: ring-central + display_name: RingCentral + category: support + authorize_url: https://platform.ringcentral.com/restapi/oauth/authorize + token_url: https://platform.ringcentral.com/restapi/oauth/token + pkce_enabled: 'yes' + token_site: https://platform.ringcentral.com + authorization_method: 'header' + retry_after_headers: ["retry-after"] + +- keyname: 23andme + display_name: 23andMe + category: other + authorize_url: https://api.23andme.com/authorize + token_url: https://api.23andme.com/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.23andme.com/3/account/' + +- keyname: acton + display_name: Act-On + category: other + authorize_url: https://restapi.actonsoftware.com/authorize + token_url: https://restapi.actonsoftware.com/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://restapi.actonsoftware.com/api/1/account' + +- keyname: aha + display_name: Aha! + category: other + authorize_url: https://${connectionConfig.subdomain}.aha.io/oauth/authorize + token_url: https://${connectionConfig.subdomain}.aha.io/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://[subdomain].aha.io/api/v1/me' + connection_config: + - field: subdomain + title: 'Aha! Subdomain' + description: 'Your Aha! subdomain or instance URL' + example: 'my-company' + +- keyname: angellist + display_name: AngelList + category: other + authorize_url: https://angel.co/api/oauth/authorize + token_url: https://angel.co/api/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.angel.co/1/me' + +- keyname: arcgis + display_name: ArcGIS + category: other + authorize_url: https://www.arcgis.com/sharing/rest/oauth2/authorize + token_url: https://www.arcgis.com/sharing/rest/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://www.arcgis.com/sharing/rest/community/self' + +- keyname: assembla + display_name: Assembla + category: other + authorize_url: https://api.assembla.com/authorization + token_url: https://api.assembla.com/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.assembla.com/v1/user.json' + +- keyname: authing + display_name: Authing + category: other + authorize_url: https://${connectionConfig.subdomain}.authing.cn/oidc/auth + token_url: https://${connectionConfig.subdomain}.authing.cn/oidc/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://[subdomain].authing.cn/oidc/me' + connection_config: + - field: subdomain + title: 'Authing Subdomain' + description: 'Your Authing subdomain or instance URL' + example: 'my-company' + +- keyname: aweber + display_name: AWeber + category: other + authorize_url: https://auth.aweber.com/oauth2/authorize + token_url: https://auth.aweber.com/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.aweber.com/1.0/accounts/me' + +- keyname: axosoft + display_name: Axosoft + category: other + authorize_url: https://${connectionConfig.subdomain}.axosoft.com/auth + token_url: https://${connectionConfig.subdomain}.axosoft.com/api/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://[subdomain].axosoft.com/api/v5/me' + connection_config: + - field: subdomain + title: 'Axosoft Subdomain' + description: 'Your Axosoft subdomain or instance URL' + example: 'my-company' + +- keyname: baidu + display_name: Baidu + category: other + authorize_url: https://openapi.baidu.com/oauth/2.0/authorize + token_url: https://openapi.baidu.com/oauth/2.0/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://openapi.baidu.com/rest/2.0/passport/users/getLoggedInUser' + +- keyname: buffer + display_name: Buffer + category: marketing + authorize_url: https://bufferapp.com/oauth2/authorize + token_url: https://api.bufferapp.com/1/oauth2/token.json + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.bufferapp.com/1/user.json' + +- keyname: campaignmonitor + display_name: Campaign Monitor + category: other + authorize_url: https://api.createsend.com/oauth + token_url: https://api.createsend.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.createsend.com/api/v3.1/clients.json' + +- keyname: cas + display_name: CAS + category: other + authorize_url: https://${connectionConfig.subdomain}/oidc/authorize + token_url: https://${connectionConfig.subdomain}/oidc/token + pkce_enabled: 'no' + connection_config: + - field: subdomain + title: 'CAS Subdomain' + description: 'Your CAS subdomain or instance URL' + example: 'my-company' + +- keyname: clio + display_name: Clio + category: other + authorize_url: https://app.clio.com/oauth/authorize + token_url: https://app.clio.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://app.clio.com/api/v4/users/who_am_i.json' + +- keyname: concur + display_name: Concur + category: other + authorize_url: https://${connectionConfig.subdomain}.api.concursolutions.com/oauth2/v0/authorize + token_url: https://${connectionConfig.subdomain}.api.concursolutions.com/oauth2/v0/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://[subdomain].api.concursolutions.com/api/user/v1.0/user' + connection_config: + - field: subdomain + title: 'Concur Subdomain' + description: 'Your Concur subdomain or instance URL' + example: 'my-company' + +- keyname: coursera + display_name: Coursera + category: other + authorize_url: https://accounts.coursera.org/oauth2/v1/auth + token_url: https://accounts.coursera.org/oauth2/v1/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.coursera.org/api/externalBasicProfiles.v1' + +- keyname: crossid + display_name: CrossID + category: other + authorize_url: https://${connectionConfig.subdomain}.crossid.io/oauth2/auth + token_url: https://${connectionConfig.subdomain}.crossid.io/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://[subdomain].crossid.io/oauth2/userinfo' + connection_config: + - field: subdomain + title: 'CrossID Subdomain' + description: 'Your CrossID subdomain or instance URL' + example: 'my-company' + +- keyname: dailymotion + display_name: Dailymotion + category: entertainment + authorize_url: https://www.dailymotion.com/oauth/authorize + token_url: https://api.dailymotion.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.dailymotion.com/user/me' + +- keyname: deezer + display_name: Deezer + category: entertainment + authorize_url: https://connect.deezer.com/oauth/auth.php + token_url: https://connect.deezer.com/oauth/access_token.php + pkce_enabled: 'no' + notes: 'Profile endpoint: http://api.deezer.com/user/me' + +- keyname: delivery + display_name: Delivery + category: other + authorize_url: https://api.delivery.com/third_party/authorize + token_url: https://api.delivery.com/third_party/access_token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.delivery.com/customer/account' + +- keyname: deputy + display_name: Deputy + category: other + authorize_url: https://once.deputy.com/my/oauth/login + token_url: https://once.deputy.com/my/oauth/access_token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://[subdomain].deputy.com/api/v1/me' + +- keyname: deviantart + display_name: DeviantArt + category: design + authorize_url: https://www.deviantart.com/oauth2/authorize + token_url: https://www.deviantart.com/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://www.deviantart.com/api/v1/oauth2/user/whoami' + +- keyname: disqus + display_name: Disqus + category: social + authorize_url: https://disqus.com/api/oauth/2.0/authorize/ + token_url: https://disqus.com/api/oauth/2.0/access_token/ + pkce_enabled: 'no' + notes: 'Profile endpoint: https://disqus.com/api/3.0/users/details.json' + +- keyname: dribbble + display_name: Dribbble + category: design + authorize_url: https://dribbble.com/oauth/authorize + token_url: https://dribbble.com/oauth/token + pkce_enabled: 'no' + verification_endpoint: https://api.dribbble.com/v2/user + help_url: https://developer.dribbble.com + notes: 'Profile endpoint: https://api.dribbble.com/v2/user' + +- keyname: echosign + display_name: Adobe Sign + category: other + authorize_url: https://secure.echosign.com/public/oauth + token_url: https://secure.echosign.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.echosign.com/api/rest/v6/users' + +- keyname: edmodo + display_name: Edmodo + category: other + authorize_url: https://api.edmodo.com/oauth/authorize + token_url: https://api.edmodo.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.edmodo.com/users/me' + +- keyname: ecwid + display_name: Ecwid + category: e-commerce + authorize_url: https://my.ecwid.com/api/oauth/authorize + token_url: https://my.ecwid.com/api/oauth/token + pkce_enabled: 'no' + +- keyname: eyeem + display_name: EyeEm + category: other + authorize_url: https://www.eyeem.com/oauth/authorize + token_url: https://api.eyeem.com/v2/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.eyeem.com/v2/users/me' + +- keyname: familysearch + display_name: FamilySearch + category: other + authorize_url: https://ident.familysearch.org/cis-web/oauth2/v3/authorization + token_url: https://ident.familysearch.org/cis-web/oauth2/v3/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.familysearch.org/platform/users/current' + +- keyname: feedly + display_name: Feedly + category: other + authorize_url: https://cloud.feedly.com/v3/auth/auth + token_url: https://cloud.feedly.com/v3/auth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://cloud.feedly.com/v3/profile' + +- keyname: formstack + display_name: Formstack + category: other + authorize_url: https://www.formstack.com/api/v2/oauth2/authorize + token_url: https://www.formstack.com/api/v2/oauth2/token + pkce_enabled: 'no' + +- keyname: freelancer + display_name: Freelancer + category: other + authorize_url: https://accounts.freelancer.com/oauth/authorize + token_url: https://accounts.freelancer.com/oauth/token + pkce_enabled: 'no' + +- keyname: genius + display_name: Genius + category: other + authorize_url: https://api.genius.com/oauth/authorize + token_url: https://api.genius.com/oauth/token + pkce_enabled: 'no' + +- keyname: getbase + display_name: Getbase + category: other + authorize_url: https://api.getbase.com/oauth2/authorize + token_url: https://api.getbase.com/oauth2/token + pkce_enabled: 'no' + +- keyname: gitbook + display_name: GitBook + category: dev-tools + authorize_url: https://api.gitbook.com/oauth/authorize + token_url: https://api.gitbook.com/oauth/access_token + pkce_enabled: 'no' + +- keyname: gitter + display_name: Gitter + category: dev-tools + authorize_url: https://gitter.im/login/oauth/authorize + token_url: https://gitter.im/login/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.gitter.im/v1/user' + +- keyname: groove + display_name: Groove + category: other + authorize_url: https://api.groovehq.com/oauth/authorize + token_url: https://api.groovehq.com/oauth/token + pkce_enabled: 'no' + +- keyname: hellosign + display_name: HelloSign + category: other + authorize_url: https://www.hellosign.com/oauth/authorize + token_url: https://www.hellosign.com/oauth/token + pkce_enabled: 'no' + +- keyname: heroku + display_name: Heroku + category: dev-tools + authorize_url: https://id.heroku.com/oauth/authorize + token_url: https://id.heroku.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.heroku.com/account' + +- keyname: homeaway + display_name: HomeAway + category: travel + authorize_url: https://ws.homeaway.com/oauth/authorize + token_url: https://ws.homeaway.com/oauth/token + pkce_enabled: 'no' + +- keyname: hootsuite + display_name: Hootsuite + category: marketing + authorize_url: https://platform.hootsuite.com/oauth2/auth + token_url: https://platform.hootsuite.com/oauth2/token + pkce_enabled: 'no' + +- keyname: huddle + display_name: Huddle + category: other + authorize_url: https://login.huddle.net/request + token_url: https://login.huddle.net/token + pkce_enabled: 'no' + +- keyname: ibm + display_name: IBM + category: other + authorize_url: https://login.ibm.com/oidc/endpoint/default/authorize + token_url: https://login.ibm.com/oidc/endpoint/default/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://login.ibm.com/oidc/endpoint/default/userinfo' + +- keyname: iconfinder + display_name: Iconfinder + category: other + authorize_url: https://www.iconfinder.com/api/v2/oauth2/authorize + token_url: https://www.iconfinder.com/api/v2/oauth2/token + pkce_enabled: 'no' + +- keyname: idme + display_name: ID.me + category: other + authorize_url: https://api.id.me/oauth/authorize + token_url: https://api.id.me/oauth/token + pkce_enabled: 'no' + +- keyname: idonethis + display_name: I Done This + category: other + authorize_url: https://idonethis.com/api/oauth2/authorize/ + token_url: https://idonethis.com/api/oauth2/token/ + pkce_enabled: 'no' + +- keyname: imgur + display_name: Imgur + category: other + authorize_url: https://api.imgur.com/oauth2/authorize + token_url: https://api.imgur.com/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.imgur.com/3/account/me.json' + +- keyname: infusionsoft + display_name: Infusionsoft + category: other + authorize_url: https://signin.infusionsoft.com/app/oauth/authorize + token_url: https://api.infusionsoft.com/token + pkce_enabled: 'no' + +- keyname: jamendo + display_name: Jamendo + category: entertainment + authorize_url: https://api.jamendo.com/v3.0/oauth/authorize + token_url: https://api.jamendo.com/v3.0/oauth/grant + pkce_enabled: 'no' + +- keyname: live + display_name: Microsoft Live + category: other + authorize_url: https://login.live.com/oauth20_authorize.srf + token_url: https://login.live.com/oauth20_token.srf + pkce_enabled: 'no' + notes: 'Profile endpoint: https://apis.live.net/v5.0/me' + +- keyname: livechat + display_name: LiveChat + category: other + authorize_url: https://accounts.livechatinc.com/ + token_url: https://accounts.livechatinc.com/token + pkce_enabled: 'no' + +- keyname: logingov + display_name: Login.gov + category: other + authorize_url: https://idp.int.identitysandbox.gov/openid_connect/authorize + token_url: https://idp.int.identitysandbox.gov/api/openid_connect/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://idp.int.identitysandbox.gov/api/openid_connect/userinfo' + +- keyname: lyft + display_name: Lyft + category: travel + authorize_url: https://api.lyft.com/oauth/authorize + token_url: https://api.lyft.com/oauth/token + pkce_enabled: 'no' + +- keyname: mailup + display_name: MailUp + category: marketing + authorize_url: https://services.mailup.com/Authorization/OAuth/Authorization + token_url: https://services.mailup.com/Authorization/OAuth/Token + pkce_enabled: 'no' + +- keyname: mailxpert + display_name: Mailxpert + category: other + authorize_url: https://app.mailxpert.ch/oauth/v2/auth + token_url: https://app.mailxpert.ch/oauth/v2/token + pkce_enabled: 'no' + +- keyname: mapmyfitness + display_name: MapMyFitness + category: healthcare + authorize_url: https://www.mapmyfitness.com/v7.1/oauth2/uacf/authorize + token_url: https://api.mapmyfitness.com/v7.1/oauth2/access_token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://oauth2-api.mapmyapi.com/v7.1/user/self' + +- keyname: mastodon + display_name: Mastodon + category: social + authorize_url: https://${connectionConfig.subdomain}/oauth/authorize + token_url: https://${connectionConfig.subdomain}/oauth/token + pkce_enabled: 'no' + connection_config: + - field: subdomain + title: 'Mastodon Subdomain' + description: 'Your Mastodon subdomain or instance URL' + example: 'my-company' + help_url: https://docs.joinmastodon.org/client/token/ + +- keyname: meetup + display_name: Meetup + category: other + authorize_url: https://secure.meetup.com/oauth2/authorize + token_url: https://secure.meetup.com/oauth2/access + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.meetup.com/2/members' + +- keyname: mendeley + display_name: Mendeley + category: other + authorize_url: https://api.mendeley.com/oauth/authorize + token_url: https://api.mendeley.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.mendeley.com/profiles/me' + +- keyname: mention + display_name: Mention + category: other + authorize_url: https://web.mention.com/authorize + token_url: https://web.mention.net/oauth/v2/token + pkce_enabled: 'no' + +- keyname: mixcloud + display_name: Mixcloud + category: entertainment + authorize_url: https://www.mixcloud.com/oauth/authorize + token_url: https://www.mixcloud.com/oauth/access_token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.mixcloud.com/me' + +- keyname: moxtra + display_name: Moxtra + category: other + authorize_url: https://api.moxtra.com/oauth/authorize + token_url: https://api.moxtra.com/oauth/token + pkce_enabled: 'no' + +- keyname: myob + display_name: MYOB + category: finance + authorize_url: https://secure.myob.com/oauth2/account/authorize + token_url: https://secure.myob.com/oauth2/v1/authorize + pkce_enabled: 'no' + +- keyname: nest + display_name: Nest + category: smart-home + authorize_url: https://home.nest.com/login/oauth2 + token_url: https://api.home.nest.com/oauth2/access_token + pkce_enabled: 'no' + +- keyname: nokotime + display_name: NokoTime + category: other + authorize_url: https://secure.nokotime.com/oauth/2/authorize + token_url: https://secure.nokotime.com/oauth/2/access_token + pkce_enabled: 'no' + +- keyname: nylas + display_name: Nylas + category: other + authorize_url: https://api.nylas.com/oauth/authorize + token_url: https://api.nylas.com/oauth/token + pkce_enabled: 'no' + +- keyname: openstreetmap2 + display_name: OpenStreetMap + category: other + authorize_url: https://www.openstreetmap.org/oauth2/authorize + token_url: https://www.openstreetmap.org/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.openstreetmap.org/api/0.6/user/details.json' + +- keyname: optimizely + display_name: Optimizely + category: dev-tools + authorize_url: https://app.optimizely.com/oauth2/authorize + token_url: https://app.optimizely.com/oauth2/token + pkce_enabled: 'no' + +- keyname: podio + display_name: Podio + category: productivity + authorize_url: https://podio.com/oauth/authorize + token_url: https://podio.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.podio.com/user' + +- keyname: producthunt + display_name: Product Hunt + category: other + authorize_url: https://api.producthunt.com/v1/oauth/authorize + token_url: https://api.producthunt.com/v1/oauth/token + pkce_enabled: 'no' + +- keyname: projectplace + display_name: Projectplace + category: other + authorize_url: https://api.projectplace.com/oauth2/authorize + token_url: https://api.projectplace.com/oauth2/access_token + pkce_enabled: 'no' + +- keyname: pushbullet + display_name: Pushbullet + category: other + authorize_url: https://www.pushbullet.com/authorize + token_url: https://api.pushbullet.com/oauth2/token + pkce_enabled: 'no' + +- keyname: qq + display_name: Qq + category: social + authorize_url: https://graph.qq.com/oauth2.0/authorize + token_url: https://graph.qq.com/oauth2.0/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://graph.qq.com/oauth2.0/me' + +- keyname: redbooth + display_name: Redbooth + category: productivity + authorize_url: https://redbooth.com/oauth2/authorize + token_url: https://redbooth.com/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://redbooth.com/api/3/me' + +- keyname: runkeeper + display_name: Runkeeper + category: healthcare + authorize_url: https://runkeeper.com/apps/authorize + token_url: https://runkeeper.com/apps/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.runkeeper.com/user' + +- keyname: shoeboxed + display_name: Shoeboxed + category: other + authorize_url: https://id.shoeboxed.com/oauth/authorize + token_url: https://id.shoeboxed.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.shoeboxed.com/v2/user' + +- keyname: snapchat + display_name: Snapchat + category: social + authorize_url: https://accounts.snapchat.com/accounts/oauth2/auth + token_url: https://accounts.snapchat.com/accounts/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://kit.snapchat.com/v1/me' + +- keyname: socialpilot + display_name: SocialPilot + category: other + authorize_url: https://panel.socialpilot.co/oauth + token_url: https://panel.socialpilot.co/oauth/accesstoken + pkce_enabled: 'no' + +- keyname: socrata + display_name: Socrata + category: other + authorize_url: https://${connectionConfig.subdomain}/oauth/authorize + token_url: https://${connectionConfig.subdomain}/oauth/access_token + pkce_enabled: 'no' + connection_config: + - field: subdomain + title: 'Socrata Subdomain' + description: 'Your Socrata subdomain or instance URL' + example: 'my-company' + +- keyname: soundcloud + display_name: SoundCloud + category: entertainment + authorize_url: https://soundcloud.com/connect + token_url: https://api.soundcloud.com/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.soundcloud.com/me.json' + +- keyname: stocktwits + display_name: Stocktwits + category: other + authorize_url: https://api.stocktwits.com/api/2/oauth/authorize + token_url: https://api.stocktwits.com/api/2/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.stocktwits.com/api/2/account/verify.json' + +- keyname: stormz + display_name: Stormz + category: other + authorize_url: https://stormz.me/oauth/authorize + token_url: https://stormz.me/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.stormz.me/v1/user/me' + +- keyname: storyblok + display_name: Storyblok + category: dev-tools + authorize_url: https://app.storyblok.com/oauth/authorize + token_url: https://app.storyblok.com/oauth/token + pkce_enabled: 'no' + +- keyname: surveysparrow + display_name: SurveySparrow + category: marketing + authorize_url: https://app.surveysparrow.com/o/oauth/auth + token_url: https://app.surveysparrow.com/o/oauth/token + pkce_enabled: 'no' + +- keyname: thingiverse + display_name: Thingiverse + category: other + authorize_url: https://www.thingiverse.com/login/oauth/authorize + token_url: https://www.thingiverse.com/login/oauth/access_token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.thingiverse.com/users/me' + +- keyname: ticketbud + display_name: Ticketbud + category: other + authorize_url: https://api.ticketbud.com/oauth/authorize + token_url: https://api.ticketbud.com/oauth/token + pkce_enabled: 'no' + +- keyname: tiktok + display_name: TikTok + category: social + authorize_url: https://open-api.tiktok.com/platform/oauth/connect/ + token_url: https://open-api.tiktok.com/oauth/access_token/ + pkce_enabled: 'no' + scopes: user.info.profile + verification_endpoint: https://open.tiktokapis.com/v2/user/info/?fields=open_id,avatar_url,display_name,username + help_url: https://developers.tiktok.com/doc/tiktok-api-v2-get-user-info/ + notes: 'Production applications cannot use localhost URLs to sign in with TikTok. You need add the domain and Callback/Redirect urls to your TikTok app and have them review and approved by the TikTok Team. If you need to test your implementation, you can use the sandbox feature and ngrok for testing in localhost.' + token_request_auth_method: body + +- keyname: traxo + display_name: Traxo + category: other + authorize_url: https://www.traxo.com/oauth/authenticate + token_url: https://www.traxo.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.traxo.com/v2/me' + +- keyname: trustpilot + display_name: Trustpilot + category: other + authorize_url: https://authenticate.trustpilot.com + token_url: https://api.trustpilot.com/v1/oauth/oauth-business-users-for-applications/accesstoken + pkce_enabled: 'no' + +- keyname: unbounce + display_name: Unbounce + category: other + authorize_url: https://api.unbounce.com/oauth/authorize + token_url: https://api.unbounce.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.unbounce.com/users/self' + +- keyname: underarmour + display_name: Under Armour + category: other + authorize_url: https://www.mapmyfitness.com/v7.1/oauth2/uacf/authorize + token_url: https://api.mapmyfitness.com/v7.1/oauth2/access_token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.ua.com/v7.1/user/self' + +- keyname: unsplash + display_name: Unsplash + category: design + authorize_url: https://unsplash.com/oauth/authorize + token_url: https://unsplash.com/oauth/token + pkce_enabled: 'no' + +- keyname: untappd + display_name: Untappd + category: other + authorize_url: https://untappd.com/oauth/authenticate + token_url: https://untappd.com/oauth/authorize + pkce_enabled: 'no' + +- keyname: vend + display_name: Vend + category: other + authorize_url: https://secure.vendhq.com/connect + token_url: https://${connectionConfig.subdomain}.vendhq.com/api/1.0/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://[subdomain].vendhq.com/api/users' + connection_config: + - field: subdomain + title: 'Vend Subdomain' + description: 'Your Vend subdomain or instance URL' + example: 'my-company' + +- keyname: venmo + display_name: Venmo + category: finance + authorize_url: https://api.venmo.com/v1/oauth/authorize + token_url: https://api.venmo.com/v1/oauth/access_token + pkce_enabled: 'no' + +- keyname: vercel + display_name: Vercel + category: dev-tools + authorize_url: https://vercel.com/oauth/authorize + token_url: https://api.vercel.com/v2/oauth/access_token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.vercel.com/www/user' + +- keyname: verticalresponse + display_name: VerticalResponse + category: other + authorize_url: https://vrapi.verticalresponse.com/api/v1/oauth/authorize + token_url: https://vrapi.verticalresponse.com/api/v1/oauth/access_token + pkce_enabled: 'no' + +- keyname: viadeo + display_name: Viadeo + category: social + authorize_url: https://partners.viadeo.com/oauth/authorize + token_url: https://partners.viadeo.com/oauth/token + pkce_enabled: 'no' + +- keyname: visualstudio + display_name: Visual Studio + category: dev-tools + authorize_url: https://app.vssps.visualstudio.com/oauth2/authorize + token_url: https://app.vssps.visualstudio.com/oauth2/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://app.vssps.visualstudio.com/_apis/profile/profiles/me?api-version=6.0' + +- keyname: wechat + display_name: WeChat + category: social + authorize_url: https://open.weixin.qq.com/connect/oauth2/authorize + token_url: https://api.weixin.qq.com/sns/oauth2/access_token + pkce_enabled: 'no' + help_url: https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Authorized_Interface_Calling_UnionID.html + notes: 'Profile endpoint: https://api.weixin.qq.com/sns/userinfo' + +- keyname: weekdone + display_name: Weekdone + category: other + authorize_url: https://weekdone.com/oauth_authorize + token_url: https://weekdone.com/oauth_token + pkce_enabled: 'no' + +- keyname: weibo + display_name: Weibo + category: social + authorize_url: https://api.weibo.com/oauth2/authorize + token_url: https://api.weibo.com/oauth2/access_token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.weibo.com/2/users/show.json' + +- keyname: yammer + display_name: Yammer + category: other + authorize_url: https://www.yammer.com/dialog/oauth + token_url: https://www.yammer.com/oauth2/access_token.json + pkce_enabled: 'no' + notes: 'Profile endpoint: https://www.yammer.com/api/v1/users/current.json' + +- keyname: amazon-seller + display_name: Amazon Seller + category: e-commerce + authorize_url: https://sellercentral.amazon.com/apps/authorize/consent + token_url: https://api.amazon.com/auth/o2/token + pkce_enabled: 'no' + help_url: https://developer-docs.amazon.com/sp-api/docs/authorizing-selling-partner-api-applications + +- keyname: faire + display_name: Faire + category: e-commerce + authorize_url: https://faire.com/oauth2/authorize + token_url: https://www.faire.com/api/external-api-oauth2/token + pkce_enabled: 'no' + body_format: 'json' + help_url: https://faire.github.io/external-api-v2-docs/#using-oauth + notes: 'Uses Application ID as client_id and Secret ID as client_secret. Token request uses JSON body format.' + +- keyname: 42-school + display_name: 42 School + category: education + authorize_url: https://api.intra.42.fr/oauth/authorize + token_url: https://api.intra.42.fr/oauth/token + pkce_enabled: 'no' + scopes: 'public' + verification_endpoint: https://api.intra.42.fr/v2/me + +- keyname: apple + display_name: Apple + category: identity + authorize_url: https://appleid.apple.com/auth/authorize + token_url: https://appleid.apple.com/auth/token + pkce_enabled: 'yes' + scopes: 'name email' + token_request_auth_method: 'body' + help_url: https://developer.apple.com/documentation/authenticationservices/asuserdetectionstatus + auth_params: '{"response_mode": "form_post"}' + +- keyname: auth0 + display_name: Auth0 + category: identity + authorize_url: https://${connectionConfig.subdomain}.auth0.com/authorize + token_url: https://${connectionConfig.subdomain}.auth0.com/oauth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://[subdomain].auth0.com/userinfo' + connection_config: + - field: subdomain + title: 'Subdomain' + description: 'Your Auth0 subdomain or instance hostname' + example: 'my-org.auth0.com' + +- keyname: authentiq + display_name: Authentiq + category: identity + authorize_url: https://connect.authentiq.io/sign-in + token_url: https://connect.authentiq.io/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://connect.authentiq.io/userinfo' + +- keyname: bankid-no + display_name: BankID Norge + category: identity + authorize_url: ${connectionConfig.issuer}/protocol/openid-connect/auth + token_url: ${connectionConfig.issuer}/protocol/openid-connect/token + pkce_enabled: 'yes' + token_request_auth_method: 'body' + notes: 'Use the OIDC discovery endpoint to find your issuer URL. Do not hardcode endpoint URLs as they may change.' + connection_config: + - field: issuer + title: 'Issuer URL' + description: 'Your BankID OIDC issuer URL (e.g., https://auth.bankid.no/auth/realms/prod)' + pattern: '^https://.*' + example: 'https://auth.bankid.no/auth/realms/prod' + +- keyname: bungie + display_name: Bungie + category: gaming + authorize_url: https://www.bungie.net/en/OAuth/Authorize + token_url: https://www.bungie.net/platform/app/oauth/token/ + pkce_enabled: 'no' + verification_endpoint: https://www.bungie.net/platform/User/GetBungieAccount/{membershipId}/254/ + help_url: https://github.com/Bungie-net/api/wiki/OAuth-Documentation + +- keyname: coinbase + display_name: Coinbase + category: finance + authorize_url: https://login.coinbase.com/oauth2/auth + token_url: https://login.coinbase.com/oauth2/token + pkce_enabled: 'no' + scopes: 'wallet:user:email wallet:user:read' + verification_endpoint: https://api.coinbase.com/v2/user + help_url: https://developers.coinbase.com/api/v2 + notes: 'This Provider template has a 2 hour access token to it. A refresh token is also returned.' + +- keyname: concept2 + display_name: Concept2 + category: fitness + authorize_url: https://log.concept2.com/oauth/authorize + token_url: https://log.concept2.com/oauth/access_token + pkce_enabled: 'no' + scopes: 'user:read,results:write' + verification_endpoint: https://log.concept2.com/api/users/me + help_url: https://log.concept2.com/developers/documentation/ + +- keyname: duende-identity-server6 + display_name: DuendeIdentityServer6 + category: other + authorize_url: ${connectionConfig.issuer}/connect/authorize + token_url: ${connectionConfig.issuer}/connect/token + pkce_enabled: 'yes' + help_url: https://docs.duendesoftware.com/identityserver/v6 + notes: 'Self-hosted IdentityServer. Demo server available at https://demo.duendesoftware.com/' + connection_config: + - field: issuer + title: 'IdentityServer URL' + description: 'Your IdentityServer base URL (e.g., https://demo.duendesoftware.com)' + pattern: '^https://.*' + example: 'https://demo.duendesoftware.com' + +- keyname: eveonline + display_name: EVE Online + category: gaming + authorize_url: https://login.eveonline.com/v2/oauth/authorize + token_url: https://login.eveonline.com/v2/oauth/token + pkce_enabled: 'no' + scopes: 'publicData' + verification_endpoint: https://login.eveonline.com/oauth/verify + help_url: https://developers.eveonline.com/blog/article/sso-to-authenticated-calls + notes: 'When creating your application, make sure to select `Authentication Only` as the connection type.' + +- keyname: faceit + display_name: FACEIT + category: gaming + authorize_url: https://accounts.faceit.com/accounts + token_url: https://api.faceit.com/auth/v1/oauth/token + pkce_enabled: 'no' + verification_endpoint: https://api.faceit.com/auth/v1/resources/userinfo + help_url: https://cdn.faceit.com/third_party/docs/FACEIT_Connect_3.0.pdf + notes: 'Grant type: Authorization Code Scopes to have basic infos (email, nickname, guid and avatar) : openid, email, profile' + +- keyname: foursquare + display_name: Foursquare + category: social + authorize_url: https://foursquare.com/oauth2/authenticate + token_url: https://foursquare.com/oauth2/access_token + pkce_enabled: 'no' + help_url: https://docs.foursquare.com/developer/reference/authentication + notes: 'Profile endpoint: https://api.foursquare.com/v2/users/self' + +- keyname: frontegg + display_name: Frontegg + category: identity + authorize_url: ${connectionConfig.issuer}/oauth/authorize + token_url: ${connectionConfig.issuer}/oauth/token + pkce_enabled: 'yes' + help_url: https://docs.frontegg.com/docs/admin-portal-profile + connection_config: + - field: issuer + title: 'Issuer URL' + description: 'Your Frontegg issuer URL (e.g., https://app-abc123.frontegg.com)' + pattern: '^https://.*' + example: 'https://app-abc123.frontegg.com' + +- keyname: okta + display_name: Okta + category: identity + authorize_url: https://${connectionConfig.subdomain}.okta.com/oauth2/v1/authorize + token_url: https://${connectionConfig.subdomain}.okta.com/oauth2/v1/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://[subdomain].okta.com/oauth2/v1/userinfo' + connection_config: + - field: subdomain + title: 'Subdomain' + description: 'Your Okta subdomain or instance hostname' + example: 'my-org.okta.com' + +- keyname: onelogin + display_name: OneLogin + category: identity + authorize_url: https://${connectionConfig.subdomain}.onelogin.com/oidc/auth + token_url: https://${connectionConfig.subdomain}.onelogin.com/oidc/token + pkce_enabled: 'no' + connection_config: + - field: subdomain + title: 'Subdomain' + description: 'Your OneLogin subdomain or instance hostname' + example: 'my-org.onelogin.com' + +- keyname: huggingface + display_name: Hugging Face + category: ai + authorize_url: https://huggingface.co/oauth/authorize + token_url: https://huggingface.co/oauth/token + pkce_enabled: 'yes' + scopes: 'openid profile email' + help_url: https://huggingface.co/docs/hub/en/oauth#creating-an-oauth-app + +- keyname: kakao + display_name: Kakao + category: social + authorize_url: https://kauth.kakao.com/oauth/authorize + token_url: https://kauth.kakao.com/oauth/token + pkce_enabled: 'no' + token_request_auth_method: 'body' + verification_endpoint: https://kapi.kakao.com/v2/user/me + help_url: https://developers.kakao.com/product/kakaoLogin + notes: 'Profile endpoint: https://kapi.kakao.com/v1/user/me' + +- keyname: line + display_name: LINE + category: communication + authorize_url: https://access.line.me/oauth2/v2.1/authorize + token_url: https://api.line.me/oauth2/v2.1/token + pkce_enabled: 'yes' + help_url: https://developers.line.biz/en/docs/line-login/integrate-line-login/ + notes: 'Profile endpoint: https://api.line.me/v2/profile' + +- keyname: mailru + display_name: Mail.ru + category: communication + authorize_url: https://oauth.mail.ru/login + token_url: https://oauth.mail.ru/token + pkce_enabled: 'no' + scopes: 'userinfo' + verification_endpoint: https://oauth.mail.ru/userinfo + help_url: https://o2.mail.ru/docs + +- keyname: mattermost + display_name: Mattermost + category: communication + authorize_url: ${connectionConfig.subdomain}/oauth/authorize + token_url: ${connectionConfig.subdomain}/oauth/access_token + pkce_enabled: 'no' + token_request_auth_method: 'body' + connection_config: + - field: subdomain + title: 'Mattermost URL' + description: 'Your Mattermost instance URL (e.g., https://mattermost.example.com)' + pattern: '^https://.*' + example: 'https://mattermost.example.com' + +- keyname: medium + display_name: Medium + category: social + authorize_url: https://medium.com/m/oauth/authorize + token_url: https://api.medium.com/v1/tokens + pkce_enabled: 'no' + scopes: 'basicProfile' + verification_endpoint: https://api.medium.com/v1/me + +- keyname: naver + display_name: Naver + category: social + authorize_url: https://nid.naver.com/oauth2.0/authorize + token_url: https://nid.naver.com/oauth2.0/token + pkce_enabled: 'no' + verification_endpoint: https://openapi.naver.com/v1/nid/me + help_url: https://developers.naver.com/docs/login/overview/overview.md + notes: 'Profile endpoint: https://openapi.naver.com/v1/nid/me' + +- keyname: netlify + display_name: Netlify + category: dev-tools + authorize_url: https://app.netlify.com/authorize + token_url: https://api.netlify.com/oauth/token + pkce_enabled: 'no' + verification_endpoint: https://api.netlify.com/api/v1/user + help_url: https://www.netlify.com/blog/2016/10/10/integrating-with-netlify-oauth2/ + notes: 'Profile endpoint: https://api.netlify.com/api/v1/user' + +- keyname: nextcloud + display_name: Nextcloud + category: file-storage + authorize_url: ${connectionConfig.subdomain}/apps/oauth2/authorize + token_url: ${connectionConfig.subdomain}/apps/oauth2/api/v1/token + pkce_enabled: 'no' + help_url: https://docs.nextcloud.com/server/latest/admin_manual/configuration_user/instruction_set_for_users.html#get-data-of-a-single-user + connection_config: + - field: subdomain + title: 'Nextcloud URL' + description: 'Your Nextcloud instance URL (e.g., https://cloud.example.com)' + pattern: '^https://.*' + example: 'https://cloud.example.com' + +- keyname: osso + display_name: Osso + category: identity + authorize_url: ${connectionConfig.issuer}/oauth/authorize + token_url: ${connectionConfig.issuer}/oauth/token + pkce_enabled: 'no' + help_url: https://ossoapp.com/blog/saml-vs-oauth + connection_config: + - field: issuer + title: 'Osso Instance URL' + description: 'Your Osso instance URL (e.g., https://osso.example.com)' + pattern: '^https://.*' + example: 'https://osso.example.com' + +- keyname: phantauth + display_name: PhantAuth + category: identity + authorize_url: https://phantauth.net/auth/authorize + token_url: https://phantauth.net/auth/token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://phantauth.net/auth/userinfo' + +- keyname: roblox + display_name: Roblox + category: gaming + authorize_url: https://apis.roblox.com/oauth/v1/authorize + token_url: https://apis.roblox.com/oauth/v1/token + pkce_enabled: 'yes' + scopes: 'openid profile' + help_url: https://create.roblox.com/docs/cloud/open-cloud/oauth2-overview + +- keyname: simplelogin + display_name: SimpleLogin + category: identity + authorize_url: https://app.simplelogin.io/oauth2/authorize + token_url: https://app.simplelogin.io/oauth2/token + pkce_enabled: 'yes' + help_url: https://simplelogin.io/developer/ + +- keyname: threads + display_name: Threads + category: social + authorize_url: https://threads.net/oauth/authorize + token_url: https://graph.threads.net/oauth/access_token + pkce_enabled: 'no' + scopes: 'threads_basic' + token_request_auth_method: 'body' + verification_endpoint: https://graph.threads.net/v1.0/me?fields=id,username,threads_profile_picture_url + help_url: https://developers.facebook.com/docs/threads/reference/user + notes: 'Email address is not returned by the Threads API.' + +- keyname: trakt + display_name: Trakt + category: entertainment + authorize_url: https://trakt.tv/oauth/authorize + token_url: https://api.trakt.tv/oauth/token + pkce_enabled: 'no' + help_url: https://trakt.docs.apiary.io/#reference/authentication-oauth + notes: 'Profile endpoint: https://api-v2launch.trakt.tv/users/me' + +- keyname: twitter + display_name: Twitter + category: social + authorize_url: https://x.com/i/oauth2/authorize + token_url: https://api.x.com/2/oauth2/token + pkce_enabled: 'yes' + scopes: 'users.read tweet.read offline.access' + verification_endpoint: https://api.x.com/2/users/me?user.fields=profile_image_url + help_url: https://developer.x.com/en/docs/twitter-api/users/lookup/api-reference/get-users-me + +- keyname: vipps + display_name: Vipps + category: finance + authorize_url: https://api.vipps.no/access-management-1.0/access/oauth2/auth + token_url: https://api.vipps.no/access-management-1.0/access/oauth2/token + pkce_enabled: 'yes' + scopes: 'openid name email' + help_url: https://developer.vippsmobilepay.com/api/userinfo/#operation/userinfoAuthorizationCode + +- keyname: vk + display_name: VK + category: social + authorize_url: https://oauth.vk.com/authorize + token_url: https://oauth.vk.com/access_token + pkce_enabled: 'no' + notes: 'Profile endpoint: https://api.vk.com/method/users.get' + +- keyname: wikimedia + display_name: Wikimedia + category: education + authorize_url: https://meta.wikimedia.org/w/rest.php/oauth2/authorize + token_url: https://meta.wikimedia.org/w/rest.php/oauth2/access_token + pkce_enabled: 'no' + verification_endpoint: https://meta.wikimedia.org/w/rest.php/oauth2/resource/profile + help_url: https://www.mediawiki.org/wiki/Extension:OAuth + +- keyname: workos + display_name: WorkOS + category: identity + authorize_url: https://api.workos.com/sso/authorize + token_url: https://api.workos.com/sso/token + pkce_enabled: 'no' + token_request_auth_method: 'body' + help_url: https://workos.com/docs/reference/sso + notes: 'Profile endpoint: https://api.workos.com/sso/profile'