@transcodely/sdk 0.3.0 → 0.3.2

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.cts CHANGED
@@ -900,6 +900,15 @@ interface Service {
900
900
  }
901
901
  interface TransportConfig {
902
902
  apiKey: string;
903
+ /**
904
+ * Organization every request is made against, sent as `X-Organization-ID`.
905
+ *
906
+ * API-key callers never need this — a key is already scoped to one app, and
907
+ * therefore to one organization. It is required for the org-scoped surfaces a
908
+ * dashboard session token reaches, `client.billing` among them, which answer
909
+ * 400 invalid_argument without it.
910
+ */
911
+ organizationId?: string;
903
912
  baseUrl?: string;
904
913
  timeoutMs?: number;
905
914
  maxRetries?: number;
@@ -935,6 +944,7 @@ interface CallOptions {
935
944
  declare class Transport {
936
945
  readonly baseUrl: string;
937
946
  readonly apiKey: string;
947
+ readonly organizationId: string | undefined;
938
948
  readonly timeoutMs: number;
939
949
  readonly maxRetries: number;
940
950
  readonly apiVersion: string;
@@ -997,7 +1007,15 @@ declare enum AppStatus {
997
1007
  *
998
1008
  * @generated from enum value: APP_STATUS_ARCHIVED = 2;
999
1009
  */
1000
- ARCHIVED = 2
1010
+ ARCHIVED = 2,
1011
+ /**
1012
+ * Cut off by platform admin action. API keys scoped to the app are rejected
1013
+ * with 403 until it is set back to active. Unlike archived, this is
1014
+ * reversible and preserves all of the app's resources.
1015
+ *
1016
+ * @generated from enum value: APP_STATUS_SUSPENDED = 3;
1017
+ */
1018
+ SUSPENDED = 3
1001
1019
  }
1002
1020
  /**
1003
1021
  * An app is a project within an organization.
@@ -1088,6 +1106,18 @@ declare class App extends Message<App> {
1088
1106
  * @generated from field: string object = 14;
1089
1107
  */
1090
1108
  object: string;
1109
+ /**
1110
+ * Monthly spend limit in EUR for transcoding charges. Unset = unlimited (the
1111
+ * default). Once the app's spend for the current period reaches this limit,
1112
+ * new jobs are rejected with `limit_exceeded`; in-flight jobs are never
1113
+ * stopped. A warning webhook (`app.spend_limit_warning`) fires once at 80% of
1114
+ * the limit and `app.spend_limit_exceeded` fires once on breach. The period
1115
+ * follows the app's billing anchor day in UTC. Set or clear via
1116
+ * AppService.UpdateSpendLimit; read current spend via AppService.GetSpend.
1117
+ *
1118
+ * @generated from field: optional double monthly_spend_limit_eur = 15;
1119
+ */
1120
+ monthlySpendLimitEur?: number;
1091
1121
  constructor(data?: PartialMessage<App>);
1092
1122
  static readonly runtime: typeof proto3;
1093
1123
  static readonly typeName = "transcodely.v1.App";
@@ -1410,6 +1440,19 @@ declare class HostingConfig extends Message<HostingConfig> {
1410
1440
  * @generated from field: optional transcodely.v1.AutoProfileDefaults auto_profile_defaults = 4;
1411
1441
  */
1412
1442
  autoProfileDefaults?: AutoProfileDefaults;
1443
+ /**
1444
+ * Days after a hosted video becomes ready before its ORIGINAL SOURCE FILE is
1445
+ * deleted from managed storage (0 = disabled/clear). Applies ONLY to the
1446
+ * uploaded source object; renditions and playback are NEVER affected, and BYO
1447
+ * origins are out of scope. A warning webhook (video.source_scheduled_for_deletion)
1448
+ * fires at least the configured warning lead ahead of deletion. Once the source
1449
+ * is deleted, future re-processing (new codecs/renditions, retro-captions) falls
1450
+ * back to the best available rendition. Per-video source_pinned exempts an
1451
+ * individual video from this rule.
1452
+ *
1453
+ * @generated from field: optional int32 delete_source_after_days = 5;
1454
+ */
1455
+ deleteSourceAfterDays?: number;
1413
1456
  constructor(data?: PartialMessage<HostingConfig>);
1414
1457
  static readonly runtime: typeof proto3;
1415
1458
  static readonly typeName = "transcodely.v1.HostingConfig";
@@ -1514,6 +1557,142 @@ declare class UpdateHostingConfigResponse extends Message<UpdateHostingConfigRes
1514
1557
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdateHostingConfigResponse;
1515
1558
  static equals(a: UpdateHostingConfigResponse | PlainMessage<UpdateHostingConfigResponse> | undefined, b: UpdateHostingConfigResponse | PlainMessage<UpdateHostingConfigResponse> | undefined): boolean;
1516
1559
  }
1560
+ /**
1561
+ * Request to set or clear an app's monthly spend limit.
1562
+ *
1563
+ * @generated from message transcodely.v1.UpdateSpendLimitRequest
1564
+ */
1565
+ declare class UpdateSpendLimitRequest extends Message<UpdateSpendLimitRequest> {
1566
+ /**
1567
+ * App ID.
1568
+ *
1569
+ * @generated from field: string app_id = 1;
1570
+ */
1571
+ appId: string;
1572
+ /**
1573
+ * Monthly spend limit in EUR. When present, sets the cap (must be > 0). When
1574
+ * ABSENT, the cap is cleared and the app returns to unlimited (the default).
1575
+ * The upper bound matches the NUMERIC(12,2) storage column.
1576
+ *
1577
+ * @generated from field: optional double monthly_spend_limit_eur = 2;
1578
+ */
1579
+ monthlySpendLimitEur?: number;
1580
+ constructor(data?: PartialMessage<UpdateSpendLimitRequest>);
1581
+ static readonly runtime: typeof proto3;
1582
+ static readonly typeName = "transcodely.v1.UpdateSpendLimitRequest";
1583
+ static readonly fields: FieldList;
1584
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UpdateSpendLimitRequest;
1585
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UpdateSpendLimitRequest;
1586
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdateSpendLimitRequest;
1587
+ static equals(a: UpdateSpendLimitRequest | PlainMessage<UpdateSpendLimitRequest> | undefined, b: UpdateSpendLimitRequest | PlainMessage<UpdateSpendLimitRequest> | undefined): boolean;
1588
+ }
1589
+ /**
1590
+ * Response from updating a spend limit.
1591
+ *
1592
+ * @generated from message transcodely.v1.UpdateSpendLimitResponse
1593
+ */
1594
+ declare class UpdateSpendLimitResponse extends Message<UpdateSpendLimitResponse> {
1595
+ /**
1596
+ * The updated app (monthly_spend_limit_eur reflects the new value, or is
1597
+ * unset when the limit was cleared).
1598
+ *
1599
+ * @generated from field: transcodely.v1.App app = 1;
1600
+ */
1601
+ app?: App;
1602
+ constructor(data?: PartialMessage<UpdateSpendLimitResponse>);
1603
+ static readonly runtime: typeof proto3;
1604
+ static readonly typeName = "transcodely.v1.UpdateSpendLimitResponse";
1605
+ static readonly fields: FieldList;
1606
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): UpdateSpendLimitResponse;
1607
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): UpdateSpendLimitResponse;
1608
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UpdateSpendLimitResponse;
1609
+ static equals(a: UpdateSpendLimitResponse | PlainMessage<UpdateSpendLimitResponse> | undefined, b: UpdateSpendLimitResponse | PlainMessage<UpdateSpendLimitResponse> | undefined): boolean;
1610
+ }
1611
+ /**
1612
+ * Request to read an app's current-period transcoding spend.
1613
+ *
1614
+ * @generated from message transcodely.v1.GetSpendRequest
1615
+ */
1616
+ declare class GetSpendRequest extends Message<GetSpendRequest> {
1617
+ /**
1618
+ * App ID.
1619
+ *
1620
+ * @generated from field: string app_id = 1;
1621
+ */
1622
+ appId: string;
1623
+ constructor(data?: PartialMessage<GetSpendRequest>);
1624
+ static readonly runtime: typeof proto3;
1625
+ static readonly typeName = "transcodely.v1.GetSpendRequest";
1626
+ static readonly fields: FieldList;
1627
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetSpendRequest;
1628
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetSpendRequest;
1629
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetSpendRequest;
1630
+ static equals(a: GetSpendRequest | PlainMessage<GetSpendRequest> | undefined, b: GetSpendRequest | PlainMessage<GetSpendRequest> | undefined): boolean;
1631
+ }
1632
+ /**
1633
+ * Response with an app's current-period transcoding spend.
1634
+ *
1635
+ * Spend is the sum of billed charges for terminal jobs plus recorded estimates
1636
+ * for in-flight jobs, and includes the per-job minimum charge where applied.
1637
+ * Jobs are attributed to the period by their creation time. All amounts are in
1638
+ * EUR.
1639
+ *
1640
+ * @generated from message transcodely.v1.GetSpendResponse
1641
+ */
1642
+ declare class GetSpendResponse extends Message<GetSpendResponse> {
1643
+ /**
1644
+ * Start of the current billing period (inclusive), UTC.
1645
+ *
1646
+ * @generated from field: google.protobuf.Timestamp period_start = 1;
1647
+ */
1648
+ periodStart?: Timestamp;
1649
+ /**
1650
+ * End of the current billing period (exclusive), UTC.
1651
+ *
1652
+ * @generated from field: google.protobuf.Timestamp period_end = 2;
1653
+ */
1654
+ periodEnd?: Timestamp;
1655
+ /**
1656
+ * Transcoding spend recorded so far this period, in EUR.
1657
+ *
1658
+ * @generated from field: double spent_eur = 3;
1659
+ */
1660
+ spentEur: number;
1661
+ /**
1662
+ * The app's monthly spend limit in EUR. Unset = unlimited.
1663
+ *
1664
+ * @generated from field: optional double monthly_spend_limit_eur = 4;
1665
+ */
1666
+ monthlySpendLimitEur?: number;
1667
+ /**
1668
+ * Currency of all amounts in this response. Always "EUR".
1669
+ *
1670
+ * @generated from field: string currency = 5;
1671
+ */
1672
+ currency: string;
1673
+ /**
1674
+ * True once the 80% warning event (`app.spend_limit_warning`) has fired this
1675
+ * period. Fire-once per period; not re-armed by a mid-period limit change.
1676
+ *
1677
+ * @generated from field: bool warning_triggered = 6;
1678
+ */
1679
+ warningTriggered: boolean;
1680
+ /**
1681
+ * True once the breach event (`app.spend_limit_exceeded`) has fired this
1682
+ * period. Fire-once per period; not re-armed by a mid-period limit change.
1683
+ *
1684
+ * @generated from field: bool limit_reached = 7;
1685
+ */
1686
+ limitReached: boolean;
1687
+ constructor(data?: PartialMessage<GetSpendResponse>);
1688
+ static readonly runtime: typeof proto3;
1689
+ static readonly typeName = "transcodely.v1.GetSpendResponse";
1690
+ static readonly fields: FieldList;
1691
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetSpendResponse;
1692
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetSpendResponse;
1693
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetSpendResponse;
1694
+ static equals(a: GetSpendResponse | PlainMessage<GetSpendResponse> | undefined, b: GetSpendResponse | PlainMessage<GetSpendResponse> | undefined): boolean;
1695
+ }
1517
1696
 
1518
1697
  declare class Apps {
1519
1698
  private readonly transport;
@@ -1525,6 +1704,466 @@ declare class Apps {
1525
1704
  archive(id: string, opts?: CallOptions): Promise<App>;
1526
1705
  enableHosting(req: PartialMessage<EnableHostingRequest>, opts?: CallOptions): Promise<EnableHostingResponse>;
1527
1706
  updateHostingConfig(req: PartialMessage<UpdateHostingConfigRequest>, opts?: CallOptions): Promise<UpdateHostingConfigResponse>;
1707
+ /**
1708
+ * Set or clear an app's monthly transcoding spend cap. Provide
1709
+ * `monthlySpendLimitEur` (must be > 0) to set the cap; omit it to clear the
1710
+ * cap and return the app to unlimited. {@link setSpendLimit} and
1711
+ * {@link clearSpendLimit} are the ergonomic shorthands.
1712
+ */
1713
+ updateSpendLimit(req: PartialMessage<UpdateSpendLimitRequest>, opts?: CallOptions): Promise<App>;
1714
+ /**
1715
+ * Set the app's monthly transcoding spend cap in EUR (must be > 0). Once
1716
+ * recorded spend for the current billing period reaches the cap, new jobs are
1717
+ * rejected with the `limit_exceeded` error code; in-flight jobs are never
1718
+ * stopped. Use {@link clearSpendLimit} to return the app to unlimited.
1719
+ */
1720
+ setSpendLimit(id: string, monthlySpendLimitEur: number, opts?: CallOptions): Promise<App>;
1721
+ /**
1722
+ * Clear the app's monthly spend cap, returning it to unlimited (the default).
1723
+ * Omitting the optional limit field tells the server to clear any existing cap.
1724
+ */
1725
+ clearSpendLimit(id: string, opts?: CallOptions): Promise<App>;
1726
+ /**
1727
+ * Get the app's current-period transcoding spend against its limit: the
1728
+ * billing-period bounds, EUR spent so far, the cap (if set), and whether the
1729
+ * 80% warning and 100% breach events have fired this period.
1730
+ */
1731
+ getSpend(id: string, opts?: CallOptions): Promise<GetSpendResponse>;
1732
+ }
1733
+
1734
+ /**
1735
+ * Invoice lifecycle.
1736
+ *
1737
+ * draft -> open -> paid | void | uncollectible. Only "open" and later states
1738
+ * are ever returned by ListInvoices; "draft" appears only on the upcoming
1739
+ * invoice.
1740
+ *
1741
+ * @generated from enum transcodely.v1.InvoiceStatus
1742
+ */
1743
+ declare enum InvoiceStatus {
1744
+ /**
1745
+ * @generated from enum value: INVOICE_STATUS_UNSPECIFIED = 0;
1746
+ */
1747
+ UNSPECIFIED = 0,
1748
+ /**
1749
+ * Being generated, or the live upcoming statement. Not a bill yet.
1750
+ *
1751
+ * @generated from enum value: INVOICE_STATUS_DRAFT = 1;
1752
+ */
1753
+ DRAFT = 1,
1754
+ /**
1755
+ * Finalized and awaiting payment.
1756
+ *
1757
+ * @generated from enum value: INVOICE_STATUS_OPEN = 2;
1758
+ */
1759
+ OPEN = 2,
1760
+ /**
1761
+ * Paid in full.
1762
+ *
1763
+ * @generated from enum value: INVOICE_STATUS_PAID = 3;
1764
+ */
1765
+ PAID = 3,
1766
+ /**
1767
+ * Canceled without payment; nothing is owed.
1768
+ *
1769
+ * @generated from enum value: INVOICE_STATUS_VOID = 4;
1770
+ */
1771
+ VOID = 4,
1772
+ /**
1773
+ * Written off as unpayable after collection attempts failed.
1774
+ *
1775
+ * @generated from enum value: INVOICE_STATUS_UNCOLLECTIBLE = 5;
1776
+ */
1777
+ UNCOLLECTIBLE = 5
1778
+ }
1779
+ /**
1780
+ * What an invoice line represents.
1781
+ *
1782
+ * @generated from enum transcodely.v1.InvoiceLineType
1783
+ */
1784
+ declare enum InvoiceLineType {
1785
+ /**
1786
+ * @generated from enum value: INVOICE_LINE_TYPE_UNSPECIFIED = 0;
1787
+ */
1788
+ UNSPECIFIED = 0,
1789
+ /**
1790
+ * Encoding work, grouped by app, codec, resolution and quality tier.
1791
+ *
1792
+ * @generated from enum value: INVOICE_LINE_TYPE_USAGE = 1;
1793
+ */
1794
+ USAGE = 1,
1795
+ /**
1796
+ * A metered add-on, such as AI captions.
1797
+ *
1798
+ * @generated from enum value: INVOICE_LINE_TYPE_FEE = 2;
1799
+ */
1800
+ FEE = 2,
1801
+ /**
1802
+ * The per-job minimum charge, summed over the jobs it applied to.
1803
+ *
1804
+ * @generated from enum value: INVOICE_LINE_TYPE_MIN_CHARGE = 3;
1805
+ */
1806
+ MIN_CHARGE = 3,
1807
+ /**
1808
+ * The residue that reconciles the itemized lines with the amount charged.
1809
+ * Per-line rounding cannot always add up to the sum of per-job rounding; this
1810
+ * line carries the difference so the breakdown always matches the total.
1811
+ *
1812
+ * @generated from enum value: INVOICE_LINE_TYPE_ADJUSTMENT = 4;
1813
+ */
1814
+ ADJUSTMENT = 4
1815
+ }
1816
+ /**
1817
+ * A billing statement for one period.
1818
+ *
1819
+ * All monetary amounts are integer minor units (cents) of the invoice's
1820
+ * currency — 1250 in EUR is €12.50. Following the protobuf JSON mapping for
1821
+ * 64-bit integers, they are rendered as JSON strings ("1250"), not numbers.
1822
+ *
1823
+ * @generated from message transcodely.v1.Invoice
1824
+ */
1825
+ declare class Invoice extends Message<Invoice> {
1826
+ /**
1827
+ * Unique identifier (e.g., "inv_a1b2c3d4e5f6").
1828
+ * Empty on the upcoming invoice, which is computed and not yet stored.
1829
+ *
1830
+ * @generated from field: string id = 1;
1831
+ */
1832
+ id: string;
1833
+ /**
1834
+ * Object type, always "invoice".
1835
+ *
1836
+ * @generated from field: string object = 2;
1837
+ */
1838
+ object: string;
1839
+ /**
1840
+ * Organization this statement bills.
1841
+ *
1842
+ * @generated from field: string org_id = 3;
1843
+ */
1844
+ orgId: string;
1845
+ /**
1846
+ * Lifecycle state. The upcoming invoice reports "draft".
1847
+ *
1848
+ * @generated from field: transcodely.v1.InvoiceStatus status = 4;
1849
+ */
1850
+ status: InvoiceStatus;
1851
+ /**
1852
+ * Start of the billing period (inclusive).
1853
+ *
1854
+ * @generated from field: google.protobuf.Timestamp period_start = 5;
1855
+ */
1856
+ periodStart?: Timestamp;
1857
+ /**
1858
+ * End of the billing period (exclusive). A job that settles at or after this
1859
+ * instant belongs to the next period, even if it started before it.
1860
+ *
1861
+ * @generated from field: google.protobuf.Timestamp period_end = 6;
1862
+ */
1863
+ periodEnd?: Timestamp;
1864
+ /**
1865
+ * ISO 4217 currency code. Always "EUR" today.
1866
+ *
1867
+ * @generated from field: string currency = 7;
1868
+ */
1869
+ currency: string;
1870
+ /**
1871
+ * Sum of the itemized lines, excluding the rounding adjustment, in cents.
1872
+ *
1873
+ * @generated from field: int64 subtotal_cents = 8;
1874
+ */
1875
+ subtotalCents: bigint;
1876
+ /**
1877
+ * Amount charged, in cents. Equals the sum of every line item including the
1878
+ * rounding adjustment, and equals the sum of the settled jobs it covers.
1879
+ *
1880
+ * @generated from field: int64 total_cents = 9;
1881
+ */
1882
+ totalCents: bigint;
1883
+ /**
1884
+ * The payment provider's invoice number, once the statement has been matched
1885
+ * to the provider's own record. Absent until then; its absence never means
1886
+ * unpaid.
1887
+ *
1888
+ * @generated from field: optional string provider_invoice_number = 10;
1889
+ */
1890
+ providerInvoiceNumber?: string;
1891
+ /**
1892
+ * When the statement was finalized and became visible. Absent on the
1893
+ * upcoming invoice.
1894
+ *
1895
+ * @generated from field: google.protobuf.Timestamp finalized_at = 11;
1896
+ */
1897
+ finalizedAt?: Timestamp;
1898
+ /**
1899
+ * When payment was received. Absent unless status is "paid".
1900
+ *
1901
+ * @generated from field: google.protobuf.Timestamp paid_at = 12;
1902
+ */
1903
+ paidAt?: Timestamp;
1904
+ /**
1905
+ * The itemized breakdown, in display order.
1906
+ *
1907
+ * @generated from field: repeated transcodely.v1.InvoiceLineItem line_items = 13;
1908
+ */
1909
+ lineItems: InvoiceLineItem[];
1910
+ /**
1911
+ * When the statement row was created.
1912
+ *
1913
+ * @generated from field: google.protobuf.Timestamp created_at = 14;
1914
+ */
1915
+ createdAt?: Timestamp;
1916
+ constructor(data?: PartialMessage<Invoice>);
1917
+ static readonly runtime: typeof proto3;
1918
+ static readonly typeName = "transcodely.v1.Invoice";
1919
+ static readonly fields: FieldList;
1920
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): Invoice;
1921
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): Invoice;
1922
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Invoice;
1923
+ static equals(a: Invoice | PlainMessage<Invoice> | undefined, b: Invoice | PlainMessage<Invoice> | undefined): boolean;
1924
+ }
1925
+ /**
1926
+ * One line of an invoice's breakdown.
1927
+ *
1928
+ * Line items explain the total; they do not compute it. They are regenerated
1929
+ * wholesale whenever a statement is rebuilt before finalization, so a line item
1930
+ * id is not stable until the invoice is finalized.
1931
+ *
1932
+ * @generated from message transcodely.v1.InvoiceLineItem
1933
+ */
1934
+ declare class InvoiceLineItem extends Message<InvoiceLineItem> {
1935
+ /**
1936
+ * Unique identifier (e.g., "li_a1b2c3d4e5f6g7"). Empty on the upcoming
1937
+ * invoice, whose lines are computed rather than stored.
1938
+ *
1939
+ * @generated from field: string id = 1;
1940
+ */
1941
+ id: string;
1942
+ /**
1943
+ * What kind of charge this line represents.
1944
+ *
1945
+ * @generated from field: transcodely.v1.InvoiceLineType line_type = 2;
1946
+ */
1947
+ lineType: InvoiceLineType;
1948
+ /**
1949
+ * Human-readable description, e.g. "Encoding — h264 1080p standard".
1950
+ *
1951
+ * @generated from field: string description = 3;
1952
+ */
1953
+ description: string;
1954
+ /**
1955
+ * How many units the line covers (e.g. 12 outputs). Absent for lines that
1956
+ * are not metered, such as the rounding adjustment.
1957
+ *
1958
+ * @generated from field: optional double quantity = 4;
1959
+ */
1960
+ quantity?: number;
1961
+ /**
1962
+ * Unit that quantity is counted in, e.g. "output" or "minute".
1963
+ *
1964
+ * @generated from field: string unit = 5;
1965
+ */
1966
+ unit: string;
1967
+ /**
1968
+ * Amount for this line, in cents. Signed: the rounding adjustment is
1969
+ * routinely negative.
1970
+ *
1971
+ * @generated from field: int64 amount_cents = 6;
1972
+ */
1973
+ amountCents: bigint;
1974
+ /**
1975
+ * The grouping key that produced this line, e.g.
1976
+ * {"app_id": "app_k1l2m3n4o5", "codec": "h264", "resolution": "1080p"}.
1977
+ * Keys vary by line_type and new ones may be added.
1978
+ *
1979
+ * @generated from field: map<string, string> dimensions = 7;
1980
+ */
1981
+ dimensions: {
1982
+ [key: string]: string;
1983
+ };
1984
+ constructor(data?: PartialMessage<InvoiceLineItem>);
1985
+ static readonly runtime: typeof proto3;
1986
+ static readonly typeName = "transcodely.v1.InvoiceLineItem";
1987
+ static readonly fields: FieldList;
1988
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): InvoiceLineItem;
1989
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): InvoiceLineItem;
1990
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): InvoiceLineItem;
1991
+ static equals(a: InvoiceLineItem | PlainMessage<InvoiceLineItem> | undefined, b: InvoiceLineItem | PlainMessage<InvoiceLineItem> | undefined): boolean;
1992
+ }
1993
+ /**
1994
+ * Request to list the organization's invoices.
1995
+ *
1996
+ * @generated from message transcodely.v1.ListInvoicesRequest
1997
+ */
1998
+ declare class ListInvoicesRequest extends Message<ListInvoicesRequest> {
1999
+ /**
2000
+ * Pagination parameters.
2001
+ *
2002
+ * @generated from field: transcodely.v1.PaginationRequest pagination = 1;
2003
+ */
2004
+ pagination?: PaginationRequest;
2005
+ constructor(data?: PartialMessage<ListInvoicesRequest>);
2006
+ static readonly runtime: typeof proto3;
2007
+ static readonly typeName = "transcodely.v1.ListInvoicesRequest";
2008
+ static readonly fields: FieldList;
2009
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListInvoicesRequest;
2010
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListInvoicesRequest;
2011
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListInvoicesRequest;
2012
+ static equals(a: ListInvoicesRequest | PlainMessage<ListInvoicesRequest> | undefined, b: ListInvoicesRequest | PlainMessage<ListInvoicesRequest> | undefined): boolean;
2013
+ }
2014
+ /**
2015
+ * Response from listing invoices.
2016
+ *
2017
+ * @generated from message transcodely.v1.ListInvoicesResponse
2018
+ */
2019
+ declare class ListInvoicesResponse extends Message<ListInvoicesResponse> {
2020
+ /**
2021
+ * Invoices, newest period first. Line items are omitted here; fetch a single
2022
+ * invoice to get them.
2023
+ *
2024
+ * @generated from field: repeated transcodely.v1.Invoice invoices = 1;
2025
+ */
2026
+ invoices: Invoice[];
2027
+ /**
2028
+ * Pagination metadata.
2029
+ *
2030
+ * @generated from field: transcodely.v1.PaginationResponse pagination = 2;
2031
+ */
2032
+ pagination?: PaginationResponse;
2033
+ constructor(data?: PartialMessage<ListInvoicesResponse>);
2034
+ static readonly runtime: typeof proto3;
2035
+ static readonly typeName = "transcodely.v1.ListInvoicesResponse";
2036
+ static readonly fields: FieldList;
2037
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListInvoicesResponse;
2038
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListInvoicesResponse;
2039
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListInvoicesResponse;
2040
+ static equals(a: ListInvoicesResponse | PlainMessage<ListInvoicesResponse> | undefined, b: ListInvoicesResponse | PlainMessage<ListInvoicesResponse> | undefined): boolean;
2041
+ }
2042
+ /**
2043
+ * Request to retrieve one invoice.
2044
+ *
2045
+ * @generated from message transcodely.v1.GetInvoiceRequest
2046
+ */
2047
+ declare class GetInvoiceRequest extends Message<GetInvoiceRequest> {
2048
+ /**
2049
+ * Invoice ID (e.g., "inv_a1b2c3d4e5f6").
2050
+ *
2051
+ * @generated from field: string id = 1;
2052
+ */
2053
+ id: string;
2054
+ constructor(data?: PartialMessage<GetInvoiceRequest>);
2055
+ static readonly runtime: typeof proto3;
2056
+ static readonly typeName = "transcodely.v1.GetInvoiceRequest";
2057
+ static readonly fields: FieldList;
2058
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetInvoiceRequest;
2059
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetInvoiceRequest;
2060
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetInvoiceRequest;
2061
+ static equals(a: GetInvoiceRequest | PlainMessage<GetInvoiceRequest> | undefined, b: GetInvoiceRequest | PlainMessage<GetInvoiceRequest> | undefined): boolean;
2062
+ }
2063
+ /**
2064
+ * Response from retrieving an invoice.
2065
+ *
2066
+ * @generated from message transcodely.v1.GetInvoiceResponse
2067
+ */
2068
+ declare class GetInvoiceResponse extends Message<GetInvoiceResponse> {
2069
+ /**
2070
+ * The requested invoice, with its line items.
2071
+ *
2072
+ * @generated from field: transcodely.v1.Invoice invoice = 1;
2073
+ */
2074
+ invoice?: Invoice;
2075
+ constructor(data?: PartialMessage<GetInvoiceResponse>);
2076
+ static readonly runtime: typeof proto3;
2077
+ static readonly typeName = "transcodely.v1.GetInvoiceResponse";
2078
+ static readonly fields: FieldList;
2079
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetInvoiceResponse;
2080
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetInvoiceResponse;
2081
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetInvoiceResponse;
2082
+ static equals(a: GetInvoiceResponse | PlainMessage<GetInvoiceResponse> | undefined, b: GetInvoiceResponse | PlainMessage<GetInvoiceResponse> | undefined): boolean;
2083
+ }
2084
+ /**
2085
+ * Request to retrieve the statement for the period currently accruing.
2086
+ *
2087
+ * @generated from message transcodely.v1.GetUpcomingInvoiceRequest
2088
+ */
2089
+ declare class GetUpcomingInvoiceRequest extends Message<GetUpcomingInvoiceRequest> {
2090
+ constructor(data?: PartialMessage<GetUpcomingInvoiceRequest>);
2091
+ static readonly runtime: typeof proto3;
2092
+ static readonly typeName = "transcodely.v1.GetUpcomingInvoiceRequest";
2093
+ static readonly fields: FieldList;
2094
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetUpcomingInvoiceRequest;
2095
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetUpcomingInvoiceRequest;
2096
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetUpcomingInvoiceRequest;
2097
+ static equals(a: GetUpcomingInvoiceRequest | PlainMessage<GetUpcomingInvoiceRequest> | undefined, b: GetUpcomingInvoiceRequest | PlainMessage<GetUpcomingInvoiceRequest> | undefined): boolean;
2098
+ }
2099
+ /**
2100
+ * Response carrying the upcoming statement.
2101
+ *
2102
+ * @generated from message transcodely.v1.GetUpcomingInvoiceResponse
2103
+ */
2104
+ declare class GetUpcomingInvoiceResponse extends Message<GetUpcomingInvoiceResponse> {
2105
+ /**
2106
+ * The computed statement. Its id is empty and its status is "draft". Totals
2107
+ * are zero when nothing has been billed in the period yet.
2108
+ *
2109
+ * @generated from field: transcodely.v1.Invoice invoice = 1;
2110
+ */
2111
+ invoice?: Invoice;
2112
+ constructor(data?: PartialMessage<GetUpcomingInvoiceResponse>);
2113
+ static readonly runtime: typeof proto3;
2114
+ static readonly typeName = "transcodely.v1.GetUpcomingInvoiceResponse";
2115
+ static readonly fields: FieldList;
2116
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetUpcomingInvoiceResponse;
2117
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetUpcomingInvoiceResponse;
2118
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetUpcomingInvoiceResponse;
2119
+ static equals(a: GetUpcomingInvoiceResponse | PlainMessage<GetUpcomingInvoiceResponse> | undefined, b: GetUpcomingInvoiceResponse | PlainMessage<GetUpcomingInvoiceResponse> | undefined): boolean;
2120
+ }
2121
+
2122
+ /**
2123
+ * An organization's billing statements — read-only.
2124
+ *
2125
+ * Unlike every other namespace, billing settles a whole organization rather
2126
+ * than a single app, so it is **not** available to API-key callers: a key is
2127
+ * scoped to one app, and there is no app-scoped subset of an invoice worth
2128
+ * serving. An API key gets a `PermissionError`.
2129
+ *
2130
+ * Reading invoices needs a dashboard session token for an organization
2131
+ * **owner**, plus the organization the request is for:
2132
+ *
2133
+ * ```ts
2134
+ * const client = new Transcodely({
2135
+ * apiKey: sessionToken,
2136
+ * organizationId: "org_f6g7h8i9j0",
2137
+ * });
2138
+ * const upcoming = await client.billing.retrieveUpcoming();
2139
+ * ```
2140
+ *
2141
+ * Invoices are generated automatically when a period closes. There is no API to
2142
+ * create, edit, or delete one — a statement records what happened.
2143
+ */
2144
+ declare class Billing {
2145
+ private readonly transport;
2146
+ constructor(transport: Transport);
2147
+ /**
2148
+ * Page through the organization's finalized invoices, newest period first.
2149
+ *
2150
+ * Line items are omitted here; use {@link retrieve} for one invoice's
2151
+ * breakdown. A statement still being generated for a just-ended period is
2152
+ * never returned — for the period currently accruing use
2153
+ * {@link retrieveUpcoming}.
2154
+ */
2155
+ listInvoices(req?: PartialMessage<ListInvoicesRequest>, opts?: CallOptions): Page<Invoice>;
2156
+ /** Retrieve one invoice by ID (`inv_*`), including its line items. */
2157
+ retrieve(id: string, opts?: CallOptions): Promise<Invoice>;
2158
+ /**
2159
+ * Retrieve the statement for the period currently accruing.
2160
+ *
2161
+ * Computed live from settled jobs rather than stored, so its `id` is empty,
2162
+ * its status is `draft`, and its totals move as jobs finish. Jobs still
2163
+ * running are not included at any price — a job is billed only once it
2164
+ * settles.
2165
+ */
2166
+ retrieveUpcoming(opts?: CallOptions): Promise<Invoice>;
1528
2167
  }
1529
2168
 
1530
2169
  /**
@@ -1560,10 +2199,13 @@ declare class WebhookEndpoint extends Message<WebhookEndpoint> {
1560
2199
  /**
1561
2200
  * Event types this endpoint subscribes to.
1562
2201
  * Use "*" to subscribe to all event types.
1563
- * Possible values: "job.created", "job.updated", "job.succeeded",
1564
- * "job.failed", "job.canceled", "job.progress", "output.created",
1565
- * "output.ready", "output.failed", "output.progress",
1566
- * "video.uploaded", "video.deleted", "app.created", "app.updated", or "*".
2202
+ * Possible values: "job.created", "job.succeeded", "job.failed",
2203
+ * "job.canceled", "job.progress", "output.created", "output.ready",
2204
+ * "output.failed", "output.progress", "video.uploaded", "video.ready",
2205
+ * "video.failed", "video.deleted", "video.source_scheduled_for_deletion",
2206
+ * "app.created", "app.updated", "app.spend_limit_warning",
2207
+ * "app.spend_limit_exceeded", or "*".
2208
+ * Keep in sync with domain.WebhookEventTypes() ("job.updated" does not exist).
1567
2209
  *
1568
2210
  * @generated from field: repeated string enabled_events = 5;
1569
2211
  */
@@ -1614,8 +2256,9 @@ declare class WebhookEndpoint extends Message<WebhookEndpoint> {
1614
2256
  * Reason the endpoint is in `status: "disabled"`. Absent when status is "enabled".
1615
2257
  * One of:
1616
2258
  * "manual" — operator paused via UpdateWebhookEndpoint
1617
- * "auto_failures" — scheduler tripped after 10 consecutive terminal failures
1618
- * spanning ≥72 h
2259
+ * "auto_failures" — scheduler tripped after an opt-in sustained-failure
2260
+ * rule: 50+ consecutive terminal failures with zero
2261
+ * successes for at least 168 h (7 days)
1619
2262
  * Wire value is lowercase per project convention.
1620
2263
  *
1621
2264
  * @generated from field: optional string disabled_reason = 12;
@@ -1637,6 +2280,15 @@ declare class WebhookEndpoint extends Message<WebhookEndpoint> {
1637
2280
  * @generated from field: optional google.protobuf.Timestamp previous_secret_expires_at = 14;
1638
2281
  */
1639
2282
  previousSecretExpiresAt?: Timestamp;
2283
+ /**
2284
+ * Compact rolling-24h delivery-health summary. Populated ONLY by
2285
+ * ListWebhookEndpoints when the request sets include_health=true; absent on
2286
+ * every other RPC and when include_health is false. Shares the
2287
+ * GetEndpointHealth cache, so values may be up to ~30 s stale.
2288
+ *
2289
+ * @generated from field: optional transcodely.v1.EndpointHealthSummary health = 15;
2290
+ */
2291
+ health?: EndpointHealthSummary;
1640
2292
  constructor(data?: PartialMessage<WebhookEndpoint>);
1641
2293
  static readonly runtime: typeof proto3;
1642
2294
  static readonly typeName = "transcodely.v1.WebhookEndpoint";
@@ -1646,6 +2298,44 @@ declare class WebhookEndpoint extends Message<WebhookEndpoint> {
1646
2298
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): WebhookEndpoint;
1647
2299
  static equals(a: WebhookEndpoint | PlainMessage<WebhookEndpoint> | undefined, b: WebhookEndpoint | PlainMessage<WebhookEndpoint> | undefined): boolean;
1648
2300
  }
2301
+ /**
2302
+ * Compact delivery-health summary attached to a WebhookEndpoint in
2303
+ * ListWebhookEndpoints responses when include_health=true. A minimal
2304
+ * rolling-24h rollup; call GetEndpointHealth for the full bucketed series,
2305
+ * pending count, and latency percentiles. Values may be up to ~30 s stale.
2306
+ *
2307
+ * @generated from message transcodely.v1.EndpointHealthSummary
2308
+ */
2309
+ declare class EndpointHealthSummary extends Message<EndpointHealthSummary> {
2310
+ /**
2311
+ * Total delivery attempts in the last 24 h.
2312
+ *
2313
+ * @generated from field: int32 total_attempts = 1;
2314
+ */
2315
+ totalAttempts: number;
2316
+ /**
2317
+ * Failed terminal attempts in the last 24 h.
2318
+ *
2319
+ * @generated from field: int32 failed = 2;
2320
+ */
2321
+ failed: number;
2322
+ /**
2323
+ * succeeded / (succeeded + failed) over the last 24 h; in-flight (pending)
2324
+ * attempts are excluded from the denominator. Zero when there were no
2325
+ * terminal attempts in the window.
2326
+ *
2327
+ * @generated from field: double success_rate = 3;
2328
+ */
2329
+ successRate: number;
2330
+ constructor(data?: PartialMessage<EndpointHealthSummary>);
2331
+ static readonly runtime: typeof proto3;
2332
+ static readonly typeName = "transcodely.v1.EndpointHealthSummary";
2333
+ static readonly fields: FieldList;
2334
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): EndpointHealthSummary;
2335
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): EndpointHealthSummary;
2336
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): EndpointHealthSummary;
2337
+ static equals(a: EndpointHealthSummary | PlainMessage<EndpointHealthSummary> | undefined, b: EndpointHealthSummary | PlainMessage<EndpointHealthSummary> | undefined): boolean;
2338
+ }
1649
2339
  /**
1650
2340
  * An immutable record of a platform event emitted for an app.
1651
2341
  *
@@ -2088,6 +2778,19 @@ declare class ListWebhookEndpointsRequest extends Message<ListWebhookEndpointsRe
2088
2778
  * @generated from field: transcodely.v1.PaginationRequest pagination = 2;
2089
2779
  */
2090
2780
  pagination?: PaginationRequest;
2781
+ /**
2782
+ * When true, populate each returned endpoint's `health` field with a compact
2783
+ * rolling-24h delivery summary (success_rate, total_attempts, failed),
2784
+ * replacing N client-side GetEndpointHealth calls with this one list call.
2785
+ * The summary is computed from the same server-side rollup as
2786
+ * GetEndpointHealth and shares its ~30 s cache, so values may be up to ~30 s
2787
+ * stale; on a cold cache the server still computes one rollup per listed
2788
+ * endpoint, so expect a slower first response on apps with many endpoints.
2789
+ * Defaults to false (health omitted).
2790
+ *
2791
+ * @generated from field: bool include_health = 3;
2792
+ */
2793
+ includeHealth: boolean;
2091
2794
  constructor(data?: PartialMessage<ListWebhookEndpointsRequest>);
2092
2795
  static readonly runtime: typeof proto3;
2093
2796
  static readonly typeName = "transcodely.v1.ListWebhookEndpointsRequest";
@@ -2203,6 +2906,18 @@ declare class ListEventsRequest extends Message<ListEventsRequest> {
2203
2906
  * @generated from field: transcodely.v1.PaginationRequest pagination = 5;
2204
2907
  */
2205
2908
  pagination?: PaginationRequest;
2909
+ /**
2910
+ * Filter to events concerning a specific resource, matched against the
2911
+ * resource id embedded in the event's data snapshot (data.id). Accepts any
2912
+ * prefixed Transcodely resource id — e.g. a job ("job_…") or a video
2913
+ * ("vid_…") — and returns every event whose snapshot carries that id. Lets a
2914
+ * dashboard resource page (e.g. a job page) load that resource's webhook
2915
+ * history in one call. Synthetic SendTestWebhook events are stored separately
2916
+ * and never match.
2917
+ *
2918
+ * @generated from field: optional string object_id = 6;
2919
+ */
2920
+ objectId?: string;
2206
2921
  constructor(data?: PartialMessage<ListEventsRequest>);
2207
2922
  static readonly runtime: typeof proto3;
2208
2923
  static readonly typeName = "transcodely.v1.ListEventsRequest";
@@ -3246,7 +3961,11 @@ declare enum HDRMode {
3246
3961
  */
3247
3962
  HDR_MODE_PASSTHROUGH = 1,
3248
3963
  /**
3249
- * Convert HDR to SDR via tone mapping.
3964
+ * Convert HDR to SDR via tone mapping. Requires an HDR input: whether the
3965
+ * input carries HDR color signaling is only knowable once it has been
3966
+ * probed, so a tone-map job on an SDR source is accepted at create and then
3967
+ * fails at probe time with error code `input_not_hdr`, before any encode
3968
+ * starts.
3250
3969
  *
3251
3970
  * @generated from enum value: HDR_MODE_TONEMAP = 2;
3252
3971
  */
@@ -3609,7 +4328,14 @@ declare enum SubtitleOperation {
3609
4328
  *
3610
4329
  * @generated from enum value: SUBTITLE_OPERATION_EXTRACT = 4;
3611
4330
  */
3612
- EXTRACT = 4
4331
+ EXTRACT = 4,
4332
+ /**
4333
+ * Generate captions from the audio track using automatic speech
4334
+ * recognition. Tracks produced this way carry auto_generated: true.
4335
+ *
4336
+ * @generated from enum value: SUBTITLE_OPERATION_GENERATE = 5;
4337
+ */
4338
+ GENERATE = 5
3613
4339
  }
3614
4340
  /**
3615
4341
  * Subtitle format.
@@ -3728,7 +4454,11 @@ declare class SubtitleTrack extends Message<SubtitleTrack> {
3728
4454
  */
3729
4455
  outputFormat: SubtitleFormat;
3730
4456
  /**
3731
- * ISO 639-2 language code (e.g., "eng", "spa", "fra").
4457
+ * ISO 639-2 language code (e.g., "eng", "spa", "fra"), or "auto".
4458
+ * "auto" is valid only for the generate operation and selects
4459
+ * automatic language detection; it is the default when empty on a
4460
+ * generate track. The other operations require a real ISO 639-2 code
4461
+ * (or empty) and reject "auto".
3732
4462
  *
3733
4463
  * @generated from field: optional string language = 6;
3734
4464
  */
@@ -3763,6 +4493,19 @@ declare class SubtitleTrack extends Message<SubtitleTrack> {
3763
4493
  * @generated from field: optional transcodely.v1.BurnInStyle burn_in_style = 11;
3764
4494
  */
3765
4495
  burnInStyle?: BurnInStyle;
4496
+ /**
4497
+ * Generate an AI chapters track from the transcript this track produces.
4498
+ *
4499
+ * Only meaningful together with the `generate` subtitle operation: when
4500
+ * enabled, an AI pass over the generated transcript produces a chapters
4501
+ * track delivered as WebVTT plus JSON. Free — no pricing impact. The
4502
+ * transcript text is processed via the Anthropic API (an external
4503
+ * subprocessor). Caption generation is available; the auto-chapters pass is
4504
+ * not yet, so setting this is still rejected at job creation.
4505
+ *
4506
+ * @generated from field: optional bool generate_chapters = 12;
4507
+ */
4508
+ generateChapters?: boolean;
3766
4509
  constructor(data?: PartialMessage<SubtitleTrack>);
3767
4510
  static readonly runtime: typeof proto3;
3768
4511
  static readonly typeName = "transcodely.v1.SubtitleTrack";
@@ -3772,6 +4515,201 @@ declare class SubtitleTrack extends Message<SubtitleTrack> {
3772
4515
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SubtitleTrack;
3773
4516
  static equals(a: SubtitleTrack | PlainMessage<SubtitleTrack> | undefined, b: SubtitleTrack | PlainMessage<SubtitleTrack> | undefined): boolean;
3774
4517
  }
4518
+ /**
4519
+ * ChapterPoint is one chapter marker. Times are seconds from the start of the
4520
+ * video.
4521
+ *
4522
+ * @generated from message transcodely.v1.ChapterPoint
4523
+ */
4524
+ declare class ChapterPoint extends Message<ChapterPoint> {
4525
+ /**
4526
+ * Chapter start, in seconds from the start of the video.
4527
+ *
4528
+ * @generated from field: double start_seconds = 1;
4529
+ */
4530
+ startSeconds: number;
4531
+ /**
4532
+ * Chapter end, in seconds from the start of the video.
4533
+ *
4534
+ * @generated from field: double end_seconds = 2;
4535
+ */
4536
+ endSeconds: number;
4537
+ /**
4538
+ * Short, human-readable chapter title, in the caption track's language.
4539
+ *
4540
+ * @generated from field: string title = 3;
4541
+ */
4542
+ title: string;
4543
+ constructor(data?: PartialMessage<ChapterPoint>);
4544
+ static readonly runtime: typeof proto3;
4545
+ static readonly typeName = "transcodely.v1.ChapterPoint";
4546
+ static readonly fields: FieldList;
4547
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ChapterPoint;
4548
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ChapterPoint;
4549
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ChapterPoint;
4550
+ static equals(a: ChapterPoint | PlainMessage<ChapterPoint> | undefined, b: ChapterPoint | PlainMessage<ChapterPoint> | undefined): boolean;
4551
+ }
4552
+ /**
4553
+ * ChapterResult reports an auto-generated chapters track (read-only on Job
4554
+ * responses). It is produced by the opt-in auto-chapters pass over generated
4555
+ * captions (SubtitleTrack.generate_chapters).
4556
+ *
4557
+ * Not yet populated: the auto-chapters pass has not shipped yet. Fields are
4558
+ * documented here so consumers can code against the shape ahead of the
4559
+ * rollout.
4560
+ *
4561
+ * @generated from message transcodely.v1.ChapterResult
4562
+ */
4563
+ declare class ChapterResult extends Message<ChapterResult> {
4564
+ /**
4565
+ * The out_… output the generate track was configured on.
4566
+ *
4567
+ * @generated from field: string output_id = 1;
4568
+ */
4569
+ outputId: string;
4570
+ /**
4571
+ * ISO 639-2 language code, matching the caption track's language.
4572
+ *
4573
+ * @generated from field: string language = 2;
4574
+ */
4575
+ language: string;
4576
+ /**
4577
+ * Storage key of the WebVTT chapters file in the output destination.
4578
+ *
4579
+ * @generated from field: string storage_key = 3;
4580
+ */
4581
+ storageKey: string;
4582
+ /**
4583
+ * Resolved URL for the chapters file (same resolution rules as the caption
4584
+ * artifact URL).
4585
+ *
4586
+ * @generated from field: string url = 4;
4587
+ */
4588
+ url: string;
4589
+ /**
4590
+ * The chapter markers, ordered by start time.
4591
+ *
4592
+ * @generated from field: repeated transcodely.v1.ChapterPoint chapters = 5;
4593
+ */
4594
+ chapters: ChapterPoint[];
4595
+ constructor(data?: PartialMessage<ChapterResult>);
4596
+ static readonly runtime: typeof proto3;
4597
+ static readonly typeName = "transcodely.v1.ChapterResult";
4598
+ static readonly fields: FieldList;
4599
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ChapterResult;
4600
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ChapterResult;
4601
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ChapterResult;
4602
+ static equals(a: ChapterResult | PlainMessage<ChapterResult> | undefined, b: ChapterResult | PlainMessage<ChapterResult> | undefined): boolean;
4603
+ }
4604
+ /**
4605
+ * A generated or processed subtitle artifact, reported by the worker on job
4606
+ * completion and surfaced on the Job response. Mirrors the rendition pattern:
4607
+ * the worker computes both the storage key and the storage URL, and the API
4608
+ * persists them verbatim (the same way JobOutput.output_url works). Read-only
4609
+ * on Job responses.
4610
+ *
4611
+ * @generated from message transcodely.v1.SubtitleResult
4612
+ */
4613
+ declare class SubtitleResult extends Message<SubtitleResult> {
4614
+ /**
4615
+ * Output ID (out_…) the subtitle track was configured on.
4616
+ *
4617
+ * @generated from field: string output_id = 1;
4618
+ */
4619
+ outputId: string;
4620
+ /**
4621
+ * Processing operation that produced this artifact
4622
+ * (generate | extract | convert). Lowercase string on the wire.
4623
+ *
4624
+ * @generated from field: transcodely.v1.SubtitleOperation operation = 2;
4625
+ */
4626
+ operation: SubtitleOperation;
4627
+ /**
4628
+ * Subtitle file format: webvtt | srt | ttml | ass.
4629
+ *
4630
+ * @generated from field: transcodely.v1.SubtitleFormat format = 3;
4631
+ */
4632
+ format: SubtitleFormat;
4633
+ /**
4634
+ * Detected language (generate with auto-detect) or the configured
4635
+ * ISO 639-2 language code.
4636
+ *
4637
+ * @generated from field: string language = 4;
4638
+ */
4639
+ language: string;
4640
+ /**
4641
+ * Human-readable label (e.g., "English", "Spanish (CC)").
4642
+ *
4643
+ * @generated from field: string label = 5;
4644
+ */
4645
+ label: string;
4646
+ /**
4647
+ * True iff this track was produced by the generate operation
4648
+ * (automatic speech recognition).
4649
+ *
4650
+ * @generated from field: bool auto_generated = 6;
4651
+ */
4652
+ autoGenerated: boolean;
4653
+ /**
4654
+ * Caption file storage key in the output destination
4655
+ * (e.g. "job_xxx/subtitles/out_yyy_eng.vtt").
4656
+ *
4657
+ * @generated from field: string storage_key = 7;
4658
+ */
4659
+ storageKey: string;
4660
+ /**
4661
+ * Fully-qualified storage URL as built by the worker, stored as-is and
4662
+ * echoed on the Job response, exactly like JobOutput.output_url.
4663
+ *
4664
+ * @generated from field: string url = 8;
4665
+ */
4666
+ url: string;
4667
+ /**
4668
+ * Segment-level transcript JSON storage key. Set only for generate
4669
+ * tracks (the machine-readable transcript consumed by auto-chapters).
4670
+ *
4671
+ * @generated from field: string transcript_storage_key = 9;
4672
+ */
4673
+ transcriptStorageKey: string;
4674
+ /**
4675
+ * Fully-qualified transcript URL. Set only for generate tracks.
4676
+ *
4677
+ * @generated from field: string transcript_url = 10;
4678
+ */
4679
+ transcriptUrl: string;
4680
+ /**
4681
+ * Ready-to-fetch HTTPS URL for the caption file, signed and time-limited.
4682
+ *
4683
+ * Points at the same object as url, but as a CDN URL a browser or player can
4684
+ * load — url is a raw storage URI ("s3://…") that no client can fetch.
4685
+ * Present only for jobs writing to Transcodely-managed storage (an
4686
+ * output_origin with provider "transcodely"); jobs writing to your own bucket
4687
+ * get nothing here and should sign url with their own credentials.
4688
+ *
4689
+ * Emitted on single-job reads (Get, Watch) and never on List, and expires —
4690
+ * 6 hours by default — so re-read the job for a fresh one rather than
4691
+ * storing it.
4692
+ *
4693
+ * @generated from field: optional string signed_url = 11;
4694
+ */
4695
+ signedUrl?: string;
4696
+ /**
4697
+ * Ready-to-fetch HTTPS URL for the segment transcript, signed and
4698
+ * time-limited. Same rules and lifetime as signed_url; set only for generate
4699
+ * tracks, which are the only ones carrying a transcript.
4700
+ *
4701
+ * @generated from field: optional string transcript_signed_url = 12;
4702
+ */
4703
+ transcriptSignedUrl?: string;
4704
+ constructor(data?: PartialMessage<SubtitleResult>);
4705
+ static readonly runtime: typeof proto3;
4706
+ static readonly typeName = "transcodely.v1.SubtitleResult";
4707
+ static readonly fields: FieldList;
4708
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): SubtitleResult;
4709
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): SubtitleResult;
4710
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SubtitleResult;
4711
+ static equals(a: SubtitleResult | PlainMessage<SubtitleResult> | undefined, b: SubtitleResult | PlainMessage<SubtitleResult> | undefined): boolean;
4712
+ }
3775
4713
 
3776
4714
  /**
3777
4715
  * DRM system.
@@ -3829,41 +4767,59 @@ declare enum EncryptionScheme {
3829
4767
  * Bring Your Own Key configuration.
3830
4768
  * Client provides their own encryption keys.
3831
4769
  *
4770
+ * Write-only apart from key_id. Every read — CreateJob, GetJob, ListJobs, the
4771
+ * Watch snapshots and the webhook payloads — returns key_id and nothing else;
4772
+ * the content key, the PSSH boxes and the FairPlay IV/URI are never echoed
4773
+ * back. Because key is a non-optional scalar it still appears on the wire as
4774
+ * the empty string; that means "never returned", not "empty key". A job read
4775
+ * back from the API therefore cannot be resubmitted verbatim — repopulate key
4776
+ * from your own records first.
4777
+ *
4778
+ * Outputs created before the key id got its own storage column (2026-07-30)
4779
+ * carry no key id and return no byok block at all. There is no backfill:
4780
+ * recovering their id would mean opening the encrypted config envelope.
4781
+ *
3832
4782
  * @generated from message transcodely.v1.BYOKConfig
3833
4783
  */
3834
4784
  declare class BYOKConfig extends Message<BYOKConfig> {
3835
4785
  /**
3836
4786
  * Key identifier (32 hex characters).
3837
4787
  *
4788
+ * The one BYOK field returned on reads. It names which key encrypted an
4789
+ * output — the way an API key's prefix and last-4 name the key — so the
4790
+ * key in use can be confirmed without keeping separate records.
4791
+ *
3838
4792
  * @generated from field: string key_id = 1;
3839
4793
  */
3840
4794
  keyId: string;
3841
4795
  /**
3842
4796
  * Content encryption key (32 hex characters).
3843
4797
  *
4798
+ * Write-only: encrypted at rest and never returned on any read.
4799
+ *
3844
4800
  * @generated from field: string key = 2;
3845
4801
  */
3846
4802
  key: string;
3847
4803
  /**
3848
- * Widevine PSSH box (base64-encoded, optional).
4804
+ * Widevine PSSH box (base64-encoded, optional). Write-only.
3849
4805
  *
3850
4806
  * @generated from field: optional string pssh_widevine = 3;
3851
4807
  */
3852
4808
  psshWidevine?: string;
3853
4809
  /**
3854
- * PlayReady PSSH XML (optional).
4810
+ * PlayReady PSSH XML (optional). Write-only.
3855
4811
  *
3856
4812
  * @generated from field: optional string pssh_playready = 4;
3857
4813
  */
3858
4814
  psshPlayready?: string;
3859
4815
  /**
3860
- * FairPlay initialization vector (32 hex characters).
4816
+ * FairPlay initialization vector (32 hex characters). Write-only.
3861
4817
  *
3862
4818
  * @generated from field: optional string fairplay_iv = 5;
3863
4819
  */
3864
4820
  fairplayIv?: string;
3865
4821
  /**
3866
- * FairPlay key server URI (skd:// scheme).
4822
+ * FairPlay key server URI (skd:// scheme). Write-only.
3867
4823
  *
3868
4824
  * @generated from field: optional string fairplay_uri = 6;
3869
4825
  */
@@ -3893,6 +4849,9 @@ declare class KeyServerConfig extends Message<KeyServerConfig> {
3893
4849
  /**
3894
4850
  * Authentication token for the key server.
3895
4851
  *
4852
+ * Write-only: encrypted at rest and never returned on any read. The other
4853
+ * two fields of this message are echoed back normally.
4854
+ *
3896
4855
  * @generated from field: optional string auth_token = 2;
3897
4856
  */
3898
4857
  authToken?: string;
@@ -3933,6 +4892,9 @@ declare class DRMConfig extends Message<DRMConfig> {
3933
4892
  /**
3934
4893
  * BYOK configuration (mutually exclusive with key_server).
3935
4894
  *
4895
+ * On reads this is a partial reveal: present with only key_id populated,
4896
+ * or absent entirely for outputs predating the key id column.
4897
+ *
3936
4898
  * @generated from field: optional transcodely.v1.BYOKConfig byok = 3;
3937
4899
  */
3938
4900
  byok?: BYOKConfig;
@@ -3962,6 +4924,11 @@ declare class DRMConfig extends Message<DRMConfig> {
3962
4924
  /**
3963
4925
  * Content-aware encoding mode.
3964
4926
  *
4927
+ * NOT YET SUPPORTED. The worker pipeline does not yet act on content-aware
4928
+ * encoding, so any output carrying a ContentAwareConfig is rejected at CreateJob
4929
+ * with error code `parameter_unsupported` (see issue #167). The enum values are
4930
+ * retained for wire compatibility and will become active when the feature ships.
4931
+ *
3965
4932
  * @generated from enum transcodely.v1.ContentAwareMode
3966
4933
  */
3967
4934
  declare enum ContentAwareMode {
@@ -3970,13 +4937,15 @@ declare enum ContentAwareMode {
3970
4937
  */
3971
4938
  UNSPECIFIED = 0,
3972
4939
  /**
3973
- * Optimize CRF for target VMAF on specific content.
4940
+ * Optimize CRF for target VMAF on specific content. NOT YET SUPPORTED —
4941
+ * rejected at create.
3974
4942
  *
3975
4943
  * @generated from enum value: CONTENT_AWARE_MODE_PER_TITLE = 1;
3976
4944
  */
3977
4945
  PER_TITLE = 1,
3978
4946
  /**
3979
- * Generate optimal bitrate ladder automatically.
4947
+ * Generate optimal bitrate ladder automatically. NOT YET SUPPORTED —
4948
+ * rejected at create.
3980
4949
  *
3981
4950
  * @generated from enum value: CONTENT_AWARE_MODE_AUTO_ABR = 2;
3982
4951
  */
@@ -3985,6 +4954,10 @@ declare enum ContentAwareMode {
3985
4954
  /**
3986
4955
  * Auto ABR ladder generation constraints.
3987
4956
  *
4957
+ * NOT YET SUPPORTED — see ContentAwareConfig. These constraints are validated
4958
+ * for shape but never applied, because a request carrying content_aware is
4959
+ * rejected at create.
4960
+ *
3988
4961
  * @generated from message transcodely.v1.AutoABRConfig
3989
4962
  */
3990
4963
  declare class AutoABRConfig extends Message<AutoABRConfig> {
@@ -4001,100 +4974,277 @@ declare class AutoABRConfig extends Message<AutoABRConfig> {
4001
4974
  *
4002
4975
  * @generated from field: optional int32 max_variants = 2;
4003
4976
  */
4004
- maxVariants?: number;
4977
+ maxVariants?: number;
4978
+ /**
4979
+ * Lowest resolution in the generated ladder.
4980
+ *
4981
+ * @generated from field: transcodely.v1.Resolution min_resolution = 3;
4982
+ */
4983
+ minResolution: Resolution;
4984
+ /**
4985
+ * Highest resolution in the generated ladder.
4986
+ *
4987
+ * @generated from field: transcodely.v1.Resolution max_resolution = 4;
4988
+ */
4989
+ maxResolution: Resolution;
4990
+ constructor(data?: PartialMessage<AutoABRConfig>);
4991
+ static readonly runtime: typeof proto3;
4992
+ static readonly typeName = "transcodely.v1.AutoABRConfig";
4993
+ static readonly fields: FieldList;
4994
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): AutoABRConfig;
4995
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): AutoABRConfig;
4996
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): AutoABRConfig;
4997
+ static equals(a: AutoABRConfig | PlainMessage<AutoABRConfig> | undefined, b: AutoABRConfig | PlainMessage<AutoABRConfig> | undefined): boolean;
4998
+ }
4999
+ /**
5000
+ * Content-aware encoding configuration for an output.
5001
+ *
5002
+ * NOT YET SUPPORTED. Setting content_aware on any output causes CreateJob to
5003
+ * fail with error code `parameter_unsupported` and the message "content-aware
5004
+ * encoding (per_title/auto_abr) is not yet supported". The worker does not yet
5005
+ * implement per-title CRF optimization or auto-ABR ladder generation — both
5006
+ * modes would run the identical plain-encode path — so the API rejects the
5007
+ * request rather than silently no-op it while charging the content-aware
5008
+ * multiplier (issue #167 / transcodely/worker#90). The message and fields are
5009
+ * retained for wire compatibility and forward-planning.
5010
+ *
5011
+ * @generated from message transcodely.v1.ContentAwareConfig
5012
+ */
5013
+ declare class ContentAwareConfig extends Message<ContentAwareConfig> {
5014
+ /**
5015
+ * Encoding mode (required). NOT YET SUPPORTED — any value here causes the
5016
+ * request to be rejected at create.
5017
+ *
5018
+ * @generated from field: transcodely.v1.ContentAwareMode mode = 1;
5019
+ */
5020
+ mode: ContentAwareMode;
5021
+ /**
5022
+ * Override VMAF target (70-99). NOT YET SUPPORTED — content-aware encoding is
5023
+ * rejected at create, so this value is never applied.
5024
+ *
5025
+ * @generated from field: optional double vmaf_target = 2;
5026
+ */
5027
+ vmafTarget?: number;
5028
+ /**
5029
+ * Auto ABR constraints (only for auto_abr mode). NOT YET SUPPORTED — rejected
5030
+ * at create.
5031
+ *
5032
+ * @generated from field: optional transcodely.v1.AutoABRConfig auto_abr = 3;
5033
+ */
5034
+ autoAbr?: AutoABRConfig;
5035
+ constructor(data?: PartialMessage<ContentAwareConfig>);
5036
+ static readonly runtime: typeof proto3;
5037
+ static readonly typeName = "transcodely.v1.ContentAwareConfig";
5038
+ static readonly fields: FieldList;
5039
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ContentAwareConfig;
5040
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ContentAwareConfig;
5041
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ContentAwareConfig;
5042
+ static equals(a: ContentAwareConfig | PlainMessage<ContentAwareConfig> | undefined, b: ContentAwareConfig | PlainMessage<ContentAwareConfig> | undefined): boolean;
5043
+ }
5044
+ /**
5045
+ * Content analysis results from extended probe.
5046
+ *
5047
+ * NOT YET POPULATED. Produced only when content-aware analysis is wired in the
5048
+ * worker; today no job carries it, because content_aware requests are rejected
5049
+ * at create (see ContentAwareConfig).
5050
+ *
5051
+ * @generated from message transcodely.v1.ContentAnalysis
5052
+ */
5053
+ declare class ContentAnalysis extends Message<ContentAnalysis> {
5054
+ /**
5055
+ * Overall encoding complexity (0-1).
5056
+ *
5057
+ * @generated from field: double complexity_score = 1;
5058
+ */
5059
+ complexityScore: number;
5060
+ /**
5061
+ * Temporal complexity - amount of motion (0-1).
5062
+ *
5063
+ * @generated from field: double motion_score = 2;
5064
+ */
5065
+ motionScore: number;
5066
+ /**
5067
+ * Spatial detail complexity (0-1).
5068
+ *
5069
+ * @generated from field: double texture_score = 3;
5070
+ */
5071
+ textureScore: number;
5072
+ /**
5073
+ * Detected content type.
5074
+ *
5075
+ * @generated from field: string content_type = 4;
5076
+ */
5077
+ contentType: string;
5078
+ constructor(data?: PartialMessage<ContentAnalysis>);
5079
+ static readonly runtime: typeof proto3;
5080
+ static readonly typeName = "transcodely.v1.ContentAnalysis";
5081
+ static readonly fields: FieldList;
5082
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ContentAnalysis;
5083
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ContentAnalysis;
5084
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ContentAnalysis;
5085
+ static equals(a: ContentAnalysis | PlainMessage<ContentAnalysis> | undefined, b: ContentAnalysis | PlainMessage<ContentAnalysis> | undefined): boolean;
5086
+ }
5087
+
5088
+ /**
5089
+ * Anchor position for a relatively-placed watermark. The watermark is aligned
5090
+ * to the named region of each rendition's frame, so a single config places the
5091
+ * overlay consistently across every ABR rung regardless of output resolution.
5092
+ * Wire form is lowercase (e.g. "bottom_right") via the codec.
5093
+ *
5094
+ * @generated from enum transcodely.v1.WatermarkAnchor
5095
+ */
5096
+ declare enum WatermarkAnchor {
5097
+ /**
5098
+ * Default value; treated as bottom_right when unset.
5099
+ *
5100
+ * @generated from enum value: WATERMARK_ANCHOR_UNSPECIFIED = 0;
5101
+ */
5102
+ UNSPECIFIED = 0,
5103
+ /**
5104
+ * @generated from enum value: WATERMARK_ANCHOR_TOP_LEFT = 1;
5105
+ */
5106
+ TOP_LEFT = 1,
5107
+ /**
5108
+ * @generated from enum value: WATERMARK_ANCHOR_TOP_CENTER = 2;
5109
+ */
5110
+ TOP_CENTER = 2,
5111
+ /**
5112
+ * @generated from enum value: WATERMARK_ANCHOR_TOP_RIGHT = 3;
5113
+ */
5114
+ TOP_RIGHT = 3,
5115
+ /**
5116
+ * @generated from enum value: WATERMARK_ANCHOR_MIDDLE_LEFT = 4;
5117
+ */
5118
+ MIDDLE_LEFT = 4,
5119
+ /**
5120
+ * @generated from enum value: WATERMARK_ANCHOR_MIDDLE_CENTER = 5;
5121
+ */
5122
+ MIDDLE_CENTER = 5,
5123
+ /**
5124
+ * @generated from enum value: WATERMARK_ANCHOR_MIDDLE_RIGHT = 6;
5125
+ */
5126
+ MIDDLE_RIGHT = 6,
5127
+ /**
5128
+ * @generated from enum value: WATERMARK_ANCHOR_BOTTOM_LEFT = 7;
5129
+ */
5130
+ BOTTOM_LEFT = 7,
4005
5131
  /**
4006
- * Lowest resolution in the generated ladder.
4007
- *
4008
- * @generated from field: transcodely.v1.Resolution min_resolution = 3;
5132
+ * @generated from enum value: WATERMARK_ANCHOR_BOTTOM_CENTER = 8;
4009
5133
  */
4010
- minResolution: Resolution;
5134
+ BOTTOM_CENTER = 8,
4011
5135
  /**
4012
- * Highest resolution in the generated ladder.
4013
- *
4014
- * @generated from field: transcodely.v1.Resolution max_resolution = 4;
5136
+ * @generated from enum value: WATERMARK_ANCHOR_BOTTOM_RIGHT = 9;
4015
5137
  */
4016
- maxResolution: Resolution;
4017
- constructor(data?: PartialMessage<AutoABRConfig>);
4018
- static readonly runtime: typeof proto3;
4019
- static readonly typeName = "transcodely.v1.AutoABRConfig";
4020
- static readonly fields: FieldList;
4021
- static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): AutoABRConfig;
4022
- static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): AutoABRConfig;
4023
- static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): AutoABRConfig;
4024
- static equals(a: AutoABRConfig | PlainMessage<AutoABRConfig> | undefined, b: AutoABRConfig | PlainMessage<AutoABRConfig> | undefined): boolean;
5138
+ BOTTOM_RIGHT = 9
4025
5139
  }
4026
5140
  /**
4027
- * Content-aware encoding configuration for an output.
5141
+ * Absolute pixel placement for a watermark (advanced / "hacker mode"). The
5142
+ * overlay is drawn at an exact pixel offset and scaled to an exact pixel width;
5143
+ * unlike the relative anchor/width_pct fields, these coordinates do NOT adapt
5144
+ * across ABR rungs — a placement tuned for a 1080p rung will sit at the same
5145
+ * pixel offset on a 360p rung, so this is intended for single-rendition outputs
5146
+ * or advanced users who accept that trade-off.
4028
5147
  *
4029
- * @generated from message transcodely.v1.ContentAwareConfig
5148
+ * @generated from message transcodely.v1.WatermarkPixelPlacement
4030
5149
  */
4031
- declare class ContentAwareConfig extends Message<ContentAwareConfig> {
5150
+ declare class WatermarkPixelPlacement extends Message<WatermarkPixelPlacement> {
4032
5151
  /**
4033
- * Encoding mode (required).
5152
+ * Horizontal offset in pixels from the top-left origin of the frame.
4034
5153
  *
4035
- * @generated from field: transcodely.v1.ContentAwareMode mode = 1;
5154
+ * @generated from field: int32 x = 1;
4036
5155
  */
4037
- mode: ContentAwareMode;
5156
+ x: number;
4038
5157
  /**
4039
- * Override VMAF target (70-99).
4040
- * Defaults from quality tier: economy=88, standard=93, premium=97.
5158
+ * Vertical offset in pixels from the top-left origin of the frame.
4041
5159
  *
4042
- * @generated from field: optional double vmaf_target = 2;
5160
+ * @generated from field: int32 y = 2;
4043
5161
  */
4044
- vmafTarget?: number;
5162
+ y: number;
4045
5163
  /**
4046
- * Auto ABR constraints (only for auto_abr mode).
5164
+ * Watermark width in pixels. The overlay image is scaled to this width and
5165
+ * its height is derived automatically from the source aspect ratio.
4047
5166
  *
4048
- * @generated from field: optional transcodely.v1.AutoABRConfig auto_abr = 3;
5167
+ * @generated from field: int32 width = 3;
4049
5168
  */
4050
- autoAbr?: AutoABRConfig;
4051
- constructor(data?: PartialMessage<ContentAwareConfig>);
5169
+ width: number;
5170
+ constructor(data?: PartialMessage<WatermarkPixelPlacement>);
4052
5171
  static readonly runtime: typeof proto3;
4053
- static readonly typeName = "transcodely.v1.ContentAwareConfig";
5172
+ static readonly typeName = "transcodely.v1.WatermarkPixelPlacement";
4054
5173
  static readonly fields: FieldList;
4055
- static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ContentAwareConfig;
4056
- static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ContentAwareConfig;
4057
- static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ContentAwareConfig;
4058
- static equals(a: ContentAwareConfig | PlainMessage<ContentAwareConfig> | undefined, b: ContentAwareConfig | PlainMessage<ContentAwareConfig> | undefined): boolean;
5174
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): WatermarkPixelPlacement;
5175
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): WatermarkPixelPlacement;
5176
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): WatermarkPixelPlacement;
5177
+ static equals(a: WatermarkPixelPlacement | PlainMessage<WatermarkPixelPlacement> | undefined, b: WatermarkPixelPlacement | PlainMessage<WatermarkPixelPlacement> | undefined): boolean;
4059
5178
  }
4060
5179
  /**
4061
- * Content analysis results from extended probe.
5180
+ * Watermark / logo overlay baked into the encoded video of an output.
4062
5181
  *
4063
- * @generated from message transcodely.v1.ContentAnalysis
5182
+ * Two placement modes exist and are mutually exclusive:
5183
+ * * Relative (default): anchor + width_pct + margin_pct scale the overlay
5184
+ * consistently across every ABR rung.
5185
+ * * Pixel (advanced): the `pixel` submessage places the overlay at an exact
5186
+ * pixel offset and width (does not adapt across rungs).
5187
+ * `image_url` and `opacity` apply in both modes. The mutual exclusivity of
5188
+ * `pixel` with the relative fields is enforced server-side by the feature
5189
+ * validator.
5190
+ *
5191
+ * @generated from message transcodely.v1.WatermarkConfig
4064
5192
  */
4065
- declare class ContentAnalysis extends Message<ContentAnalysis> {
5193
+ declare class WatermarkConfig extends Message<WatermarkConfig> {
4066
5194
  /**
4067
- * Overall encoding complexity (0-1).
5195
+ * Public http(s) URL of the overlay image. Must be a PNG or WebP image
5196
+ * (alpha-capable formats only). Validated server-side at job creation: the
5197
+ * image is fetched through the SSRF-guarded transport, its format is checked
5198
+ * by magic bytes + decode, and size/dimension caps are enforced.
4068
5199
  *
4069
- * @generated from field: double complexity_score = 1;
5200
+ * @generated from field: string image_url = 1;
4070
5201
  */
4071
- complexityScore: number;
5202
+ imageUrl: string;
4072
5203
  /**
4073
- * Temporal complexity - amount of motion (0-1).
5204
+ * Anchor region the overlay is aligned to (relative mode). Defaults to
5205
+ * bottom_right when unset. Ignored when `pixel` is set.
4074
5206
  *
4075
- * @generated from field: double motion_score = 2;
5207
+ * @generated from field: optional transcodely.v1.WatermarkAnchor anchor = 2;
4076
5208
  */
4077
- motionScore: number;
5209
+ anchor?: WatermarkAnchor;
4078
5210
  /**
4079
- * Spatial detail complexity (0-1).
5211
+ * Watermark width as a percentage of each rendition's output width (relative
5212
+ * mode). Scales consistently across every ABR rung. Range (0, 100].
5213
+ * Defaults to 15 when unset. Ignored when `pixel` is set.
4080
5214
  *
4081
- * @generated from field: double texture_score = 3;
5215
+ * @generated from field: optional double width_pct = 3;
4082
5216
  */
4083
- textureScore: number;
5217
+ widthPct?: number;
4084
5218
  /**
4085
- * Detected content type.
5219
+ * Margin from the anchored edges as a percentage of output width (relative
5220
+ * mode). Range [0, 40]. Defaults to 2 when unset. Ignored when `pixel` is set.
4086
5221
  *
4087
- * @generated from field: string content_type = 4;
5222
+ * @generated from field: optional double margin_pct = 4;
4088
5223
  */
4089
- contentType: string;
4090
- constructor(data?: PartialMessage<ContentAnalysis>);
5224
+ marginPct?: number;
5225
+ /**
5226
+ * Overlay opacity. Range (0, 1]. Defaults to 1.0 (fully opaque) when unset.
5227
+ * Applies in both relative and pixel modes.
5228
+ *
5229
+ * @generated from field: optional double opacity = 5;
5230
+ */
5231
+ opacity?: number;
5232
+ /**
5233
+ * Absolute pixel placement (advanced mode). Mutually exclusive with anchor,
5234
+ * width_pct, and margin_pct — supplying `pixel` together with any of those is
5235
+ * rejected at job creation.
5236
+ *
5237
+ * @generated from field: optional transcodely.v1.WatermarkPixelPlacement pixel = 6;
5238
+ */
5239
+ pixel?: WatermarkPixelPlacement;
5240
+ constructor(data?: PartialMessage<WatermarkConfig>);
4091
5241
  static readonly runtime: typeof proto3;
4092
- static readonly typeName = "transcodely.v1.ContentAnalysis";
5242
+ static readonly typeName = "transcodely.v1.WatermarkConfig";
4093
5243
  static readonly fields: FieldList;
4094
- static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ContentAnalysis;
4095
- static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ContentAnalysis;
4096
- static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ContentAnalysis;
4097
- static equals(a: ContentAnalysis | PlainMessage<ContentAnalysis> | undefined, b: ContentAnalysis | PlainMessage<ContentAnalysis> | undefined): boolean;
5244
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): WatermarkConfig;
5245
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): WatermarkConfig;
5246
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): WatermarkConfig;
5247
+ static equals(a: WatermarkConfig | PlainMessage<WatermarkConfig> | undefined, b: WatermarkConfig | PlainMessage<WatermarkConfig> | undefined): boolean;
4098
5248
  }
4099
5249
 
4100
5250
  /**
@@ -5443,7 +6593,33 @@ declare enum ThumbnailMode {
5443
6593
  *
5444
6594
  * @generated from enum value: THUMBNAIL_MODE_TIMESTAMPS = 4;
5445
6595
  */
5446
- TIMESTAMPS = 4
6596
+ TIMESTAMPS = 4,
6597
+ /**
6598
+ * Generate short animated hover-preview loops for card/grid previews.
6599
+ *
6600
+ * Free and bundled — animated previews add NO cost to a job (thumbnails are
6601
+ * priced at 0). By default the worker produces BOTH an animated WebP and a
6602
+ * muted MP4 loop from the same samples, so a consumer can pick whichever its
6603
+ * surface supports. Set `format = webp` to emit only the WebP.
6604
+ *
6605
+ * Sampling is deterministic: unless `start_offsets` is set, clips are taken at
6606
+ * fixed 25% / 50% / 75% marks of the source duration (no scene detection).
6607
+ * Smart defaults (applied worker-side; the API stores exactly what was sent):
6608
+ * ~4 s total duration, 12 fps, 320 px wide.
6609
+ *
6610
+ * The animated WebP is hard-capped at 10 s: when `duration_seconds` exceeds
6611
+ * 10 the WebP is skipped and the output is MP4-only (documented, not an
6612
+ * error) — unless `format = webp` is set explicitly, in which case a
6613
+ * `duration_seconds` above 10 is rejected at job creation.
6614
+ *
6615
+ * Valid config for this mode: `width`, `height`, `quality` (maps to WebP
6616
+ * encode quality), `duration_seconds`, `fps`, `start_offsets`, `path_template`.
6617
+ * The single/interval/sprite/timestamps fields (`timestamp`,
6618
+ * `interval_seconds`, `timestamps`, `sprite_columns`) are not valid here.
6619
+ *
6620
+ * @generated from enum value: THUMBNAIL_MODE_ANIMATED = 5;
6621
+ */
6622
+ ANIMATED = 5
5447
6623
  }
5448
6624
  /**
5449
6625
  * Thumbnail output format.
@@ -5506,7 +6682,10 @@ declare class ThumbnailSpec extends Message<ThumbnailSpec> {
5506
6682
  */
5507
6683
  quality?: number;
5508
6684
  /**
5509
- * Timestamp in seconds for single mode.
6685
+ * Timestamp in seconds for single mode. When omitted, the worker
6686
+ * smart-selects a representative non-black frame from the opening of the
6687
+ * video (deterministic per input) instead of extracting the frame at t=0.
6688
+ * An explicit value — including 0 — extracts exactly that frame.
5510
6689
  *
5511
6690
  * @generated from field: optional double timestamp = 6;
5512
6691
  */
@@ -5542,6 +6721,13 @@ declare class ThumbnailSpec extends Message<ThumbnailSpec> {
5542
6721
  * {format} (image format: jpeg|png|webp), {thumb_index} (0-based),
5543
6722
  * {thumb_time} (seconds, file-safe), {thumb_time_ms} (milliseconds).
5544
6723
  *
6724
+ * Output-only variables ({output_id}, {codec}, {resolution}, {bitrate},
6725
+ * {quality}, {preset_id}, {output_index}, {segment_*}) are NOT valid here — a
6726
+ * thumbnail is not a rendition, so a thumbnail render context can't resolve
6727
+ * them and the literal token would land in the storage key. Setting one is a
6728
+ * validation error. (When a thumbnail INHERITS the output origin's template
6729
+ * instead, those variables are stripped automatically.)
6730
+ *
5545
6731
  * Example: "video/{video_id}/poster/{thumb_index}".
5546
6732
  *
5547
6733
  * Must not start with `/` or contain `..` (no path traversal). When set, it
@@ -5552,6 +6738,34 @@ declare class ThumbnailSpec extends Message<ThumbnailSpec> {
5552
6738
  * @generated from field: optional string path_template = 10;
5553
6739
  */
5554
6740
  pathTemplate?: string;
6741
+ /**
6742
+ * Total length of each animated preview clip, in seconds (animated mode only).
6743
+ * Range: 2-30. Default (unset): ~4 s, applied worker-side. The animated WebP
6744
+ * is hard-capped at 10 s: above 10 s the WebP is skipped and only the MP4 loop
6745
+ * is produced (unless format=webp is set explicitly, which then rejects
6746
+ * duration_seconds > 10). Only valid for animated mode.
6747
+ *
6748
+ * @generated from field: optional double duration_seconds = 11;
6749
+ */
6750
+ durationSeconds?: number;
6751
+ /**
6752
+ * Frames per second of the animated preview (animated mode only).
6753
+ * Range: 8-15. Default (unset): 12, applied worker-side. Only valid for
6754
+ * animated mode.
6755
+ *
6756
+ * @generated from field: optional int32 fps = 12;
6757
+ */
6758
+ fps?: number;
6759
+ /**
6760
+ * Explicit clip start offsets in seconds from the source start (animated mode
6761
+ * only). When set (max 3 entries, each >= 0), these replace the default
6762
+ * 25%/50%/75% sampling marks; the worker clamps each offset to the source
6763
+ * duration. Unset → the deterministic 25%/50%/75% marks. Only valid for
6764
+ * animated mode.
6765
+ *
6766
+ * @generated from field: repeated double start_offsets = 13;
6767
+ */
6768
+ startOffsets: number[];
5555
6769
  constructor(data?: PartialMessage<ThumbnailSpec>);
5556
6770
  static readonly runtime: typeof proto3;
5557
6771
  static readonly typeName = "transcodely.v1.ThumbnailSpec";
@@ -5589,14 +6803,16 @@ declare class ThumbnailResult extends Message<ThumbnailResult> {
5589
6803
  url: string;
5590
6804
  /**
5591
6805
  * Generation mode that produced this file: single | interval | sprite |
5592
- * timestamps. Lowercase string on the wire.
6806
+ * timestamps | animated. Lowercase string on the wire.
5593
6807
  *
5594
6808
  * @generated from field: string mode = 3;
5595
6809
  */
5596
6810
  mode: string;
5597
6811
  /**
5598
6812
  * File format: jpeg | png | webp. The sprite mode's WebVTT sidecar uses
5599
- * "vtt".
6813
+ * "vtt". Animated mode yields "webp" (the animated WebP) and "mp4" (the muted
6814
+ * MP4 loop) — "mp4" rides this free-form string; it is not a ThumbnailFormat
6815
+ * enum value.
5600
6816
  *
5601
6817
  * @generated from field: string format = 4;
5602
6818
  */
@@ -5617,6 +6833,24 @@ declare class ThumbnailResult extends Message<ThumbnailResult> {
5617
6833
  * @generated from field: int32 index = 7;
5618
6834
  */
5619
6835
  index: number;
6836
+ /**
6837
+ * Ready-to-fetch HTTPS URL for this thumbnail file, signed and time-limited.
6838
+ *
6839
+ * Points at the same object as url, but as a CDN URL a browser can load —
6840
+ * url is a raw storage URI ("s3://…") that no client can fetch. Present only
6841
+ * for jobs writing to Transcodely-managed storage (an output_origin with
6842
+ * provider "transcodely"); jobs writing to your own bucket get nothing here
6843
+ * and should sign url with their own credentials.
6844
+ *
6845
+ * Emitted on single-job reads (Get, Watch) and never on List, and expires —
6846
+ * 6 hours by default — so re-read the job for a fresh one rather than storing
6847
+ * it. The sprite mode's WebVTT sidecar (format "vtt") is signed so that the
6848
+ * sprite image its cues reference relatively inherits the same
6849
+ * authorization.
6850
+ *
6851
+ * @generated from field: optional string signed_url = 8;
6852
+ */
6853
+ signedUrl?: string;
5620
6854
  constructor(data?: PartialMessage<ThumbnailResult>);
5621
6855
  static readonly runtime: typeof proto3;
5622
6856
  static readonly typeName = "transcodely.v1.ThumbnailResult";
@@ -6164,6 +7398,16 @@ declare class OutputSpec extends Message<OutputSpec> {
6164
7398
  * @generated from field: optional bool disable_audio = 16;
6165
7399
  */
6166
7400
  disableAudio?: boolean;
7401
+ /**
7402
+ * Watermark / logo overlay for this output. When set, the overlay is baked
7403
+ * into the encoded video of this output (like subtitle burn-in). Billed under
7404
+ * the unified overlay multiplier class: 1.1x once per output regardless of how
7405
+ * many pixel-burning overlays are enabled (a watermark and burned-in subtitles
7406
+ * together are still a single 1.1x, never 1.21x).
7407
+ *
7408
+ * @generated from field: optional transcodely.v1.WatermarkConfig watermark = 17;
7409
+ */
7410
+ watermark?: WatermarkConfig;
6167
7411
  constructor(data?: PartialMessage<OutputSpec>);
6168
7412
  static readonly runtime: typeof proto3;
6169
7413
  static readonly typeName = "transcodely.v1.OutputSpec";
@@ -6453,8 +7697,9 @@ declare class JobOutput extends Message<JobOutput> {
6453
7697
  estimatedCost?: number;
6454
7698
  /**
6455
7699
  * Actual cost (calculated after encoding using locked pricing and actual duration).
6456
- * For canceled outputs, this reflects cost of encoded portion.
6457
- * For failed outputs, this is zero.
7700
+ * Only a completed output is billable, so this is zero for both canceled and
7701
+ * failed outputs — a canceled output produced nothing usable, no matter how
7702
+ * far its encode got.
6458
7703
  *
6459
7704
  * @generated from field: optional double actual_cost = 11;
6460
7705
  */
@@ -6466,7 +7711,14 @@ declare class JobOutput extends Message<JobOutput> {
6466
7711
  */
6467
7712
  errorCode?: string;
6468
7713
  /**
6469
- * Error message if failed.
7714
+ * Human-readable summary of why this output failed, in one or two sentences.
7715
+ *
7716
+ * Derived from error_code, not from the transcoder: this field never carries
7717
+ * raw tool output, command lines, stack traces, or file paths. Where a short
7718
+ * safe detail is available it is appended in parentheses, e.g. "(HTTP 404)".
7719
+ *
7720
+ * Match on error_code, not on this text. The wording is documentation, not
7721
+ * API surface, and may be reworded in any release.
6470
7722
  *
6471
7723
  * @generated from field: optional string error_message = 13;
6472
7724
  */
@@ -6545,6 +7797,28 @@ declare class JobOutput extends Message<JobOutput> {
6545
7797
  * @generated from field: repeated transcodely.v1.OutputVariantResult variant_results = 25;
6546
7798
  */
6547
7799
  variantResults: OutputVariantResult[];
7800
+ /**
7801
+ * Ready-to-fetch HTTPS URL for this output, signed and time-limited.
7802
+ *
7803
+ * Points at the same object as output_url — the media file for a progressive
7804
+ * output, the master playlist or MPD for HLS/DASH — but as a CDN URL a
7805
+ * browser or player can load, where output_url is a raw storage URI
7806
+ * ("s3://…") that no client can fetch.
7807
+ *
7808
+ * Present only when the job writes to Transcodely-managed storage (an
7809
+ * output_origin with provider "transcodely") and the output has completed.
7810
+ * Jobs writing to your own bucket get nothing here: we hold no delivery
7811
+ * domain for it, so read output_url and sign it with your own credentials.
7812
+ *
7813
+ * Emitted on single-job reads (Get, Watch) and never on List. The URL expires
7814
+ * — 6 hours by default — so treat it as a fetch handle, not a durable link:
7815
+ * re-read the job for a fresh one rather than storing it. For HLS and DASH it
7816
+ * is signed so that variant playlists and segments referenced by the manifest
7817
+ * inherit the same authorization.
7818
+ *
7819
+ * @generated from field: optional string signed_url = 26;
7820
+ */
7821
+ signedUrl?: string;
6548
7822
  constructor(data?: PartialMessage<JobOutput>);
6549
7823
  static readonly runtime: typeof proto3;
6550
7824
  static readonly typeName = "transcodely.v1.JobOutput";
@@ -6839,7 +8113,9 @@ declare class Job extends Message<Job> {
6839
8113
  */
6840
8114
  inputMetadata?: InputMetadata;
6841
8115
  /**
6842
- * Output renditions.
8116
+ * Output renditions, in the same order as the create request's `outputs`.
8117
+ * The order is stable across every read of the job, so indexing into this
8118
+ * array to find the rendition you asked for is safe.
6843
8119
  *
6844
8120
  * @generated from field: repeated transcodely.v1.JobOutput outputs = 7;
6845
8121
  */
@@ -6851,8 +8127,21 @@ declare class Job extends Message<Job> {
6851
8127
  */
6852
8128
  totalEstimatedCost?: number;
6853
8129
  /**
6854
- * Total actual cost (sum of completed/canceled outputs).
6855
- * Failed outputs contribute zero to this total.
8130
+ * Total actual cost — what the job is billed, in the job's currency.
8131
+ *
8132
+ * Only completed outputs are billable, and what happened to the job as a
8133
+ * whole decides whether they are billed at all:
8134
+ * - completed: the sum of its outputs' actual costs, raised to
8135
+ * minimum_charge_eur if that minimum is in effect.
8136
+ * - canceled: the sum of the outputs that had already completed and been
8137
+ * delivered when the cancel landed. Identical whether the job was
8138
+ * canceled through CancelJob or observed as canceled by the worker. The
8139
+ * minimum charge never applies.
8140
+ * - failed: zero. A job that ends failed is not billed, even if some of
8141
+ * its outputs completed before the failure.
8142
+ * - partial: the sum of the outputs that completed, un-floored.
8143
+ * Additive fees (see fees) are included on top, and are charged only on jobs
8144
+ * that ended completed or partial.
6856
8145
  *
6857
8146
  * @generated from field: optional double total_actual_cost = 9;
6858
8147
  */
@@ -6864,7 +8153,15 @@ declare class Job extends Message<Job> {
6864
8153
  */
6865
8154
  errorCode?: string;
6866
8155
  /**
6867
- * Error message if status is FAILED.
8156
+ * Human-readable summary of why the job failed, in one or two sentences.
8157
+ *
8158
+ * Derived from error_code, not from the transcoder: this field never carries
8159
+ * raw tool output, command lines, stack traces, or file paths. Where a short
8160
+ * safe detail is available it is appended in parentheses, e.g. "(HTTP 404)".
8161
+ * The same text reaches you on the job.failed webhook payload.
8162
+ *
8163
+ * Match on error_code, not on this text. The wording is documentation, not
8164
+ * API surface, and may be reworded in any release.
6868
8165
  *
6869
8166
  * @generated from field: optional string error_message = 11;
6870
8167
  */
@@ -6954,6 +8251,16 @@ declare class Job extends Message<Job> {
6954
8251
  * @generated from field: repeated transcodely.v1.ThumbnailResult thumbnail_results = 28;
6955
8252
  */
6956
8253
  thumbnailResults: ThumbnailResult[];
8254
+ /**
8255
+ * Generated/processed subtitle artifacts (populated after the job
8256
+ * completes). Each entry carries the worker-built storage `url` plus the
8257
+ * `output_id` it was configured on. Auto-generated captions (operation
8258
+ * generate) additionally expose a segment-level transcript. Mirrors how
8259
+ * JobOutput.output_url surfaces rendition results.
8260
+ *
8261
+ * @generated from field: repeated transcodely.v1.SubtitleResult subtitle_results = 32;
8262
+ */
8263
+ subtitleResults: SubtitleResult[];
6957
8264
  /**
6958
8265
  * Job-level output path template (echoed from request).
6959
8266
  * Variables: {job_id}, {output_id}, {date}, {timestamp}, {codec}, {resolution}, {format}, {quality}, {output_index}, {uuid}
@@ -6972,6 +8279,72 @@ declare class Job extends Message<Job> {
6972
8279
  * @generated from field: string object = 27;
6973
8280
  */
6974
8281
  object: string;
8282
+ /**
8283
+ * Minimum charge for this job in EUR, locked at creation and never changed
8284
+ * retroactively. It is derived from the job's assigned billing class — a size
8285
+ * band (small/medium/large/extra-large) reflecting the compute the job is
8286
+ * guaranteed to cover — or, in legacy configurations, from the recommended
8287
+ * machine size; either way it is a stable quote, not re-derived from the
8288
+ * machine the job ultimately runs on. When the minimum charge is in effect,
8289
+ * the billed total for a successfully completed job is
8290
+ * max(sum of output costs, minimum_charge_eur) — see minimum_charge_applied
8291
+ * for whether it determined this job's total. The minimum applies only to
8292
+ * jobs that reach completed: a failed job is billed zero, and a canceled or
8293
+ * partial job is billed the un-floored sum of the outputs it did complete.
8294
+ * Absent when no minimum was computed for this job.
8295
+ *
8296
+ * @generated from field: optional double minimum_charge_eur = 30;
8297
+ */
8298
+ minimumChargeEur?: number;
8299
+ /**
8300
+ * Whether minimum_charge_eur determined the job's most recently computed
8301
+ * total — true when the sum of output costs came in below the minimum and
8302
+ * the total was raised to it (estimated total after probe; actual total
8303
+ * after successful completion). When true, total_estimated_cost or
8304
+ * total_actual_cost exceeds the sum of the per-output cost fields, which
8305
+ * are never raised themselves. The minimum is a stable quote locked at
8306
+ * creation (from the job's billing class, or the recommended machine size in
8307
+ * legacy configurations); it is never re-derived from the machine the job
8308
+ * ultimately runs on.
8309
+ *
8310
+ * @generated from field: bool minimum_charge_applied = 31;
8311
+ */
8312
+ minimumChargeApplied: boolean;
8313
+ /**
8314
+ * Additive fee line items (v1: AI caption generation). Fees are charged ON
8315
+ * TOP of the encode bill and sit OUTSIDE the minimum-charge floor:
8316
+ * billed total = max(sum of output costs, minimum_charge_eur) + sum of fees.
8317
+ * total_estimated_cost / total_actual_cost INCLUDE fees; this list exposes
8318
+ * the decomposition. Only live fees are listed — a fee that was voided
8319
+ * (job failed/canceled, or the artifact was never produced) is dropped
8320
+ * from the list and never charged. Server-set; read-only.
8321
+ *
8322
+ * @generated from field: repeated transcodely.v1.JobFee fees = 33;
8323
+ */
8324
+ fees: JobFee[];
8325
+ /**
8326
+ * Hosted video ID used as the input source (video mode), echoed from the
8327
+ * request. Empty when the job was created with input_url or
8328
+ * input_origin_id. Server-set; read-only.
8329
+ *
8330
+ * @generated from field: string input_video_id = 34;
8331
+ */
8332
+ inputVideoId: string;
8333
+ /**
8334
+ * Auto-generated chapter tracks, one per output whose generated caption track
8335
+ * had chapters enabled (SubtitleTrack.generate_chapters). Populated once the
8336
+ * auto-chapters pass ships; empty until then.
8337
+ *
8338
+ * @generated from field: repeated transcodely.v1.ChapterResult chapter_results = 35;
8339
+ */
8340
+ chapterResults: ChapterResult[];
8341
+ /**
8342
+ * Clip range this job encodes (echoed from request). Absent when the job
8343
+ * encodes the full input.
8344
+ *
8345
+ * @generated from field: optional transcodely.v1.ClipConfig clip = 36;
8346
+ */
8347
+ clip?: ClipConfig;
6975
8348
  constructor(data?: PartialMessage<Job>);
6976
8349
  static readonly runtime: typeof proto3;
6977
8350
  static readonly typeName = "transcodely.v1.Job";
@@ -6981,6 +8354,120 @@ declare class Job extends Message<Job> {
6981
8354
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Job;
6982
8355
  static equals(a: Job | PlainMessage<Job> | undefined, b: Job | PlainMessage<Job> | undefined): boolean;
6983
8356
  }
8357
+ /**
8358
+ * A single additive fee line item on a job (see Job.fees). Fees are metered
8359
+ * charges for services performed alongside the encode (v1: AI caption
8360
+ * generation at EUR 0.05 per source minute). A fee is charged once per job,
8361
+ * estimated when the input probe supplies the source duration, and only
8362
+ * billed when the completion report shows the fee's artifact was actually
8363
+ * produced (no artifact, no fee). Fees are never absorbed by the per-job
8364
+ * minimum charge: billed total = max(sum of output costs, minimum_charge_eur)
8365
+ * + sum of fees. Read-only.
8366
+ *
8367
+ * @generated from message transcodely.v1.JobFee
8368
+ */
8369
+ declare class JobFee extends Message<JobFee> {
8370
+ /**
8371
+ * Fee discriminator — the fee pricing rule's key. v1: "captions".
8372
+ *
8373
+ * @generated from field: string fee_type = 1;
8374
+ */
8375
+ feeType: string;
8376
+ /**
8377
+ * Human-readable description of what the fee is for
8378
+ * (e.g., "AI Caption Generation").
8379
+ *
8380
+ * @generated from field: string description = 2;
8381
+ */
8382
+ description: string;
8383
+ /**
8384
+ * Metering unit. v1: "source_minute" (input duration in minutes).
8385
+ *
8386
+ * @generated from field: string unit = 3;
8387
+ */
8388
+ unit: string;
8389
+ /**
8390
+ * Metered quantity in `unit`s — the exact fraction, e.g. a 90-second
8391
+ * source is 1.5 source minutes. 0 until the input probe completes.
8392
+ *
8393
+ * @generated from field: double quantity = 4;
8394
+ */
8395
+ quantity: number;
8396
+ /**
8397
+ * Price per unit in `currency`, locked at job creation from the
8398
+ * then-effective fee pricing rule (e.g., 0.05).
8399
+ *
8400
+ * @generated from field: double rate = 5;
8401
+ */
8402
+ rate: number;
8403
+ /**
8404
+ * quantity x rate, in `currency`. 0 until the input probe completes.
8405
+ *
8406
+ * @generated from field: double amount = 6;
8407
+ */
8408
+ amount: number;
8409
+ /**
8410
+ * Currency for rate/amount (ISO 4217 code, e.g., "EUR"). Matches the
8411
+ * job-level currency field.
8412
+ *
8413
+ * @generated from field: string currency = 7;
8414
+ */
8415
+ currency: string;
8416
+ constructor(data?: PartialMessage<JobFee>);
8417
+ static readonly runtime: typeof proto3;
8418
+ static readonly typeName = "transcodely.v1.JobFee";
8419
+ static readonly fields: FieldList;
8420
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): JobFee;
8421
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): JobFee;
8422
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): JobFee;
8423
+ static equals(a: JobFee | PlainMessage<JobFee> | undefined, b: JobFee | PlainMessage<JobFee> | undefined): boolean;
8424
+ }
8425
+ /**
8426
+ * ClipConfig selects a sub-range of the input to encode instead of the full
8427
+ * duration. Applies to the whole job: every output is encoded from the
8428
+ * clipped range, and thumbnails/sprites are computed within it. Cuts are
8429
+ * frame-accurate (outputs are always re-encoded). Billing keys off the
8430
+ * produced output duration, so clipping reduces cost accordingly (the
8431
+ * per-job minimum charge, when in effect, still applies).
8432
+ *
8433
+ * Bounds are stored with 0.1ms (4-decimal) precision; finer-grained values
8434
+ * are rounded. The minimum clip length is 1ms. A clip of {0, 0} is treated
8435
+ * as no clip (encode the full input).
8436
+ *
8437
+ * @generated from message transcodely.v1.ClipConfig
8438
+ */
8439
+ declare class ClipConfig extends Message<ClipConfig> {
8440
+ /**
8441
+ * Where the clip starts, in seconds from the beginning of the input.
8442
+ * Default 0 (start of input). Must be within the input's duration:
8443
+ * validated against the probed duration, failing the job with error code
8444
+ * `input_clip_out_of_range` when out of range.
8445
+ * The upper bound is a CEL expression rather than double.lte: combining
8446
+ * gte+lte trips a broken double.gte_lte composite rule in the pinned
8447
+ * protovalidate-go ("no such attribute(s): rules").
8448
+ *
8449
+ * @generated from field: double start_seconds = 1;
8450
+ */
8451
+ startSeconds: number;
8452
+ /**
8453
+ * Where the clip ends, in seconds from the beginning of the input.
8454
+ * 0 (or unset) means end of input. When set, must be at least 0.001s
8455
+ * greater than start_seconds and no greater than the probed input
8456
+ * duration; otherwise the job fails at probe time with error code
8457
+ * `input_clip_out_of_range`.
8458
+ *
8459
+ * @generated from field: double end_seconds = 2;
8460
+ */
8461
+ endSeconds: number;
8462
+ constructor(data?: PartialMessage<ClipConfig>);
8463
+ static readonly runtime: typeof proto3;
8464
+ static readonly typeName = "transcodely.v1.ClipConfig";
8465
+ static readonly fields: FieldList;
8466
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ClipConfig;
8467
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ClipConfig;
8468
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ClipConfig;
8469
+ static equals(a: ClipConfig | PlainMessage<ClipConfig> | undefined, b: ClipConfig | PlainMessage<ClipConfig> | undefined): boolean;
8470
+ }
6984
8471
  /**
6985
8472
  * Request to create a new job.
6986
8473
  *
@@ -7011,6 +8498,18 @@ declare class CreateJobRequest extends Message<CreateJobRequest> {
7011
8498
  * @generated from field: optional string input_path = 10;
7012
8499
  */
7013
8500
  inputPath?: string;
8501
+ /**
8502
+ * Hosted video ID to use as the input source (video mode).
8503
+ * The job's input is resolved server-side from the referenced video's
8504
+ * original source (falling back to its highest-bitrate rendition if the
8505
+ * ingest source is gone). Outputs are written to the video's managed
8506
+ * storage and linked to it. Use this OR input_url OR input_origin_id.
8507
+ * Primarily for retro-captioning an existing hosted video with a
8508
+ * captions-only output.
8509
+ *
8510
+ * @generated from field: optional string input_video_id = 13;
8511
+ */
8512
+ inputVideoId?: string;
7014
8513
  /**
7015
8514
  * Origin ID for outputs (origin mode).
7016
8515
  * If specified, all outputs will be written to this origin.
@@ -7026,7 +8525,8 @@ declare class CreateJobRequest extends Message<CreateJobRequest> {
7026
8525
  */
7027
8526
  outputs: OutputSpec[];
7028
8527
  /**
7029
- * Job priority (affects processing order and cost).
8528
+ * Job priority (affects worker selection and scheduling order; has no
8529
+ * effect on cost — pricing is driven by codec/resolution/framerate/quality).
7030
8530
  *
7031
8531
  * @generated from field: transcodely.v1.JobPriority priority = 3;
7032
8532
  */
@@ -7105,6 +8605,14 @@ declare class CreateJobRequest extends Message<CreateJobRequest> {
7105
8605
  * @generated from field: optional string app_id = 21;
7106
8606
  */
7107
8607
  appId?: string;
8608
+ /**
8609
+ * Encode only a sub-range of the input (job-level; applies to all outputs).
8610
+ * Omit to encode the full input. See ClipConfig for range semantics and
8611
+ * probe-time validation.
8612
+ *
8613
+ * @generated from field: optional transcodely.v1.ClipConfig clip = 22;
8614
+ */
8615
+ clip?: ClipConfig;
7108
8616
  constructor(data?: PartialMessage<CreateJobRequest>);
7109
8617
  static readonly runtime: typeof proto3;
7110
8618
  static readonly typeName = "transcodely.v1.CreateJobRequest";
@@ -7186,11 +8694,14 @@ declare class GetJobResponse extends Message<GetJobResponse> {
7186
8694
  /**
7187
8695
  * Request to list jobs.
7188
8696
  *
8697
+ * Filters combine with AND: a job is returned only if it satisfies every filter
8698
+ * supplied on the request. Omitted filters are not applied.
8699
+ *
7189
8700
  * @generated from message transcodely.v1.ListJobsRequest
7190
8701
  */
7191
8702
  declare class ListJobsRequest extends Message<ListJobsRequest> {
7192
8703
  /**
7193
- * Optional status filter.
8704
+ * Optional status filter. Superseded by `statuses` — see that field.
7194
8705
  *
7195
8706
  * @generated from field: optional transcodely.v1.JobStatus status = 1;
7196
8707
  */
@@ -7210,6 +8721,45 @@ declare class ListJobsRequest extends Message<ListJobsRequest> {
7210
8721
  * @generated from field: optional string app_id = 3;
7211
8722
  */
7212
8723
  appId?: string;
8724
+ /**
8725
+ * Only include jobs created at or after this timestamp (RFC 3339). Inclusive.
8726
+ *
8727
+ * @generated from field: optional google.protobuf.Timestamp created_after = 4;
8728
+ */
8729
+ createdAfter?: Timestamp;
8730
+ /**
8731
+ * Only include jobs created at or before this timestamp (RFC 3339). Inclusive.
8732
+ *
8733
+ * @generated from field: optional google.protobuf.Timestamp created_before = 5;
8734
+ */
8735
+ createdBefore?: Timestamp;
8736
+ /**
8737
+ * Filter by several statuses at once: a job matches if its status is any one
8738
+ * of the listed values (OR within the field), e.g. [failed, canceled] to list
8739
+ * everything that did not finish.
8740
+ *
8741
+ * Precedence: when this field is non-empty it replaces `status` entirely and
8742
+ * `status` is ignored — the two are never intersected. Send one or the other.
8743
+ * `status` remains supported for existing clients.
8744
+ *
8745
+ * @generated from field: repeated transcodely.v1.JobStatus statuses = 6;
8746
+ */
8747
+ statuses: JobStatus[];
8748
+ /**
8749
+ * Filter on the job's user-provided metadata (the `metadata` map supplied at
8750
+ * create time). Every pair must be present on the job with exactly that value
8751
+ * (AND across pairs); a job carrying additional metadata keys still matches.
8752
+ * Values are compared as exact strings — no prefix, range, or wildcard match.
8753
+ * Jobs created without metadata never match a non-empty filter.
8754
+ *
8755
+ * Example: {"batch": "2026-07", "tenant": "acme"} returns only jobs tagged
8756
+ * with both.
8757
+ *
8758
+ * @generated from field: map<string, string> metadata = 7;
8759
+ */
8760
+ metadata: {
8761
+ [key: string]: string;
8762
+ };
7213
8763
  constructor(data?: PartialMessage<ListJobsRequest>);
7214
8764
  static readonly runtime: typeof proto3;
7215
8765
  static readonly typeName = "transcodely.v1.ListJobsRequest";
@@ -7459,7 +9009,11 @@ declare enum VideoVisibility {
7459
9009
  */
7460
9010
  UNLISTED = 2,
7461
9011
  /**
7462
- * Requires authentication to view.
9012
+ * Not playable via the public player or embed: the player page returns 404 and
9013
+ * embed_url/embed_code are never populated. Authenticated API reads
9014
+ * (VideoService.Get/List/Watch) for the owning app DO return signed, expiring
9015
+ * playback_url/poster_url once the video is "ready", so the owner can watch a
9016
+ * private video via the API even though it stays off the public player.
7463
9017
  *
7464
9018
  * @generated from enum value: VIDEO_VISIBILITY_PRIVATE = 3;
7465
9019
  */
@@ -7484,7 +9038,8 @@ declare class Video extends Message<Video> {
7484
9038
  */
7485
9039
  appId: string;
7486
9040
  /**
7487
- * How the video was created: "upload" (direct upload) or "job" (from transcoding job).
9041
+ * How the video was created: "upload" (direct upload or CreateFromUrl ingest)
9042
+ * or "job" (from a managed transcoding job created via JobService.Create).
7488
9043
  *
7489
9044
  * @generated from field: string source = 3;
7490
9045
  */
@@ -7540,20 +9095,38 @@ declare class Video extends Message<Video> {
7540
9095
  */
7541
9096
  preset?: string;
7542
9097
  /**
7543
- * Playback (computed per-request, not stored — signed CDN tokens).
9098
+ * Playback surface — all computed per-request and never stored. Populated for
9099
+ * "ready" videos of any visibility (public, unlisted, and — on authenticated
9100
+ * owner reads — private); absent otherwise. On apps with CDN token auth
9101
+ * enabled the URL is signed and expiring (HMAC token + expiry query params);
9102
+ * it is re-issued on every read, so clients should use the value from the
9103
+ * latest response rather than caching it. On apps not yet migrated to token
9104
+ * auth the URL is unsigned and access control comes from the managed-storage
9105
+ * bucket policy; unsigned URLs are never issued for private videos.
7544
9106
  *
7545
9107
  * @generated from field: optional string playback_url = 20;
7546
9108
  */
7547
9109
  playbackUrl?: string;
7548
9110
  /**
9111
+ * Public embed surface — populated only for playable videos (status "ready"
9112
+ * and NOT private). Always absent for private videos.
9113
+ *
7549
9114
  * @generated from field: optional string embed_url = 21;
7550
9115
  */
7551
9116
  embedUrl?: string;
7552
9117
  /**
9118
+ * Ready-to-paste responsive HTML embed snippet: a 16:9 aspect-ratio wrapper
9119
+ * div containing a lazy-loaded, borderless <iframe src=embed_url> that fills
9120
+ * its container (no fixed width/height). Same population rules as embed_url.
9121
+ *
7553
9122
  * @generated from field: optional string embed_code = 22;
7554
9123
  */
7555
9124
  embedCode?: string;
7556
9125
  /**
9126
+ * Poster image URL, resolved from the worker-reported poster key. Signed and
9127
+ * expiring on token-auth apps, unsigned otherwise — same rules and per-request
9128
+ * re-issuance as playback_url. Absent when the video has no generated poster.
9129
+ *
7557
9130
  * @generated from field: optional string poster_url = 23;
7558
9131
  */
7559
9132
  posterUrl?: string;
@@ -7561,12 +9134,36 @@ declare class Video extends Message<Video> {
7561
9134
  * @generated from field: optional double duration_seconds = 24;
7562
9135
  */
7563
9136
  durationSeconds?: number;
9137
+ /**
9138
+ * Animated hover-preview URLs, populated when the video was created with
9139
+ * hover_previews enabled and its transcode produced the animated artifacts.
9140
+ * Same resolution and per-request re-issuance rules as poster_url: signed and
9141
+ * expiring on token-auth apps, unsigned otherwise, absent for private videos
9142
+ * without a signable key. hover_preview_url is the animated WebP; the muted
9143
+ * MP4 loop rides hover_preview_mp4_url. Either may be absent (e.g. the WebP is
9144
+ * skipped for previews longer than 10 s). Field numbers 44/45.
9145
+ *
9146
+ * @generated from field: optional string hover_preview_url = 44;
9147
+ */
9148
+ hoverPreviewUrl?: string;
9149
+ /**
9150
+ * @generated from field: optional string hover_preview_mp4_url = 45;
9151
+ */
9152
+ hoverPreviewMp4Url?: string;
7564
9153
  /**
7565
9154
  * Renditions available for playback.
7566
9155
  *
7567
9156
  * @generated from field: repeated transcodely.v1.VideoRendition renditions = 25;
7568
9157
  */
7569
9158
  renditions: VideoRendition[];
9159
+ /**
9160
+ * Caption/subtitle tracks attached to this video, in the order they were
9161
+ * attached. Populated for videos whose transcode produced caption files —
9162
+ * either in the same job or by a later captions-only job. Empty otherwise.
9163
+ *
9164
+ * @generated from field: repeated transcodely.v1.VideoTextTrack text_tracks = 49;
9165
+ */
9166
+ textTracks: VideoTextTrack[];
7570
9167
  /**
7571
9168
  * Storage and cost transparency.
7572
9169
  *
@@ -7591,6 +9188,31 @@ declare class Video extends Message<Video> {
7591
9188
  * @generated from field: optional google.protobuf.Timestamp ready_at = 42;
7592
9189
  */
7593
9190
  readyAt?: Timestamp;
9191
+ /**
9192
+ * Source lifecycle (managed hosting only). These concern ONLY the original
9193
+ * uploaded source file; renditions and playback are never affected.
9194
+ *
9195
+ * Whether this video's source file is exempt from the app's
9196
+ * delete_source_after_days lifecycle rule. Set via UpdateVideo.
9197
+ *
9198
+ * @generated from field: bool source_pinned = 46;
9199
+ */
9200
+ sourcePinned: boolean;
9201
+ /**
9202
+ * When the source file is scheduled to be deleted by the app's
9203
+ * delete_source_after_days rule. Server-set, read-only; present only while a
9204
+ * deletion is scheduled (cleared on pin, on setting change, and on delete).
9205
+ *
9206
+ * @generated from field: optional google.protobuf.Timestamp source_scheduled_for_deletion_at = 47;
9207
+ */
9208
+ sourceScheduledForDeletionAt?: Timestamp;
9209
+ /**
9210
+ * When the source file was deleted by the lifecycle rule. Server-set,
9211
+ * read-only. Once set, re-processing falls back to the best rendition.
9212
+ *
9213
+ * @generated from field: optional google.protobuf.Timestamp source_deleted_at = 48;
9214
+ */
9215
+ sourceDeletedAt?: Timestamp;
7594
9216
  /**
7595
9217
  * Resource type discriminator. Always "video" for this message.
7596
9218
  * Lets webhook consumers and polyglot SDKs identify the resource without
@@ -7651,19 +9273,103 @@ declare class VideoRendition extends Message<VideoRendition> {
7651
9273
  */
7652
9274
  height: number;
7653
9275
  /**
7654
- * Encoded file size in bytes.
9276
+ * Encoded file size in bytes.
9277
+ *
9278
+ * @generated from field: int64 size_bytes = 7;
9279
+ */
9280
+ sizeBytes: bigint;
9281
+ constructor(data?: PartialMessage<VideoRendition>);
9282
+ static readonly runtime: typeof proto3;
9283
+ static readonly typeName = "transcodely.v1.VideoRendition";
9284
+ static readonly fields: FieldList;
9285
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VideoRendition;
9286
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VideoRendition;
9287
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VideoRendition;
9288
+ static equals(a: VideoRendition | PlainMessage<VideoRendition> | undefined, b: VideoRendition | PlainMessage<VideoRendition> | undefined): boolean;
9289
+ }
9290
+ /**
9291
+ * A caption/subtitle track attached to a video for playback.
9292
+ *
9293
+ * @generated from message transcodely.v1.VideoTextTrack
9294
+ */
9295
+ declare class VideoTextTrack extends Message<VideoTextTrack> {
9296
+ /**
9297
+ * Unique text track identifier (e.g., "trk_a1b2c3d4e5f6g7").
9298
+ *
9299
+ * @generated from field: string id = 1;
9300
+ */
9301
+ id: string;
9302
+ /**
9303
+ * Track role, as understood by players: "subtitles", "captions", "chapters",
9304
+ * or "descriptions".
9305
+ *
9306
+ * @generated from field: string kind = 2;
9307
+ */
9308
+ kind: string;
9309
+ /**
9310
+ * Language of the track: the ISO 639-2 code that was requested, or the code
9311
+ * detected by speech recognition when the track was generated with "auto".
9312
+ * Empty when the producing job recorded no language.
9313
+ *
9314
+ * @generated from field: string language = 3;
9315
+ */
9316
+ language: string;
9317
+ /**
9318
+ * Human-readable track label shown in the player's caption menu (e.g.
9319
+ * "English"). Empty when none was supplied.
9320
+ *
9321
+ * @generated from field: string label = 4;
9322
+ */
9323
+ label: string;
9324
+ /**
9325
+ * Subtitle file format: "webvtt", "srt", "ttml", or "ass".
9326
+ *
9327
+ * @generated from field: string format = 5;
9328
+ */
9329
+ format: string;
9330
+ /**
9331
+ * Whether the track was produced by speech recognition (a subtitle track with
9332
+ * the "generate" operation) rather than supplied or extracted from the source.
9333
+ *
9334
+ * @generated from field: bool auto_generated = 6;
9335
+ */
9336
+ autoGenerated: boolean;
9337
+ /**
9338
+ * Whether the track is already listed inside the video's HLS/DASH manifest.
9339
+ * When true, players discover it from the manifest during normal playback and
9340
+ * must NOT also attach it as a separate track — doing so lists the language
9341
+ * twice. False for tracks produced by a captions-only job that ran after the
9342
+ * transcode, which are attached as sidecar files instead.
9343
+ *
9344
+ * @generated from field: bool in_manifest = 7;
9345
+ */
9346
+ inManifest: boolean;
9347
+ /**
9348
+ * URL of the caption file. Computed per-request and never stored: on apps with
9349
+ * CDN token auth enabled it is signed and expiring, and it is re-issued on
9350
+ * every read, so clients should use the value from the latest response rather
9351
+ * than caching it. On apps not yet migrated to token auth it is unsigned and
9352
+ * access control comes from the managed-storage bucket policy; unsigned URLs
9353
+ * are never issued for private videos. Absent when no URL may be issued —
9354
+ * same rules as poster_url.
9355
+ *
9356
+ * @generated from field: optional string url = 8;
9357
+ */
9358
+ url?: string;
9359
+ /**
9360
+ * When the track was attached to the video.
7655
9361
  *
7656
- * @generated from field: int64 size_bytes = 7;
9362
+ * @generated from field: google.protobuf.Timestamp created_at = 9;
7657
9363
  */
7658
- sizeBytes: bigint;
7659
- constructor(data?: PartialMessage<VideoRendition>);
9364
+ createdAt?: Timestamp;
9365
+ constructor(data?: PartialMessage<VideoTextTrack>);
7660
9366
  static readonly runtime: typeof proto3;
7661
- static readonly typeName = "transcodely.v1.VideoRendition";
9367
+ static readonly typeName = "transcodely.v1.VideoTextTrack";
7662
9368
  static readonly fields: FieldList;
7663
- static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VideoRendition;
7664
- static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VideoRendition;
7665
- static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VideoRendition;
7666
- static equals(a: VideoRendition | PlainMessage<VideoRendition> | undefined, b: VideoRendition | PlainMessage<VideoRendition> | undefined): boolean;
9369
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VideoTextTrack;
9370
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VideoTextTrack;
9371
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VideoTextTrack;
9372
+ static equals(a: VideoTextTrack | PlainMessage<VideoTextTrack> | undefined, b: VideoTextTrack | PlainMessage<VideoTextTrack> | undefined): boolean;
7667
9373
  }
7668
9374
  /**
7669
9375
  * Request to create a presigned upload URL for direct client upload.
@@ -7672,7 +9378,8 @@ declare class VideoRendition extends Message<VideoRendition> {
7672
9378
  */
7673
9379
  declare class CreateUploadRequest extends Message<CreateUploadRequest> {
7674
9380
  /**
7675
- * App to create the video under. Required — must have hosting enabled.
9381
+ * App to create the video under. Required. The app must have managed hosting
9382
+ * enabled (AppService.EnableHosting) or the call fails with FailedPrecondition.
7676
9383
  *
7677
9384
  * @generated from field: string app_id = 8;
7678
9385
  */
@@ -7714,7 +9421,7 @@ declare class CreateUploadRequest extends Message<CreateUploadRequest> {
7714
9421
  */
7715
9422
  tags: string[];
7716
9423
  /**
7717
- * Visibility setting. Defaults to "private" if not specified.
9424
+ * Visibility setting. Defaults to "unlisted" if not specified.
7718
9425
  *
7719
9426
  * @generated from field: optional string visibility = 7;
7720
9427
  */
@@ -7729,6 +9436,15 @@ declare class CreateUploadRequest extends Message<CreateUploadRequest> {
7729
9436
  * @generated from field: optional string preset = 9;
7730
9437
  */
7731
9438
  preset?: string;
9439
+ /**
9440
+ * When true, attach an animated hover-preview (mode=animated, worker smart
9441
+ * defaults: ~4 s, 12 fps, 320 px) to the managed transcode, in addition to the
9442
+ * poster. Free — animated previews add no cost. The produced WebP/MP4 loop
9443
+ * surface as Video.hover_preview_url / hover_preview_mp4_url once ready.
9444
+ *
9445
+ * @generated from field: bool hover_previews = 10;
9446
+ */
9447
+ hoverPreviews: boolean;
7732
9448
  constructor(data?: PartialMessage<CreateUploadRequest>);
7733
9449
  static readonly runtime: typeof proto3;
7734
9450
  static readonly typeName = "transcodely.v1.CreateUploadRequest";
@@ -7813,6 +9529,102 @@ declare class CompleteUploadResponse extends Message<CompleteUploadResponse> {
7813
9529
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CompleteUploadResponse;
7814
9530
  static equals(a: CompleteUploadResponse | PlainMessage<CompleteUploadResponse> | undefined, b: CompleteUploadResponse | PlainMessage<CompleteUploadResponse> | undefined): boolean;
7815
9531
  }
9532
+ /**
9533
+ * Request to create a hosted video from a remote URL (one-call ingest).
9534
+ *
9535
+ * @generated from message transcodely.v1.CreateFromUrlRequest
9536
+ */
9537
+ declare class CreateFromUrlRequest extends Message<CreateFromUrlRequest> {
9538
+ /**
9539
+ * App to create the video under. Required. The app must have managed hosting
9540
+ * enabled (AppService.EnableHosting) or the call fails with FailedPrecondition.
9541
+ *
9542
+ * @generated from field: string app_id = 1;
9543
+ */
9544
+ appId: string;
9545
+ /**
9546
+ * Publicly-reachable source URL to ingest. Must be http:// or https:// —
9547
+ * storage-origin schemes (gs://, s3://) are not accepted here; use an origin
9548
+ * and JobService.Create for those. The URL is fetched by the worker at
9549
+ * transcode time (the API never fetches it); private/internal addresses are
9550
+ * rejected up front and again, authoritatively, at fetch time (SSRF defense).
9551
+ *
9552
+ * @generated from field: string url = 2;
9553
+ */
9554
+ url: string;
9555
+ /**
9556
+ * Optional title for the video.
9557
+ *
9558
+ * @generated from field: optional string title = 3;
9559
+ */
9560
+ title?: string;
9561
+ /**
9562
+ * Optional description.
9563
+ *
9564
+ * @generated from field: optional string description = 4;
9565
+ */
9566
+ description?: string;
9567
+ /**
9568
+ * Optional tags for categorization (max 20).
9569
+ *
9570
+ * @generated from field: repeated string tags = 5;
9571
+ */
9572
+ tags: string[];
9573
+ /**
9574
+ * Visibility setting. Defaults to "unlisted" if not specified.
9575
+ *
9576
+ * @generated from field: optional string visibility = 6;
9577
+ */
9578
+ visibility?: string;
9579
+ /**
9580
+ * Optional preset reference for the auto-transcode job.
9581
+ * Accepts either a preset ID (e.g., "pst_abc123") or slug (e.g., "gaming_1080p_60_standard").
9582
+ * When provided, the preset's settings drive the encoding instead of the
9583
+ * app's default auto-profile ABR ladder.
9584
+ *
9585
+ * @generated from field: optional string preset = 7;
9586
+ */
9587
+ preset?: string;
9588
+ /**
9589
+ * When true, attach an animated hover-preview (mode=animated, worker smart
9590
+ * defaults) to the managed transcode, in addition to the poster. Free. The
9591
+ * produced loop surfaces as Video.hover_preview_url / hover_preview_mp4_url.
9592
+ *
9593
+ * @generated from field: bool hover_previews = 8;
9594
+ */
9595
+ hoverPreviews: boolean;
9596
+ constructor(data?: PartialMessage<CreateFromUrlRequest>);
9597
+ static readonly runtime: typeof proto3;
9598
+ static readonly typeName = "transcodely.v1.CreateFromUrlRequest";
9599
+ static readonly fields: FieldList;
9600
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CreateFromUrlRequest;
9601
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CreateFromUrlRequest;
9602
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CreateFromUrlRequest;
9603
+ static equals(a: CreateFromUrlRequest | PlainMessage<CreateFromUrlRequest> | undefined, b: CreateFromUrlRequest | PlainMessage<CreateFromUrlRequest> | undefined): boolean;
9604
+ }
9605
+ /**
9606
+ * Response from creating a video from a URL.
9607
+ *
9608
+ * @generated from message transcodely.v1.CreateFromUrlResponse
9609
+ */
9610
+ declare class CreateFromUrlResponse extends Message<CreateFromUrlResponse> {
9611
+ /**
9612
+ * The created video (status: "processing"). No video.uploaded event fires for
9613
+ * URL ingest (no bytes are uploaded); the job lifecycle plus video.ready /
9614
+ * video.failed cover the outcome.
9615
+ *
9616
+ * @generated from field: transcodely.v1.Video video = 1;
9617
+ */
9618
+ video?: Video;
9619
+ constructor(data?: PartialMessage<CreateFromUrlResponse>);
9620
+ static readonly runtime: typeof proto3;
9621
+ static readonly typeName = "transcodely.v1.CreateFromUrlResponse";
9622
+ static readonly fields: FieldList;
9623
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CreateFromUrlResponse;
9624
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CreateFromUrlResponse;
9625
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CreateFromUrlResponse;
9626
+ static equals(a: CreateFromUrlResponse | PlainMessage<CreateFromUrlResponse> | undefined, b: CreateFromUrlResponse | PlainMessage<CreateFromUrlResponse> | undefined): boolean;
9627
+ }
7816
9628
  /**
7817
9629
  * A single part in a multipart upload with its presigned URL.
7818
9630
  *
@@ -7874,7 +9686,8 @@ declare class CompletedPart extends Message<CompletedPart> {
7874
9686
  */
7875
9687
  declare class CreateMultipartUploadRequest extends Message<CreateMultipartUploadRequest> {
7876
9688
  /**
7877
- * App to create the video under. Required — must have hosting enabled.
9689
+ * App to create the video under. Required. The app must have managed hosting
9690
+ * enabled (AppService.EnableHosting) or the call fails with FailedPrecondition.
7878
9691
  *
7879
9692
  * @generated from field: string app_id = 1;
7880
9693
  */
@@ -7941,6 +9754,14 @@ declare class CreateMultipartUploadRequest extends Message<CreateMultipartUpload
7941
9754
  * @generated from field: optional string preset = 14;
7942
9755
  */
7943
9756
  preset?: string;
9757
+ /**
9758
+ * When true, attach an animated hover-preview (mode=animated, worker smart
9759
+ * defaults) to the managed transcode, in addition to the poster. Free. The
9760
+ * produced loop surfaces as Video.hover_preview_url / hover_preview_mp4_url.
9761
+ *
9762
+ * @generated from field: bool hover_previews = 15;
9763
+ */
9764
+ hoverPreviews: boolean;
7944
9765
  constructor(data?: PartialMessage<CreateMultipartUploadRequest>);
7945
9766
  static readonly runtime: typeof proto3;
7946
9767
  static readonly typeName = "transcodely.v1.CreateMultipartUploadRequest";
@@ -8288,7 +10109,9 @@ declare class UpdateVideoRequest extends Message<UpdateVideoRequest> {
8288
10109
  */
8289
10110
  description?: string;
8290
10111
  /**
8291
- * Updated tags (replaces existing tags).
10112
+ * Updated tags (replaces existing tags). Because proto3 repeated fields carry
10113
+ * no presence, an empty list is indistinguishable from "unset" on the wire
10114
+ * and leaves existing tags unchanged. To remove all tags, set clear_tags.
8292
10115
  *
8293
10116
  * @generated from field: repeated string tags = 4;
8294
10117
  */
@@ -8299,6 +10122,21 @@ declare class UpdateVideoRequest extends Message<UpdateVideoRequest> {
8299
10122
  * @generated from field: optional string visibility = 5;
8300
10123
  */
8301
10124
  visibility?: string;
10125
+ /**
10126
+ * Set to true to remove all tags. Mutually exclusive with tags.
10127
+ *
10128
+ * @generated from field: optional bool clear_tags = 6;
10129
+ */
10130
+ clearTags?: boolean;
10131
+ /**
10132
+ * Pin or unpin this video's source file against the app's
10133
+ * delete_source_after_days lifecycle rule. Pinning also immediately clears any
10134
+ * pending deletion schedule. Unpinning does NOT reschedule — the sweeper
10135
+ * re-evaluates later with a fresh warning webhook.
10136
+ *
10137
+ * @generated from field: optional bool source_pinned = 7;
10138
+ */
10139
+ sourcePinned?: boolean;
8302
10140
  constructor(data?: PartialMessage<UpdateVideoRequest>);
8303
10141
  static readonly runtime: typeof proto3;
8304
10142
  static readonly typeName = "transcodely.v1.UpdateVideoRequest";
@@ -8508,6 +10346,19 @@ declare class UsageSummary extends Message<UsageSummary> {
8508
10346
  * @generated from field: string currency = 31;
8509
10347
  */
8510
10348
  currency: string;
10349
+ /**
10350
+ * Per-day usage breakdown for the billing period identified by
10351
+ * billing_month, oldest day first. With a billing anchor day other than 1,
10352
+ * the period spans into the following calendar month, so dates are not
10353
+ * limited to the named month. Only days with recorded activity are present
10354
+ * (no zero-fill): a day is omitted when it had no storage snapshot, no
10355
+ * egress, and no video encoded. Powers the dashboard's usage-trend charts.
10356
+ * Populated for both app-scoped and org-scoped (aggregated across the
10357
+ * org's apps) calls.
10358
+ *
10359
+ * @generated from field: repeated transcodely.v1.DailyUsage daily = 40;
10360
+ */
10361
+ daily: DailyUsage[];
8511
10362
  constructor(data?: PartialMessage<UsageSummary>);
8512
10363
  static readonly runtime: typeof proto3;
8513
10364
  static readonly typeName = "transcodely.v1.UsageSummary";
@@ -8517,6 +10368,311 @@ declare class UsageSummary extends Message<UsageSummary> {
8517
10368
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UsageSummary;
8518
10369
  static equals(a: UsageSummary | PlainMessage<UsageSummary> | undefined, b: UsageSummary | PlainMessage<UsageSummary> | undefined): boolean;
8519
10370
  }
10371
+ /**
10372
+ * One calendar day's slice of usage within a billing period (see
10373
+ * UsageSummary.daily for period semantics). All monetary fields are in the
10374
+ * parent UsageSummary's `currency`.
10375
+ *
10376
+ * @generated from message transcodely.v1.DailyUsage
10377
+ */
10378
+ declare class DailyUsage extends Message<DailyUsage> {
10379
+ /**
10380
+ * Calendar day in YYYY-MM-DD format (UTC).
10381
+ *
10382
+ * @generated from field: string date = 1;
10383
+ */
10384
+ date: string;
10385
+ /**
10386
+ * Total stored bytes as of this day's snapshot. Point-in-time (the day's
10387
+ * recorded storage level), not an increment over the prior day. Zero when
10388
+ * no snapshot was taken that day.
10389
+ *
10390
+ * @generated from field: int64 storage_bytes = 2;
10391
+ */
10392
+ storageBytes: bigint;
10393
+ /**
10394
+ * Bytes egressed during this day (sum of the day's hourly egress records).
10395
+ *
10396
+ * @generated from field: int64 egress_bytes = 3;
10397
+ */
10398
+ egressBytes: bigint;
10399
+ /**
10400
+ * CDN requests served during this day (sum of the day's hourly records).
10401
+ *
10402
+ * @generated from field: int64 request_count = 4;
10403
+ */
10404
+ requestCount: bigint;
10405
+ /**
10406
+ * Encoding cost for videos created on this day, derived from the linked
10407
+ * transcoding jobs' actual cost. Zero when no billable video was created.
10408
+ *
10409
+ * @generated from field: double encoding_cost = 5;
10410
+ */
10411
+ encodingCost: number;
10412
+ constructor(data?: PartialMessage<DailyUsage>);
10413
+ static readonly runtime: typeof proto3;
10414
+ static readonly typeName = "transcodely.v1.DailyUsage";
10415
+ static readonly fields: FieldList;
10416
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DailyUsage;
10417
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DailyUsage;
10418
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DailyUsage;
10419
+ static equals(a: DailyUsage | PlainMessage<DailyUsage> | undefined, b: DailyUsage | PlainMessage<DailyUsage> | undefined): boolean;
10420
+ }
10421
+ /**
10422
+ * Request for a single video's playback stats.
10423
+ *
10424
+ * @generated from message transcodely.v1.GetStatsRequest
10425
+ */
10426
+ declare class GetStatsRequest extends Message<GetStatsRequest> {
10427
+ /**
10428
+ * Video ID to fetch stats for.
10429
+ *
10430
+ * @generated from field: string video_id = 1;
10431
+ */
10432
+ videoId: string;
10433
+ /**
10434
+ * Optional inclusive start of the UTC date range, YYYY-MM-DD (e.g.
10435
+ * "2026-07-01"). Omitted means unbounded (all retained history).
10436
+ *
10437
+ * @generated from field: optional string start_date = 2;
10438
+ */
10439
+ startDate?: string;
10440
+ /**
10441
+ * Optional inclusive end of the UTC date range, YYYY-MM-DD. Omitted means
10442
+ * unbounded (up to today).
10443
+ *
10444
+ * @generated from field: optional string end_date = 3;
10445
+ */
10446
+ endDate?: string;
10447
+ constructor(data?: PartialMessage<GetStatsRequest>);
10448
+ static readonly runtime: typeof proto3;
10449
+ static readonly typeName = "transcodely.v1.GetStatsRequest";
10450
+ static readonly fields: FieldList;
10451
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetStatsRequest;
10452
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetStatsRequest;
10453
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetStatsRequest;
10454
+ static equals(a: GetStatsRequest | PlainMessage<GetStatsRequest> | undefined, b: GetStatsRequest | PlainMessage<GetStatsRequest> | undefined): boolean;
10455
+ }
10456
+ /**
10457
+ * Response with a video's daily playback stats and range totals.
10458
+ *
10459
+ * @generated from message transcodely.v1.GetStatsResponse
10460
+ */
10461
+ declare class GetStatsResponse extends Message<GetStatsResponse> {
10462
+ /**
10463
+ * Per-day rows within the requested range, oldest day first. Only days with
10464
+ * recorded activity are present (no zero-fill).
10465
+ *
10466
+ * @generated from field: repeated transcodely.v1.VideoStatsDay daily = 1;
10467
+ */
10468
+ daily: VideoStatsDay[];
10469
+ /**
10470
+ * Totals across the returned days.
10471
+ *
10472
+ * @generated from field: transcodely.v1.VideoStatsTotals totals = 2;
10473
+ */
10474
+ totals?: VideoStatsTotals;
10475
+ constructor(data?: PartialMessage<GetStatsResponse>);
10476
+ static readonly runtime: typeof proto3;
10477
+ static readonly typeName = "transcodely.v1.GetStatsResponse";
10478
+ static readonly fields: FieldList;
10479
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetStatsResponse;
10480
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetStatsResponse;
10481
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetStatsResponse;
10482
+ static equals(a: GetStatsResponse | PlainMessage<GetStatsResponse> | undefined, b: GetStatsResponse | PlainMessage<GetStatsResponse> | undefined): boolean;
10483
+ }
10484
+ /**
10485
+ * One UTC day of playback stats for a video.
10486
+ *
10487
+ * @generated from message transcodely.v1.VideoStatsDay
10488
+ */
10489
+ declare class VideoStatsDay extends Message<VideoStatsDay> {
10490
+ /**
10491
+ * Calendar day in YYYY-MM-DD format (UTC).
10492
+ *
10493
+ * @generated from field: string date = 1;
10494
+ */
10495
+ date: string;
10496
+ /**
10497
+ * Number of playback starts (one 'play' beacon per pageview that began
10498
+ * playing).
10499
+ *
10500
+ * @generated from field: int32 plays = 2;
10501
+ */
10502
+ plays: number;
10503
+ /**
10504
+ * Approximate watch time in seconds. Derived from playback heartbeats
10505
+ * (heartbeat count × the ~10s heartbeat interval), not exact wall-clock
10506
+ * time — a partial final interval still counts as a whole one.
10507
+ *
10508
+ * @generated from field: int64 watch_seconds = 3;
10509
+ */
10510
+ watchSeconds: bigint;
10511
+ /**
10512
+ * Distinct viewers, counted by an anonymous per-pageview session id (no PII).
10513
+ *
10514
+ * @generated from field: int32 unique_viewers = 4;
10515
+ */
10516
+ uniqueViewers: number;
10517
+ constructor(data?: PartialMessage<VideoStatsDay>);
10518
+ static readonly runtime: typeof proto3;
10519
+ static readonly typeName = "transcodely.v1.VideoStatsDay";
10520
+ static readonly fields: FieldList;
10521
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VideoStatsDay;
10522
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VideoStatsDay;
10523
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VideoStatsDay;
10524
+ static equals(a: VideoStatsDay | PlainMessage<VideoStatsDay> | undefined, b: VideoStatsDay | PlainMessage<VideoStatsDay> | undefined): boolean;
10525
+ }
10526
+ /**
10527
+ * Aggregated playback totals over a date range.
10528
+ *
10529
+ * @generated from message transcodely.v1.VideoStatsTotals
10530
+ */
10531
+ declare class VideoStatsTotals extends Message<VideoStatsTotals> {
10532
+ /**
10533
+ * Sum of daily plays.
10534
+ *
10535
+ * @generated from field: int32 plays = 1;
10536
+ */
10537
+ plays: number;
10538
+ /**
10539
+ * Sum of daily approximate watch seconds.
10540
+ *
10541
+ * @generated from field: int64 watch_seconds = 2;
10542
+ */
10543
+ watchSeconds: bigint;
10544
+ /**
10545
+ * Sum of per-day unique viewers. A viewer active on N distinct days counts N
10546
+ * times (it is not de-duplicated across days); for a single-day range it is
10547
+ * exact.
10548
+ *
10549
+ * @generated from field: int32 unique_viewers = 3;
10550
+ */
10551
+ uniqueViewers: number;
10552
+ constructor(data?: PartialMessage<VideoStatsTotals>);
10553
+ static readonly runtime: typeof proto3;
10554
+ static readonly typeName = "transcodely.v1.VideoStatsTotals";
10555
+ static readonly fields: FieldList;
10556
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VideoStatsTotals;
10557
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VideoStatsTotals;
10558
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VideoStatsTotals;
10559
+ static equals(a: VideoStatsTotals | PlainMessage<VideoStatsTotals> | undefined, b: VideoStatsTotals | PlainMessage<VideoStatsTotals> | undefined): boolean;
10560
+ }
10561
+ /**
10562
+ * Request for an app's top videos by plays.
10563
+ *
10564
+ * @generated from message transcodely.v1.ListTopVideosRequest
10565
+ */
10566
+ declare class ListTopVideosRequest extends Message<ListTopVideosRequest> {
10567
+ /**
10568
+ * Optional app filter. API-key callers may omit it (their key's app is used)
10569
+ * or pass their own app; a different app is rejected with PermissionDenied.
10570
+ * Portal/JWT callers pass the app to scope the leaderboard; omitted resolves
10571
+ * to the org's first app.
10572
+ *
10573
+ * @generated from field: optional string app_id = 1;
10574
+ */
10575
+ appId?: string;
10576
+ /**
10577
+ * Optional inclusive UTC date range bounds, YYYY-MM-DD. Omitted means
10578
+ * unbounded on that side.
10579
+ *
10580
+ * @generated from field: optional string start_date = 2;
10581
+ */
10582
+ startDate?: string;
10583
+ /**
10584
+ * @generated from field: optional string end_date = 3;
10585
+ */
10586
+ endDate?: string;
10587
+ /**
10588
+ * Maximum number of videos to return (1-100). Defaults to 10.
10589
+ *
10590
+ * @generated from field: optional int32 limit = 4;
10591
+ */
10592
+ limit?: number;
10593
+ constructor(data?: PartialMessage<ListTopVideosRequest>);
10594
+ static readonly runtime: typeof proto3;
10595
+ static readonly typeName = "transcodely.v1.ListTopVideosRequest";
10596
+ static readonly fields: FieldList;
10597
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListTopVideosRequest;
10598
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListTopVideosRequest;
10599
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListTopVideosRequest;
10600
+ static equals(a: ListTopVideosRequest | PlainMessage<ListTopVideosRequest> | undefined, b: ListTopVideosRequest | PlainMessage<ListTopVideosRequest> | undefined): boolean;
10601
+ }
10602
+ /**
10603
+ * Response with an app's ranked videos.
10604
+ *
10605
+ * @generated from message transcodely.v1.ListTopVideosResponse
10606
+ */
10607
+ declare class ListTopVideosResponse extends Message<ListTopVideosResponse> {
10608
+ /**
10609
+ * Videos ordered by plays (then watch time) descending.
10610
+ *
10611
+ * @generated from field: repeated transcodely.v1.TopVideo items = 1;
10612
+ */
10613
+ items: TopVideo[];
10614
+ constructor(data?: PartialMessage<ListTopVideosResponse>);
10615
+ static readonly runtime: typeof proto3;
10616
+ static readonly typeName = "transcodely.v1.ListTopVideosResponse";
10617
+ static readonly fields: FieldList;
10618
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListTopVideosResponse;
10619
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListTopVideosResponse;
10620
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListTopVideosResponse;
10621
+ static equals(a: ListTopVideosResponse | PlainMessage<ListTopVideosResponse> | undefined, b: ListTopVideosResponse | PlainMessage<ListTopVideosResponse> | undefined): boolean;
10622
+ }
10623
+ /**
10624
+ * A single ranked video with its playback totals over the requested range.
10625
+ *
10626
+ * @generated from message transcodely.v1.TopVideo
10627
+ */
10628
+ declare class TopVideo extends Message<TopVideo> {
10629
+ /**
10630
+ * Video ID.
10631
+ *
10632
+ * @generated from field: string video_id = 1;
10633
+ */
10634
+ videoId: string;
10635
+ /**
10636
+ * Video title, if set.
10637
+ *
10638
+ * @generated from field: optional string title = 2;
10639
+ */
10640
+ title?: string;
10641
+ /**
10642
+ * Poster image URL, computed from the app's CDN config. Absent when no CDN
10643
+ * is configured or the video has no poster.
10644
+ *
10645
+ * @generated from field: optional string poster_url = 3;
10646
+ */
10647
+ posterUrl?: string;
10648
+ /**
10649
+ * Total plays over the range.
10650
+ *
10651
+ * @generated from field: int64 plays = 4;
10652
+ */
10653
+ plays: bigint;
10654
+ /**
10655
+ * Total approximate watch seconds over the range.
10656
+ *
10657
+ * @generated from field: int64 watch_seconds = 5;
10658
+ */
10659
+ watchSeconds: bigint;
10660
+ /**
10661
+ * Unique viewers over the range, summed per day (a viewer active on N days
10662
+ * counts N times; exact for a single-day range). See VideoStatsTotals.
10663
+ *
10664
+ * @generated from field: int64 unique_viewers = 6;
10665
+ */
10666
+ uniqueViewers: bigint;
10667
+ constructor(data?: PartialMessage<TopVideo>);
10668
+ static readonly runtime: typeof proto3;
10669
+ static readonly typeName = "transcodely.v1.TopVideo";
10670
+ static readonly fields: FieldList;
10671
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TopVideo;
10672
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TopVideo;
10673
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TopVideo;
10674
+ static equals(a: TopVideo | PlainMessage<TopVideo> | undefined, b: TopVideo | PlainMessage<TopVideo> | undefined): boolean;
10675
+ }
8520
10676
 
8521
10677
  /**
8522
10678
  * Public types for the webhook surface — the discriminated union customers
@@ -8548,12 +10704,18 @@ interface EventBase {
8548
10704
  };
8549
10705
  }
8550
10706
  /**
8551
- * Every event the platform may emit, discriminated by `type`. The final
8552
- * `string` arm is intentional forward-compat: an older SDK receiving a
8553
- * `type` the API has since added still parses; `data` is left as the raw
8554
- * decoded JSON object and customers should handle it in a `default:` arm.
10707
+ * Every event this SDK version knows, discriminated by `type`. Each arm's
10708
+ * `data` is a decoded resource, so once an event is narrowed to this union —
10709
+ * via {@link isKnownEvent} (then a `switch`) or {@link isEventType} — reading
10710
+ * `event.data` yields the exact resource type.
10711
+ *
10712
+ * Kept free of any `string` catch-all arm on purpose: a `type: string` member
10713
+ * is a supertype of every literal, so TypeScript keeps it live in every
10714
+ * `case`, collapsing `data` back to `unknown` and defeating narrowing (the
10715
+ * bug in transcodely-js#34). Forward-compat lives in the sibling
10716
+ * {@link UnknownWebhookEvent} instead.
8555
10717
  */
8556
- type WebhookEvent = (EventBase & {
10718
+ type KnownWebhookEvent = (EventBase & {
8557
10719
  type: "job.created";
8558
10720
  data: Job;
8559
10721
  }) | (EventBase & {
@@ -8583,9 +10745,18 @@ type WebhookEvent = (EventBase & {
8583
10745
  }) | (EventBase & {
8584
10746
  type: "video.uploaded";
8585
10747
  data: Video;
10748
+ }) | (EventBase & {
10749
+ type: "video.ready";
10750
+ data: Video;
10751
+ }) | (EventBase & {
10752
+ type: "video.failed";
10753
+ data: Video;
8586
10754
  }) | (EventBase & {
8587
10755
  type: "video.deleted";
8588
10756
  data: Video;
10757
+ }) | (EventBase & {
10758
+ type: "video.source_scheduled_for_deletion";
10759
+ data: Video;
8589
10760
  }) | (EventBase & {
8590
10761
  type: "app.created";
8591
10762
  data: App;
@@ -8593,11 +10764,60 @@ type WebhookEvent = (EventBase & {
8593
10764
  type: "app.updated";
8594
10765
  data: App;
8595
10766
  }) | (EventBase & {
10767
+ type: "app.spend_limit_warning";
10768
+ data: SpendLimitNotification;
10769
+ }) | (EventBase & {
10770
+ type: "app.spend_limit_exceeded";
10771
+ data: SpendLimitNotification;
10772
+ });
10773
+ /**
10774
+ * Forward-compat arm: an event whose `type` this SDK version does not know
10775
+ * because the API added it after this release. The envelope still verifies
10776
+ * and parses; `data` is the raw decoded JSON object, left as `unknown` for the
10777
+ * consumer to inspect. Handle it in the `else` branch of {@link isKnownEvent}
10778
+ * or the `default:` of a `switch`.
10779
+ */
10780
+ interface UnknownWebhookEvent extends EventBase {
8596
10781
  type: string;
8597
10782
  data: unknown;
8598
- });
10783
+ }
8599
10784
  /**
8600
- * The 13 concrete webhook event types the API can emit. Mirrors the source of
10785
+ * A verified, decoded webhook event: the closed, precisely-typed
10786
+ * {@link KnownWebhookEvent} union plus the open {@link UnknownWebhookEvent}
10787
+ * forward-compat arm.
10788
+ *
10789
+ * This is a structural superset of `KnownWebhookEvent` — every known arm is
10790
+ * still assignable to `WebhookEvent`, and `WebhookEvent["type"]` is still
10791
+ * `string` — so code written against the previous single-union shape keeps
10792
+ * compiling. To *narrow* by `type`, first funnel through {@link isKnownEvent}
10793
+ * or {@link isEventType}; a bare `switch (event.type)` on the open union
10794
+ * cannot narrow (see {@link KnownWebhookEvent}).
10795
+ */
10796
+ type WebhookEvent = KnownWebhookEvent | UnknownWebhookEvent;
10797
+ /**
10798
+ * Payload of the `app.spend_limit_warning` and `app.spend_limit_exceeded`
10799
+ * events. Unlike the resource-carrying events, these carry a small notification
10800
+ * object (snake_case, as delivered on the wire) rather than a resource snapshot,
10801
+ * so `data` is the raw parsed JSON — it is not run through the resource codec.
10802
+ */
10803
+ interface SpendLimitNotification {
10804
+ /** The app the spend limit belongs to (`app_*`). */
10805
+ app_id: string;
10806
+ /** Inclusive start of the billing period, an RFC 3339 full-date in UTC (e.g. `"2026-01-01"`). */
10807
+ period_start: string;
10808
+ /** Exclusive end of the billing period, an RFC 3339 full-date in UTC (e.g. `"2026-02-01"`). */
10809
+ period_end: string;
10810
+ /** The app's monthly spend limit in EUR. */
10811
+ limit_eur: number;
10812
+ /** Recorded spend for the period in EUR at the time the event fired. */
10813
+ spent_eur: number;
10814
+ /** Threshold crossed: `80` for the warning event, `100` for the breach event. */
10815
+ threshold_pct: 80 | 100;
10816
+ /** Currency of the amounts in this payload. Always `"EUR"`. */
10817
+ currency: "EUR";
10818
+ }
10819
+ /**
10820
+ * The 18 concrete webhook event types the API can emit. Mirrors the source of
8601
10821
  * truth in `domain.WebhookEventTypes()` (api/internal/domain/webhook.go). The
8602
10822
  * `"*"` wildcard is a subscription-only value and is intentionally absent.
8603
10823
  *
@@ -8605,9 +10825,45 @@ type WebhookEvent = (EventBase & {
8605
10825
  * catalog-drift regression test can compare this set against the discriminated
8606
10826
  * union literals above.
8607
10827
  */
8608
- declare const WEBHOOK_EVENT_TYPES: readonly ["job.created", "job.succeeded", "job.failed", "job.canceled", "job.progress", "output.created", "output.ready", "output.failed", "output.progress", "video.uploaded", "video.deleted", "app.created", "app.updated"];
10828
+ declare const WEBHOOK_EVENT_TYPES: readonly ["job.created", "job.succeeded", "job.failed", "job.canceled", "job.progress", "output.created", "output.ready", "output.failed", "output.progress", "video.uploaded", "video.ready", "video.failed", "video.deleted", "video.source_scheduled_for_deletion", "app.created", "app.updated", "app.spend_limit_warning", "app.spend_limit_exceeded"];
8609
10829
  /** A concrete event type the API can emit (excludes the `"*"` wildcard). */
8610
10830
  type WebhookEventType = (typeof WEBHOOK_EVENT_TYPES)[number];
10831
+ /**
10832
+ * Narrow an event to the closed {@link KnownWebhookEvent} union, which this
10833
+ * SDK version types precisely. Gate a `switch (event.type)` on it so each
10834
+ * `case` narrows `event.data` to the right resource (with exhaustiveness
10835
+ * checking); the `else` branch keeps {@link UnknownWebhookEvent} — a raw
10836
+ * `data: unknown` — so events added to the API after this SDK release still
10837
+ * flow through untyped rather than being dropped.
10838
+ *
10839
+ * @example
10840
+ * ```ts
10841
+ * if (Webhooks.isKnownEvent(event)) {
10842
+ * switch (event.type) {
10843
+ * case "job.succeeded":
10844
+ * console.log(event.data.id); // event.data is a fully-typed Job
10845
+ * break;
10846
+ * }
10847
+ * } else {
10848
+ * console.log("unhandled future event", event.type);
10849
+ * }
10850
+ * ```
10851
+ */
10852
+ declare function isKnownEvent(event: WebhookEvent): event is KnownWebhookEvent;
10853
+ /**
10854
+ * Narrow an event to a single known type. Convenient for a receiver that only
10855
+ * cares about one or two events and would rather not `switch`.
10856
+ *
10857
+ * @example
10858
+ * ```ts
10859
+ * if (Webhooks.isEventType(event, "output.ready")) {
10860
+ * console.log(event.data.outputUrl); // event.data is a fully-typed JobOutput
10861
+ * }
10862
+ * ```
10863
+ */
10864
+ declare function isEventType<T extends WebhookEventType>(event: WebhookEvent, type: T): event is Extract<KnownWebhookEvent, {
10865
+ type: T;
10866
+ }>;
8611
10867
 
8612
10868
  /**
8613
10869
  * Query and replay events. Each event the SDK hands back is the same
@@ -10883,6 +13139,11 @@ declare class Videos {
10883
13139
  constructor(transport: Transport);
10884
13140
  createUpload(req: PartialMessage<CreateUploadRequest>, opts?: CallOptions): Promise<CreateUploadResponse>;
10885
13141
  completeUpload(req: PartialMessage<CompleteUploadRequest>, opts?: CallOptions): Promise<CompleteUploadResponse>;
13142
+ /** Create a hosted video from a publicly-reachable http(s) URL in one call —
13143
+ * no separate upload step. Returns the video in "processing" status; the
13144
+ * app must have managed hosting enabled. Playback/embed URLs populate once
13145
+ * the video reaches "ready" (subscribe to `video.ready` or `watch`). */
13146
+ createFromUrl(req: PartialMessage<CreateFromUrlRequest>, opts?: CallOptions): Promise<Video>;
10886
13147
  createMultipartUpload(req: PartialMessage<CreateMultipartUploadRequest>, opts?: CallOptions): Promise<CreateMultipartUploadResponse>;
10887
13148
  getUploadPartUrls(req: PartialMessage<GetUploadPartUrlsRequest>, opts?: CallOptions): Promise<GetUploadPartUrlsResponse>;
10888
13149
  completeMultipartUpload(req: PartialMessage<CompleteMultipartUploadRequest>, opts?: CallOptions): Promise<CompleteMultipartUploadResponse>;
@@ -10897,6 +13158,14 @@ declare class Videos {
10897
13158
  includeHeartbeats?: boolean;
10898
13159
  }): AsyncIterable<WatchVideoResponse>;
10899
13160
  getUsage(req?: PartialMessage<GetUsageRequest>, opts?: CallOptions): Promise<GetUsageResponse>;
13161
+ /** Get playback analytics for a single video: plays, watch time, and unique
13162
+ * viewers aggregated per UTC day, plus range totals. Stats come from a
13163
+ * best-effort playback beacon rolled up hourly, so recent activity may lag by
13164
+ * up to an hour. Returns the full response (`daily` rows + `totals`). */
13165
+ getStats(req: PartialMessage<GetStatsRequest>, opts?: CallOptions): Promise<GetStatsResponse>;
13166
+ /** List an app's top videos ranked by plays over a date range. Returns the
13167
+ * full response (`items`). */
13168
+ listTopVideos(req?: PartialMessage<ListTopVideosRequest>, opts?: CallOptions): Promise<ListTopVideosResponse>;
10900
13169
  }
10901
13170
 
10902
13171
  /**
@@ -10985,6 +13254,8 @@ declare function constructEvent(rawBody: string | Uint8Array | Buffer, sigHeader
10985
13254
 
10986
13255
  declare const Webhooks: {
10987
13256
  readonly constructEvent: typeof constructEvent;
13257
+ readonly isKnownEvent: typeof isKnownEvent;
13258
+ readonly isEventType: typeof isEventType;
10988
13259
  readonly WebhookError: typeof WebhookError;
10989
13260
  readonly WebhookSignatureError: typeof WebhookSignatureError;
10990
13261
  readonly WebhookTimestampError: typeof WebhookTimestampError;
@@ -11015,6 +13286,7 @@ declare class Transcodely {
11015
13286
  private _health;
11016
13287
  private _webhookEndpoints;
11017
13288
  private _events;
13289
+ private _billing;
11018
13290
  constructor(config: TranscodelyConfig);
11019
13291
  /** ID of the most recent successful or failed request, Stripe-style. */
11020
13292
  get lastRequestId(): string | undefined;
@@ -11030,6 +13302,11 @@ declare class Transcodely {
11030
13302
  get health(): Health;
11031
13303
  get webhookEndpoints(): WebhookEndpoints;
11032
13304
  get events(): Events;
13305
+ /**
13306
+ * The organization's invoices. Needs a dashboard session token for an org
13307
+ * owner plus `organizationId` in the client config; API keys are rejected.
13308
+ */
13309
+ get billing(): Billing;
11033
13310
  /**
11034
13311
  * Stateless verify-and-decode helper. `client.webhooks.constructEvent(...)`
11035
13312
  * mirrors the Stripe SDK convention. The namespace is also exported at the
@@ -11040,7 +13317,7 @@ declare class Transcodely {
11040
13317
  }
11041
13318
 
11042
13319
  /** SDK version. Bumped by release-please from package.json on each tag. */
11043
- declare const SDK_VERSION = "0.3.0";
13320
+ declare const SDK_VERSION = "0.3.2";
11044
13321
  /**
11045
13322
  * API version this SDK release is pinned to. Sent on every request as
11046
13323
  * `Transcodely-Version`. Customers can override per-client via the
@@ -11050,4 +13327,4 @@ declare const API_VERSION = "2026-05-03";
11050
13327
  /** Default base URL for the production Transcodely API. */
11051
13328
  declare const DEFAULT_BASE_URL = "https://api.transcodely.com";
11052
13329
 
11053
- export { APIConnectionError, APIError, Event as APIEvent, APIKey, API_VERSION, AV1Options, AbortMultipartUploadRequest, App, AppStatus, ArchiveAppRequest, ArchiveOriginRequest, ArchivePresetRequest, AudioCodec, AudioSettings, AudioStreamInfo, AudioTrackConfig, AuthenticationError, AutoABRConfig, AutoProfileDefaults, BYOKConfig, BitrateMode, BurnInStyle, type CallOptions, CancelJobRequest, CancelJobResponse, CheckSlugRequest, CheckSlugResponse, CompleteMultipartUploadRequest, CompleteMultipartUploadResponse, CompleteUploadRequest, CompleteUploadResponse, CompletedPart, ConfirmJobRequest, ConfirmJobResponse, ConflictError, Container, ContentAnalysis, ContentAwareConfig, ContentAwareMode, ContentType, CreateAPIKeyRequest, CreateAPIKeyResponse, CreateAppRequest, CreateAppResponse, CreateJobRequest, CreateJobResponse, CreateMultipartUploadRequest, CreateMultipartUploadResponse, CreateOrganizationRequest, CreateOrganizationResponse, CreateOriginRequest, CreateOriginResponse, CreatePresetRequest, CreatePresetResponse, CreateUploadRequest, CreateUploadResponse, CreateWebhookEndpointRequest, CreateWebhookEndpointResponse, DASHConfig, DEFAULT_BASE_URL, DEFAULT_TOLERANCE_SECONDS, DRMConfig, DRMSystem, DeleteVideoRequest, DeleteWebhookEndpointRequest, DeleteWebhookEndpointResponse, DeliveryFormat, DuplicatePresetRequest, DuplicatePresetResponse, EVENT_ID_HEADER, EnableHostingRequest, EnableHostingResponse, EncryptionScheme, ErrorDetails, type EventBase, ExecutionTiming, type FieldViolation, GOPAlignmentMode, GcsCredentials, GcsOriginConfig, GetAPIKeyRequest, GetAPIKeyResponse, GetAppRequest, GetAppResponse, GetEndpointHealthRequest, GetEndpointHealthResponse, GetJobRequest, GetJobResponse, GetMeRequest, GetMeResponse, GetMembershipRequest, GetMembershipResponse, GetOrganizationRequest, GetOrganizationResponse, GetOriginRequest, GetOriginResponse, GetPresetBySlugRequest, GetPresetBySlugResponse, GetPresetRequest, GetPresetResponse, GetUploadPartUrlsRequest, GetUploadPartUrlsResponse, GetUsageRequest, GetUsageResponse, GetUserRequest, GetUserResponse, GetVideoRequest, GetVideoResponse, H264Options, H265Options, HDRConfig, HDRFormat, HDRMode, HLSConfig, HLSPlaylistType, HLSSegmentFormat, HealthBucket, HostingConfig, HttpCredentials, HttpOriginConfig, InputMetadata, InvalidRequestError, Job, JobOutput, JobPriority, JobStatus, KeyServerConfig, ListAPIKeysRequest, ListAPIKeysResponse, ListAppsRequest, ListAppsResponse, ListEventsRequest, ListEventsResponse, ListJobsRequest, ListJobsResponse, ListMembershipsRequest, ListMembershipsResponse, ListOrganizationsRequest, ListOrganizationsResponse, ListOriginsRequest, ListOriginsResponse, ListPresetsRequest, ListPresetsResponse, ListUsersRequest, ListUsersResponse, ListVideosRequest, ListVideosResponse, ListWebhookDeliveriesRequest, ListWebhookDeliveriesResponse, ListWebhookEndpointsRequest, ListWebhookEndpointsResponse, type LogEvent, Membership, MembershipRole, MembershipStatus, MembershipWithUser, NotFoundError, Organization, OrganizationStatus, Origin, OriginPermission, OriginProvider, OriginRef, OriginStatus, OutputFormat, OutputSpec, OutputStatus, OutputVariantResult, Page, PaginationRequest, PaginationResponse, PermissionError, PreconditionError, Preset, PresetVariant, PricingSnapshot, QualityTier, R2Jurisdiction, R2OriginConfig, RateLimitError, RemoveMembershipRequest, ResendEventRequest, ResendEventResponse, Resolution, RetrieveEventRequest, RetrieveEventResponse, RetrieveWebhookEndpointRequest, RetrieveWebhookEndpointResponse, RevokeAPIKeyRequest, RotateWebhookSecretRequest, RotateWebhookSecretResponse, S3Credentials, S3OriginConfig, SDK_VERSION, SIGNATURE_HEADER, SegmentConfig, SendTestWebhookRequest, SendTestWebhookResponse, StreamingConfig, SubtitleFormat, SubtitleOperation, SubtitleStreamInfo, SubtitleTrack, ThumbnailFormat, ThumbnailMode, ThumbnailResult, ThumbnailSpec, ToneMapping, Transcodely, type TranscodelyConfig, TranscodelyError, UpdateAppRequest, UpdateAppResponse, UpdateHostingConfigRequest, UpdateHostingConfigResponse, UpdateMeRequest, UpdateMeResponse, UpdateMembershipRoleRequest, UpdateMembershipRoleResponse, UpdateOrganizationRequest, UpdateOrganizationResponse, UpdateOriginRequest, UpdateOriginResponse, UpdatePresetRequest, UpdatePresetResponse, UpdateVideoRequest, UpdateVideoResponse, UpdateWebhookEndpointRequest, UpdateWebhookEndpointResponse, UploadPart, UsageSummary, User, UserApprovalStatus, UserOrganization, UserStatus, UserWithOrganizations, VP9Options, ValidateOriginRequest, ValidateOriginResponse, ValidationResult, VariantPricingSnapshot, type VerifyOptions, Video, VideoCodec, VideoRendition, VideoSettings, VideoStatus, VideoStreamInfo, VideoVariant, VideoVisibility, WEBHOOK_EVENT_TYPES, WatchEventType, WatchJobRequest, WatchJobResponse, WatchVideoRequest, WatchVideoResponse, WebhookDelivery, WebhookEndpoint, WebhookError, type WebhookEvent, type WebhookEventType, WebhookPayloadError, WebhookSignatureError, WebhookTimestampError, Webhooks, constructEvent, verifySignature };
13330
+ export { APIConnectionError, APIError, Event as APIEvent, APIKey, API_VERSION, AV1Options, AbortMultipartUploadRequest, App, AppStatus, ArchiveAppRequest, ArchiveOriginRequest, ArchivePresetRequest, AudioCodec, AudioSettings, AudioStreamInfo, AudioTrackConfig, AuthenticationError, AutoABRConfig, AutoProfileDefaults, BYOKConfig, BitrateMode, BurnInStyle, type CallOptions, CancelJobRequest, CancelJobResponse, ChapterPoint, ChapterResult, CheckSlugRequest, CheckSlugResponse, ClipConfig, CompleteMultipartUploadRequest, CompleteMultipartUploadResponse, CompleteUploadRequest, CompleteUploadResponse, CompletedPart, ConfirmJobRequest, ConfirmJobResponse, ConflictError, Container, ContentAnalysis, ContentAwareConfig, ContentAwareMode, ContentType, CreateAPIKeyRequest, CreateAPIKeyResponse, CreateAppRequest, CreateAppResponse, CreateFromUrlRequest, CreateFromUrlResponse, CreateJobRequest, CreateJobResponse, CreateMultipartUploadRequest, CreateMultipartUploadResponse, CreateOrganizationRequest, CreateOrganizationResponse, CreateOriginRequest, CreateOriginResponse, CreatePresetRequest, CreatePresetResponse, CreateUploadRequest, CreateUploadResponse, CreateWebhookEndpointRequest, CreateWebhookEndpointResponse, DASHConfig, DEFAULT_BASE_URL, DEFAULT_TOLERANCE_SECONDS, DRMConfig, DRMSystem, DailyUsage, DeleteVideoRequest, DeleteWebhookEndpointRequest, DeleteWebhookEndpointResponse, DeliveryFormat, DuplicatePresetRequest, DuplicatePresetResponse, EVENT_ID_HEADER, EnableHostingRequest, EnableHostingResponse, EncryptionScheme, EndpointHealthSummary, ErrorDetails, type EventBase, ExecutionTiming, type FieldViolation, GOPAlignmentMode, GcsCredentials, GcsOriginConfig, GetAPIKeyRequest, GetAPIKeyResponse, GetAppRequest, GetAppResponse, GetEndpointHealthRequest, GetEndpointHealthResponse, GetInvoiceRequest, GetInvoiceResponse, GetJobRequest, GetJobResponse, GetMeRequest, GetMeResponse, GetMembershipRequest, GetMembershipResponse, GetOrganizationRequest, GetOrganizationResponse, GetOriginRequest, GetOriginResponse, GetPresetBySlugRequest, GetPresetBySlugResponse, GetPresetRequest, GetPresetResponse, GetSpendRequest, GetSpendResponse, GetStatsRequest, GetStatsResponse, GetUpcomingInvoiceRequest, GetUpcomingInvoiceResponse, GetUploadPartUrlsRequest, GetUploadPartUrlsResponse, GetUsageRequest, GetUsageResponse, GetUserRequest, GetUserResponse, GetVideoRequest, GetVideoResponse, H264Options, H265Options, HDRConfig, HDRFormat, HDRMode, HLSConfig, HLSPlaylistType, HLSSegmentFormat, HealthBucket, HostingConfig, HttpCredentials, HttpOriginConfig, InputMetadata, InvalidRequestError, Invoice, InvoiceLineItem, InvoiceLineType, InvoiceStatus, Job, JobFee, JobOutput, JobPriority, JobStatus, KeyServerConfig, type KnownWebhookEvent, ListAPIKeysRequest, ListAPIKeysResponse, ListAppsRequest, ListAppsResponse, ListEventsRequest, ListEventsResponse, ListInvoicesRequest, ListInvoicesResponse, ListJobsRequest, ListJobsResponse, ListMembershipsRequest, ListMembershipsResponse, ListOrganizationsRequest, ListOrganizationsResponse, ListOriginsRequest, ListOriginsResponse, ListPresetsRequest, ListPresetsResponse, ListTopVideosRequest, ListTopVideosResponse, ListUsersRequest, ListUsersResponse, ListVideosRequest, ListVideosResponse, ListWebhookDeliveriesRequest, ListWebhookDeliveriesResponse, ListWebhookEndpointsRequest, ListWebhookEndpointsResponse, type LogEvent, Membership, MembershipRole, MembershipStatus, MembershipWithUser, NotFoundError, Organization, OrganizationStatus, Origin, OriginPermission, OriginProvider, OriginRef, OriginStatus, OutputFormat, OutputSpec, OutputStatus, OutputVariantResult, Page, PaginationRequest, PaginationResponse, PermissionError, PreconditionError, Preset, PresetVariant, PricingSnapshot, QualityTier, R2Jurisdiction, R2OriginConfig, RateLimitError, RemoveMembershipRequest, ResendEventRequest, ResendEventResponse, Resolution, RetrieveEventRequest, RetrieveEventResponse, RetrieveWebhookEndpointRequest, RetrieveWebhookEndpointResponse, RevokeAPIKeyRequest, RotateWebhookSecretRequest, RotateWebhookSecretResponse, S3Credentials, S3OriginConfig, SDK_VERSION, SIGNATURE_HEADER, SegmentConfig, SendTestWebhookRequest, SendTestWebhookResponse, type SpendLimitNotification, StreamingConfig, SubtitleFormat, SubtitleOperation, SubtitleResult, SubtitleStreamInfo, SubtitleTrack, ThumbnailFormat, ThumbnailMode, ThumbnailResult, ThumbnailSpec, ToneMapping, TopVideo, Transcodely, type TranscodelyConfig, TranscodelyError, type UnknownWebhookEvent, UpdateAppRequest, UpdateAppResponse, UpdateHostingConfigRequest, UpdateHostingConfigResponse, UpdateMeRequest, UpdateMeResponse, UpdateMembershipRoleRequest, UpdateMembershipRoleResponse, UpdateOrganizationRequest, UpdateOrganizationResponse, UpdateOriginRequest, UpdateOriginResponse, UpdatePresetRequest, UpdatePresetResponse, UpdateSpendLimitRequest, UpdateSpendLimitResponse, UpdateVideoRequest, UpdateVideoResponse, UpdateWebhookEndpointRequest, UpdateWebhookEndpointResponse, UploadPart, UsageSummary, User, UserApprovalStatus, UserOrganization, UserStatus, UserWithOrganizations, VP9Options, ValidateOriginRequest, ValidateOriginResponse, ValidationResult, VariantPricingSnapshot, type VerifyOptions, Video, VideoCodec, VideoRendition, VideoSettings, VideoStatsDay, VideoStatsTotals, VideoStatus, VideoStreamInfo, VideoTextTrack, VideoVariant, VideoVisibility, WEBHOOK_EVENT_TYPES, WatchEventType, WatchJobRequest, WatchJobResponse, WatchVideoRequest, WatchVideoResponse, WatermarkAnchor, WatermarkConfig, WatermarkPixelPlacement, WebhookDelivery, WebhookEndpoint, WebhookError, type WebhookEvent, type WebhookEventType, WebhookPayloadError, WebhookSignatureError, WebhookTimestampError, Webhooks, constructEvent, isEventType, isKnownEvent, verifySignature };