{
  "application": {
    "universalIdentifier": "2b7f4a2e-9c4b-4a11-b63c-2e5e7d3f5a9a",
    "displayName": "Exa",
    "description": "Structured web search powered by Exa. Surfaces entity-aware results (companies, people, research, news) to Twenty AI agents.",
    "author": "Twenty",
    "category": "Search",
    "websiteUrl": "https://docs.twenty.com/developers/extend/apps/getting-started",
    "termsUrl": "https://www.twenty.com/terms",
    "emailSupport": "contact@twenty.com",
    "issueReportUrl": "https://github.com/twentyhq/twenty/issues",
    "defaultRoleUniversalIdentifier": "9a55f3d2-f87c-4f1b-a0f3-5d1c6b8a2e4c",
    "serverVariables": {
      "EXA_API_KEY": {
        "description": "Exa API key. Set by the server admin on this registration after installation; the value is injected into every logic function execution.",
        "isSecret": true,
        "isRequired": true
      }
    },
    "logo": "public/exa-logomark.svg",
    "galleryImages": [
      "public/cover.generated.png"
    ],
    "aboutDescription": "# Exa\n\nStructured web search powered by [Exa](https://exa.ai), available to Twenty's AI agents as the `exa_web_search` tool. When an agent needs fresh, entity-aware information from the web (companies, people, research, news, and more), it can call Exa directly from chat and answer with live results.\n\n## What it does\n\nThis app adds a single AI tool, `exa_web_search`, to your workspace. Twenty AI agents can invoke it to run a search through Exa and receive structured, entity-aware results. It is designed to surface high-quality matches for companies, people, research papers, news, and similar entities rather than generic page links.\n\nThe tool reads no workspace data. It only uses the search query the agent provides and your configured Exa API key, calling Exa's external API to return results.\n\n## How agents use it\n\nThe tool accepts the following inputs:\n\n- **query** (required) — the search query to send to Exa.\n- **category** (optional) — narrows results to a specific type. Supported values: `company`, `research paper`, `news`, `pdf`, `personal site`, `financial report`, `people`. When omitted, Exa searches across all types.\n- **numResults** (optional) — how many results to return, between `1` and `30`. Defaults to `10`.\n\nAgents choose these values automatically based on what they are trying to find, so no manual configuration is needed once the app is set up.\n\n## Setup\n\nThe app requires an Exa API key, configured once by the server administrator:\n\n- **EXA_API_KEY** (required, secret) — your Exa API key. It is set on the app after installation and injected into every search. There is no per-workspace configuration; the same key serves all searches.\n\nIf the key is not set, searches fail with an error until an administrator provides it.\n\n## Billing\n\nEach successful search consumes credits, mirroring Exa's auto-search pricing: a base cost of **$0.007** covers the first 10 results, plus **$0.001** for each additional result. Charges are based on the number of results actually returned, not the number requested.\n\n## Limitations\n\n- Returns at most 30 results per search.\n- Results come live from Exa's external API, so the app depends on Exa's availability and on a valid API key being configured.\n- The tool only performs web search; it does not read from or write to your workspace data.\n",
    "yarnLockChecksum": "ed356fb8250428c8ea25a39544843a99",
    "packageJsonChecksum": "e869c7c993ffcf9326931854b752d12a",
    "requiredServerVersionRange": ">=2.19.0"
  },
  "objects": [],
  "fields": [],
  "indexes": [],
  "permissionFlags": [],
  "roles": [
    {
      "universalIdentifier": "9a55f3d2-f87c-4f1b-a0f3-5d1c6b8a2e4c",
      "label": "Exa function role",
      "description": "No-op role for the exa_web_search logic function",
      "canReadAllObjectRecords": false,
      "canUpdateAllObjectRecords": false,
      "canSoftDeleteAllObjectRecords": false,
      "canDestroyAllObjectRecords": false,
      "canUpdateAllSettings": false,
      "canBeAssignedToAgents": false,
      "canBeAssignedToUsers": false,
      "canBeAssignedToApiKeys": false,
      "objectPermissions": [],
      "fieldPermissions": [],
      "rowLevelPermissionPredicateGroups": [],
      "rowLevelPermissionPredicates": [],
      "permissionFlagUniversalIdentifiers": []
    }
  ],
  "skills": [],
  "agents": [],
  "connectionProviders": [],
  "logicFunctions": [
    {
      "universalIdentifier": "4c6f9b2a-5d8e-4c2a-af18-3e0b9c6a7e4f",
      "name": "exa_web_search",
      "description": "Structured web search powered by Exa. Returns entity-aware results with category filtering (companies, people, research papers, news, and other content types). Prefer this when the query benefits from structured data or a specific category. For general real-time web browsing, prefer the native `web_search` tool when it is available.",
      "timeoutSeconds": 30,
      "toolTriggerSettings": {
        "inputSchema": {
          "type": "object",
          "properties": {
            "query": {
              "type": "string",
              "description": "The search query to look up on the web. Be specific and include relevant keywords for better results."
            },
            "category": {
              "type": "string",
              "enum": [
                "company",
                "research paper",
                "news",
                "pdf",
                "personal site",
                "financial report",
                "people"
              ],
              "description": "Optional content category to focus the search. Use \"company\" for business/organization info, \"people\" for person profiles, \"news\" for recent articles, \"research paper\" for academic content."
            },
            "numResults": {
              "type": "integer",
              "minimum": 1,
              "maximum": 30,
              "description": "Number of search results to return. Defaults to 10, max 30. Use more results when you need comprehensive coverage."
            }
          },
          "required": [
            "query"
          ],
          "additionalProperties": false
        }
      },
      "handlerName": "default.config.handler",
      "sourceHandlerPath": "src/logic-functions/exa-web-search.ts",
      "builtHandlerPath": "src/logic-functions/exa-web-search.mjs",
      "builtHandlerChecksum": "6016f478c06dea4a95f61be693266ec6"
    }
  ],
  "frontComponents": [],
  "publicAssets": [
    {
      "filePath": "public/exa-logo.svg",
      "fileName": "exa-logo.svg",
      "fileType": "svg",
      "checksum": "b7a8fd3150e12a13c707ba1cdb7598f0"
    },
    {
      "filePath": "public/exa-logomark.svg",
      "fileName": "exa-logomark.svg",
      "fileType": "svg",
      "checksum": "29daf8074f6c4ef294a48d4c549b1a2c"
    },
    {
      "filePath": "public/cover.generated.png",
      "fileName": "cover.generated.png",
      "fileType": "png",
      "checksum": "abc5b606572b96e06f44328b0c3fd267"
    }
  ],
  "views": [],
  "viewFields": [],
  "navigationMenuItems": [],
  "pageLayouts": [],
  "pageLayoutTabs": [],
  "commandMenuItems": []
}
