Skip to content
Get started

Teams

Delete Invitations
teams.delete_invitations(strteam_id, TeamDeleteInvitationsParams**kwargs) -> object
DELETE/teams/{teamId}/invitations
List
teams.list() -> TeamListResponse
GET/teams
Retrieve
teams.retrieve(strteam_id) -> TeamRetrieveResponse
GET/teams/{teamId}
Retrieve Limits
teams.retrieve_limits(strteam_id) -> TeamRetrieveLimitsResponse
GET/teams/{teamId}/limits
Update
teams.update(strteam_id, TeamUpdateParams**kwargs) -> TeamUpdateResponse
PUT/teams/{teamId}
ModelsExpand Collapse
class TeamListResponse: …
teams: List[Team]

A list of the teams the user belongs to

id: str

The team ID (example: “eyVcnFJcR92BxBkz7N6g5w”)

context: TeamContext

The context of the team for the current authenticated user

invitations_count: float

The number of invitations on this team

keys_count: float

The number of API keys on this team

user_role: Literal["admin", "key", "member"]

The authenticated user’s role for this team

One of the following:
"admin"
"key"
"member"
users_count: float

The number of users on this team

created_at: str

The team creation date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

name: str

The team name (example: “Scenario”)

plan: Literal["cu-basic", "cu-creator", "cu-max", 9 more]

The team plan

One of the following:
"cu-basic"
"cu-creator"
"cu-max"
"cu-pro"
"cu-pro-q3-25"
"cu-team"
"cu-team-v2"
"enterprise"
"essential"
"free"
"premium"
"pro"
projects: List[TeamProject]

Projects of the team

id: str
created_at: str
name: str
updated_at: str
avatar: Optional[TeamProjectAvatar]
asset_id: Optional[str]

ID of the asset used as thumbnail if provided, otherwise undefined

url: Optional[str]

Signed URL of the assetId or free url if assetId is undefined

disable_ip_detection: Optional[bool]

When true, IP detection is switched off for this project.

quality_gate_auto_detect: Optional[bool]

Whether Quality Gate auto-detection runs on generation for this project.

type: Literal["personal", "shared"]

The team type

One of the following:
"personal"
"shared"
updated_at: str

The team update date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

avatar: Optional[TeamAvatar]

The team’s avatar

asset_id: Optional[str]

ID of the asset used as thumbnail if provided, otherwise undefined

url: Optional[str]

Signed URL of the assetId or free url if assetId is undefined

byok: Optional[TeamByok]

BYOK pricing override. Admin-only — omitted for non-admin callers.

markup_multiplier: float
updated_at: Optional[str]

ISO timestamp of the last update. Optional — legacy rows may lack it.

updated_by: Optional[str]

Human-readable handle of who last updated the markup (display name).

default_user_max_consumption: Optional[float]

Team-wide default max consumption (CU) applied to every member over the billing period, unless overridden per member. Absent when no team-wide default is set.

ip_detection_enforcement: Optional[Literal["active-fail-closed", "active-fail-open", "disabled"]]

The IP detection enforcement posture for the team. ‘disabled’: IP detection is not performed. ‘active-fail-open’: IP detection runs; on detector error the request is allowed through. ‘active-fail-closed’: IP detection runs; on detector error the request is blocked.

One of the following:
"active-fail-closed"
"active-fail-open"
"disabled"
quality_gate_auto_detect: Optional[bool]

Quality Gate auto-detection default for the team.

class TeamRetrieveResponse: …
team: Team
id: str

The team ID (example: “eyVcnFJcR92BxBkz7N6g5w”)

created_at: str

The team creation date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

invitations: List[TeamInvitation]

The list of pending invitations

created_at: str

The user creation date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

email: str

The invited user email (example: “herve@scenario.com”)

role: Literal["admin", "key", "member"]

The role of the invited user inside the team

One of the following:
"admin"
"key"
"member"
status: Literal["accepted", "expired", "pending", "withdrawn"]

The status of the invitation

One of the following:
"accepted"
"expired"
"pending"
"withdrawn"
url: str

The link the invited user opens to accept the invitation, as sent by email

project_ids: Optional[List[str]]

The list of project IDs for which the user is invited

keys: List[TeamKey]

The list of API keys

id: str

The key’s member id (its API user id, apiu_...), taken by the member and usage routes (example: “apiu_eyVcnFJcR92BxBkz7N6g5w”)

api_key_id: str

The API key id (api_...), taken by the api-keys routes (example: “api_eyVcnFJcR92BxBkz7N6g5w”)

api_key_status: Literal["active", "inactive"]

The status of the API key

One of the following:
"active"
"inactive"
created_at: str

The API key creation date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

name: str

The API key name (example: “eurv-scenario”)

scope: Literal["project", "team"]

The scope of the API key: ‘project’ for project-scoped keys, ‘team’ for team-scoped keys

One of the following:
"project"
"team"
updated_at: str

The API key last update date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

author_id: Optional[str]

The member who created the key: a human, or the member id (apiu_...) of the team API key that created it.

consumption: Optional[float]

Consumption (CU) used by this key over the current billing period.

last_used_at: Optional[str]

The date the API key was last used to authenticate a request, as an ISO string (example: “2023-02-03T11:19:41.579Z”). Absent if the key has never been used.

max_consumption: Optional[float]

The key’s effective consumption (CU) cap for the period (per-key override, else the team-wide default). Absent when the key is uncapped.

owner_id: Optional[str]

For a PROJECT key: the project it was created on (the team id on some legacy keys). Absent for team keys.

projects: Optional[List[TeamKeyProject]]

For a PROJECT key: the projects it has access to and its role on each. Empty when the key is currently not a member of any (live) project. Absent for team keys.

project_id: str

The project the key has a role on

role: str

The key’s role on this project: a built-in role (admin/editor/reader) or a custom ;-separated scope list (example: "asset.read;model.read").

role: Optional[str]

The key’s role. For a TEAM key: its effective team-plane scopes as a ;-separated list (e.g. "team.read;team.usage.read"). Project keys carry their project-plane role(s) per project in projects instead.

name: str

The team name (example: “Scenario”)

payment_status: Literal["failed", "succeeded"]

The paymentStatus for the team

One of the following:
"failed"
"succeeded"
plan: Literal["cu-basic", "cu-creator", "cu-max", 9 more]

The team plan

One of the following:
"cu-basic"
"cu-creator"
"cu-max"
"cu-pro"
"cu-pro-q3-25"
"cu-team"
"cu-team-v2"
"enterprise"
"essential"
"free"
"premium"
"pro"
projects: List[TeamProject]

Projects of the team

id: str
created_at: str
name: str
updated_at: str
avatar: Optional[TeamProjectAvatar]
asset_id: Optional[str]

ID of the asset used as thumbnail if provided, otherwise undefined

url: Optional[str]

Signed URL of the assetId or free url if assetId is undefined

disable_ip_detection: Optional[bool]

When true, IP detection is switched off for this project.

quality_gate_auto_detect: Optional[bool]

Whether Quality Gate auto-detection runs on generation for this project.

search_host: str

The search host for the team

search_indexes: TeamSearchIndexes

The search indexes for the team

assets: TeamSearchIndexesAssets
private: str

The private search index for the team

public: str

The public search index for the team

models: TeamSearchIndexesModels
private: str

The private search index for the team

public: str

The public search index for the team

workflows: TeamSearchIndexesWorkflows
private: str

The private search index for the team

public: str

The public search index for the team

type: Literal["personal", "shared"]

The team type

One of the following:
"personal"
"shared"
updated_at: str

The team update date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

users: List[TeamUser]

The list of teams members and their role

id: str

The user ID (example: “eyVcnFJcR92BxBkz7N6g5w”)

created_at: str

The user creation date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

email: str

The user email (example: “herve@scenario.com”)

role: Literal["admin", "key", "member"]

The role of the user inside the team

One of the following:
"admin"
"key"
"member"
updated_at: str

The user last update date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

avatar: Optional[TeamUserAvatar]

The user’s avatar

asset_id: Optional[str]

ID of the asset used as thumbnail if provided, otherwise undefined

url: Optional[str]

Signed URL of the assetId or free url if assetId is undefined

consumption: Optional[float]

Consumption (CU) used by this member over the current billing period.

max_consumption: Optional[float]

The member’s effective consumption (CU) cap for the period (per-user override, else the team-wide default). Absent when the member is uncapped.

avatar: Optional[TeamAvatar]

The team’s avatar

asset_id: Optional[str]

ID of the asset used as thumbnail if provided, otherwise undefined

url: Optional[str]

Signed URL of the assetId or free url if assetId is undefined

byok: Optional[TeamByok]

BYOK pricing override. Admin-only — omitted for non-admin callers.

markup_multiplier: float
updated_at: Optional[str]

ISO timestamp of the last update. Optional — legacy rows may lack it.

updated_by: Optional[str]

Human-readable handle of who last updated the markup (display name).

default_user_max_consumption: Optional[float]

Team-wide default max consumption (CU) applied to every member over the billing period, unless overridden per member. Absent when no team-wide default is set.

ip_detection_enforcement: Optional[Literal["active-fail-closed", "active-fail-open", "disabled"]]

The IP detection enforcement posture for the team. ‘disabled’: IP detection is not performed. ‘active-fail-open’: IP detection runs; on detector error the request is allowed through. ‘active-fail-closed’: IP detection runs; on detector error the request is blocked.

One of the following:
"active-fail-closed"
"active-fail-open"
"disabled"
quality_gate_auto_detect: Optional[bool]

Quality Gate auto-detection default for the team.

settings: Optional[TeamSettings]

Team settings. Returned on GET and PUT /teams/{teamId}, absent from the teams list.

homepage: Optional[Dict[str, object]]

Published homepage layout.

subscription_status: Optional[Literal["active", "inactive", "paused"]]

The subscriptionStatus for the team

One of the following:
"active"
"inactive"
"paused"
class TeamRetrieveLimitsResponse: …
limits: Limits

The actual billing limits values related to the plan

api_keys: float
canvas_asset_layers: float
canvas_assets: float
collections: float
creative_units: float

The amount of Compute Units available for the plan

default_seats: float
download_assets: float
download_model: float
inference_batch_size: float
max_cooldown: float

The maximum cooldown applied in case of over head

max_training_datasets: float
min_cooldown: float

The minimum cooldown applied in case of over head

models: float

The maximum models a project can have (train/upload/copy/transfer/…)

otp_sessions: float
parallel_custom_jobs: float
parallel_inferences: float
parallel_training: float
parallel_workflow_runs: float
premium_generation_samples: float
projects: float

The maximum projects a team can have

scaling_factor: float
seats: float
snapshots_retention: float
upload: float
one_shot_creative_units: List[OneShotCreativeUnit]

The list of one-shot Compute Units

Can be empty if the team has no one-shot Compute Units

amount: float

The Compute Units amount bought

created_at: str

The creation date of the Compute Units (buy date) ISO string

expiration: str

The expiration date of the Compute Units ISO string

remaining: float

The remaining Compute Units available

updated_at: str

The last update date of the Compute Units (use date) ISO string

period: Period

The actual billing period start and end dates ISO strings

end: str
start: str
plan: Literal["cu-basic", "cu-creator", "cu-max", 9 more]

The actual plan of the team

One of the following:
"cu-basic"
"cu-creator"
"cu-max"
"cu-pro"
"cu-pro-q3-25"
"cu-team"
"cu-team-v2"
"enterprise"
"essential"
"free"
"premium"
"pro"
values: Values

The current value for each relevant limit in the billing period

api_keys: float
canvas_assets: float
collections: float
creative_units: float
projects: float
seats: float
class TeamUpdateResponse: …
team: Team

The updated team.

id: str

The team ID (example: “eyVcnFJcR92BxBkz7N6g5w”)

context: TeamContext

The context of the team for the current authenticated user

invitations_count: float

The number of invitations on this team

keys_count: float

The number of API keys on this team

user_role: Literal["admin", "key", "member"]

The authenticated user’s role for this team

One of the following:
"admin"
"key"
"member"
users_count: float

The number of users on this team

created_at: str

The team creation date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

name: str

The team name (example: “Scenario”)

plan: Literal["cu-basic", "cu-creator", "cu-max", 9 more]

The team plan

One of the following:
"cu-basic"
"cu-creator"
"cu-max"
"cu-pro"
"cu-pro-q3-25"
"cu-team"
"cu-team-v2"
"enterprise"
"essential"
"free"
"premium"
"pro"
projects: List[TeamProject]

Projects of the team

id: str
created_at: str
name: str
updated_at: str
avatar: Optional[TeamProjectAvatar]
asset_id: Optional[str]

ID of the asset used as thumbnail if provided, otherwise undefined

url: Optional[str]

Signed URL of the assetId or free url if assetId is undefined

disable_ip_detection: Optional[bool]

When true, IP detection is switched off for this project.

quality_gate_auto_detect: Optional[bool]

Whether Quality Gate auto-detection runs on generation for this project.

type: Literal["personal", "shared"]

The team type

One of the following:
"personal"
"shared"
updated_at: str

The team update date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

avatar: Optional[TeamAvatar]

The team’s avatar

asset_id: Optional[str]

ID of the asset used as thumbnail if provided, otherwise undefined

url: Optional[str]

Signed URL of the assetId or free url if assetId is undefined

byok: Optional[TeamByok]

BYOK pricing override. Admin-only — omitted for non-admin callers.

markup_multiplier: float
updated_at: Optional[str]

ISO timestamp of the last update. Optional — legacy rows may lack it.

updated_by: Optional[str]

Human-readable handle of who last updated the markup (display name).

default_user_max_consumption: Optional[float]

Team-wide default max consumption (CU) applied to every member over the billing period, unless overridden per member. Absent when no team-wide default is set.

ip_detection_enforcement: Optional[Literal["active-fail-closed", "active-fail-open", "disabled"]]

The IP detection enforcement posture for the team. ‘disabled’: IP detection is not performed. ‘active-fail-open’: IP detection runs; on detector error the request is allowed through. ‘active-fail-closed’: IP detection runs; on detector error the request is blocked.

One of the following:
"active-fail-closed"
"active-fail-open"
"disabled"
quality_gate_auto_detect: Optional[bool]

Quality Gate auto-detection default for the team.

settings: Optional[TeamSettings]

Team settings.

homepage: Optional[Dict[str, object]]

Published homepage layout.

TeamsBrief

Delete
teams.brief.delete(strteam_id) -> BriefDeleteResponse
DELETE/teams/{teamId}/brief
Retrieve
teams.brief.retrieve(strteam_id) -> BriefRetrieveResponse
GET/teams/{teamId}/brief
Update
teams.brief.update(strteam_id, BriefUpdateParams**kwargs) -> BriefUpdateResponse
PUT/teams/{teamId}/brief
ModelsExpand Collapse
class BriefDeleteResponse: …
deleted: bool
class BriefRetrieveResponse: …
brief: Brief

A brand-style / project-rules / campaign-context brief stored at one scope.

id: str

Stable identifier derived from level + scopeId

body: str

Free-text brief: brand style, rules, campaign context

created_at: str

ISO-8601 creation timestamp

created_by: str

User id that last wrote the brief

enabled: bool

Whether the brief is applied during verification

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

Scope this brief applies to: team or project

One of the following:
"project"
"team"
reference_asset_ids: List[str]

Reference assets the verifier compares the image against

scope_id: str

The id of the team or project that owns this brief

updated_at: str

ISO-8601 last-update timestamp

sensitivity: Optional[Literal["high", "low", "medium"]]

Threshold strictness applied when verifying against this scope

One of the following:
"high"
"low"
"medium"
class BriefUpdateResponse: …
brief: Brief

A brand-style / project-rules / campaign-context brief stored at one scope.

id: str

Stable identifier derived from level + scopeId

body: str

Free-text brief: brand style, rules, campaign context

created_at: str

ISO-8601 creation timestamp

created_by: str

User id that last wrote the brief

enabled: bool

Whether the brief is applied during verification

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

Scope this brief applies to: team or project

One of the following:
"project"
"team"
reference_asset_ids: List[str]

Reference assets the verifier compares the image against

scope_id: str

The id of the team or project that owns this brief

updated_at: str

ISO-8601 last-update timestamp

sensitivity: Optional[Literal["high", "low", "medium"]]

Threshold strictness applied when verifying against this scope

One of the following:
"high"
"low"
"medium"

TeamsIP Filters

Create
teams.ip_filters.create(strteam_id, IPFilterCreateParams**kwargs) -> IPFilterCreateResponse
POST/teams/{teamId}/ip-filters
Delete
teams.ip_filters.delete(strfilter_id, IPFilterDeleteParams**kwargs) -> IPFilterDeleteResponse
DELETE/teams/{teamId}/ip-filters/{filterId}
Draft Instruction
teams.ip_filters.draft_instruction(strteam_id, IPFilterDraftInstructionParams**kwargs) -> IPFilterDraftInstructionResponse
POST/teams/{teamId}/ip-filters/draft-instruction
List
teams.ip_filters.list(strteam_id) -> IPFilterListResponse
GET/teams/{teamId}/ip-filters
Update
teams.ip_filters.update(strfilter_id, IPFilterUpdateParams**kwargs) -> IPFilterUpdateResponse
PUT/teams/{teamId}/ip-filters/{filterId}
ModelsExpand Collapse
class IPFilterCreateResponse: …
filter: object

The created custom filter, including its enabled state

class IPFilterDeleteResponse: …
deleted: bool

True when the filter was deleted

class IPFilterDraftInstructionResponse: …
instruction: str

Drafted natural-language detection instruction derived from the reference assets

class IPFilterListResponse: …
filters: List[object]

Built-in and custom IP-detection filters for the team, each with its enabled state

class IPFilterUpdateResponse: …
filter: object

The updated filter, including its enabled state

TeamsMembers

Create
teams.members.create(strteam_id, MemberCreateParams**kwargs) -> MemberCreateResponse
POST/teams/{teamId}/members
Delete
teams.members.delete(strmember_id, MemberDeleteParams**kwargs) -> object
DELETE/teams/{teamId}/members/{memberId}
Update
teams.members.update(strmember_id, MemberUpdateParams**kwargs) -> object
PUT/teams/{teamId}/members/{memberId}
ModelsExpand Collapse
class MemberCreateResponse: …
team: Team
id: str

The team ID (example: “eyVcnFJcR92BxBkz7N6g5w”)

context: TeamContext

The context of the team for the current authenticated user

invitations_count: float

The number of invitations on this team

keys_count: float

The number of API keys on this team

user_role: Literal["admin", "key", "member"]

The authenticated user’s role for this team

One of the following:
"admin"
"key"
"member"
users_count: float

The number of users on this team

created_at: str

The team creation date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

name: str

The team name (example: “Scenario”)

plan: Literal["cu-basic", "cu-creator", "cu-max", 9 more]

The team plan

One of the following:
"cu-basic"
"cu-creator"
"cu-max"
"cu-pro"
"cu-pro-q3-25"
"cu-team"
"cu-team-v2"
"enterprise"
"essential"
"free"
"premium"
"pro"
projects: List[TeamProject]

Projects of the team

id: str
created_at: str
name: str
updated_at: str
avatar: Optional[TeamProjectAvatar]
asset_id: Optional[str]

ID of the asset used as thumbnail if provided, otherwise undefined

url: Optional[str]

Signed URL of the assetId or free url if assetId is undefined

disable_ip_detection: Optional[bool]

When true, IP detection is switched off for this project.

quality_gate_auto_detect: Optional[bool]

Whether Quality Gate auto-detection runs on generation for this project.

type: Literal["personal", "shared"]

The team type

One of the following:
"personal"
"shared"
updated_at: str

The team update date as an ISO string (example: “2023-02-03T11:19:41.579Z”)

avatar: Optional[TeamAvatar]

The team’s avatar

asset_id: Optional[str]

ID of the asset used as thumbnail if provided, otherwise undefined

url: Optional[str]

Signed URL of the assetId or free url if assetId is undefined

byok: Optional[TeamByok]

BYOK pricing override. Admin-only — omitted for non-admin callers.

markup_multiplier: float
updated_at: Optional[str]

ISO timestamp of the last update. Optional — legacy rows may lack it.

updated_by: Optional[str]

Human-readable handle of who last updated the markup (display name).

default_user_max_consumption: Optional[float]

Team-wide default max consumption (CU) applied to every member over the billing period, unless overridden per member. Absent when no team-wide default is set.

ip_detection_enforcement: Optional[Literal["active-fail-closed", "active-fail-open", "disabled"]]

The IP detection enforcement posture for the team. ‘disabled’: IP detection is not performed. ‘active-fail-open’: IP detection runs; on detector error the request is allowed through. ‘active-fail-closed’: IP detection runs; on detector error the request is blocked.

One of the following:
"active-fail-closed"
"active-fail-open"
"disabled"
quality_gate_auto_detect: Optional[bool]

Quality Gate auto-detection default for the team.

TeamsWatermark

Delete
teams.watermark.delete(strteam_id) -> WatermarkDeleteResponse
DELETE/teams/{teamId}/watermark
Delete Logo
teams.watermark.delete_logo(strteam_id) -> WatermarkDeleteLogoResponse
DELETE/teams/{teamId}/watermark/logo
Preview
teams.watermark.preview(strteam_id, WatermarkPreviewParams**kwargs) -> WatermarkPreviewResponse
POST/teams/{teamId}/watermark/preview
Retrieve
teams.watermark.retrieve(strteam_id) -> WatermarkRetrieveResponse
GET/teams/{teamId}/watermark
Update
teams.watermark.update(strteam_id, WatermarkUpdateParams**kwargs) -> WatermarkUpdateResponse
PUT/teams/{teamId}/watermark
Update Logo
teams.watermark.update_logo(strteam_id, WatermarkUpdateLogoParams**kwargs) -> WatermarkUpdateLogoResponse
PUT/teams/{teamId}/watermark/logo
ModelsExpand Collapse
class WatermarkDeleteResponse: …
deleted: bool
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

One of the following:
"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

One of the following:
"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

class WatermarkPreviewResponse: …

Response of the watermark preview routes.

image: str

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

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

One of the following:
"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

One of the following:
"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

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

One of the following:
"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

One of the following:
"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

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

One of the following:
"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

One of the following:
"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

TeamsWebhook Endpoints

Create
teams.webhook_endpoints.create(strteam_id, WebhookEndpointCreateParams**kwargs) -> WebhookEndpointCreateResponse
POST/teams/{teamId}/webhook-endpoints
Delete
teams.webhook_endpoints.delete(strwebhook_endpoint_id, WebhookEndpointDeleteParams**kwargs) -> object
DELETE/teams/{teamId}/webhook-endpoints/{webhookEndpointId}
List
teams.webhook_endpoints.list(strteam_id) -> WebhookEndpointListResponse
GET/teams/{teamId}/webhook-endpoints
Update
teams.webhook_endpoints.update(strwebhook_endpoint_id, WebhookEndpointUpdateParams**kwargs) -> WebhookEndpointUpdateResponse
PUT/teams/{teamId}/webhook-endpoints/{webhookEndpointId}
ModelsExpand Collapse
class WebhookEndpointCreateResponse: …
webhook_endpoint: WebhookEndpoint

The creation response, and the only one that carries the secret: it is generated once and never returned again, so a client that loses it has to recreate the endpoint.

id: str

The ID of the webhook endpoint

created_at: str

The date and time the webhook endpoint was created

enabled: bool

Whether the webhook is enabled

enabled_events: List[Literal["*", "asset.download.completed", "asset.download.created", 16 more]]

The events that trigger the webhook. [’*’] indicates that all events are enabled

One of the following:
"*"
"asset.download.completed"
"asset.download.created"
"asset.download.failed"
"generation.completed"
"generation.created"
"generation.failed"
"inference.cancelled"
"inference.completed"
"inference.created"
"inference.failed"
"model.download.completed"
"model.download.created"
"model.download.failed"
"model.training.cancelled"
"model.training.completed"
"model.training.failed"
"model.training.started"
"team.credit.threshold.crossed"
nb_failed_calls: float

The number of calls to the webhook endpoint that have failed

nb_total_calls: float

The number of calls to the webhook endpoint

owner_id: str

The ID of the owner of the webhook endpoint: a project id for job lifecycle events, a team id for alert events

owner_type: Literal["project", "team"]

Whether the owner is a project or a team. Required to tell them apart: a project created before the team/project split shares its team’s id

One of the following:
"project"
"team"
secret: str

The endpoint’s secret, used to generate webhook signatures

updated_at: str

The date and time the webhook endpoint was updated

url: str

The URL of the webhook endpoint

description: Optional[str]

A description of the webhook endpoint

class WebhookEndpointListResponse: …
webhook_endpoints: List[WebhookEndpoint]

A list of the team webhooks

id: str

The ID of the webhook endpoint

created_at: str

The date and time the webhook endpoint was created

enabled: bool

Whether the webhook is enabled

enabled_events: List[Literal["*", "asset.download.completed", "asset.download.created", 16 more]]

The events that trigger the webhook. [’*’] indicates that all events are enabled

One of the following:
"*"
"asset.download.completed"
"asset.download.created"
"asset.download.failed"
"generation.completed"
"generation.created"
"generation.failed"
"inference.cancelled"
"inference.completed"
"inference.created"
"inference.failed"
"model.download.completed"
"model.download.created"
"model.download.failed"
"model.training.cancelled"
"model.training.completed"
"model.training.failed"
"model.training.started"
"team.credit.threshold.crossed"
nb_failed_calls: float

The number of calls to the webhook endpoint that have failed

nb_total_calls: float

The number of calls to the webhook endpoint

owner_id: str

The ID of the owner of the webhook endpoint: a project id for job lifecycle events, a team id for alert events

owner_type: Literal["project", "team"]

Whether the owner is a project or a team. Required to tell them apart: a project created before the team/project split shares its team’s id

One of the following:
"project"
"team"
updated_at: str

The date and time the webhook endpoint was updated

url: str

The URL of the webhook endpoint

description: Optional[str]

A description of the webhook endpoint

class WebhookEndpointUpdateResponse: …
webhook_endpoint: WebhookEndpoint
id: str

The ID of the webhook endpoint

created_at: str

The date and time the webhook endpoint was created

enabled: bool

Whether the webhook is enabled

enabled_events: List[Literal["*", "asset.download.completed", "asset.download.created", 16 more]]

The events that trigger the webhook. [’*’] indicates that all events are enabled

One of the following:
"*"
"asset.download.completed"
"asset.download.created"
"asset.download.failed"
"generation.completed"
"generation.created"
"generation.failed"
"inference.cancelled"
"inference.completed"
"inference.created"
"inference.failed"
"model.download.completed"
"model.download.created"
"model.download.failed"
"model.training.cancelled"
"model.training.completed"
"model.training.failed"
"model.training.started"
"team.credit.threshold.crossed"
nb_failed_calls: float

The number of calls to the webhook endpoint that have failed

nb_total_calls: float

The number of calls to the webhook endpoint

owner_id: str

The ID of the owner of the webhook endpoint: a project id for job lifecycle events, a team id for alert events

owner_type: Literal["project", "team"]

Whether the owner is a project or a team. Required to tell them apart: a project created before the team/project split shares its team’s id

One of the following:
"project"
"team"
updated_at: str

The date and time the webhook endpoint was updated

url: str

The URL of the webhook endpoint

description: Optional[str]

A description of the webhook endpoint

TeamsWebhook EndpointsEvents

List
teams.webhook_endpoints.events.list(strwebhook_endpoint_id, EventListParams**kwargs) -> EventListResponse
GET/teams/{teamId}/webhook-endpoints/{webhookEndpointId}/events
Retrieve
teams.webhook_endpoints.events.retrieve(strevent_id, EventRetrieveParams**kwargs) -> EventRetrieveResponse
GET/teams/{teamId}/webhook-endpoints/{webhookEndpointId}/events/{eventId}
ModelsExpand Collapse
class EventListResponse: …
items: List[Item]

A list of the team webhook events

id: str
endpoint_id: str
status: Literal["created", "failed", "retrying", "success"]
One of the following:
"created"
"failed"
"retrying"
"success"
type: Literal["*", "asset.download.completed", "asset.download.created", 16 more]

Every event a webhook endpoint can subscribe to: a project endpoint takes the job lifecycle events, a team endpoint takes the alert events.

One of the following:
"*"
"asset.download.completed"
"asset.download.created"
"asset.download.failed"
"generation.completed"
"generation.created"
"generation.failed"
"inference.cancelled"
"inference.completed"
"inference.created"
"inference.failed"
"model.download.completed"
"model.download.created"
"model.download.failed"
"model.training.cancelled"
"model.training.completed"
"model.training.failed"
"model.training.started"
"team.credit.threshold.crossed"
updated_at: str
next_pagination_token: Optional[str]

A token to query the next page of events

class EventRetrieveResponse: …
webhook_event: WebhookEvent
id: str
attempts: List[WebhookEventAttempt]
response_status_code: float
sent_at: str
created_at: str
endpoint_id: str
payload: object
sent_at: str
status: Literal["created", "failed", "retrying", "success"]
One of the following:
"created"
"failed"
"retrying"
"success"
type: Literal["*", "asset.download.completed", "asset.download.created", 16 more]

Every event a webhook endpoint can subscribe to: a project endpoint takes the job lifecycle events, a team endpoint takes the alert events.

One of the following:
"*"
"asset.download.completed"
"asset.download.created"
"asset.download.failed"
"generation.completed"
"generation.created"
"generation.failed"
"inference.cancelled"
"inference.completed"
"inference.created"
"inference.failed"
"model.download.completed"
"model.download.created"
"model.download.failed"
"model.training.cancelled"
"model.training.completed"
"model.training.failed"
"model.training.started"
"team.credit.threshold.crossed"
updated_at: str