codai-sdk 0.68.0 → 0.70.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- //#region src/generated/gateway.d.ts
2
1
  /**
3
2
  * This file was auto-generated by openapi-typescript.
4
3
  * Do not make direct changes to the file.
@@ -4611,7 +4610,7 @@ type paths$1 = {
4611
4610
  readonly get?: never;
4612
4611
  readonly put?: never;
4613
4612
  /**
4614
- * Build a deck, doc or sheet creative into a file
4613
+ * Build a deck, doc, sheet, carousel or print creative into a file
4615
4614
  * @description Converts the deck, doc or sheet creative at `seq` (default: the head) back into a documents spec and builds the
4616
4615
  * PPTX, DOCX or XLSX exactly like `POST /v1/studio/documents` (same validation, limits, themes and builders). Each
4617
4616
  * build is a new version of the same document: `based_on` is the newest document built from this creative, so
@@ -4622,6 +4621,19 @@ type paths$1 = {
4622
4621
  * The file is free (`cost_micro_usd: "0"` on `document`). `preview: true` also queues a LibreOffice preview, billed
4623
4622
  * like `POST /v1/studio/documents/{id}/previews` ($0.002 per page, min $0.01). Video and image creatives answer 400
4624
4623
  * `not_supported_for_kind`.
4624
+ *
4625
+ * **Carousel and print creatives** (body `CreativePagedBuildRequest`) answer **202** with an export job in `export`
4626
+ * (poll `GET /v1/studio/exports/{id}` until `succeeded`, then download `url`):
4627
+ * - carousel `format: png` (default): a zip of one PNG per slide (`slide-01.png` …) at the format size;
4628
+ * `format: pdf`: one PDF page per slide (LinkedIn document post), no bleed, no crop marks.
4629
+ * - print `format: pdf`: one sheet per page at the bleed box plus a crop-mark margin, crop marks outside the bleed,
4630
+ * TrimBox and BleedBox set on every page. The prepress check (bleed safety, minimum text size, image resolution,
4631
+ * colours outside a coated-CMYK gamut) runs first and its issues are returned in `lint`; they never block the build.
4632
+ * The PDF is RGB: PDF/X-4 conversion with the output intent is not done by the render worker, which `warnings` states.
4633
+ *
4634
+ * Price: $0.002 per page (min $0.01), held in the wallet before dispatch (402 when short) and billed once when the
4635
+ * job finishes. Files carry machine-readable AI marks (PDF Info `Keywords`, PNG XMP) and the `x-codai-ai-generated`
4636
+ * header. Supports `Idempotency-Key` (24 h).
4625
4637
  */
4626
4638
  readonly post: operations$1['buildCreative'];
4627
4639
  readonly delete?: never;
@@ -5090,6 +5102,32 @@ type paths$1 = {
5090
5102
  readonly patch?: never;
5091
5103
  readonly trace?: never;
5092
5104
  };
5105
+ readonly '/v1/studio/creatives/{id}/nodes/{nodeId}/regenerate': {
5106
+ readonly parameters: {
5107
+ readonly query?: never;
5108
+ readonly header?: never;
5109
+ readonly path?: never;
5110
+ readonly cookie?: never;
5111
+ };
5112
+ readonly get?: never;
5113
+ readonly put?: never;
5114
+ /**
5115
+ * Regenerate the picture of an image node
5116
+ * @description Generates a new image for an `image` node with `codai-image` (billed like `POST /v1/images/generations`: wallet
5117
+ * hold of the quote first, one usage row, the stored asset is AI-marked) and swaps it in through the edit path. When
5118
+ * the node has a `castId`, that cast entry's `refAssetIds` are sent as reference images automatically and its
5119
+ * `description` is appended to the prompt, so the character or product stays the same across shots. The aspect
5120
+ * ratio defaults to the closest supported ratio of the node box. Video nodes: generate a clip with
5121
+ * `POST /v1/videos` and `reference_asset_ids`, then `replaceAsset`.
5122
+ * Supports `Idempotency-Key` (24 h): a retry with the same key and body replays the first response; a different body is 422 `idempotency_key_mismatch`; the first request still running is 409 `idempotency_in_progress`.
5123
+ */
5124
+ readonly post: operations$1['regenerateCreativeNode'];
5125
+ readonly delete?: never;
5126
+ readonly options?: never;
5127
+ readonly head?: never;
5128
+ readonly patch?: never;
5129
+ readonly trace?: never;
5130
+ };
5093
5131
  readonly '/v1/studio/creatives/{id}/ops': {
5094
5132
  readonly parameters: {
5095
5133
  readonly query?: never;
@@ -5142,6 +5180,34 @@ type paths$1 = {
5142
5180
  readonly patch?: never;
5143
5181
  readonly trace?: never;
5144
5182
  };
5183
+ readonly '/v1/studio/creatives/{id}/post-copy': {
5184
+ readonly parameters: {
5185
+ readonly query?: never;
5186
+ readonly header?: never;
5187
+ readonly path?: never;
5188
+ readonly cookie?: never;
5189
+ };
5190
+ readonly get?: never;
5191
+ readonly put?: never;
5192
+ /**
5193
+ * Write social post copy for a creative
5194
+ * @description Writes a caption and hashtags per platform (Instagram, LinkedIn, TikTok, X, Facebook) and one alt text per slide
5195
+ * for a carousel, image or video creative, in Romanian or English: one bounded `codai` turn with a forced tool over
5196
+ * the creative's outline, then every answer is repaired to the platform's hard limits (caption characters including
5197
+ * hashtags, hashtag count, alt text length): hashtags normalised, deduplicated and capped, captions trimmed on a word
5198
+ * end. What was changed is listed in `fixes`. Nothing is written to the creative.
5199
+ *
5200
+ * Billing: token-metered (usage model `codai::post-copy`, prompt caching on) under a small wallet hold
5201
+ * (15 000 µUSD, settled with the real cost; 402 `insufficient_funds` when short). Copy and outlines are never
5202
+ * logged. Supports `Idempotency-Key` (24 h).
5203
+ */
5204
+ readonly post: operations$1['writeCreativePostCopy'];
5205
+ readonly delete?: never;
5206
+ readonly options?: never;
5207
+ readonly head?: never;
5208
+ readonly patch?: never;
5209
+ readonly trace?: never;
5210
+ };
5145
5211
  readonly '/v1/studio/creatives/{id}/render': {
5146
5212
  readonly parameters: {
5147
5213
  readonly query?: never;
@@ -5471,6 +5537,31 @@ type paths$1 = {
5471
5537
  readonly patch?: never;
5472
5538
  readonly trace?: never;
5473
5539
  };
5540
+ readonly '/v1/studio/creatives/{id}/transcript-cut': {
5541
+ readonly parameters: {
5542
+ readonly query?: never;
5543
+ readonly header?: never;
5544
+ readonly path?: never;
5545
+ readonly cookie?: never;
5546
+ };
5547
+ readonly get?: never;
5548
+ readonly put?: never;
5549
+ /**
5550
+ * Edit a video clip by its transcript
5551
+ * @description Deletes word ranges from a video node: the words are the clip asset's cached transcript (written by
5552
+ * `POST /v1/studio/creatives/{id}/captions`, word timings in source time). The removed spans are cut out with
5553
+ * `splitVideo` / `trimVideo` / `setTiming` ops and the pieces are placed back to back from the clip's start, as one
5554
+ * new version through the same edit path as `POST /v1/studio/creatives/{id}/ops` (rebase on a slightly stale
5555
+ * `base_seq`, locks honoured). Free: no transcription, no usage row. No cached transcript -> 409
5556
+ * `captions_required` (run captions on that clip first). Video creatives only.
5557
+ */
5558
+ readonly post: operations$1['transcriptCutCreative'];
5559
+ readonly delete?: never;
5560
+ readonly options?: never;
5561
+ readonly head?: never;
5562
+ readonly patch?: never;
5563
+ readonly trace?: never;
5564
+ };
5474
5565
  readonly '/v1/studio/creatives/{id}/variants': {
5475
5566
  readonly parameters: {
5476
5567
  readonly query?: never;
@@ -5857,6 +5948,124 @@ type paths$1 = {
5857
5948
  readonly patch?: never;
5858
5949
  readonly trace?: never;
5859
5950
  };
5951
+ readonly '/v1/studio/music-room': {
5952
+ readonly parameters: {
5953
+ readonly query?: never;
5954
+ readonly header?: never;
5955
+ readonly path?: never;
5956
+ readonly cookie?: never;
5957
+ };
5958
+ /**
5959
+ * List Music Room songs
5960
+ * @description Your Music Room songs, newest first. Page with `before` (the `created_at` of the last item) while `has_more` is true.
5961
+ */
5962
+ readonly get: operations$1['listStudioMusicRooms'];
5963
+ readonly put?: never;
5964
+ /**
5965
+ * Start a Music Room song
5966
+ * @description A team of role agents (producer, composer, lyricist, arranger, session players, vocal producer, mix and mastering
5967
+ * engineers, critic, rights) writes, plays, sings and mixes one song that should sound played by people. Agents
5968
+ * write symbolic parts on a beat grid, deterministic code humanises them, real sampled instruments render the
5969
+ * stems, ACE-Step adds vocals, and a critic asks for at most two rounds of targeted fixes. The song lives in an
5970
+ * editable `audio` creative. The workflow stops at three gates (`plan`, `demo`, `final`) with `status: waiting`
5971
+ * until you answer with `POST /v1/studio/music-room/{id}/choose`; `auto: true` skips the gates. Poll
5972
+ * `GET /v1/studio/music-room/{id}`. Within the monthly plan quota the song is free (see
5973
+ * `GET /v1/studio/music-room/quota`); beyond it every step is quoted and held on your wallet. `budget_micro_usd`
5974
+ * (default 4,000,000 = $4, max $20) caps one song. At most 2 songs run at once per user (429
5975
+ * `too_many_music_rooms`). Supports `Idempotency-Key`.
5976
+ */
5977
+ readonly post: operations$1['createStudioMusicRoom'];
5978
+ readonly delete?: never;
5979
+ readonly options?: never;
5980
+ readonly head?: never;
5981
+ readonly patch?: never;
5982
+ readonly trace?: never;
5983
+ };
5984
+ readonly '/v1/studio/music-room/{id}': {
5985
+ readonly parameters: {
5986
+ readonly query?: never;
5987
+ readonly header?: never;
5988
+ readonly path?: never;
5989
+ readonly cookie?: never;
5990
+ };
5991
+ /**
5992
+ * Retrieve a Music Room song
5993
+ * @description The song state; reading it advances the workflow like a poll (a gate waits for your answer). Unknown or foreign ids are 404.
5994
+ */
5995
+ readonly get: operations$1['getStudioMusicRoom'];
5996
+ readonly put?: never;
5997
+ readonly post?: never;
5998
+ readonly delete?: never;
5999
+ readonly options?: never;
6000
+ readonly head?: never;
6001
+ readonly patch?: never;
6002
+ readonly trace?: never;
6003
+ };
6004
+ readonly '/v1/studio/music-room/{id}/choose': {
6005
+ readonly parameters: {
6006
+ readonly query?: never;
6007
+ readonly header?: never;
6008
+ readonly path?: never;
6009
+ readonly cookie?: never;
6010
+ };
6011
+ readonly get?: never;
6012
+ readonly put?: never;
6013
+ /**
6014
+ * Answer a Music Room gate
6015
+ * @description Answer the gate the song waits at: pick one of the plan variants (`{gate: 'plan', variant}`), approve the
6016
+ * arranged demo (`{gate: 'demo', approve: true}`) or approve the final mix (`{gate: 'final', approve: true}`). The
6017
+ * workflow then continues. Answering a gate the song is not at is 409 `not_at_gate`.
6018
+ */
6019
+ readonly post: operations$1['chooseStudioMusicRoom'];
6020
+ readonly delete?: never;
6021
+ readonly options?: never;
6022
+ readonly head?: never;
6023
+ readonly patch?: never;
6024
+ readonly trace?: never;
6025
+ };
6026
+ readonly '/v1/studio/music-room/{id}/direct': {
6027
+ readonly parameters: {
6028
+ readonly query?: never;
6029
+ readonly header?: never;
6030
+ readonly path?: never;
6031
+ readonly cookie?: never;
6032
+ };
6033
+ readonly get?: never;
6034
+ readonly put?: never;
6035
+ /**
6036
+ * Direct one Music Room player
6037
+ * @description Talk to one player of the team (`role`, optionally one `section_id`): the player re-plays that part following
6038
+ * your `direction` (up to 500 characters) and the demo is re-rendered. Only while the song waits at the demo or
6039
+ * final gate (409 `not_at_gate` otherwise). The extra turn and render count against `budget_micro_usd`. Supports
6040
+ * `Idempotency-Key`.
6041
+ */
6042
+ readonly post: operations$1['directStudioMusicRoom'];
6043
+ readonly delete?: never;
6044
+ readonly options?: never;
6045
+ readonly head?: never;
6046
+ readonly patch?: never;
6047
+ readonly trace?: never;
6048
+ };
6049
+ readonly '/v1/studio/music-room/quota': {
6050
+ readonly parameters: {
6051
+ readonly query?: never;
6052
+ readonly header?: never;
6053
+ readonly path?: never;
6054
+ readonly cookie?: never;
6055
+ };
6056
+ /**
6057
+ * Music Room quota
6058
+ * @description Songs included in your plan this calendar month (UTC), how many you used and when the period ends. Songs beyond the quota are billed to your wallet. Free.
6059
+ */
6060
+ readonly get: operations$1['getStudioMusicRoomQuota'];
6061
+ readonly put?: never;
6062
+ readonly post?: never;
6063
+ readonly delete?: never;
6064
+ readonly options?: never;
6065
+ readonly head?: never;
6066
+ readonly patch?: never;
6067
+ readonly trace?: never;
6068
+ };
5860
6069
  readonly '/v1/studio/previews/{id}': {
5861
6070
  readonly parameters: {
5862
6071
  readonly query?: never;
@@ -6238,6 +6447,41 @@ type paths$1 = {
6238
6447
  readonly patch?: never;
6239
6448
  readonly trace?: never;
6240
6449
  };
6450
+ readonly '/v1/studio/voices/{id}/singing-consent': {
6451
+ readonly parameters: {
6452
+ readonly query?: never;
6453
+ readonly header?: never;
6454
+ readonly path: {
6455
+ readonly id: string;
6456
+ };
6457
+ readonly cookie?: never;
6458
+ };
6459
+ readonly get?: never;
6460
+ readonly put?: never;
6461
+ /**
6462
+ * Add the singing consent to a custom voice (beta)
6463
+ * @description Voice passport (beta): lets your OWN custom voice sing in your Music Room songs. A separate, explicit and
6464
+ * revocable consent on top of the voice-creation consent. Flow: `POST /v1/studio/voices/sessions` with
6465
+ * `purpose: "singing"`, `voice_id` and the singing consent text version → record the returned singing
6466
+ * statement (`kind: consent`, checked against the statement like at voice creation) and a 3-10 s sung sample
6467
+ * (`kind: reference`) in the app → this call with the session id. The consent proof (statement, versions,
6468
+ * KMS-sealed recording) is stored separately from the voice-creation consent; the sung sample is stored KMS-sealed
6469
+ * and used only as the timbre reference of your songs. The result approximates your timbre; it is not a faithful
6470
+ * clone. Available only where voice cloning is enabled for your account. Free.
6471
+ */
6472
+ readonly post: operations$1['addStudioVoiceSingingConsent'];
6473
+ /**
6474
+ * Revoke the singing consent of a custom voice
6475
+ * @description Revokes ONLY the singing purpose: the sung sample is deleted at once, songs stop using the voice
6476
+ * (also a song already in progress, from its next sung section), the voice keeps working for narration. The
6477
+ * consent proof is kept for 3 years for the audit trail. Deleting the voice revokes everything. Idempotent. Free.
6478
+ */
6479
+ readonly delete: operations$1['revokeStudioVoiceSingingConsent'];
6480
+ readonly options?: never;
6481
+ readonly head?: never;
6482
+ readonly patch?: never;
6483
+ readonly trace?: never;
6484
+ };
6241
6485
  readonly '/v1/systemone': {
6242
6486
  readonly parameters: {
6243
6487
  readonly query?: never;
@@ -9610,6 +9854,8 @@ type components$1 = {
9610
9854
  * @example flat minimalist logo of a paper plane, two colours, white background
9611
9855
  */
9612
9856
  readonly prompt: string;
9857
+ /** @description Your ready studio image assets used as references (e.g. a creative's cast), sent after `reference_images`; together they count against the per-model limit. A missing or foreign asset is 404. */
9858
+ readonly reference_asset_ids?: readonly string[];
9613
9859
  /** @description Images the model must stay consistent with (logo, palette, product, character), sent before the prompt. Per-model limit — `codai-image-fast` accepts 4, the others 14. */
9614
9860
  readonly reference_images?: readonly components$1['schemas']['CoreImageInput'][];
9615
9861
  readonly response_format?: components$1['schemas']['MediaResponseFormat'];
@@ -10260,6 +10506,18 @@ type components$1 = {
10260
10506
  /** @description Number of caption words. */
10261
10507
  readonly words: number;
10262
10508
  };
10509
+ /** Cast entry */
10510
+ readonly CreativeCast: {
10511
+ /** @description Appended to the prompt when the node is regenerated. */
10512
+ readonly description?: string;
10513
+ /** @description Shares the document id namespace with scenes and nodes. */
10514
+ readonly id: string;
10515
+ /** @enum {string} */
10516
+ readonly kind: 'character' | 'product';
10517
+ readonly name: string;
10518
+ /** @description Image assets of the subject. */
10519
+ readonly refAssetIds: readonly string[];
10520
+ };
10263
10521
  /**
10264
10522
  * Frame comment
10265
10523
  * @example {
@@ -10431,6 +10689,8 @@ type components$1 = {
10431
10689
  readonly brand: {
10432
10690
  readonly [key: string]: unknown;
10433
10691
  };
10692
+ /** @description Recurring characters / products (CX-05). An `image` / `video` node binds one with `props.castId`; regenerating that node sends the entry's `refAssetIds` as reference images so the subject looks the same in every shot. */
10693
+ readonly cast?: readonly components$1['schemas']['CreativeCast'][];
10434
10694
  /** @description One of `formats[].id`. */
10435
10695
  readonly defaultFormat: string;
10436
10696
  /** @description Output formats (`{ id, width, height }`); nodes may override their layout per format. */
@@ -10925,6 +11185,11 @@ type components$1 = {
10925
11185
  * (`control: null` clears it), `setMeta { title?, locale?, formats?, defaultFormat?, fps? }`,
10926
11186
  * `setLocaleText { locale, texts, by? }` (`texts`: unit key → translation, `null` removes it),
10927
11187
  * `setLocale { locale, tone?, audio?, captions?, remove? }`, `setLocalization { source?, glossary?, forkOf?, reset? }`.
11188
+ * Video clips (CX-06, video nodes; source in / out points in media ms, `rate` 0.25–4, J / L cuts via the node's
11189
+ * `audioLeadMs` / `audioTailMs` props): `trimVideo { target, inMs?, outMs?, fitTiming? }` (`null` clears a point),
11190
+ * `splitVideo { target, atMs, newId }` (cut at `atMs` after the node start into two nodes),
11191
+ * `setVideoRate { target, rate, fitTiming? }` (`rate: null` = 1x). Cast (CX-05): `addCast { cast }`,
11192
+ * `updateCast { target, patch }`, `removeCast { target }` (drops the `castId` of nodes that used it).
10928
11193
  * Audio ops (any creative's `doc.audio`; songs and podcasts): `addSection { section }`, `updateSection { target, patch }`,
10929
11194
  * `removeSection { target }`, `moveSection { target, startMs }`, `addTrack { track, index? }`,
10930
11195
  * `updateTrack { target, patch }`, `removeTrack { target }`, `splitClip { clipId, atMs, newId }`,
@@ -10943,7 +11208,7 @@ type components$1 = {
10943
11208
  */
10944
11209
  readonly CreativeOp: {
10945
11210
  /** @enum {string} */
10946
- readonly op: 'setProps' | 'setLayout' | 'setTiming' | 'setAnim' | 'insertNode' | 'removeNode' | 'moveNode' | 'addScene' | 'removeScene' | 'updateScene' | 'moveScene' | 'setVar' | 'removeVar' | 'setAsset' | 'replaceAsset' | 'setAudioClip' | 'removeAudioClip' | 'setBrand' | 'restyle' | 'adaptFormat' | 'setControl' | 'setMeta' | 'setLocaleText' | 'setLocale' | 'setLocalization' | 'addSection' | 'updateSection' | 'removeSection' | 'moveSection' | 'addTrack' | 'updateTrack' | 'removeTrack' | 'splitClip' | 'trimClip' | 'moveClip' | 'setFades' | 'addMidiClip' | 'removeMidiClip' | 'updateMidiNotes' | 'setMaster' | 'setLyrics';
11211
+ readonly op: 'setProps' | 'setLayout' | 'setTiming' | 'setAnim' | 'insertNode' | 'removeNode' | 'moveNode' | 'addScene' | 'removeScene' | 'updateScene' | 'moveScene' | 'setVar' | 'removeVar' | 'setAsset' | 'replaceAsset' | 'setAudioClip' | 'removeAudioClip' | 'setBrand' | 'restyle' | 'adaptFormat' | 'setControl' | 'setMeta' | 'setLocaleText' | 'setLocale' | 'setLocalization' | 'trimVideo' | 'splitVideo' | 'setVideoRate' | 'addCast' | 'updateCast' | 'removeCast' | 'addSection' | 'updateSection' | 'removeSection' | 'moveSection' | 'addTrack' | 'updateTrack' | 'removeTrack' | 'splitClip' | 'trimClip' | 'moveClip' | 'setFades' | 'addMidiClip' | 'removeMidiClip' | 'updateMidiNotes' | 'setMaster' | 'setLyrics';
10947
11212
  } & {
10948
11213
  readonly [key: string]: unknown;
10949
11214
  };
@@ -11003,6 +11268,79 @@ type components$1 = {
11003
11268
  readonly [key: string]: unknown;
11004
11269
  };
11005
11270
  };
11271
+ /**
11272
+ * Carousel / print build request
11273
+ * @example {
11274
+ * "format": "pdf",
11275
+ * "format_id": "1x1"
11276
+ * }
11277
+ */
11278
+ readonly CreativePagedBuildRequest: {
11279
+ /**
11280
+ * @description Print only — crop marks outside the bleed.
11281
+ * @default true
11282
+ */
11283
+ readonly crop_marks?: boolean;
11284
+ /** @description File name without extension (default `<slug of the title>-<format_id>`). */
11285
+ readonly filename?: string;
11286
+ /**
11287
+ * @description Output: carousel `png` (zip of slides, default) or `pdf`; print creatives build `pdf` only.
11288
+ * @enum {string}
11289
+ */
11290
+ readonly format?: 'png' | 'pdf';
11291
+ /** @description Layout format of the creative (default its `defaultFormat`), e.g. `4x5`, `1x1`, `a4`, `card`. */
11292
+ readonly format_id?: string;
11293
+ /** @description Accepted for parity with deck builds; ignored. */
11294
+ readonly preview?: boolean;
11295
+ /** @description Creative version to build (default the head). */
11296
+ readonly seq?: number;
11297
+ };
11298
+ /** Prepress issue */
11299
+ readonly CreativePrintLintIssue: {
11300
+ /** @description `print_in_bleed`, `print_outside_safe`, `print_bleed_short`, `print_low_res`, `print_rgb_color`, `print_text_too_small`, `missing_alt`, `svg_empty`. */
11301
+ readonly code: string;
11302
+ readonly fixable?: boolean;
11303
+ readonly format?: string;
11304
+ readonly message: string;
11305
+ /** @enum {string} */
11306
+ readonly severity: 'error' | 'warning';
11307
+ /** @description Node or scene id. */
11308
+ readonly target: string;
11309
+ /** @description Measured value (pt, dpi, mm) where meaningful. */
11310
+ readonly value?: number;
11311
+ };
11312
+ /** Regenerate node request */
11313
+ readonly CreativeRegenerateNodeRequest: {
11314
+ /**
11315
+ * @description Default the closest ratio to the node box.
11316
+ * @enum {string}
11317
+ */
11318
+ readonly aspect_ratio?: '1:1' | '2:3' | '3:2' | '3:4' | '4:3' | '4:5' | '5:4' | '9:16' | '16:9' | '21:9' | '9:21';
11319
+ readonly base_seq?: number;
11320
+ /** @default false */
11321
+ readonly force?: boolean;
11322
+ /** @example codai-image */
11323
+ readonly model?: string;
11324
+ readonly prompt: string;
11325
+ };
11326
+ /** Regenerate node result */
11327
+ readonly CreativeRegenerateNodeResult: {
11328
+ /**
11329
+ * Format: uuid
11330
+ * @description The new image asset.
11331
+ */
11332
+ readonly asset_id: string;
11333
+ readonly cast_id: string | null;
11334
+ readonly changed: readonly string[];
11335
+ readonly cost_micro_usd: string;
11336
+ readonly doc_hash: string;
11337
+ readonly node_id: string;
11338
+ readonly rebased: boolean;
11339
+ /** @description The cast references that were sent. */
11340
+ readonly reference_asset_ids: readonly string[];
11341
+ readonly seq: number;
11342
+ readonly warnings: readonly string[];
11343
+ };
11006
11344
  /** Queued creative render */
11007
11345
  readonly CreativeRenderAccepted: {
11008
11346
  readonly ai_label?: components$1['schemas']['StudioRenderAiLabel'];
@@ -11265,6 +11603,55 @@ type components$1 = {
11265
11603
  */
11266
11604
  readonly type: 'text' | 'image';
11267
11605
  };
11606
+ /**
11607
+ * Transcript cut request
11608
+ * @example {
11609
+ * "node_id": "clip",
11610
+ * "remove": [
11611
+ * {
11612
+ * "from_word": 3,
11613
+ * "to_word": 4
11614
+ * }
11615
+ * ]
11616
+ * }
11617
+ */
11618
+ readonly CreativeTranscriptCutRequest: {
11619
+ /** @description The version to edit (default the head). */
11620
+ readonly base_seq?: number;
11621
+ /**
11622
+ * @description Edit locked nodes too.
11623
+ * @default false
11624
+ */
11625
+ readonly force?: boolean;
11626
+ /** @description The video node to edit. */
11627
+ readonly node_id: string;
11628
+ /** @description Word index ranges (inclusive) of the clip transcript to delete; overlapping ranges are merged. */
11629
+ readonly remove: readonly {
11630
+ readonly from_word: number;
11631
+ readonly to_word: number;
11632
+ }[];
11633
+ };
11634
+ /** Transcript cut result */
11635
+ readonly CreativeTranscriptCutResult: {
11636
+ readonly changed: readonly string[];
11637
+ readonly doc_hash: string;
11638
+ readonly node_id: string;
11639
+ /** @description Ids of the clip pieces in playback order (the first is the original node; empty when everything was cut and the node removed). */
11640
+ readonly pieces: readonly string[];
11641
+ readonly rebased: boolean;
11642
+ /** @description Source spans removed (media ms). */
11643
+ readonly removed: readonly {
11644
+ readonly in_ms: number;
11645
+ readonly out_ms: number;
11646
+ }[];
11647
+ /** @description Playback time removed from the clip (ms at its rate). */
11648
+ readonly removed_ms: number;
11649
+ /** @description The new head version. */
11650
+ readonly seq: number;
11651
+ readonly warnings: readonly string[];
11652
+ /** @description Words in the cached transcript. */
11653
+ readonly words: number;
11654
+ };
11268
11655
  /** Variant */
11269
11656
  readonly CreativeVariant: {
11270
11657
  /** @description Ops applied on top of the original. */
@@ -13081,6 +13468,8 @@ type components$1 = {
13081
13468
  * @default []
13082
13469
  */
13083
13470
  readonly asset_ids?: readonly string[];
13471
+ /** @description image.inpaint / image.erase only: a mask painted in an editor, base64 PNG (white = edit, black = keep, at most 8 MB). Send ONE asset id (the image); the gateway stores the mask as a free private asset and passes it as the second input. A quote validates it without storing anything. */
13472
+ readonly mask_png_b64?: string;
13084
13473
  /**
13085
13474
  * @description Per-op parameters (table above).
13086
13475
  * @default {}
@@ -13352,6 +13741,209 @@ type components$1 = {
13352
13741
  readonly input_tokens: number;
13353
13742
  readonly output_tokens: number;
13354
13743
  };
13744
+ /**
13745
+ * Music Room role
13746
+ * @description A member of the Music Room team.
13747
+ * @enum {string}
13748
+ */
13749
+ readonly MusicRole: 'producer' | 'composer' | 'lyricist' | 'arranger' | 'drums' | 'bass' | 'guitar' | 'keys' | 'strings' | 'brass' | 'winds' | 'balkan_lead' | 'balkan_rhythm' | 'percussion' | 'synth' | 'vocal_producer' | 'sound_designer' | 'mix_engineer' | 'mastering_engineer' | 'critic' | 'rights';
13750
+ /** Music Room song */
13751
+ readonly MusicRoom: {
13752
+ readonly brief: string;
13753
+ readonly budget_micro_usd: string;
13754
+ /** @description Melody similarity against the reference corpus. */
13755
+ readonly copy_risk: {
13756
+ readonly matches: readonly {
13757
+ readonly id?: string;
13758
+ readonly score?: number;
13759
+ readonly title?: string;
13760
+ }[];
13761
+ readonly max_score: number;
13762
+ } | null;
13763
+ /** Format: date-time */
13764
+ readonly created_at: string;
13765
+ /** @description The editable audio creative holding the song. */
13766
+ readonly creative_id: string | null;
13767
+ /** @description Credit lines to publish with the song (CC-BY sample libraries, `Built with Llama`…). */
13768
+ readonly credits: readonly string[];
13769
+ /** @description The critic's last review. */
13770
+ readonly critique: {
13771
+ readonly issues: readonly {
13772
+ readonly fix: string;
13773
+ readonly problem: string;
13774
+ readonly role: components$1['schemas']['MusicRole'];
13775
+ readonly section_id?: string | null;
13776
+ }[];
13777
+ readonly round: number;
13778
+ /** @description Scores from 0 to 10 per aspect (`groove`, `harmony`, `melody`, `arrangement`, `mix`, `humanness`, `genre_fit`). */
13779
+ readonly scores: {
13780
+ readonly [key: string]: number;
13781
+ };
13782
+ /** @enum {string} */
13783
+ readonly verdict: 'ship' | 'revise';
13784
+ } | null;
13785
+ readonly demo_asset_id: string | null;
13786
+ readonly error: string | null;
13787
+ readonly final_asset_id: string | null;
13788
+ /** @description The gate the song waits at (`null` when it is not waiting). */
13789
+ readonly gate: {
13790
+ /** @enum {string} */
13791
+ readonly kind: 'plan' | 'demo' | 'final';
13792
+ /** Format: date-time */
13793
+ readonly since: string;
13794
+ /** @description Plan gate only: up to 3 plan variants to choose from. */
13795
+ readonly variants?: readonly components$1['schemas']['MusicRoomPlanVariant'][];
13796
+ } | null;
13797
+ readonly genre_id: string | null;
13798
+ /** Format: uuid */
13799
+ readonly id: string;
13800
+ /** @enum {string} */
13801
+ readonly language: 'ro' | 'en';
13802
+ /** @enum {string} */
13803
+ readonly object: 'studio.music_room';
13804
+ /**
13805
+ * @description plan → gate_plan → compose → lyrics → arrange → parts → render_demo → gate_demo → vocals → mix → master → critique → gate_final → ready | failed.
13806
+ * @enum {string}
13807
+ */
13808
+ readonly phase: 'plan' | 'gate_plan' | 'compose' | 'lyrics' | 'arrange' | 'parts' | 'render_demo' | 'gate_demo' | 'vocals' | 'mix' | 'master' | 'critique' | 'gate_final' | 'ready' | 'failed';
13809
+ readonly quota: {
13810
+ readonly included: number;
13811
+ readonly used: number;
13812
+ /** @description The song is covered by the monthly plan quota (free). */
13813
+ readonly within: boolean;
13814
+ };
13815
+ /** @description Symbolic AI-tell metric: 0 sounds human, 1 sounds robotic. */
13816
+ readonly robot_score: number | null;
13817
+ readonly spent_micro_usd: string;
13818
+ /**
13819
+ * @description `running` while the team works, `waiting` at a gate, then `succeeded` or `failed`.
13820
+ * @enum {string}
13821
+ */
13822
+ readonly status: 'running' | 'waiting' | 'succeeded' | 'failed';
13823
+ readonly stems_asset_ids: readonly string[];
13824
+ readonly team: readonly {
13825
+ readonly instrument_id?: string | null;
13826
+ readonly name: string;
13827
+ readonly rationale?: string | null;
13828
+ readonly role: components$1['schemas']['MusicRole'];
13829
+ /** @enum {string} */
13830
+ readonly status: 'done' | 'playing' | 'waiting';
13831
+ readonly track_id?: string | null;
13832
+ }[];
13833
+ readonly title: string | null;
13834
+ /** @description Non-fatal notes. Voice passport values: `voice_passport_beta` (sung with your voice, beta: approximates your timbre), `voice_passport_needs_singing_consent` (the voice has no active singing consent, or it was revoked during the song), `voice_passport_not_found` (not one of your active voices), `voice_passport_unavailable` (voice cloning is not enabled for your account, or the voice is paused), `voice_passport_lyrics_refused` (the lyrics failed the voice-safety text check, so the passport was not used). Others: `artist_reference_removed: N`, `vocal_asr_check_unavailable`, `critic_text_only`, `<step>_skipped: <reason>`. */
13835
+ readonly warnings: readonly string[];
13836
+ };
13837
+ /**
13838
+ * Music Room gate answer
13839
+ * @description The answer to the gate the song waits at.
13840
+ */
13841
+ readonly MusicRoomChoose: {
13842
+ /** @enum {string} */
13843
+ readonly gate: 'plan';
13844
+ /** @description Index of the chosen plan variant. */
13845
+ readonly variant: number;
13846
+ } | {
13847
+ /** @enum {boolean} */
13848
+ readonly approve: true;
13849
+ /** @enum {string} */
13850
+ readonly gate: 'demo';
13851
+ } | {
13852
+ /** @enum {boolean} */
13853
+ readonly approve: true;
13854
+ /** @enum {string} */
13855
+ readonly gate: 'final';
13856
+ };
13857
+ /** Music Room request */
13858
+ readonly MusicRoomCreate: {
13859
+ /**
13860
+ * @description Skip the three gates (plan variant 0, demo and final approved).
13861
+ * @default false
13862
+ */
13863
+ readonly auto?: boolean;
13864
+ /** @description What the song is for and how it should feel: occasion, mood, story, audience (10–2,000 characters; no artist names). */
13865
+ readonly brief: string;
13866
+ /**
13867
+ * @description Spending cap for one song beyond the plan quota, in micro-USD (default 4,000,000 = $4, max 20,000,000).
13868
+ * @default 4000000
13869
+ */
13870
+ readonly budget_micro_usd?: number;
13871
+ /** @description Target length in seconds (max 4 minutes). */
13872
+ readonly duration_seconds?: number;
13873
+ /** @description Genre pack id (`pop`, `jingle`, `rock`, `hiphop`, `cinematic`, `lofi`, `hora`, `sarba`, `doina`, `manele`, `pop_folk_ro`, `fanfara`, `cocek`…); default: the producer picks. */
13874
+ readonly genre?: string;
13875
+ /** @description Instrument ids the band must use (`drums.kit_rock`, `balkan.accordion`…). */
13876
+ readonly instruments?: readonly string[];
13877
+ /**
13878
+ * @description Language of the lyrics.
13879
+ * @default ro
13880
+ * @enum {string}
13881
+ */
13882
+ readonly language?: 'ro' | 'en';
13883
+ /** @description Vocal timbre id; default: chosen for the genre. */
13884
+ readonly timbre?: string;
13885
+ /** @description Song / creative title. */
13886
+ readonly title?: string;
13887
+ /**
13888
+ * @description Sung vocals; `false` for an instrumental.
13889
+ * @default true
13890
+ */
13891
+ readonly vocals?: boolean;
13892
+ /**
13893
+ * Format: uuid
13894
+ * @description Sing with your own voice (beta): the id of one of your custom voices that has an active singing consent (`POST /v1/studio/voices/{id}/singing-consent`). ACE-Step uses your consented sung sample as a timbre reference, so the vocal approximates your timbre; it is not a faithful clone. Without singing consent, for an unknown voice or while voice cloning is not enabled for you, the song is still made with `timbre` and `warnings` says why.
13895
+ */
13896
+ readonly voice_passport_id?: string;
13897
+ };
13898
+ /** Music Room direction */
13899
+ readonly MusicRoomDirect: {
13900
+ /** @description What to change, e.g. "lay back on the chorus, fewer fills". */
13901
+ readonly direction: string;
13902
+ readonly role: components$1['schemas']['MusicRole'];
13903
+ /** @description Only this section (an id from the plan); default: the whole song. */
13904
+ readonly section_id?: string;
13905
+ };
13906
+ /** Music Room song list */
13907
+ readonly MusicRoomList: {
13908
+ readonly data: readonly components$1['schemas']['MusicRoom'][];
13909
+ readonly has_more?: boolean;
13910
+ /** @enum {string} */
13911
+ readonly object: 'list';
13912
+ };
13913
+ /** Music Room plan variant */
13914
+ readonly MusicRoomPlanVariant: {
13915
+ readonly bpm: number;
13916
+ readonly genre_id: string;
13917
+ readonly instrumentation: readonly {
13918
+ readonly instrument_id: string;
13919
+ readonly role: components$1['schemas']['MusicRole'];
13920
+ }[];
13921
+ /** @description Time signature, e.g. `4/4` or `7/8`. */
13922
+ readonly meter: string;
13923
+ /** @description Scale / mode id, e.g. `major`, `minor`, `hijaz`. */
13924
+ readonly mode_id: string;
13925
+ readonly rationale: string;
13926
+ readonly sections: readonly {
13927
+ readonly bars: number;
13928
+ readonly id: string;
13929
+ readonly kind: string;
13930
+ }[];
13931
+ readonly title: string;
13932
+ };
13933
+ /** Music Room quota */
13934
+ readonly MusicRoomQuota: {
13935
+ /** @description Songs included this month. */
13936
+ readonly included: number;
13937
+ /**
13938
+ * Format: date-time
13939
+ * @description End of the current calendar month (UTC).
13940
+ */
13941
+ readonly period_end: string;
13942
+ /** @description Your plan (`free`, `pro`, `power`, `max`, `team`…). */
13943
+ readonly plan: string;
13944
+ readonly remaining: number;
13945
+ readonly used: number;
13946
+ };
13355
13947
  /**
13356
13948
  * Music track metadata
13357
13949
  * @description Extra fields on each `/v1/audio/music` item.
@@ -15674,6 +16266,80 @@ type components$1 = {
15674
16266
  readonly seq: number;
15675
16267
  };
15676
16268
  };
16269
+ /**
16270
+ * Carousel / print build
16271
+ * @description A carousel or print creative queued for its paged export; download it from `export.url` once the export succeeds.
16272
+ * @example {
16273
+ * "object": "studio.creative_build",
16274
+ * "creative_id": "7a1b2c3d-0000-4000-8000-000000000051",
16275
+ * "seq": 3,
16276
+ * "kind": "carousel",
16277
+ * "format": "png",
16278
+ * "format_id": "4x5",
16279
+ * "pages": 6,
16280
+ * "quote_micro_usd": "12000",
16281
+ * "warnings": [],
16282
+ * "lint": [],
16283
+ * "print": null,
16284
+ * "document": null,
16285
+ * "export": {
16286
+ * "id": "3f0c9a7e-1b2d-4c5e-8f90-a1b2c3d4e5f7",
16287
+ * "object": "studio.export",
16288
+ * "kind": "carousel_png",
16289
+ * "status": "queued",
16290
+ * "creative_id": "7a1b2c3d-0000-4000-8000-000000000051",
16291
+ * "seq": 3,
16292
+ * "format": "4x5",
16293
+ * "fps": 0,
16294
+ * "filename": "spring-sale-4x5.zip",
16295
+ * "url": null,
16296
+ * "expires_at": null,
16297
+ * "bytes": null,
16298
+ * "rendered_seconds": null,
16299
+ * "cost_micro_usd": null,
16300
+ * "pages": null,
16301
+ * "boxes": null,
16302
+ * "lint": [],
16303
+ * "warnings": [],
16304
+ * "error": null,
16305
+ * "created_at": "2026-10-20T10:00:00Z"
16306
+ * }
16307
+ * }
16308
+ */
16309
+ readonly StudioCreativePagedBuild: {
16310
+ /** Format: uuid */
16311
+ readonly creative_id: string;
16312
+ readonly document: null;
16313
+ readonly export: components$1['schemas']['StudioExport'];
16314
+ /** @enum {string} */
16315
+ readonly format: 'png' | 'pdf';
16316
+ readonly format_id: string;
16317
+ /** @enum {string} */
16318
+ readonly kind: 'carousel' | 'print';
16319
+ readonly lint: readonly components$1['schemas']['CreativePrintLintIssue'][];
16320
+ /** @enum {string} */
16321
+ readonly object: 'studio.creative_build';
16322
+ readonly pages: number;
16323
+ /** @description Print PDFs only — physical sheet and PDF boxes. */
16324
+ readonly print: {
16325
+ /** @description BleedBox offsets from the TrimBox in points [left, right, top, bottom]. */
16326
+ readonly bleed_offsets_pt?: readonly number[] | null;
16327
+ /** @description Intended press output intent (e.g. `FOGRA39`); the file itself is RGB. */
16328
+ readonly color_profile?: string;
16329
+ readonly crop_marks?: boolean;
16330
+ /** @description Always `false` today (no PDF/X-4 conversion in the worker). */
16331
+ readonly pdf_x4?: boolean;
16332
+ /** @description Sheet (MediaBox) width and height in mm, bleed and crop-mark margin included. */
16333
+ readonly sheet_mm?: readonly number[];
16334
+ /** @description TrimBox offsets from the MediaBox in points [left, right, top, bottom]. */
16335
+ readonly trim_offsets_pt?: readonly number[] | null;
16336
+ } | null;
16337
+ /** @description Price held for the job in µUSD ($0.002 per page, min $0.01). */
16338
+ readonly quote_micro_usd: string;
16339
+ readonly seq: number;
16340
+ /** @description E.g. the PDF/X-4 limitation of print PDFs, or a note that the prepress check found errors. */
16341
+ readonly warnings: readonly string[];
16342
+ };
15677
16343
  /**
15678
16344
  * Studio export
15679
16345
  * @description An export of a video creative, downloadable once `status` is `succeeded`: an FCPXML zip with `project.fcpxml` and its media (`kind: fcpxml`), or a Lottie JSON / dotLottie file (`kind: lottie`, ready at once).
@@ -15698,6 +16364,8 @@ type components$1 = {
15698
16364
  * }
15699
16365
  */
15700
16366
  readonly StudioExport: {
16367
+ /** @description Print PDF only: TrimBox and BleedBox were written on every page; `null` until `succeeded`. */
16368
+ readonly boxes?: boolean | null;
15701
16369
  /** @description Size of the zip in bytes; `null` until `succeeded`. */
15702
16370
  readonly bytes: number | null;
15703
16371
  /**
@@ -15733,12 +16401,16 @@ type components$1 = {
15733
16401
  /** Format: uuid */
15734
16402
  readonly id: string;
15735
16403
  /**
15736
- * @description What was exported: an FCPXML project zip (`export.fcpxml`) or a Lottie file (`export.lottie`).
16404
+ * @description What was exported: an FCPXML project zip (`export.fcpxml`), a Lottie file (`export.lottie`), or a paged build of `POST /v1/studio/creatives/{id}/build`: a carousel PNG zip, a carousel PDF or a print PDF.
15737
16405
  * @enum {string}
15738
16406
  */
15739
- readonly kind?: 'fcpxml' | 'lottie';
16407
+ readonly kind?: 'fcpxml' | 'lottie' | 'carousel_png' | 'carousel_pdf' | 'print_pdf';
16408
+ /** @description Paged builds only: prepress issues found at dispatch. */
16409
+ readonly lint?: readonly components$1['schemas']['CreativePrintLintIssue'][];
15740
16410
  /** @enum {string} */
15741
16411
  readonly object: 'studio.export';
16412
+ /** @description Paged builds only: pages in the file; `null` until `succeeded`. */
16413
+ readonly pages?: number | null;
15742
16414
  /** @description Seconds of video newly rendered for this export (cached segments excluded); `null` until done. */
15743
16415
  readonly rendered_seconds: number | null;
15744
16416
  /** @description The exported creative version. */
@@ -15881,6 +16553,113 @@ type components$1 = {
15881
16553
  /** @description Default voice. */
15882
16554
  readonly voice?: string;
15883
16555
  };
16556
+ /**
16557
+ * Post copy
16558
+ * @example {
16559
+ * "object": "studio.post_copy",
16560
+ * "creative_id": "7a1b2c3d-0000-4000-8000-000000000051",
16561
+ * "seq": 3,
16562
+ * "kind": "carousel",
16563
+ * "language": "ro",
16564
+ * "platforms": [
16565
+ * {
16566
+ * "platform": "linkedin",
16567
+ * "caption": "Primăvara vine cu reduceri de 20% la toată colecția.",
16568
+ * "hashtags": [
16569
+ * "#primăvară",
16570
+ * "#reduceri"
16571
+ * ],
16572
+ * "text": "Primăvara vine cu reduceri de 20% la toată colecția.\n\n#primăvară #reduceri",
16573
+ * "chars": 74,
16574
+ * "limits": {
16575
+ * "caption": 3000,
16576
+ * "hashtags": 10,
16577
+ * "alt": 300
16578
+ * }
16579
+ * }
16580
+ * ],
16581
+ * "alt": [
16582
+ * {
16583
+ * "scene_id": "s1",
16584
+ * "text": "Un buchet de lalele galbene pe o masă albă."
16585
+ * }
16586
+ * ],
16587
+ * "fixes": [],
16588
+ * "cost_micro_usd": "2140"
16589
+ * }
16590
+ */
16591
+ readonly StudioPostCopy: {
16592
+ /** @description One alt text per slide in slide order (the first scene of an image), trimmed to the strictest platform's cap. */
16593
+ readonly alt: readonly {
16594
+ readonly scene_id: string;
16595
+ readonly text: string;
16596
+ }[];
16597
+ /** @description Token cost of the turn in µUSD. */
16598
+ readonly cost_micro_usd: string;
16599
+ /** Format: uuid */
16600
+ readonly creative_id: string;
16601
+ /** @description What the limit repair changed (trimmed captions, dropped or capped hashtags, missing alt texts). */
16602
+ readonly fixes: readonly {
16603
+ /** @enum {string} */
16604
+ readonly field?: 'caption' | 'hashtags' | 'alt';
16605
+ readonly message?: string;
16606
+ readonly platform?: string;
16607
+ }[];
16608
+ /** @enum {string} */
16609
+ readonly kind: 'carousel' | 'image' | 'video';
16610
+ /** @enum {string} */
16611
+ readonly language: 'ro' | 'en';
16612
+ /** @enum {string} */
16613
+ readonly object: 'studio.post_copy';
16614
+ /** @description One entry per requested platform, in request order. */
16615
+ readonly platforms: readonly {
16616
+ readonly caption: string;
16617
+ /** @description Length of `text` in Unicode code points. */
16618
+ readonly chars: number;
16619
+ /** @description Normalised `#tags` (letters, digits, underscore; diacritics kept), deduplicated. */
16620
+ readonly hashtags: readonly string[];
16621
+ readonly limits: {
16622
+ readonly alt?: number;
16623
+ readonly caption?: number;
16624
+ readonly hashtags?: number;
16625
+ };
16626
+ /** @enum {string} */
16627
+ readonly platform: 'instagram' | 'linkedin' | 'tiktok' | 'x' | 'facebook';
16628
+ /** @description The post as published — caption, a blank line, then the hashtags not already in the caption. */
16629
+ readonly text: string;
16630
+ }[];
16631
+ readonly seq: number;
16632
+ };
16633
+ /**
16634
+ * Post copy request
16635
+ * @example {
16636
+ * "platforms": [
16637
+ * "instagram",
16638
+ * "linkedin"
16639
+ * ],
16640
+ * "language": "ro",
16641
+ * "brief": "Reducere 20% până duminică"
16642
+ * }
16643
+ */
16644
+ readonly StudioPostCopyRequest: {
16645
+ /** @description Optional steer — audience, call to action, facts to include. */
16646
+ readonly brief?: string;
16647
+ /**
16648
+ * @default ro
16649
+ * @enum {string}
16650
+ */
16651
+ readonly language?: 'ro' | 'en';
16652
+ /**
16653
+ * @default [
16654
+ * "instagram",
16655
+ * "linkedin"
16656
+ * ]
16657
+ */
16658
+ readonly platforms?: readonly ('instagram' | 'linkedin' | 'tiktok' | 'x' | 'facebook')[];
16659
+ /** @description Creative version to describe (default the head). */
16660
+ readonly seq?: number;
16661
+ readonly tone?: string;
16662
+ };
15884
16663
  /** Studio production */
15885
16664
  readonly StudioProduction: {
15886
16665
  /** @enum {string} */
@@ -16800,6 +17579,21 @@ type components$1 = {
16800
17579
  /** @description Volume of a video scene's own audio (default 1, or 0 when the scene is narrated). */
16801
17580
  readonly video_volume?: number;
16802
17581
  };
17582
+ /** Custom voice */
17583
+ readonly StudioVoice: {
17584
+ /** Format: date-time */
17585
+ readonly created_at: string;
17586
+ readonly display_name: string;
17587
+ /** Format: uuid */
17588
+ readonly id: string;
17589
+ /** @enum {string} */
17590
+ readonly kind: 'ai_clone';
17591
+ readonly label: string;
17592
+ readonly locale: string;
17593
+ /** @enum {string} */
17594
+ readonly object: 'studio.voice';
17595
+ readonly singing: components$1['schemas']['StudioVoiceSinging'];
17596
+ };
16803
17597
  /** Voice takedown ticket */
16804
17598
  readonly StudioVoiceRevocation: {
16805
17599
  /** Format: uuid */
@@ -16826,6 +17620,30 @@ type components$1 = {
16826
17620
  /** @description Name of the person whose voice is concerned. */
16827
17621
  readonly voice_owner_name: string;
16828
17622
  };
17623
+ /** Singing consent (beta) */
17624
+ readonly StudioVoiceSinging: {
17625
+ /** Format: date-time */
17626
+ readonly consented_at: string | null;
17627
+ /**
17628
+ * @description Always `beta`: the singing approximates your timbre.
17629
+ * @enum {string}
17630
+ */
17631
+ readonly quality: 'beta';
17632
+ /** Format: date-time */
17633
+ readonly revoked_at: string | null;
17634
+ /**
17635
+ * @description `none` (never given), `active`, `revoked` (by you, or the voice ended).
17636
+ * @enum {string}
17637
+ */
17638
+ readonly status: 'none' | 'active' | 'revoked';
17639
+ };
17640
+ readonly StudioVoiceSingingConsentRequest: {
17641
+ /**
17642
+ * Format: uuid
17643
+ * @description Id of the singing recording session (both clips recorded).
17644
+ */
17645
+ readonly session_id: string;
17646
+ };
16829
17647
  readonly SystemOneAnswer: {
16830
17648
  readonly choice?: string;
16831
17649
  readonly confidence?: number;
@@ -27964,6 +28782,8 @@ interface operations$1 {
27964
28782
  readonly parameters: {
27965
28783
  readonly query?: never;
27966
28784
  readonly header?: {
28785
+ /** @description Replays the stored response of an earlier request with the same key for 24 h instead of running it again. */
28786
+ readonly 'Idempotency-Key'?: components$1['parameters']['IdempotencyKey'];
27967
28787
  /** @description Client correlation id; echoed back as `x-codai-trace-id` and persisted on the usage row. */
27968
28788
  readonly 'x-request-id'?: components$1['parameters']['RequestId'];
27969
28789
  };
@@ -27975,7 +28795,7 @@ interface operations$1 {
27975
28795
  };
27976
28796
  readonly requestBody?: {
27977
28797
  readonly content: {
27978
- readonly 'application/json': components$1['schemas']['CreativeBuildRequest'];
28798
+ readonly 'application/json': components$1['schemas']['CreativeBuildRequest'] | components$1['schemas']['CreativePagedBuildRequest'];
27979
28799
  };
27980
28800
  };
27981
28801
  readonly responses: {
@@ -27988,7 +28808,16 @@ interface operations$1 {
27988
28808
  readonly 'application/json': components$1['schemas']['StudioCreativeBuild'];
27989
28809
  };
27990
28810
  };
27991
- /** @description Invalid body (`invalid_request`), a video or image creative (`not_supported_for_kind`), a converted spec that fails the documents schema (`invalid_spec`, first issues in the message), or any build error of `POST /v1/studio/documents` (`asset_not_found`, `unsupported_image`, `too_many_charts`, `chart_render_failed`). */
28811
+ /** @description Carousel or print creative — export job queued (poll `GET /v1/studio/exports/{id}`). */
28812
+ readonly 202: {
28813
+ headers: {
28814
+ readonly [name: string]: unknown;
28815
+ };
28816
+ content: {
28817
+ readonly 'application/json': components$1['schemas']['StudioCreativePagedBuild'];
28818
+ };
28819
+ };
28820
+ /** @description Invalid body (`invalid_request`, e.g. `format: png` on a print creative or an unknown `format_id`), a video or image creative (`not_supported_for_kind`), a converted spec that fails the documents schema (`invalid_spec`, first issues in the message), a PNG slide larger than 3840 px (`unsupported_format`), or any build error of `POST /v1/studio/documents` (`asset_not_found`, `unsupported_image`, `too_many_charts`, `chart_render_failed`). */
27992
28821
  readonly 400: {
27993
28822
  headers: {
27994
28823
  readonly [name: string]: unknown;
@@ -28009,7 +28838,7 @@ interface operations$1 {
28009
28838
  readonly 'application/json': components$1['schemas']['Error'];
28010
28839
  };
28011
28840
  };
28012
- /** @description The generated file is larger than 50 MB (code `document_too_large`). */
28841
+ /** @description The generated file is larger than 50 MB (code `document_too_large`), or a paged build has more than 60 pages (`too_large`). */
28013
28842
  readonly 413: {
28014
28843
  headers: {
28015
28844
  readonly [name: string]: unknown;
@@ -28018,7 +28847,7 @@ interface operations$1 {
28018
28847
  readonly 'application/json': components$1['schemas']['Error'];
28019
28848
  };
28020
28849
  };
28021
- /** @description Spend cap reached (`rate_limit_exceeded`), or with `preview: true` 3 previews already queued or rendering (`too_many_previews`). */
28850
+ /** @description Spend cap reached (`rate_limit_exceeded`), with `preview: true` 3 previews already queued or rendering (`too_many_previews`), or for carousel / print 3 renders and exports already running (`too_many_renders`). */
28022
28851
  readonly 429: {
28023
28852
  headers: {
28024
28853
  readonly [name: string]: unknown;
@@ -28027,7 +28856,7 @@ interface operations$1 {
28027
28856
  readonly 'application/json': components$1['schemas']['Error'];
28028
28857
  };
28029
28858
  };
28030
- /** @description Studio documents are not configured on this gateway (code `documents_unavailable`). */
28859
+ /** @description Studio documents are not configured on this gateway (code `documents_unavailable`), or for carousel / print the render worker is not (`renders_unavailable`). */
28031
28860
  readonly 503: {
28032
28861
  headers: {
28033
28862
  readonly [name: string]: unknown;
@@ -28872,6 +29701,60 @@ interface operations$1 {
28872
29701
  };
28873
29702
  };
28874
29703
  };
29704
+ readonly regenerateCreativeNode: {
29705
+ readonly parameters: {
29706
+ readonly query?: never;
29707
+ readonly header?: {
29708
+ /** @description Replays the stored response of an earlier request with the same key for 24 h instead of running it again. */
29709
+ readonly 'Idempotency-Key'?: components$1['parameters']['IdempotencyKey'];
29710
+ /** @description Client correlation id; echoed back as `x-codai-trace-id` and persisted on the usage row. */
29711
+ readonly 'x-request-id'?: components$1['parameters']['RequestId'];
29712
+ };
29713
+ readonly path: {
29714
+ /** @description Creative UUID. A malformed, unknown, deleted or foreign id is 404. */
29715
+ readonly id: components$1['parameters']['CreativeId'];
29716
+ readonly nodeId: string;
29717
+ };
29718
+ readonly cookie?: never;
29719
+ };
29720
+ readonly requestBody: {
29721
+ readonly content: {
29722
+ readonly 'application/json': components$1['schemas']['CreativeRegenerateNodeRequest'];
29723
+ };
29724
+ };
29725
+ readonly responses: {
29726
+ /** @description New version appended. */
29727
+ readonly 200: {
29728
+ headers: {
29729
+ readonly [name: string]: unknown;
29730
+ };
29731
+ content: {
29732
+ readonly 'application/json': components$1['schemas']['CreativeRegenerateNodeResult'];
29733
+ };
29734
+ };
29735
+ /** @description Malformed body, not an image node (`invalid_request`), audio creative (`unsupported_kind`), filtered output (`content_filtered`, nothing charged). */
29736
+ readonly 400: {
29737
+ headers: {
29738
+ readonly [name: string]: unknown;
29739
+ };
29740
+ content: {
29741
+ readonly 'application/json': components$1['schemas']['CreativeError'];
29742
+ };
29743
+ };
29744
+ readonly 401: components$1['responses']['Unauthorized'];
29745
+ readonly 402: components$1['responses']['InsufficientFunds'];
29746
+ readonly 404: components$1['responses']['NotFound'];
29747
+ /** @description The creative changed since `base_seq` and the change overlaps (code `stale`). */
29748
+ readonly 409: {
29749
+ headers: {
29750
+ readonly [name: string]: unknown;
29751
+ };
29752
+ content: {
29753
+ readonly 'application/json': components$1['schemas']['CreativeError'];
29754
+ };
29755
+ };
29756
+ };
29757
+ };
28875
29758
  readonly applyCreativeOps: {
28876
29759
  readonly parameters: {
28877
29760
  readonly query?: never;
@@ -28956,6 +29839,79 @@ interface operations$1 {
28956
29839
  readonly 404: components$1['responses']['NotFound'];
28957
29840
  };
28958
29841
  };
29842
+ readonly writeCreativePostCopy: {
29843
+ readonly parameters: {
29844
+ readonly query?: never;
29845
+ readonly header?: {
29846
+ /** @description Replays the stored response of an earlier request with the same key for 24 h instead of running it again. */
29847
+ readonly 'Idempotency-Key'?: components$1['parameters']['IdempotencyKey'];
29848
+ /** @description Client correlation id; echoed back as `x-codai-trace-id` and persisted on the usage row. */
29849
+ readonly 'x-request-id'?: components$1['parameters']['RequestId'];
29850
+ };
29851
+ readonly path: {
29852
+ /** @description Creative UUID. A malformed, unknown, deleted or foreign id is 404. */
29853
+ readonly id: components$1['parameters']['CreativeId'];
29854
+ };
29855
+ readonly cookie?: never;
29856
+ };
29857
+ readonly requestBody?: {
29858
+ readonly content: {
29859
+ readonly 'application/json': components$1['schemas']['StudioPostCopyRequest'];
29860
+ };
29861
+ };
29862
+ readonly responses: {
29863
+ /** @description Post copy per platform, within each platform's limits. */
29864
+ readonly 200: {
29865
+ headers: {
29866
+ readonly [name: string]: unknown;
29867
+ };
29868
+ content: {
29869
+ readonly 'application/json': components$1['schemas']['StudioPostCopy'];
29870
+ };
29871
+ };
29872
+ /** @description Invalid body (`invalid_request`), or a deck, doc, sheet, print or audio creative (`not_supported_for_kind`). */
29873
+ readonly 400: {
29874
+ headers: {
29875
+ readonly [name: string]: unknown;
29876
+ };
29877
+ content: {
29878
+ readonly 'application/json': components$1['schemas']['CreativeError'];
29879
+ };
29880
+ };
29881
+ readonly 401: components$1['responses']['Unauthorized'];
29882
+ readonly 402: components$1['responses']['InsufficientFunds'];
29883
+ readonly 403: components$1['responses']['Forbidden'];
29884
+ /** @description Unknown creative or `seq` (`not_found`). */
29885
+ readonly 404: {
29886
+ headers: {
29887
+ readonly [name: string]: unknown;
29888
+ };
29889
+ content: {
29890
+ readonly 'application/json': components$1['schemas']['CreativeError'];
29891
+ };
29892
+ };
29893
+ /** @description The model answer could not be used (`no_post_copy`); only the turn that ran is billed. */
29894
+ readonly 422: {
29895
+ headers: {
29896
+ readonly [name: string]: unknown;
29897
+ };
29898
+ content: {
29899
+ readonly 'application/json': components$1['schemas']['CreativeError'];
29900
+ };
29901
+ };
29902
+ readonly 429: components$1['responses']['RateLimited'];
29903
+ readonly 502: components$1['responses']['UpstreamError'];
29904
+ /** @description The turn did not finish within 60 s (`timeout`). */
29905
+ readonly 504: {
29906
+ headers: {
29907
+ readonly [name: string]: unknown;
29908
+ };
29909
+ content: {
29910
+ readonly 'application/json': components$1['schemas']['CreativeError'];
29911
+ };
29912
+ };
29913
+ };
29914
+ };
28959
29915
  readonly renderCreative: {
28960
29916
  readonly parameters: {
28961
29917
  readonly query?: never;
@@ -29562,6 +30518,56 @@ interface operations$1 {
29562
30518
  };
29563
30519
  };
29564
30520
  };
30521
+ readonly transcriptCutCreative: {
30522
+ readonly parameters: {
30523
+ readonly query?: never;
30524
+ readonly header?: {
30525
+ /** @description Client correlation id; echoed back as `x-codai-trace-id` and persisted on the usage row. */
30526
+ readonly 'x-request-id'?: components$1['parameters']['RequestId'];
30527
+ };
30528
+ readonly path: {
30529
+ /** @description Creative UUID. A malformed, unknown, deleted or foreign id is 404. */
30530
+ readonly id: components$1['parameters']['CreativeId'];
30531
+ };
30532
+ readonly cookie?: never;
30533
+ };
30534
+ readonly requestBody: {
30535
+ readonly content: {
30536
+ readonly 'application/json': components$1['schemas']['CreativeTranscriptCutRequest'];
30537
+ };
30538
+ };
30539
+ readonly responses: {
30540
+ /** @description New version appended. */
30541
+ readonly 200: {
30542
+ headers: {
30543
+ readonly [name: string]: unknown;
30544
+ };
30545
+ content: {
30546
+ readonly 'application/json': components$1['schemas']['CreativeTranscriptCutResult'];
30547
+ };
30548
+ };
30549
+ /** @description Malformed body or word range (`invalid_request`), not a video node / creative (`unsupported_kind`), or the edit rejected by the engine (`invalid`, `locked`). */
30550
+ readonly 400: {
30551
+ headers: {
30552
+ readonly [name: string]: unknown;
30553
+ };
30554
+ content: {
30555
+ readonly 'application/json': components$1['schemas']['CreativeError'];
30556
+ };
30557
+ };
30558
+ readonly 401: components$1['responses']['Unauthorized'];
30559
+ readonly 404: components$1['responses']['NotFound'];
30560
+ /** @description No cached transcript for the clip (`captions_required`, with `node_id`), or the creative changed since `base_seq` (`stale`). */
30561
+ readonly 409: {
30562
+ headers: {
30563
+ readonly [name: string]: unknown;
30564
+ };
30565
+ content: {
30566
+ readonly 'application/json': components$1['schemas']['CreativeError'];
30567
+ };
30568
+ };
30569
+ };
30570
+ };
29565
30571
  readonly listCreativeVariants: {
29566
30572
  readonly parameters: {
29567
30573
  readonly query?: never;
@@ -30361,6 +31367,210 @@ interface operations$1 {
30361
31367
  readonly 404: components$1['responses']['NotFound'];
30362
31368
  };
30363
31369
  };
31370
+ readonly listStudioMusicRooms: {
31371
+ readonly parameters: {
31372
+ readonly query?: {
31373
+ /** @description Only songs created before this instant (ISO 8601). */
31374
+ readonly before?: string;
31375
+ /** @description Page size (1–100, default 20). */
31376
+ readonly limit?: number;
31377
+ };
31378
+ readonly header?: never;
31379
+ readonly path?: never;
31380
+ readonly cookie?: never;
31381
+ };
31382
+ readonly requestBody?: never;
31383
+ readonly responses: {
31384
+ /** @description A page of songs. */
31385
+ readonly 200: {
31386
+ headers: {
31387
+ readonly [name: string]: unknown;
31388
+ };
31389
+ content: {
31390
+ readonly 'application/json': components$1['schemas']['MusicRoomList'];
31391
+ };
31392
+ };
31393
+ readonly 400: components$1['responses']['BadRequest'];
31394
+ readonly 401: components$1['responses']['Unauthorized'];
31395
+ };
31396
+ };
31397
+ readonly createStudioMusicRoom: {
31398
+ readonly parameters: {
31399
+ readonly query?: never;
31400
+ readonly header?: {
31401
+ /** @description Replays the stored response of an earlier request with the same key for 24 h instead of running it again. */
31402
+ readonly 'Idempotency-Key'?: components$1['parameters']['IdempotencyKey'];
31403
+ };
31404
+ readonly path?: never;
31405
+ readonly cookie?: never;
31406
+ };
31407
+ readonly requestBody: {
31408
+ readonly content: {
31409
+ readonly 'application/json': components$1['schemas']['MusicRoomCreate'];
31410
+ };
31411
+ };
31412
+ readonly responses: {
31413
+ /** @description The song started; the producer is planning (or already waits at the plan gate). */
31414
+ readonly 202: {
31415
+ headers: {
31416
+ readonly [name: string]: unknown;
31417
+ };
31418
+ content: {
31419
+ readonly 'application/json': components$1['schemas']['MusicRoom'];
31420
+ };
31421
+ };
31422
+ readonly 400: components$1['responses']['BadRequest'];
31423
+ readonly 401: components$1['responses']['Unauthorized'];
31424
+ readonly 402: components$1['responses']['InsufficientFunds'];
31425
+ readonly 429: components$1['responses']['RateLimited'];
31426
+ /** @description The music renderer is not configured on this gateway (code `media_ops_unavailable`). */
31427
+ readonly 503: {
31428
+ headers: {
31429
+ readonly [name: string]: unknown;
31430
+ };
31431
+ content: {
31432
+ readonly 'application/json': components$1['schemas']['Error'];
31433
+ };
31434
+ };
31435
+ };
31436
+ };
31437
+ readonly getStudioMusicRoom: {
31438
+ readonly parameters: {
31439
+ readonly query?: never;
31440
+ readonly header?: never;
31441
+ readonly path: {
31442
+ /** @description Music Room song UUID. */
31443
+ readonly id: string;
31444
+ };
31445
+ readonly cookie?: never;
31446
+ };
31447
+ readonly requestBody?: never;
31448
+ readonly responses: {
31449
+ /** @description The song. */
31450
+ readonly 200: {
31451
+ headers: {
31452
+ readonly [name: string]: unknown;
31453
+ };
31454
+ content: {
31455
+ readonly 'application/json': components$1['schemas']['MusicRoom'];
31456
+ };
31457
+ };
31458
+ readonly 401: components$1['responses']['Unauthorized'];
31459
+ readonly 404: components$1['responses']['NotFound'];
31460
+ };
31461
+ };
31462
+ readonly chooseStudioMusicRoom: {
31463
+ readonly parameters: {
31464
+ readonly query?: never;
31465
+ readonly header?: never;
31466
+ readonly path: {
31467
+ /** @description Music Room song UUID. */
31468
+ readonly id: string;
31469
+ };
31470
+ readonly cookie?: never;
31471
+ };
31472
+ readonly requestBody: {
31473
+ readonly content: {
31474
+ readonly 'application/json': components$1['schemas']['MusicRoomChoose'];
31475
+ };
31476
+ };
31477
+ readonly responses: {
31478
+ /** @description The song after the answer. */
31479
+ readonly 200: {
31480
+ headers: {
31481
+ readonly [name: string]: unknown;
31482
+ };
31483
+ content: {
31484
+ readonly 'application/json': components$1['schemas']['MusicRoom'];
31485
+ };
31486
+ };
31487
+ readonly 400: components$1['responses']['BadRequest'];
31488
+ readonly 401: components$1['responses']['Unauthorized'];
31489
+ readonly 404: components$1['responses']['NotFound'];
31490
+ /** @description The song is not waiting at that gate (code `not_at_gate`). */
31491
+ readonly 409: {
31492
+ headers: {
31493
+ readonly [name: string]: unknown;
31494
+ };
31495
+ content: {
31496
+ readonly 'application/json': components$1['schemas']['Error'];
31497
+ };
31498
+ };
31499
+ };
31500
+ };
31501
+ readonly directStudioMusicRoom: {
31502
+ readonly parameters: {
31503
+ readonly query?: never;
31504
+ readonly header?: {
31505
+ /** @description Replays the stored response of an earlier request with the same key for 24 h instead of running it again. */
31506
+ readonly 'Idempotency-Key'?: components$1['parameters']['IdempotencyKey'];
31507
+ };
31508
+ readonly path: {
31509
+ /** @description Music Room song UUID. */
31510
+ readonly id: string;
31511
+ };
31512
+ readonly cookie?: never;
31513
+ };
31514
+ readonly requestBody: {
31515
+ readonly content: {
31516
+ readonly 'application/json': components$1['schemas']['MusicRoomDirect'];
31517
+ };
31518
+ };
31519
+ readonly responses: {
31520
+ /** @description The player is re-playing the part. */
31521
+ readonly 202: {
31522
+ headers: {
31523
+ readonly [name: string]: unknown;
31524
+ };
31525
+ content: {
31526
+ readonly 'application/json': components$1['schemas']['MusicRoom'];
31527
+ };
31528
+ };
31529
+ readonly 400: components$1['responses']['BadRequest'];
31530
+ readonly 401: components$1['responses']['Unauthorized'];
31531
+ readonly 402: components$1['responses']['InsufficientFunds'];
31532
+ readonly 404: components$1['responses']['NotFound'];
31533
+ /** @description The song is not waiting at the demo or final gate (code `not_at_gate`). */
31534
+ readonly 409: {
31535
+ headers: {
31536
+ readonly [name: string]: unknown;
31537
+ };
31538
+ content: {
31539
+ readonly 'application/json': components$1['schemas']['Error'];
31540
+ };
31541
+ };
31542
+ /** @description The music renderer is not configured on this gateway (code `media_ops_unavailable`). */
31543
+ readonly 503: {
31544
+ headers: {
31545
+ readonly [name: string]: unknown;
31546
+ };
31547
+ content: {
31548
+ readonly 'application/json': components$1['schemas']['Error'];
31549
+ };
31550
+ };
31551
+ };
31552
+ };
31553
+ readonly getStudioMusicRoomQuota: {
31554
+ readonly parameters: {
31555
+ readonly query?: never;
31556
+ readonly header?: never;
31557
+ readonly path?: never;
31558
+ readonly cookie?: never;
31559
+ };
31560
+ readonly requestBody?: never;
31561
+ readonly responses: {
31562
+ /** @description The monthly quota. */
31563
+ readonly 200: {
31564
+ headers: {
31565
+ readonly [name: string]: unknown;
31566
+ };
31567
+ content: {
31568
+ readonly 'application/json': components$1['schemas']['MusicRoomQuota'];
31569
+ };
31570
+ };
31571
+ readonly 401: components$1['responses']['Unauthorized'];
31572
+ };
31573
+ };
30364
31574
  readonly retrievePreview: {
30365
31575
  readonly parameters: {
30366
31576
  readonly query?: never;
@@ -31007,6 +32217,76 @@ interface operations$1 {
31007
32217
  readonly 429: components$1['responses']['RateLimited'];
31008
32218
  };
31009
32219
  };
32220
+ readonly addStudioVoiceSingingConsent: {
32221
+ readonly parameters: {
32222
+ readonly query?: never;
32223
+ readonly header?: never;
32224
+ readonly path: {
32225
+ readonly id: string;
32226
+ };
32227
+ readonly cookie?: never;
32228
+ };
32229
+ /** @description A finished `purpose: singing` recording session for this voice. */
32230
+ readonly requestBody: {
32231
+ readonly content: {
32232
+ readonly 'application/json': components$1['schemas']['StudioVoiceSingingConsentRequest'];
32233
+ };
32234
+ };
32235
+ readonly responses: {
32236
+ /** @description The voice, with `singing.status: active`. */
32237
+ readonly 200: {
32238
+ headers: {
32239
+ readonly [name: string]: unknown;
32240
+ };
32241
+ content: {
32242
+ readonly 'application/json': components$1['schemas']['StudioVoice'];
32243
+ };
32244
+ };
32245
+ /** @description Wrong session (`session_purpose_mismatch`), missing clips (`consent_missing`, `reference_missing`), outdated consent text (`singing_text_version_mismatch`) or no 18+ attestation. */
32246
+ readonly 400: {
32247
+ headers: {
32248
+ readonly [name: string]: unknown;
32249
+ };
32250
+ content: {
32251
+ readonly 'application/json': components$1['schemas']['Error'];
32252
+ };
32253
+ };
32254
+ readonly 401: components$1['responses']['Unauthorized'];
32255
+ readonly 403: components$1['responses']['Forbidden'];
32256
+ readonly 404: components$1['responses']['NotFound'];
32257
+ /** @description The 5-minute recording session expired (`session_expired`). */
32258
+ readonly 410: {
32259
+ headers: {
32260
+ readonly [name: string]: unknown;
32261
+ };
32262
+ content: {
32263
+ readonly 'application/json': components$1['schemas']['Error'];
32264
+ };
32265
+ };
32266
+ };
32267
+ };
32268
+ readonly revokeStudioVoiceSingingConsent: {
32269
+ readonly parameters: {
32270
+ readonly query?: never;
32271
+ readonly header?: never;
32272
+ readonly path: {
32273
+ readonly id: string;
32274
+ };
32275
+ readonly cookie?: never;
32276
+ };
32277
+ readonly requestBody?: never;
32278
+ readonly responses: {
32279
+ /** @description Singing consent revoked. */
32280
+ readonly 204: {
32281
+ headers: {
32282
+ readonly [name: string]: unknown;
32283
+ };
32284
+ content?: never;
32285
+ };
32286
+ readonly 401: components$1['responses']['Unauthorized'];
32287
+ readonly 404: components$1['responses']['NotFound'];
32288
+ };
32289
+ };
31010
32290
  readonly createSystemOne: {
31011
32291
  readonly parameters: {
31012
32292
  readonly query?: never;
@@ -34213,6 +35493,8 @@ interface operations$1 {
34213
35493
  readonly model?: string;
34214
35494
  readonly negative_prompt?: string;
34215
35495
  readonly prompt: string;
35496
+ /** @description Up to 3 of your ready PNG / JPEG image assets showing ONE subject (character or product) that Veo keeps consistent (Vertex `referenceImages`, `referenceType: asset`). Not combinable with `image`; always 8 s. A missing or foreign asset is 404, another type 400 — checked before anything is held or charged. */
35497
+ readonly reference_asset_ids?: readonly string[];
34216
35498
  /** @enum {string} */
34217
35499
  readonly resolution?: '720p' | '1080p';
34218
35500
  /** @enum {integer} */
@@ -34353,8 +35635,6 @@ interface operations$1 {
34353
35635
  };
34354
35636
  };
34355
35637
  }
34356
- //#endregion
34357
- //#region src/http.d.ts
34358
35638
  type ErrorEnvelope = components$1['schemas']['Error'];
34359
35639
  type ErrorCode = ErrorEnvelope['error']['code'];
34360
35640
  export declare class CodaiError extends Error {
@@ -34533,8 +35813,6 @@ interface SseFrame {
34533
35813
  export declare function readSse(res: Response, signal?: AbortSignal): AsyncGenerator<SseFrame>;
34534
35814
  /** Parse a frame's data as JSON, returning `null` for `[DONE]` / non-JSON. */
34535
35815
  export declare function frameJson<T = unknown>(frame: SseFrame): T | null;
34536
- //#endregion
34537
- //#region src/resources/_shared.d.ts
34538
35816
  type Schemas = components$1['schemas'];
34539
35817
  type Schema<K extends keyof Schemas> = Schemas[K];
34540
35818
  /** JSON request body of an operation. */
@@ -34560,8 +35838,6 @@ type QueryOf<Op extends keyof operations$1> = operations$1[Op]['parameters'] ext
34560
35838
  * build request bodies with plain mutable objects.
34561
35839
  */
34562
35840
  type Mutable<T> = T extends ReadonlyArray<infer U> ? Array<Mutable<U>> : T extends object ? { -readonly [K in keyof T]: Mutable<T[K]>; } : T;
34563
- //#endregion
34564
- //#region src/resources/account.d.ts
34565
35841
  export type AccountView = Reply<'getAccount'>;
34566
35842
  export type AccountPatchRequest = Mutable<Body<'patchAccount'>>;
34567
35843
  export type AccountPatchResponse = Reply<'patchAccount'>;
@@ -34569,7 +35845,7 @@ export type Receipt = Reply<'getReceipt'>;
34569
35845
  export type FeedbackRequest = Mutable<Body<'submitFeedback'>>;
34570
35846
  export type FeedbackResponse = Reply<'submitFeedback'>;
34571
35847
  export type PhoneModel = Schema<'AccountPhoneModel'>;
34572
- type CallOpts$38 = {
35848
+ type CallOpts$40 = {
34573
35849
  ext?: CodaiRequestExtensions;
34574
35850
  signal?: AbortSignal;
34575
35851
  };
@@ -34577,9 +35853,9 @@ export declare class Account {
34577
35853
  private readonly http;
34578
35854
  constructor(http: HttpClient);
34579
35855
  /** `GET /v1/account` — the full account card. */
34580
- get(opts?: CallOpts$38): Promise<AccountView>;
35856
+ get(opts?: CallOpts$40): Promise<AccountView>;
34581
35857
  /** `PATCH /v1/account` — consents, username, referral (at least one field). */
34582
- update(body: AccountPatchRequest, opts?: CallOpts$38): Promise<AccountPatchResponse>;
35858
+ update(body: AccountPatchRequest, opts?: CallOpts$40): Promise<AccountPatchResponse>;
34583
35859
  }
34584
35860
  export declare class Receipts {
34585
35861
  private readonly http;
@@ -34591,7 +35867,7 @@ export declare class Receipts {
34591
35867
  get(query?: {
34592
35868
  sessionId?: string;
34593
35869
  since?: string | Date;
34594
- }, opts?: CallOpts$38): Promise<Receipt>;
35870
+ }, opts?: CallOpts$40): Promise<Receipt>;
34595
35871
  }
34596
35872
  export declare class Feedback {
34597
35873
  private readonly http;
@@ -34600,16 +35876,14 @@ export declare class Feedback {
34600
35876
  * `POST /v1/feedback` — rate one turn. Exactly one of `event_id`,
34601
35877
  * `session_id`, `client_request_id` must be present.
34602
35878
  */
34603
- submit(body: FeedbackRequest, opts?: CallOpts$38): Promise<FeedbackResponse>;
35879
+ submit(body: FeedbackRequest, opts?: CallOpts$40): Promise<FeedbackResponse>;
34604
35880
  }
34605
35881
  export declare class PhoneModels {
34606
35882
  private readonly http;
34607
35883
  constructor(http: HttpClient);
34608
35884
  /** `GET /v1/phone/models` — on-device model catalog with signed URLs. */
34609
- list(opts?: CallOpts$38): Promise<PhoneModel[]>;
35885
+ list(opts?: CallOpts$40): Promise<PhoneModel[]>;
34610
35886
  }
34611
- //#endregion
34612
- //#region src/resources/agents.d.ts
34613
35887
  export type AgentRunRequest = Mutable<Body<'runAgentSync'>>;
34614
35888
  export type AgentRunCreateRequest = Mutable<Body<'createAgentRun'>>;
34615
35889
  export type AgentSyncResult = Reply<'runAgentSync'>;
@@ -34618,7 +35892,7 @@ export type AgentRun = Reply<'getAgentRun'>;
34618
35892
  export type AgentRunStep = Schema<'AgentRunStep'>;
34619
35893
  export type AgentRunStats = Reply<'getAgentRunStats'>;
34620
35894
  export type AgentRunStatus = Schema<'AgentRunStatus'>;
34621
- type CallOpts$37 = {
35895
+ type CallOpts$39 = {
34622
35896
  ext?: CodaiRequestExtensions;
34623
35897
  signal?: AbortSignal;
34624
35898
  };
@@ -34655,31 +35929,29 @@ export declare class AgentRuns {
34655
35929
  private readonly http;
34656
35930
  constructor(http: HttpClient);
34657
35931
  /** `POST /v1/agents/runs` — returns 202 with the run id. */
34658
- create(body: AgentRunCreateRequest, opts?: CallOpts$37): Promise<AgentRunAccepted>;
35932
+ create(body: AgentRunCreateRequest, opts?: CallOpts$39): Promise<AgentRunAccepted>;
34659
35933
  /** `GET /v1/agents/runs/{id}` */
34660
- get(id: string, opts?: CallOpts$37): Promise<AgentRun>;
35934
+ get(id: string, opts?: CallOpts$39): Promise<AgentRun>;
34661
35935
  /** `GET /v1/agents/runs/{id}/steps` — newest first. */
34662
- steps(id: string, opts?: CallOpts$37): Promise<AgentRunStep[]>;
35936
+ steps(id: string, opts?: CallOpts$39): Promise<AgentRunStep[]>;
34663
35937
  /** `GET /v1/agents/runs/stats?days=` */
34664
- stats(days?: number, opts?: CallOpts$37): Promise<AgentRunStats>;
35938
+ stats(days?: number, opts?: CallOpts$39): Promise<AgentRunStats>;
34665
35939
  /** `POST /v1/agents/runs/{id}/cancel` */
34666
- cancel(id: string, opts?: CallOpts$37): Promise<Reply<'cancelAgentRun'>>;
35940
+ cancel(id: string, opts?: CallOpts$39): Promise<Reply<'cancelAgentRun'>>;
34667
35941
  /**
34668
35942
  * `GET /v1/agents/runs/{id}/stream` — async iterator over `step` / `done` /
34669
35943
  * `timeout` events. The iterator ends after `done`; on `timeout` (30 min)
34670
35944
  * it also ends and you may reconnect (full replay from seq 0).
34671
35945
  */
34672
- stream(id: string, opts?: CallOpts$37): AsyncGenerator<AgentRunStreamEvent, void, undefined>;
35946
+ stream(id: string, opts?: CallOpts$39): AsyncGenerator<AgentRunStreamEvent, void, undefined>;
34673
35947
  }
34674
35948
  export declare class Agents {
34675
35949
  private readonly http;
34676
35950
  readonly runs: AgentRuns;
34677
35951
  constructor(http: HttpClient);
34678
35952
  /** `POST /v1/agents/run` — blocks until the agent loop finishes. */
34679
- run(body: AgentRunRequest, opts?: CallOpts$37): Promise<AgentRunResult>;
35953
+ run(body: AgentRunRequest, opts?: CallOpts$39): Promise<AgentRunResult>;
34680
35954
  }
34681
- //#endregion
34682
- //#region src/resources/audio.d.ts
34683
35955
  export type TranscriptionResponse = Reply<'createTranscription'>;
34684
35956
  export type SpeechRequest = Mutable<Body<'createSpeech'>>;
34685
35957
  export type SpeechStreamRequest = Mutable<Body<'createSpeechStream'>>;
@@ -34818,8 +36090,6 @@ export declare class Audio {
34818
36090
  signal?: AbortSignal;
34819
36091
  }): AsyncGenerator<SpeechStreamEvent, void, undefined>;
34820
36092
  }
34821
- //#endregion
34822
- //#region src/resources/billing.d.ts
34823
36093
  export type BillingOverview = Reply<'getBilling'>;
34824
36094
  export type BillingPlan = Schema<'BillingPlan'>;
34825
36095
  export type BillingWallet = Schema<'BillingWallet'>;
@@ -34841,7 +36111,7 @@ export interface StudioQuoteQuery {
34841
36111
  model?: string;
34842
36112
  n?: number;
34843
36113
  }
34844
- type CallOpts$36 = {
36114
+ type CallOpts$38 = {
34845
36115
  ext?: CodaiRequestExtensions;
34846
36116
  signal?: AbortSignal;
34847
36117
  };
@@ -34865,16 +36135,16 @@ export declare class Billing {
34865
36135
  private readonly http;
34866
36136
  constructor(http: HttpClient);
34867
36137
  /** `GET /v1/billing` — plan, wallet, auto top-up, cards and pay links (read-only). */
34868
- get(opts?: CallOpts$36): Promise<BillingOverview>;
36138
+ get(opts?: CallOpts$38): Promise<BillingOverview>;
34869
36139
  /** `GET /v1/billing/invoices` — fiscal invoices and credit notes, newest first. */
34870
36140
  invoices(query?: {
34871
36141
  limit?: number;
34872
- }, opts?: CallOpts$36): Promise<BillingInvoice[]>;
36142
+ }, opts?: CallOpts$38): Promise<BillingInvoice[]>;
34873
36143
  /**
34874
36144
  * `GET /v1/studio/quote` — what a Studio action costs (USD and wallet EUR micros) and your spendable balance,
34875
36145
  * before you run it. Paid Studio calls answer 402 `insufficient_funds` when `sufficient` is false. Free.
34876
36146
  */
34877
- studioQuote(query: StudioQuoteQuery, opts?: CallOpts$36): Promise<StudioQuote>;
36147
+ studioQuote(query: StudioQuoteQuery, opts?: CallOpts$38): Promise<StudioQuote>;
34878
36148
  /**
34879
36149
  * Poll `get()` every `intervalMs` and call `onLow` once each time the wallet
34880
36150
  * balance crosses below `thresholdEur`. Read-only: never creates a checkout.
@@ -34882,8 +36152,6 @@ export declare class Billing {
34882
36152
  */
34883
36153
  watchBalance(opts: WatchBalanceOptions): () => void;
34884
36154
  }
34885
- //#endregion
34886
- //#region src/resources/cards.d.ts
34887
36155
  /** `{ block, provenance }` (+ `results` for geocode) as returned by every JSON card endpoint. */
34888
36156
  export type CardDataResponse = Schema<'CardDataResponse'>;
34889
36157
  export type CardsWeatherParams = QueryOf<'cardsWeather'>;
@@ -34919,7 +36187,7 @@ export interface CardsRendered {
34919
36187
  width: number | null;
34920
36188
  height: number | null;
34921
36189
  }
34922
- type CallOpts$35 = {
36190
+ type CallOpts$37 = {
34923
36191
  ext?: CodaiRequestExtensions;
34924
36192
  signal?: AbortSignal;
34925
36193
  };
@@ -34928,62 +36196,60 @@ export declare class Cards {
34928
36196
  constructor(http: HttpClient);
34929
36197
  private get;
34930
36198
  /** `GET /v1/cards/weather` — `weather` block from MET Norway (cached 30–60 min per 0.01°, free). */
34931
- weather(params: CardsWeatherParams, opts?: CallOpts$35): Promise<CardsWeatherResponse>;
36199
+ weather(params: CardsWeatherParams, opts?: CallOpts$37): Promise<CardsWeatherResponse>;
34932
36200
  /**
34933
36201
  * `GET /v1/cards/places` — `places` block from Google Places: Text Search with `q` (biased to `lat`/`lng`/`radius`),
34934
36202
  * Nearby Search without it. Billed per call; `block` is null when nothing matched.
34935
36203
  */
34936
- places(params: CardsPlacesParams, opts?: CallOpts$35): Promise<CardsPlacesResponse>;
36204
+ places(params: CardsPlacesParams, opts?: CallOpts$37): Promise<CardsPlacesResponse>;
34937
36205
  /** `GET /v1/cards/geocode` — `map` block (≤ 5 markers) plus raw `results` (Google Geocoding, billed). */
34938
- geocode(params: CardsGeocodeParams, opts?: CallOpts$35): Promise<CardsGeocodeResponse>;
36206
+ geocode(params: CardsGeocodeParams, opts?: CallOpts$37): Promise<CardsGeocodeResponse>;
34939
36207
  /**
34940
36208
  * `GET /v1/cards/static-map` — PNG from Google Maps Static proxied through the gateway (no maps key on the client).
34941
36209
  * Needs `center` or `markers` (`lat,lng[,L]` joined by `|`); ≤ 640×400 points. Billed per call.
34942
36210
  */
34943
- staticMap(params: CardsStaticMapParams, opts?: CallOpts$35): Promise<CardsStaticMap>;
36211
+ staticMap(params: CardsStaticMapParams, opts?: CallOpts$37): Promise<CardsStaticMap>;
34944
36212
  /**
34945
36213
  * `GET /v1/cards/fx` — BNR (default) or ECB reference rates: a `metric` block with `from`+`to`, otherwise a `table`
34946
36214
  * block against `quote`, optionally limited to `symbols` (comma-separated). Free.
34947
36215
  */
34948
- fx(params?: CardsFxParams, opts?: CallOpts$35): Promise<CardsFxResponse>;
36216
+ fx(params?: CardsFxParams, opts?: CallOpts$37): Promise<CardsFxResponse>;
34949
36217
  /**
34950
36218
  * `GET /v1/cards/route` — travel time from Google Routes: `route` { mode, durationS, staticDurationS, distanceM,
34951
36219
  * polyline } and a `map` block. `origin`/`destination` as "lat,lng" or `from`/`to` as addresses; `mode` drive
34952
36220
  * (traffic-aware, default), walk, bicycle, transit, two_wheeler. Billed per call; both null when no route exists.
34953
36221
  */
34954
- route(params: CardsRouteParams, opts?: CallOpts$35): Promise<CardsRouteResponse>;
36222
+ route(params: CardsRouteParams, opts?: CallOpts$37): Promise<CardsRouteResponse>;
34955
36223
  /**
34956
36224
  * `GET /v1/cards/track` — parcel history as a `timeline` block plus `result` (carrier, configured, found,
34957
36225
  * delivered, events, trackingUrl). `carrier` (sameday | fan | cargus | dpd) is guessed from the AWB when omitted;
34958
36226
  * carriers without gateway credentials answer `configured: false` with only the tracking link. Free.
34959
36227
  */
34960
- track(params: CardsTrackParams, opts?: CallOpts$35): Promise<CardsTrackResponse>;
36228
+ track(params: CardsTrackParams, opts?: CallOpts$37): Promise<CardsTrackResponse>;
34961
36229
  /**
34962
36230
  * `GET /v1/cards/efactura` — your fiscal documents issued through Brivio with their ANAF e-Factura status
34963
36231
  * (`documents[]` + a `table` block, null when there are none). Free.
34964
36232
  */
34965
- efactura(params?: CardsEfacturaParams, opts?: CallOpts$35): Promise<CardsEfacturaResponse>;
36233
+ efactura(params?: CardsEfacturaParams, opts?: CallOpts$37): Promise<CardsEfacturaResponse>;
34966
36234
  /**
34967
36235
  * `POST /v1/cards/unfurl` — `links` block (variant `preview`) for a public https page; SSRF-guarded, cached 24 h.
34968
36236
  * Private targets throw 400 `unfurl_blocked`, non-https pages 422 `unfurl_not_https`.
34969
36237
  */
34970
- unfurl(url: string, opts?: CallOpts$35): Promise<CardsUnfurlResponse>;
36238
+ unfurl(url: string, opts?: CallOpts$37): Promise<CardsUnfurlResponse>;
34971
36239
  /**
34972
36240
  * `POST /v1/cards/product` — `products` block with one item from a public https product page's schema.org
34973
36241
  * `Product` JSON-LD (or OpenGraph product tags): name, image, price + currency (lowest offer), old price, rating
34974
36242
  * (0–5), reviews, seller, availability badge in `lang` (en default). Only what the page states; never sponsored.
34975
36243
  * SSRF-guarded like `unfurl`, cached 6 h. No product data throws 422 `product_not_found`.
34976
36244
  */
34977
- product(url: string, lang?: 'en' | 'ro', opts?: CallOpts$35): Promise<CardsProductResponse>;
36245
+ product(url: string, lang?: 'en' | 'ro', opts?: CallOpts$37): Promise<CardsProductResponse>;
34978
36246
  /**
34979
36247
  * `POST /v1/cards/render` — renders a `chart` or `qr` block to `format` (`png` default, or `svg`) at
34980
36248
  * `width` x `height` CSS px (64–1200, defaults 480 x 300; QR is square) times `scale` (1–3, PNG only).
34981
36249
  * Other block types (Mermaid `diagram`, `math`, …) throw 422 `render_unsupported`. Free; 2000 renders per day.
34982
36250
  */
34983
- render(body: CardsRenderBody, opts?: CallOpts$35): Promise<CardsRendered>;
36251
+ render(body: CardsRenderBody, opts?: CallOpts$37): Promise<CardsRendered>;
34984
36252
  }
34985
- //#endregion
34986
- //#region src/resources/chat.d.ts
34987
36253
  export type ChatCompletionRequest = Mutable<Body<'createChatCompletion'>>;
34988
36254
  /** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */
34989
36255
  export type ChatCompletionInput = Omit<ChatCompletionRequest, 'stream' | 'model'> & {
@@ -35090,13 +36356,11 @@ export declare class Chat {
35090
36356
  readonly completions: ChatCompletions;
35091
36357
  constructor(http: HttpClient);
35092
36358
  }
35093
- //#endregion
35094
- //#region src/resources/devices.d.ts
35095
36359
  export type Device = Schema<'DeviceListItem'>;
35096
36360
  export type DevicePatch = Mutable<Body<'updateDevice'>>;
35097
36361
  export type DevicePatched = Reply<'updateDevice'>;
35098
36362
  export type DispatchInbox = Reply<'getMyDispatchInbox'>;
35099
- type CallOpts$34 = {
36363
+ type CallOpts$36 = {
35100
36364
  ext?: CodaiRequestExtensions;
35101
36365
  signal?: AbortSignal;
35102
36366
  };
@@ -35104,26 +36368,24 @@ export declare class Devices {
35104
36368
  private readonly http;
35105
36369
  constructor(http: HttpClient);
35106
36370
  /** `GET /v1/devices` — most recently seen first. */
35107
- list(opts?: CallOpts$34): Promise<Device[]>;
36371
+ list(opts?: CallOpts$36): Promise<Device[]>;
35108
36372
  /** `PATCH /v1/devices/{id}` — push token and/or capabilities. */
35109
- update(id: string, body: DevicePatch, opts?: CallOpts$34): Promise<DevicePatched>;
36373
+ update(id: string, body: DevicePatch, opts?: CallOpts$36): Promise<DevicePatched>;
35110
36374
  /** `DELETE /v1/devices/{id}` */
35111
- delete(id: string, opts?: CallOpts$34): Promise<Reply<'deleteDevice'>>;
36375
+ delete(id: string, opts?: CallOpts$36): Promise<Reply<'deleteDevice'>>;
35112
36376
  /**
35113
36377
  * `POST /v1/keys/self/revoke` — the API key this client uses revokes ITSELF (sign out).
35114
36378
  * Every later call with it fails with 401.
35115
36379
  */
35116
- revokeSelfKey(opts?: CallOpts$34): Promise<Reply<'revokeSelfKey'>>;
36380
+ revokeSelfKey(opts?: CallOpts$36): Promise<Reply<'revokeSelfKey'>>;
35117
36381
  /**
35118
36382
  * `GET /v1/devices/me/dispatch?limit=` — pending controls dispatched at the
35119
36383
  * calling device (`x-codai-device` required) across all owned sessions.
35120
36384
  */
35121
36385
  dispatchInbox(query?: {
35122
36386
  limit?: number;
35123
- }, opts?: CallOpts$34): Promise<DispatchInbox>;
36387
+ }, opts?: CallOpts$36): Promise<DispatchInbox>;
35124
36388
  }
35125
- //#endregion
35126
- //#region src/resources/embeddings.d.ts
35127
36389
  export type EmbeddingsRequest = Mutable<Body<'createEmbeddings'>>;
35128
36390
  export type EmbeddingsResponse = Reply<'createEmbeddings'>;
35129
36391
  export interface EmbeddingsResult {
@@ -35146,8 +36408,6 @@ export declare class Embeddings {
35146
36408
  signal?: AbortSignal;
35147
36409
  }): Promise<EmbeddingsResult>;
35148
36410
  }
35149
- //#endregion
35150
- //#region src/resources/environments.d.ts
35151
36411
  export type Environment = Schema<'Environment'>;
35152
36412
  export type EnvironmentDetail = Schema<'EnvironmentDetail'>;
35153
36413
  export type EnvironmentState = Schema<'EnvironmentState'>;
@@ -35183,7 +36443,7 @@ export type EnvironmentJobStartBody = Mutable<Body<'startEnvironmentJob'>>;
35183
36443
  export type EnvironmentJobStarted = Schema<'EnvironmentJobStarted'>;
35184
36444
  export type EnvironmentJob = Schema<'EnvironmentJob'>;
35185
36445
  export type GetEnvironmentJobQuery = Mutable<QueryOf<'getEnvironmentJob'>>;
35186
- type CallOpts$33 = {
36446
+ type CallOpts$35 = {
35187
36447
  ext?: CodaiRequestExtensions;
35188
36448
  signal?: AbortSignal;
35189
36449
  };
@@ -35191,70 +36451,70 @@ export declare class EnvironmentMembers {
35191
36451
  private readonly http;
35192
36452
  constructor(http: HttpClient);
35193
36453
  /** `GET /v1/environments/{id}/members` — any role. */
35194
- list(envId: string, opts?: CallOpts$33): Promise<EnvironmentMember[]>;
36454
+ list(envId: string, opts?: CallOpts$35): Promise<EnvironmentMember[]>;
35195
36455
  /** `POST /v1/environments/{id}/members` — exactly one of `user_id` / `email`. */
35196
- add(envId: string, body: EnvironmentAddMemberBody, opts?: CallOpts$33): Promise<EnvironmentMemberCreated>;
36456
+ add(envId: string, body: EnvironmentAddMemberBody, opts?: CallOpts$35): Promise<EnvironmentMemberCreated>;
35197
36457
  /** `PUT /v1/environments/{id}/members/me/ssh-key` — one `authorized_keys` line. */
35198
- setSshKey(envId: string, publicKey: string, opts?: CallOpts$33): Promise<Reply<'setMyEnvironmentSshKey'>>;
36458
+ setSshKey(envId: string, publicKey: string, opts?: CallOpts$35): Promise<Reply<'setMyEnvironmentSshKey'>>;
35199
36459
  /** `PATCH /v1/environments/{id}/members/{userId}` — 409 `last_owner` on demoting the last owner. */
35200
- setRole(envId: string, userId: string, role: EnvironmentRole, opts?: CallOpts$33): Promise<Reply<'setEnvironmentMemberRole'>['member']>;
36460
+ setRole(envId: string, userId: string, role: EnvironmentRole, opts?: CallOpts$35): Promise<Reply<'setEnvironmentMemberRole'>['member']>;
35201
36461
  /** `DELETE /v1/environments/{id}/members/{userId}` — pass your own id to leave. */
35202
- remove(envId: string, userId: string, opts?: CallOpts$33): Promise<Reply<'removeEnvironmentMember'>>;
36462
+ remove(envId: string, userId: string, opts?: CallOpts$35): Promise<Reply<'removeEnvironmentMember'>>;
35203
36463
  /** `POST /v1/environments/{id}/members/me/ssh-cert` — 12 h OpenSSH user certificate for your key. */
35204
- sshCert(envId: string, body: EnvironmentSshCertBody, opts?: CallOpts$33): Promise<EnvironmentSshCert>;
36464
+ sshCert(envId: string, body: EnvironmentSshCertBody, opts?: CallOpts$35): Promise<EnvironmentSshCert>;
35205
36465
  }
35206
36466
  /** `/v1/environments/{id}/tasks` — fire-and-forget agent tasks run in the environment. */
35207
36467
  export declare class EnvironmentTasks {
35208
36468
  private readonly http;
35209
36469
  constructor(http: HttpClient);
35210
36470
  /** `GET /v1/environments/{id}/tasks` */
35211
- list(envId: string, opts?: CallOpts$33): Promise<EnvironmentTaskList>;
36471
+ list(envId: string, opts?: CallOpts$35): Promise<EnvironmentTaskList>;
35212
36472
  /** `POST /v1/environments/{id}/tasks` — queued; you get a notification when it finishes. */
35213
- create(envId: string, body: EnvironmentTaskCreateBody, opts?: CallOpts$33): Promise<EnvironmentTaskCreated>;
36473
+ create(envId: string, body: EnvironmentTaskCreateBody, opts?: CallOpts$35): Promise<EnvironmentTaskCreated>;
35214
36474
  /** `GET /v1/environments/{id}/tasks/{taskId}` */
35215
- get(envId: string, taskId: string, opts?: CallOpts$33): Promise<EnvironmentTaskDetail>;
36475
+ get(envId: string, taskId: string, opts?: CallOpts$35): Promise<EnvironmentTaskDetail>;
35216
36476
  }
35217
36477
  /** `/v1/environments/{id}/files` — read/write/list over the relay (developer role or higher). */
35218
36478
  export declare class EnvironmentFiles {
35219
36479
  private readonly http;
35220
36480
  constructor(http: HttpClient);
35221
36481
  /** `GET /v1/environments/{id}/files?path=` — directory entries; no path → your workspace. */
35222
- list(envId: string, path?: string, opts?: CallOpts$33): Promise<EnvironmentFileList>;
36482
+ list(envId: string, path?: string, opts?: CallOpts$35): Promise<EnvironmentFileList>;
35223
36483
  /** `GET /v1/environments/{id}/files/{path}` — UTF-8 text (64 KB default, `maxBytes` ≤ 512 KB). */
35224
36484
  get(envId: string, path: string, options?: {
35225
36485
  maxBytes?: number;
35226
- } & CallOpts$33): Promise<EnvironmentFile>;
36486
+ } & CallOpts$35): Promise<EnvironmentFile>;
35227
36487
  /** `PUT /v1/environments/{id}/files/{path}` — replace with UTF-8 text (≤ 2 MB). */
35228
- put(envId: string, path: string, content: string, opts?: CallOpts$33): Promise<EnvironmentFileWritten>;
36488
+ put(envId: string, path: string, content: string, opts?: CallOpts$35): Promise<EnvironmentFileWritten>;
35229
36489
  }
35230
36490
  /** `/v1/environments/{id}/jobs` — background jobs on the environment daemon. */
35231
36491
  export declare class EnvironmentJobs {
35232
36492
  private readonly http;
35233
36493
  constructor(http: HttpClient);
35234
36494
  /** `POST /v1/environments/{id}/jobs` — returns at once with `job_id`. */
35235
- start(envId: string, body: EnvironmentJobStartBody, opts?: CallOpts$33): Promise<EnvironmentJobStarted>;
36495
+ start(envId: string, body: EnvironmentJobStartBody, opts?: CallOpts$35): Promise<EnvironmentJobStarted>;
35236
36496
  /** `GET /v1/environments/{id}/jobs/{jobId}` — status + output (`since` = previous `next_offset`). */
35237
- get(envId: string, jobId: string | number, query?: GetEnvironmentJobQuery, opts?: CallOpts$33): Promise<EnvironmentJob>;
36497
+ get(envId: string, jobId: string | number, query?: GetEnvironmentJobQuery, opts?: CallOpts$35): Promise<EnvironmentJob>;
35238
36498
  }
35239
36499
  export declare class EnvironmentPorts {
35240
36500
  private readonly http;
35241
36501
  constructor(http: HttpClient);
35242
36502
  /** `GET /v1/environments/{id}/ports` — published (forwarded) ports. */
35243
- list(envId: string, opts?: CallOpts$33): Promise<EnvironmentPort[]>;
36503
+ list(envId: string, opts?: CallOpts$35): Promise<EnvironmentPort[]>;
35244
36504
  /** `PUT /v1/environments/{id}/ports/{port}` — publish or change visibility (upsert). */
35245
- set(envId: string, port: number, body: EnvironmentPortBody, opts?: CallOpts$33): Promise<EnvironmentPort>;
36505
+ set(envId: string, port: number, body: EnvironmentPortBody, opts?: CallOpts$35): Promise<EnvironmentPort>;
35246
36506
  /** `DELETE /v1/environments/{id}/ports/{port}` — unpublish. */
35247
- remove(envId: string, port: number, opts?: CallOpts$33): Promise<Reply<'removeEnvironmentPort'>>;
36507
+ remove(envId: string, port: number, opts?: CallOpts$35): Promise<Reply<'removeEnvironmentPort'>>;
35248
36508
  }
35249
36509
  export declare class EnvironmentSecrets {
35250
36510
  private readonly http;
35251
36511
  constructor(http: HttpClient);
35252
36512
  /** `GET /v1/environments/{id}/secrets` — names and timestamps only, never values. */
35253
- list(envId: string, opts?: CallOpts$33): Promise<EnvironmentSecret[]>;
36513
+ list(envId: string, opts?: CallOpts$35): Promise<EnvironmentSecret[]>;
35254
36514
  /** `PUT /v1/environments/{id}/secrets/{name}` — upsert; `name` is `ENV_STYLE`. */
35255
- set(envId: string, name: string, value: string, opts?: CallOpts$33): Promise<EnvironmentSecretSet>;
36515
+ set(envId: string, name: string, value: string, opts?: CallOpts$35): Promise<EnvironmentSecretSet>;
35256
36516
  /** `DELETE /v1/environments/{id}/secrets/{name}` */
35257
- remove(envId: string, name: string, opts?: CallOpts$33): Promise<Reply<'removeEnvironmentSecret'>>;
36517
+ remove(envId: string, name: string, opts?: CallOpts$35): Promise<Reply<'removeEnvironmentSecret'>>;
35258
36518
  }
35259
36519
  export declare class Environments {
35260
36520
  private readonly http;
@@ -35269,45 +36529,43 @@ export declare class Environments {
35269
36529
  * `POST /v1/environments/{id}/exec` — run one relay op and wait (developer+). `op` defaults to
35270
36530
  * `shell` with `command`; 409 `environment_offline`, 504 `host_timeout`.
35271
36531
  */
35272
- exec(envId: string, body: EnvironmentExecBody, opts?: CallOpts$33): Promise<EnvironmentExecResult>;
36532
+ exec(envId: string, body: EnvironmentExecBody, opts?: CallOpts$35): Promise<EnvironmentExecResult>;
35273
36533
  /** `GET /v1/environments/{id}/ssh-ca` — CA public keys to trust (`@cert-authority` lines). */
35274
- sshCa(envId: string, opts?: CallOpts$33): Promise<EnvironmentSshCa>;
36534
+ sshCa(envId: string, opts?: CallOpts$35): Promise<EnvironmentSshCa>;
35275
36535
  /** `GET /v1/environments?project_id=&for_user_id=me` — newest first, every state. */
35276
- list(query?: ListEnvironmentsQuery, opts?: CallOpts$33): Promise<Environment[]>;
36536
+ list(query?: ListEnvironmentsQuery, opts?: CallOpts$35): Promise<Environment[]>;
35277
36537
  /**
35278
36538
  * `POST /v1/environments` — `byo` starts `pending`; managed providers start
35279
36539
  * `creating`. 409 `already_has_env` in a `vm_per_dev` project (the error
35280
36540
  * body carries the `environment_id` to reuse).
35281
36541
  */
35282
- create(body: EnvironmentCreateBody, opts?: CallOpts$33): Promise<Environment>;
36542
+ create(body: EnvironmentCreateBody, opts?: CallOpts$35): Promise<Environment>;
35283
36543
  /**
35284
36544
  * `POST /v1/environments/enroll` — daemon side. The one-time `codai_env_…`
35285
36545
  * token in the body is the only credential; the client's API key header is
35286
36546
  * ignored by this route. Managed environments additionally receive a
35287
36547
  * freshly minted `api_key`, returned exactly once.
35288
36548
  */
35289
- enroll(body: EnvironmentEnrollBody, opts?: CallOpts$33): Promise<EnvironmentEnrolled>;
36549
+ enroll(body: EnvironmentEnrollBody, opts?: CallOpts$35): Promise<EnvironmentEnrolled>;
35290
36550
  /** `GET /v1/environments/{id}` — environment, your role, members, ports, recent events. */
35291
- get(envId: string, opts?: CallOpts$33): Promise<EnvironmentDetail>;
36551
+ get(envId: string, opts?: CallOpts$35): Promise<EnvironmentDetail>;
35292
36552
  /** `PATCH /v1/environments/{id}` — `name` and/or `idle_timeout_minutes` (5..1440). */
35293
- update(envId: string, body: EnvironmentPatchBody, opts?: CallOpts$33): Promise<Environment>;
36553
+ update(envId: string, body: EnvironmentPatchBody, opts?: CallOpts$35): Promise<Environment>;
35294
36554
  /** `POST /v1/environments/{id}/start` — managed providers only (`stopped` → `starting`). */
35295
- start(envId: string, opts?: CallOpts$33): Promise<EnvironmentTransition>;
36555
+ start(envId: string, opts?: CallOpts$35): Promise<EnvironmentTransition>;
35296
36556
  /** `POST /v1/environments/{id}/stop` — managed providers only (`running` → `stopping`). */
35297
- stop(envId: string, opts?: CallOpts$33): Promise<EnvironmentTransition>;
36557
+ stop(envId: string, opts?: CallOpts$35): Promise<EnvironmentTransition>;
35298
36558
  /** `POST /v1/environments/{id}/archive` — keeps history, releases the machine. */
35299
- archive(envId: string, opts?: CallOpts$33): Promise<EnvironmentTransition>;
36559
+ archive(envId: string, opts?: CallOpts$35): Promise<EnvironmentTransition>;
35300
36560
  /** `POST /v1/environments/{id}/destroy` — owner only; terminal. */
35301
- destroy(envId: string, opts?: CallOpts$33): Promise<EnvironmentTransition>;
36561
+ destroy(envId: string, opts?: CallOpts$35): Promise<EnvironmentTransition>;
35302
36562
  /**
35303
36563
  * `POST /v1/environments/{id}/enroll-token` — `byo` only; a 30-minute
35304
36564
  * one-time token for `enroll()`. Minting again replaces the previous one.
35305
36565
  */
35306
- enrollToken(envId: string, opts?: CallOpts$33): Promise<EnvironmentEnrollToken>;
36566
+ enrollToken(envId: string, opts?: CallOpts$35): Promise<EnvironmentEnrollToken>;
35307
36567
  private transition;
35308
36568
  }
35309
- //#endregion
35310
- //#region src/resources/health.d.ts
35311
36569
  export type HealthResponse = Reply<'getHealth'>;
35312
36570
  export type HealthReadyResponse = Reply<'getHealthReady'>;
35313
36571
  export type StatusResponse = Reply<'getStatus'>;
@@ -35332,15 +36590,13 @@ export declare class Health {
35332
36590
  signal?: AbortSignal;
35333
36591
  }): Promise<StatusResponse>;
35334
36592
  }
35335
- //#endregion
35336
- //#region src/resources/hosts.d.ts
35337
36593
  export type HostPresence = Schema<'HostPresence'>;
35338
36594
  export type HostOp = Schema<'HostOp'>;
35339
36595
  export type HostExecBody = Mutable<Body<'execOnHost'>>;
35340
36596
  export type HostExecResponse = Reply<'execOnHost'>;
35341
36597
  export type HostExecRequest = Schema<'HostExecRequest'>;
35342
36598
  export type HostExecResultBody = Mutable<Body<'postHostExecResult'>>;
35343
- type CallOpts$32 = {
36599
+ type CallOpts$34 = {
35344
36600
  ext?: CodaiRequestExtensions;
35345
36601
  signal?: AbortSignal;
35346
36602
  };
@@ -35367,7 +36623,7 @@ export declare class Hosts {
35367
36623
  private readonly http;
35368
36624
  constructor(http: HttpClient);
35369
36625
  /** `GET /v1/hosts` — your devices currently connected as hosts. */
35370
- list(opts?: CallOpts$32): Promise<HostPresence[]>;
36626
+ list(opts?: CallOpts$34): Promise<HostPresence[]>;
35371
36627
  /**
35372
36628
  * `POST /v1/hosts/{deviceId}/exec` — run one op on a connected host and
35373
36629
  * block until it answers (or `timeout_ms`, default 60 s).
@@ -35375,9 +36631,9 @@ export declare class Hosts {
35375
36631
  exec(deviceId: string, op: HostOp, args?: Record<string, unknown>, extra?: {
35376
36632
  timeoutMs?: number;
35377
36633
  label?: string;
35378
- } & CallOpts$32): Promise<HostExecResponse>;
36634
+ } & CallOpts$34): Promise<HostExecResponse>;
35379
36635
  /** `POST /v1/hosts/exec/{reqId}/result` — host side: deliver an exec result. */
35380
- postResult(reqId: string, body: HostExecResultBody, opts?: CallOpts$32): Promise<Reply<'postHostExecResult'>>;
36636
+ postResult(reqId: string, body: HostExecResultBody, opts?: CallOpts$34): Promise<Reply<'postHostExecResult'>>;
35381
36637
  /**
35382
36638
  * `GET /v1/hosts/stream?os=&hostname=&roots=` — host side: announce this
35383
36639
  * device and receive `hello` / `ping` / `exec` events. Closed by the server
@@ -35387,10 +36643,8 @@ export declare class Hosts {
35387
36643
  os?: string;
35388
36644
  hostname?: string;
35389
36645
  roots?: string[];
35390
- }, opts?: CallOpts$32): AsyncGenerator<HostStreamEvent, void, undefined>;
36646
+ }, opts?: CallOpts$34): AsyncGenerator<HostStreamEvent, void, undefined>;
35391
36647
  }
35392
- //#endregion
35393
- //#region src/resources/assets.d.ts
35394
36648
  /** A stored asset (`GET /v1/assets/{id}`; `data` items with `response_format: 'url'`). */
35395
36649
  export type AssetDto = Schema<'AssetDto'>;
35396
36650
  export type AssetKind = Schema<'AssetKind'>;
@@ -35399,7 +36653,7 @@ export type AssetDeleted = Reply<'deleteAsset'>;
35399
36653
  export type AssetListQuery = QueryOf<'listAssets'>;
35400
36654
  /** `b64_json` (default, inline bytes) or `url` (stored asset + 1 h signed URL; 503 `assets_unavailable` without storage). */
35401
36655
  export type MediaResponseFormat = Schema<'MediaResponseFormat'>;
35402
- type CallOpts$31 = {
36656
+ type CallOpts$33 = {
35403
36657
  ext?: CodaiRequestExtensions;
35404
36658
  signal?: AbortSignal;
35405
36659
  };
@@ -35409,28 +36663,26 @@ export declare class Assets {
35409
36663
  private readonly http;
35410
36664
  constructor(http: HttpClient);
35411
36665
  /** `GET /v1/assets` — newest first, `limit` ≤ 100 (default 30). Paginate by passing `next_before` as `before`. */
35412
- list(query?: AssetListQuery, opts?: CallOpts$31): Promise<AssetList>;
36666
+ list(query?: AssetListQuery, opts?: CallOpts$33): Promise<AssetList>;
35413
36667
  /** Iterate every asset across pages (`list` with `before` = previous `next_before`). */
35414
- iterate(query?: Omit<AssetListQuery, 'before'>, opts?: CallOpts$31): AsyncGenerator<AssetDto, void, undefined>;
36668
+ iterate(query?: Omit<AssetListQuery, 'before'>, opts?: CallOpts$33): AsyncGenerator<AssetDto, void, undefined>;
35415
36669
  /** `GET /v1/assets/{id}` — one asset with a fresh 1 h signed `url` (`null` while not `ready`). */
35416
- retrieve(id: string, opts?: CallOpts$31): Promise<AssetDto>;
36670
+ retrieve(id: string, opts?: CallOpts$33): Promise<AssetDto>;
35417
36671
  /**
35418
36672
  * A fresh signed URL of the asset's bytes (valid 1 h), from `GET /v1/assets/{id}`. Throws when the asset has no
35419
36673
  * content yet. Use it in `<audio>`/`<video>`/`fetch` — it needs no Authorization header.
35420
36674
  */
35421
- contentUrl(id: string, opts?: CallOpts$31): Promise<string>;
36675
+ contentUrl(id: string, opts?: CallOpts$33): Promise<string>;
35422
36676
  /**
35423
36677
  * The authenticated redirect endpoint `GET /v1/assets/{id}/content` (302 to the signed URL). Useful for tools that
35424
36678
  * follow redirects with the API key (`curl -L -H 'Authorization: Bearer …'`); browsers should use `contentUrl()`.
35425
36679
  */
35426
36680
  contentPath(id: string): string;
35427
36681
  /** Download the asset's bytes (fetches the signed URL, no API key sent to storage). */
35428
- content(id: string, opts?: CallOpts$31): Promise<Uint8Array>;
36682
+ content(id: string, opts?: CallOpts$33): Promise<Uint8Array>;
35429
36683
  /** `DELETE /v1/assets/{id}` — deletes the object; signed URLs already handed out stop working. */
35430
- delete(id: string, opts?: CallOpts$31): Promise<AssetDeleted>;
36684
+ delete(id: string, opts?: CallOpts$33): Promise<AssetDeleted>;
35431
36685
  }
35432
- //#endregion
35433
- //#region src/resources/images.d.ts
35434
36686
  export type ImagesRequest = Mutable<Body<'createImage'>>;
35435
36687
  export type ImagesResponse = Reply<'createImage'>;
35436
36688
  export type ImageEditRequest = Mutable<Body<'editImage'>>;
@@ -35475,8 +36727,6 @@ export declare class Images {
35475
36727
  }): Promise<ImagesResult>;
35476
36728
  private post;
35477
36729
  }
35478
- //#endregion
35479
- //#region src/resources/media.d.ts
35480
36730
  export interface MusicRequest {
35481
36731
  /** `codai-music` (default, Lyria 3 Clip), `codai-music-pro` (Lyria 3 Pro) or `codai-music-legacy` (Lyria 2). */
35482
36732
  model?: 'codai-music' | 'codai-music-pro' | 'codai-music-legacy' | (string & {});
@@ -35557,6 +36807,12 @@ export interface VideoRequest {
35557
36807
  b64_json: string;
35558
36808
  mime_type?: 'image/png' | 'image/jpeg';
35559
36809
  };
36810
+ /**
36811
+ * Up to 3 of your ready PNG / JPEG Studio image assets showing ONE subject (character or product) that the model
36812
+ * keeps consistent (e.g. a creative's cast `refAssetIds`). Not combinable with `image`; always 8 s. A missing or
36813
+ * foreign asset is 404, another type 400 — checked before anything is held or charged.
36814
+ */
36815
+ reference_asset_ids?: string[];
35560
36816
  seed?: number;
35561
36817
  }
35562
36818
  export interface VideoJob {
@@ -35914,8 +37170,6 @@ export declare class Renders {
35914
37170
  ext?: CodaiRequestExtensions;
35915
37171
  }): Promise<RenderResult>;
35916
37172
  }
35917
- //#endregion
35918
- //#region src/resources/documents.d.ts
35919
37173
  export type DocumentType = 'deck' | 'doc' | 'sheet';
35920
37174
  export type DocumentTheme = Schema<'DocumentTheme'>;
35921
37175
  export type DeckSpec = Mutable<Schema<'DeckSpec'>>;
@@ -35930,11 +37184,11 @@ export type DocumentPreview = Reply<'retrievePreview'>;
35930
37184
  export type DocumentPreviewStatus = DocumentPreview['status'];
35931
37185
  export type DocumentVideoRequest = Mutable<Body<'createDocumentVideo'>>;
35932
37186
  export type DocumentVideoAccepted = Reply<'createDocumentVideo', 202>;
35933
- type CallOpts$30 = {
37187
+ type CallOpts$32 = {
35934
37188
  ext?: CodaiRequestExtensions;
35935
37189
  signal?: AbortSignal;
35936
37190
  };
35937
- export interface DocumentPollOptions extends CallOpts$30 {
37191
+ export interface DocumentPollOptions extends CallOpts$32 {
35938
37192
  /** Delay between polls (default 3000 ms for previews, 5000 ms for videos). */
35939
37193
  pollIntervalMs?: number;
35940
37194
  /** Give up after this long (default 300 000 ms for previews, 900 000 ms for videos). */
@@ -35949,21 +37203,21 @@ export declare class Documents {
35949
37203
  * `sheet` -> `SheetSpec`); invalid specs are 400 `invalid_spec`. Files are free. `based_on` creates the next version
35950
37204
  * of one of your documents; `preview: true` also queues a (billed) preview, returned as `preview`.
35951
37205
  */
35952
- create(body: DocumentCreateRequest, opts?: CallOpts$30): Promise<StudioDocument>;
37206
+ create(body: DocumentCreateRequest, opts?: CallOpts$32): Promise<StudioDocument>;
35953
37207
  /** `GET /v1/studio/documents/{id}` — fresh 1 h signed `file.url`, the stored `spec` and `latest_preview_id`. */
35954
- retrieve(id: string, opts?: CallOpts$30): Promise<StudioDocument>;
37208
+ retrieve(id: string, opts?: CallOpts$32): Promise<StudioDocument>;
35955
37209
  /**
35956
37210
  * Queue a preview (`POST /v1/studio/documents/{id}/previews`, HTTP 202): tagged PDF, page PNGs (1280 px) and a
35957
37211
  * contact sheet. Billed once on the first poll that sees the result; at most 3 active previews per user (429).
35958
37212
  */
35959
- preview(id: string, body?: DocumentPreviewRequest, opts?: CallOpts$30): Promise<DocumentPreviewAccepted>;
37213
+ preview(id: string, body?: DocumentPreviewRequest, opts?: CallOpts$32): Promise<DocumentPreviewAccepted>;
35960
37214
  /** Poll a preview (`GET /v1/studio/previews/{id}`): `queued` | `rendering` | `succeeded` | `failed`. */
35961
- retrievePreview(previewId: string, opts?: CallOpts$30): Promise<DocumentPreview>;
37215
+ retrievePreview(previewId: string, opts?: CallOpts$32): Promise<DocumentPreview>;
35962
37216
  /**
35963
37217
  * Turn a deck into an MP4 (`POST /v1/studio/documents/{id}/video`, HTTP 202). Returns a render: poll it with
35964
37218
  * `renders.retrieve(id)` or use `videoAndWait`. Narration (`narrate`) is synthesized and billed now.
35965
37219
  */
35966
- video(id: string, body?: DocumentVideoRequest, opts?: CallOpts$30): Promise<DocumentVideoAccepted>;
37220
+ video(id: string, body?: DocumentVideoRequest, opts?: CallOpts$32): Promise<DocumentVideoAccepted>;
35967
37221
  /** Queue a preview and poll until it succeeds. Throws on `failed` or timeout. */
35968
37222
  createPreviewAndWait(id: string, opts?: DocumentPollOptions & {
35969
37223
  body?: DocumentPreviewRequest;
@@ -35973,8 +37227,6 @@ export declare class Documents {
35973
37227
  accepted: DocumentVideoAccepted;
35974
37228
  }>;
35975
37229
  }
35976
- //#endregion
35977
- //#region src/resources/exports.d.ts
35978
37230
  export type StudioExport = Schema<'StudioExport'>;
35979
37231
  export type ExportFcpxmlQuery = QueryOf<'exportCreativeFcpxml'>;
35980
37232
  /** `creatives.exportLottie` / `downloadLottie` options (`download` is chosen by the method). */
@@ -35985,11 +37237,11 @@ export interface LottieDownload {
35985
37237
  filename: string | null;
35986
37238
  contentType: string | null;
35987
37239
  }
35988
- type CallOpts$29 = {
37240
+ type CallOpts$31 = {
35989
37241
  ext?: CodaiRequestExtensions;
35990
37242
  signal?: AbortSignal;
35991
37243
  };
35992
- export interface ExportWaitOptions extends CallOpts$29 {
37244
+ export interface ExportWaitOptions extends CallOpts$31 {
35993
37245
  /** Delay between polls (default 3000 ms). */
35994
37246
  intervalMs?: number;
35995
37247
  /** Give up after this long (default 900 000 ms = 15 min). */
@@ -35999,7 +37251,7 @@ export declare class Exports {
35999
37251
  private readonly http;
36000
37252
  constructor(http: HttpClient);
36001
37253
  /** The export: `queued` / `running`, then `succeeded` (signed `url`, valid 1 h) or `failed` (`error`). Free. */
36002
- retrieve(id: string, opts?: CallOpts$29): Promise<StudioExport>;
37254
+ retrieve(id: string, opts?: CallOpts$31): Promise<StudioExport>;
36003
37255
  /**
36004
37256
  * Poll `retrieve` every `intervalMs` (default 3 s) until the export is `succeeded` or `failed` and resolve with it
36005
37257
  * (a `failed` export resolves too — check `status` / `error`). Throws when it is not done within `timeoutMs`
@@ -36007,8 +37259,6 @@ export declare class Exports {
36007
37259
  */
36008
37260
  wait(id: string, opts?: ExportWaitOptions): Promise<StudioExport>;
36009
37261
  }
36010
- //#endregion
36011
- //#region src/resources/creatives.d.ts
36012
37262
  export type CreativeKind = Schema<'CreativeKind'>;
36013
37263
  export type CreativeDoc = Mutable<Schema<'CreativeDoc'>>;
36014
37264
  export type CreativeOp = Mutable<Schema<'CreativeOp'>>;
@@ -36062,6 +37312,22 @@ export type CreativeTemplate = Schema<'CreativeTemplate'>;
36062
37312
  export type StudioCreativeFromDocument = Schema<'StudioCreativeFromDocument'>;
36063
37313
  export type CreativeBuildRequest = Mutable<Schema<'CreativeBuildRequest'>>;
36064
37314
  export type StudioCreativeBuild = Schema<'StudioCreativeBuild'>;
37315
+ /** Build request of a carousel (`format: 'png' | 'pdf'`) or print (`format: 'pdf'`) creative. */
37316
+ export type CreativePagedBuildRequest = Mutable<Schema<'CreativePagedBuildRequest'>>;
37317
+ /** HTTP 202 answer of `build` for a carousel / print creative: the queued export job is in `export`. */
37318
+ export type StudioCreativePagedBuild = Schema<'StudioCreativePagedBuild'>;
37319
+ export type CreativePrintLintIssue = Schema<'CreativePrintLintIssue'>;
37320
+ /** `build` answers a stored document version (200, deck / doc / sheet) or a queued export (202, carousel / print). */
37321
+ export type CreativeBuildResult = StudioCreativeBuild | StudioCreativePagedBuild;
37322
+ export type StudioPostCopyRequest = Mutable<Schema<'StudioPostCopyRequest'>>;
37323
+ export type StudioPostCopy = Schema<'StudioPostCopy'>;
37324
+ export type CreativeTranscriptCutRequest = Mutable<Schema<'CreativeTranscriptCutRequest'>>;
37325
+ export type CreativeTranscriptCutResult = Schema<'CreativeTranscriptCutResult'>;
37326
+ export type CreativeRegenerateNodeRequest = Mutable<Schema<'CreativeRegenerateNodeRequest'>>;
37327
+ export type CreativeRegenerateNodeResult = Schema<'CreativeRegenerateNodeResult'>;
37328
+ export type CreativeCast = Schema<'CreativeCast'>;
37329
+ /** True when a `build` answer is the 202 carousel / print export job (poll `exports.wait(r.export.id)`). */
37330
+ export declare const isPagedBuild: (r: CreativeBuildResult) => r is StudioCreativePagedBuild;
36065
37331
  /** `{ brand_kit_id }` or `{ tokens }` (exactly one) + optional `base_seq`, `snap`, `fonts`, `force`. */
36066
37332
  export type CreativeRestyleRequest = Mutable<Body<'restyleCreative'>>;
36067
37333
  /** Same shape as the `edit` answer (`seq`, `doc_hash`, `changed`, `warnings`, `rebased`). */
@@ -36139,7 +37405,7 @@ export interface CreativeEditRequest {
36139
37405
  /** Bypass locked nodes and variables. */
36140
37406
  force?: boolean;
36141
37407
  }
36142
- type CallOpts$28 = {
37408
+ type CallOpts$30 = {
36143
37409
  ext?: CodaiRequestExtensions;
36144
37410
  signal?: AbortSignal;
36145
37411
  };
@@ -36147,49 +37413,49 @@ export declare class Creatives {
36147
37413
  private readonly http;
36148
37414
  constructor(http: HttpClient);
36149
37415
  /** List your creatives, most recently updated first (`next_before` pages). */
36150
- list(query?: CreativeListQuery, opts?: CallOpts$28): Promise<CreativeList>;
37416
+ list(query?: CreativeListQuery, opts?: CallOpts$30): Promise<CreativeList>;
36151
37417
  /**
36152
37418
  * Create a creative (`kind` + optional `title` / `doc`); without `doc` you get an empty document for the kind.
36153
37419
  * `brand_kit_id` applies one of your brand kits (`brandKits`) to version 1: `brand = { kitId, tokens }` + its logo.
36154
37420
  * `template` (+ `vars`, values by var key) starts from one of your templates (`templates`) instead of `doc`.
36155
37421
  */
36156
- create(body: CreativeCreateRequest, opts?: CallOpts$28): Promise<Creative>;
37422
+ create(body: CreativeCreateRequest, opts?: CallOpts$30): Promise<Creative>;
36157
37423
  /** The document at the head (or `seq`) with signed `assets` (1 h URLs). */
36158
37424
  retrieve(id: string, query?: {
36159
37425
  seq?: number;
36160
- }, opts?: CallOpts$28): Promise<CreativeDetail>;
37426
+ }, opts?: CallOpts$30): Promise<CreativeDetail>;
36161
37427
  /** Compact text outline (+ formats and vars) — the cheapest structure for a prompt. */
36162
- outline(id: string, opts?: CallOpts$28): Promise<CreativeOutline>;
37428
+ outline(id: string, opts?: CallOpts$30): Promise<CreativeOutline>;
36163
37429
  /** Node ids matching `query` (a string = text/name/id substring, or `{ text, type, sceneId, assetId, locked }`). */
36164
- find(id: string, query: CreativeFindRequest['query'], opts?: CallOpts$28): Promise<CreativeFindResult>;
37430
+ find(id: string, query: CreativeFindRequest['query'], opts?: CallOpts$30): Promise<CreativeFindResult>;
36165
37431
  /** Full JSON of `ids` (scene ids return whole scenes) or of one `sceneId`. */
36166
- subtree(id: string, body: CreativeSubtreeRequest, opts?: CallOpts$28): Promise<CreativeSubtree>;
37432
+ subtree(id: string, body: CreativeSubtreeRequest, opts?: CallOpts$30): Promise<CreativeSubtree>;
36167
37433
  /**
36168
37434
  * Apply an op batch (all or nothing) authored against `baseSeq`. A stale base is rebased when the touched
36169
37435
  * targets did not change meanwhile; otherwise the call throws `CodaiError` 409 `stale` (reload and retry). Rejected
36170
37436
  * ops throw 400 with `code` (`invalid`, `not_found`, `locked`, `duplicate_id`).
36171
37437
  */
36172
- edit(id: string, body: CreativeEditRequest, opts?: CallOpts$28): Promise<CreativeOpsResult>;
37438
+ edit(id: string, body: CreativeEditRequest, opts?: CallOpts$30): Promise<CreativeOpsResult>;
36173
37439
  /** Version history, newest first (`beforeSeq` pages). */
36174
37440
  versions(id: string, query?: {
36175
37441
  beforeSeq?: number;
36176
37442
  limit?: number;
36177
- }, opts?: CallOpts$28): Promise<CreativeVersionList>;
37443
+ }, opts?: CallOpts$30): Promise<CreativeVersionList>;
36178
37444
  /** New head whose document is version `seq`'s (undo / redo). */
36179
- revert(id: string, seq: number, opts?: CallOpts$28): Promise<CreativeRevertResult>;
37445
+ revert(id: string, seq: number, opts?: CallOpts$30): Promise<CreativeRevertResult>;
36180
37446
  /** New creative from version `seq` (default the head). */
36181
- fork(id: string, body?: CreativeForkRequest, opts?: CallOpts$28): Promise<Creative>;
37447
+ fork(id: string, body?: CreativeForkRequest, opts?: CallOpts$30): Promise<Creative>;
36182
37448
  /** Soft-delete the creative. */
36183
- delete(id: string, opts?: CallOpts$28): Promise<CreativeDeleted>;
37449
+ delete(id: string, opts?: CallOpts$30): Promise<CreativeDeleted>;
36184
37450
  /**
36185
37451
  * Contrast, safe area, empty text, missing assets, brand colours, platform safe zones and text floors, alt text,
36186
37452
  * missing captions, reading speed, flashing, missing / stale translations. Issues carry `format` / `fixable` /
36187
37453
  * `locale`; `fixable` counts them (`lintFix`). `locale` lints the translated document (adds
36188
37454
  * `text_overflow_locale`); 404 `Locale not found.` for an unknown locale.
36189
37455
  */
36190
- lint(id: string, body?: CreativeLintRequest, opts?: CallOpts$28): Promise<CreativeLintResult>;
37456
+ lint(id: string, body?: CreativeLintRequest, opts?: CallOpts$30): Promise<CreativeLintResult>;
36191
37457
  /** Preview HTML (signed asset URLs) for `format` / one `scene` / a translation (`locale`). */
36192
- compiled(id: string, query?: CreativeCompiledQuery, opts?: CallOpts$28): Promise<CreativeCompiled>;
37458
+ compiled(id: string, query?: CreativeCompiledQuery, opts?: CallOpts$30): Promise<CreativeCompiled>;
36193
37459
  /**
36194
37460
  * Queue an MP4 render of the head (`codai-render`, HTTP 202, `cached: false`); poll `renders.retrieve(render_id)`.
36195
37461
  * When the same render already exists for this version / format / quality / fps you get it back at once
@@ -36198,7 +37464,7 @@ export declare class Creatives {
36198
37464
  * `ai_label` (`none` | `corner` | `end_card`, EU AI Act art. 50(4)) burns a visible AI label into the video; omitted =
36199
37465
  * `corner` when the creative uses TTS narration or AI images, else `none` (`none` with narration: 400 `ai_label_required`).
36200
37466
  */
36201
- render(id: string, body?: CreativeRenderRequest, opts?: CallOpts$28): Promise<CreativeRenderResult>;
37467
+ render(id: string, body?: CreativeRenderRequest, opts?: CallOpts$30): Promise<CreativeRenderResult>;
36202
37468
  /**
36203
37469
  * Mixdown + mastering + exports of an `audio` creative (MU-05; same `POST …/render` route, HTTP 202). `formats`
36204
37470
  * (default `['wav', 'mp3']`), `stems: true` adds one WAV per audible track (+50 %), `lrc` exports the timed lyrics
@@ -36207,7 +37473,7 @@ export declare class Creatives {
36207
37473
  * (`output: mix | stem | lrc`). $0.001 per output second, minimum $0.01; held up front, billed on the measured length.
36208
37474
  * 400 `empty_audio` / `too_long` (20 min) / `no_lyrics`; video creatives use `render`.
36209
37475
  */
36210
- renderAudio(id: string, body?: CreativeAudioRenderRequest, opts?: CallOpts$28 & {
37476
+ renderAudio(id: string, body?: CreativeAudioRenderRequest, opts?: CallOpts$30 & {
36211
37477
  idempotencyKey?: string;
36212
37478
  }): Promise<CreativeAudioRenderAccepted>;
36213
37479
  /**
@@ -36216,41 +37482,41 @@ export declare class Creatives {
36216
37482
  * running job (`status: 'running'`) to poll with `frameJob(id, frame_job_id)`. Cached frames are free; 60 frame
36217
37483
  * jobs per UTC day are free, then billed (`billed_micro_usd`).
36218
37484
  */
36219
- frame(id: string, body: CreativeFrameRequest, opts?: CallOpts$28): Promise<CreativeFrameResult>;
37485
+ frame(id: string, body: CreativeFrameRequest, opts?: CallOpts$30): Promise<CreativeFrameResult>;
36220
37486
  /**
36221
37487
  * Turn a comment pinned on a frame (`t_ms`, optional `node_id` / `scene_id`) into an edit: one bounded `codai`
36222
37488
  * model turn proposes ops, applied like `edit` against `base_seq` (rebased when possible, 409 `stale` else).
36223
37489
  * 422 `no_edit` when the model made no edit (its answer in `error.text`); `apply: false` only proposes the ops.
36224
37490
  * Token-metered like any `codai` text call.
36225
37491
  */
36226
- comment(id: string, body: CreativeCommentRequest, opts?: CallOpts$28): Promise<CreativeCommentResult>;
37492
+ comment(id: string, body: CreativeCommentRequest, opts?: CallOpts$30): Promise<CreativeCommentResult>;
36227
37493
  /**
36228
37494
  * Generate A/B variants: one bounded `codai` model turn proposes `count` (default 3) variants changing only
36229
37495
  * `focus` (default hook / title / cta); each becomes a fork of the creative at `base_seq` with the ops applied, plus
36230
37496
  * a queued draft render (`render: false` to skip; poll `renders.retrieve(render_id)`). The original is unchanged
36231
37497
  * until `pickVariant`. 422 `no_edit` when no valid variant came back, 504 `timeout` after 90 s. Token-metered.
36232
37498
  */
36233
- variants(id: string, body: CreativeVariantsRequest, opts?: CallOpts$28): Promise<CreativeVariantsResult>;
37499
+ variants(id: string, body: CreativeVariantsRequest, opts?: CallOpts$30): Promise<CreativeVariantsResult>;
36234
37500
  /** The latest variant group of a creative (`group_id: null` when none) with statuses and stored render state. */
36235
- listVariants(id: string, opts?: CallOpts$28): Promise<CreativeVariantList>;
37501
+ listVariants(id: string, opts?: CallOpts$30): Promise<CreativeVariantList>;
36236
37502
  /**
36237
37503
  * Pick the winner: its ops are applied to the original against `base_seq` (rebased when possible, 409 `stale`
36238
37504
  * else); the winner is marked `winner`, the rest of its group `rejected`.
36239
37505
  */
36240
- pickVariant(id: string, variantId: string, body: CreativeVariantPickRequest, opts?: CallOpts$28): Promise<CreativeVariantPickResult>;
37506
+ pickVariant(id: string, variantId: string, body: CreativeVariantPickRequest, opts?: CallOpts$30): Promise<CreativeVariantPickResult>;
36241
37507
  /**
36242
37508
  * Save the creative (at `seq`, default the head) as a private template: each `vars` entry turns a text node's text
36243
37509
  * (`prop: 'text'`) or an image node's asset (`prop: 'image'`) into a variable whose default is the current value.
36244
37510
  * 400 `node_not_found` / `invalid_pick` / `duplicate_key`. Free.
36245
37511
  */
36246
- saveTemplate(id: string, body: SaveTemplateRequest, opts?: CallOpts$28): Promise<CreativeTemplate>;
37512
+ saveTemplate(id: string, body: SaveTemplateRequest, opts?: CallOpts$30): Promise<CreativeTemplate>;
36247
37513
  /**
36248
37514
  * Queue an FCPXML export of a video creative (`seq`, default the head; `format`, default the first 1920×1080 /
36249
37515
  * 1080×1920 / 1080×1080 format): a zip with `project.fcpxml` + per-scene MP4 segments + audio, for Final Cut Pro,
36250
37516
  * DaVinci Resolve or Premiere. Resolves to the queued export; poll it with `exports.wait(e.id)`. Only newly
36251
37517
  * rendered seconds are billed (final render price). 400 `unsupported_kind` / `unsupported_format` / `too_long`.
36252
37518
  */
36253
- exportFcpxml(id: string, query?: ExportFcpxmlQuery, opts?: CallOpts$28): Promise<StudioExport>;
37519
+ exportFcpxml(id: string, query?: ExportFcpxmlQuery, opts?: CallOpts$30): Promise<StudioExport>;
36254
37520
  /**
36255
37521
  * Export a video creative as a Lottie animation (`seq`, default the head; `format`, default the document's default
36256
37522
  * format, or `formats: 'all'`; `container: 'json'` (default, Bodymovin JSON with embedded images) or `'dotlottie'`).
@@ -36258,33 +37524,70 @@ export declare class Creatives {
36258
37524
  * fidelity report in `warnings` (video, chart, HTML block, table, cell grid and audio nodes are not exported).
36259
37525
  * 400 `unsupported_kind` / `invalid_request`, 413 `too_large` (over 20 MB).
36260
37526
  */
36261
- exportLottie(id: string, query?: ExportLottieQuery, opts?: CallOpts$28): Promise<StudioExport>;
37527
+ exportLottie(id: string, query?: ExportLottieQuery, opts?: CallOpts$30): Promise<StudioExport>;
36262
37528
  /**
36263
37529
  * The Lottie file itself (`download=1`, nothing stored): `application/json` for one Bodymovin JSON, `application/zip`
36264
37530
  * for a dotLottie archive or a zip of JSON files (`formats: 'all'`). Same options and errors as `exportLottie`. Free.
36265
37531
  */
36266
- downloadLottie(id: string, query?: ExportLottieQuery, opts?: CallOpts$28): Promise<LottieDownload>;
37532
+ downloadLottie(id: string, query?: ExportLottieQuery, opts?: CallOpts$30): Promise<LottieDownload>;
36267
37533
  /**
36268
37534
  * Turn one of your Studio documents (deck, doc, sheet) into an editable creative — slides become scenes with a
36269
37535
  * `layout` and speaker `notes`, doc pages a `flow` group, sheets a `cell_grid`; nodes carry semantic `role`s.
36270
37536
  * Idempotent: a document that already has a creative resolves to it (`existing: true`). Free. 404 unknown document,
36271
37537
  * 409 `document_spec_missing`, 400 `invalid_spec`, 413 `too_large`.
36272
37538
  */
36273
- fromDocument(documentId: string, opts?: CallOpts$28): Promise<StudioCreativeFromDocument>;
37539
+ fromDocument(documentId: string, opts?: CallOpts$30): Promise<StudioCreativeFromDocument>;
36274
37540
  /**
36275
37541
  * Build a deck / doc / sheet creative (at `seq`, default the head) into a PPTX / DOCX / XLSX — a new version of its
36276
37542
  * Studio document (`document`, exactly the `POST /v1/studio/documents` body). Converter notes come back in
36277
37543
  * `warnings`. The file is free; `preview: true` also queues a billed preview (poll it with
36278
37544
  * `documents.waitForPreview`). 400 `not_supported_for_kind` (video / image) or `invalid_spec`.
37545
+ *
37546
+ * A carousel (`format: 'png'` zip of slides or `'pdf'`) or print (`'pdf'`, PDF/X-4 with bleed and optional
37547
+ * `crop_marks`) creative answers HTTP 202 with a queued export job in `export` (`format_id` picks the format,
37548
+ * `quote_micro_usd` is held). Tell the two apart with `isPagedBuild`, poll with `exports.wait(r.export.id)` or use
37549
+ * `buildAndWait`.
37550
+ */
37551
+ build(id: string, body?: CreativeBuildRequest | CreativePagedBuildRequest, opts?: CallOpts$30): Promise<CreativeBuildResult>;
37552
+ /**
37553
+ * `build`, then — for a carousel / print creative — poll the export job until it has `succeeded` or `failed`
37554
+ * (`exports.wait`). Resolves to the 200 build for deck / doc / sheet, or to the finished `StudioExport`.
37555
+ */
37556
+ buildAndWait(id: string, body?: CreativeBuildRequest | CreativePagedBuildRequest, opts?: ExportWaitOptions): Promise<StudioCreativeBuild | StudioExport>;
37557
+ /**
37558
+ * Social post copy for a carousel, image or video creative: a caption + hashtags per platform (`platforms`,
37559
+ * default Instagram + LinkedIn; `language` `ro` (default) | `en`; optional `brief`, `tone`, `seq`) and one alt text
37560
+ * per slide, every answer repaired to the platform's hard limits (changes listed in `fixes`). Nothing is written to
37561
+ * the creative. Token-metered (`cost_micro_usd`) under a small wallet hold (402 `insufficient_funds`); 400
37562
+ * `not_supported_for_kind`, 422 `no_post_copy`, 504 `timeout`. `idempotencyKey` replays a retry (24 h).
36279
37563
  */
36280
- build(id: string, body?: CreativeBuildRequest, opts?: CallOpts$28): Promise<StudioCreativeBuild>;
37564
+ postCopy(id: string, body?: StudioPostCopyRequest, opts?: CallOpts$30 & {
37565
+ idempotencyKey?: string;
37566
+ }): Promise<StudioPostCopy>;
37567
+ /**
37568
+ * Edit a video clip by its transcript: delete word ranges (`remove: [{ from_word, to_word }]`, indexes into the
37569
+ * clip asset's cached transcript from `captions`) from video node `node_id`; the pieces are placed back to back as
37570
+ * one new version (`base_seq` rebased like `edit`, locks honoured unless `force`). Free. 409 `captions_required`
37571
+ * (run `captions` on that clip first) or `stale`; video creatives only.
37572
+ */
37573
+ transcriptCut(id: string, body: CreativeTranscriptCutRequest, opts?: CallOpts$30): Promise<CreativeTranscriptCutResult>;
37574
+ /**
37575
+ * Generate a new picture for an `image` node (`prompt`, optional `model`, `aspect_ratio` — default the closest
37576
+ * ratio of the node box — `base_seq`, `force`) and swap it in as one new version. A node with a `castId` sends that
37577
+ * cast entry's `refAssetIds` as references and appends its `description`, so the subject stays consistent. Billed
37578
+ * like `images.generate` (402 `insufficient_funds`); 400 `content_filtered` charges nothing. `idempotencyKey`
37579
+ * replays a retry (24 h).
37580
+ */
37581
+ regenerateNode(id: string, nodeId: string, body: CreativeRegenerateNodeRequest, opts?: CallOpts$30 & {
37582
+ idempotencyKey?: string;
37583
+ }): Promise<CreativeRegenerateNodeResult>;
36281
37584
  /**
36282
37585
  * Re-apply a brand kit (`brand_kit_id`) or a flat token map (`tokens`) to the creative as one new version: literal
36283
37586
  * colours equal to the old brand become token refs, `snap: true` maps every other colour to the nearest kit colour,
36284
37587
  * `fonts` (default true) sets heading / body font refs by role, locked nodes are skipped unless `force`. The kit
36285
37588
  * logo is registered too. `base_seq` defaults to the head (rebased like `edit`, 409 `stale` else). Free.
36286
37589
  */
36287
- restyle(id: string, body: CreativeRestyleRequest, opts?: CallOpts$28): Promise<CreativeRestyleResult>;
37590
+ restyle(id: string, body: CreativeRestyleRequest, opts?: CallOpts$30): Promise<CreativeRestyleResult>;
36288
37591
  /**
36289
37592
  * Auto-captions: transcribe a voice clip (`clip_id`, default the first voice clip) word by word and add or update a
36290
37593
  * captions node (`preset`, default `bold-pill`) as one new version. Words are cached on the asset (free next time
@@ -36292,86 +37595,84 @@ export declare class Creatives {
36292
37595
  * transcription is billed at the speech-to-text rate (`cost_micro_usd`). Video creatives only (400
36293
37596
  * `unsupported_kind`); 403 `residency_unavailable`, 503 `transcription_unavailable`.
36294
37597
  */
36295
- captions(id: string, body?: CreativeCaptionsRequest, opts?: CallOpts$28): Promise<CreativeCaptionsResult>;
37598
+ captions(id: string, body?: CreativeCaptionsRequest, opts?: CallOpts$30): Promise<CreativeCaptionsResult>;
36296
37599
  /** The captions as SubRip text on the document timeline (`node_id`, `seq` optional); 404 without captions. Free. */
36297
- captionsSrt(id: string, query?: CreativeCaptionsQuery, opts?: CallOpts$28): Promise<string>;
37600
+ captionsSrt(id: string, query?: CreativeCaptionsQuery, opts?: CallOpts$30): Promise<string>;
36298
37601
  /** The captions as WebVTT text on the document timeline (`node_id`, `seq` optional); 404 without captions. Free. */
36299
- captionsVtt(id: string, query?: CreativeCaptionsQuery, opts?: CallOpts$28): Promise<string>;
37602
+ captionsVtt(id: string, query?: CreativeCaptionsQuery, opts?: CallOpts$30): Promise<string>;
36300
37603
  /**
36301
37604
  * Adapt to platforms (`tiktok`, `reels`, `shorts`, `feed-square`, `feed-portrait`, `youtube`): one format per
36302
37605
  * platform in one new version, text kept inside each platform's safe zone and above its legible size.
36303
37606
  * `focal: 'vision'` (token-metered) finds the focal point of full-bleed images; it fails open. Free otherwise.
36304
37607
  */
36305
- adapt(id: string, body: CreativeAdaptRequest, opts?: CallOpts$28): Promise<CreativeAdaptResult>;
37608
+ adapt(id: string, body: CreativeAdaptRequest, opts?: CallOpts$30): Promise<CreativeAdaptResult>;
36306
37609
  /**
36307
37610
  * Fix lint issues as one new version: deterministic fixes (free) for `off_brand_color`, `text_too_small`,
36308
37611
  * `outside_platform_safe_zone` and `flashing` (`codes` limits them); `agent: true` (token-metered) gives the rest
36309
37612
  * to one `codai` turn. Nothing to fix: the current `seq`, empty `fixed`, no new version.
36310
37613
  */
36311
- lintFix(id: string, body?: CreativeLintFixRequest, opts?: CallOpts$28): Promise<CreativeLintFixResult>;
37614
+ lintFix(id: string, body?: CreativeLintFixRequest, opts?: CallOpts$30): Promise<CreativeLintFixResult>;
36312
37615
  /**
36313
37616
  * The tweak panel model: one control per variable (stored `meta.controls` entry or derived from the type). Change
36314
37617
  * values with a `setVar` op and controls with a `setControl` op (`edit`). Free.
36315
37618
  */
36316
- controls(id: string, opts?: CallOpts$28): Promise<CreativeControls>;
37619
+ controls(id: string, opts?: CallOpts$30): Promise<CreativeControls>;
36317
37620
  /**
36318
37621
  * Localisation state: source locale, glossary, unit count and per locale translated / missing / stale / voice.
36319
37622
  * With `locale` (+ `units`, default 1) also the units of that locale (paged with `offset` / `limit` ≤ 500). Free.
36320
37623
  */
36321
- locales(id: string, query?: CreativeLocalesQuery, opts?: CallOpts$28): Promise<CreativeLocaleStatus>;
37624
+ locales(id: string, query?: CreativeLocalesQuery, opts?: CallOpts$30): Promise<CreativeLocaleStatus>;
36322
37625
  /**
36323
37626
  * Translate every text into up to 10 BCP-47 `locales` as per-locale overrides (one new version, author `agent`).
36324
37627
  * Token-metered `codai` turns; `glossary` terms and the brand kit name stay verbatim, `tone` picks the address,
36325
37628
  * `only_missing` (default true) skips fresh translations, `voice: true` (video, billed) narrates voice clips again.
36326
37629
  * 400 `nothing_to_translate`; 503 `localize_unavailable` when every locale failed.
36327
37630
  */
36328
- localize(id: string, body: CreativeLocalizeRequest, opts?: CallOpts$28): Promise<CreativeLocalizeResult>;
37631
+ localize(id: string, body: CreativeLocalizeRequest, opts?: CallOpts$30): Promise<CreativeLocalizeResult>;
36329
37632
  /**
36330
37633
  * Save `locale` as a new standalone creative (translations applied, overrides dropped, `fork_of` recorded; default
36331
37634
  * title `<title> (<locale>)`). 404 `Locale not found.`. Free (HTTP 201).
36332
37635
  */
36333
- forkLocale(id: string, locale: string, body?: CreativeLocaleForkRequest, opts?: CallOpts$28): Promise<CreativeLocaleForkResult>;
37636
+ forkLocale(id: string, locale: string, body?: CreativeLocaleForkRequest, opts?: CallOpts$30): Promise<CreativeLocaleForkResult>;
36334
37637
  /**
36335
37638
  * Create a public link: `view` (read-only preview of version `seq` or the head; `allow_remix` default false) or
36336
37639
  * `review` (comments by name, no account; `can_approve` lets the holder approve). The `token` and `url` are shown
36337
37640
  * only in this answer (HTTP 201). 400 `unknown_seq`; 409 `too_many_shares` (20 active links). Free.
36338
37641
  */
36339
- createShare(id: string, body: StudioShareCreateRequest, opts?: CallOpts$28): Promise<StudioShareCreated>;
37642
+ createShare(id: string, body: StudioShareCreateRequest, opts?: CallOpts$30): Promise<StudioShareCreated>;
36340
37643
  /** The active links (not revoked, not expired), newest first; `url` is always null. Free. */
36341
- listShares(id: string, opts?: CallOpts$28): Promise<StudioShareList>;
37644
+ listShares(id: string, opts?: CallOpts$30): Promise<StudioShareList>;
36342
37645
  /** Revoke a link: it answers 404 from now on. 404 when unknown or already revoked. Free. */
36343
- revokeShare(id: string, shareId: string, opts?: CallOpts$28): Promise<void>;
37646
+ revokeShare(id: string, shareId: string, opts?: CallOpts$30): Promise<void>;
36344
37647
  /**
36345
37648
  * The review state: `status` (`draft` → `in_review` → `approved` | `changes_requested`), requested / approved
36346
37649
  * version (`approved_is_head` false once the creative changed), decider and thread counts. Free.
36347
37650
  */
36348
- review(id: string, opts?: CallOpts$28): Promise<StudioReview>;
37651
+ review(id: string, opts?: CallOpts$30): Promise<StudioReview>;
36349
37652
  /** Send the head to review (`in_review`, earlier decision cleared) so approver links can decide. Free. */
36350
- requestReview(id: string, opts?: CallOpts$28): Promise<StudioReview>;
37653
+ requestReview(id: string, opts?: CallOpts$30): Promise<StudioReview>;
36351
37654
  /** Back to `draft` (decision cleared, comments kept). Free. */
36352
- resetReview(id: string, opts?: CallOpts$28): Promise<StudioReview>;
37655
+ resetReview(id: string, opts?: CallOpts$30): Promise<StudioReview>;
36353
37656
  /** Comment threads, newest first (≤ 200), replies oldest first; `status` `open` | `resolved` | `all`. Free. */
36354
- reviewThreads(id: string, query?: StudioReviewThreadsQuery, opts?: CallOpts$28): Promise<StudioReviewThreadList>;
37657
+ reviewThreads(id: string, query?: StudioReviewThreadsQuery, opts?: CallOpts$30): Promise<StudioReviewThreadList>;
36355
37658
  /**
36356
37659
  * Start a thread as the owner, optionally anchored to `node_id` / `scene_id` / `t_ms` (checked against the head:
36357
37660
  * 400 `unknown_node` / `unknown_scene`; HTTP 201). 409 `too_many_comments`. Free.
36358
37661
  */
36359
- createReviewThread(id: string, body: StudioReviewThreadCreateRequest, opts?: CallOpts$28): Promise<StudioReviewThread>;
37662
+ createReviewThread(id: string, body: StudioReviewThreadCreateRequest, opts?: CallOpts$30): Promise<StudioReviewThread>;
36360
37663
  /** Reply in a thread as the owner (HTTP 201) — returns the whole thread. Free. */
36361
37664
  replyReviewThread(id: string, threadId: string, body: {
36362
37665
  body: string;
36363
- }, opts?: CallOpts$28): Promise<StudioReviewThread>;
37666
+ }, opts?: CallOpts$30): Promise<StudioReviewThread>;
36364
37667
  /** Resolve a thread. Free. */
36365
- resolveReviewThread(id: string, threadId: string, opts?: CallOpts$28): Promise<StudioReviewThread>;
37668
+ resolveReviewThread(id: string, threadId: string, opts?: CallOpts$30): Promise<StudioReviewThread>;
36366
37669
  /** Reopen a resolved thread. Free. */
36367
- reopenReviewThread(id: string, threadId: string, opts?: CallOpts$28): Promise<StudioReviewThread>;
37670
+ reopenReviewThread(id: string, threadId: string, opts?: CallOpts$30): Promise<StudioReviewThread>;
36368
37671
  /** Delete any comment (owner moderation; deleting a root hides the thread). 404 when unknown. Free. */
36369
- deleteReviewComment(id: string, commentId: string, opts?: CallOpts$28): Promise<void>;
37672
+ deleteReviewComment(id: string, commentId: string, opts?: CallOpts$30): Promise<void>;
36370
37673
  /** Poll a frame job: frames when done (`status: 'succeeded'`), `status: 'running'` meanwhile; 404 unknown job. */
36371
- frameJob(id: string, jobId: string, opts?: CallOpts$28): Promise<CreativeFrameResult>;
37674
+ frameJob(id: string, jobId: string, opts?: CallOpts$30): Promise<CreativeFrameResult>;
36372
37675
  }
36373
- //#endregion
36374
- //#region src/resources/brand-kits.d.ts
36375
37676
  export type BrandKit = Schema<'BrandKit'>;
36376
37677
  export type BrandKitTokens = Schema<'BrandKitTokens'>;
36377
37678
  export type BrandKitDtcg = Mutable<Schema<'BrandKitDtcg'>>;
@@ -36384,7 +37685,7 @@ export type BrandKitCreateRequest = Mutable<Body<'createBrandKit'>>;
36384
37685
  export type BrandKitUpdateRequest = Mutable<Body<'updateBrandKit'>>;
36385
37686
  export type BrandKitList = Reply<'listBrandKits'>;
36386
37687
  export type BrandKitDeleted = Reply<'deleteBrandKit'>;
36387
- type CallOpts$27 = {
37688
+ type CallOpts$29 = {
36388
37689
  ext?: CodaiRequestExtensions;
36389
37690
  signal?: AbortSignal;
36390
37691
  };
@@ -36396,37 +37697,35 @@ export declare class BrandKits {
36396
37697
  * (import) — exactly one. 400 `invalid_tokens` (with `details.issues`) for an invalid DTCG document, 404 when
36397
37698
  * `logo_asset_id` is not one of your ready image assets. Free.
36398
37699
  */
36399
- create(body: BrandKitCreateRequest, opts?: CallOpts$27): Promise<BrandKit>;
37700
+ create(body: BrandKitCreateRequest, opts?: CallOpts$29): Promise<BrandKit>;
36400
37701
  /**
36401
37702
  * Edit a kit: `tokens` is merged onto the current kit, `dtcg` replaces the whole document (not both),
36402
37703
  * `logo_asset_id: null` removes the logo. Creatives keep their tokens until `creatives.restyle`. Free.
36403
37704
  */
36404
- update(id: string, body: BrandKitUpdateRequest, opts?: CallOpts$27): Promise<BrandKit>;
37705
+ update(id: string, body: BrandKitUpdateRequest, opts?: CallOpts$29): Promise<BrandKit>;
36405
37706
  /** The kit as a DTCG 2025.10 JSON document (`$extensions['ro.codai']` = kit id, name, logo asset id). Free. */
36406
- exportDtcg(id: string, opts?: CallOpts$27): Promise<BrandKitDtcg>;
37707
+ exportDtcg(id: string, opts?: CallOpts$29): Promise<BrandKitDtcg>;
36407
37708
  /**
36408
37709
  * Extract a brand kit from a public `https` page (`{ url }`) or from one of your logo images
36409
37710
  * (`{ logo_asset_id }`, PNG / JPEG / WebP up to 5 MB; it becomes the kit logo): palette (primary, secondary, accent,
36410
37711
  * background, text) and heading / body fonts. One bounded `codai` model call (token-metered); 400 `url_blocked` for
36411
37712
  * private hosts, 400 `unsupported_media` for a bad logo, 422 `fetch_failed` / `extract_failed`, 504 `timeout`.
36412
37713
  */
36413
- extract(body: BrandKitExtractRequest, opts?: CallOpts$27): Promise<BrandKit>;
37714
+ extract(body: BrandKitExtractRequest, opts?: CallOpts$29): Promise<BrandKit>;
36414
37715
  /** Your brand kits, newest first (`limit` 1–100, default 50). Free. */
36415
37716
  list(query?: {
36416
37717
  limit?: number;
36417
- }, opts?: CallOpts$27): Promise<BrandKitList>;
37718
+ }, opts?: CallOpts$29): Promise<BrandKitList>;
36418
37719
  /** One kit with a signed logo URL (1 h), its `dtcg` and the WCAG `contrast` pairs. Free. */
36419
- retrieve(id: string, opts?: CallOpts$27): Promise<BrandKit>;
37720
+ retrieve(id: string, opts?: CallOpts$29): Promise<BrandKit>;
36420
37721
  /** Delete a kit (creatives keep their tokens; the logo asset stays). Free. */
36421
- delete(id: string, opts?: CallOpts$27): Promise<BrandKitDeleted>;
37722
+ delete(id: string, opts?: CallOpts$29): Promise<BrandKitDeleted>;
36422
37723
  }
36423
- //#endregion
36424
- //#region src/resources/templates.d.ts
36425
37724
  export type CreativeTemplateVar = Schema<'CreativeTemplateVar'>;
36426
37725
  export type CreativeTemplateList = Reply<'listCreativeTemplates'>;
36427
37726
  export type CreativeTemplateListQuery = QueryOf<'listCreativeTemplates'>;
36428
37727
  export type CreativeTemplateDeleted = Reply<'deleteCreativeTemplate'>;
36429
- type CallOpts$26 = {
37728
+ type CallOpts$28 = {
36430
37729
  ext?: CodaiRequestExtensions;
36431
37730
  signal?: AbortSignal;
36432
37731
  };
@@ -36439,25 +37738,23 @@ export declare class Templates {
36439
37738
  * (default). `kind` filters both. Without `doc`. Free. A starter id works anywhere a template id does
36440
37739
  * (`retrieve`, `creatives.create({ template })`, batches); starters cannot be deleted.
36441
37740
  */
36442
- list(query?: CreativeTemplateListQuery, opts?: CallOpts$26): Promise<CreativeTemplateList>;
37741
+ list(query?: CreativeTemplateListQuery, opts?: CallOpts$28): Promise<CreativeTemplateList>;
36443
37742
  /** One template with its variables and `doc`. Free. */
36444
- retrieve(id: string, opts?: CallOpts$26): Promise<Schema<'CreativeTemplate'>>;
37743
+ retrieve(id: string, opts?: CallOpts$28): Promise<Schema<'CreativeTemplate'>>;
36445
37744
  /** Delete a template (creatives made from it are not affected). Free. */
36446
- delete(id: string, opts?: CallOpts$26): Promise<CreativeTemplateDeleted>;
37745
+ delete(id: string, opts?: CallOpts$28): Promise<CreativeTemplateDeleted>;
36447
37746
  }
36448
- //#endregion
36449
- //#region src/resources/productions.d.ts
36450
37747
  export type StudioProductionCreate = Mutable<Body<'createStudioProduction'>>;
36451
37748
  export type StudioProduction = Schema<'StudioProduction'>;
36452
- type CallOpts$25 = {
37749
+ type CallOpts$27 = {
36453
37750
  ext?: CodaiRequestExtensions;
36454
37751
  signal?: AbortSignal;
36455
37752
  };
36456
- export interface ProductionCreateOptions extends CallOpts$25 {
37753
+ export interface ProductionCreateOptions extends CallOpts$27 {
36457
37754
  /** `Idempotency-Key`: a retry with the same key replays the first production instead of starting another one. */
36458
37755
  idempotencyKey?: string;
36459
37756
  }
36460
- export interface ProductionWaitOptions extends CallOpts$25 {
37757
+ export interface ProductionWaitOptions extends CallOpts$27 {
36461
37758
  /** Delay between polls (default 5000 ms). */
36462
37759
  intervalMs?: number;
36463
37760
  /** Give up after this long (default 600 000 ms = 10 min). */
@@ -36470,7 +37767,7 @@ export declare class Productions {
36470
37767
  /** `POST /v1/studio/productions` — brief → storyboard → assets → creative → queued draft render (202). */
36471
37768
  create(body: StudioProductionCreate, opts?: ProductionCreateOptions): Promise<StudioProduction>;
36472
37769
  /** `GET /v1/studio/productions/{id}` — advances the production and returns it (another account's id is a 404). */
36473
- retrieve(id: string, opts?: CallOpts$25): Promise<StudioProduction>;
37770
+ retrieve(id: string, opts?: CallOpts$27): Promise<StudioProduction>;
36474
37771
  /**
36475
37772
  * Poll `retrieve` every `intervalMs` (default 5 s) until the production `succeeded` or `failed` (a failed one
36476
37773
  * resolves too — check `status` / `error`). Throws after `timeoutMs` (default 10 min) or when `signal` aborts.
@@ -36479,8 +37776,66 @@ export declare class Productions {
36479
37776
  /** `create` + `wait`. */
36480
37777
  run(body: StudioProductionCreate, opts?: ProductionCreateOptions & ProductionWaitOptions): Promise<StudioProduction>;
36481
37778
  }
36482
- //#endregion
36483
- //#region src/resources/media-ops.d.ts
37779
+ export type MusicRoomCreate = Mutable<Body<'createStudioMusicRoom'>>;
37780
+ export type MusicRoomChoose = Mutable<Schema<'MusicRoomChoose'>>;
37781
+ export type MusicRoomDirect = Mutable<Body<'directStudioMusicRoom'>>;
37782
+ export type MusicRoomDto = Schema<'MusicRoom'>;
37783
+ export type MusicRoomList = Schema<'MusicRoomList'>;
37784
+ export type MusicRoomQuota = Schema<'MusicRoomQuota'>;
37785
+ export type MusicRole = Schema<'MusicRole'>;
37786
+ export type MusicRoomPlanVariant = Schema<'MusicRoomPlanVariant'>;
37787
+ export type MusicRoomListQuery = QueryOf<'listStudioMusicRooms'>;
37788
+ type CallOpts$26 = {
37789
+ ext?: CodaiRequestExtensions;
37790
+ signal?: AbortSignal;
37791
+ };
37792
+ export interface MusicRoomWriteOptions extends CallOpts$26 {
37793
+ /** `Idempotency-Key`: a retry with the same key replays the first answer instead of starting the work again. */
37794
+ idempotencyKey?: string;
37795
+ }
37796
+ export interface MusicRoomWaitOptions extends CallOpts$26 {
37797
+ /** Also return when the song waits at a gate (`status: 'waiting'`). Default false. */
37798
+ untilGate?: boolean;
37799
+ /** Delay between polls (default 10 000 ms). */
37800
+ intervalMs?: number;
37801
+ /** Give up after this long (default 1 800 000 ms = 30 min). */
37802
+ timeoutMs?: number;
37803
+ }
37804
+ /** The song reached a terminal state (`succeeded` or `failed`). */
37805
+ export declare const isMusicRoomFinished: (r: Pick<MusicRoomDto, "status">) => boolean;
37806
+ export declare class MusicRoom {
37807
+ private readonly http;
37808
+ constructor(http: HttpClient);
37809
+ /** `POST /v1/studio/music-room` — start a song (202; the producer plans it, then it waits at the plan gate). */
37810
+ create(body: MusicRoomCreate, opts?: MusicRoomWriteOptions): Promise<MusicRoomDto>;
37811
+ /** `GET /v1/studio/music-room/{id}` — advances the workflow and returns the song (another account's id is a 404). */
37812
+ get(id: string, opts?: CallOpts$26): Promise<MusicRoomDto>;
37813
+ /** `GET /v1/studio/music-room` — your songs, newest first; page with `before` while `has_more`. */
37814
+ list(query?: MusicRoomListQuery, opts?: CallOpts$26): Promise<MusicRoomList>;
37815
+ /**
37816
+ * `POST /v1/studio/music-room/{id}/choose` — answer the open gate: `{ gate: 'plan', variant }`,
37817
+ * `{ gate: 'demo', approve: true }` or `{ gate: 'final', approve: true }` (409 `not_at_gate` otherwise).
37818
+ */
37819
+ choose(id: string, answer: MusicRoomChoose, opts?: CallOpts$26): Promise<MusicRoomDto>;
37820
+ /**
37821
+ * `POST /v1/studio/music-room/{id}/direct` — one player re-plays its part following `direction` and the demo is
37822
+ * re-rendered (202; only at the demo or final gate).
37823
+ */
37824
+ direct(id: string, body: MusicRoomDirect, opts?: MusicRoomWriteOptions): Promise<MusicRoomDto>;
37825
+ /** `GET /v1/studio/music-room/quota` — `{ plan, included, used, remaining, period_end }` for this calendar month. */
37826
+ quota(opts?: CallOpts$26): Promise<MusicRoomQuota>;
37827
+ /**
37828
+ * Poll `get` every `intervalMs` (default 10 s) until the song `succeeded` or `failed` (a failed one resolves too —
37829
+ * check `status` / `error`), or with `untilGate: true` until it waits at a gate. Throws after `timeoutMs`
37830
+ * (default 30 min) or when `signal` aborts.
37831
+ */
37832
+ wait(id: string, opts?: MusicRoomWaitOptions): Promise<MusicRoomDto>;
37833
+ }
37834
+ /** codai Studio namespace (`client.studio.musicRoom`). */
37835
+ export interface Studio {
37836
+ /** Music Room: a team of role agents makes a song with three approval gates. */
37837
+ readonly musicRoom: MusicRoom;
37838
+ }
36484
37839
  export type MediaOpId = Schema<'MediaOpId'>;
36485
37840
  export type MediaOp = Schema<'MediaOp'>;
36486
37841
  export type MediaOpList = Reply<'listStudioMediaOps'>;
@@ -36488,7 +37843,7 @@ export type MediaOpRequest = Mutable<Schema<'MediaOpRequest'>>;
36488
37843
  export type MediaOpQuote = Schema<'MediaOpQuote'>;
36489
37844
  export type MediaOpResult = Schema<'MediaOpResult'>;
36490
37845
  export type MediaOpJob = Schema<'MediaOpJob'>;
36491
- type CallOpts$24 = {
37846
+ type CallOpts$25 = {
36492
37847
  ext?: CodaiRequestExtensions;
36493
37848
  signal?: AbortSignal;
36494
37849
  };
@@ -36497,12 +37852,18 @@ export interface MediaOpInput {
36497
37852
  assetIds?: string[];
36498
37853
  /** Per-op parameters (validated strictly by the gateway; see the docs table). */
36499
37854
  params?: Record<string, unknown>;
37855
+ /**
37856
+ * `image.inpaint` / `image.erase` only: a mask painted in an editor, base64 PNG (white = edit, black = keep, at most
37857
+ * 8 MB). Send ONE asset id (the image); the gateway stores the mask as a free private asset and passes it as the
37858
+ * second input. A quote validates it without storing anything.
37859
+ */
37860
+ maskPngB64?: string;
36500
37861
  }
36501
- export interface MediaOpRunOptions extends CallOpts$24 {
37862
+ export interface MediaOpRunOptions extends CallOpts$25 {
36502
37863
  /** `Idempotency-Key`: a retry with the same key replays the first answer instead of running (and billing) again. */
36503
37864
  idempotencyKey?: string;
36504
37865
  }
36505
- export interface MediaOpWaitOptions extends CallOpts$24 {
37866
+ export interface MediaOpWaitOptions extends CallOpts$25 {
36506
37867
  /** Delay between polls (default 3000 ms). */
36507
37868
  intervalMs?: number;
36508
37869
  /** Give up after this long (default 1 200 000 ms = 20 min, the server-side job timeout). */
@@ -36515,16 +37876,16 @@ export declare class MediaOps {
36515
37876
  private readonly http;
36516
37877
  constructor(http: HttpClient);
36517
37878
  /** `GET /v1/studio/media-ops` — every op with engine, mode, inputs, `available` and a list quote (free). */
36518
- list(opts?: CallOpts$24): Promise<MediaOpList>;
37879
+ list(opts?: CallOpts$25): Promise<MediaOpList>;
36519
37880
  /** `POST /v1/studio/media-ops/{op}/quote` — exact price of this request; nothing is held or billed. */
36520
- quote(op: MediaOpId | string, input?: MediaOpInput, opts?: CallOpts$24): Promise<MediaOpQuote>;
37881
+ quote(op: MediaOpId | string, input?: MediaOpInput, opts?: CallOpts$25): Promise<MediaOpQuote>;
36521
37882
  /**
36522
37883
  * `POST /v1/studio/media-ops/{op}` — sync ops resolve to a `media_op.result` with the outputs, async ops to a
36523
37884
  * `media_op.job` (`status: pending`; poll with `job` / `wait`). Use `isMediaOpJob` to tell them apart.
36524
37885
  */
36525
37886
  run(op: MediaOpId | string, input?: MediaOpInput, opts?: MediaOpRunOptions): Promise<MediaOpResult | MediaOpJob>;
36526
37887
  /** `GET /v1/studio/media-ops/jobs/{id}` — the job; reading a finished one stores its outputs and bills it once. */
36527
- job(id: string, opts?: CallOpts$24): Promise<MediaOpJob>;
37888
+ job(id: string, opts?: CallOpts$25): Promise<MediaOpJob>;
36528
37889
  /**
36529
37890
  * Poll `job` every `intervalMs` (default 3 s) until it is `ready` or `failed` (a failed job resolves too — check
36530
37891
  * `status` / `error`). Throws after `timeoutMs` (default 20 min) or when `signal` aborts.
@@ -36533,8 +37894,6 @@ export declare class MediaOps {
36533
37894
  /** `run`, then `wait` when the op is async. */
36534
37895
  runAndWait(op: MediaOpId | string, input?: MediaOpInput, opts?: MediaOpRunOptions & MediaOpWaitOptions): Promise<MediaOpResult | MediaOpJob>;
36535
37896
  }
36536
- //#endregion
36537
- //#region src/resources/lyrics.d.ts
36538
37897
  export type LyricsRequest = Mutable<Schema<'StudioLyricsRequest'>>;
36539
37898
  export type LyricsSectionKind = Schema<'StudioLyricsSectionKind'>;
36540
37899
  export type LyricsLine = Schema<'StudioLyricsLine'>;
@@ -36564,8 +37923,6 @@ export declare class LyricsResource {
36564
37923
  */
36565
37924
  align(body: LyricsAlignRequest, opts?: LyricsCallOptions): Promise<LyricsAlignment>;
36566
37925
  }
36567
- //#endregion
36568
- //#region src/resources/realtime.d.ts
36569
37926
  /**
36570
37927
  * `wss://…/v1/realtime` — dependency-free realtime client (live transcription and the OpenAI
36571
37928
  * Realtime protocol lanes). Not an OpenAPI operation (OpenAPI cannot describe WebSockets), so it is
@@ -36704,8 +38061,6 @@ export declare class Realtime {
36704
38061
  /** Open a realtime session. Returns immediately; `await session.ready` to wait for the socket. */
36705
38062
  connect(opts?: RealtimeConnectOptions): RealtimeSession;
36706
38063
  }
36707
- //#endregion
36708
- //#region src/resources/jam.d.ts
36709
38064
  export declare const JAM_SUBPROTOCOL = "codai-jam";
36710
38065
  /** WebSocket close codes of `/v1/studio/jam`. */
36711
38066
  export declare const JAM_CLOSE_CODES: {
@@ -36817,8 +38172,6 @@ export declare class Jam {
36817
38172
  /** Open a live jam. Returns immediately; `await session.ready` to wait for the socket. */
36818
38173
  connect(opts?: JamConnectOptions): JamSession;
36819
38174
  }
36820
- //#endregion
36821
- //#region src/resources/batches.d.ts
36822
38175
  export type StudioBatchStatus = Schema<'StudioBatchStatus'>;
36823
38176
  export type StudioBatchRowStatus = Schema<'StudioBatchRowStatus'>;
36824
38177
  export type StudioBatch = Schema<'StudioBatch'>;
@@ -36835,11 +38188,11 @@ export type StudioBatchDryRun = Schema<'StudioBatchDryRun'>;
36835
38188
  export type StudioBatchCreateRequest = Mutable<Schema<'StudioBatchCreateRequest'>>;
36836
38189
  export type StudioBatchListQuery = QueryOf<'listStudioBatches'>;
36837
38190
  export type StudioBatchGetQuery = QueryOf<'getStudioBatch'>;
36838
- type CallOpts$23 = {
38191
+ type CallOpts$24 = {
36839
38192
  ext?: CodaiRequestExtensions;
36840
38193
  signal?: AbortSignal;
36841
38194
  };
36842
- export interface BatchWaitOptions extends CallOpts$23 {
38195
+ export interface BatchWaitOptions extends CallOpts$24 {
36843
38196
  /** Delay between polls (default 3000 ms). */
36844
38197
  intervalMs?: number;
36845
38198
  /** Give up after this long (default 600 000 ms = 10 min). */
@@ -36852,32 +38205,30 @@ export declare class Batches {
36852
38205
  * Create a batch: rows are validated (invalid rows are stored as `failed`) and run in the background; poll `get`
36853
38206
  * or `wait`. 400 `invalid_rows` when every row is invalid. Free (translations and renders are billed as usual).
36854
38207
  */
36855
- create(body: StudioBatchCreateRequest, opts?: CallOpts$23): Promise<StudioBatchDetail>;
38208
+ create(body: StudioBatchCreateRequest, opts?: CallOpts$24): Promise<StudioBatchDetail>;
36856
38209
  /** Validate only (`dry_run: true`): the mapping, row errors, a 3-row preview and an estimate; nothing stored. Free. */
36857
- dryRun(body: StudioBatchCreateRequest, opts?: CallOpts$23): Promise<StudioBatchDryRun>;
38210
+ dryRun(body: StudioBatchCreateRequest, opts?: CallOpts$24): Promise<StudioBatchDryRun>;
36858
38211
  /** Your batches, newest first (`limit` 1–50, `before` = the previous `next_before`). Free. */
36859
- list(query?: StudioBatchListQuery, opts?: CallOpts$23): Promise<StudioBatchList>;
38212
+ list(query?: StudioBatchListQuery, opts?: CallOpts$24): Promise<StudioBatchList>;
36860
38213
  /** The batch (`rows: 1` adds rows; `status`, `offset`, `limit` ≤ 100). Each poll advances it a little. Free. */
36861
- get(id: string, query?: StudioBatchGetQuery, opts?: CallOpts$23): Promise<StudioBatchDetail>;
38214
+ get(id: string, query?: StudioBatchGetQuery, opts?: CallOpts$24): Promise<StudioBatchDetail>;
36862
38215
  /** Stop the batch; rows not started become `skipped`. 409 `not_cancellable` when already finished. Free. */
36863
- cancel(id: string, opts?: CallOpts$23): Promise<StudioBatch>;
38216
+ cancel(id: string, opts?: CallOpts$24): Promise<StudioBatch>;
36864
38217
  /** Queue the failed rows again (≤ 3 attempts each). 409 `nothing_to_retry`. Free. */
36865
- retry(id: string, opts?: CallOpts$23): Promise<StudioBatch>;
38218
+ retry(id: string, opts?: CallOpts$24): Promise<StudioBatch>;
36866
38219
  /** The original CSV plus `creative_id`, `status`, `error`, `render_url` per row (formula-safe). Free. */
36867
- exportCsv(id: string, opts?: CallOpts$23): Promise<string>;
38220
+ exportCsv(id: string, opts?: CallOpts$24): Promise<string>;
36868
38221
  /**
36869
38222
  * Start building a ZIP of the finished renders (202, `zip.status: 'building'`; unchanged when already building or
36870
38223
  * ready). Poll `get` until `zip.status` is `ready` (signed `zip.url`). 409 `no_renders`. Free.
36871
38224
  */
36872
- zip(id: string, opts?: CallOpts$23): Promise<StudioBatch>;
38225
+ zip(id: string, opts?: CallOpts$24): Promise<StudioBatch>;
36873
38226
  /**
36874
38227
  * Poll `get` every `intervalMs` (default 3 s) until the batch is `completed`, `failed` or `cancelled` and resolve
36875
38228
  * with it. Throws when it is not done within `timeoutMs` (default 10 min) or when `signal` aborts.
36876
38229
  */
36877
38230
  wait(id: string, opts?: BatchWaitOptions): Promise<StudioBatch>;
36878
38231
  }
36879
- //#endregion
36880
- //#region src/resources/shares.d.ts
36881
38232
  export type StudioShareKind = Schema<'StudioShareKind'>;
36882
38233
  export type StudioPublicShare = Schema<'StudioPublicShare'>;
36883
38234
  export type StudioPublicReview = Schema<'StudioPublicReview'>;
@@ -36897,7 +38248,7 @@ export type StudioPublicShareQuery = {
36897
38248
  format?: string;
36898
38249
  locale?: string;
36899
38250
  };
36900
- type CallOpts$22 = {
38251
+ type CallOpts$23 = {
36901
38252
  ext?: CodaiRequestExtensions;
36902
38253
  signal?: AbortSignal;
36903
38254
  };
@@ -36914,28 +38265,26 @@ export declare class Shares {
36914
38265
  * `locale` (null for images); review links add the review state and every thread. 404 for unknown, revoked or
36915
38266
  * expired links. No key needed.
36916
38267
  */
36917
- get(tokenOrUrl: string, query?: StudioPublicShareQuery, opts?: CallOpts$22): Promise<StudioPublicShare>;
38268
+ get(tokenOrUrl: string, query?: StudioPublicShareQuery, opts?: CallOpts$23): Promise<StudioPublicShare>;
36918
38269
  /**
36919
38270
  * Copy the version a `view` link shows into a new creative of yours (the owner's ready assets are copied, the
36920
38271
  * foreign brand kit dropped; HTTP 201). 404 for review links or links without remix; 413 `remix_too_large`. Free.
36921
38272
  */
36922
- remix(tokenOrUrl: string, body?: StudioRemixRequest, opts?: CallOpts$22): Promise<StudioRemixResult>;
38273
+ remix(tokenOrUrl: string, body?: StudioRemixRequest, opts?: CallOpts$23): Promise<StudioRemixResult>;
36923
38274
  /** Start a thread through a review link (`name`, `body`, optional anchor; HTTP 201). 400 `invalid_name`. */
36924
- comment(tokenOrUrl: string, body: StudioPublicThreadCreateRequest, opts?: CallOpts$22): Promise<StudioReviewThread>;
38275
+ comment(tokenOrUrl: string, body: StudioPublicThreadCreateRequest, opts?: CallOpts$23): Promise<StudioReviewThread>;
36925
38276
  /** Reply in a thread through a review link (`name`, `body`; HTTP 201) — returns the whole thread. */
36926
- reply(tokenOrUrl: string, threadId: string, body: StudioPublicReplyRequest, opts?: CallOpts$22): Promise<StudioReviewThread>;
38277
+ reply(tokenOrUrl: string, threadId: string, body: StudioPublicReplyRequest, opts?: CallOpts$23): Promise<StudioReviewThread>;
36927
38278
  /** Resolve a thread through a review link (`resolved_by` = `name`). */
36928
- resolve(tokenOrUrl: string, threadId: string, body: StudioPublicNameRequest, opts?: CallOpts$22): Promise<StudioReviewThread>;
38279
+ resolve(tokenOrUrl: string, threadId: string, body: StudioPublicNameRequest, opts?: CallOpts$23): Promise<StudioReviewThread>;
36929
38280
  /** Reopen a resolved thread through a review link. */
36930
- reopen(tokenOrUrl: string, threadId: string, body: StudioPublicNameRequest, opts?: CallOpts$22): Promise<StudioReviewThread>;
38281
+ reopen(tokenOrUrl: string, threadId: string, body: StudioPublicNameRequest, opts?: CallOpts$23): Promise<StudioReviewThread>;
36931
38282
  /**
36932
38283
  * Approve or request changes (approver review links only). 403 `not_an_approver`, 409 `review_not_open`, 409
36933
38284
  * `stale` (with `head_seq`) when `seq` is not the head. Returns the new review state.
36934
38285
  */
36935
- decide(tokenOrUrl: string, body: StudioPublicDecisionRequest, opts?: CallOpts$22): Promise<StudioPublicReview>;
38286
+ decide(tokenOrUrl: string, body: StudioPublicDecisionRequest, opts?: CallOpts$23): Promise<StudioPublicReview>;
36936
38287
  }
36937
- //#endregion
36938
- //#region src/resources/voice-revocations.d.ts
36939
38288
  /** `email`, `voice_owner_name`, `details`, optional `evidence_url`. */
36940
38289
  export type StudioVoiceRevocationRequest = Mutable<Schema<'StudioVoiceRevocationRequest'>>;
36941
38290
  /** `{ id, object: 'studio.voice_revocation', status: 'open' }`. */
@@ -36949,8 +38298,30 @@ export declare class VoiceRevocations {
36949
38298
  signal?: AbortSignal;
36950
38299
  }): Promise<StudioVoiceRevocation>;
36951
38300
  }
36952
- //#endregion
36953
- //#region src/resources/vault.d.ts
38301
+ /** `{ session_id }` of a finished `purpose: singing` recording session for this voice. */
38302
+ export type StudioVoiceSingingConsentRequest = Mutable<Schema<'StudioVoiceSingingConsentRequest'>>;
38303
+ /** A custom voice (never the cloning key or any recording). */
38304
+ export type StudioVoice = Schema<'StudioVoice'>;
38305
+ /** `{ status: 'none' | 'active' | 'revoked', consented_at, revoked_at, quality: 'beta' }`. */
38306
+ export type StudioVoiceSinging = Schema<'StudioVoiceSinging'>;
38307
+ type CallOpts$22 = {
38308
+ ext?: CodaiRequestExtensions;
38309
+ signal?: AbortSignal;
38310
+ };
38311
+ export declare class Voices {
38312
+ private readonly http;
38313
+ constructor(http: HttpClient);
38314
+ /**
38315
+ * `POST /v1/studio/voices/{id}/singing-consent` — add the singing purpose from a finished singing recording session
38316
+ * (liveness-checked statement + sung sample). Returns the voice with `singing.status: 'active'`. Never retried.
38317
+ */
38318
+ addSingingConsent(id: string, body: StudioVoiceSingingConsentRequest, opts?: CallOpts$22): Promise<StudioVoice>;
38319
+ /**
38320
+ * `DELETE /v1/studio/voices/{id}/singing-consent` — revoke ONLY the singing purpose (204). The sung sample is deleted
38321
+ * at once; the voice keeps working for narration. Idempotent.
38322
+ */
38323
+ revokeSingingConsent(id: string, opts?: CallOpts$22): Promise<void>;
38324
+ }
36954
38325
  export type VaultAccount = Schema<'VaultAccount'>;
36955
38326
  export type VaultItemEnvelope = Mutable<Schema<'VaultItemEnvelope'>>;
36956
38327
  export type VaultUseDecision = Schema<'VaultUseDecision'>;
@@ -37085,8 +38456,6 @@ export declare class Vault {
37085
38456
  /** `POST /v1/vault/resolve` — codai local brokers only (cloud fallback of `codaid vault run`); 202 = approval. */
37086
38457
  resolve(body: VaultResolveRequest, opts?: CallOpts$21): Promise<VaultObject>;
37087
38458
  }
37088
- //#endregion
37089
- //#region src/resources/abuse-reports.d.ts
37090
38459
  /** `share_token`, `surface`, `category`, `explanation`, `reporter_name`, `reporter_email`, `good_faith: true`. */
37091
38460
  export type StudioAbuseReportRequest = Mutable<Schema<'StudioAbuseReportRequest'>>;
37092
38461
  /** `{ id, object: 'studio.abuse_report', status: 'open' }`. */
@@ -37100,8 +38469,6 @@ export declare class AbuseReports {
37100
38469
  signal?: AbortSignal;
37101
38470
  }): Promise<StudioAbuseReport>;
37102
38471
  }
37103
- //#endregion
37104
- //#region src/resources/provenance.d.ts
37105
38472
  /** `{ media_type, findings, codai_generated, synthid_checked: false, signature_verified: false }`. */
37106
38473
  export type ProvenanceCheckResult = Schema<'ProvenanceCheckResult'>;
37107
38474
  /** One mark: `{ kind, present, ai_marked, codai, details }`. */
@@ -37121,8 +38488,6 @@ export declare class Provenance {
37121
38488
  signal?: AbortSignal;
37122
38489
  }): Promise<ProvenanceCheckResult>;
37123
38490
  }
37124
- //#endregion
37125
- //#region src/resources/messages.d.ts
37126
38491
  export type MessageRequest = Mutable<Body<'createMessage'>>;
37127
38492
  export type MessageResponse = Reply<'createMessage'>;
37128
38493
  /** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */
@@ -37171,8 +38536,6 @@ export declare class Messages {
37171
38536
  create(body: MessageInput, opts?: MessageCallOptions): Promise<MessageResult>;
37172
38537
  stream(body: MessageInput, opts?: MessageCallOptions): MessageStream;
37173
38538
  }
37174
- //#endregion
37175
- //#region src/resources/models.d.ts
37176
38539
  export type Model = Schema<'CoreModel'>;
37177
38540
  export type ModelList = Reply<'listModels'>;
37178
38541
  export declare class Models {
@@ -37184,8 +38547,6 @@ export declare class Models {
37184
38547
  signal?: AbortSignal;
37185
38548
  }): Promise<Model[]>;
37186
38549
  }
37187
- //#endregion
37188
- //#region src/resources/orgs.d.ts
37189
38550
  export type Org = Schema<'OrgWithRole'>;
37190
38551
  export type OrgMember = Schema<'OrgMember'>;
37191
38552
  export type OrgRole = Schema<'OrgRole'>;
@@ -37213,8 +38574,6 @@ export declare class Orgs {
37213
38574
  /** `GET /v1/orgs` */
37214
38575
  list(opts?: CallOpts$20): Promise<Org[]>;
37215
38576
  }
37216
- //#endregion
37217
- //#region src/resources/projects.d.ts
37218
38577
  export type Project = Schema<'Project'>;
37219
38578
  export type ProjectIsolation = Schema<'ProjectIsolation'>;
37220
38579
  export type ProjectCreateBody = Mutable<Body<'createProject'>>;
@@ -37238,8 +38597,6 @@ export declare class Projects {
37238
38597
  /** `DELETE /v1/projects/{id}` — 409 `project_has_environments` until all are destroyed. */
37239
38598
  delete(projectId: string, opts?: CallOpts$19): Promise<Reply<'deleteProject'>>;
37240
38599
  }
37241
- //#endregion
37242
- //#region src/resources/referrals.d.ts
37243
38600
  export type ReferralsView = Reply<'getReferrals'>;
37244
38601
  export type ReferralRow = Schema<'ReferralRow'>;
37245
38602
  export type ReferralStats = Schema<'AccountReferral'>;
@@ -37262,8 +38619,6 @@ export declare class Referrals {
37262
38619
  setConsent(consent: boolean, opts?: CallOpts$18): Promise<AccountPatchResponse>;
37263
38620
  private patch;
37264
38621
  }
37265
- //#endregion
37266
- //#region src/generated/resolve.d.ts
37267
38622
  /**
37268
38623
  * This file was auto-generated by openapi-typescript.
37269
38624
  * Do not make direct changes to the file.
@@ -38200,8 +39555,6 @@ interface operations {
38200
39555
  };
38201
39556
  };
38202
39557
  }
38203
- //#endregion
38204
- //#region src/resources/resolve.d.ts
38205
39558
  type ResolveSchemas = components['schemas'];
38206
39559
  export type ResolveIntake = Mutable<ResolveSchemas['ResolveIntake']>;
38207
39560
  export type ResolveQuote = ResolveSchemas['ResolveQuote'];
@@ -38376,8 +39729,6 @@ export declare class Resolve {
38376
39729
  waitFor(id: string, opts?: ResolveWaitOptions): Promise<ResolveJob>;
38377
39730
  private call;
38378
39731
  }
38379
- //#endregion
38380
- //#region src/resources/responses.d.ts
38381
39732
  export type ResponsesRequest = Mutable<Body<'createResponse'>>;
38382
39733
  export type ResponsesResponse = Reply<'createResponse'>;
38383
39734
  /** Request body as accepted by the SDK: `stream` is set by the method and `model` defaults to `codai`. */
@@ -38421,8 +39772,6 @@ export declare class Responses {
38421
39772
  create(body: ResponsesInput, opts?: ResponsesCallOptions): Promise<ResponsesResult>;
38422
39773
  stream(body: ResponsesInput, opts?: ResponsesCallOptions): ResponsesStream;
38423
39774
  }
38424
- //#endregion
38425
- //#region src/resources/sessions.d.ts
38426
39775
  export type Session = Schema<'Session'>;
38427
39776
  export type SessionListItem = Schema<'SessionListItem'>;
38428
39777
  export type SessionDetail = Reply<'getSession'>;
@@ -38585,8 +39934,6 @@ export declare class Sessions {
38585
39934
  share?: string;
38586
39935
  }, opts?: CallOpts$16): AsyncGenerator<SessionStreamEvent, void, undefined>;
38587
39936
  }
38588
- //#endregion
38589
- //#region src/resources/settings.d.ts
38590
39937
  export type SettingsResponse = Reply<'getSettings'>;
38591
39938
  export type UserSettings = Schema<'UserSettings'>;
38592
39939
  export type TranscriptsSettings = Schema<'TranscriptsSettings'>;
@@ -38615,8 +39962,6 @@ export declare class Settings {
38615
39962
  */
38616
39963
  update(partial: SettingsPatch, opts?: UpdateOpts): Promise<SettingsResponse>;
38617
39964
  }
38618
- //#endregion
38619
- //#region src/resources/os-gate.d.ts
38620
39965
  export type PolicyResponse = Reply<'getPolicy'>;
38621
39966
  export type OsGateEvent = Schema<'OsGateEvent'>;
38622
39967
  export type OsGateCheckId = OsGateEvent['checks'][number];
@@ -38637,8 +39982,6 @@ export declare class OsGate {
38637
39982
  */
38638
39983
  recordEvent(event: OsGateEvent, opts?: CallOpts$14): Promise<OsGateEventAccepted>;
38639
39984
  }
38640
- //#endregion
38641
- //#region src/resources/sfx.d.ts
38642
39985
  /** One sound (always `license: 'CC0-1.0'`). */
38643
39986
  export type SfxDto = Schema<'SfxDto'>;
38644
39987
  export type SfxCategory = Schema<'SfxCategory'>;
@@ -38666,8 +40009,6 @@ export declare class Sfx {
38666
40009
  */
38667
40010
  import(sfxId: string, opts?: CallOpts$13): Promise<AssetDto>;
38668
40011
  }
38669
- //#endregion
38670
- //#region src/resources/system-one.d.ts
38671
40012
  export type SystemOneRequest = Mutable<Body<'createSystemOne'>>;
38672
40013
  export type SystemOneResponse = Reply<'createSystemOne'>;
38673
40014
  type SystemOneState = NonNullable<SystemOneRequest['state']>;
@@ -38719,8 +40060,6 @@ export declare class SystemOne {
38719
40060
  signal?: AbortSignal;
38720
40061
  }): Promise<SystemOneBatchResponse>;
38721
40062
  }
38722
- //#endregion
38723
- //#region src/resources/tasks.d.ts
38724
40063
  export type Task = Schema<'Task'>;
38725
40064
  export type TaskOutcome = Schema<'TaskOutcome'>;
38726
40065
  export type TaskStats = Reply<'getTaskStats'>;
@@ -38746,8 +40085,6 @@ export declare class Tasks {
38746
40085
  /** `POST /v1/tasks/{id}/confirm` — answer "Did codai solve it?". */
38747
40086
  confirm(id: string, body: TaskConfirmRequest, opts?: CallOpts$12): Promise<TaskConfirmResponse>;
38748
40087
  }
38749
- //#endregion
38750
- //#region src/resources/triggers.d.ts
38751
40088
  export type TriggerList = Reply<'listTriggers'>;
38752
40089
  export type TriggerCreateRequest = Mutable<Body<'createTrigger'>>;
38753
40090
  export type TriggerCreated = Reply<'createTrigger'>;
@@ -38819,8 +40156,6 @@ export declare class Notifications {
38819
40156
  /** `POST /v1/notifications/delete` — 1..200 ids; ids of other users are skipped. */
38820
40157
  deleteMany(ids: number[], opts?: CallOpts$11): Promise<NotificationsDeleted>;
38821
40158
  }
38822
- //#endregion
38823
- //#region src/resources/prompts.d.ts
38824
40159
  /** PR-07 recurrence: repeat every day/week/month (at HH:MM UTC), or reopen when the run session ends. */
38825
40160
  export type PromptRecurrence = Mutable<Schema<'PromptRecurrence'>>;
38826
40161
  /** PR-07 launch preset applied when the prompt is started. */
@@ -38905,8 +40240,6 @@ export declare class Prompts {
38905
40240
  /** `GET /v1/prompts/stream` — live `prompt` events (keepalive comments are skipped). Closed by the server after 6 h. */
38906
40241
  stream(opts?: CallOpts$10): AsyncGenerator<PromptStreamEvent, void, undefined>;
38907
40242
  }
38908
- //#endregion
38909
- //#region src/resources/schedules.d.ts
38910
40243
  export type Schedule = Schema<'Schedule'>;
38911
40244
  export type ScheduleInput = Mutable<Schema<'ScheduleInput'>>;
38912
40245
  export type ScheduleRun = Schema<'ScheduleRun'>;
@@ -39016,8 +40349,6 @@ export declare class Schedules {
39016
40349
  /** `GET /v1/schedules/stream` — live `schedule` events (keepalives skipped). */
39017
40350
  stream(opts?: CallOpts$9): AsyncGenerator<ScheduleStreamEvent, void, undefined>;
39018
40351
  }
39019
- //#endregion
39020
- //#region src/resources/lists.d.ts
39021
40352
  export type List = Schema<'List'>;
39022
40353
  export type ListItem = Schema<'ListItem'>;
39023
40354
  export type ListCreateInput = Mutable<Schema<'ListCreateInput'>>;
@@ -39078,8 +40409,6 @@ export declare class Lists {
39078
40409
  /** `POST /v1/share` — share-sheet entry point (`list_id`, `preset`, or auto → Inbox + suggestion). */
39079
40410
  share(body: ShareRequest, opts?: CallOpts$8): Promise<ShareResponse>;
39080
40411
  }
39081
- //#endregion
39082
- //#region src/resources/memory.d.ts
39083
40412
  export type MemoryItem = Schema<'MemoryItem'>;
39084
40413
  export type MemoryHit = Schema<'MemoryHit'>;
39085
40414
  export type MemoryTier = MemoryItem['tier'];
@@ -39112,8 +40441,6 @@ export declare class Memory {
39112
40441
  */
39113
40442
  deleteAll(opts?: CallOpts$7): Promise<MemoryDeletedAll>;
39114
40443
  }
39115
- //#endregion
39116
- //#region src/resources/sandboxes.d.ts
39117
40444
  export type Sandbox = Schema<'Sandbox'>;
39118
40445
  export type SandboxEgress = Mutable<Schema<'SandboxEgress'>>;
39119
40446
  export type SandboxCreateInput = Mutable<Schema<'SandboxCreate'>>;
@@ -39239,8 +40566,6 @@ export declare class Sandboxes {
39239
40566
  */
39240
40567
  run(input: SandboxRunInput, opts?: IdemOpts): Promise<SandboxExecResult>;
39241
40568
  }
39242
- //#endregion
39243
- //#region src/resources/transcripts.d.ts
39244
40569
  export type Transcript = Schema<'Transcript'>;
39245
40570
  export type TranscriptDetail = Schema<'TranscriptDetail'>;
39246
40571
  export type TranscriptStatus = Schema<'TranscriptStatus'>;
@@ -39433,8 +40758,6 @@ export declare class Transcripts {
39433
40758
  */
39434
40759
  uploadAudio(data: Uint8Array | ArrayBuffer | Blob, opts?: UploadAudioOptions): Promise<string>;
39435
40760
  }
39436
- //#endregion
39437
- //#region src/resources/tokens.d.ts
39438
40761
  /** `live` = realtime + audio in one token (a live co-host's speech-to-text and text-to-speech). */
39439
40762
  export type EphemeralScope = 'realtime' | 'audio' | 'embeddings' | 'live';
39440
40763
  export type EphemeralTokenResponse = Reply<'createEphemeralToken'>;
@@ -39456,8 +40779,6 @@ export declare class Tokens {
39456
40779
  signal?: AbortSignal;
39457
40780
  }): Promise<EphemeralToken>;
39458
40781
  }
39459
- //#endregion
39460
- //#region src/resources/tools.d.ts
39461
40782
  export type ToolSearchRequest = Mutable<Body<'toolsSearch'>>;
39462
40783
  export type ToolSearchResponse = Reply<'toolsSearch'>;
39463
40784
  export type ToolFetchRequest = Mutable<Body<'toolsFetch'>>;
@@ -39486,8 +40807,6 @@ export declare class Tools {
39486
40807
  */
39487
40808
  ground(body: ToolGroundRequest, opts?: CallOpts$4): Promise<ToolGroundResponse>;
39488
40809
  }
39489
- //#endregion
39490
- //#region src/resources/research.d.ts
39491
40810
  export type ResearchRequest = Mutable<Body<'createResearch'>>;
39492
40811
  export type ResearchJob = Schema<'ResearchJob'>;
39493
40812
  export type ResearchSource = Schema<'ResearchSource'>;
@@ -39526,8 +40845,6 @@ export declare class Research {
39526
40845
  /** `create` then `wait` until the job finishes. */
39527
40846
  run(body: ResearchRequest, opts?: ResearchCreateOptions & Omit<ResearchWaitOptions, keyof CallOpts$3>): Promise<ResearchJob>;
39528
40847
  }
39529
- //#endregion
39530
- //#region src/resources/usage-keys.d.ts
39531
40848
  export type UsageReport = Schema<'UsageReport'>;
39532
40849
  export type UsageRow = Schema<'UsageRow'>;
39533
40850
  export type UsageGroupBy = UsageReport['group_by'];
@@ -39558,8 +40875,6 @@ export declare class Keys {
39558
40875
  /** `PATCH /v1/keys/{id}` — replace the key's tags (≤ 16, each ≤ 32 chars; `[]` clears). */
39559
40876
  setTags(id: string, tags: string[], opts?: CallOpts$2): Promise<ApiKeyTags>;
39560
40877
  }
39561
- //#endregion
39562
- //#region src/resources/verify.d.ts
39563
40878
  export type EnvironmentTaskOutputSignature = Schema<'EnvironmentTaskOutputSignature'>;
39564
40879
  export type AgentOutputKey = Reply<'getAgentOutputKey'>;
39565
40880
  export type AgentOutputVerifyBody = Mutable<Body<'verifyAgentOutput'>>;
@@ -39575,8 +40890,6 @@ export declare class Verify {
39575
40890
  /** `POST /v1/verify/agent-output` — 503 `signing_disabled` when signing is off. */
39576
40891
  agentOutput(body: AgentOutputVerifyBody, opts?: CallOpts$1): Promise<AgentOutputVerifyResult>;
39577
40892
  }
39578
- //#endregion
39579
- //#region src/operations.d.ts
39580
40893
  /**
39581
40894
  * Single source of truth for OpenAPI parity: every `operationId` in
39582
40895
  * `apps/docs/openapi/en/gateway.yaml` maps to exactly one dotted method path
@@ -39593,8 +40906,6 @@ export declare const STREAMING_OPERATIONS: ReadonlySet<string>;
39593
40906
  * checked by `operations.resolve.test.ts`.
39594
40907
  */
39595
40908
  export declare const RESOLVE_OPERATION_METHODS: Record<string, string>;
39596
- //#endregion
39597
- //#region src/resources/apps.d.ts
39598
40909
  export interface CodaiAppsOptions {
39599
40910
  /** App connection token (`codai_app_…`). Required for everything except `validateKey`. */
39600
40911
  appToken?: string;
@@ -39866,8 +41177,6 @@ export declare class CodaiApps {
39866
41177
  /** @internal Perform an app-token call and unwrap `{ ok, data }`. */
39867
41178
  call<T>(path: string, init?: RequestOptions): Promise<T>;
39868
41179
  }
39869
- //#endregion
39870
- //#region src/index.d.ts
39871
41180
  export interface CodaiClientOptions {
39872
41181
  apiKey: string;
39873
41182
  /** Defaults to https://ai.codai.ro */
@@ -39952,6 +41261,11 @@ export declare class Codai {
39952
41261
  readonly templates: Templates;
39953
41262
  /** codai Studio productions (`productions.run({ brief, language: 'ro' })` → a finished promo video + editable creative). */
39954
41263
  readonly productions: Productions;
41264
+ /**
41265
+ * codai Studio namespace. `studio.musicRoom.create({ brief, language: 'ro' })` → a team of role agents makes a song;
41266
+ * answer its gates with `studio.musicRoom.choose(id, …)`, poll with `studio.musicRoom.wait(id, { untilGate: true })`.
41267
+ */
41268
+ readonly studio: Studio;
39955
41269
  /** codai Studio media operations (`mediaOps.run('audio.separate_stems', { assetIds })` → job; `mediaOps.wait(id)`). */
39956
41270
  readonly mediaOps: MediaOps;
39957
41271
  /** codai Studio lyrics (`lyrics.write({ brief, language: 'ro' })`, `lyrics.align({ creative_id, clip_id, lyrics_text })`). */
@@ -39966,6 +41280,8 @@ export declare class Codai {
39966
41280
  readonly shares: Shares;
39967
41281
  /** Public takedown tickets for voices cloned in codai Studio (`voiceRevocations.create({ email, … })`; no key needed). */
39968
41282
  readonly voiceRevocations: VoiceRevocations;
41283
+ /** codai Studio custom voices: the voice passport singing consent (`voices.addSingingConsent(id, { session_id })`). */
41284
+ readonly voices: Voices;
39969
41285
  /** Zero-knowledge credentials vault (`vault.items()`, `vault.use({ handle, mode, action })`, `vault.decide(id, …)`). */
39970
41286
  readonly vault: Vault;
39971
41287
  /** Public abuse reports about codai Studio share / review links (`abuseReports.create({ share_token, … })`; no key needed). */
@@ -40040,5 +41356,4 @@ export declare class Codai {
40040
41356
  private legacyBody;
40041
41357
  private legacyExt;
40042
41358
  }
40043
- //#endregion
40044
41359
  export { Codai as default, type CodaiRequestExtensions, type ErrorCode, type RequestOptions, type components as ResolveComponents, type operations as ResolveOperations, type paths as ResolvePaths, type SseFrame, type components$1 as components, type operations$1 as operations, type paths$1 as paths };