> ## Documentation Index
> Fetch the complete documentation index at: https://docs.gostudio.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Get tool metadata

> Returns the available models, their credit cost and tier, the default model, tier aliases, polling timings, and UI hints. Call this instead of hard-coding model IDs — the model list changes over time.

Allowed callers: `user`, `internal`.




## OpenAPI

````yaml /openapi.yaml get /api/v2/apps/watermark-remover/info
openapi: 3.0.3
info:
  title: GoStudio Watermark Remover API
  version: 2.0.0
  description: >
    The Watermark Remover endpoints of the GoStudio v2 REST API. Every response
    uses a standard envelope: successes return `{ status, data }`; errors return
    `{ status, error: { type, code, dev, message } }`.


    Every endpoint here takes a **Supabase user JWT** as a Bearer token. An
    `internal` service token is accepted by the auth layer but carries no user
    identity, so it cannot be used to generate or look up a job. The one
    exception is the provider callback, which is authenticated by signature
    rather than by a caller token.
servers:
  - url: https://www.gostudio.ai
    description: Production
security:
  - bearerAuth: []
tags:
  - name: Watermark Remover
    description: AI watermark removal — orchestration, model metadata, and job polling.
  - name: Webhooks
    description: Endpoints called by external services, not by your application.
paths:
  /api/v2/apps/watermark-remover/info:
    get:
      tags:
        - Watermark Remover
      summary: Get tool metadata
      description: >
        Returns the available models, their credit cost and tier, the default
        model, tier aliases, polling timings, and UI hints. Call this instead of
        hard-coding model IDs — the model list changes over time.


        Allowed callers: `user`, `internal`.
      operationId: getWatermarkInfo
      responses:
        '200':
          description: Tool metadata returned successfully.
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: integer
                    example: 200
                  data:
                    $ref: '#/components/schemas/WatermarkInfo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/ServerError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  schemas:
    WatermarkInfo:
      type: object
      properties:
        tool:
          type: object
          properties:
            id:
              type: string
              example: watermark-remover
            name:
              type: string
            flow_type:
              type: string
              example: ai_tools
            cta_label:
              type: string
            result_label:
              type: string
            input:
              type: object
              nullable: true
              properties:
                kind:
                  type: string
                accept:
                  type: string
                max_mb:
                  type: number
            output:
              type: object
              nullable: true
              properties:
                kind:
                  type: string
        default_model:
          type: string
          example: dewatermark/watermark-remover-pro
        tiers:
          type: object
          description: Friendly tier alias to model ID.
          additionalProperties:
            type: string
          example:
            lite: dewatermark/watermark-remover-pro
            pro: replicate/pruna-image-edit
            advance: astria/seedream-5-pro
        models:
          type: array
          items:
            $ref: '#/components/schemas/WatermarkModelInfo'
        polling:
          type: object
          description: Recommended client polling behaviour for async jobs.
          properties:
            interval_ms:
              type: integer
              example: 3000
            timeout_ms:
              type: integer
              example: 240000
        prompt:
          type: object
          nullable: true
          properties:
            label:
              type: string
            placeholder:
              type: string
            optional:
              type: boolean
            suggestions:
              type: array
              items:
                type: string
    WatermarkModelInfo:
      type: object
      properties:
        id:
          type: string
        display_name:
          type: string
        description:
          type: string
          nullable: true
        tier:
          type: string
          nullable: true
          example: lite
        provider:
          type: string
          example: dewatermark
        return_mode:
          type: string
          description: Whether this model returns synchronously or asynchronously.
        requires_prompt:
          type: boolean
        pricing:
          type: object
          properties:
            type:
              type: string
              example: flat
            credits:
              type: number
              example: 4
        aspect_ratios:
          type: array
          nullable: true
          items:
            type: string
        resolutions:
          type: array
          nullable: true
          items:
            type: string
        defaults:
          type: object
          additionalProperties: true
          nullable: true
        async_timers:
          type: object
          nullable: true
          description: UI hints for how long to wait before reassuring or offering cancel.
          properties:
            still_working_copy_at_ms:
              type: integer
            cancel_retry_button_at_ms:
              type: integer
    ErrorResponse:
      type: object
      properties:
        status:
          type: integer
          example: 400
        error:
          type: object
          properties:
            type:
              type: string
              example: validation_error
            code:
              type: string
              example: invalid_input
            dev:
              type: integer
              example: 40001
            message:
              type: string
              example: Some information is invalid.
  responses:
    Unauthorized:
      description: Missing or invalid Authorization Bearer token.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status: 401
            error:
              type: authentication_error
              code: unauthorized
              dev: 40100
              message: Missing or invalid Authorization Bearer token.
    Forbidden:
      description: Caller type not allowed for this endpoint.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status: 403
            error:
              type: permission_error
              code: forbidden
              dev: 40300
              message: You don't have permission for this action.
    RateLimited:
      description: Too many requests.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status: 429
            error:
              type: rate_limit_error
              code: rate_limited
              dev: 42900
              message: You're doing that too often. Please wait a moment.
    ServerError:
      description: Unexpected server error.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status: 500
            error:
              type: system_error
              code: internal_error
              dev: 50000
              message: Something went wrong on our end.
    ServiceUnavailable:
      description: >
        A dependency is temporarily unavailable. Auth-dependent endpoints return
        `service_unavailable` (dev 50300) when the auth provider is down;
        generation endpoints return `model_unavailable` (dev 50301) when the
        model provider is. Both are safe to retry with backoff.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            status: 503
            error:
              type: system_error
              code: service_unavailable
              dev: 50300
              message: Auth service is temporarily unavailable.
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        Supabase user JWT (or an internal service token). Send as
        `Authorization: Bearer <token>`.

````