> ## 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.

# Provider callback (internal)

> Receives async completion callbacks from the upstream model providers (Replicate, Astria, Fal). **Not for your application to call** — configure `webhook_url` on a generation request to receive results instead.

This endpoint is unauthenticated by design and always answers `200` with `{ "received": true }`, even for unparseable or unmatched payloads, so a provider never enters a retry storm. It does not use the standard response envelope.




## OpenAPI

````yaml /openapi.yaml post /api/v2/apps/watermark-remover/webhook
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/webhook:
    post:
      tags:
        - Webhooks
      summary: Provider callback (internal)
      description: >
        Receives async completion callbacks from the upstream model providers
        (Replicate, Astria, Fal). **Not for your application to call** —
        configure `webhook_url` on a generation request to receive results
        instead.


        This endpoint is unauthenticated by design and always answers `200` with
        `{ "received": true }`, even for unparseable or unmatched payloads, so a
        provider never enters a retry storm. It does not use the standard
        response envelope.
      operationId: watermarkProviderWebhook
      requestBody:
        required: true
        description: Provider-specific payload. The shape varies by provider.
        content:
          application/json:
            schema:
              type: object
              additionalProperties: true
      responses:
        '200':
          description: Acknowledged. Always returned, regardless of outcome.
          content:
            application/json:
              schema:
                type: object
                properties:
                  received:
                    type: boolean
                    example: true
      security: []
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: >
        Supabase user JWT (or an internal service token). Send as
        `Authorization: Bearer <token>`.

````