import { Integration } from "./types";
export interface IntegrationConfig {
name: string;
apiUrl: string;
regex: string;
icon: string;
docsUrl: string;
openApiUrl?: string;
openApiSchema?: string;
preferredAuthType?: "oauth" | "apikey" | "none";
oauth?: {
authUrl?: string;
tokenUrl?: string;
scopes?: string;
client_id?: string; // Public client ID (non-sensitive, can be in template)
grant_type?: "authorization_code" | "client_credentials";
};
keywords?: string[];
}
export const integrations: Record<string, IntegrationConfig> = {
// Important: keys and names are the same and do not change without updating the integration and integration_details table with the template entries
postgres: {
name: "postgres",
apiUrl: "postgres://<<username>>:<<password>>@<<host>>:<<port>>/<<database>>",
regex: "^.*(postgres|postgresql).*$",
icon: "postgresql",
docsUrl: "",
preferredAuthType: "apikey",
keywords: ["database", "sql", "postgres", "postgresql", "api key", "tables"],
},
stripe: {
name: "stripe",
apiUrl: "https://api.stripe.com",
regex: "^.*stripe.*$",
icon: "stripe",
docsUrl: "https://docs.stripe.com/api",
openApiUrl: "https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.json",
preferredAuthType: "apikey",
keywords: [
"customers",
"charges",
"payment_intents",
"products",
"prices",
"subscriptions",
"invoices",
"balance_transactions",
"refunds",
"checkout_sessions",
"line_items",
"payment_methods",
"issuers",
"plans",
"setup_intents",
"payouts",
"transfers",
"balance",
"users",
"emails",
],
},
shopify: {
name: "shopify",
apiUrl: "https://admin.shopify.com",
regex: "^.*(shopify|myshopify).*$",
icon: "shopify",
docsUrl: "https://shopify.dev/docs/api",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://{shop}.myshopify.com/admin/oauth/authorize",
tokenUrl: "https://{shop}.myshopify.com/admin/oauth/access_token",
scopes:
"read_products write_products read_orders write_orders read_customers write_customers read_inventory write_inventory read_fulfillments write_fulfillments read_shipping write_shipping",
},
keywords: [
"products",
"variants",
"collections",
"customers",
"orders",
"fulfillments",
"inventory_items",
"inventory_levels",
"metafields",
"price_rules",
"discount_codes",
"shipping_zones",
"locations",
"gift_cards",
"product_images",
],
},
hubspot: {
name: "hubspot",
apiUrl: "https://api.hubapi.com/crm/v3",
regex: "^.*(hubapi|hubspot).*$",
icon: "hubspot",
docsUrl: "https://developers.hubspot.com/docs/api/overview",
openApiUrl: "https://api.hubspot.com/public/api/spec/v1/specs",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://app.hubspot.com/oauth/authorize",
tokenUrl: "https://api.hubapi.com/oauth/v1/token",
scopes:
"crm.objects.contacts.read crm.objects.contacts.write crm.objects.companies.read crm.objects.companies.write crm.objects.deals.read crm.objects.deals.write crm.objects.owners.read forms forms-uploaded-files files sales-email-read crm.objects.quotes.read crm.objects.quotes.write",
},
keywords: [
"contacts",
"companies",
"deals",
"tickets",
"line_items",
"products",
"associations",
"memberships",
],
},
attio: {
name: "attio",
apiUrl: "https://api.attio.com/v2/",
regex: "^.*attio.*$",
icon: "attio",
docsUrl: "https://docs.attio.com/rest-api/overview",
openApiUrl: "https://api.attio.com/openapi/api",
preferredAuthType: "apikey",
keywords: [
"people",
"objects",
"records",
"lists",
"entries",
"workspace_members",
"notes",
"tasks",
"threads",
"comments",
"sorts",
"api_slug",
"attribute_type",
"record_id",
"workspace_id",
"object_id",
],
},
twilio: {
name: "twilio",
apiUrl: "https://api.twilio.com",
regex: "^.*twilio.*$",
icon: "twilio",
docsUrl: "https://www.twilio.com/docs/api",
openApiUrl:
"https://raw.githubusercontent.com/twilio/twilio-oai/refs/heads/main/spec/json/twilio_api_v2010.json",
preferredAuthType: "apikey",
keywords: [
"Messages",
"Media",
"MessageFeedback",
"Calls",
"Accounts",
"APIKeys",
"Addresses",
"UsageRecords",
"CallFeedback",
"CredentialsList",
"TaskRouter_Workspaces",
"TaskRouter_Tasks",
"TaskRouter_Workers",
"TaskRouter_Activities",
"MessagingServices",
],
},
sendgrid: {
name: "sendgrid",
apiUrl: "https://api.sendgrid.com",
regex: "^.*sendgrid.*$",
icon: "sendgrid",
docsUrl: "https://www.twilio.com/docs/sendgrid/api-reference",
openApiUrl: "https://raw.githubusercontent.com/sendgrid/sendgrid-oai/main/oai.json",
preferredAuthType: "apikey",
keywords: [
"mail_send",
"templates",
"campaigns",
"marketing_contacts",
"marketing_lists",
"suppression_groups",
"global_suppressions",
"asm_suppressions",
"subusers",
"stats",
"categories",
"whitelabel",
"ips",
"access_settings",
],
},
github: {
name: "github",
apiUrl: "https://api.github.com",
regex: "^.*github.*$",
icon: "github",
docsUrl: "https://docs.github.com/en/rest",
openApiUrl:
"https://raw.githubusercontent.com/github/rest-api-description/main/descriptions/api.github.com/api.github.com.json",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://github.com/login/oauth/authorize",
tokenUrl: "https://github.com/login/oauth/access_token",
scopes:
"repo user admin:org workflow gist notifications delete_repo write:packages read:packages",
},
keywords: [
"repositories",
"issues",
"pull_requests",
"commits",
"branches",
"tags",
"releases",
"deployments",
"check_runs",
"actions_artifacts",
"organizations",
"packages",
"collaborators",
"gists",
"milestones",
],
},
gitlab: {
name: "gitlab",
apiUrl: "https://api.gitlab.com",
regex: "^.*gitlab.*$",
icon: "gitlab",
docsUrl: "https://docs.gitlab.com/api/rest/",
openApiUrl: "https://gitlab.com/gitlab-org/gitlab/-/raw/master/doc/api/openapi/openapi.yaml",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://gitlab.com/oauth/authorize",
tokenUrl: "https://gitlab.com/oauth/token",
scopes: "api",
},
keywords: [
"projects",
"repositories",
"issues",
"pull_requests",
"commits",
"branches",
"tags",
"releases",
"deployments",
"check_runs",
"actions_artifacts",
"organizations",
"packages",
"collaborators",
"gists",
"milestones",
],
},
bitbucket: {
name: "bitbucket",
apiUrl: "https://api.bitbucket.org",
regex: "^.*bitbucket.*$",
icon: "bitbucket",
docsUrl: "https://developer.atlassian.com/cloud/bitbucket/rest",
openApiUrl: "https://api.bitbucket.org/swagger.json",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://bitbucket.org/site/oauth2/authorize",
tokenUrl: "https://bitbucket.org/site/oauth2/access_token",
scopes: "repository:admin account:write team:write webhook",
},
keywords: [
"repositories",
"projects",
"commits",
"branches",
"pullrequests",
"downloads",
"issues",
"pipelines",
"branchRestrictions",
"components",
"milestones",
"refs",
"hooks",
"forks",
"user",
],
},
slack: {
name: "slack",
apiUrl: "https://slack.com/api",
regex: "^.*slack.*$",
icon: "slack",
docsUrl: "https://docs.slack.dev/apis/web-api/",
openApiUrl:
"https://raw.githubusercontent.com/slackapi/slack-api-specs/master/web-api/slack_web_openapi_v2.json",
preferredAuthType: "oauth",
oauth: {
grant_type: "authorization_code",
authUrl: "https://slack.com/oauth/v2/authorize",
tokenUrl: "https://slack.com/api/oauth.v2.access",
scopes:
"channels:read channels:history chat:write chat:write.public users:read users:read.email files:read files:write groups:read im:read im:write mpim:read",
client_id: "7626585708593.9087382641312",
},
keywords: [
"channel",
"conversation",
"user",
"file",
"event",
"message",
"workflow_step",
"workflow_published",
"workflow_step_execute",
"usergroup",
"im",
"mpim",
"group",
"check_run",
"apps_permissions_resource",
],
},
airtable: {
name: "airtable",
apiUrl: "https://api.airtable.com",
regex: "^.*airtable.*$",
icon: "airtable",
docsUrl: "https://airtable.com/developers/web/api",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://airtable.com/oauth2/v1/authorize",
tokenUrl: "https://airtable.com/oauth2/v1/token",
scopes:
"data.records:read data.records:write data.recordComments:read data.recordComments:write schema.bases:read schema.bases:write webhook:manage user.email:read",
},
keywords: [
"bases",
"tables",
"records",
"fields",
"views",
"formulas",
"attachments",
"comments",
"collaborators",
"metadata",
"schemas",
"api key",
"key",
],
},
gmail: {
name: "gmail",
apiUrl: "https://gmail.googleapis.com/gmail/v1",
regex: "^.*(gmail\\.googleapis|developers\\.google\\.com/gmail|mail\\.google).*$",
icon: "gmail",
docsUrl: "https://developers.google.com/gmail/api/reference/rest",
openApiUrl: "https://www.googleapis.com/discovery/v1/apis/gmail/v1/rest",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
tokenUrl: "https://oauth2.googleapis.com/token",
scopes: "https://mail.google.com/",
},
keywords: [
"messages",
"threads",
"labels",
"drafts",
"send",
"attachments",
"history",
"filters",
"settings",
"forwarding",
"inbox",
"profile",
"oauth",
],
},
googleDrive: {
name: "googleDrive",
apiUrl: "https://www.googleapis.com/drive/v3",
regex: "^.*(googleapis\\.com/drive|developers\\.google\\.com/drive|drive\\.google).*$",
icon: "googledrive",
docsUrl: "https://developers.google.com/drive/api/v3/reference",
openApiUrl: "https://www.googleapis.com/discovery/v1/apis/drive/v3/rest",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
tokenUrl: "https://oauth2.googleapis.com/token",
scopes: "https://www.googleapis.com/auth/drive",
},
keywords: [
"files",
"folders",
"permissions",
"sharing",
"comments",
"revisions",
"changes",
"uploads",
"downloads",
"metadata",
"teamdrives",
"export",
"copy",
"move",
"oauth",
],
},
googleCalendar: {
name: "googleCalendar",
apiUrl: "https://www.googleapis.com/calendar/v3",
regex: "^.*(googleapis\\.com/calendar|developers\\.google\\.com/calendar|calendar\\.google).*$",
icon: "googlecalendar",
docsUrl: "https://developers.google.com/calendar/api/v3/reference",
openApiUrl: "https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
tokenUrl: "https://oauth2.googleapis.com/token",
scopes: "https://www.googleapis.com/auth/calendar",
},
keywords: [
"events",
"calendars",
"attendees",
"reminders",
"recurring",
"availability",
"free busy",
"settings",
"acl",
"colors",
"notifications",
"timezone",
"quick add",
"oauth",
],
},
googleSheets: {
name: "googleSheets",
apiUrl: "https://sheets.googleapis.com/v4",
regex: "^.*(sheets\\.googleapis|developers\\.google\\.com/sheets|sheets\\.google).*$",
icon: "googlesheets",
docsUrl: "https://developers.google.com/sheets/api/reference/rest",
openApiUrl: "https://www.googleapis.com/discovery/v1/apis/sheets/v4/rest",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
tokenUrl: "https://oauth2.googleapis.com/token",
scopes: "https://www.googleapis.com/auth/spreadsheets https://www.googleapis.com/auth/drive",
},
keywords: [
"spreadsheets",
"sheets",
"cells",
"ranges",
"values",
"formulas",
"formatting",
"charts",
"pivot tables",
"named ranges",
"protected ranges",
"batch update",
"append",
"oauth",
],
},
googleAnalytics: {
name: "googleAnalytics",
apiUrl: "https://analytics.google.com",
regex: "^.*(analytics|analyticsdata).*$",
icon: "googleAnalytics",
docsUrl: "https://developers.google.com/analytics/devguides/reporting/data/v1",
openApiUrl: "https://analyticsdata.googleapis.com/$discovery/rest?version=v1beta",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
tokenUrl: "https://oauth2.googleapis.com/token",
scopes: "https://www.googleapis.com/auth/analytics.edit",
},
keywords: [
"properties",
"dimensions",
"metrics",
"reports",
"audiences",
"conversions",
"events",
"goals",
"segments",
"real time",
"user activity",
"attribution",
"funnels",
"cohorts",
"oauth",
],
},
youtube: {
name: "youtube",
apiUrl: "https://youtube.googleapis.com",
regex: "^.*youtube.*$",
icon: "youtube",
docsUrl: "https://developers.google.com/youtube/v3/docs",
openApiUrl: "https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
tokenUrl: "https://oauth2.googleapis.com/token",
scopes: "https://www.googleapis.com/auth/youtube",
},
keywords: [
"videos",
"channels",
"playlists",
"comments",
"captions",
"live streams",
"analytics",
"thumbnails",
"subscriptions",
"activities",
"ratings",
"uploads",
"members",
"oauth",
],
},
AWS: {
name: "AWS",
apiUrl: "https://amazonaws.com",
regex: "^.*(aws|amazonaws).*$",
icon: "amazonAWS",
docsUrl: "https://docs.aws.amazon.com/index.html",
preferredAuthType: "apikey",
keywords: [
"ec2",
"s3",
"lambda",
"rds",
"dynamodb",
"sqs",
"sns",
"cloudformation",
"iam",
"cloudwatch",
"vpc",
"instances",
"buckets",
"functions",
"api key",
],
},
googleCloud: {
name: "googleCloud",
apiUrl: "https://cloud.google.com",
regex: "^.*(cloud\\.google|gcp|googlecloud).*$",
icon: "googleCloud",
docsUrl: "https://cloud.google.com/apis/docs/overview",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
tokenUrl: "https://oauth2.googleapis.com/token",
scopes: "https://www.googleapis.com/auth/cloud-platform",
},
keywords: [
"compute",
"storage",
"bigquery",
"pubsub",
"cloud run",
"kubernetes",
"iam",
"vpc",
"cloud sql",
"bigtable",
"dataflow",
"logging",
"monitoring",
"oauth",
],
},
firebase: {
name: "firebase",
apiUrl: "https://firestore.googleapis.com",
regex: "^.*(firebase|firestore).*$",
icon: "firebase",
docsUrl: "https://firebase.google.com/docs/reference/firebase-management/rest",
openApiUrl: "https://firestore.googleapis.com/$discovery/rest?version=v1",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
tokenUrl: "https://oauth2.googleapis.com/token",
scopes:
"https://www.googleapis.com/auth/firebase https://www.googleapis.com/auth/cloud-platform",
},
keywords: [
"firestore",
"realtime database",
"authentication",
"cloud functions",
"storage",
"hosting",
"documents",
"collections",
"users",
"projects",
"apps",
"query",
"oauth",
],
},
salesforce: {
name: "salesforce",
apiUrl: "https://api.salesforce.com",
regex: "^.*salesforce.*$",
icon: "salesforce",
// documentation not crawlable due to weird htm site. PDF available at https://resources.docs.salesforce.com/258/latest/en-us/sfdc/pdf/api_rest.pdf - convert to text and insert in db.
docsUrl:
"https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/intro_rest.htm",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://login.salesforce.com/services/oauth2/authorize",
tokenUrl: "https://login.salesforce.com/services/oauth2/token",
scopes: "full",
grant_type: "authorization_code",
client_id:
"3MVG9rZjd7MXFdLh_gnrsdT0JY5BfNPxarDdhPQvng2.N9lbP0RCh9Rov2Mx.QYjNVNjlCuJMlYOouwbYOMAx",
},
keywords: [
"accounts",
"contacts",
"leads",
"opportunities",
"cases",
"campaigns",
"products",
"price books",
"quotes",
"contracts",
"orders",
"custom objects",
"soql",
"query",
"search",
"sobjects",
"oauth",
],
},
facebook: {
name: "facebook",
apiUrl: "https://graph.facebook.com",
regex: "^.*facebook.*$",
icon: "facebook",
docsUrl: "https://developers.facebook.com/docs/graph-api",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://www.facebook.com/v18.0/dialog/oauth",
tokenUrl: "https://graph.facebook.com/v18.0/oauth/access_token",
scopes:
"email public_profile pages_show_list pages_read_engagement pages_manage_metadata pages_read_user_content pages_manage_posts pages_manage_engagement business_management ads_management ads_read catalog_management leads_retrieval",
},
keywords: [
"pages",
"posts",
"comments",
"insights",
"ads",
"campaigns",
"audiences",
"business",
"catalog",
"events",
"groups",
"photos",
"videos",
"live videos",
"oauth",
],
},
instagram: {
name: "instagram",
apiUrl: "https://graph.facebook.com/v23.0/",
regex: "^.*instagram.*$",
icon: "instagram",
docsUrl: "https://developers.facebook.com/docs/graph-api/overview",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://www.facebook.com/v23.0/dialog/oauth",
tokenUrl: "https://graph.facebook.com/v23.0/oauth/access_token",
scopes:
"instagram_basic pages_show_list instagram_content_publish pages_read_engagement instagram_manage_comments instagram_manage_insights instagram_manage_messages business_management",
},
keywords: [
"media",
"posts",
"stories",
"comments",
"insights",
"hashtags",
"mentions",
"business discovery",
"content publishing",
"user media",
"account info",
"oauth",
],
},
twitter: {
name: "twitter",
apiUrl: "https://api.twitter.com",
regex: "^.*(twitter|x\\.com).*$",
icon: "x",
docsUrl: "https://docs.x.com/x-api/introduction",
openApiUrl: "https://api.x.com/2/openapi.json",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://twitter.com/i/oauth2/authorize",
tokenUrl: "https://api.twitter.com/2/oauth2/token",
scopes:
"tweet.read tweet.write users.read follows.read follows.write offline.access like.read like.write list.read list.write block.read block.write bookmark.read bookmark.write mute.read mute.write",
},
keywords: [
"tweets",
"users",
"followers",
"timeline",
"mentions",
"retweets",
"likes",
"lists",
"spaces",
"direct messages",
"trends",
"media",
"polls",
"oauth",
],
},
linkedin: {
name: "linkedin",
apiUrl: "https://api.linkedin.com",
regex: "^.*linkedin.*$",
icon: "linkedin",
docsUrl: "https://learn.microsoft.com/en-us/linkedin/shared/authentication/getting-access",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://www.linkedin.com/oauth/v2/authorization",
tokenUrl: "https://www.linkedin.com/oauth/v2/accessToken",
scopes:
"r_liteprofile r_emailaddress w_member_social r_fullprofile r_basicprofile rw_company_admin r_1st_connections r_ads r_ads_reporting r_organization_social rw_organization_admin w_organization_social r_events",
},
keywords: [
"profiles",
"connections",
"companies",
"shares",
"posts",
"articles",
"jobs",
"skills",
"endorsements",
"recommendations",
"groups",
"events",
"messaging",
"oauth",
],
},
paypal: {
name: "paypal",
apiUrl: "https://api.paypal.com",
regex: "^.*paypal.*$",
icon: "paypal",
docsUrl: "https://developer.paypal.com/api/rest",
// openapi specs are split across different files - all here: https://github.com/paypal/paypal-rest-api-specifications/tree/main/openapi
preferredAuthType: "apikey",
keywords: [
"payments",
"orders",
"captures",
"refunds",
"payouts",
"invoices",
"subscriptions",
"plans",
"products",
"transactions",
"balances",
"webhooks",
"checkout",
"billing",
"query",
"search",
],
},
square: {
name: "square",
apiUrl: "https://connect.squareup.com",
regex: "^.*(square|squareup).*$",
icon: "square",
docsUrl: "https://developer.squareup.com/reference/square",
openApiUrl:
"https://raw.githubusercontent.com/square/connect-api-specification/refs/heads/master/api.json",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://connect.squareup.com/oauth2/authorize",
tokenUrl: "https://connect.squareup.com/oauth2/token",
scopes:
"MERCHANT_PROFILE_READ PAYMENTS_READ PAYMENTS_WRITE CUSTOMERS_READ CUSTOMERS_WRITE INVENTORY_READ INVENTORY_WRITE ORDERS_READ ORDERS_WRITE ITEMS_READ ITEMS_WRITE EMPLOYEES_READ EMPLOYEES_WRITE TIMECARDS_READ TIMECARDS_WRITE",
},
keywords: [
"payments",
"customers",
"orders",
"catalog",
"inventory",
"locations",
"transactions",
"refunds",
"cards",
"checkout",
"invoices",
"subscriptions",
"terminals",
"employees",
"shifts",
"query",
"search",
"oauth",
],
},
adyen: {
name: "adyen",
apiUrl: "https://checkout-test.adyen.com",
regex: "^.*adyen.*$",
icon: "adyen",
docsUrl: "https://docs.adyen.com/api-explorer",
openApiUrl:
"https://raw.githubusercontent.com/Adyen/adyen-openapi/main/yaml/CheckoutService-v71.yaml",
preferredAuthType: "apikey",
keywords: [
"paymentMethods",
"sessions",
"payments",
"payments.details",
"cardDetails",
"recurringContracts",
"payouts",
"balanceTransfers",
"legalEntities",
"binLookup",
"storedValueCards",
"transferRules",
"terminalManagement",
"accountHolders",
"issuers",
],
},
razorpay: {
name: "razorpay",
apiUrl: "https://api.razorpay.com",
regex: "^.*razorpay.*$",
icon: "razorpay",
docsUrl: "https://razorpay.com/docs/api",
preferredAuthType: "apikey",
keywords: [
"payments",
"orders",
"customers",
"refunds",
"invoices",
"subscriptions",
"accounts",
"fund_accounts",
"payouts",
"virtual_accounts",
"mandates",
"disputes",
"settlements",
"payment_links",
"bin_lookup",
],
},
plaid: {
name: "plaid",
apiUrl: "https://production.plaid.com",
regex: "^.*plaid.*$",
icon: "plaid",
docsUrl: "https://plaid.com/docs/api",
openApiUrl: "https://raw.githubusercontent.com/plaid/plaid-openapi/master/2020-09-14.yml",
preferredAuthType: "apikey",
keywords: [
"items",
"accounts",
"institutions",
"link_tokens",
"access_tokens",
"transactions",
"auth",
"identity",
"assets",
"liabilities",
"income",
"user",
"processor_tokens",
"transfer",
"investments",
],
},
zendesk: {
name: "zendesk",
apiUrl: "https://api.zendesk.com",
regex: "^.*zendesk.*$",
icon: "zendesk",
docsUrl: "https://developer.zendesk.com/api-reference",
openApiUrl: "https://developer.zendesk.com/zendesk/oas.yaml",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://{subdomain}.zendesk.com/oauth/authorizations/new",
tokenUrl: "https://{subdomain}.zendesk.com/oauth/tokens",
scopes:
"read write tickets:read tickets:write users:read users:write organizations:read organizations:write hc:read hc:write chat:read chat:write",
},
keywords: [
"tickets",
"users",
"organizations",
"groups",
"agents",
"views",
"macros",
"triggers",
"automations",
"sla",
"custom fields",
"tags",
"satisfaction",
"help center",
"api key",
],
},
freshdesk: {
name: "freshdesk",
apiUrl: "https://{domain}.freshdesk.com/api/v2",
regex: "^.*freshdesk.*$",
icon: "freshdesk",
// doc cannot be crawled from our setup
docsUrl: "https://developers.freshdesk.com/api",
preferredAuthType: "apikey",
keywords: [
"tickets",
"contacts",
"agents",
"companies",
"groups",
"forums",
"solutions",
"categories",
"folders",
"articles",
"time entries",
"surveys",
"satisfaction",
"sla",
"escalations",
"api key",
],
},
freshworks: {
name: "freshworks",
apiUrl: "https://{domain}.freshservice.com/api/v2",
regex: "^.*(freshworks|freshservice).*$",
icon: "freshworks",
// doc cannot be crawled from our setup
docsUrl: "https://api.freshservice.com",
preferredAuthType: "apikey",
keywords: [
"tickets",
"requesters",
"agents",
"assets",
"changes",
"problems",
"releases",
"service catalog",
"service items",
"departments",
"locations",
"products",
"vendors",
"contracts",
"api key",
],
},
servicenow: {
name: "servicenow",
apiUrl: "https://{instance}.service-now.com/api",
regex: "^.*(servicenow|service-now).*$",
icon: "servicenow",
// service now page does not allow playwright to crawl their page
docsUrl: "https://developer.servicenow.com/dev.do#!/reference/api/latest/rest",
preferredAuthType: "apikey",
keywords: [
"incidents",
"problems",
"changes",
"requests",
"users",
"groups",
"cmdb",
"configuration items",
"service catalog",
"knowledge",
"tasks",
"approvals",
"sla",
"workflows",
"tables",
"api key",
],
},
helpscout: {
name: "helpscout",
apiUrl: "https://api.helpscout.net",
regex: "^.*helpscout.*$",
icon: "helpscout",
docsUrl: "https://developer.helpscout.com/mailbox-api",
preferredAuthType: "apikey",
keywords: [
"conversations",
"customers",
"mailboxes",
"threads",
"tags",
"teams",
"users",
"reports",
"satisfaction",
"ratings",
"workflows",
"saved replies",
"docs",
"beacon",
"api key",
],
},
dropbox: {
name: "dropbox",
apiUrl: "https://api.dropboxapi.com",
regex: "^.*dropbox.*$",
icon: "dropbox",
docsUrl: "https://www.dropbox.com/developers/documentation/http/documentation",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://www.dropbox.com/oauth2/authorize",
tokenUrl: "https://api.dropboxapi.com/oauth2/token",
scopes:
"files.metadata.read files.metadata.write files.content.read files.content.write sharing.read sharing.write account_info.read account_info.write",
},
keywords: [
"files",
"folders",
"upload",
"download",
"sharing",
"links",
"metadata",
"search",
"sync",
"paper",
"users",
"teams",
"move",
"copy",
"delete",
"oauth",
],
},
mailchimp: {
name: "mailchimp",
apiUrl: "https://api.mailchimp.com",
regex: "^.*mailchimp.*$",
icon: "mailchimp",
docsUrl: "https://mailchimp.com/developer/marketing/api",
openApiUrl: "https://api.mailchimp.com/schema/3.0/Swagger.json",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://login.mailchimp.com/oauth2/authorize",
tokenUrl: "https://login.mailchimp.com/oauth2/token",
scopes:
"audiences:read audiences:write automations:read automations:write campaigns:read campaigns:write conversations:read conversations:write ecommerce:read ecommerce:write files:read files:write lists:read lists:write reports:read templates:read templates:write",
},
keywords: [
"lists",
"campaigns",
"templates",
"audiences",
"members",
"segments",
"tags",
"automations",
"reports",
"folders",
"merge fields",
"activities",
"ecommerce",
"batch",
"query",
"api key",
],
},
jira: {
name: "jira",
apiUrl: "https://{your-domain}.atlassian.net/rest/api",
regex: "^.*(jira|atlassian).*$",
icon: "jira",
docsUrl: "https://developer.atlassian.com/cloud/jira/platform/rest/v3",
openApiUrl: "https://developer.atlassian.com/cloud/jira/platform/swagger-v3.json",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://auth.atlassian.com/authorize",
tokenUrl: "https://auth.atlassian.com/oauth/token",
scopes:
"read:jira-work write:jira-work read:jira-user write:jira-user read:jira-work-management write:jira-work-management read:servicedesk-request write:servicedesk-request manage:jira-project manage:jira-configuration manage:jira-data-provider offline_access",
client_id: "Az7iTb4uWYSv5N4p295PulP8oO2B3PjK",
},
keywords: [
"issues",
"projects",
"boards",
"sprints",
"epics",
"users",
"workflows",
"fields",
"components",
"versions",
"priorities",
"statuses",
"comments",
"attachments",
"jql",
"query",
"search",
"oauth",
],
},
confluence: {
name: "confluence",
apiUrl: "https://{your-domain}.atlassian.net/wiki/rest/api",
regex: "^.*(confluence|atlassian).*$",
icon: "confluence",
docsUrl: "https://developer.atlassian.com/cloud/confluence/rest",
openApiUrl: "https://developer.atlassian.com/cloud/confluence/swagger.json",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://auth.atlassian.com/authorize",
tokenUrl: "https://auth.atlassian.com/oauth/token",
scopes:
"read:confluence-content.all write:confluence-content read:confluence-space.summary write:confluence-space read:confluence-props write:confluence-props read:confluence-user write:confluence-user read:confluence-groups write:confluence-groups delete:confluence-content delete:confluence-space offline_access",
client_id: "Az7iTb4uWYSv5N4p295PulP8oO2B3PjK",
},
keywords: [
"spaces",
"pages",
"content",
"attachments",
"comments",
"labels",
"templates",
"blueprints",
"macros",
"restrictions",
"versions",
"ancestors",
"descendants",
"children",
"oauth",
],
},
quickbooks: {
name: "quickbooks",
apiUrl: "https://quickbooks.api.intuit.com",
regex: "^.*(quickbooks|intuit).*$",
icon: "quickbooks",
docsUrl:
"https://developer.intuit.com/app/developer/qbo/docs/api/accounting/most-commonly-used/account",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://appcenter.intuit.com/connect/oauth2",
tokenUrl: "https://oauth.platform.intuit.com/oauth2/v1/tokens/bearer",
scopes:
"com.intuit.quickbooks.accounting com.intuit.quickbooks.payment com.intuit.quickbooks.payroll com.intuit.quickbooks.payroll.timetracking com.intuit.quickbooks.payroll.benefits openid profile email phone address",
},
keywords: [
"accounts",
"invoices",
"customers",
"vendors",
"bills",
"payments",
"estimates",
"purchase orders",
"sales receipts",
"credit memos",
"journal entries",
"items",
"tax rates",
"employees",
"reports",
"oauth",
],
},
xero: {
name: "xero",
apiUrl: "https://api.xero.com",
regex: "^.*xero.*$",
icon: "xero",
docsUrl: "https://developer.xero.com/documentation/api/api-overview",
openApiUrl:
"https://raw.githubusercontent.com/XeroAPI/Xero-OpenAPI/master/xero_accounting.yaml",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://login.xero.com/identity/connect/authorize",
tokenUrl: "https://identity.xero.com/connect/token",
scopes:
"accounting.transactions accounting.transactions.read accounting.reports.read accounting.journals.read accounting.settings accounting.settings.read accounting.contacts accounting.contacts.read accounting.attachments accounting.attachments.read payroll.employees payroll.payruns payroll.payslip payroll.timesheets payroll.settings",
},
keywords: [
"accounts",
"invoices",
"contacts",
"bills",
"credit notes",
"bank transactions",
"payments",
"receipts",
"journals",
"purchase orders",
"quotes",
"reports",
"tax rates",
"tracking categories",
"payroll",
"oauth",
],
},
docusign: {
name: "docusign",
apiUrl: "https://api.docusign.com",
regex: "^.*docusign.*$",
icon: "docusign",
docsUrl: "https://developers.docusign.com/docs/esign-rest-api",
openApiUrl:
"https://raw.githubusercontent.com/docusign/OpenAPI-Specifications/refs/heads/master/esignature.rest.swagger-v2.1.json",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://account.docusign.com/oauth/auth",
tokenUrl: "https://account.docusign.com/oauth/token",
scopes:
"signature extended impersonation organization_read group_read permission_read user_read user_write account_read domain_read identity_provider_read user_data_redact asset_group_account_read asset_group_account_clone_write asset_group_account_clone_read",
},
keywords: [
"envelopes",
"documents",
"recipients",
"templates",
"signatures",
"tabs",
"brands",
"accounts",
"users",
"groups",
"powerforms",
"bulk send",
"connect",
"custom fields",
"oauth",
],
},
intercom: {
name: "intercom",
apiUrl: "https://api.intercom.io",
regex: "^.*intercom.*$",
icon: "intercom",
docsUrl: "https://developers.intercom.com/intercom-api-reference",
openApiUrl:
"https://raw.githubusercontent.com/intercom/Intercom-OpenAPI/refs/heads/main/descriptions/2.9/api.intercom.io.yaml",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://app.intercom.com/oauth",
tokenUrl: "https://api.intercom.io/auth/eagle/token",
scopes:
"inbox:read inbox:write users:read users:write companies:read companies:write contacts:read contacts:write conversations:read conversations:write help_center:read help_center:write teams:read teams:write tags:read tags:write segments:read events:write counts:read",
},
keywords: [
"contacts",
"conversations",
"messages",
"users",
"companies",
"events",
"tags",
"segments",
"articles",
"help center",
"teams",
"admins",
"inbox",
"notes",
"custom attributes",
"query",
"api key",
],
},
asana: {
name: "asana",
apiUrl: "https://app.asana.com/api",
regex: "^.*asana.*$",
icon: "asana",
docsUrl: "https://developers.asana.com/docs",
openApiUrl: "https://raw.githubusercontent.com/Asana/openapi/master/defs/asana_oas.yaml",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://app.asana.com/-/oauth_authorize",
tokenUrl: "https://app.asana.com/-/oauth_token",
scopes: "default openid email profile",
grant_type: "authorization_code",
client_id: "1211466490919249",
},
keywords: [
"tasks",
"projects",
"workspaces",
"teams",
"portfolios",
"goals",
"sections",
"tags",
"custom fields",
"stories",
"attachments",
"followers",
"assignee",
"due dates",
"query",
"search",
"api key",
],
},
trello: {
name: "trello",
apiUrl: "https://api.trello.com",
regex: "^.*trello.*$",
icon: "trello",
docsUrl: "https://developer.atlassian.com/cloud/trello/rest",
openApiUrl: "https://developer.atlassian.com/cloud/trello/swagger.v3.json",
preferredAuthType: "apikey",
keywords: [
"boards",
"lists",
"cards",
"members",
"labels",
"checklists",
"attachments",
"comments",
"actions",
"organizations",
"teams",
"power-ups",
"custom fields",
"stickers",
"api key",
],
},
notion: {
name: "notion",
apiUrl: "https://api.notion.com",
regex: "^.*notion.*$",
icon: "notion",
docsUrl: "https://developers.notion.com",
// this openapi spec was last updated in 2024 - might be outdated
openApiUrl:
"https://raw.githubusercontent.com/cameronking4/notion-openapi-chatgpt-action/refs/heads/main/public/notion-openapi.json",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://api.notion.com/v1/oauth/authorize",
tokenUrl: "https://api.notion.com/v1/oauth/token",
scopes:
"read_content update_content insert_content read_comments update_comments insert_comments read_user update_user",
},
keywords: [
"pages",
"databases",
"blocks",
"users",
"workspaces",
"properties",
"rich text",
"search",
"comments",
"parent",
"children",
"query",
"filter",
"sort",
"api key",
],
},
digitalocean: {
name: "digitalocean",
apiUrl: "https://api.digitalocean.com",
regex: "^.*digitalocean.*$",
icon: "digitalocean",
docsUrl: "https://docs.digitalocean.com/reference/api",
openApiUrl:
"https://raw.githubusercontent.com/digitalocean/openapi/refs/heads/main/specification/DigitalOcean-public.v2.yaml",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://cloud.digitalocean.com/v1/oauth/authorize",
tokenUrl: "https://cloud.digitalocean.com/v1/oauth/token",
scopes: "read write admin",
},
keywords: [
"droplets",
"volumes",
"images",
"snapshots",
"regions",
"sizes",
"ssh_keys",
"domains",
"domain_records",
"certificates",
"firewalls",
"load_balancers",
"projects",
"tags",
"vpcs",
"api key",
],
},
heroku: {
name: "heroku",
apiUrl: "https://api.heroku.com",
regex: "^.*heroku.*$",
icon: "heroku",
docsUrl: "https://devcenter.heroku.com/categories/platform-api",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://id.heroku.com/oauth/authorize",
tokenUrl: "https://id.heroku.com/oauth/token",
scopes: "global read write read-protected write-protected",
},
keywords: [
"apps",
"addons",
"builds",
"releases",
"config_vars",
"formations",
"dynos",
"buildpacks",
"domains",
"collaborators",
"keys",
"account",
"apps/~/addons",
"spaces",
"pipelines",
"api key",
],
},
huggingface: {
name: "huggingface",
apiUrl: "https://huggingface.co",
regex: "^.*huggingface.*$",
icon: "huggingface",
docsUrl: "https://huggingface.co/docs/hub/en/api",
preferredAuthType: "apikey",
keywords: [
"models",
"datasets",
"spaces",
"parameters",
"inference",
"fine-tuning",
"files",
"spaces",
"accounts",
"groups",
"api key",
],
},
circleci: {
name: "circleci",
apiUrl: "https://circleci.com/api",
regex: "^.*circleci.*$",
icon: "circleci",
docsUrl: "https://circleci.com/docs/api",
openApiUrl: "https://circleci.com/api/v2/openapi.json",
preferredAuthType: "apikey",
keywords: [
"pipelines",
"workflows",
"jobs",
"projects",
"builds",
"artifacts",
"environment_variables",
"contexts",
"orbs",
"insights",
"schedules",
"checkouts",
"api key",
],
},
travisci: {
name: "travisci",
apiUrl: "https://api.travis-ci.com",
regex: "^.*(travis|travis-ci).*$",
icon: "travisCI",
docsUrl: "https://docs.travis-ci.com/api",
preferredAuthType: "apikey",
keywords: [
"builds",
"jobs",
"repositories",
"branches",
"requests",
"caches",
"env_vars",
"settings",
"logs",
"stages",
"beta_features",
"api key",
],
},
wordpress: {
name: "wordpress",
apiUrl: "https://{your-site.com}/wp-json/wp/v2",
regex: "^.*wordpress.*$",
icon: "wordpress",
docsUrl: "https://developer.wordpress.org/rest-api",
openApiUrl: "https://developer.wordpress.com/docs/api/",
preferredAuthType: "apikey",
keywords: [
"posts",
"pages",
"media",
"users",
"categories",
"tags",
"comments",
"taxonomies",
"types",
"statuses",
"settings",
"themes",
"plugins",
"api key",
],
},
cloudflare: {
name: "cloudflare",
apiUrl: "https://api.cloudflare.com",
regex: "^.*cloudflare.*$",
icon: "cloudflare",
docsUrl: "https://developers.cloudflare.com/api",
openApiUrl:
"https://raw.githubusercontent.com/cloudflare/api-schemas/refs/heads/main/openapi.json",
preferredAuthType: "apikey",
keywords: [
"zones",
"dns_records",
"firewall_rules",
"page_rules",
"workers",
"certificates",
"load_balancers",
"rate_limits",
"waf",
"analytics",
"cache",
"ssl",
"api key",
],
},
bigcommerce: {
name: "bigcommerce",
apiUrl: "https://api.bigcommerce.com",
regex: "^.*bigcommerce.*$",
icon: "bigcommerce",
docsUrl: "https://developer.bigcommerce.com/docs/rest-management",
preferredAuthType: "apikey",
keywords: [
"products",
"categories",
"brands",
"orders",
"customers",
"carts",
"checkouts",
"coupons",
"price_lists",
"customer_groups",
"shipping",
"store_content",
"themes",
"api key",
],
},
woocommerce: {
name: "woocommerce",
apiUrl: "https://{yourstore.com}/wp-json/wc/v3",
regex: "^.*woocommerce.*$",
icon: "woocommerce",
docsUrl: "https://woocommerce.github.io/woocommerce-rest-api-docs",
preferredAuthType: "apikey",
keywords: [
"products",
"orders",
"customers",
"coupons",
"categories",
"shipping_classes",
"tax_classes",
"payment_gateways",
"shipping_zones",
"shipping_methods",
"product_variations",
"refunds",
"reports",
"api key",
],
},
prestashop: {
name: "prestashop",
apiUrl: "https://{yourstore.com}/api",
regex: "^.*prestashop.*$",
icon: "prestashop",
docsUrl: "https://devdocs.prestashop-project.org/8/webservice",
preferredAuthType: "apikey",
keywords: [
"products",
"categories",
"customers",
"addresses",
"carts",
"orders",
"carriers",
"countries",
"currencies",
"languages",
"manufacturers",
"suppliers",
"stocks",
"api key",
],
},
squarespace: {
name: "squarespace",
apiUrl: "https://api.squarespace.com",
regex: "^.*squarespace.*$",
icon: "squarespace",
docsUrl: "https://developers.squarespace.com/commerce-apis",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://login.squarespace.com/api/1/login/oauth/provider/authorize",
tokenUrl: "https://login.squarespace.com/api/1/login/oauth/provider/tokens",
scopes:
"website.products.read website.products.write website.orders.read website.orders.write website.inventory.read website.transactions.read website.store_settings.read email.campaigns.read email.campaigns.send",
},
keywords: [
"products",
"orders",
"inventory",
"transactions",
"profiles",
"store_pages",
"categories",
"discounts",
"gift_cards",
"abandoned_carts",
"webhooks",
"oauth",
],
},
monday: {
name: "monday",
apiUrl: "https://api.monday.com/v2",
regex: "^.*monday.*$",
icon: "monday",
docsUrl: "https://developer.monday.com/api-reference/docs",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://auth.monday.com/oauth2/authorize",
tokenUrl: "https://auth.monday.com/oauth2/token",
scopes:
"me:read users:read boards:read boards:write workspaces:read workspaces:write webhooks:write updates:read updates:write assets:read assets:write tags:read teams:read",
},
keywords: [
"boards",
"items",
"groups",
"columns",
"updates",
"users",
"workspaces",
"tags",
"files",
"activities",
"teams",
"subitems",
"graphql",
"mutations",
"query",
"api key",
],
},
clickup: {
name: "clickup",
apiUrl: "https://api.clickup.com/api/v2",
regex: "^.*clickup.*$",
icon: "clickup",
docsUrl: "https://clickup.com/api",
openApiUrl: "https://developer.clickup.com/openapi/clickup-api-v2-reference.json",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://app.clickup.com/api",
tokenUrl: "https://api.clickup.com/api/v2/oauth/token",
scopes:
"user:read user:write task:read task:write list:read list:write folder:read folder:write space:read space:write team:read team:write webhook:read webhook:write goal:read goal:write",
},
keywords: [
"tasks",
"lists",
"folders",
"spaces",
"teams",
"goals",
"views",
"statuses",
"priorities",
"tags",
"custom fields",
"time tracking",
"comments",
"checklists",
"dependencies",
"api key",
],
},
typeform: {
name: "typeform",
apiUrl: "https://api.typeform.com",
regex: "^.*typeform.*$",
icon: "typeform",
docsUrl: "https://developer.typeform.com",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://api.typeform.com/oauth/authorize",
tokenUrl: "https://api.typeform.com/oauth/token",
scopes:
"forms:read forms:write responses:read responses:write themes:read themes:write images:read images:write workspaces:read workspaces:write webhooks:read webhooks:write accounts:read offline",
},
keywords: [
"forms",
"responses",
"questions",
"fields",
"themes",
"images",
"workspaces",
"logic jumps",
"hidden fields",
"variables",
"calculations",
"insights",
"reports",
"oauth",
],
},
figma: {
name: "figma",
apiUrl: "https://api.figma.com",
regex: "^(.*\\.)?figma\\.com(/.*)?$",
icon: "figma",
docsUrl: "https://www.figma.com/developers/api",
openApiUrl:
"https://raw.githubusercontent.com/figma/rest-api-spec/refs/heads/main/openapi/openapi.yaml",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://www.figma.com/oauth",
tokenUrl: "https://www.figma.com/api/oauth/token",
scopes:
"file_read file_write file_dev_resources:read file_dev_resources:write webhooks:write",
},
keywords: [
"files",
"projects",
"teams",
"components",
"styles",
"nodes",
"frames",
"pages",
"images",
"comments",
"versions",
"branches",
"libraries",
"plugins",
"oauth",
],
},
contentful: {
name: "contentful",
apiUrl: "https://api.contentful.com",
regex: "^(.*\\.)?contentful\\.com(/.*)?$",
icon: "contentful",
docsUrl: "https://www.contentful.com/developers/docs/references/content-management-api",
preferredAuthType: "apikey",
keywords: [
"spaces",
"environments",
"content types",
"entries",
"assets",
"locales",
"tags",
"webhooks",
"roles",
"api keys",
"content model",
"publishing",
"preview",
"api key",
],
},
sanity: {
name: "sanity",
apiUrl: "https://api.sanity.io",
regex: "^(.*\\.)?sanity\\.io(/.*)?$",
icon: "sanity",
docsUrl: "https://www.sanity.io/docs/http-api",
preferredAuthType: "apikey",
keywords: [
"documents",
"datasets",
"projects",
"schemas",
"assets",
"images",
"mutations",
"transactions",
"groq",
"listening",
"history",
"api key",
],
},
prismic: {
name: "prismic",
apiUrl: "https://api.prismic.io",
regex: "^(.*\\.)?prismic\\.io(/.*)?$",
icon: "prismic",
docsUrl: "https://prismic.io/docs/rest-api",
preferredAuthType: "apikey",
keywords: [
"documents",
"repositories",
"custom types",
"slices",
"releases",
"previews",
"tags",
"languages",
"master ref",
"api key",
],
},
netlify: {
name: "netlify",
apiUrl: "https://api.netlify.com",
regex: "^(.*\\.)?netlify\\.com(/.*)?$",
icon: "netlify",
docsUrl: "https://docs.netlify.com/api/get-started",
openApiUrl: "https://raw.githubusercontent.com/netlify/open-api/refs/heads/master/swagger.yml",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://app.netlify.com/authorize",
tokenUrl: "https://api.netlify.com/oauth/token",
scopes:
"user sites deploys dns_zones forms submissions assets functions logs split_tests analytics billing members",
},
keywords: [
"sites",
"deploys",
"builds",
"functions",
"forms",
"identity",
"large media",
"split tests",
"analytics",
"bandwidth",
"dns zones",
"ssl certificates",
"api key",
],
},
vercel: {
name: "vercel",
apiUrl: "https://api.vercel.com",
regex: "^(.*\\.)?vercel\\.com(/.*)?$",
icon: "vercel",
docsUrl: "https://vercel.com/docs/rest-api",
openApiUrl: "https://openapi.vercel.sh/",
preferredAuthType: "apikey",
keywords: [
"deployments",
"projects",
"domains",
"aliases",
"secrets",
"environment variables",
"teams",
"logs",
"certificates",
"dns",
"edge config",
"functions",
"builds",
"api key",
],
},
amplitude: {
name: "amplitude",
apiUrl: "https://api.amplitude.com",
regex: "^(.*\\.)?amplitude\\.com(/.*)?$",
icon: "amplitude",
docsUrl: "https://www.docs.developers.amplitude.com",
preferredAuthType: "apikey",
keywords: [
"events",
"users",
"cohorts",
"charts",
"dashboards",
"behavioral",
"properties",
"segments",
"funnels",
"retention",
"revenue",
"annotations",
"export",
"api key",
],
},
segment: {
name: "segment",
apiUrl: "https://api.segment.com",
regex: "^(.*\\.)?segment\\.com(/.*)?$",
icon: "segment",
docsUrl: "https://segment.com/docs/api",
preferredAuthType: "apikey",
keywords: [
"sources",
"destinations",
"tracking",
"identify",
"events",
"traits",
"warehouses",
"functions",
"transformations",
"audiences",
"personas",
"protocols",
"catalog",
"api key",
],
},
mixpanel: {
name: "mixpanel",
apiUrl: "https://api.mixpanel.com",
regex: "^(.*\\.)?mixpanel\\.com(/.*)?$",
icon: "mixpanel",
docsUrl: "https://developer.mixpanel.com/reference/overview",
openApiUrl: "https://developer.mixpanel.com/reference/overview",
preferredAuthType: "apikey",
keywords: [
"events",
"users",
"profiles",
"cohorts",
"funnels",
"retention",
"insights",
"properties",
"engage",
"import",
"export",
"jql",
"query",
"segmentation",
"track",
"api key",
],
},
algolia: {
name: "algolia",
apiUrl: "https://api.algolia.com",
regex: "^(.*\\.)?algolia\\.com(/.*)?$",
icon: "algolia",
docsUrl: "https://www.algolia.com/doc/rest-api/search",
openApiUrl: "https://www.algolia.com/doc/rest-api/search/",
preferredAuthType: "apikey",
keywords: [
"indices",
"search",
"records",
"objects",
"facets",
"filters",
"ranking",
"synonyms",
"rules",
"api keys",
"analytics",
"insights",
"browse",
"query",
"api key",
],
},
snowflake: {
name: "snowflake",
apiUrl: "https://account.snowflakecomputing.com",
regex: "^(.*\\.)?(snowflake\\.com|snowflakecomputing\\.com)(/.*)?$",
icon: "snowflake",
docsUrl: "https://docs.snowflake.com/en/developer-guide/sql-api/index",
// snowflake stores multiple openapi specs in different files - all here: https://github.com/snowflakedb/snowflake-rest-api-specs
preferredAuthType: "apikey",
keywords: [
"warehouses",
"databases",
"schemas",
"tables",
"views",
"stages",
"pipes",
"tasks",
"streams",
"procedures",
"functions",
"roles",
"users",
"sql",
"api key",
],
},
databricks: {
name: "databricks",
apiUrl: "https://{your-workspace}.cloud.databricks.com/api",
regex: "^(.*\\.)?(databricks\\.com|cloud\\.databricks\\.com)(/.*)?$",
icon: "databricks",
// databricks is tricky since the documentation and the oauth changes if you use databricks on aws, gcp or azure
docsUrl: "https://docs.databricks.com/api/workspace/introduction",
preferredAuthType: "apikey",
keywords: [
"clusters",
"jobs",
"notebooks",
"dbfs",
"libraries",
"secrets",
"tokens",
"workspace",
"mlflow",
"delta",
"sql endpoints",
"permissions",
"groups",
"api key",
],
},
looker: {
name: "looker",
apiUrl: "https://{your-domain}.looker.com/api",
regex: "^(.*\\.)?looker\\.com(/.*)?$",
icon: "looker",
docsUrl: "https://docs.looker.com/reference/api-and-integration/api-reference",
openApiUrl:
"https://raw.githubusercontent.com/looker-open-source/sdk-codegen/refs/heads/main/spec/Looker.4.0.oas.json",
preferredAuthType: "apikey",
keywords: [
"looks",
"dashboards",
"explores",
"models",
"views",
"fields",
"dimensions",
"measures",
"folders",
"spaces",
"schedules",
"users",
"groups",
"roles",
"api key",
],
},
mongodb: {
name: "mongodb",
apiUrl: "https://cloud.mongodb.com/api",
regex: "^(.*\\.)?mongodb\\.com(/.*)?$",
icon: "mongodb",
docsUrl: "https://www.mongodb.com/docs/atlas/api",
preferredAuthType: "apikey",
keywords: [
"clusters",
"databases",
"collections",
"documents",
"indexes",
"atlas",
"realm",
"charts",
"data lake",
"search",
"triggers",
"backups",
"alerts",
"api key",
],
},
supabase: {
name: "supabase",
apiUrl: "https://api.supabase.co",
regex: "^(.*\\.)?(supabase\\.co|supabase\\.io)(/.*)?$",
icon: "supabase",
docsUrl: "https://supabase.com/docs/reference/api",
openApiUrl: "https://api.supabase.com/api/v1-json",
preferredAuthType: "apikey",
keywords: [
"tables",
"rows",
"auth",
"storage",
"functions",
"realtime",
"rpc",
"buckets",
"policies",
"users",
"postgrest",
"select",
"insert",
"update",
"delete",
"filter",
"api key",
],
},
planetscale: {
name: "planetscale",
apiUrl: "https://api.planetscale.com",
regex: "^(.*\\.)?planetscale\\.com(/.*)?$",
icon: "planetscale",
docsUrl: "https://api-docs.planetscale.com",
openApiUrl: "https://api.planetscale.com/v1/openapi-spec",
preferredAuthType: "apikey",
keywords: [
"databases",
"branches",
"deploy requests",
"schemas",
"backups",
"passwords",
"certificates",
"regions",
"organizations",
"audit logs",
"insights",
"api key",
],
},
openai: {
name: "openai",
apiUrl: "https://api.openai.com",
regex: "^.*openai.*$",
icon: "openai",
// openai prevents playwright from crawling their page - we manually copied the text to the template doc
docsUrl: "https://platform.openai.com/docs/api-reference/introduction",
openApiUrl: "https://app.stainless.com/api/spec/documented/openai/openapi.documented.yml",
preferredAuthType: "apikey",
keywords: [
"completions",
"chat",
"models",
"embeddings",
"images",
"audio",
"files",
"fine-tuning",
"assistants",
"threads",
"messages",
"runs",
"moderation",
"usage",
"api key",
],
},
anthropic: {
name: "anthropic",
apiUrl: "https://api.anthropic.com",
regex: "^.*anthropic.*$",
icon: "anthropic",
docsUrl: "https://docs.anthropic.com/claude/reference",
preferredAuthType: "apikey",
keywords: [
"messages",
"completions",
"claude",
"models",
"prompts",
"conversations",
"tokens",
"streaming",
"api key",
],
},
claude: {
name: "claude",
apiUrl: "https://api.anthropic.com",
regex: "^.*anthropic.*$",
icon: "anthropic",
docsUrl: "https://docs.anthropic.com/claude/reference",
preferredAuthType: "apikey",
keywords: [
"messages",
"completions",
"claude",
"models",
"prompts",
"conversations",
"tokens",
"streaming",
"api key",
],
},
pinecone: {
name: "pinecone",
apiUrl: "https://api.pinecone.io",
regex: "^(.*\\.)?pinecone\\.io(/.*)?$",
icon: "pinecone",
docsUrl: "https://docs.pinecone.io/reference",
openApiUrl:
"https://raw.githubusercontent.com/sigpwned/pinecone-openapi-spec/refs/heads/main/openapi.yml",
preferredAuthType: "apikey",
keywords: [
"indexes",
"vectors",
"upsert",
"collections",
"namespaces",
"metadata",
"embeddings",
"dimensions",
"pods",
"replicas",
"shards",
"api key",
],
},
zoom: {
name: "zoom",
apiUrl: "https://api.zoom.us",
regex: "^(.*\\.)?zoom\\.us(/.*)?$",
icon: "zoom",
docsUrl: "https://developers.zoom.us/docs/api",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://zoom.us/oauth/authorize",
tokenUrl: "https://zoom.us/oauth/token",
scopes:
"user:read user:write meeting:read meeting:write meeting:master recording:read recording:write webinar:read webinar:write chat_message:read chat_message:write chat_channel:read chat_channel:write contact:read report:read report:master dashboard:read",
},
keywords: [
"meetings",
"webinars",
"users",
"recordings",
"chat",
"channels",
"messages",
"participants",
"registrants",
"reports",
"dashboards",
"rooms",
"schedule",
"join",
"oauth",
],
},
microsoft: {
name: "microsoft",
apiUrl: "https://graph.microsoft.com",
regex: "^.*(microsoft|graph\\.microsoft|office|outlook|live\\.com).*$",
icon: "microsoft",
docsUrl: "https://learn.microsoft.com/en-us/graph/api/overview",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
tokenUrl: "https://login.microsoftonline.com/common/oauth2/v2.0/token",
scopes:
"User.Read User.ReadWrite Mail.Read Mail.ReadWrite Mail.Send Calendars.Read Calendars.ReadWrite Files.Read Files.ReadWrite Sites.Read.All Sites.ReadWrite.All Teams.ReadBasic.All Chat.Read Chat.ReadWrite ChannelMessage.Read.All offline_access",
},
keywords: [
"users",
"groups",
"mail",
"calendar",
"contacts",
"onedrive",
"sharepoint",
"teams",
"planner",
"tasks",
"drives",
"sites",
"lists",
"permissions",
"graph",
"oauth",
],
},
redis: {
name: "redis",
apiUrl: "https://app.redislabs.com/api/v1",
regex: "^(.*\\.)?(redis\\.com|redislabs\\.com|redis\\.io)(/.*)?$",
icon: "redis",
docsUrl: "https://docs.redis.com/latest/rc/api",
openApiUrl: "https://api.redislabs.com/v1/cloud-api-docs",
preferredAuthType: "apikey",
keywords: [
"databases",
"subscriptions",
"cloud accounts",
"regions",
"modules",
"persistence",
"replication",
"clustering",
"acl",
"alerts",
"backup",
"api key",
],
},
elasticsearch: {
name: "elasticsearch",
apiUrl: "https://api.elastic.co",
regex: "^(.*\\.)?elastic\\.co(/.*)?$",
icon: "elasticsearch",
docsUrl: "https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html",
openApiUrl:
"https://raw.githubusercontent.com/elastic/elasticsearch-specification/refs/heads/main/output/openapi/elasticsearch-openapi.json",
preferredAuthType: "apikey",
keywords: [
"indices",
"documents",
"search",
"mappings",
"settings",
"aliases",
"templates",
"clusters",
"nodes",
"shards",
"aggregations",
"analyzers",
"pipelines",
"snapshots",
"api key",
],
},
postmark: {
name: "postmark",
apiUrl: "https://api.postmarkapp.com",
regex: "^(.*\\.)?postmarkapp\\.com(/.*)?$",
icon: "postmark",
docsUrl: "https://postmarkapp.com/developer",
preferredAuthType: "apikey",
keywords: [
"emails",
"templates",
"servers",
"domains",
"senders",
"bounces",
"message streams",
"inbound",
"stats",
"suppressions",
"dkim",
"spf",
"tracking",
"api key",
],
},
sentry: {
name: "sentry",
apiUrl: "https://sentry.io/api",
regex: "^(.*\\.)?sentry\\.io(/.*)?$",
icon: "sentry",
docsUrl: "https://docs.sentry.io/api",
openApiUrl:
"https://raw.githubusercontent.com/getsentry/sentry-api-schema/refs/heads/main/openapi-derefed.json",
preferredAuthType: "apikey",
keywords: [
"projects",
"issues",
"events",
"releases",
"organizations",
"teams",
"alerts",
"discover",
"performance",
"dashboards",
"integrations",
"debug files",
"source maps",
"api key",
],
},
pagerduty: {
name: "pagerduty",
apiUrl: "https://api.pagerduty.com",
regex: "^(.*\\.)?pagerduty\\.com(/.*)?$",
icon: "pagerduty",
docsUrl: "https://developer.pagerduty.com/api-reference",
preferredAuthType: "apikey",
keywords: [
"incidents",
"services",
"escalation policies",
"schedules",
"users",
"teams",
"oncalls",
"alerts",
"event rules",
"response plays",
"analytics",
"maintenance windows",
"priorities",
"api key",
],
},
datadog: {
name: "datadog",
apiUrl: "https://api.datadoghq.com",
regex: "^(.*\\.)?datadoghq\\.com(/.*)?$",
icon: "datadog",
docsUrl: "https://docs.datadoghq.com/api/latest",
preferredAuthType: "apikey",
keywords: [
"metrics",
"monitors",
"dashboards",
"logs",
"traces",
"synthetics",
"events",
"hosts",
"tags",
"downtimes",
"slos",
"incidents",
"notebooks",
"api key",
],
},
newrelic: {
name: "newrelic",
apiUrl: "https://api.newrelic.com",
regex: "^(.*\\.)?newrelic\\.com(/.*)?$",
icon: "newrelic",
docsUrl: "https://docs.newrelic.com/docs/apis/rest-api-v2",
preferredAuthType: "apikey",
keywords: [
"applications",
"apm",
"browser",
"synthetics",
"alerts",
"dashboards",
"nrql",
"insights",
"infrastructure",
"logs",
"errors",
"transactions",
"deployments",
"api key",
],
},
auth0: {
name: "auth0",
apiUrl: "https://{your-domain}.auth0.com/api/v2",
regex: "^.*auth0.*$",
icon: "auth0",
docsUrl: "https://auth0.com/docs/api/management/v2",
openApiUrl: "https://auth0.com/docs/api/management/openapi.json",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://{your-domain}.auth0.com/authorize",
tokenUrl: "https://{your-domain}.auth0.com/oauth/token",
scopes:
"read:users update:users delete:users create:users read:users_app_metadata update:users_app_metadata delete:users_app_metadata create:users_app_metadata read:user_idp_tokens read:client_grants create:client_grants delete:client_grants update:client_grants read:connections update:connections delete:connections create:connections read:resource_servers",
},
keywords: [
"users",
"roles",
"permissions",
"connections",
"applications",
"rules",
"hooks",
"actions",
"organizations",
"branding",
"emails",
"mfa",
"logs",
"tenants",
"oauth",
],
},
okta: {
name: "okta",
apiUrl: "https://{your-domain}.okta.com/api/v1",
regex: "^(.*\\.)?okta\\.com(/.*)?$",
icon: "okta",
docsUrl: "https://developer.okta.com/docs/reference",
openApiUrl:
"https://raw.githubusercontent.com/okta/okta-management-openapi-spec/refs/heads/master/dist/2025.01.1/management-minimal.yaml",
preferredAuthType: "apikey",
keywords: [
"users",
"groups",
"applications",
"factors",
"policies",
"rules",
"identity providers",
"sessions",
"tokens",
"events",
"system logs",
"schemas",
"brands",
"domains",
"api key",
],
},
discord: {
name: "discord",
apiUrl: "https://discord.com/api",
regex: "^.*discord.*$",
icon: "discord",
docsUrl: "https://discord.com/developers/docs/intro",
// failed to fetch for some reason...
openApiUrl:
"https://raw.githubusercontent.com/discord/discord-api-spec/refs/heads/main/specs/openapi.json",
preferredAuthType: "apikey",
oauth: {
authUrl: "https://discord.com/api/oauth2/authorize",
tokenUrl: "https://discord.com/api/oauth2/token",
scopes:
"identify email guilds guilds.join connections bot applications.commands applications.commands.update guilds.members.read messages.read webhook.incoming role_connections.write dm_channels.read voice",
},
keywords: [
"guilds",
"channels",
"messages",
"bots",
"users",
"members",
"roles",
"permissions",
"emojis",
"reactions",
"voice",
"invites",
"bans",
"audit logs",
"slash commands",
"interactions",
"api key",
],
},
telegram: {
name: "telegram",
apiUrl: "https://api.telegram.org",
regex: "^(.*\\.)?telegram\\.org(/.*)?$",
icon: "telegram",
docsUrl: "https://core.telegram.org/bots/api",
preferredAuthType: "apikey",
keywords: [
"messages",
"chats",
"updates",
"inline",
"keyboards",
"media",
"stickers",
"polls",
"dice",
"commands",
"callbacks",
"bot api",
"api key",
],
},
whatsapp: {
name: "whatsapp",
apiUrl: "https://graph.facebook.com",
regex: "^(.*\\.)?whatsapp\\.com(/.*)?$",
icon: "whatsapp",
docsUrl: "https://developers.facebook.com/docs/whatsapp/cloud-api",
preferredAuthType: "apikey",
keywords: [
"messages",
"media",
"contacts",
"groups",
"business",
"templates",
"interactive",
"webhooks",
"phone numbers",
"profiles",
"settings",
"api key",
],
},
linear: {
name: "linear",
apiUrl: "https://api.linear.app/graphql",
regex: "^(.*\\.)?linear\\.app(/.*)?$",
icon: "linear",
docsUrl: "https://developers.linear.app/docs/graphql/working-with-the-graphql-api",
preferredAuthType: "apikey",
keywords: [
"issues",
"projects",
"cycles",
"teams",
"users",
"comments",
"labels",
"milestones",
"roadmaps",
"workflows",
"states",
"graphql",
"mutations",
"queries",
"api key",
],
},
resend: {
name: "resend",
apiUrl: "https://api.resend.com",
regex: "^(.*\\.)?resend\\.com(/.*)?$",
icon: "resend",
docsUrl: "https://resend.com/docs/api-reference",
// problem fetching the yml and converting it to json
openApiUrl: "https://raw.githubusercontent.com/resend/resend-openapi/main/resend.yaml",
preferredAuthType: "apikey",
keywords: [
"emails",
"domains",
"api keys",
"contacts",
"audiences",
"broadcasts",
"batch",
"send",
"templates",
"react email",
"transactional",
"api key",
],
},
googleAds: {
name: "googleAds",
apiUrl: "https://googleads.googleapis.com/v20",
regex: "^.*(googleads\\.googleapis|developers\\.google\\.com/google-ads|adwords\\.google).*$",
icon: "googleads",
docsUrl: "https://developers.google.com/google-ads/api/docs/concepts/overview",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
tokenUrl: "https://oauth2.googleapis.com/token",
scopes:
"https://www.googleapis.com/auth/adwords https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile openid",
},
keywords: [
"campaigns",
"ad groups",
"ads",
"keywords",
"GAQL",
"budgets",
"bidding",
"conversions",
"audiences",
"extensions",
"reports",
"accounts",
"billing",
"targeting",
"oauth",
],
},
google: {
name: "google",
apiUrl: "https://googleapis.com",
regex:
"^.*(googleapis\\.com(?!/(?:gmail|drive|calendar|sheets|googleads))|developers\\.google\\.com(?!/(?:gmail|drive|calendar|sheets|google-ads))).*$",
icon: "google",
docsUrl: "https://developers.google.com/apis-explorer",
preferredAuthType: "oauth",
oauth: {
authUrl: "https://accounts.google.com/o/oauth2/v2/auth",
tokenUrl: "https://oauth2.googleapis.com/token",
scopes:
"https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile openid",
},
keywords: [
"apis",
"services",
"resources",
"GAQL",
"methods",
"scopes",
"projects",
"quotas",
"usage",
"oauth",
],
},
posthog: {
name: "posthog",
apiUrl: "https://us.posthog.com/api",
regex: "^.*posthog.*$",
icon: "posthog",
docsUrl: "https://posthog.com/docs/api",
openApiUrl: "https://app.posthog.com/api/schema/",
preferredAuthType: "apikey",
keywords: [
"events",
"users",
"products",
"dashboard",
"properties",
"cohorts",
"funnels",
"retention",
"insights",
"engage",
"import",
"export",
"jql",
"query",
"segmentation",
"track",
"api key",
],
},
firecrawl: {
name: "firecrawl",
apiUrl: "https://api.firecrawl.dev/v1",
regex: "^.*firecrawl.*$",
icon: "firecrawl",
docsUrl: "https://docs.firecrawl.dev/api-reference/introduction",
preferredAuthType: "apikey",
keywords: ["crawl", "scrape", "extract", "search", "pdf", "web", "html", "markdown", "api key"],
},
crawlbase: {
name: "crawlbase",
apiUrl: "https://api.crawlbase.com",
regex: "^.*crawlbase.*$",
icon: "crawlbase",
docsUrl: "https://crawlbase.com/docs/crawling-api/",
preferredAuthType: "apikey",
keywords: ["crawl", "scrape", "extract", "search", "pdf", "web", "html", "markdown", "api key"],
},
gemini: {
name: "gemini",
apiUrl:
"https://generativelanguage.googleapis.com/v1beta/models/{model_string}:generateContent?key={your-api-key}",
regex: "^.*(gemini|generativelanguage)\\.googleapis\\.com.*$",
icon: "gemini",
docsUrl: "https://ai.google.dev/api",
// there is a openapi spec here: https://generativelanguage.googleapis.com/$discovery/OPENAPI3_0?version=v1beta&key=$GOOGLE_API_KEY - but you need your own google api key to access it
preferredAuthType: "apikey",
},
};
export const integrationOptions = [
{ value: "manual", label: "Custom API", icon: "default" },
...Object.entries(integrations).map(([key, integration]) => ({
value: key,
label: key
.replace(/([A-Z])/g, " $1") // Add space before capital letters
.replace(/^./, (str) => str.toUpperCase()) // Capitalize first letter
.trim(), // Remove leading space
icon: integration.icon || "default",
})),
];
/**
* Find matching integration for a given URL
* @param url - The URL to match against integrations
* @returns The matching integration key and details, or null if no match found
*/
export function findMatchingIntegration(
url: string,
): { key: string; integration: IntegrationConfig } | null {
// Ensure URL has a scheme for proper matching
const urlForMatching =
url.startsWith("http") || url.startsWith("postgres") ? url : `https://${url}`;
const matches: { key: string; integration: IntegrationConfig; specificity: number }[] = [];
for (const [key, integration] of Object.entries(integrations)) {
try {
if (new RegExp(integration.regex).test(urlForMatching)) {
// Calculate specificity: longer, more specific regexes get higher scores
const specificity =
integration.regex.length + (integration.regex.includes("(?!") ? 100 : 0);
matches.push({ key, integration, specificity });
}
} catch (e) {
console.error(`Invalid regex pattern for integration: ${key}`);
}
}
if (matches.length === 0) return null;
// Return the most specific match (highest specificity score)
const bestMatch = matches.sort((a, b) => b.specificity - a.specificity)[0];
return { key: bestMatch.key, integration: bestMatch.integration };
}
/**
* Get OAuth configuration for an integration
* @param integrationKey - The key of the integration
* @returns OAuth config or null if not available
*/
export function getOAuthConfig(integrationKey: string): IntegrationConfig["oauth"] | null {
return integrations[integrationKey]?.oauth || null;
}
/**
* Get OAuth token URL for an integration
* @param integration - The integration object with credentials and URL info
* @returns The token URL for OAuth token exchange
*/
export function getOAuthTokenUrl(integration: Integration): string {
// First priority: User-provided token URL in credentials
if (integration.credentials?.token_url) {
return integration.credentials.token_url;
}
// Second priority: Known integration template token URL
const knownIntegration = Object.entries(integrations).find(
([key]) => integration.id === key || integration.urlHost?.includes(key),
);
if (knownIntegration) {
const [_, config] = knownIntegration;
if (config.oauth?.tokenUrl) {
return config.oauth.tokenUrl;
}
}
// Fallback: Default OAuth token endpoint
if (!integration.urlHost) {
throw new Error(
`Cannot determine OAuth token URL for integration ${integration.id}: no urlHost or token_url provided`,
);
}
return `${integration.urlHost}/oauth/token`;
}
export interface SdkCodegenOptions {
apiKey: string;
endpoint: string;
workflowId: string;
payload: any;
credentials: any;
includeComments?: boolean;
wrapInMain?: boolean;
}
export interface SdkCode {
typescript: string;
python: string;
go: string;
}
export function getSDKCode(opts: SdkCodegenOptions): SdkCode {
const { endpoint, workflowId, payload } = opts;
return {
typescript: `// if not installed, run: npm install @superglue/client
// ALWAYS USE THE SDK, do not use the graphql endpoint directly
import { SuperglueClient } from '@superglue/client';
const client = new SuperglueClient({
apiKey: "<YOUR_SUPERGLUE_API_KEY>",
endpoint: "${endpoint}" // or default to https://graphql.superglue.ai NOT https://api.superglue.ai
});
async function main() {
const result = await client.executeWorkflow({
id: "${workflowId}",
payload: ${JSON.stringify(payload, null, 2)}
});
console.log(result);
}
main();`,
python: `import requests
response = requests.post("${endpoint}", # or default to https://graphql.superglue.ai
headers={"Authorization": "Bearer <YOUR_SUPERGLUE_API_KEY>"},
json={
"query": "mutation ExecuteWorkflow($input: WorkflowInputRequest!, $payload: JSON) { \\n executeWorkflow(input: $input, payload: $payload) { \\n data error success\\n }\\n }",
"variables": {
"input": {"id": "${workflowId}"},
"payload": ${JSON.stringify(payload, null, 2)}
}
})
`,
go: `package main
import (
"bytes"
"encoding/json"
"net/http"
)
func main() {
payload := ${JSON.stringify(payload, null, 2)}
reqBody, _ := json.Marshal(map[string]interface{}{
"query": \`mutation ExecuteWorkflow($input: WorkflowInputRequest!, $payload: JSON) {\\n executeWorkflow(input: $input, payload: $payload) {\\n data error success\\n }\\n }\`,
"variables": map[string]interface{}{
"input": map[string]string{"id": "${workflowId}"},
"payload": payload,
},
})
req, _ := http.NewRequest("POST", "${endpoint}", bytes.NewBuffer(reqBody)) // or default to https://graphql.superglue.ai
req.Header.Set("Authorization", "Bearer <YOUR_SUPERGLUE_API_KEY>")
req.Header.Set("Content-Type", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
}`,
};
}