Inference Logoinference.sh

Integrations

Integrations allow your app to access external services (Google Sheets, Drive, etc.) on behalf of users through OAuth.


Declaring Integrations

Define in inf.yml:

yaml
1integrations:2  - key: google.sheets3    description: Access to read/write Google Sheets4    optional: false5    6  - key: google.drive7    description: Access to Google Drive files8    optional: true

Properties

PropertyTypeDescription
keystringIntegration identifier
descriptionstringShown to users
optionalbooleanIf false, app won't run without it

Available Integrations

List all available integrations:

bash
1infsh integrations list

Common Integrations

KeyDescription
google.sheetsRead/write Google Sheets
google.sheets.readonlyRead-only Sheets access
google.driveGoogle Drive files
google.saService account access

Accessing Credentials

OAuth Integrations

python
1import os2import json3 4class App(BaseApp):5    async def setup(self, config):6        creds_json = os.environ.get("GOOGLE_OAUTH_CREDENTIALS")7        if creds_json:8            self.credentials = json.loads(creds_json)

Service Account

python
1from google.oauth2 import service_account2 3sa_json = os.environ.get("GOOGLE_SA_CREDENTIALS")4if sa_json:5    self.credentials = service_account.Credentials.from_service_account_info(6        json.loads(sa_json)7    )

Secrets vs Integrations

FeatureSecretsIntegrations
User providesRaw value (API key)OAuth authorization
RefreshManualAutomatic
Scope controlNoneFine-grained
Best forAPI keysOAuth services

Best Practices

  1. Request minimal scopes - use readonly if you only read
  2. Clear descriptions - explain why access is needed
  3. Handle missing gracefully - check if optional integrations exist
  4. Test without - ensure app works without optional integrations

Next

Troubleshooting - Common issues and solutions

we use cookies

we use cookies to ensure you get the best experience on our website. for more information on how we use cookies, please see our cookie policy.

by clicking "accept", you agree to our use of cookies.
learn more.