@transcodely/sdk 0.3.0 → 0.3.1

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";
@@ -3609,7 +4324,14 @@ declare enum SubtitleOperation {
3609
4324
  *
3610
4325
  * @generated from enum value: SUBTITLE_OPERATION_EXTRACT = 4;
3611
4326
  */
3612
- EXTRACT = 4
4327
+ EXTRACT = 4,
4328
+ /**
4329
+ * Generate captions from the audio track using automatic speech
4330
+ * recognition. Tracks produced this way carry auto_generated: true.
4331
+ *
4332
+ * @generated from enum value: SUBTITLE_OPERATION_GENERATE = 5;
4333
+ */
4334
+ GENERATE = 5
3613
4335
  }
3614
4336
  /**
3615
4337
  * Subtitle format.
@@ -3728,7 +4450,11 @@ declare class SubtitleTrack extends Message<SubtitleTrack> {
3728
4450
  */
3729
4451
  outputFormat: SubtitleFormat;
3730
4452
  /**
3731
- * ISO 639-2 language code (e.g., "eng", "spa", "fra").
4453
+ * ISO 639-2 language code (e.g., "eng", "spa", "fra"), or "auto".
4454
+ * "auto" is valid only for the generate operation and selects
4455
+ * automatic language detection; it is the default when empty on a
4456
+ * generate track. The other operations require a real ISO 639-2 code
4457
+ * (or empty) and reject "auto".
3732
4458
  *
3733
4459
  * @generated from field: optional string language = 6;
3734
4460
  */
@@ -3763,14 +4489,198 @@ declare class SubtitleTrack extends Message<SubtitleTrack> {
3763
4489
  * @generated from field: optional transcodely.v1.BurnInStyle burn_in_style = 11;
3764
4490
  */
3765
4491
  burnInStyle?: BurnInStyle;
4492
+ /**
4493
+ * Generate an AI chapters track from the transcript this track produces.
4494
+ *
4495
+ * Only meaningful together with the (upcoming) `generate` subtitle operation:
4496
+ * when enabled, an AI pass over the generated transcript produces a chapters
4497
+ * track delivered as WebVTT plus JSON. Free — no pricing impact. The
4498
+ * transcript text is processed via the Anthropic API (an external
4499
+ * subprocessor). Until the `generate` operation ships, setting this is
4500
+ * rejected at job creation.
4501
+ *
4502
+ * @generated from field: optional bool generate_chapters = 12;
4503
+ */
4504
+ generateChapters?: boolean;
3766
4505
  constructor(data?: PartialMessage<SubtitleTrack>);
3767
4506
  static readonly runtime: typeof proto3;
3768
- static readonly typeName = "transcodely.v1.SubtitleTrack";
4507
+ static readonly typeName = "transcodely.v1.SubtitleTrack";
4508
+ static readonly fields: FieldList;
4509
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): SubtitleTrack;
4510
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): SubtitleTrack;
4511
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SubtitleTrack;
4512
+ static equals(a: SubtitleTrack | PlainMessage<SubtitleTrack> | undefined, b: SubtitleTrack | PlainMessage<SubtitleTrack> | undefined): boolean;
4513
+ }
4514
+ /**
4515
+ * ChapterPoint is one chapter marker. Times are seconds from the start of the
4516
+ * video.
4517
+ *
4518
+ * @generated from message transcodely.v1.ChapterPoint
4519
+ */
4520
+ declare class ChapterPoint extends Message<ChapterPoint> {
4521
+ /**
4522
+ * Chapter start, in seconds from the start of the video.
4523
+ *
4524
+ * @generated from field: double start_seconds = 1;
4525
+ */
4526
+ startSeconds: number;
4527
+ /**
4528
+ * Chapter end, in seconds from the start of the video.
4529
+ *
4530
+ * @generated from field: double end_seconds = 2;
4531
+ */
4532
+ endSeconds: number;
4533
+ /**
4534
+ * Short, human-readable chapter title, in the caption track's language.
4535
+ *
4536
+ * @generated from field: string title = 3;
4537
+ */
4538
+ title: string;
4539
+ constructor(data?: PartialMessage<ChapterPoint>);
4540
+ static readonly runtime: typeof proto3;
4541
+ static readonly typeName = "transcodely.v1.ChapterPoint";
4542
+ static readonly fields: FieldList;
4543
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ChapterPoint;
4544
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ChapterPoint;
4545
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ChapterPoint;
4546
+ static equals(a: ChapterPoint | PlainMessage<ChapterPoint> | undefined, b: ChapterPoint | PlainMessage<ChapterPoint> | undefined): boolean;
4547
+ }
4548
+ /**
4549
+ * ChapterResult reports an auto-generated chapters track (read-only on Job
4550
+ * responses). It is produced by the opt-in auto-chapters pass over generated
4551
+ * captions (SubtitleTrack.generate_chapters).
4552
+ *
4553
+ * Not yet populated: the auto-chapters feature is rolling out together with
4554
+ * generated captions. Fields are documented here so consumers can code against
4555
+ * the shape ahead of the rollout.
4556
+ *
4557
+ * @generated from message transcodely.v1.ChapterResult
4558
+ */
4559
+ declare class ChapterResult extends Message<ChapterResult> {
4560
+ /**
4561
+ * The out_… output the generate track was configured on.
4562
+ *
4563
+ * @generated from field: string output_id = 1;
4564
+ */
4565
+ outputId: string;
4566
+ /**
4567
+ * ISO 639-2 language code, matching the caption track's language.
4568
+ *
4569
+ * @generated from field: string language = 2;
4570
+ */
4571
+ language: string;
4572
+ /**
4573
+ * Storage key of the WebVTT chapters file in the output destination.
4574
+ *
4575
+ * @generated from field: string storage_key = 3;
4576
+ */
4577
+ storageKey: string;
4578
+ /**
4579
+ * Resolved URL for the chapters file (same resolution rules as the caption
4580
+ * artifact URL).
4581
+ *
4582
+ * @generated from field: string url = 4;
4583
+ */
4584
+ url: string;
4585
+ /**
4586
+ * The chapter markers, ordered by start time.
4587
+ *
4588
+ * @generated from field: repeated transcodely.v1.ChapterPoint chapters = 5;
4589
+ */
4590
+ chapters: ChapterPoint[];
4591
+ constructor(data?: PartialMessage<ChapterResult>);
4592
+ static readonly runtime: typeof proto3;
4593
+ static readonly typeName = "transcodely.v1.ChapterResult";
4594
+ static readonly fields: FieldList;
4595
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ChapterResult;
4596
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ChapterResult;
4597
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ChapterResult;
4598
+ static equals(a: ChapterResult | PlainMessage<ChapterResult> | undefined, b: ChapterResult | PlainMessage<ChapterResult> | undefined): boolean;
4599
+ }
4600
+ /**
4601
+ * A generated or processed subtitle artifact, reported by the worker on job
4602
+ * completion and surfaced on the Job response. Mirrors the rendition pattern:
4603
+ * the worker computes both the storage key and the storage URL, and the API
4604
+ * persists them verbatim (the same way JobOutput.output_url works). Read-only
4605
+ * on Job responses.
4606
+ *
4607
+ * @generated from message transcodely.v1.SubtitleResult
4608
+ */
4609
+ declare class SubtitleResult extends Message<SubtitleResult> {
4610
+ /**
4611
+ * Output ID (out_…) the subtitle track was configured on.
4612
+ *
4613
+ * @generated from field: string output_id = 1;
4614
+ */
4615
+ outputId: string;
4616
+ /**
4617
+ * Processing operation that produced this artifact
4618
+ * (generate | extract | convert). Lowercase string on the wire.
4619
+ *
4620
+ * @generated from field: transcodely.v1.SubtitleOperation operation = 2;
4621
+ */
4622
+ operation: SubtitleOperation;
4623
+ /**
4624
+ * Subtitle file format: webvtt | srt | ttml | ass.
4625
+ *
4626
+ * @generated from field: transcodely.v1.SubtitleFormat format = 3;
4627
+ */
4628
+ format: SubtitleFormat;
4629
+ /**
4630
+ * Detected language (generate with auto-detect) or the configured
4631
+ * ISO 639-2 language code.
4632
+ *
4633
+ * @generated from field: string language = 4;
4634
+ */
4635
+ language: string;
4636
+ /**
4637
+ * Human-readable label (e.g., "English", "Spanish (CC)").
4638
+ *
4639
+ * @generated from field: string label = 5;
4640
+ */
4641
+ label: string;
4642
+ /**
4643
+ * True iff this track was produced by the generate operation
4644
+ * (automatic speech recognition).
4645
+ *
4646
+ * @generated from field: bool auto_generated = 6;
4647
+ */
4648
+ autoGenerated: boolean;
4649
+ /**
4650
+ * Caption file storage key in the output destination
4651
+ * (e.g. "job_xxx/subtitles/out_yyy_eng.vtt").
4652
+ *
4653
+ * @generated from field: string storage_key = 7;
4654
+ */
4655
+ storageKey: string;
4656
+ /**
4657
+ * Fully-qualified storage URL as built by the worker, stored as-is and
4658
+ * echoed on the Job response, exactly like JobOutput.output_url.
4659
+ *
4660
+ * @generated from field: string url = 8;
4661
+ */
4662
+ url: string;
4663
+ /**
4664
+ * Segment-level transcript JSON storage key. Set only for generate
4665
+ * tracks (the machine-readable transcript consumed by auto-chapters).
4666
+ *
4667
+ * @generated from field: string transcript_storage_key = 9;
4668
+ */
4669
+ transcriptStorageKey: string;
4670
+ /**
4671
+ * Fully-qualified transcript URL. Set only for generate tracks.
4672
+ *
4673
+ * @generated from field: string transcript_url = 10;
4674
+ */
4675
+ transcriptUrl: string;
4676
+ constructor(data?: PartialMessage<SubtitleResult>);
4677
+ static readonly runtime: typeof proto3;
4678
+ static readonly typeName = "transcodely.v1.SubtitleResult";
3769
4679
  static readonly fields: FieldList;
3770
- static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): SubtitleTrack;
3771
- static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): SubtitleTrack;
3772
- static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SubtitleTrack;
3773
- static equals(a: SubtitleTrack | PlainMessage<SubtitleTrack> | undefined, b: SubtitleTrack | PlainMessage<SubtitleTrack> | undefined): boolean;
4680
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): SubtitleResult;
4681
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): SubtitleResult;
4682
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): SubtitleResult;
4683
+ static equals(a: SubtitleResult | PlainMessage<SubtitleResult> | undefined, b: SubtitleResult | PlainMessage<SubtitleResult> | undefined): boolean;
3774
4684
  }
3775
4685
 
3776
4686
  /**
@@ -3962,6 +4872,11 @@ declare class DRMConfig extends Message<DRMConfig> {
3962
4872
  /**
3963
4873
  * Content-aware encoding mode.
3964
4874
  *
4875
+ * NOT YET SUPPORTED. The worker pipeline does not yet act on content-aware
4876
+ * encoding, so any output carrying a ContentAwareConfig is rejected at CreateJob
4877
+ * with error code `parameter_unsupported` (see issue #167). The enum values are
4878
+ * retained for wire compatibility and will become active when the feature ships.
4879
+ *
3965
4880
  * @generated from enum transcodely.v1.ContentAwareMode
3966
4881
  */
3967
4882
  declare enum ContentAwareMode {
@@ -3970,13 +4885,15 @@ declare enum ContentAwareMode {
3970
4885
  */
3971
4886
  UNSPECIFIED = 0,
3972
4887
  /**
3973
- * Optimize CRF for target VMAF on specific content.
4888
+ * Optimize CRF for target VMAF on specific content. NOT YET SUPPORTED —
4889
+ * rejected at create.
3974
4890
  *
3975
4891
  * @generated from enum value: CONTENT_AWARE_MODE_PER_TITLE = 1;
3976
4892
  */
3977
4893
  PER_TITLE = 1,
3978
4894
  /**
3979
- * Generate optimal bitrate ladder automatically.
4895
+ * Generate optimal bitrate ladder automatically. NOT YET SUPPORTED —
4896
+ * rejected at create.
3980
4897
  *
3981
4898
  * @generated from enum value: CONTENT_AWARE_MODE_AUTO_ABR = 2;
3982
4899
  */
@@ -3985,6 +4902,10 @@ declare enum ContentAwareMode {
3985
4902
  /**
3986
4903
  * Auto ABR ladder generation constraints.
3987
4904
  *
4905
+ * NOT YET SUPPORTED — see ContentAwareConfig. These constraints are validated
4906
+ * for shape but never applied, because a request carrying content_aware is
4907
+ * rejected at create.
4908
+ *
3988
4909
  * @generated from message transcodely.v1.AutoABRConfig
3989
4910
  */
3990
4911
  declare class AutoABRConfig extends Message<AutoABRConfig> {
@@ -4026,24 +4947,35 @@ declare class AutoABRConfig extends Message<AutoABRConfig> {
4026
4947
  /**
4027
4948
  * Content-aware encoding configuration for an output.
4028
4949
  *
4950
+ * NOT YET SUPPORTED. Setting content_aware on any output causes CreateJob to
4951
+ * fail with error code `parameter_unsupported` and the message "content-aware
4952
+ * encoding (per_title/auto_abr) is not yet supported". The worker does not yet
4953
+ * implement per-title CRF optimization or auto-ABR ladder generation — both
4954
+ * modes would run the identical plain-encode path — so the API rejects the
4955
+ * request rather than silently no-op it while charging the content-aware
4956
+ * multiplier (issue #167 / transcodely/worker#90). The message and fields are
4957
+ * retained for wire compatibility and forward-planning.
4958
+ *
4029
4959
  * @generated from message transcodely.v1.ContentAwareConfig
4030
4960
  */
4031
4961
  declare class ContentAwareConfig extends Message<ContentAwareConfig> {
4032
4962
  /**
4033
- * Encoding mode (required).
4963
+ * Encoding mode (required). NOT YET SUPPORTED — any value here causes the
4964
+ * request to be rejected at create.
4034
4965
  *
4035
4966
  * @generated from field: transcodely.v1.ContentAwareMode mode = 1;
4036
4967
  */
4037
4968
  mode: ContentAwareMode;
4038
4969
  /**
4039
- * Override VMAF target (70-99).
4040
- * Defaults from quality tier: economy=88, standard=93, premium=97.
4970
+ * Override VMAF target (70-99). NOT YET SUPPORTED — content-aware encoding is
4971
+ * rejected at create, so this value is never applied.
4041
4972
  *
4042
4973
  * @generated from field: optional double vmaf_target = 2;
4043
4974
  */
4044
4975
  vmafTarget?: number;
4045
4976
  /**
4046
- * Auto ABR constraints (only for auto_abr mode).
4977
+ * Auto ABR constraints (only for auto_abr mode). NOT YET SUPPORTED — rejected
4978
+ * at create.
4047
4979
  *
4048
4980
  * @generated from field: optional transcodely.v1.AutoABRConfig auto_abr = 3;
4049
4981
  */
@@ -4060,6 +4992,10 @@ declare class ContentAwareConfig extends Message<ContentAwareConfig> {
4060
4992
  /**
4061
4993
  * Content analysis results from extended probe.
4062
4994
  *
4995
+ * NOT YET POPULATED. Produced only when content-aware analysis is wired in the
4996
+ * worker; today no job carries it, because content_aware requests are rejected
4997
+ * at create (see ContentAwareConfig).
4998
+ *
4063
4999
  * @generated from message transcodely.v1.ContentAnalysis
4064
5000
  */
4065
5001
  declare class ContentAnalysis extends Message<ContentAnalysis> {
@@ -4097,6 +5033,168 @@ declare class ContentAnalysis extends Message<ContentAnalysis> {
4097
5033
  static equals(a: ContentAnalysis | PlainMessage<ContentAnalysis> | undefined, b: ContentAnalysis | PlainMessage<ContentAnalysis> | undefined): boolean;
4098
5034
  }
4099
5035
 
5036
+ /**
5037
+ * Anchor position for a relatively-placed watermark. The watermark is aligned
5038
+ * to the named region of each rendition's frame, so a single config places the
5039
+ * overlay consistently across every ABR rung regardless of output resolution.
5040
+ * Wire form is lowercase (e.g. "bottom_right") via the codec.
5041
+ *
5042
+ * @generated from enum transcodely.v1.WatermarkAnchor
5043
+ */
5044
+ declare enum WatermarkAnchor {
5045
+ /**
5046
+ * Default value; treated as bottom_right when unset.
5047
+ *
5048
+ * @generated from enum value: WATERMARK_ANCHOR_UNSPECIFIED = 0;
5049
+ */
5050
+ UNSPECIFIED = 0,
5051
+ /**
5052
+ * @generated from enum value: WATERMARK_ANCHOR_TOP_LEFT = 1;
5053
+ */
5054
+ TOP_LEFT = 1,
5055
+ /**
5056
+ * @generated from enum value: WATERMARK_ANCHOR_TOP_CENTER = 2;
5057
+ */
5058
+ TOP_CENTER = 2,
5059
+ /**
5060
+ * @generated from enum value: WATERMARK_ANCHOR_TOP_RIGHT = 3;
5061
+ */
5062
+ TOP_RIGHT = 3,
5063
+ /**
5064
+ * @generated from enum value: WATERMARK_ANCHOR_MIDDLE_LEFT = 4;
5065
+ */
5066
+ MIDDLE_LEFT = 4,
5067
+ /**
5068
+ * @generated from enum value: WATERMARK_ANCHOR_MIDDLE_CENTER = 5;
5069
+ */
5070
+ MIDDLE_CENTER = 5,
5071
+ /**
5072
+ * @generated from enum value: WATERMARK_ANCHOR_MIDDLE_RIGHT = 6;
5073
+ */
5074
+ MIDDLE_RIGHT = 6,
5075
+ /**
5076
+ * @generated from enum value: WATERMARK_ANCHOR_BOTTOM_LEFT = 7;
5077
+ */
5078
+ BOTTOM_LEFT = 7,
5079
+ /**
5080
+ * @generated from enum value: WATERMARK_ANCHOR_BOTTOM_CENTER = 8;
5081
+ */
5082
+ BOTTOM_CENTER = 8,
5083
+ /**
5084
+ * @generated from enum value: WATERMARK_ANCHOR_BOTTOM_RIGHT = 9;
5085
+ */
5086
+ BOTTOM_RIGHT = 9
5087
+ }
5088
+ /**
5089
+ * Absolute pixel placement for a watermark (advanced / "hacker mode"). The
5090
+ * overlay is drawn at an exact pixel offset and scaled to an exact pixel width;
5091
+ * unlike the relative anchor/width_pct fields, these coordinates do NOT adapt
5092
+ * across ABR rungs — a placement tuned for a 1080p rung will sit at the same
5093
+ * pixel offset on a 360p rung, so this is intended for single-rendition outputs
5094
+ * or advanced users who accept that trade-off.
5095
+ *
5096
+ * @generated from message transcodely.v1.WatermarkPixelPlacement
5097
+ */
5098
+ declare class WatermarkPixelPlacement extends Message<WatermarkPixelPlacement> {
5099
+ /**
5100
+ * Horizontal offset in pixels from the top-left origin of the frame.
5101
+ *
5102
+ * @generated from field: int32 x = 1;
5103
+ */
5104
+ x: number;
5105
+ /**
5106
+ * Vertical offset in pixels from the top-left origin of the frame.
5107
+ *
5108
+ * @generated from field: int32 y = 2;
5109
+ */
5110
+ y: number;
5111
+ /**
5112
+ * Watermark width in pixels. The overlay image is scaled to this width and
5113
+ * its height is derived automatically from the source aspect ratio.
5114
+ *
5115
+ * @generated from field: int32 width = 3;
5116
+ */
5117
+ width: number;
5118
+ constructor(data?: PartialMessage<WatermarkPixelPlacement>);
5119
+ static readonly runtime: typeof proto3;
5120
+ static readonly typeName = "transcodely.v1.WatermarkPixelPlacement";
5121
+ static readonly fields: FieldList;
5122
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): WatermarkPixelPlacement;
5123
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): WatermarkPixelPlacement;
5124
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): WatermarkPixelPlacement;
5125
+ static equals(a: WatermarkPixelPlacement | PlainMessage<WatermarkPixelPlacement> | undefined, b: WatermarkPixelPlacement | PlainMessage<WatermarkPixelPlacement> | undefined): boolean;
5126
+ }
5127
+ /**
5128
+ * Watermark / logo overlay baked into the encoded video of an output.
5129
+ *
5130
+ * Two placement modes exist and are mutually exclusive:
5131
+ * * Relative (default): anchor + width_pct + margin_pct scale the overlay
5132
+ * consistently across every ABR rung.
5133
+ * * Pixel (advanced): the `pixel` submessage places the overlay at an exact
5134
+ * pixel offset and width (does not adapt across rungs).
5135
+ * `image_url` and `opacity` apply in both modes. The mutual exclusivity of
5136
+ * `pixel` with the relative fields is enforced server-side by the feature
5137
+ * validator.
5138
+ *
5139
+ * @generated from message transcodely.v1.WatermarkConfig
5140
+ */
5141
+ declare class WatermarkConfig extends Message<WatermarkConfig> {
5142
+ /**
5143
+ * Public http(s) URL of the overlay image. Must be a PNG or WebP image
5144
+ * (alpha-capable formats only). Validated server-side at job creation: the
5145
+ * image is fetched through the SSRF-guarded transport, its format is checked
5146
+ * by magic bytes + decode, and size/dimension caps are enforced.
5147
+ *
5148
+ * @generated from field: string image_url = 1;
5149
+ */
5150
+ imageUrl: string;
5151
+ /**
5152
+ * Anchor region the overlay is aligned to (relative mode). Defaults to
5153
+ * bottom_right when unset. Ignored when `pixel` is set.
5154
+ *
5155
+ * @generated from field: optional transcodely.v1.WatermarkAnchor anchor = 2;
5156
+ */
5157
+ anchor?: WatermarkAnchor;
5158
+ /**
5159
+ * Watermark width as a percentage of each rendition's output width (relative
5160
+ * mode). Scales consistently across every ABR rung. Range (0, 100].
5161
+ * Defaults to 15 when unset. Ignored when `pixel` is set.
5162
+ *
5163
+ * @generated from field: optional double width_pct = 3;
5164
+ */
5165
+ widthPct?: number;
5166
+ /**
5167
+ * Margin from the anchored edges as a percentage of output width (relative
5168
+ * mode). Range [0, 40]. Defaults to 2 when unset. Ignored when `pixel` is set.
5169
+ *
5170
+ * @generated from field: optional double margin_pct = 4;
5171
+ */
5172
+ marginPct?: number;
5173
+ /**
5174
+ * Overlay opacity. Range (0, 1]. Defaults to 1.0 (fully opaque) when unset.
5175
+ * Applies in both relative and pixel modes.
5176
+ *
5177
+ * @generated from field: optional double opacity = 5;
5178
+ */
5179
+ opacity?: number;
5180
+ /**
5181
+ * Absolute pixel placement (advanced mode). Mutually exclusive with anchor,
5182
+ * width_pct, and margin_pct — supplying `pixel` together with any of those is
5183
+ * rejected at job creation.
5184
+ *
5185
+ * @generated from field: optional transcodely.v1.WatermarkPixelPlacement pixel = 6;
5186
+ */
5187
+ pixel?: WatermarkPixelPlacement;
5188
+ constructor(data?: PartialMessage<WatermarkConfig>);
5189
+ static readonly runtime: typeof proto3;
5190
+ static readonly typeName = "transcodely.v1.WatermarkConfig";
5191
+ static readonly fields: FieldList;
5192
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): WatermarkConfig;
5193
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): WatermarkConfig;
5194
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): WatermarkConfig;
5195
+ static equals(a: WatermarkConfig | PlainMessage<WatermarkConfig> | undefined, b: WatermarkConfig | PlainMessage<WatermarkConfig> | undefined): boolean;
5196
+ }
5197
+
4100
5198
  /**
4101
5199
  * Storage provider type.
4102
5200
  *
@@ -5443,7 +6541,33 @@ declare enum ThumbnailMode {
5443
6541
  *
5444
6542
  * @generated from enum value: THUMBNAIL_MODE_TIMESTAMPS = 4;
5445
6543
  */
5446
- TIMESTAMPS = 4
6544
+ TIMESTAMPS = 4,
6545
+ /**
6546
+ * Generate short animated hover-preview loops for card/grid previews.
6547
+ *
6548
+ * Free and bundled — animated previews add NO cost to a job (thumbnails are
6549
+ * priced at 0). By default the worker produces BOTH an animated WebP and a
6550
+ * muted MP4 loop from the same samples, so a consumer can pick whichever its
6551
+ * surface supports. Set `format = webp` to emit only the WebP.
6552
+ *
6553
+ * Sampling is deterministic: unless `start_offsets` is set, clips are taken at
6554
+ * fixed 25% / 50% / 75% marks of the source duration (no scene detection).
6555
+ * Smart defaults (applied worker-side; the API stores exactly what was sent):
6556
+ * ~4 s total duration, 12 fps, 320 px wide.
6557
+ *
6558
+ * The animated WebP is hard-capped at 10 s: when `duration_seconds` exceeds
6559
+ * 10 the WebP is skipped and the output is MP4-only (documented, not an
6560
+ * error) — unless `format = webp` is set explicitly, in which case a
6561
+ * `duration_seconds` above 10 is rejected at job creation.
6562
+ *
6563
+ * Valid config for this mode: `width`, `height`, `quality` (maps to WebP
6564
+ * encode quality), `duration_seconds`, `fps`, `start_offsets`, `path_template`.
6565
+ * The single/interval/sprite/timestamps fields (`timestamp`,
6566
+ * `interval_seconds`, `timestamps`, `sprite_columns`) are not valid here.
6567
+ *
6568
+ * @generated from enum value: THUMBNAIL_MODE_ANIMATED = 5;
6569
+ */
6570
+ ANIMATED = 5
5447
6571
  }
5448
6572
  /**
5449
6573
  * Thumbnail output format.
@@ -5506,7 +6630,10 @@ declare class ThumbnailSpec extends Message<ThumbnailSpec> {
5506
6630
  */
5507
6631
  quality?: number;
5508
6632
  /**
5509
- * Timestamp in seconds for single mode.
6633
+ * Timestamp in seconds for single mode. When omitted, the worker
6634
+ * smart-selects a representative non-black frame from the opening of the
6635
+ * video (deterministic per input) instead of extracting the frame at t=0.
6636
+ * An explicit value — including 0 — extracts exactly that frame.
5510
6637
  *
5511
6638
  * @generated from field: optional double timestamp = 6;
5512
6639
  */
@@ -5542,6 +6669,13 @@ declare class ThumbnailSpec extends Message<ThumbnailSpec> {
5542
6669
  * {format} (image format: jpeg|png|webp), {thumb_index} (0-based),
5543
6670
  * {thumb_time} (seconds, file-safe), {thumb_time_ms} (milliseconds).
5544
6671
  *
6672
+ * Output-only variables ({output_id}, {codec}, {resolution}, {bitrate},
6673
+ * {quality}, {preset_id}, {output_index}, {segment_*}) are NOT valid here — a
6674
+ * thumbnail is not a rendition, so a thumbnail render context can't resolve
6675
+ * them and the literal token would land in the storage key. Setting one is a
6676
+ * validation error. (When a thumbnail INHERITS the output origin's template
6677
+ * instead, those variables are stripped automatically.)
6678
+ *
5545
6679
  * Example: "video/{video_id}/poster/{thumb_index}".
5546
6680
  *
5547
6681
  * Must not start with `/` or contain `..` (no path traversal). When set, it
@@ -5552,6 +6686,34 @@ declare class ThumbnailSpec extends Message<ThumbnailSpec> {
5552
6686
  * @generated from field: optional string path_template = 10;
5553
6687
  */
5554
6688
  pathTemplate?: string;
6689
+ /**
6690
+ * Total length of each animated preview clip, in seconds (animated mode only).
6691
+ * Range: 2-30. Default (unset): ~4 s, applied worker-side. The animated WebP
6692
+ * is hard-capped at 10 s: above 10 s the WebP is skipped and only the MP4 loop
6693
+ * is produced (unless format=webp is set explicitly, which then rejects
6694
+ * duration_seconds > 10). Only valid for animated mode.
6695
+ *
6696
+ * @generated from field: optional double duration_seconds = 11;
6697
+ */
6698
+ durationSeconds?: number;
6699
+ /**
6700
+ * Frames per second of the animated preview (animated mode only).
6701
+ * Range: 8-15. Default (unset): 12, applied worker-side. Only valid for
6702
+ * animated mode.
6703
+ *
6704
+ * @generated from field: optional int32 fps = 12;
6705
+ */
6706
+ fps?: number;
6707
+ /**
6708
+ * Explicit clip start offsets in seconds from the source start (animated mode
6709
+ * only). When set (max 3 entries, each >= 0), these replace the default
6710
+ * 25%/50%/75% sampling marks; the worker clamps each offset to the source
6711
+ * duration. Unset → the deterministic 25%/50%/75% marks. Only valid for
6712
+ * animated mode.
6713
+ *
6714
+ * @generated from field: repeated double start_offsets = 13;
6715
+ */
6716
+ startOffsets: number[];
5555
6717
  constructor(data?: PartialMessage<ThumbnailSpec>);
5556
6718
  static readonly runtime: typeof proto3;
5557
6719
  static readonly typeName = "transcodely.v1.ThumbnailSpec";
@@ -5589,14 +6751,16 @@ declare class ThumbnailResult extends Message<ThumbnailResult> {
5589
6751
  url: string;
5590
6752
  /**
5591
6753
  * Generation mode that produced this file: single | interval | sprite |
5592
- * timestamps. Lowercase string on the wire.
6754
+ * timestamps | animated. Lowercase string on the wire.
5593
6755
  *
5594
6756
  * @generated from field: string mode = 3;
5595
6757
  */
5596
6758
  mode: string;
5597
6759
  /**
5598
6760
  * File format: jpeg | png | webp. The sprite mode's WebVTT sidecar uses
5599
- * "vtt".
6761
+ * "vtt". Animated mode yields "webp" (the animated WebP) and "mp4" (the muted
6762
+ * MP4 loop) — "mp4" rides this free-form string; it is not a ThumbnailFormat
6763
+ * enum value.
5600
6764
  *
5601
6765
  * @generated from field: string format = 4;
5602
6766
  */
@@ -6164,6 +7328,16 @@ declare class OutputSpec extends Message<OutputSpec> {
6164
7328
  * @generated from field: optional bool disable_audio = 16;
6165
7329
  */
6166
7330
  disableAudio?: boolean;
7331
+ /**
7332
+ * Watermark / logo overlay for this output. When set, the overlay is baked
7333
+ * into the encoded video of this output (like subtitle burn-in). Billed under
7334
+ * the unified overlay multiplier class: 1.1x once per output regardless of how
7335
+ * many pixel-burning overlays are enabled (a watermark and burned-in subtitles
7336
+ * together are still a single 1.1x, never 1.21x).
7337
+ *
7338
+ * @generated from field: optional transcodely.v1.WatermarkConfig watermark = 17;
7339
+ */
7340
+ watermark?: WatermarkConfig;
6167
7341
  constructor(data?: PartialMessage<OutputSpec>);
6168
7342
  static readonly runtime: typeof proto3;
6169
7343
  static readonly typeName = "transcodely.v1.OutputSpec";
@@ -6453,8 +7627,9 @@ declare class JobOutput extends Message<JobOutput> {
6453
7627
  estimatedCost?: number;
6454
7628
  /**
6455
7629
  * 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.
7630
+ * Only a completed output is billable, so this is zero for both canceled and
7631
+ * failed outputs — a canceled output produced nothing usable, no matter how
7632
+ * far its encode got.
6458
7633
  *
6459
7634
  * @generated from field: optional double actual_cost = 11;
6460
7635
  */
@@ -6851,8 +8026,21 @@ declare class Job extends Message<Job> {
6851
8026
  */
6852
8027
  totalEstimatedCost?: number;
6853
8028
  /**
6854
- * Total actual cost (sum of completed/canceled outputs).
6855
- * Failed outputs contribute zero to this total.
8029
+ * Total actual cost — what the job is billed, in the job's currency.
8030
+ *
8031
+ * Only completed outputs are billable, and what happened to the job as a
8032
+ * whole decides whether they are billed at all:
8033
+ * - completed: the sum of its outputs' actual costs, raised to
8034
+ * minimum_charge_eur if that minimum is in effect.
8035
+ * - canceled: the sum of the outputs that had already completed and been
8036
+ * delivered when the cancel landed. Identical whether the job was
8037
+ * canceled through CancelJob or observed as canceled by the worker. The
8038
+ * minimum charge never applies.
8039
+ * - failed: zero. A job that ends failed is not billed, even if some of
8040
+ * its outputs completed before the failure.
8041
+ * - partial: the sum of the outputs that completed, un-floored.
8042
+ * Additive fees (see fees) are included on top, and are charged only on jobs
8043
+ * that ended completed or partial.
6856
8044
  *
6857
8045
  * @generated from field: optional double total_actual_cost = 9;
6858
8046
  */
@@ -6954,6 +8142,16 @@ declare class Job extends Message<Job> {
6954
8142
  * @generated from field: repeated transcodely.v1.ThumbnailResult thumbnail_results = 28;
6955
8143
  */
6956
8144
  thumbnailResults: ThumbnailResult[];
8145
+ /**
8146
+ * Generated/processed subtitle artifacts (populated after the job
8147
+ * completes). Each entry carries the worker-built storage `url` plus the
8148
+ * `output_id` it was configured on. Auto-generated captions (operation
8149
+ * generate) additionally expose a segment-level transcript. Mirrors how
8150
+ * JobOutput.output_url surfaces rendition results.
8151
+ *
8152
+ * @generated from field: repeated transcodely.v1.SubtitleResult subtitle_results = 32;
8153
+ */
8154
+ subtitleResults: SubtitleResult[];
6957
8155
  /**
6958
8156
  * Job-level output path template (echoed from request).
6959
8157
  * Variables: {job_id}, {output_id}, {date}, {timestamp}, {codec}, {resolution}, {format}, {quality}, {output_index}, {uuid}
@@ -6972,6 +8170,72 @@ declare class Job extends Message<Job> {
6972
8170
  * @generated from field: string object = 27;
6973
8171
  */
6974
8172
  object: string;
8173
+ /**
8174
+ * Minimum charge for this job in EUR, locked at creation and never changed
8175
+ * retroactively. It is derived from the job's assigned billing class — a size
8176
+ * band (small/medium/large/extra-large) reflecting the compute the job is
8177
+ * guaranteed to cover — or, in legacy configurations, from the recommended
8178
+ * machine size; either way it is a stable quote, not re-derived from the
8179
+ * machine the job ultimately runs on. When the minimum charge is in effect,
8180
+ * the billed total for a successfully completed job is
8181
+ * max(sum of output costs, minimum_charge_eur) — see minimum_charge_applied
8182
+ * for whether it determined this job's total. The minimum applies only to
8183
+ * jobs that reach completed: a failed job is billed zero, and a canceled or
8184
+ * partial job is billed the un-floored sum of the outputs it did complete.
8185
+ * Absent when no minimum was computed for this job.
8186
+ *
8187
+ * @generated from field: optional double minimum_charge_eur = 30;
8188
+ */
8189
+ minimumChargeEur?: number;
8190
+ /**
8191
+ * Whether minimum_charge_eur determined the job's most recently computed
8192
+ * total — true when the sum of output costs came in below the minimum and
8193
+ * the total was raised to it (estimated total after probe; actual total
8194
+ * after successful completion). When true, total_estimated_cost or
8195
+ * total_actual_cost exceeds the sum of the per-output cost fields, which
8196
+ * are never raised themselves. The minimum is a stable quote locked at
8197
+ * creation (from the job's billing class, or the recommended machine size in
8198
+ * legacy configurations); it is never re-derived from the machine the job
8199
+ * ultimately runs on.
8200
+ *
8201
+ * @generated from field: bool minimum_charge_applied = 31;
8202
+ */
8203
+ minimumChargeApplied: boolean;
8204
+ /**
8205
+ * Additive fee line items (v1: AI caption generation). Fees are charged ON
8206
+ * TOP of the encode bill and sit OUTSIDE the minimum-charge floor:
8207
+ * billed total = max(sum of output costs, minimum_charge_eur) + sum of fees.
8208
+ * total_estimated_cost / total_actual_cost INCLUDE fees; this list exposes
8209
+ * the decomposition. Only live fees are listed — a fee that was voided
8210
+ * (job failed/canceled, or the artifact was never produced) is dropped
8211
+ * from the list and never charged. Server-set; read-only.
8212
+ *
8213
+ * @generated from field: repeated transcodely.v1.JobFee fees = 33;
8214
+ */
8215
+ fees: JobFee[];
8216
+ /**
8217
+ * Hosted video ID used as the input source (video mode), echoed from the
8218
+ * request. Empty when the job was created with input_url or
8219
+ * input_origin_id. Server-set; read-only.
8220
+ *
8221
+ * @generated from field: string input_video_id = 34;
8222
+ */
8223
+ inputVideoId: string;
8224
+ /**
8225
+ * Auto-generated chapter tracks, one per output whose generated caption track
8226
+ * had chapters enabled (SubtitleTrack.generate_chapters). Not yet populated:
8227
+ * the auto-chapters feature is rolling out together with generated captions.
8228
+ *
8229
+ * @generated from field: repeated transcodely.v1.ChapterResult chapter_results = 35;
8230
+ */
8231
+ chapterResults: ChapterResult[];
8232
+ /**
8233
+ * Clip range this job encodes (echoed from request). Absent when the job
8234
+ * encodes the full input.
8235
+ *
8236
+ * @generated from field: optional transcodely.v1.ClipConfig clip = 36;
8237
+ */
8238
+ clip?: ClipConfig;
6975
8239
  constructor(data?: PartialMessage<Job>);
6976
8240
  static readonly runtime: typeof proto3;
6977
8241
  static readonly typeName = "transcodely.v1.Job";
@@ -6981,6 +8245,120 @@ declare class Job extends Message<Job> {
6981
8245
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): Job;
6982
8246
  static equals(a: Job | PlainMessage<Job> | undefined, b: Job | PlainMessage<Job> | undefined): boolean;
6983
8247
  }
8248
+ /**
8249
+ * A single additive fee line item on a job (see Job.fees). Fees are metered
8250
+ * charges for services performed alongside the encode (v1: AI caption
8251
+ * generation at EUR 0.05 per source minute). A fee is charged once per job,
8252
+ * estimated when the input probe supplies the source duration, and only
8253
+ * billed when the completion report shows the fee's artifact was actually
8254
+ * produced (no artifact, no fee). Fees are never absorbed by the per-job
8255
+ * minimum charge: billed total = max(sum of output costs, minimum_charge_eur)
8256
+ * + sum of fees. Read-only.
8257
+ *
8258
+ * @generated from message transcodely.v1.JobFee
8259
+ */
8260
+ declare class JobFee extends Message<JobFee> {
8261
+ /**
8262
+ * Fee discriminator — the fee pricing rule's key. v1: "captions".
8263
+ *
8264
+ * @generated from field: string fee_type = 1;
8265
+ */
8266
+ feeType: string;
8267
+ /**
8268
+ * Human-readable description of what the fee is for
8269
+ * (e.g., "AI Caption Generation").
8270
+ *
8271
+ * @generated from field: string description = 2;
8272
+ */
8273
+ description: string;
8274
+ /**
8275
+ * Metering unit. v1: "source_minute" (input duration in minutes).
8276
+ *
8277
+ * @generated from field: string unit = 3;
8278
+ */
8279
+ unit: string;
8280
+ /**
8281
+ * Metered quantity in `unit`s — the exact fraction, e.g. a 90-second
8282
+ * source is 1.5 source minutes. 0 until the input probe completes.
8283
+ *
8284
+ * @generated from field: double quantity = 4;
8285
+ */
8286
+ quantity: number;
8287
+ /**
8288
+ * Price per unit in `currency`, locked at job creation from the
8289
+ * then-effective fee pricing rule (e.g., 0.05).
8290
+ *
8291
+ * @generated from field: double rate = 5;
8292
+ */
8293
+ rate: number;
8294
+ /**
8295
+ * quantity x rate, in `currency`. 0 until the input probe completes.
8296
+ *
8297
+ * @generated from field: double amount = 6;
8298
+ */
8299
+ amount: number;
8300
+ /**
8301
+ * Currency for rate/amount (ISO 4217 code, e.g., "EUR"). Matches the
8302
+ * job-level currency field.
8303
+ *
8304
+ * @generated from field: string currency = 7;
8305
+ */
8306
+ currency: string;
8307
+ constructor(data?: PartialMessage<JobFee>);
8308
+ static readonly runtime: typeof proto3;
8309
+ static readonly typeName = "transcodely.v1.JobFee";
8310
+ static readonly fields: FieldList;
8311
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): JobFee;
8312
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): JobFee;
8313
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): JobFee;
8314
+ static equals(a: JobFee | PlainMessage<JobFee> | undefined, b: JobFee | PlainMessage<JobFee> | undefined): boolean;
8315
+ }
8316
+ /**
8317
+ * ClipConfig selects a sub-range of the input to encode instead of the full
8318
+ * duration. Applies to the whole job: every output is encoded from the
8319
+ * clipped range, and thumbnails/sprites are computed within it. Cuts are
8320
+ * frame-accurate (outputs are always re-encoded). Billing keys off the
8321
+ * produced output duration, so clipping reduces cost accordingly (the
8322
+ * per-job minimum charge, when in effect, still applies).
8323
+ *
8324
+ * Bounds are stored with 0.1ms (4-decimal) precision; finer-grained values
8325
+ * are rounded. The minimum clip length is 1ms. A clip of {0, 0} is treated
8326
+ * as no clip (encode the full input).
8327
+ *
8328
+ * @generated from message transcodely.v1.ClipConfig
8329
+ */
8330
+ declare class ClipConfig extends Message<ClipConfig> {
8331
+ /**
8332
+ * Where the clip starts, in seconds from the beginning of the input.
8333
+ * Default 0 (start of input). Must be within the input's duration:
8334
+ * validated against the probed duration, failing the job with error code
8335
+ * `input_clip_out_of_range` when out of range.
8336
+ * The upper bound is a CEL expression rather than double.lte: combining
8337
+ * gte+lte trips a broken double.gte_lte composite rule in the pinned
8338
+ * protovalidate-go ("no such attribute(s): rules").
8339
+ *
8340
+ * @generated from field: double start_seconds = 1;
8341
+ */
8342
+ startSeconds: number;
8343
+ /**
8344
+ * Where the clip ends, in seconds from the beginning of the input.
8345
+ * 0 (or unset) means end of input. When set, must be at least 0.001s
8346
+ * greater than start_seconds and no greater than the probed input
8347
+ * duration; otherwise the job fails at probe time with error code
8348
+ * `input_clip_out_of_range`.
8349
+ *
8350
+ * @generated from field: double end_seconds = 2;
8351
+ */
8352
+ endSeconds: number;
8353
+ constructor(data?: PartialMessage<ClipConfig>);
8354
+ static readonly runtime: typeof proto3;
8355
+ static readonly typeName = "transcodely.v1.ClipConfig";
8356
+ static readonly fields: FieldList;
8357
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ClipConfig;
8358
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ClipConfig;
8359
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ClipConfig;
8360
+ static equals(a: ClipConfig | PlainMessage<ClipConfig> | undefined, b: ClipConfig | PlainMessage<ClipConfig> | undefined): boolean;
8361
+ }
6984
8362
  /**
6985
8363
  * Request to create a new job.
6986
8364
  *
@@ -7011,6 +8389,18 @@ declare class CreateJobRequest extends Message<CreateJobRequest> {
7011
8389
  * @generated from field: optional string input_path = 10;
7012
8390
  */
7013
8391
  inputPath?: string;
8392
+ /**
8393
+ * Hosted video ID to use as the input source (video mode).
8394
+ * The job's input is resolved server-side from the referenced video's
8395
+ * original source (falling back to its highest-bitrate rendition if the
8396
+ * ingest source is gone). Outputs are written to the video's managed
8397
+ * storage and linked to it. Use this OR input_url OR input_origin_id.
8398
+ * Primarily for retro-captioning an existing hosted video with a
8399
+ * captions-only output.
8400
+ *
8401
+ * @generated from field: optional string input_video_id = 13;
8402
+ */
8403
+ inputVideoId?: string;
7014
8404
  /**
7015
8405
  * Origin ID for outputs (origin mode).
7016
8406
  * If specified, all outputs will be written to this origin.
@@ -7026,7 +8416,8 @@ declare class CreateJobRequest extends Message<CreateJobRequest> {
7026
8416
  */
7027
8417
  outputs: OutputSpec[];
7028
8418
  /**
7029
- * Job priority (affects processing order and cost).
8419
+ * Job priority (affects worker selection and scheduling order; has no
8420
+ * effect on cost — pricing is driven by codec/resolution/framerate/quality).
7030
8421
  *
7031
8422
  * @generated from field: transcodely.v1.JobPriority priority = 3;
7032
8423
  */
@@ -7105,6 +8496,14 @@ declare class CreateJobRequest extends Message<CreateJobRequest> {
7105
8496
  * @generated from field: optional string app_id = 21;
7106
8497
  */
7107
8498
  appId?: string;
8499
+ /**
8500
+ * Encode only a sub-range of the input (job-level; applies to all outputs).
8501
+ * Omit to encode the full input. See ClipConfig for range semantics and
8502
+ * probe-time validation.
8503
+ *
8504
+ * @generated from field: optional transcodely.v1.ClipConfig clip = 22;
8505
+ */
8506
+ clip?: ClipConfig;
7108
8507
  constructor(data?: PartialMessage<CreateJobRequest>);
7109
8508
  static readonly runtime: typeof proto3;
7110
8509
  static readonly typeName = "transcodely.v1.CreateJobRequest";
@@ -7186,11 +8585,14 @@ declare class GetJobResponse extends Message<GetJobResponse> {
7186
8585
  /**
7187
8586
  * Request to list jobs.
7188
8587
  *
8588
+ * Filters combine with AND: a job is returned only if it satisfies every filter
8589
+ * supplied on the request. Omitted filters are not applied.
8590
+ *
7189
8591
  * @generated from message transcodely.v1.ListJobsRequest
7190
8592
  */
7191
8593
  declare class ListJobsRequest extends Message<ListJobsRequest> {
7192
8594
  /**
7193
- * Optional status filter.
8595
+ * Optional status filter. Superseded by `statuses` — see that field.
7194
8596
  *
7195
8597
  * @generated from field: optional transcodely.v1.JobStatus status = 1;
7196
8598
  */
@@ -7210,6 +8612,45 @@ declare class ListJobsRequest extends Message<ListJobsRequest> {
7210
8612
  * @generated from field: optional string app_id = 3;
7211
8613
  */
7212
8614
  appId?: string;
8615
+ /**
8616
+ * Only include jobs created at or after this timestamp (RFC 3339). Inclusive.
8617
+ *
8618
+ * @generated from field: optional google.protobuf.Timestamp created_after = 4;
8619
+ */
8620
+ createdAfter?: Timestamp;
8621
+ /**
8622
+ * Only include jobs created at or before this timestamp (RFC 3339). Inclusive.
8623
+ *
8624
+ * @generated from field: optional google.protobuf.Timestamp created_before = 5;
8625
+ */
8626
+ createdBefore?: Timestamp;
8627
+ /**
8628
+ * Filter by several statuses at once: a job matches if its status is any one
8629
+ * of the listed values (OR within the field), e.g. [failed, canceled] to list
8630
+ * everything that did not finish.
8631
+ *
8632
+ * Precedence: when this field is non-empty it replaces `status` entirely and
8633
+ * `status` is ignored — the two are never intersected. Send one or the other.
8634
+ * `status` remains supported for existing clients.
8635
+ *
8636
+ * @generated from field: repeated transcodely.v1.JobStatus statuses = 6;
8637
+ */
8638
+ statuses: JobStatus[];
8639
+ /**
8640
+ * Filter on the job's user-provided metadata (the `metadata` map supplied at
8641
+ * create time). Every pair must be present on the job with exactly that value
8642
+ * (AND across pairs); a job carrying additional metadata keys still matches.
8643
+ * Values are compared as exact strings — no prefix, range, or wildcard match.
8644
+ * Jobs created without metadata never match a non-empty filter.
8645
+ *
8646
+ * Example: {"batch": "2026-07", "tenant": "acme"} returns only jobs tagged
8647
+ * with both.
8648
+ *
8649
+ * @generated from field: map<string, string> metadata = 7;
8650
+ */
8651
+ metadata: {
8652
+ [key: string]: string;
8653
+ };
7213
8654
  constructor(data?: PartialMessage<ListJobsRequest>);
7214
8655
  static readonly runtime: typeof proto3;
7215
8656
  static readonly typeName = "transcodely.v1.ListJobsRequest";
@@ -7459,7 +8900,11 @@ declare enum VideoVisibility {
7459
8900
  */
7460
8901
  UNLISTED = 2,
7461
8902
  /**
7462
- * Requires authentication to view.
8903
+ * Not playable via the public player or embed: the player page returns 404 and
8904
+ * embed_url/embed_code are never populated. Authenticated API reads
8905
+ * (VideoService.Get/List/Watch) for the owning app DO return signed, expiring
8906
+ * playback_url/poster_url once the video is "ready", so the owner can watch a
8907
+ * private video via the API even though it stays off the public player.
7463
8908
  *
7464
8909
  * @generated from enum value: VIDEO_VISIBILITY_PRIVATE = 3;
7465
8910
  */
@@ -7484,7 +8929,8 @@ declare class Video extends Message<Video> {
7484
8929
  */
7485
8930
  appId: string;
7486
8931
  /**
7487
- * How the video was created: "upload" (direct upload) or "job" (from transcoding job).
8932
+ * How the video was created: "upload" (direct upload or CreateFromUrl ingest)
8933
+ * or "job" (from a managed transcoding job created via JobService.Create).
7488
8934
  *
7489
8935
  * @generated from field: string source = 3;
7490
8936
  */
@@ -7540,20 +8986,38 @@ declare class Video extends Message<Video> {
7540
8986
  */
7541
8987
  preset?: string;
7542
8988
  /**
7543
- * Playback (computed per-request, not stored — signed CDN tokens).
8989
+ * Playback surface — all computed per-request and never stored. Populated for
8990
+ * "ready" videos of any visibility (public, unlisted, and — on authenticated
8991
+ * owner reads — private); absent otherwise. On apps with CDN token auth
8992
+ * enabled the URL is signed and expiring (HMAC token + expiry query params);
8993
+ * it is re-issued on every read, so clients should use the value from the
8994
+ * latest response rather than caching it. On apps not yet migrated to token
8995
+ * auth the URL is unsigned and access control comes from the managed-storage
8996
+ * bucket policy; unsigned URLs are never issued for private videos.
7544
8997
  *
7545
8998
  * @generated from field: optional string playback_url = 20;
7546
8999
  */
7547
9000
  playbackUrl?: string;
7548
9001
  /**
9002
+ * Public embed surface — populated only for playable videos (status "ready"
9003
+ * and NOT private). Always absent for private videos.
9004
+ *
7549
9005
  * @generated from field: optional string embed_url = 21;
7550
9006
  */
7551
9007
  embedUrl?: string;
7552
9008
  /**
9009
+ * Ready-to-paste responsive HTML embed snippet: a 16:9 aspect-ratio wrapper
9010
+ * div containing a lazy-loaded, borderless <iframe src=embed_url> that fills
9011
+ * its container (no fixed width/height). Same population rules as embed_url.
9012
+ *
7553
9013
  * @generated from field: optional string embed_code = 22;
7554
9014
  */
7555
9015
  embedCode?: string;
7556
9016
  /**
9017
+ * Poster image URL, resolved from the worker-reported poster key. Signed and
9018
+ * expiring on token-auth apps, unsigned otherwise — same rules and per-request
9019
+ * re-issuance as playback_url. Absent when the video has no generated poster.
9020
+ *
7557
9021
  * @generated from field: optional string poster_url = 23;
7558
9022
  */
7559
9023
  posterUrl?: string;
@@ -7561,12 +9025,36 @@ declare class Video extends Message<Video> {
7561
9025
  * @generated from field: optional double duration_seconds = 24;
7562
9026
  */
7563
9027
  durationSeconds?: number;
9028
+ /**
9029
+ * Animated hover-preview URLs, populated when the video was created with
9030
+ * hover_previews enabled and its transcode produced the animated artifacts.
9031
+ * Same resolution and per-request re-issuance rules as poster_url: signed and
9032
+ * expiring on token-auth apps, unsigned otherwise, absent for private videos
9033
+ * without a signable key. hover_preview_url is the animated WebP; the muted
9034
+ * MP4 loop rides hover_preview_mp4_url. Either may be absent (e.g. the WebP is
9035
+ * skipped for previews longer than 10 s). Field numbers 44/45.
9036
+ *
9037
+ * @generated from field: optional string hover_preview_url = 44;
9038
+ */
9039
+ hoverPreviewUrl?: string;
9040
+ /**
9041
+ * @generated from field: optional string hover_preview_mp4_url = 45;
9042
+ */
9043
+ hoverPreviewMp4Url?: string;
7564
9044
  /**
7565
9045
  * Renditions available for playback.
7566
9046
  *
7567
9047
  * @generated from field: repeated transcodely.v1.VideoRendition renditions = 25;
7568
9048
  */
7569
9049
  renditions: VideoRendition[];
9050
+ /**
9051
+ * Caption/subtitle tracks attached to this video, in the order they were
9052
+ * attached. Populated for videos whose transcode produced caption files —
9053
+ * either in the same job or by a later captions-only job. Empty otherwise.
9054
+ *
9055
+ * @generated from field: repeated transcodely.v1.VideoTextTrack text_tracks = 49;
9056
+ */
9057
+ textTracks: VideoTextTrack[];
7570
9058
  /**
7571
9059
  * Storage and cost transparency.
7572
9060
  *
@@ -7591,6 +9079,31 @@ declare class Video extends Message<Video> {
7591
9079
  * @generated from field: optional google.protobuf.Timestamp ready_at = 42;
7592
9080
  */
7593
9081
  readyAt?: Timestamp;
9082
+ /**
9083
+ * Source lifecycle (managed hosting only). These concern ONLY the original
9084
+ * uploaded source file; renditions and playback are never affected.
9085
+ *
9086
+ * Whether this video's source file is exempt from the app's
9087
+ * delete_source_after_days lifecycle rule. Set via UpdateVideo.
9088
+ *
9089
+ * @generated from field: bool source_pinned = 46;
9090
+ */
9091
+ sourcePinned: boolean;
9092
+ /**
9093
+ * When the source file is scheduled to be deleted by the app's
9094
+ * delete_source_after_days rule. Server-set, read-only; present only while a
9095
+ * deletion is scheduled (cleared on pin, on setting change, and on delete).
9096
+ *
9097
+ * @generated from field: optional google.protobuf.Timestamp source_scheduled_for_deletion_at = 47;
9098
+ */
9099
+ sourceScheduledForDeletionAt?: Timestamp;
9100
+ /**
9101
+ * When the source file was deleted by the lifecycle rule. Server-set,
9102
+ * read-only. Once set, re-processing falls back to the best rendition.
9103
+ *
9104
+ * @generated from field: optional google.protobuf.Timestamp source_deleted_at = 48;
9105
+ */
9106
+ sourceDeletedAt?: Timestamp;
7594
9107
  /**
7595
9108
  * Resource type discriminator. Always "video" for this message.
7596
9109
  * Lets webhook consumers and polyglot SDKs identify the resource without
@@ -7651,19 +9164,103 @@ declare class VideoRendition extends Message<VideoRendition> {
7651
9164
  */
7652
9165
  height: number;
7653
9166
  /**
7654
- * Encoded file size in bytes.
9167
+ * Encoded file size in bytes.
9168
+ *
9169
+ * @generated from field: int64 size_bytes = 7;
9170
+ */
9171
+ sizeBytes: bigint;
9172
+ constructor(data?: PartialMessage<VideoRendition>);
9173
+ static readonly runtime: typeof proto3;
9174
+ static readonly typeName = "transcodely.v1.VideoRendition";
9175
+ static readonly fields: FieldList;
9176
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VideoRendition;
9177
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VideoRendition;
9178
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VideoRendition;
9179
+ static equals(a: VideoRendition | PlainMessage<VideoRendition> | undefined, b: VideoRendition | PlainMessage<VideoRendition> | undefined): boolean;
9180
+ }
9181
+ /**
9182
+ * A caption/subtitle track attached to a video for playback.
9183
+ *
9184
+ * @generated from message transcodely.v1.VideoTextTrack
9185
+ */
9186
+ declare class VideoTextTrack extends Message<VideoTextTrack> {
9187
+ /**
9188
+ * Unique text track identifier (e.g., "trk_a1b2c3d4e5f6g7").
9189
+ *
9190
+ * @generated from field: string id = 1;
9191
+ */
9192
+ id: string;
9193
+ /**
9194
+ * Track role, as understood by players: "subtitles", "captions", "chapters",
9195
+ * or "descriptions".
9196
+ *
9197
+ * @generated from field: string kind = 2;
9198
+ */
9199
+ kind: string;
9200
+ /**
9201
+ * Language of the track: the ISO 639-2 code that was requested, or the code
9202
+ * detected by speech recognition when the track was generated with "auto".
9203
+ * Empty when the producing job recorded no language.
9204
+ *
9205
+ * @generated from field: string language = 3;
9206
+ */
9207
+ language: string;
9208
+ /**
9209
+ * Human-readable track label shown in the player's caption menu (e.g.
9210
+ * "English"). Empty when none was supplied.
9211
+ *
9212
+ * @generated from field: string label = 4;
9213
+ */
9214
+ label: string;
9215
+ /**
9216
+ * Subtitle file format: "webvtt", "srt", "ttml", or "ass".
9217
+ *
9218
+ * @generated from field: string format = 5;
9219
+ */
9220
+ format: string;
9221
+ /**
9222
+ * Whether the track was produced by speech recognition (a subtitle track with
9223
+ * the "generate" operation) rather than supplied or extracted from the source.
9224
+ *
9225
+ * @generated from field: bool auto_generated = 6;
9226
+ */
9227
+ autoGenerated: boolean;
9228
+ /**
9229
+ * Whether the track is already listed inside the video's HLS/DASH manifest.
9230
+ * When true, players discover it from the manifest during normal playback and
9231
+ * must NOT also attach it as a separate track — doing so lists the language
9232
+ * twice. False for tracks produced by a captions-only job that ran after the
9233
+ * transcode, which are attached as sidecar files instead.
9234
+ *
9235
+ * @generated from field: bool in_manifest = 7;
9236
+ */
9237
+ inManifest: boolean;
9238
+ /**
9239
+ * URL of the caption file. Computed per-request and never stored: on apps with
9240
+ * CDN token auth enabled it is signed and expiring, and it is re-issued on
9241
+ * every read, so clients should use the value from the latest response rather
9242
+ * than caching it. On apps not yet migrated to token auth it is unsigned and
9243
+ * access control comes from the managed-storage bucket policy; unsigned URLs
9244
+ * are never issued for private videos. Absent when no URL may be issued —
9245
+ * same rules as poster_url.
9246
+ *
9247
+ * @generated from field: optional string url = 8;
9248
+ */
9249
+ url?: string;
9250
+ /**
9251
+ * When the track was attached to the video.
7655
9252
  *
7656
- * @generated from field: int64 size_bytes = 7;
9253
+ * @generated from field: google.protobuf.Timestamp created_at = 9;
7657
9254
  */
7658
- sizeBytes: bigint;
7659
- constructor(data?: PartialMessage<VideoRendition>);
9255
+ createdAt?: Timestamp;
9256
+ constructor(data?: PartialMessage<VideoTextTrack>);
7660
9257
  static readonly runtime: typeof proto3;
7661
- static readonly typeName = "transcodely.v1.VideoRendition";
9258
+ static readonly typeName = "transcodely.v1.VideoTextTrack";
7662
9259
  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;
9260
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VideoTextTrack;
9261
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VideoTextTrack;
9262
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VideoTextTrack;
9263
+ static equals(a: VideoTextTrack | PlainMessage<VideoTextTrack> | undefined, b: VideoTextTrack | PlainMessage<VideoTextTrack> | undefined): boolean;
7667
9264
  }
7668
9265
  /**
7669
9266
  * Request to create a presigned upload URL for direct client upload.
@@ -7672,7 +9269,8 @@ declare class VideoRendition extends Message<VideoRendition> {
7672
9269
  */
7673
9270
  declare class CreateUploadRequest extends Message<CreateUploadRequest> {
7674
9271
  /**
7675
- * App to create the video under. Required — must have hosting enabled.
9272
+ * App to create the video under. Required. The app must have managed hosting
9273
+ * enabled (AppService.EnableHosting) or the call fails with FailedPrecondition.
7676
9274
  *
7677
9275
  * @generated from field: string app_id = 8;
7678
9276
  */
@@ -7714,7 +9312,7 @@ declare class CreateUploadRequest extends Message<CreateUploadRequest> {
7714
9312
  */
7715
9313
  tags: string[];
7716
9314
  /**
7717
- * Visibility setting. Defaults to "private" if not specified.
9315
+ * Visibility setting. Defaults to "unlisted" if not specified.
7718
9316
  *
7719
9317
  * @generated from field: optional string visibility = 7;
7720
9318
  */
@@ -7729,6 +9327,15 @@ declare class CreateUploadRequest extends Message<CreateUploadRequest> {
7729
9327
  * @generated from field: optional string preset = 9;
7730
9328
  */
7731
9329
  preset?: string;
9330
+ /**
9331
+ * When true, attach an animated hover-preview (mode=animated, worker smart
9332
+ * defaults: ~4 s, 12 fps, 320 px) to the managed transcode, in addition to the
9333
+ * poster. Free — animated previews add no cost. The produced WebP/MP4 loop
9334
+ * surface as Video.hover_preview_url / hover_preview_mp4_url once ready.
9335
+ *
9336
+ * @generated from field: bool hover_previews = 10;
9337
+ */
9338
+ hoverPreviews: boolean;
7732
9339
  constructor(data?: PartialMessage<CreateUploadRequest>);
7733
9340
  static readonly runtime: typeof proto3;
7734
9341
  static readonly typeName = "transcodely.v1.CreateUploadRequest";
@@ -7813,6 +9420,102 @@ declare class CompleteUploadResponse extends Message<CompleteUploadResponse> {
7813
9420
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CompleteUploadResponse;
7814
9421
  static equals(a: CompleteUploadResponse | PlainMessage<CompleteUploadResponse> | undefined, b: CompleteUploadResponse | PlainMessage<CompleteUploadResponse> | undefined): boolean;
7815
9422
  }
9423
+ /**
9424
+ * Request to create a hosted video from a remote URL (one-call ingest).
9425
+ *
9426
+ * @generated from message transcodely.v1.CreateFromUrlRequest
9427
+ */
9428
+ declare class CreateFromUrlRequest extends Message<CreateFromUrlRequest> {
9429
+ /**
9430
+ * App to create the video under. Required. The app must have managed hosting
9431
+ * enabled (AppService.EnableHosting) or the call fails with FailedPrecondition.
9432
+ *
9433
+ * @generated from field: string app_id = 1;
9434
+ */
9435
+ appId: string;
9436
+ /**
9437
+ * Publicly-reachable source URL to ingest. Must be http:// or https:// —
9438
+ * storage-origin schemes (gs://, s3://) are not accepted here; use an origin
9439
+ * and JobService.Create for those. The URL is fetched by the worker at
9440
+ * transcode time (the API never fetches it); private/internal addresses are
9441
+ * rejected up front and again, authoritatively, at fetch time (SSRF defense).
9442
+ *
9443
+ * @generated from field: string url = 2;
9444
+ */
9445
+ url: string;
9446
+ /**
9447
+ * Optional title for the video.
9448
+ *
9449
+ * @generated from field: optional string title = 3;
9450
+ */
9451
+ title?: string;
9452
+ /**
9453
+ * Optional description.
9454
+ *
9455
+ * @generated from field: optional string description = 4;
9456
+ */
9457
+ description?: string;
9458
+ /**
9459
+ * Optional tags for categorization (max 20).
9460
+ *
9461
+ * @generated from field: repeated string tags = 5;
9462
+ */
9463
+ tags: string[];
9464
+ /**
9465
+ * Visibility setting. Defaults to "unlisted" if not specified.
9466
+ *
9467
+ * @generated from field: optional string visibility = 6;
9468
+ */
9469
+ visibility?: string;
9470
+ /**
9471
+ * Optional preset reference for the auto-transcode job.
9472
+ * Accepts either a preset ID (e.g., "pst_abc123") or slug (e.g., "gaming_1080p_60_standard").
9473
+ * When provided, the preset's settings drive the encoding instead of the
9474
+ * app's default auto-profile ABR ladder.
9475
+ *
9476
+ * @generated from field: optional string preset = 7;
9477
+ */
9478
+ preset?: string;
9479
+ /**
9480
+ * When true, attach an animated hover-preview (mode=animated, worker smart
9481
+ * defaults) to the managed transcode, in addition to the poster. Free. The
9482
+ * produced loop surfaces as Video.hover_preview_url / hover_preview_mp4_url.
9483
+ *
9484
+ * @generated from field: bool hover_previews = 8;
9485
+ */
9486
+ hoverPreviews: boolean;
9487
+ constructor(data?: PartialMessage<CreateFromUrlRequest>);
9488
+ static readonly runtime: typeof proto3;
9489
+ static readonly typeName = "transcodely.v1.CreateFromUrlRequest";
9490
+ static readonly fields: FieldList;
9491
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CreateFromUrlRequest;
9492
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CreateFromUrlRequest;
9493
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CreateFromUrlRequest;
9494
+ static equals(a: CreateFromUrlRequest | PlainMessage<CreateFromUrlRequest> | undefined, b: CreateFromUrlRequest | PlainMessage<CreateFromUrlRequest> | undefined): boolean;
9495
+ }
9496
+ /**
9497
+ * Response from creating a video from a URL.
9498
+ *
9499
+ * @generated from message transcodely.v1.CreateFromUrlResponse
9500
+ */
9501
+ declare class CreateFromUrlResponse extends Message<CreateFromUrlResponse> {
9502
+ /**
9503
+ * The created video (status: "processing"). No video.uploaded event fires for
9504
+ * URL ingest (no bytes are uploaded); the job lifecycle plus video.ready /
9505
+ * video.failed cover the outcome.
9506
+ *
9507
+ * @generated from field: transcodely.v1.Video video = 1;
9508
+ */
9509
+ video?: Video;
9510
+ constructor(data?: PartialMessage<CreateFromUrlResponse>);
9511
+ static readonly runtime: typeof proto3;
9512
+ static readonly typeName = "transcodely.v1.CreateFromUrlResponse";
9513
+ static readonly fields: FieldList;
9514
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): CreateFromUrlResponse;
9515
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): CreateFromUrlResponse;
9516
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): CreateFromUrlResponse;
9517
+ static equals(a: CreateFromUrlResponse | PlainMessage<CreateFromUrlResponse> | undefined, b: CreateFromUrlResponse | PlainMessage<CreateFromUrlResponse> | undefined): boolean;
9518
+ }
7816
9519
  /**
7817
9520
  * A single part in a multipart upload with its presigned URL.
7818
9521
  *
@@ -7874,7 +9577,8 @@ declare class CompletedPart extends Message<CompletedPart> {
7874
9577
  */
7875
9578
  declare class CreateMultipartUploadRequest extends Message<CreateMultipartUploadRequest> {
7876
9579
  /**
7877
- * App to create the video under. Required — must have hosting enabled.
9580
+ * App to create the video under. Required. The app must have managed hosting
9581
+ * enabled (AppService.EnableHosting) or the call fails with FailedPrecondition.
7878
9582
  *
7879
9583
  * @generated from field: string app_id = 1;
7880
9584
  */
@@ -7941,6 +9645,14 @@ declare class CreateMultipartUploadRequest extends Message<CreateMultipartUpload
7941
9645
  * @generated from field: optional string preset = 14;
7942
9646
  */
7943
9647
  preset?: string;
9648
+ /**
9649
+ * When true, attach an animated hover-preview (mode=animated, worker smart
9650
+ * defaults) to the managed transcode, in addition to the poster. Free. The
9651
+ * produced loop surfaces as Video.hover_preview_url / hover_preview_mp4_url.
9652
+ *
9653
+ * @generated from field: bool hover_previews = 15;
9654
+ */
9655
+ hoverPreviews: boolean;
7944
9656
  constructor(data?: PartialMessage<CreateMultipartUploadRequest>);
7945
9657
  static readonly runtime: typeof proto3;
7946
9658
  static readonly typeName = "transcodely.v1.CreateMultipartUploadRequest";
@@ -8288,7 +10000,9 @@ declare class UpdateVideoRequest extends Message<UpdateVideoRequest> {
8288
10000
  */
8289
10001
  description?: string;
8290
10002
  /**
8291
- * Updated tags (replaces existing tags).
10003
+ * Updated tags (replaces existing tags). Because proto3 repeated fields carry
10004
+ * no presence, an empty list is indistinguishable from "unset" on the wire
10005
+ * and leaves existing tags unchanged. To remove all tags, set clear_tags.
8292
10006
  *
8293
10007
  * @generated from field: repeated string tags = 4;
8294
10008
  */
@@ -8299,6 +10013,21 @@ declare class UpdateVideoRequest extends Message<UpdateVideoRequest> {
8299
10013
  * @generated from field: optional string visibility = 5;
8300
10014
  */
8301
10015
  visibility?: string;
10016
+ /**
10017
+ * Set to true to remove all tags. Mutually exclusive with tags.
10018
+ *
10019
+ * @generated from field: optional bool clear_tags = 6;
10020
+ */
10021
+ clearTags?: boolean;
10022
+ /**
10023
+ * Pin or unpin this video's source file against the app's
10024
+ * delete_source_after_days lifecycle rule. Pinning also immediately clears any
10025
+ * pending deletion schedule. Unpinning does NOT reschedule — the sweeper
10026
+ * re-evaluates later with a fresh warning webhook.
10027
+ *
10028
+ * @generated from field: optional bool source_pinned = 7;
10029
+ */
10030
+ sourcePinned?: boolean;
8302
10031
  constructor(data?: PartialMessage<UpdateVideoRequest>);
8303
10032
  static readonly runtime: typeof proto3;
8304
10033
  static readonly typeName = "transcodely.v1.UpdateVideoRequest";
@@ -8508,6 +10237,19 @@ declare class UsageSummary extends Message<UsageSummary> {
8508
10237
  * @generated from field: string currency = 31;
8509
10238
  */
8510
10239
  currency: string;
10240
+ /**
10241
+ * Per-day usage breakdown for the billing period identified by
10242
+ * billing_month, oldest day first. With a billing anchor day other than 1,
10243
+ * the period spans into the following calendar month, so dates are not
10244
+ * limited to the named month. Only days with recorded activity are present
10245
+ * (no zero-fill): a day is omitted when it had no storage snapshot, no
10246
+ * egress, and no video encoded. Powers the dashboard's usage-trend charts.
10247
+ * Populated for both app-scoped and org-scoped (aggregated across the
10248
+ * org's apps) calls.
10249
+ *
10250
+ * @generated from field: repeated transcodely.v1.DailyUsage daily = 40;
10251
+ */
10252
+ daily: DailyUsage[];
8511
10253
  constructor(data?: PartialMessage<UsageSummary>);
8512
10254
  static readonly runtime: typeof proto3;
8513
10255
  static readonly typeName = "transcodely.v1.UsageSummary";
@@ -8517,6 +10259,311 @@ declare class UsageSummary extends Message<UsageSummary> {
8517
10259
  static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): UsageSummary;
8518
10260
  static equals(a: UsageSummary | PlainMessage<UsageSummary> | undefined, b: UsageSummary | PlainMessage<UsageSummary> | undefined): boolean;
8519
10261
  }
10262
+ /**
10263
+ * One calendar day's slice of usage within a billing period (see
10264
+ * UsageSummary.daily for period semantics). All monetary fields are in the
10265
+ * parent UsageSummary's `currency`.
10266
+ *
10267
+ * @generated from message transcodely.v1.DailyUsage
10268
+ */
10269
+ declare class DailyUsage extends Message<DailyUsage> {
10270
+ /**
10271
+ * Calendar day in YYYY-MM-DD format (UTC).
10272
+ *
10273
+ * @generated from field: string date = 1;
10274
+ */
10275
+ date: string;
10276
+ /**
10277
+ * Total stored bytes as of this day's snapshot. Point-in-time (the day's
10278
+ * recorded storage level), not an increment over the prior day. Zero when
10279
+ * no snapshot was taken that day.
10280
+ *
10281
+ * @generated from field: int64 storage_bytes = 2;
10282
+ */
10283
+ storageBytes: bigint;
10284
+ /**
10285
+ * Bytes egressed during this day (sum of the day's hourly egress records).
10286
+ *
10287
+ * @generated from field: int64 egress_bytes = 3;
10288
+ */
10289
+ egressBytes: bigint;
10290
+ /**
10291
+ * CDN requests served during this day (sum of the day's hourly records).
10292
+ *
10293
+ * @generated from field: int64 request_count = 4;
10294
+ */
10295
+ requestCount: bigint;
10296
+ /**
10297
+ * Encoding cost for videos created on this day, derived from the linked
10298
+ * transcoding jobs' actual cost. Zero when no billable video was created.
10299
+ *
10300
+ * @generated from field: double encoding_cost = 5;
10301
+ */
10302
+ encodingCost: number;
10303
+ constructor(data?: PartialMessage<DailyUsage>);
10304
+ static readonly runtime: typeof proto3;
10305
+ static readonly typeName = "transcodely.v1.DailyUsage";
10306
+ static readonly fields: FieldList;
10307
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): DailyUsage;
10308
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): DailyUsage;
10309
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): DailyUsage;
10310
+ static equals(a: DailyUsage | PlainMessage<DailyUsage> | undefined, b: DailyUsage | PlainMessage<DailyUsage> | undefined): boolean;
10311
+ }
10312
+ /**
10313
+ * Request for a single video's playback stats.
10314
+ *
10315
+ * @generated from message transcodely.v1.GetStatsRequest
10316
+ */
10317
+ declare class GetStatsRequest extends Message<GetStatsRequest> {
10318
+ /**
10319
+ * Video ID to fetch stats for.
10320
+ *
10321
+ * @generated from field: string video_id = 1;
10322
+ */
10323
+ videoId: string;
10324
+ /**
10325
+ * Optional inclusive start of the UTC date range, YYYY-MM-DD (e.g.
10326
+ * "2026-07-01"). Omitted means unbounded (all retained history).
10327
+ *
10328
+ * @generated from field: optional string start_date = 2;
10329
+ */
10330
+ startDate?: string;
10331
+ /**
10332
+ * Optional inclusive end of the UTC date range, YYYY-MM-DD. Omitted means
10333
+ * unbounded (up to today).
10334
+ *
10335
+ * @generated from field: optional string end_date = 3;
10336
+ */
10337
+ endDate?: string;
10338
+ constructor(data?: PartialMessage<GetStatsRequest>);
10339
+ static readonly runtime: typeof proto3;
10340
+ static readonly typeName = "transcodely.v1.GetStatsRequest";
10341
+ static readonly fields: FieldList;
10342
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetStatsRequest;
10343
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetStatsRequest;
10344
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetStatsRequest;
10345
+ static equals(a: GetStatsRequest | PlainMessage<GetStatsRequest> | undefined, b: GetStatsRequest | PlainMessage<GetStatsRequest> | undefined): boolean;
10346
+ }
10347
+ /**
10348
+ * Response with a video's daily playback stats and range totals.
10349
+ *
10350
+ * @generated from message transcodely.v1.GetStatsResponse
10351
+ */
10352
+ declare class GetStatsResponse extends Message<GetStatsResponse> {
10353
+ /**
10354
+ * Per-day rows within the requested range, oldest day first. Only days with
10355
+ * recorded activity are present (no zero-fill).
10356
+ *
10357
+ * @generated from field: repeated transcodely.v1.VideoStatsDay daily = 1;
10358
+ */
10359
+ daily: VideoStatsDay[];
10360
+ /**
10361
+ * Totals across the returned days.
10362
+ *
10363
+ * @generated from field: transcodely.v1.VideoStatsTotals totals = 2;
10364
+ */
10365
+ totals?: VideoStatsTotals;
10366
+ constructor(data?: PartialMessage<GetStatsResponse>);
10367
+ static readonly runtime: typeof proto3;
10368
+ static readonly typeName = "transcodely.v1.GetStatsResponse";
10369
+ static readonly fields: FieldList;
10370
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): GetStatsResponse;
10371
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): GetStatsResponse;
10372
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): GetStatsResponse;
10373
+ static equals(a: GetStatsResponse | PlainMessage<GetStatsResponse> | undefined, b: GetStatsResponse | PlainMessage<GetStatsResponse> | undefined): boolean;
10374
+ }
10375
+ /**
10376
+ * One UTC day of playback stats for a video.
10377
+ *
10378
+ * @generated from message transcodely.v1.VideoStatsDay
10379
+ */
10380
+ declare class VideoStatsDay extends Message<VideoStatsDay> {
10381
+ /**
10382
+ * Calendar day in YYYY-MM-DD format (UTC).
10383
+ *
10384
+ * @generated from field: string date = 1;
10385
+ */
10386
+ date: string;
10387
+ /**
10388
+ * Number of playback starts (one 'play' beacon per pageview that began
10389
+ * playing).
10390
+ *
10391
+ * @generated from field: int32 plays = 2;
10392
+ */
10393
+ plays: number;
10394
+ /**
10395
+ * Approximate watch time in seconds. Derived from playback heartbeats
10396
+ * (heartbeat count × the ~10s heartbeat interval), not exact wall-clock
10397
+ * time — a partial final interval still counts as a whole one.
10398
+ *
10399
+ * @generated from field: int64 watch_seconds = 3;
10400
+ */
10401
+ watchSeconds: bigint;
10402
+ /**
10403
+ * Distinct viewers, counted by an anonymous per-pageview session id (no PII).
10404
+ *
10405
+ * @generated from field: int32 unique_viewers = 4;
10406
+ */
10407
+ uniqueViewers: number;
10408
+ constructor(data?: PartialMessage<VideoStatsDay>);
10409
+ static readonly runtime: typeof proto3;
10410
+ static readonly typeName = "transcodely.v1.VideoStatsDay";
10411
+ static readonly fields: FieldList;
10412
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VideoStatsDay;
10413
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VideoStatsDay;
10414
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VideoStatsDay;
10415
+ static equals(a: VideoStatsDay | PlainMessage<VideoStatsDay> | undefined, b: VideoStatsDay | PlainMessage<VideoStatsDay> | undefined): boolean;
10416
+ }
10417
+ /**
10418
+ * Aggregated playback totals over a date range.
10419
+ *
10420
+ * @generated from message transcodely.v1.VideoStatsTotals
10421
+ */
10422
+ declare class VideoStatsTotals extends Message<VideoStatsTotals> {
10423
+ /**
10424
+ * Sum of daily plays.
10425
+ *
10426
+ * @generated from field: int32 plays = 1;
10427
+ */
10428
+ plays: number;
10429
+ /**
10430
+ * Sum of daily approximate watch seconds.
10431
+ *
10432
+ * @generated from field: int64 watch_seconds = 2;
10433
+ */
10434
+ watchSeconds: bigint;
10435
+ /**
10436
+ * Sum of per-day unique viewers. A viewer active on N distinct days counts N
10437
+ * times (it is not de-duplicated across days); for a single-day range it is
10438
+ * exact.
10439
+ *
10440
+ * @generated from field: int32 unique_viewers = 3;
10441
+ */
10442
+ uniqueViewers: number;
10443
+ constructor(data?: PartialMessage<VideoStatsTotals>);
10444
+ static readonly runtime: typeof proto3;
10445
+ static readonly typeName = "transcodely.v1.VideoStatsTotals";
10446
+ static readonly fields: FieldList;
10447
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): VideoStatsTotals;
10448
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): VideoStatsTotals;
10449
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): VideoStatsTotals;
10450
+ static equals(a: VideoStatsTotals | PlainMessage<VideoStatsTotals> | undefined, b: VideoStatsTotals | PlainMessage<VideoStatsTotals> | undefined): boolean;
10451
+ }
10452
+ /**
10453
+ * Request for an app's top videos by plays.
10454
+ *
10455
+ * @generated from message transcodely.v1.ListTopVideosRequest
10456
+ */
10457
+ declare class ListTopVideosRequest extends Message<ListTopVideosRequest> {
10458
+ /**
10459
+ * Optional app filter. API-key callers may omit it (their key's app is used)
10460
+ * or pass their own app; a different app is rejected with PermissionDenied.
10461
+ * Portal/JWT callers pass the app to scope the leaderboard; omitted resolves
10462
+ * to the org's first app.
10463
+ *
10464
+ * @generated from field: optional string app_id = 1;
10465
+ */
10466
+ appId?: string;
10467
+ /**
10468
+ * Optional inclusive UTC date range bounds, YYYY-MM-DD. Omitted means
10469
+ * unbounded on that side.
10470
+ *
10471
+ * @generated from field: optional string start_date = 2;
10472
+ */
10473
+ startDate?: string;
10474
+ /**
10475
+ * @generated from field: optional string end_date = 3;
10476
+ */
10477
+ endDate?: string;
10478
+ /**
10479
+ * Maximum number of videos to return (1-100). Defaults to 10.
10480
+ *
10481
+ * @generated from field: optional int32 limit = 4;
10482
+ */
10483
+ limit?: number;
10484
+ constructor(data?: PartialMessage<ListTopVideosRequest>);
10485
+ static readonly runtime: typeof proto3;
10486
+ static readonly typeName = "transcodely.v1.ListTopVideosRequest";
10487
+ static readonly fields: FieldList;
10488
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListTopVideosRequest;
10489
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListTopVideosRequest;
10490
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListTopVideosRequest;
10491
+ static equals(a: ListTopVideosRequest | PlainMessage<ListTopVideosRequest> | undefined, b: ListTopVideosRequest | PlainMessage<ListTopVideosRequest> | undefined): boolean;
10492
+ }
10493
+ /**
10494
+ * Response with an app's ranked videos.
10495
+ *
10496
+ * @generated from message transcodely.v1.ListTopVideosResponse
10497
+ */
10498
+ declare class ListTopVideosResponse extends Message<ListTopVideosResponse> {
10499
+ /**
10500
+ * Videos ordered by plays (then watch time) descending.
10501
+ *
10502
+ * @generated from field: repeated transcodely.v1.TopVideo items = 1;
10503
+ */
10504
+ items: TopVideo[];
10505
+ constructor(data?: PartialMessage<ListTopVideosResponse>);
10506
+ static readonly runtime: typeof proto3;
10507
+ static readonly typeName = "transcodely.v1.ListTopVideosResponse";
10508
+ static readonly fields: FieldList;
10509
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): ListTopVideosResponse;
10510
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): ListTopVideosResponse;
10511
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): ListTopVideosResponse;
10512
+ static equals(a: ListTopVideosResponse | PlainMessage<ListTopVideosResponse> | undefined, b: ListTopVideosResponse | PlainMessage<ListTopVideosResponse> | undefined): boolean;
10513
+ }
10514
+ /**
10515
+ * A single ranked video with its playback totals over the requested range.
10516
+ *
10517
+ * @generated from message transcodely.v1.TopVideo
10518
+ */
10519
+ declare class TopVideo extends Message<TopVideo> {
10520
+ /**
10521
+ * Video ID.
10522
+ *
10523
+ * @generated from field: string video_id = 1;
10524
+ */
10525
+ videoId: string;
10526
+ /**
10527
+ * Video title, if set.
10528
+ *
10529
+ * @generated from field: optional string title = 2;
10530
+ */
10531
+ title?: string;
10532
+ /**
10533
+ * Poster image URL, computed from the app's CDN config. Absent when no CDN
10534
+ * is configured or the video has no poster.
10535
+ *
10536
+ * @generated from field: optional string poster_url = 3;
10537
+ */
10538
+ posterUrl?: string;
10539
+ /**
10540
+ * Total plays over the range.
10541
+ *
10542
+ * @generated from field: int64 plays = 4;
10543
+ */
10544
+ plays: bigint;
10545
+ /**
10546
+ * Total approximate watch seconds over the range.
10547
+ *
10548
+ * @generated from field: int64 watch_seconds = 5;
10549
+ */
10550
+ watchSeconds: bigint;
10551
+ /**
10552
+ * Unique viewers over the range, summed per day (a viewer active on N days
10553
+ * counts N times; exact for a single-day range). See VideoStatsTotals.
10554
+ *
10555
+ * @generated from field: int64 unique_viewers = 6;
10556
+ */
10557
+ uniqueViewers: bigint;
10558
+ constructor(data?: PartialMessage<TopVideo>);
10559
+ static readonly runtime: typeof proto3;
10560
+ static readonly typeName = "transcodely.v1.TopVideo";
10561
+ static readonly fields: FieldList;
10562
+ static fromBinary(bytes: Uint8Array, options?: Partial<BinaryReadOptions>): TopVideo;
10563
+ static fromJson(jsonValue: JsonValue, options?: Partial<JsonReadOptions>): TopVideo;
10564
+ static fromJsonString(jsonString: string, options?: Partial<JsonReadOptions>): TopVideo;
10565
+ static equals(a: TopVideo | PlainMessage<TopVideo> | undefined, b: TopVideo | PlainMessage<TopVideo> | undefined): boolean;
10566
+ }
8520
10567
 
8521
10568
  /**
8522
10569
  * Public types for the webhook surface — the discriminated union customers
@@ -8548,12 +10595,18 @@ interface EventBase {
8548
10595
  };
8549
10596
  }
8550
10597
  /**
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.
10598
+ * Every event this SDK version knows, discriminated by `type`. Each arm's
10599
+ * `data` is a decoded resource, so once an event is narrowed to this union —
10600
+ * via {@link isKnownEvent} (then a `switch`) or {@link isEventType} — reading
10601
+ * `event.data` yields the exact resource type.
10602
+ *
10603
+ * Kept free of any `string` catch-all arm on purpose: a `type: string` member
10604
+ * is a supertype of every literal, so TypeScript keeps it live in every
10605
+ * `case`, collapsing `data` back to `unknown` and defeating narrowing (the
10606
+ * bug in transcodely-js#34). Forward-compat lives in the sibling
10607
+ * {@link UnknownWebhookEvent} instead.
8555
10608
  */
8556
- type WebhookEvent = (EventBase & {
10609
+ type KnownWebhookEvent = (EventBase & {
8557
10610
  type: "job.created";
8558
10611
  data: Job;
8559
10612
  }) | (EventBase & {
@@ -8583,9 +10636,18 @@ type WebhookEvent = (EventBase & {
8583
10636
  }) | (EventBase & {
8584
10637
  type: "video.uploaded";
8585
10638
  data: Video;
10639
+ }) | (EventBase & {
10640
+ type: "video.ready";
10641
+ data: Video;
10642
+ }) | (EventBase & {
10643
+ type: "video.failed";
10644
+ data: Video;
8586
10645
  }) | (EventBase & {
8587
10646
  type: "video.deleted";
8588
10647
  data: Video;
10648
+ }) | (EventBase & {
10649
+ type: "video.source_scheduled_for_deletion";
10650
+ data: Video;
8589
10651
  }) | (EventBase & {
8590
10652
  type: "app.created";
8591
10653
  data: App;
@@ -8593,11 +10655,60 @@ type WebhookEvent = (EventBase & {
8593
10655
  type: "app.updated";
8594
10656
  data: App;
8595
10657
  }) | (EventBase & {
10658
+ type: "app.spend_limit_warning";
10659
+ data: SpendLimitNotification;
10660
+ }) | (EventBase & {
10661
+ type: "app.spend_limit_exceeded";
10662
+ data: SpendLimitNotification;
10663
+ });
10664
+ /**
10665
+ * Forward-compat arm: an event whose `type` this SDK version does not know
10666
+ * because the API added it after this release. The envelope still verifies
10667
+ * and parses; `data` is the raw decoded JSON object, left as `unknown` for the
10668
+ * consumer to inspect. Handle it in the `else` branch of {@link isKnownEvent}
10669
+ * or the `default:` of a `switch`.
10670
+ */
10671
+ interface UnknownWebhookEvent extends EventBase {
8596
10672
  type: string;
8597
10673
  data: unknown;
8598
- });
10674
+ }
8599
10675
  /**
8600
- * The 13 concrete webhook event types the API can emit. Mirrors the source of
10676
+ * A verified, decoded webhook event: the closed, precisely-typed
10677
+ * {@link KnownWebhookEvent} union plus the open {@link UnknownWebhookEvent}
10678
+ * forward-compat arm.
10679
+ *
10680
+ * This is a structural superset of `KnownWebhookEvent` — every known arm is
10681
+ * still assignable to `WebhookEvent`, and `WebhookEvent["type"]` is still
10682
+ * `string` — so code written against the previous single-union shape keeps
10683
+ * compiling. To *narrow* by `type`, first funnel through {@link isKnownEvent}
10684
+ * or {@link isEventType}; a bare `switch (event.type)` on the open union
10685
+ * cannot narrow (see {@link KnownWebhookEvent}).
10686
+ */
10687
+ type WebhookEvent = KnownWebhookEvent | UnknownWebhookEvent;
10688
+ /**
10689
+ * Payload of the `app.spend_limit_warning` and `app.spend_limit_exceeded`
10690
+ * events. Unlike the resource-carrying events, these carry a small notification
10691
+ * object (snake_case, as delivered on the wire) rather than a resource snapshot,
10692
+ * so `data` is the raw parsed JSON — it is not run through the resource codec.
10693
+ */
10694
+ interface SpendLimitNotification {
10695
+ /** The app the spend limit belongs to (`app_*`). */
10696
+ app_id: string;
10697
+ /** Inclusive start of the billing period, an RFC 3339 full-date in UTC (e.g. `"2026-01-01"`). */
10698
+ period_start: string;
10699
+ /** Exclusive end of the billing period, an RFC 3339 full-date in UTC (e.g. `"2026-02-01"`). */
10700
+ period_end: string;
10701
+ /** The app's monthly spend limit in EUR. */
10702
+ limit_eur: number;
10703
+ /** Recorded spend for the period in EUR at the time the event fired. */
10704
+ spent_eur: number;
10705
+ /** Threshold crossed: `80` for the warning event, `100` for the breach event. */
10706
+ threshold_pct: 80 | 100;
10707
+ /** Currency of the amounts in this payload. Always `"EUR"`. */
10708
+ currency: "EUR";
10709
+ }
10710
+ /**
10711
+ * The 18 concrete webhook event types the API can emit. Mirrors the source of
8601
10712
  * truth in `domain.WebhookEventTypes()` (api/internal/domain/webhook.go). The
8602
10713
  * `"*"` wildcard is a subscription-only value and is intentionally absent.
8603
10714
  *
@@ -8605,9 +10716,45 @@ type WebhookEvent = (EventBase & {
8605
10716
  * catalog-drift regression test can compare this set against the discriminated
8606
10717
  * union literals above.
8607
10718
  */
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"];
10719
+ 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
10720
  /** A concrete event type the API can emit (excludes the `"*"` wildcard). */
8610
10721
  type WebhookEventType = (typeof WEBHOOK_EVENT_TYPES)[number];
10722
+ /**
10723
+ * Narrow an event to the closed {@link KnownWebhookEvent} union, which this
10724
+ * SDK version types precisely. Gate a `switch (event.type)` on it so each
10725
+ * `case` narrows `event.data` to the right resource (with exhaustiveness
10726
+ * checking); the `else` branch keeps {@link UnknownWebhookEvent} — a raw
10727
+ * `data: unknown` — so events added to the API after this SDK release still
10728
+ * flow through untyped rather than being dropped.
10729
+ *
10730
+ * @example
10731
+ * ```ts
10732
+ * if (Webhooks.isKnownEvent(event)) {
10733
+ * switch (event.type) {
10734
+ * case "job.succeeded":
10735
+ * console.log(event.data.id); // event.data is a fully-typed Job
10736
+ * break;
10737
+ * }
10738
+ * } else {
10739
+ * console.log("unhandled future event", event.type);
10740
+ * }
10741
+ * ```
10742
+ */
10743
+ declare function isKnownEvent(event: WebhookEvent): event is KnownWebhookEvent;
10744
+ /**
10745
+ * Narrow an event to a single known type. Convenient for a receiver that only
10746
+ * cares about one or two events and would rather not `switch`.
10747
+ *
10748
+ * @example
10749
+ * ```ts
10750
+ * if (Webhooks.isEventType(event, "output.ready")) {
10751
+ * console.log(event.data.outputUrl); // event.data is a fully-typed JobOutput
10752
+ * }
10753
+ * ```
10754
+ */
10755
+ declare function isEventType<T extends WebhookEventType>(event: WebhookEvent, type: T): event is Extract<KnownWebhookEvent, {
10756
+ type: T;
10757
+ }>;
8611
10758
 
8612
10759
  /**
8613
10760
  * Query and replay events. Each event the SDK hands back is the same
@@ -10883,6 +13030,11 @@ declare class Videos {
10883
13030
  constructor(transport: Transport);
10884
13031
  createUpload(req: PartialMessage<CreateUploadRequest>, opts?: CallOptions): Promise<CreateUploadResponse>;
10885
13032
  completeUpload(req: PartialMessage<CompleteUploadRequest>, opts?: CallOptions): Promise<CompleteUploadResponse>;
13033
+ /** Create a hosted video from a publicly-reachable http(s) URL in one call —
13034
+ * no separate upload step. Returns the video in "processing" status; the
13035
+ * app must have managed hosting enabled. Playback/embed URLs populate once
13036
+ * the video reaches "ready" (subscribe to `video.ready` or `watch`). */
13037
+ createFromUrl(req: PartialMessage<CreateFromUrlRequest>, opts?: CallOptions): Promise<Video>;
10886
13038
  createMultipartUpload(req: PartialMessage<CreateMultipartUploadRequest>, opts?: CallOptions): Promise<CreateMultipartUploadResponse>;
10887
13039
  getUploadPartUrls(req: PartialMessage<GetUploadPartUrlsRequest>, opts?: CallOptions): Promise<GetUploadPartUrlsResponse>;
10888
13040
  completeMultipartUpload(req: PartialMessage<CompleteMultipartUploadRequest>, opts?: CallOptions): Promise<CompleteMultipartUploadResponse>;
@@ -10897,6 +13049,14 @@ declare class Videos {
10897
13049
  includeHeartbeats?: boolean;
10898
13050
  }): AsyncIterable<WatchVideoResponse>;
10899
13051
  getUsage(req?: PartialMessage<GetUsageRequest>, opts?: CallOptions): Promise<GetUsageResponse>;
13052
+ /** Get playback analytics for a single video: plays, watch time, and unique
13053
+ * viewers aggregated per UTC day, plus range totals. Stats come from a
13054
+ * best-effort playback beacon rolled up hourly, so recent activity may lag by
13055
+ * up to an hour. Returns the full response (`daily` rows + `totals`). */
13056
+ getStats(req: PartialMessage<GetStatsRequest>, opts?: CallOptions): Promise<GetStatsResponse>;
13057
+ /** List an app's top videos ranked by plays over a date range. Returns the
13058
+ * full response (`items`). */
13059
+ listTopVideos(req?: PartialMessage<ListTopVideosRequest>, opts?: CallOptions): Promise<ListTopVideosResponse>;
10900
13060
  }
10901
13061
 
10902
13062
  /**
@@ -10985,6 +13145,8 @@ declare function constructEvent(rawBody: string | Uint8Array | Buffer, sigHeader
10985
13145
 
10986
13146
  declare const Webhooks: {
10987
13147
  readonly constructEvent: typeof constructEvent;
13148
+ readonly isKnownEvent: typeof isKnownEvent;
13149
+ readonly isEventType: typeof isEventType;
10988
13150
  readonly WebhookError: typeof WebhookError;
10989
13151
  readonly WebhookSignatureError: typeof WebhookSignatureError;
10990
13152
  readonly WebhookTimestampError: typeof WebhookTimestampError;
@@ -11015,6 +13177,7 @@ declare class Transcodely {
11015
13177
  private _health;
11016
13178
  private _webhookEndpoints;
11017
13179
  private _events;
13180
+ private _billing;
11018
13181
  constructor(config: TranscodelyConfig);
11019
13182
  /** ID of the most recent successful or failed request, Stripe-style. */
11020
13183
  get lastRequestId(): string | undefined;
@@ -11030,6 +13193,11 @@ declare class Transcodely {
11030
13193
  get health(): Health;
11031
13194
  get webhookEndpoints(): WebhookEndpoints;
11032
13195
  get events(): Events;
13196
+ /**
13197
+ * The organization's invoices. Needs a dashboard session token for an org
13198
+ * owner plus `organizationId` in the client config; API keys are rejected.
13199
+ */
13200
+ get billing(): Billing;
11033
13201
  /**
11034
13202
  * Stateless verify-and-decode helper. `client.webhooks.constructEvent(...)`
11035
13203
  * mirrors the Stripe SDK convention. The namespace is also exported at the
@@ -11040,7 +13208,7 @@ declare class Transcodely {
11040
13208
  }
11041
13209
 
11042
13210
  /** SDK version. Bumped by release-please from package.json on each tag. */
11043
- declare const SDK_VERSION = "0.3.0";
13211
+ declare const SDK_VERSION = "0.3.1";
11044
13212
  /**
11045
13213
  * API version this SDK release is pinned to. Sent on every request as
11046
13214
  * `Transcodely-Version`. Customers can override per-client via the
@@ -11050,4 +13218,4 @@ declare const API_VERSION = "2026-05-03";
11050
13218
  /** Default base URL for the production Transcodely API. */
11051
13219
  declare const DEFAULT_BASE_URL = "https://api.transcodely.com";
11052
13220
 
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 };
13221
+ 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 };