openapi: 3.2.0 info: title: Pipeshub Web Search API version: 1.0.0 contact: name: API Support email: support@pipeshub.com description: 'Operations tagged Web Search across 2 of this provider''s published API definitions: pipeshub-openapi.yaml, pipeshub-openapi.yml. Each path carries the servers of the definition it was published in.' servers: - url: '{instance_url}/api/v1' description: Base API URL variables: instance_url: default: https://app.pipeshub.com description: Base server URL (without /api/v1) - url: '{instance_url}' description: Root URL (used for MCP endpoints mounted at /mcp) variables: instance_url: default: https://app.pipeshub.com description: Base server URL security: - bearerAuth: [] - oauth2: [] tags: - name: Web Search description: Manage web search providers (DuckDuckGo, Serper, Tavily, Exa) and settings for internet search. paths: /configurationManager/web-search: get: tags: - Web Search summary: Get all web search providers description: 'Retrieve all configured web search providers and current web search settings. **Authentication:** Session JWT or OAuth 2.0 access token via `Authorization: Bearer`. OAuth tokens must include the `config:read` scope. Admin role is not required. **API keys:** for anyone who isn''t an org admin, each provider''s `configuration.apiKey` comes back as the placeholder `****************`. Admins get the stored key, unless the server hides secrets from everyone (`HIDE_SECRET_CONFIG=true`). When updating a provider, sending the placeholder back keeps the stored key.' operationId: getWebSearchProviders x-pipeshub-sdk: true security: - bearerAuth: [] - oauth2: - config:read responses: '200': description: Web search providers and settings retrieved content: application/json: schema: $ref: '#/components/schemas/WebSearchProvidersResponse' '401': description: Missing or invalid Bearer token content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' '403': description: Forbidden — OAuth token missing `config:read` scope content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' servers: - url: '{instance_url}/api/v1' description: Base API URL variables: instance_url: default: https://app.pipeshub.com description: Base server URL (without /api/v1) - url: '{instance_url}' description: Root URL (used for MCP endpoints mounted at /mcp) variables: instance_url: default: https://app.pipeshub.com description: Base server URL /configurationManager/web-search/settings: put: tags: - Web Search summary: Update web search settings description: Update global web search settings (e.g. include images, max images). operationId: updateWebSearchSettings security: - bearerAuth: [] - oauth2: - config:write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebSearchSettingsUpdate' responses: '200': description: Web search settings updated content: application/json: schema: type: object properties: status: type: string message: type: string '400': description: Invalid settings (e.g. maxImages required when includeImages is true) '401': description: Unauthorized '403': description: Admin access required servers: - url: '{instance_url}/api/v1' description: Base API URL variables: instance_url: default: https://app.pipeshub.com description: Base server URL (without /api/v1) - url: '{instance_url}' description: Root URL (used for MCP endpoints mounted at /mcp) variables: instance_url: default: https://app.pipeshub.com description: Base server URL /configurationManager/web-search/providers: post: tags: - Web Search summary: Add a new web search provider description: Add a new web search provider (duckduckgo, serper, tavily, or exa) with provider-specific configuration. operationId: addWebSearchProvider security: - bearerAuth: [] - oauth2: - config:write requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddWebSearchProviderRequest' responses: '200': description: Web search provider added content: application/json: schema: type: object properties: status: type: string message: type: string details: type: object properties: providerKey: type: string description: Unique key for the new provider provider: type: string isDefault: type: boolean '400': description: Invalid configuration or duplicate provider '401': description: Unauthorized '403': description: Admin access required servers: - url: '{instance_url}/api/v1' description: Base API URL variables: instance_url: default: https://app.pipeshub.com description: Base server URL (without /api/v1) - url: '{instance_url}' description: Root URL (used for MCP endpoints mounted at /mcp) variables: instance_url: default: https://app.pipeshub.com description: Base server URL /configurationManager/web-search/providers/{providerKey}: put: tags: - Web Search summary: Update a web search provider description: Update an existing web search provider configuration. operationId: updateWebSearchProvider security: - bearerAuth: [] - oauth2: - config:write parameters: - name: providerKey in: path required: true schema: type: string description: Unique key for the provider configuration requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/UpdateWebSearchProviderRequest' responses: '200': description: Web search provider updated content: application/json: schema: type: object properties: status: type: string message: type: string '400': description: Invalid configuration '401': description: Unauthorized '403': description: Admin access required '404': description: Provider not found delete: tags: - Web Search summary: Delete a web search provider description: Remove a web search provider configuration. If the deleted provider was default, the first remaining provider becomes default. operationId: deleteWebSearchProvider security: - bearerAuth: [] - oauth2: - config:write parameters: - name: providerKey in: path required: true schema: type: string description: Unique key for the provider configuration responses: '200': description: Web search provider deleted content: application/json: schema: type: object properties: status: type: string message: type: string '401': description: Unauthorized '403': description: Admin access required '404': description: Provider not found servers: - url: '{instance_url}/api/v1' description: Base API URL variables: instance_url: default: https://app.pipeshub.com description: Base server URL (without /api/v1) - url: '{instance_url}' description: Root URL (used for MCP endpoints mounted at /mcp) variables: instance_url: default: https://app.pipeshub.com description: Base server URL /configurationManager/web-search/default/{providerKey}: put: tags: - Web Search summary: Update the default web search provider description: Set the given provider as the default web search provider. operationId: updateDefaultWebSearchProvider security: - bearerAuth: [] - oauth2: - config:write parameters: - name: providerKey in: path required: true schema: type: string description: Unique key for the provider configuration responses: '200': description: Default web search provider updated content: application/json: schema: type: object properties: status: type: string message: type: string '401': description: Unauthorized '403': description: Admin access required '404': description: Provider not found servers: - url: '{instance_url}/api/v1' description: Base API URL variables: instance_url: default: https://app.pipeshub.com description: Base server URL (without /api/v1) - url: '{instance_url}' description: Root URL (used for MCP endpoints mounted at /mcp) variables: instance_url: default: https://app.pipeshub.com description: Base server URL components: schemas: WebSearchSettings: type: object additionalProperties: false description: Normalized web search global settings returned by getWebSearchProviders required: - includeImages properties: includeImages: type: boolean description: Whether to include images in search results maxImages: type: integer minimum: 1 maximum: 500 description: Maximum number of images to return when includeImages is true WebSearchProvidersResponse: type: object additionalProperties: false description: Response for getWebSearchProviders required: - status - providers - settings - message properties: status: type: string enum: - success providers: type: array items: $ref: '#/components/schemas/WebSearchProviderItem' settings: $ref: '#/components/schemas/WebSearchSettings' message: type: string description: Human-readable status (empty list vs populated providers) UpdateWebSearchProviderRequest: type: object description: Request to update an existing web search provider required: - provider - configuration properties: provider: $ref: '#/components/schemas/WebSearchProviderType' configuration: type: object description: Provider-specific configuration additionalProperties: true isDefault: type: boolean default: false description: Whether this provider should be the default WebSearchProviderType: type: string enum: - duckduckgo - serper - tavily - exa description: Supported web search provider WebSearchSettingsUpdate: type: object description: Web search global settings required: - includeImages properties: includeImages: type: boolean description: Whether to include images in search results maxImages: type: integer minimum: 1 maximum: 500 description: Maximum number of images to return (required when includeImages is true) WebSearchProviderItem: type: object additionalProperties: false description: Web search provider configuration item returned by getWebSearchProviders required: - provider - providerKey - configuration - isDefault properties: provider: $ref: '#/components/schemas/WebSearchProviderType' providerKey: type: string description: Unique key for the provider configuration configuration: type: object description: 'Provider-specific configuration as stored and returned by the gateway (open record). Serper, Tavily, and Exa typically include `apiKey`; additional keys may be present. ' additionalProperties: true isDefault: type: boolean ErrorResponse: type: object additionalProperties: false description: 'Standard error envelope returned by all errors routed through `ErrorMiddleware`. Applies to all `BaseError` subclasses including `HttpError`, `ValidationError`, and others. The `code` field is a machine-readable string identifying the error type (e.g. `HTTP_UNAUTHORIZED`, `HTTP_NOT_FOUND`, `VALIDATION_ERROR`, `INTERNAL_ERROR`). ' properties: error: type: object additionalProperties: false required: - code - message properties: requestId: type: string description: 'Identifier for this request, echoed so a bug report can quote it. Absent when the request never reached the middleware that assigns one. ' code: type: string description: 'Machine-readable error code. For application errors it takes the form `HTTP_` For unhandled runtime errors (e.g. database unavailable) it is `INTERNAL_ERROR`. ' example: HTTP_BAD_REQUEST message: type: string description: Human-readable description of the error example: Admin access required metadata: type: object description: Additional context (only present in development environments) additionalProperties: true required: - error AddWebSearchProviderRequest: type: object description: Request to add a new web search provider required: - provider - configuration properties: provider: $ref: '#/components/schemas/WebSearchProviderType' configuration: type: object description: Provider-specific configuration (e.g. apiKey, cx, endpoint, engine) additionalProperties: true isDefault: type: boolean default: false description: Whether this provider should be the default securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: 'JWT Bearer token for authenticated requests. A personal access token (see the **Personal Access Tokens** tag) is a `phpat_`-prefixed variant of this same JWT — e.g. `phpat_eyJhbGci...`. The prefix is display-only, added for secret-scanner detectability; the gateway strips it before verifying the token, so send it exactly as issued, prefix included. ' scopedToken: type: http scheme: bearer bearerFormat: JWT description: 'Scoped JWT token for service-to-service authentication. Format: "Bearer {scoped_token}" Required scopes vary by endpoint. ' oauth2: type: oauth2 description: 'OAuth 2.0 authentication with fine-grained scopes. Supports authorization_code (with PKCE) and client_credentials flows. OAuth tokens are Bearer JWTs — use the same Authorization header as regular tokens. For **client_credentials**, machine JWTs may use `userId === client_id`; the Node gateway resolves the OAuth app creator — see **OAuth Provider** tag. ' flows: authorizationCode: authorizationUrl: /api/v1/oauth2/authorize tokenUrl: /api/v1/oauth2/token refreshUrl: /api/v1/oauth2/token scopes: openid: OpenID Connect authentication profile: User profile information email: User email address offline_access: Offline access (refresh tokens) org:read: Read organization information org:write: Update organization settings org:admin: Full organization administration user:read: Read user profiles user:write: Update user profiles user:invite: Invite new users user:delete: Delete users usergroup:read: Read user groups usergroup:write: Create and manage user groups team:read: Read team information team:write: Create and manage teams kb:read: Read knowledge bases and records kb:write: Create and update knowledge bases kb:delete: Delete knowledge bases and records kb:upload: Upload files to knowledge bases semantic:read: Read semantic search results and history semantic:write: Execute semantic search semantic:delete: Delete semantic search history conversation:read: Read conversations conversation:write: Create and manage conversations conversation:chat: Send messages in conversations project:read: Read projects and their conversations project:write: Create and manage projects project:delete: Delete projects agent:read: Read AI agents agent:write: Create and manage AI agents agent:execute: Execute AI agents connector:read: Read connector configurations connector:write: Create and update connectors connector:sync: Trigger connector synchronization connector:delete: Delete connectors config:read: Read system configuration config:write: Update system configuration crawl:read: Read crawling jobs crawl:write: Create and manage crawling jobs crawl:delete: Delete crawling jobs clientCredentials: tokenUrl: /api/v1/oauth2/token scopes: openid: OpenID Connect authentication profile: User profile information email: User email address offline_access: Offline access (refresh tokens) org:read: Read organization information org:write: Update organization settings org:admin: Full organization administration user:read: Read user profiles user:write: Update user profiles user:invite: Invite new users user:delete: Delete users usergroup:read: Read user groups usergroup:write: Create and manage user groups team:read: Read team information team:write: Create and manage teams kb:read: Read knowledge bases and records kb:write: Create and update knowledge bases kb:delete: Delete knowledge bases and records kb:upload: Upload files to knowledge bases semantic:write: Execute semantic search semantic:read: Read semantic search results and history semantic:delete: Delete semantic search history conversation:read: Read conversations conversation:write: Create and manage conversations conversation:chat: Send messages in conversations project:read: Read projects and their conversations project:write: Create and manage projects project:delete: Delete projects agent:read: Read AI agents agent:write: Create and manage AI agents agent:execute: Execute AI agents connector:read: Read connector configurations connector:write: Create and update connectors connector:sync: Trigger connector synchronization connector:delete: Delete connectors config:read: Read system configuration config:write: Update system configuration crawl:read: Read crawling jobs crawl:write: Create and manage crawling jobs x-refined-from: - pipeshub-openapi.yaml - pipeshub-openapi.yml