# Watermark

## Delete

`teams.watermark.delete(strteam_id)  -> WatermarkDeleteResponse`

**delete** `/teams/{teamId}/watermark`

Delete the team's forced watermark configuration

### Parameters

- `team_id: str`

### Returns

- `class WatermarkDeleteResponse: …`

  - `deleted: bool`

### Example

```python
import os
from scenario_sdk import Scenario

client = Scenario(
    api_key=os.environ.get("SCENARIO_SDK_API_KEY"),  # This is the default and can be omitted
    api_secret=os.environ.get("SCENARIO_SDK_API_SECRET"),  # This is the default and can be omitted
)
watermark = client.teams.watermark.delete(
    "teamId",
)
print(watermark.deleted)
```

#### Response

```json
{
  "deleted": true
}
```

## Delete Logo

`teams.watermark.delete_logo(strteam_id)  -> WatermarkDeleteLogoResponse`

**delete** `/teams/{teamId}/watermark/logo`

Remove the team's watermark logo, falling back to its configured text

### Parameters

- `team_id: str`

### Returns

- `class WatermarkDeleteLogoResponse: …`

  - `watermark: Watermark`

    Forced-watermark configuration stored at one scope.

    - `id: str`

      Stable identifier derived from level + scopeId

    - `created_at: str`

      ISO-8601 creation timestamp

    - `created_by: str`

      User id that last wrote the configuration

    - `enabled: bool`

      Whether the watermark is enforced on assets generated in this scope. A
      disabled project configuration falls back to its team's.

    - `level: Literal["project", "team"]`

      Scope this configuration applies to: team or project

      - `"project"`

      - `"team"`

    - `opacity: float`

      Mark opacity, 0.05 (barely visible) to 1 (opaque)

    - `placement: Literal["bottom-left", "bottom-right", "center", 3 more]`

      Where the mark sits on the image

      - `"bottom-left"`

      - `"bottom-right"`

      - `"center"`

      - `"tiled"`

      - `"top-left"`

      - `"top-right"`

    - `rotation: float`

      Mark rotation in degrees, -90 to 90. 0 is horizontal.

    - `scale: float`

      Mark width as a fraction of the image width

    - `scope_id: str`

      The id of the team or project that owns this configuration

    - `spacing: float`

      Gap between repetitions, as a fraction of the mark's own size. Tiled
      placement only; 0 repeats the mark edge to edge.

    - `updated_at: str`

      ISO-8601 last-update timestamp

    - `version: float`

      Bumped on every write.

    - `deleted_at: Optional[str]`

      Set when the configuration has been deleted.

    - `logo_is_opaque: Optional[bool]`

      Whether the stored logo has no transparency at all.

      Recorded at upload so the UI can warn without decoding the image again: an
      opaque logo draws its whole rectangle, which a rotated tiled mark turns
      into a very visible diamond.

    - `logo_key: Optional[str]`

      Where the uploaded logo lives, when one is set.

    - `text: Optional[str]`

      Text rendered as the mark, when no logo is set

### Example

```python
import os
from scenario_sdk import Scenario

client = Scenario(
    api_key=os.environ.get("SCENARIO_SDK_API_KEY"),  # This is the default and can be omitted
    api_secret=os.environ.get("SCENARIO_SDK_API_SECRET"),  # This is the default and can be omitted
)
response = client.teams.watermark.delete_logo(
    "teamId",
)
print(response.watermark)
```

#### Response

```json
{
  "watermark": {
    "id": "id",
    "createdAt": "createdAt",
    "createdBy": "createdBy",
    "enabled": true,
    "level": "project",
    "opacity": 0,
    "placement": "bottom-left",
    "rotation": 0,
    "scale": 0,
    "scopeId": "scopeId",
    "spacing": 0,
    "updatedAt": "updatedAt",
    "version": 0,
    "deletedAt": "deletedAt",
    "logoIsOpaque": true,
    "logoKey": "logoKey",
    "text": "text"
  }
}
```

## Preview

`teams.watermark.preview(strteam_id, WatermarkPreviewParams**kwargs)  -> WatermarkPreviewResponse`

**post** `/teams/{teamId}/watermark/preview`

Draw the given watermark settings on a sample image, without saving them

### Parameters

- `team_id: str`

- `opacity: Optional[float]`

  Mark opacity, 0.05 (barely visible) to 1 (opaque)

- `placement: Optional[Literal["bottom-left", "bottom-right", "center", 3 more]]`

  Where the mark sits on the image

  - `"bottom-left"`

  - `"bottom-right"`

  - `"center"`

  - `"tiled"`

  - `"top-left"`

  - `"top-right"`

- `rotation: Optional[float]`

  Mark rotation in degrees. 0 is horizontal, negative tilts it up.

- `scale: Optional[float]`

  Mark width as a fraction of the image width

- `spacing: Optional[float]`

  Gap between repetitions, as a fraction of the mark's own size. Only drawn
  for the tiled placement; 0 repeats the mark edge to edge.

- `text: Optional[str]`

  Text to draw. Optional only because a logo can stand in for it.

### Returns

- `class WatermarkPreviewResponse: …`

  Response of the watermark preview routes.

  - `image: str`

    The sample image with the mark drawn on it, base64-encoded.

### Example

```python
import os
from scenario_sdk import Scenario

client = Scenario(
    api_key=os.environ.get("SCENARIO_SDK_API_KEY"),  # This is the default and can be omitted
    api_secret=os.environ.get("SCENARIO_SDK_API_SECRET"),  # This is the default and can be omitted
)
response = client.teams.watermark.preview(
    team_id="teamId",
)
print(response.image)
```

#### Response

```json
{
  "image": "image"
}
```

## Retrieve

`teams.watermark.retrieve(strteam_id)  -> WatermarkRetrieveResponse`

**get** `/teams/{teamId}/watermark`

Get the team's forced watermark configuration

### Parameters

- `team_id: str`

### Returns

- `class WatermarkRetrieveResponse: …`

  - `watermark: Watermark`

    Forced-watermark configuration stored at one scope.

    - `id: str`

      Stable identifier derived from level + scopeId

    - `created_at: str`

      ISO-8601 creation timestamp

    - `created_by: str`

      User id that last wrote the configuration

    - `enabled: bool`

      Whether the watermark is enforced on assets generated in this scope. A
      disabled project configuration falls back to its team's.

    - `level: Literal["project", "team"]`

      Scope this configuration applies to: team or project

      - `"project"`

      - `"team"`

    - `opacity: float`

      Mark opacity, 0.05 (barely visible) to 1 (opaque)

    - `placement: Literal["bottom-left", "bottom-right", "center", 3 more]`

      Where the mark sits on the image

      - `"bottom-left"`

      - `"bottom-right"`

      - `"center"`

      - `"tiled"`

      - `"top-left"`

      - `"top-right"`

    - `rotation: float`

      Mark rotation in degrees, -90 to 90. 0 is horizontal.

    - `scale: float`

      Mark width as a fraction of the image width

    - `scope_id: str`

      The id of the team or project that owns this configuration

    - `spacing: float`

      Gap between repetitions, as a fraction of the mark's own size. Tiled
      placement only; 0 repeats the mark edge to edge.

    - `updated_at: str`

      ISO-8601 last-update timestamp

    - `version: float`

      Bumped on every write.

    - `deleted_at: Optional[str]`

      Set when the configuration has been deleted.

    - `logo_is_opaque: Optional[bool]`

      Whether the stored logo has no transparency at all.

      Recorded at upload so the UI can warn without decoding the image again: an
      opaque logo draws its whole rectangle, which a rotated tiled mark turns
      into a very visible diamond.

    - `logo_key: Optional[str]`

      Where the uploaded logo lives, when one is set.

    - `text: Optional[str]`

      Text rendered as the mark, when no logo is set

### Example

```python
import os
from scenario_sdk import Scenario

client = Scenario(
    api_key=os.environ.get("SCENARIO_SDK_API_KEY"),  # This is the default and can be omitted
    api_secret=os.environ.get("SCENARIO_SDK_API_SECRET"),  # This is the default and can be omitted
)
watermark = client.teams.watermark.retrieve(
    "teamId",
)
print(watermark.watermark)
```

#### Response

```json
{
  "watermark": {
    "id": "id",
    "createdAt": "createdAt",
    "createdBy": "createdBy",
    "enabled": true,
    "level": "project",
    "opacity": 0,
    "placement": "bottom-left",
    "rotation": 0,
    "scale": 0,
    "scopeId": "scopeId",
    "spacing": 0,
    "updatedAt": "updatedAt",
    "version": 0,
    "deletedAt": "deletedAt",
    "logoIsOpaque": true,
    "logoKey": "logoKey",
    "text": "text"
  }
}
```

## Update

`teams.watermark.update(strteam_id, WatermarkUpdateParams**kwargs)  -> WatermarkUpdateResponse`

**put** `/teams/{teamId}/watermark`

Create or update the team's forced watermark configuration

### Parameters

- `team_id: str`

- `enabled: bool`

  Whether the watermark is enforced on assets generated in this scope. A
  disabled project configuration falls back to its team's.

- `opacity: Optional[float]`

  Mark opacity, 0.05 (barely visible) to 1 (opaque)

- `placement: Optional[Literal["bottom-left", "bottom-right", "center", 3 more]]`

  Where the mark sits on the image

  - `"bottom-left"`

  - `"bottom-right"`

  - `"center"`

  - `"tiled"`

  - `"top-left"`

  - `"top-right"`

- `rotation: Optional[float]`

  Mark rotation in degrees. 0 is horizontal, negative tilts it up.

- `scale: Optional[float]`

  Mark width as a fraction of the image width

- `spacing: Optional[float]`

  Gap between repetitions, as a fraction of the mark's own size. Only drawn
  for the tiled placement; 0 repeats the mark edge to edge.

- `text: Optional[str]`

  Text rendered as the mark. Ignored while a logo is set.

### Returns

- `class WatermarkUpdateResponse: …`

  - `watermark: Watermark`

    Forced-watermark configuration stored at one scope.

    - `id: str`

      Stable identifier derived from level + scopeId

    - `created_at: str`

      ISO-8601 creation timestamp

    - `created_by: str`

      User id that last wrote the configuration

    - `enabled: bool`

      Whether the watermark is enforced on assets generated in this scope. A
      disabled project configuration falls back to its team's.

    - `level: Literal["project", "team"]`

      Scope this configuration applies to: team or project

      - `"project"`

      - `"team"`

    - `opacity: float`

      Mark opacity, 0.05 (barely visible) to 1 (opaque)

    - `placement: Literal["bottom-left", "bottom-right", "center", 3 more]`

      Where the mark sits on the image

      - `"bottom-left"`

      - `"bottom-right"`

      - `"center"`

      - `"tiled"`

      - `"top-left"`

      - `"top-right"`

    - `rotation: float`

      Mark rotation in degrees, -90 to 90. 0 is horizontal.

    - `scale: float`

      Mark width as a fraction of the image width

    - `scope_id: str`

      The id of the team or project that owns this configuration

    - `spacing: float`

      Gap between repetitions, as a fraction of the mark's own size. Tiled
      placement only; 0 repeats the mark edge to edge.

    - `updated_at: str`

      ISO-8601 last-update timestamp

    - `version: float`

      Bumped on every write.

    - `deleted_at: Optional[str]`

      Set when the configuration has been deleted.

    - `logo_is_opaque: Optional[bool]`

      Whether the stored logo has no transparency at all.

      Recorded at upload so the UI can warn without decoding the image again: an
      opaque logo draws its whole rectangle, which a rotated tiled mark turns
      into a very visible diamond.

    - `logo_key: Optional[str]`

      Where the uploaded logo lives, when one is set.

    - `text: Optional[str]`

      Text rendered as the mark, when no logo is set

### Example

```python
import os
from scenario_sdk import Scenario

client = Scenario(
    api_key=os.environ.get("SCENARIO_SDK_API_KEY"),  # This is the default and can be omitted
    api_secret=os.environ.get("SCENARIO_SDK_API_SECRET"),  # This is the default and can be omitted
)
watermark = client.teams.watermark.update(
    team_id="teamId",
    enabled=True,
)
print(watermark.watermark)
```

#### Response

```json
{
  "watermark": {
    "id": "id",
    "createdAt": "createdAt",
    "createdBy": "createdBy",
    "enabled": true,
    "level": "project",
    "opacity": 0,
    "placement": "bottom-left",
    "rotation": 0,
    "scale": 0,
    "scopeId": "scopeId",
    "spacing": 0,
    "updatedAt": "updatedAt",
    "version": 0,
    "deletedAt": "deletedAt",
    "logoIsOpaque": true,
    "logoKey": "logoKey",
    "text": "text"
  }
}
```

## Update Logo

`teams.watermark.update_logo(strteam_id, WatermarkUpdateLogoParams**kwargs)  -> WatermarkUpdateLogoResponse`

**put** `/teams/{teamId}/watermark/logo`

Upload the team's watermark logo, used as the mark instead of its text

### Parameters

- `team_id: str`

- `logo: str`

  The logo image, base64-encoded, at most 1 MB and 4 megapixels once decoded.
  PNG, JPEG and WebP are accepted; SVG is refused. Stored as PNG.

### Returns

- `class WatermarkUpdateLogoResponse: …`

  - `watermark: Watermark`

    Forced-watermark configuration stored at one scope.

    - `id: str`

      Stable identifier derived from level + scopeId

    - `created_at: str`

      ISO-8601 creation timestamp

    - `created_by: str`

      User id that last wrote the configuration

    - `enabled: bool`

      Whether the watermark is enforced on assets generated in this scope. A
      disabled project configuration falls back to its team's.

    - `level: Literal["project", "team"]`

      Scope this configuration applies to: team or project

      - `"project"`

      - `"team"`

    - `opacity: float`

      Mark opacity, 0.05 (barely visible) to 1 (opaque)

    - `placement: Literal["bottom-left", "bottom-right", "center", 3 more]`

      Where the mark sits on the image

      - `"bottom-left"`

      - `"bottom-right"`

      - `"center"`

      - `"tiled"`

      - `"top-left"`

      - `"top-right"`

    - `rotation: float`

      Mark rotation in degrees, -90 to 90. 0 is horizontal.

    - `scale: float`

      Mark width as a fraction of the image width

    - `scope_id: str`

      The id of the team or project that owns this configuration

    - `spacing: float`

      Gap between repetitions, as a fraction of the mark's own size. Tiled
      placement only; 0 repeats the mark edge to edge.

    - `updated_at: str`

      ISO-8601 last-update timestamp

    - `version: float`

      Bumped on every write.

    - `deleted_at: Optional[str]`

      Set when the configuration has been deleted.

    - `logo_is_opaque: Optional[bool]`

      Whether the stored logo has no transparency at all.

      Recorded at upload so the UI can warn without decoding the image again: an
      opaque logo draws its whole rectangle, which a rotated tiled mark turns
      into a very visible diamond.

    - `logo_key: Optional[str]`

      Where the uploaded logo lives, when one is set.

    - `text: Optional[str]`

      Text rendered as the mark, when no logo is set

### Example

```python
import os
from scenario_sdk import Scenario

client = Scenario(
    api_key=os.environ.get("SCENARIO_SDK_API_KEY"),  # This is the default and can be omitted
    api_secret=os.environ.get("SCENARIO_SDK_API_SECRET"),  # This is the default and can be omitted
)
response = client.teams.watermark.update_logo(
    team_id="teamId",
    logo="logo",
)
print(response.watermark)
```

#### Response

```json
{
  "watermark": {
    "id": "id",
    "createdAt": "createdAt",
    "createdBy": "createdBy",
    "enabled": true,
    "level": "project",
    "opacity": 0,
    "placement": "bottom-left",
    "rotation": 0,
    "scale": 0,
    "scopeId": "scopeId",
    "spacing": 0,
    "updatedAt": "updatedAt",
    "version": 0,
    "deletedAt": "deletedAt",
    "logoIsOpaque": true,
    "logoKey": "logoKey",
    "text": "text"
  }
}
```

## Domain Types

### Watermark Delete Response

- `class WatermarkDeleteResponse: …`

  - `deleted: bool`

### Watermark Delete Logo Response

- `class WatermarkDeleteLogoResponse: …`

  - `watermark: Watermark`

    Forced-watermark configuration stored at one scope.

    - `id: str`

      Stable identifier derived from level + scopeId

    - `created_at: str`

      ISO-8601 creation timestamp

    - `created_by: str`

      User id that last wrote the configuration

    - `enabled: bool`

      Whether the watermark is enforced on assets generated in this scope. A
      disabled project configuration falls back to its team's.

    - `level: Literal["project", "team"]`

      Scope this configuration applies to: team or project

      - `"project"`

      - `"team"`

    - `opacity: float`

      Mark opacity, 0.05 (barely visible) to 1 (opaque)

    - `placement: Literal["bottom-left", "bottom-right", "center", 3 more]`

      Where the mark sits on the image

      - `"bottom-left"`

      - `"bottom-right"`

      - `"center"`

      - `"tiled"`

      - `"top-left"`

      - `"top-right"`

    - `rotation: float`

      Mark rotation in degrees, -90 to 90. 0 is horizontal.

    - `scale: float`

      Mark width as a fraction of the image width

    - `scope_id: str`

      The id of the team or project that owns this configuration

    - `spacing: float`

      Gap between repetitions, as a fraction of the mark's own size. Tiled
      placement only; 0 repeats the mark edge to edge.

    - `updated_at: str`

      ISO-8601 last-update timestamp

    - `version: float`

      Bumped on every write.

    - `deleted_at: Optional[str]`

      Set when the configuration has been deleted.

    - `logo_is_opaque: Optional[bool]`

      Whether the stored logo has no transparency at all.

      Recorded at upload so the UI can warn without decoding the image again: an
      opaque logo draws its whole rectangle, which a rotated tiled mark turns
      into a very visible diamond.

    - `logo_key: Optional[str]`

      Where the uploaded logo lives, when one is set.

    - `text: Optional[str]`

      Text rendered as the mark, when no logo is set

### Watermark Preview Response

- `class WatermarkPreviewResponse: …`

  Response of the watermark preview routes.

  - `image: str`

    The sample image with the mark drawn on it, base64-encoded.

### Watermark Retrieve Response

- `class WatermarkRetrieveResponse: …`

  - `watermark: Watermark`

    Forced-watermark configuration stored at one scope.

    - `id: str`

      Stable identifier derived from level + scopeId

    - `created_at: str`

      ISO-8601 creation timestamp

    - `created_by: str`

      User id that last wrote the configuration

    - `enabled: bool`

      Whether the watermark is enforced on assets generated in this scope. A
      disabled project configuration falls back to its team's.

    - `level: Literal["project", "team"]`

      Scope this configuration applies to: team or project

      - `"project"`

      - `"team"`

    - `opacity: float`

      Mark opacity, 0.05 (barely visible) to 1 (opaque)

    - `placement: Literal["bottom-left", "bottom-right", "center", 3 more]`

      Where the mark sits on the image

      - `"bottom-left"`

      - `"bottom-right"`

      - `"center"`

      - `"tiled"`

      - `"top-left"`

      - `"top-right"`

    - `rotation: float`

      Mark rotation in degrees, -90 to 90. 0 is horizontal.

    - `scale: float`

      Mark width as a fraction of the image width

    - `scope_id: str`

      The id of the team or project that owns this configuration

    - `spacing: float`

      Gap between repetitions, as a fraction of the mark's own size. Tiled
      placement only; 0 repeats the mark edge to edge.

    - `updated_at: str`

      ISO-8601 last-update timestamp

    - `version: float`

      Bumped on every write.

    - `deleted_at: Optional[str]`

      Set when the configuration has been deleted.

    - `logo_is_opaque: Optional[bool]`

      Whether the stored logo has no transparency at all.

      Recorded at upload so the UI can warn without decoding the image again: an
      opaque logo draws its whole rectangle, which a rotated tiled mark turns
      into a very visible diamond.

    - `logo_key: Optional[str]`

      Where the uploaded logo lives, when one is set.

    - `text: Optional[str]`

      Text rendered as the mark, when no logo is set

### Watermark Update Response

- `class WatermarkUpdateResponse: …`

  - `watermark: Watermark`

    Forced-watermark configuration stored at one scope.

    - `id: str`

      Stable identifier derived from level + scopeId

    - `created_at: str`

      ISO-8601 creation timestamp

    - `created_by: str`

      User id that last wrote the configuration

    - `enabled: bool`

      Whether the watermark is enforced on assets generated in this scope. A
      disabled project configuration falls back to its team's.

    - `level: Literal["project", "team"]`

      Scope this configuration applies to: team or project

      - `"project"`

      - `"team"`

    - `opacity: float`

      Mark opacity, 0.05 (barely visible) to 1 (opaque)

    - `placement: Literal["bottom-left", "bottom-right", "center", 3 more]`

      Where the mark sits on the image

      - `"bottom-left"`

      - `"bottom-right"`

      - `"center"`

      - `"tiled"`

      - `"top-left"`

      - `"top-right"`

    - `rotation: float`

      Mark rotation in degrees, -90 to 90. 0 is horizontal.

    - `scale: float`

      Mark width as a fraction of the image width

    - `scope_id: str`

      The id of the team or project that owns this configuration

    - `spacing: float`

      Gap between repetitions, as a fraction of the mark's own size. Tiled
      placement only; 0 repeats the mark edge to edge.

    - `updated_at: str`

      ISO-8601 last-update timestamp

    - `version: float`

      Bumped on every write.

    - `deleted_at: Optional[str]`

      Set when the configuration has been deleted.

    - `logo_is_opaque: Optional[bool]`

      Whether the stored logo has no transparency at all.

      Recorded at upload so the UI can warn without decoding the image again: an
      opaque logo draws its whole rectangle, which a rotated tiled mark turns
      into a very visible diamond.

    - `logo_key: Optional[str]`

      Where the uploaded logo lives, when one is set.

    - `text: Optional[str]`

      Text rendered as the mark, when no logo is set

### Watermark Update Logo Response

- `class WatermarkUpdateLogoResponse: …`

  - `watermark: Watermark`

    Forced-watermark configuration stored at one scope.

    - `id: str`

      Stable identifier derived from level + scopeId

    - `created_at: str`

      ISO-8601 creation timestamp

    - `created_by: str`

      User id that last wrote the configuration

    - `enabled: bool`

      Whether the watermark is enforced on assets generated in this scope. A
      disabled project configuration falls back to its team's.

    - `level: Literal["project", "team"]`

      Scope this configuration applies to: team or project

      - `"project"`

      - `"team"`

    - `opacity: float`

      Mark opacity, 0.05 (barely visible) to 1 (opaque)

    - `placement: Literal["bottom-left", "bottom-right", "center", 3 more]`

      Where the mark sits on the image

      - `"bottom-left"`

      - `"bottom-right"`

      - `"center"`

      - `"tiled"`

      - `"top-left"`

      - `"top-right"`

    - `rotation: float`

      Mark rotation in degrees, -90 to 90. 0 is horizontal.

    - `scale: float`

      Mark width as a fraction of the image width

    - `scope_id: str`

      The id of the team or project that owns this configuration

    - `spacing: float`

      Gap between repetitions, as a fraction of the mark's own size. Tiled
      placement only; 0 repeats the mark edge to edge.

    - `updated_at: str`

      ISO-8601 last-update timestamp

    - `version: float`

      Bumped on every write.

    - `deleted_at: Optional[str]`

      Set when the configuration has been deleted.

    - `logo_is_opaque: Optional[bool]`

      Whether the stored logo has no transparency at all.

      Recorded at upload so the UI can warn without decoding the image again: an
      opaque logo draws its whole rectangle, which a rotated tiled mark turns
      into a very visible diamond.

    - `logo_key: Optional[str]`

      Where the uploaded logo lives, when one is set.

    - `text: Optional[str]`

      Text rendered as the mark, when no logo is set
