PixieBrix Docs
CommunityTemplates
  • Welcome to PixieBrix!
  • Quick Start
    • Productivity Enthusiasts
    • Mod Developer
    • Team Member
    • Enterprise Admin
  • Activating Mods
    • Linking Your PixieBrix Account
    • Using the Marketplace
      • Finding Mods
      • Activating From the Marketplace
    • Activating Your Assigned Mods
    • Updating Mods
    • Troubleshooting
  • Developing Mods
    • Building Your First Mod
    • Developer Concepts
      • Types of Mods
        • Context Menu Item
        • Button
          • Troubleshooting Buttons
        • Sidebar Panel
        • Trigger
          • Working with Custom Events
        • Quick Bar Action
        • What Are URL Match Patterns?
      • Text Template Guide
        • Basic Text Templates
        • Transforming Data with Filters
        • Writing Conditional Statements
        • Template Examples
      • Using Bricks
        • Brick Input Data Types
        • Bricks for Scraping Data
          • Retrieving Attributes from Elements
        • Bricks for Interacting with the DOM
        • Bricks for AI
          • Passing Custom Data to an LLM
      • Data Context
        • Types of Variables
        • Using Mod Variables
        • Using Page State (Advanced)
        • Referencing Variables
      • User Input
        • Show a Modal or Sidebar Form
        • Prompt for Input
      • Working With APIs
        • API Providers
        • Encoding URL Parts
        • Selecting and Transforming API Results
      • Working with Markdown
      • Control Flow
        • Conditional Field on Bricks
        • Control Flow Bricks
          • When to Use Control Flow Bricks
          • Control Flow Brick Output
          • Raising Exceptions/Errors
          • FAQs
      • Transforming Data
        • Using JQ in PixieBrix
        • Using JavaScript in PixieBrix
      • Building Interfaces
        • Understanding the Preview Panel
        • Styling Elements
        • Adding Advanced Elements
        • Custom Themes/CSS
      • Advanced: Brick Runtime
    • Customizing Existing Mods
    • Sharing Mods
      • Packaging a Mod
      • Exposing Activation-Time Mod Options
      • Sharing a Mod With Your Team
      • Updating Published Mods
    • Troubleshooting
    • Mod Development Best Practices
    • Advanced: Workshop
  • Platform Overview
    • Page Editor
      • Open the Page Editor
      • Page Editor Components
        • Mod Listing Panel
        • Brick Actions Panel
        • Brick Configuration Panel
        • Data Panel
    • Admin Console
      • Campaigns
    • Extension Console
  • Managing Teams
    • Creating a Team
    • Inviting Members
    • Access Control
      • Roles
      • Groups
    • Managing Team Integrations
    • Assigning Mods
    • Billing
    • Advanced: Isolating Development, Test, and Production Environments
  • Deploying Mods
    • Deployment Keys
  • Integrations
    • Configuring Integrations
    • Integration Scenarios
    • Embed Web Apps via IFrames
    • Integrate with Desktop Apps via Custom URL Schemes
    • Airtable
    • Atlassian
    • Automation Anywhere
      • Configure Automation Anywhere Integration in PixieBrix
      • Embedding the Automation Co-Pilot
      • Running AA Bots via Control Room
      • Creating AARI Requests
      • Enhancing AARI Table Fields
      • Enhancing AARI Forms
      • AARI Extensions Enterprise IT Setup Guide
        • Point PixieBrix Extension to Staging AuthConfig App
      • Create a Control Room Certificate on Windows
    • Google Drive
      • Creating Google Drive Integration
      • Google Drive Bricks
      • Migrating from Google Sheet to Google Drive Integration
      • Reactivating Your Google Sheet Mods
      • Troubleshooting Google Integration Errors
      • Sheety: Sharing Google Sheets without Google Workspace
      • [LEGACY] Configure Google Sheets Integration
      • [LEGACY] Adding a Google Sheet to Mod Input
    • Guru
    • Hunter.io
    • HTTP Basic Authentication
    • Microsoft
      • Connect to Custom Azure Applications/APIs
      • Add a Power BI chart to the Sidebar
      • Microsoft Power Automate
      • Microsoft Office
        • Microsoft OneDrive / Files
        • Microsoft Excel
        • Microsoft Sharepoint
        • Microsoft Teams
        • FAQs & Troubleshooting
    • Notion
      • Public (OAuth2)
      • Internal (API Token)
    • OAuth2 Client Credentials
    • Ollama
    • OpenAI/ChatGPT
    • Pipedrive
    • Retool
      • Embed a Retool App
      • Trigger Retool Workflows
    • Robocorp Control Room Integration
    • Salesforce
    • SerpAPI
    • ServiceNow
    • Slack
    • Streamlit
    • Trello
      • Configure Trello integration
      • Find board and list IDs in Trello
    • UiPath
      • Running unattended bots via UiPath Cloud Orchestrator
      • Embed a UiPath App
      • Running local bots via UiPath Assistant
    • Val Town
    • Zapier
    • Zendesk
    • Advanced: Custom Integrations
  • Storing Data with Team Databases
  • Enterprise IT Setup
    • Authentication
      • Enabling Login with Microsoft
      • Enabling Login with Google
      • Setting Up SAML/SSO
    • Browser Extension Installation and Configuration
      • Browser Extension Installation Policy
        • Google Workspace Policy
        • Windows Group Policy/ADMX
        • Windows Registry
        • Citrix Profile Configuration
        • Advanced: Create a Windows Installer EXE
      • Browser Extension Configuration Policy
        • Extension Authentication Configuration
        • Microsoft Edge Mini Menu Configuration
        • Microphone and Audio Capture Configuration
        • Extension Logo Configuration
        • Managed Storage Schema
      • Browser Extension Security
    • Network/Email Firewall Configuration
    • Custom Branding and Themes
    • Security and Compliance
    • Performance
    • Version Control and Backups
    • Web Application Platform Configuration
    • Enterprise Troubleshooting
  • Developer API
    • Service Accounts
    • Making an API Request
    • Team Management APIs
    • Package Management APIs
    • Deployment APIs
    • Database APIs
    • Health Check APIs
    • OpenAPI Specification
    • Deprecated Resources
  • How To
    • Installing the PixieBrix Chrome Browser Extension
    • Changing the Quick Bar Shortcut
    • Pinning the Chrome Extension
    • Updating the Browser Extension
    • Installing a PixieBrix Pre-Release Build
    • Editing Pages with iFrames
    • Adding bricks to mods
    • Opening the PixieBrix Sidebar
    • Troubleshooting
      • Troubleshooting Bad API Requests
      • Troubleshooting Network Errors
      • Troubleshooting IndexedDB Errors
      • Troubleshooting Browser Extension Performance and Crashes
      • Troubleshooting extension corruption errors
  • Release Notes
    • 🏗️Release 2.3.0
    • ✅Release 2.2.10
    • 📜Release Notes Archive
      • ✅Release 2.2.9
      • ✅Release 2.2.8
      • ✅Release 2.2.7
      • ✅Release 2.2.6
      • ✅Release 2.2.5
      • ✅Release 2.2.4
      • ✅Release 2.2.3
      • ✅Release 2.2.2
      • ✅Release 2.2.1
      • ✅Release 2.2.0
      • ✅Release 2.1.7
      • ❌Release 2.1.6
      • ✅Release 2.1.5
      • ✅Release 2.1.4 (Hotfix)
      • ✅Release 2.1.3
      • ✅Release 2.1.2
      • ✅Release 2.1.1
      • ✅Release 2.1.0
      • ✅Release 2.0.7
      • ✅Release 2.0.6
      • ✅Release 2.0.5
      • ✅Release 2.0.4
      • ✅Release 2.0.3
      • ✅Release 2.0.2
      • ✅Release 2.0.1 (Hotfix)
      • ✅Release 2.0.0
      • PixieBrix Browser Extension 2.0.0 Migration Guide
      • ✅Release 1.8.14
      • ✅Release 1.8.13
      • ✅Release 1.8.12
      • ✅Release 1.8.11
      • ✅Release 1.8.10
      • ✅Release 1.8.9
      • ✅Release 1.8.8
      • ✅Release 1.8.7
      • ✅Release 1.8.6
      • ✅Release 1.8.5
      • ✅Release 1.8.4
      • ✅Release 1.8.3
      • ✅Release 1.8.2
      • ✅Release 1.8.1
      • ✅Release 1.8.0
      • ✅Release 1.7.41
      • ✅Release 1.7.40
      • ✅Release 1.7.39
      • ✅Release 1.7.38
      • 🚫Release 1.7.37
      • ✅Release 1.7.36
      • ✅Release 1.7.35
      • ✅Release 1.7.34
      • ✅Release 1.7.33
      • ✅Release 1.7.32
      • 🚫Release 1.7.31
      • ✅Release 1.7.30
      • ✅Release 1.7.29
      • ✅Release 1.7.28
      • ✅Release 1.7.27
      • ✅Release 1.7.26
      • ✅Release 1.7.25
      • ✅Release 1.7.24
      • ✅Release 1.7.23
      • ✅Release 1.7.22
      • ✅Release 1.7.21
      • ✅Release 1.7.20
      • ✅Release 1.7.19
      • ✅Release 1.7.18
      • ✅Release 1.7.17
      • ✅Release 1.7.16
      • ✅Release 1.7.15
      • ✅Release 1.7.14
      • ✅Release 1.7.13
      • ✅Release 1.7.12
      • ✅Release 1.7.11
      • ✅Release 1.7.10
      • ✅Release 1.7.9
      • ✅Release 1.7.8
      • ✅Release 1.7.7
      • ✅Release 1.7.6
      • 🚫Release 1.7.5
      • ✅Release 1.7.4
      • ✅Release 1.7.3
      • ✅Release 1.7.2
      • ✅Release 1.7.1
      • ✅Release 1.7.0
      • ✅Release 1.6.4
      • ✅Release 1.6.3
      • ✅Release 1.6.2
      • ✅Release 1.6.1
      • ✅Release 1.6.0
      • ✅Release 1.5.11
      • ✅Release 1.5.10
      • ✅Release 1.5.9
      • ✅Release 1.5.8
      • ✅Release 1.5.7
      • ✅Release 1.5.6
      • ✅Release 1.5.5
      • ✅Release 1.5.4
      • ✅Release 1.5.3
      • ✅Release 1.5.2
      • ✅Release 1.5.1
      • ✅Release 1.5.0
      • ✅Release 1.4.12
      • ✅Release 1.4.11
      • ✅Release 1.4.10
      • ✅Release 1.4.9
      • ✅Release 1.4.8
      • ✅Release 1.4.7
      • ✅Release 1.4.6
      • 🚫Release 1.4.5
      • ✅Release 1.4.4
      • 🚫Release 1.4.3
      • 🚫Release 1.4.2
      • ✅Release 1.4.1
      • ✅Release 1.4.0
      • 🚫Release 1.3.2
      • ✅Release 1.3.1
      • ✅Release 1.3.0
      • ✅Release 1.2.11
      • ✅Release 1.2.10
      • ✅Release 1.2.9
      • ✅Release 1.2.8
      • ✅Release 1.2.7
      • ✅Release 1.2.5
      • ✅Release 1.2.4
      • ✅Release 1.2.3
      • ✅Release 1.2.2
      • ✅Release 1.2.1
      • ✅Release 1.2.0
      • ✅Release 1.1.12
      • ✅Release 1.1.11
      • ✅Release 1.1.10
      • ✅Release 1.1.9
      • ✅Release 1.1.8
      • ✅Release: 1.1.7
      • ✅Release: 1.1.6
      • ✅Release: 1.1.5
      • ✅Release: 1.1.4
      • ✅Release: 1.1.3
      • ✅Release: 1.1.2
      • ✅Release: 1.1.1
      • ✅Release: 1.1.0
      • ✅Release: 1.0.3
      • ✅Release: 1.0.2
      • ✅Release: 1.0.1
      • ✅Release: 1.0.0
      • ✅Release: 0.2.2
      • ✅Release: 0.2.1
  • Tutorials
    • Developer Tutorials
      • Beginner
        • Search Yelp Reviews from OpenTable
        • Right-click Currency Conversion
        • Web Highlighter Tutorial
        • Trello Status Sidebar
        • Right-click Google Scholar Search
        • Google Dorking
        • Tweet a Link
        • Ask AI To Generate a LinkedIn Connection Request
        • How to Customize the AI Rate and Fix Mod
        • Right-click Translate Language
        • Basic Translation Tutorial
        • AI Bot Sidebar
        • Search and Highlight Words on a Page
      • Intermediate
        • Create a status nudge button in Github
Powered by GitBook
On this page
  • Example Integration Definition for Giphy
  • Integration Definition Schema
  • Input Schema
  • Authentication Definition
  • Origin Allowlist: isAvailable
  • Non-Interactive OAuth2 Token Refresh
  • Integration Definition Examples
  • Dynamic Base URL to support multiple environments
  • OAuth2 Client Credentials

Was this helpful?

  1. Integrations

Advanced: Custom Integrations

PreviousZendeskNextStoring Data with Team Databases

Last updated 2 months ago

Was this helpful?

If you need to create an integration that does not exist in PixieBrix, use these docs. This can be particularly helpful for handling authorization for HTTP requests.

Integrations instruct PixieBrix how to authenticate requests to 3rd-party APIs and services.

When you activate or deploy a mod, you can choose which integration configuration to use. By creating a PixieBrix Team Account, you can share integrations configurations with your team

PixieBrix supports the following authentication methods for user-defined integrations:

  • API Key/Shared Secret

  • HTTP Basic Auth

  • Token

  • OAuth2 Implicit Grant

  • OAuth2 PKCE

  • OAuth2 Client Credentials Grant

To create your own integration, you'll need to go to the Workshop section of the and create a new brick.

Example Integration Definition for Giphy

# PixieBrix Runtime Directive 
apiVersion: v3

# Package Metadata
kind: service
metadata:
  id: "@pixies/giphy/giphy-service"
  version: 1.0.0
  name: GIPHY API
  description: Integration for GIPHY API
  url: "https://api.giphy.com/*"

# Origin Allowlist
isAvailable:
    matchPatterns: "https://api.giphy.com/*"

# JSON Schema for configuration options
inputSchema:
  $schema: "https://json-schema.org/draft/2019-09/schema#"
  type: object
  properties:
    token:
      $ref: "https://app.pixiebrix.com/schemas/key#"
      description: "Your GIPHY token, can be found under https://developers.giphy.com/dashboard/?"
  required:
    - token

# Authentication definition, supports Mustache templates
authentication:
  headers:
    Accept: "application/json"
  params:
    api_key: "{{{token}}}"

Integration Definition Schema

Input Schema

It must be type: object and contain only primitive properties (i.e., string, boolean, number)

inputSchema:
  type: object
  properties:
    requiredOption:
      type: string
    anotherOption:
      type: string
  required:
    - requiredOption

Marking Secrets/Credentials

Secrets (e.g., API keys and tokens) can be marked using $ref: https://app.pixiebrix.com/schemas/key#

Secrets are not made available to bricks. And, by default, secrets from team integrations configurations are not shared with team members.

Here is an example of marking an API key:

inputSchema:
  type: object
  properties:
    apiKey:
      title: API Key
      $ref: https://app.pixiebrix.com/schemas/key#
      description: Your API key
  required:
    - apiKey

Authentication Definition

The authentication section defines how to authenticate requests made to the service, given a configuration.

Mustache Templates

By default, Mustache automatically escapes special characters. Use three braces {{{ to disable auto-escaping for an expression.

For example, the @pixiebrix/api has the following authentication definition to configure the Authorization header:

inputSchema:
  type: object
  properties:
    apiKey:
      $ref: https://app.pixiebrix.com/schemas/key#
  required:
    - apiKey
authentication:
  headers:
    Authorization: "Token {{{apiKey}}}"

authentication.baseURL

The base URL to make requests against. Use for services where the URL host or path varies by account.

If a baseURL is configured, relative URLs in requests (e.g., made by the HTTP Request Brick) using the service will use the configured baseURL. The constructed absolute URL is validated against the isAvailable configuration (see below)

baseURL: https://{{ domain }}.service.com/

authentication.params

HTTP parameters to include in the request. The arguments are automatically URL encoded

params:
  key: "{{{ apiKey }}}"

authentication.headers

headers:
  # key is a secret in the configuration
  x-rapidapi-key: "{{key}}"
  x-rapidapi-host: "{{host}}"
  useQueryString: "true"

authentication.basic

The basic section defines the username and password for HTTP Basic Auth. PixieBrix automatically encodes the secret.

basic:
  username: "{{{username}}}"
  password: "{{{password}}}"

authentication.token

The token section instructs PixieBrix how to exchange a username/password for a token to use for API calls:

token:
    # The URL to request a token
    url: "{{{ controlRoomUrl }}}/v1/authentication"
    # The properties to pass in the POST JSON payload
    data:
      username: "{{{ username }}}"
      password: "{{{ password }}}"
# headers and params can reference properties returned from the token endpoint
headers:
    X-Authorization: "{{{ token }}}"

authentication.oauth2

OAuth2 APIs require the user authenticate with the provider to acquire a Json Web Token (JWT). The token is then used for requests to the APIs.

OAuth2 PKCE

OAuth2 PKCE is the preferred method for authentication of Single-Page Application and Native Clients that cannot securely store a secret key.

To use OAuth2 PKCE, provide the authorization/token URLs, client id, and code challenge method (currently only S256 is supported):

oauth2:
    authorizeUrl: "https://cloud.uipath.com/identity_/connect/authorize"
    tokenUrl: "https://cloud.uipath.com/identity_/connect/token"
    code_challenge_method: S256
    scope: "{{{ scopes }}}"
    client_id: "{{{ appId }}}"

Origin Allowlist: isAvailable

The Origin Allowlist currently does not support Mustache Templates

The isAvailable section defines URL patterns that the integration is allowed to authenticate.

Allowlisting origins prevents authentication credentials from accidentally being sent to another service.

See the Common Configuration Sections page for more details on isAvailable and matchPatterns entries

Non-Interactive OAuth2 Token Refresh

If the device's token is expired, PixieBrix first attempts to non-interactively attempt to retrieve a new token.

If the service's authentication flow includes Javascript/front-end redirects instead of server-redirects, provide a nonInteractive section:

nonInteractive:
    # True abort on page load (default). False will wait for Javascript redirect
    abortOnLoad: true
    # Timeout in milliseconds. Only used if abortOnLoad is false
    timeoutMs: 1000

Integration Definition Examples

Dynamic Base URL to support multiple environments

Suppose you have an API served in multiple environments:

  • my-api-dev.example.com

  • my-api-test.example.com

  • my-api-prod.example.com

To support multiple environments with the same mod, expose an integration input property. Then, use the input property to construct the authentication.baseURL directive. PixieBrix makes requests to relative URLs relative to the active integration's baseURL.

# PixieBrix Runtime Directive 
apiVersion: v3

# Package Metadata
kind: service
metadata:
  id: "@pixies/docs/baseurl-example"
  version: 1.0.0
  name: My API
  description: My API that allows varying the base URL

# JSON Schema for configuration options
inputSchema:
  $schema: "https://json-schema.org/draft/2019-09/schema#"
  type: object
  properties:
    origin:
      type: string
      format: uri
      description: The base URL 
      # To show a dropdown, you could use an enum
      # enum:
      #   - https://my-api-dev.example.com
      #   - https://my-api-test.example.com
      #   - https://my-api-prod.example.com
    apiKey:
      $ref: "https://app.pixiebrix.com/schemas/key#"
      description: Your API Key
  required:
    - apiKey
    - origin

# Authentication definition, supports Mustache templates
authentication:
  baseURL: "{{{ origin }}}"
  headers:
    Accept: "application/json"
  params:
    api_key: "{{{ apiKey }}}"

OAuth2 Client Credentials

The following is the definition for the generic OAuth2 Client Credentials configuration used by PixieBrix. See OAuth2 Client Credentials for information on configuring in the Admin Console.

apiVersion: v3
kind: service
metadata:
  id: "@pixies/integrations/oauth2-client-credentials"
  version: 1.0.1
  name: OAuth2 Client Credentials
  description: A generic OAuth2 client credentials integration definition
inputSchema:
  $schema: "https://json-schema.org/draft/2019-09/schema#"
  type: object
  properties:
    clientId:
      title: "Client (application) ID"
      description: The client (application) ID
      type: string
    clientSecret:
      title: "Client Secret"
      description: The client secret
      $ref: "https://app.pixiebrix.com/schemas/key#"
    tokenUrl:
      title: Access Token URL
      type: string
      format: uri
      description: The URL to generate an access token
    scope:
      title: Scope
      description: One or more scopes to request, separated by spaces
      type: string
  required:
    - clientId
    - clientSecret
    - tokenUrl
uiSchema:
  "ui:order":
    - clientId
    - clientSecret
    - tokenUrl
    - scope
    - "*"
authentication:
  oauth2:
    grantType: "client_credentials"
    tokenUrl: "{{{ tokenUrl }}}"
    scope: "{{{ scope }}}"
    client_id: "{{{ clientId }}}"
    client_secret: "{{{ clientSecret }}}"
  headers:
    Authorization: "Bearer {{{ access_token }}}"

The following is an example integration definition for the :

The inputSchema section defines a for the configuration options to expose for the integration.

The authentication section can reference any of the properties specified in the inputSchema, including secrets. The authentication section supports .

HTTP headers to include in the request. Example from our service definition:

See the Chrome Documentation for .

Giphy API
JSON Schema
the Mustache template language
Rapid API
valid match pattern syntax
Extension Console