generaltranslation 9.4.1 → 9.4.3

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/openapi.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "info": {
4
4
  "title": "General Translation API",
5
5
  "version": "2026-03-06.v1",
6
- "description": "The public General Translation API. Use it to upload source content and translated files, download translations, queue and translate content, create projects, manage branches and tags, and read project and job status.\n\nMost endpoints operate on a single project. All endpoints live under `https://api.gtx.dev`.\n\nAuthenticate every request with an API key as a bearer token in the standard `Authorization: Bearer <key>` header. Project keys (`gtx-api-`, `gtx-dev-`) are bound to one project. Organization keys (`gtx-org-`) work across projects but must include the target project in the `gt-project-id` header for project-scoped routes. Organization-scoped routes, such as `POST /v2/orgs/{orgId}/projects`, require the target organization in the `orgId` path parameter. The credential must have access to that organization.",
6
+ "description": "The public General Translation API. Use it to upload source content and translated files, download translations, queue and translate content, create projects, manage branches and tags, and read project and job status.\n\nMost endpoints operate on a single project. All endpoints live under `https://api.gtx.dev`.\n\nAuthenticate every request with an API key as a bearer token in the standard `Authorization: Bearer <key>` header. Project keys (`gtx-api-`) are bound to one project, and their permissions decide what they may do. Organization keys (`gtx-org-`) work across projects but must include the target project in the `gt-project-id` header for project-scoped routes. Organization-scoped routes, such as `POST /v2/orgs/{orgId}/projects`, require the target organization in the `orgId` path parameter. The credential must have access to that organization.",
7
7
  "contact": {
8
8
  "name": "General Translation Support",
9
9
  "email": "support@generaltranslation.com",
@@ -165,6 +165,10 @@
165
165
  }
166
166
  ]
167
167
  },
168
+ "DataFormat": {
169
+ "type": "string",
170
+ "enum": ["JSX", "ICU", "I18NEXT", "STRING"]
171
+ },
168
172
  "ModelProvider": {
169
173
  "type": "string",
170
174
  "enum": ["ANTHROPIC", "OPENAI", "XAI", "GOOGLE"]
@@ -211,10 +215,6 @@
211
215
  ]
212
216
  }
213
217
  },
214
- "DataFormat": {
215
- "type": "string",
216
- "enum": ["JSX", "ICU", "I18NEXT", "STRING"]
217
- },
218
218
  "RuntimeTranslationRequest": {
219
219
  "type": "object",
220
220
  "properties": {
@@ -242,6 +242,9 @@
242
242
  "dataFormat": {
243
243
  "$ref": "#/components/schemas/DataFormat"
244
244
  },
245
+ "fileFormat": {
246
+ "$ref": "#/components/schemas/RuntimeFileFormat"
247
+ },
245
248
  "actionType": {
246
249
  "type": "string",
247
250
  "enum": ["fast", "standard"],
@@ -267,9 +270,6 @@
267
270
  "required": ["before", "target", "after"]
268
271
  }
269
272
  }
270
- },
271
- "fileFormat": {
272
- "$ref": "#/components/schemas/RuntimeFileFormat"
273
273
  }
274
274
  },
275
275
  "default": {
@@ -299,6 +299,22 @@
299
299
  },
300
300
  "required": ["requests", "targetLocale", "sourceLocale", "metadata"]
301
301
  },
302
+ "RuntimeFileFormat": {
303
+ "type": "string",
304
+ "enum": ["MD", "MDX"]
305
+ },
306
+ "ProjectApiKeyPermission": {
307
+ "type": "string",
308
+ "enum": [
309
+ "project:write",
310
+ "project:context:read",
311
+ "project:context:write",
312
+ "project:files:read",
313
+ "project:files:write",
314
+ "project:translations:generate",
315
+ "project:translations:enqueue"
316
+ ]
317
+ },
302
318
  "CreateCliWizardSessionResponse": {
303
319
  "type": "object",
304
320
  "properties": {
@@ -319,7 +335,9 @@
319
335
  "CliKeyType": {
320
336
  "type": "string",
321
337
  "enum": ["development", "production", "all"],
322
- "default": "production"
338
+ "default": "production",
339
+ "deprecated": true,
340
+ "description": "Deprecated: the wizard creates one project API key and returns it in each requested slot."
323
341
  },
324
342
  "CliWizardSessionReadyResponse": {
325
343
  "anyOf": [
@@ -382,10 +400,6 @@
382
400
  }
383
401
  },
384
402
  "required": ["message"]
385
- },
386
- "RuntimeFileFormat": {
387
- "type": "string",
388
- "enum": ["MD", "MDX"]
389
403
  }
390
404
  },
391
405
  "parameters": {}
@@ -412,11 +426,13 @@
412
426
  "properties": {
413
427
  "fileId": {
414
428
  "type": "string",
415
- "minLength": 1
429
+ "minLength": 1,
430
+ "description": "File ID assigned by Google Drive, found in the Google Docs or Slides URL after /d/. This is not a GT database file ID. May identify a source file or a GT-managed translated copy. Supply hostApp with fileId for file-specific context; omit both to list connected projects."
416
431
  },
417
432
  "hostApp": {
418
433
  "type": "string",
419
- "enum": ["DOCS", "SLIDES"]
434
+ "enum": ["DOCS", "SLIDES"],
435
+ "description": "Google editor for the file: DOCS for Google Docs or SLIDES for Google Slides. Supply fileId with hostApp for file-specific context."
420
436
  }
421
437
  }
422
438
  }
@@ -845,15 +861,18 @@
845
861
  "properties": {
846
862
  "projectId": {
847
863
  "type": "string",
848
- "minLength": 1
864
+ "minLength": 1,
865
+ "description": "GT project ID returned by get_google_drive_context. The project must have a Google Drive integration connected in the GT dashboard."
849
866
  },
850
867
  "fileId": {
851
868
  "type": "string",
852
- "minLength": 1
869
+ "minLength": 1,
870
+ "description": "File ID assigned by Google Drive, found in the Google Docs or Slides URL after /d/. This is not a GT database file ID. May identify a source file or a GT-managed translated copy."
853
871
  },
854
872
  "hostApp": {
855
873
  "type": "string",
856
- "enum": ["DOCS", "SLIDES"]
874
+ "enum": ["DOCS", "SLIDES"],
875
+ "description": "Google editor for the file: DOCS for Google Docs or SLIDES for Google Slides."
857
876
  },
858
877
  "targetLocales": {
859
878
  "type": "array",
@@ -862,14 +881,17 @@
862
881
  "minLength": 1
863
882
  },
864
883
  "minItems": 1,
865
- "maxItems": 100
884
+ "maxItems": 100,
885
+ "description": "One to 100 supported target locale codes, such as fr or es-MX. Must respect the project locale whitelist. For a GT-managed translated copy, only that copy’s target locale is used."
866
886
  },
867
887
  "sourceLocale": {
868
888
  "type": "string",
869
- "minLength": 1
889
+ "minLength": 1,
890
+ "description": "Optional source locale code, such as en. Defaults to the file’s stored source locale, then the project default. Ignored for a GT-managed translated copy, whose original source locale is used."
870
891
  },
871
892
  "force": {
872
- "type": "boolean"
893
+ "type": "boolean",
894
+ "description": "Whether to force retranslation of existing translations. Defaults to false. Retranslation may incur additional translation charges."
873
895
  }
874
896
  },
875
897
  "required": ["projectId", "fileId", "hostApp", "targetLocales"]
@@ -1146,15 +1168,18 @@
1146
1168
  "properties": {
1147
1169
  "projectId": {
1148
1170
  "type": "string",
1149
- "minLength": 1
1171
+ "minLength": 1,
1172
+ "description": "GT project ID returned by get_google_drive_context. The project must have a Google Drive integration connected in the GT dashboard."
1150
1173
  },
1151
1174
  "fileId": {
1152
1175
  "type": "string",
1153
- "minLength": 1
1176
+ "minLength": 1,
1177
+ "description": "File ID assigned by Google Drive, found in the Google Docs or Slides URL after /d/. This is not a GT database file ID. May identify a source file or a GT-managed translated copy."
1154
1178
  },
1155
1179
  "hostApp": {
1156
1180
  "type": "string",
1157
- "enum": ["DOCS", "SLIDES"]
1181
+ "enum": ["DOCS", "SLIDES"],
1182
+ "description": "Google editor for the file: DOCS for Google Docs or SLIDES for Google Slides."
1158
1183
  }
1159
1184
  },
1160
1185
  "required": ["projectId", "fileId", "hostApp"]
@@ -1433,12 +1458,12 @@
1433
1458
  }
1434
1459
  }
1435
1460
  },
1436
- "/v1/integrations/figma-plugin/info": {
1461
+ "/v1/integrations/plugins/{provider}/info": {
1437
1462
  "post": {
1438
- "operationId": "figmaPluginInfo",
1463
+ "operationId": "pluginInfo",
1439
1464
  "x-internal": true,
1440
- "summary": "Figma plugin info",
1441
- "description": "Run the Figma plugin info command.",
1465
+ "summary": "Plugin info",
1466
+ "description": "Run the info command for a design-tool plugin.",
1442
1467
  "tags": ["Integrations"],
1443
1468
  "security": [
1444
1469
  {
@@ -1449,6 +1474,15 @@
1449
1474
  }
1450
1475
  ],
1451
1476
  "parameters": [
1477
+ {
1478
+ "schema": {
1479
+ "type": "string",
1480
+ "enum": ["figma", "after-effects"]
1481
+ },
1482
+ "required": true,
1483
+ "name": "provider",
1484
+ "in": "path"
1485
+ },
1452
1486
  {
1453
1487
  "schema": {
1454
1488
  "$ref": "#/components/schemas/ApiVersion"
@@ -1474,56 +1508,120 @@
1474
1508
  "content": {
1475
1509
  "application/json": {
1476
1510
  "schema": {
1477
- "type": "object",
1478
- "properties": {
1479
- "figmaFileName": {
1480
- "type": "string",
1481
- "minLength": 1,
1482
- "maxLength": 255
1511
+ "anyOf": [
1512
+ {
1513
+ "type": "object",
1514
+ "properties": {
1515
+ "fileName": {
1516
+ "type": "string",
1517
+ "minLength": 1,
1518
+ "maxLength": 255
1519
+ }
1520
+ },
1521
+ "required": ["fileName"],
1522
+ "additionalProperties": false
1523
+ },
1524
+ {
1525
+ "type": "object",
1526
+ "properties": {
1527
+ "projectStamp": {
1528
+ "type": "string",
1529
+ "minLength": 1,
1530
+ "maxLength": 255
1531
+ }
1532
+ },
1533
+ "required": ["projectStamp"],
1534
+ "additionalProperties": false
1483
1535
  }
1484
- },
1485
- "required": ["figmaFileName"],
1486
- "additionalProperties": false
1536
+ ]
1487
1537
  }
1488
1538
  }
1489
1539
  }
1490
1540
  },
1491
1541
  "responses": {
1492
1542
  "200": {
1493
- "description": "Figma plugin result",
1543
+ "description": "Plugin command result",
1494
1544
  "content": {
1495
1545
  "application/json": {
1496
1546
  "schema": {
1497
- "type": "object",
1498
- "properties": {
1499
- "project": {
1547
+ "anyOf": [
1548
+ {
1500
1549
  "type": "object",
1501
1550
  "properties": {
1502
- "id": {
1503
- "type": "string"
1504
- },
1505
- "name": {
1506
- "type": "string"
1507
- },
1508
- "integrationId": {
1509
- "type": "string"
1510
- },
1511
- "sourceLocale": {
1551
+ "project": {
1512
1552
  "type": "object",
1513
1553
  "properties": {
1514
- "code": {
1554
+ "id": {
1515
1555
  "type": "string"
1516
1556
  },
1517
1557
  "name": {
1518
1558
  "type": "string"
1519
1559
  },
1520
- "emoji": {
1560
+ "integrationId": {
1521
1561
  "type": "string"
1562
+ },
1563
+ "sourceLocale": {
1564
+ "type": "object",
1565
+ "properties": {
1566
+ "code": {
1567
+ "type": "string"
1568
+ },
1569
+ "name": {
1570
+ "type": "string"
1571
+ },
1572
+ "emoji": {
1573
+ "type": "string"
1574
+ }
1575
+ },
1576
+ "required": ["code", "name", "emoji"]
1577
+ },
1578
+ "currentLocales": {
1579
+ "type": "array",
1580
+ "items": {
1581
+ "type": "object",
1582
+ "properties": {
1583
+ "code": {
1584
+ "type": "string"
1585
+ },
1586
+ "name": {
1587
+ "type": "string"
1588
+ },
1589
+ "emoji": {
1590
+ "type": "string"
1591
+ }
1592
+ },
1593
+ "required": ["code", "name", "emoji"]
1594
+ }
1595
+ },
1596
+ "localeWhitelist": {
1597
+ "type": "array",
1598
+ "items": {
1599
+ "type": "object",
1600
+ "properties": {
1601
+ "code": {
1602
+ "type": "string"
1603
+ },
1604
+ "name": {
1605
+ "type": "string"
1606
+ },
1607
+ "emoji": {
1608
+ "type": "string"
1609
+ }
1610
+ },
1611
+ "required": ["code", "name", "emoji"]
1612
+ }
1522
1613
  }
1523
1614
  },
1524
- "required": ["code", "name", "emoji"]
1615
+ "required": [
1616
+ "id",
1617
+ "name",
1618
+ "integrationId",
1619
+ "sourceLocale",
1620
+ "currentLocales",
1621
+ "localeWhitelist"
1622
+ ]
1525
1623
  },
1526
- "currentLocales": {
1624
+ "supportedLocales": {
1527
1625
  "type": "array",
1528
1626
  "items": {
1529
1627
  "type": "object",
@@ -1541,84 +1639,156 @@
1541
1639
  "required": ["code", "name", "emoji"]
1542
1640
  }
1543
1641
  },
1544
- "localeWhitelist": {
1642
+ "linked": {
1545
1643
  "type": "array",
1546
1644
  "items": {
1547
1645
  "type": "object",
1548
1646
  "properties": {
1549
- "code": {
1647
+ "pageId": {
1550
1648
  "type": "string"
1551
1649
  },
1552
- "name": {
1650
+ "pageName": {
1553
1651
  "type": "string"
1554
1652
  },
1555
- "emoji": {
1653
+ "fileId": {
1654
+ "type": "string"
1655
+ },
1656
+ "versionId": {
1657
+ "type": "string"
1658
+ },
1659
+ "sourceLocale": {
1660
+ "type": "object",
1661
+ "properties": {
1662
+ "code": {
1663
+ "type": "string"
1664
+ },
1665
+ "name": {
1666
+ "type": "string"
1667
+ },
1668
+ "emoji": {
1669
+ "type": "string"
1670
+ }
1671
+ },
1672
+ "required": ["code", "name", "emoji"]
1673
+ },
1674
+ "locales": {
1675
+ "type": "array",
1676
+ "items": {
1677
+ "type": "object",
1678
+ "properties": {
1679
+ "code": {
1680
+ "type": "string"
1681
+ },
1682
+ "name": {
1683
+ "type": "string"
1684
+ },
1685
+ "emoji": {
1686
+ "type": "string"
1687
+ }
1688
+ },
1689
+ "required": ["code", "name", "emoji"]
1690
+ }
1691
+ },
1692
+ "updatedAt": {
1556
1693
  "type": "string"
1694
+ },
1695
+ "skippedCount": {
1696
+ "type": "number"
1697
+ },
1698
+ "skipped": {
1699
+ "type": "array",
1700
+ "items": {
1701
+ "type": "object",
1702
+ "properties": {
1703
+ "key": {
1704
+ "type": "string",
1705
+ "minLength": 1,
1706
+ "maxLength": 255
1707
+ },
1708
+ "structuralPath": {
1709
+ "type": "string",
1710
+ "minLength": 1,
1711
+ "maxLength": 1024
1712
+ },
1713
+ "displayPath": {
1714
+ "type": "array",
1715
+ "items": {
1716
+ "type": "string"
1717
+ },
1718
+ "maxItems": 64
1719
+ },
1720
+ "reason": {
1721
+ "type": "string",
1722
+ "enum": [
1723
+ "not_text_node",
1724
+ "empty_text",
1725
+ "hidden_layer",
1726
+ "missing_characters",
1727
+ "in_component_master"
1728
+ ]
1729
+ },
1730
+ "details": {
1731
+ "type": "object",
1732
+ "additionalProperties": {
1733
+ "anyOf": [
1734
+ {
1735
+ "type": "string"
1736
+ },
1737
+ {
1738
+ "type": "number"
1739
+ },
1740
+ {
1741
+ "type": "boolean"
1742
+ },
1743
+ {
1744
+ "type": "null"
1745
+ }
1746
+ ]
1747
+ }
1748
+ }
1749
+ },
1750
+ "required": [
1751
+ "key",
1752
+ "structuralPath",
1753
+ "displayPath",
1754
+ "reason"
1755
+ ],
1756
+ "additionalProperties": false
1757
+ }
1557
1758
  }
1558
1759
  },
1559
- "required": ["code", "name", "emoji"]
1760
+ "required": [
1761
+ "pageId",
1762
+ "pageName",
1763
+ "fileId",
1764
+ "versionId",
1765
+ "sourceLocale",
1766
+ "locales",
1767
+ "updatedAt",
1768
+ "skippedCount",
1769
+ "skipped"
1770
+ ]
1560
1771
  }
1561
1772
  }
1562
1773
  },
1563
- "required": [
1564
- "id",
1565
- "name",
1566
- "integrationId",
1567
- "sourceLocale",
1568
- "currentLocales",
1569
- "localeWhitelist"
1570
- ]
1571
- },
1572
- "supportedLocales": {
1573
- "type": "array",
1574
- "items": {
1575
- "type": "object",
1576
- "properties": {
1577
- "code": {
1578
- "type": "string"
1579
- },
1580
- "name": {
1581
- "type": "string"
1582
- },
1583
- "emoji": {
1584
- "type": "string"
1585
- }
1586
- },
1587
- "required": ["code", "name", "emoji"]
1588
- }
1774
+ "required": ["project", "supportedLocales", "linked"]
1589
1775
  },
1590
- "linkedPages": {
1591
- "type": "array",
1592
- "items": {
1593
- "type": "object",
1594
- "properties": {
1595
- "pageName": {
1596
- "type": "string"
1597
- },
1598
- "fileId": {
1599
- "type": "string"
1600
- },
1601
- "versionId": {
1602
- "type": "string"
1603
- },
1604
- "sourceLocale": {
1605
- "type": "object",
1606
- "properties": {
1607
- "code": {
1608
- "type": "string"
1609
- },
1610
- "name": {
1611
- "type": "string"
1612
- },
1613
- "emoji": {
1614
- "type": "string"
1615
- }
1776
+ {
1777
+ "type": "object",
1778
+ "properties": {
1779
+ "project": {
1780
+ "type": "object",
1781
+ "properties": {
1782
+ "id": {
1783
+ "type": "string"
1616
1784
  },
1617
- "required": ["code", "name", "emoji"]
1618
- },
1619
- "locales": {
1620
- "type": "array",
1621
- "items": {
1785
+ "name": {
1786
+ "type": "string"
1787
+ },
1788
+ "integrationId": {
1789
+ "type": "string"
1790
+ },
1791
+ "sourceLocale": {
1622
1792
  "type": "object",
1623
1793
  "properties": {
1624
1794
  "code": {
@@ -1632,88 +1802,205 @@
1632
1802
  }
1633
1803
  },
1634
1804
  "required": ["code", "name", "emoji"]
1635
- }
1636
- },
1637
- "updatedAt": {
1638
- "type": "string"
1639
- },
1640
- "skippedCount": {
1641
- "type": "number"
1642
- },
1643
- "skipped": {
1644
- "type": "array",
1645
- "items": {
1646
- "type": "object",
1647
- "properties": {
1648
- "nodeId": {
1649
- "type": "string",
1650
- "minLength": 1,
1651
- "maxLength": 255
1652
- },
1653
- "displayPath": {
1654
- "type": "array",
1655
- "items": {
1805
+ },
1806
+ "currentLocales": {
1807
+ "type": "array",
1808
+ "items": {
1809
+ "type": "object",
1810
+ "properties": {
1811
+ "code": {
1656
1812
  "type": "string"
1657
1813
  },
1658
- "maxItems": 64
1659
- },
1660
- "reason": {
1661
- "type": "string",
1662
- "enum": [
1663
- "not_text_node",
1664
- "empty_text",
1665
- "hidden_layer",
1666
- "missing_characters",
1667
- "in_component_master"
1668
- ]
1669
- },
1670
- "details": {
1814
+ "name": {
1815
+ "type": "string"
1816
+ },
1817
+ "emoji": {
1818
+ "type": "string"
1819
+ }
1820
+ },
1821
+ "required": ["code", "name", "emoji"]
1822
+ }
1823
+ },
1824
+ "localeWhitelist": {
1825
+ "type": "array",
1826
+ "items": {
1827
+ "type": "object",
1828
+ "properties": {
1829
+ "code": {
1830
+ "type": "string"
1831
+ },
1832
+ "name": {
1833
+ "type": "string"
1834
+ },
1835
+ "emoji": {
1836
+ "type": "string"
1837
+ }
1838
+ },
1839
+ "required": ["code", "name", "emoji"]
1840
+ }
1841
+ }
1842
+ },
1843
+ "required": [
1844
+ "id",
1845
+ "name",
1846
+ "integrationId",
1847
+ "sourceLocale",
1848
+ "currentLocales",
1849
+ "localeWhitelist"
1850
+ ]
1851
+ },
1852
+ "supportedLocales": {
1853
+ "type": "array",
1854
+ "items": {
1855
+ "type": "object",
1856
+ "properties": {
1857
+ "code": {
1858
+ "type": "string"
1859
+ },
1860
+ "name": {
1861
+ "type": "string"
1862
+ },
1863
+ "emoji": {
1864
+ "type": "string"
1865
+ }
1866
+ },
1867
+ "required": ["code", "name", "emoji"]
1868
+ }
1869
+ },
1870
+ "linked": {
1871
+ "type": "array",
1872
+ "items": {
1873
+ "type": "object",
1874
+ "properties": {
1875
+ "compId": {
1876
+ "type": "string"
1877
+ },
1878
+ "compName": {
1879
+ "type": "string"
1880
+ },
1881
+ "fileId": {
1882
+ "type": "string"
1883
+ },
1884
+ "versionId": {
1885
+ "type": "string"
1886
+ },
1887
+ "sourceLocale": {
1888
+ "type": "object",
1889
+ "properties": {
1890
+ "code": {
1891
+ "type": "string"
1892
+ },
1893
+ "name": {
1894
+ "type": "string"
1895
+ },
1896
+ "emoji": {
1897
+ "type": "string"
1898
+ }
1899
+ },
1900
+ "required": ["code", "name", "emoji"]
1901
+ },
1902
+ "locales": {
1903
+ "type": "array",
1904
+ "items": {
1671
1905
  "type": "object",
1672
- "additionalProperties": {
1673
- "anyOf": [
1674
- {
1906
+ "properties": {
1907
+ "code": {
1908
+ "type": "string"
1909
+ },
1910
+ "name": {
1911
+ "type": "string"
1912
+ },
1913
+ "emoji": {
1914
+ "type": "string"
1915
+ }
1916
+ },
1917
+ "required": ["code", "name", "emoji"]
1918
+ }
1919
+ },
1920
+ "updatedAt": {
1921
+ "type": "string"
1922
+ },
1923
+ "skippedCount": {
1924
+ "type": "number"
1925
+ },
1926
+ "skipped": {
1927
+ "type": "array",
1928
+ "items": {
1929
+ "type": "object",
1930
+ "properties": {
1931
+ "key": {
1932
+ "type": "string",
1933
+ "minLength": 1,
1934
+ "maxLength": 255
1935
+ },
1936
+ "structuralPath": {
1937
+ "type": "string",
1938
+ "minLength": 1,
1939
+ "maxLength": 1024
1940
+ },
1941
+ "displayPath": {
1942
+ "type": "array",
1943
+ "items": {
1675
1944
  "type": "string"
1676
1945
  },
1677
- {
1678
- "type": "number"
1679
- },
1680
- {
1681
- "type": "boolean"
1682
- },
1683
- {
1684
- "type": "null"
1946
+ "maxItems": 64
1947
+ },
1948
+ "reason": {
1949
+ "type": "string",
1950
+ "enum": [
1951
+ "not_text_layer",
1952
+ "empty_text",
1953
+ "expression_driven",
1954
+ "essential_graphics"
1955
+ ]
1956
+ },
1957
+ "details": {
1958
+ "type": "object",
1959
+ "additionalProperties": {
1960
+ "anyOf": [
1961
+ {
1962
+ "type": "string"
1963
+ },
1964
+ {
1965
+ "type": "number"
1966
+ },
1967
+ {
1968
+ "type": "boolean"
1969
+ },
1970
+ {
1971
+ "type": "null"
1972
+ }
1973
+ ]
1685
1974
  }
1686
- ]
1687
- }
1688
- },
1689
- "pathKey": {
1690
- "type": "string"
1975
+ }
1976
+ },
1977
+ "required": [
1978
+ "key",
1979
+ "structuralPath",
1980
+ "displayPath",
1981
+ "reason"
1982
+ ],
1983
+ "additionalProperties": false
1691
1984
  }
1692
- },
1693
- "required": [
1694
- "nodeId",
1695
- "displayPath",
1696
- "reason",
1697
- "pathKey"
1698
- ],
1699
- "additionalProperties": false
1700
- }
1985
+ }
1986
+ },
1987
+ "required": [
1988
+ "compId",
1989
+ "compName",
1990
+ "fileId",
1991
+ "versionId",
1992
+ "sourceLocale",
1993
+ "locales",
1994
+ "updatedAt",
1995
+ "skippedCount",
1996
+ "skipped"
1997
+ ]
1701
1998
  }
1702
- },
1703
- "required": [
1704
- "pageName",
1705
- "fileId",
1706
- "versionId",
1707
- "sourceLocale",
1708
- "locales",
1709
- "updatedAt",
1710
- "skippedCount",
1711
- "skipped"
1712
- ]
1713
- }
1999
+ }
2000
+ },
2001
+ "required": ["project", "supportedLocales", "linked"]
1714
2002
  }
1715
- },
1716
- "required": ["project", "supportedLocales", "linkedPages"]
2003
+ ]
1717
2004
  }
1718
2005
  }
1719
2006
  }
@@ -1856,12 +2143,12 @@
1856
2143
  }
1857
2144
  }
1858
2145
  },
1859
- "/v1/integrations/figma-plugin/sync": {
2146
+ "/v1/integrations/plugins/{provider}/sync": {
1860
2147
  "post": {
1861
- "operationId": "figmaPluginSync",
2148
+ "operationId": "pluginSync",
1862
2149
  "x-internal": true,
1863
- "summary": "Figma plugin sync",
1864
- "description": "Run the Figma plugin sync command.",
2150
+ "summary": "Plugin sync",
2151
+ "description": "Run the sync command for a design-tool plugin.",
1865
2152
  "tags": ["Integrations"],
1866
2153
  "security": [
1867
2154
  {
@@ -1872,6 +2159,15 @@
1872
2159
  }
1873
2160
  ],
1874
2161
  "parameters": [
2162
+ {
2163
+ "schema": {
2164
+ "type": "string",
2165
+ "enum": ["figma", "after-effects"]
2166
+ },
2167
+ "required": true,
2168
+ "name": "provider",
2169
+ "in": "path"
2170
+ },
1875
2171
  {
1876
2172
  "schema": {
1877
2173
  "$ref": "#/components/schemas/ApiVersion"
@@ -1897,306 +2193,639 @@
1897
2193
  "content": {
1898
2194
  "application/json": {
1899
2195
  "schema": {
1900
- "type": "object",
1901
- "properties": {
1902
- "figmaFileName": {
1903
- "type": "string",
1904
- "minLength": 1,
1905
- "maxLength": 255
1906
- },
1907
- "pageName": {
1908
- "type": "string",
1909
- "minLength": 1,
1910
- "maxLength": 255
1911
- },
1912
- "sourceLocale": {
1913
- "type": "string",
1914
- "minLength": 2,
1915
- "maxLength": 16
1916
- },
1917
- "units": {
1918
- "type": "array",
1919
- "items": {
1920
- "type": "object",
1921
- "properties": {
1922
- "nodeId": {
1923
- "type": "string",
1924
- "minLength": 1,
1925
- "maxLength": 255
1926
- },
1927
- "structuralPath": {
1928
- "type": "string",
1929
- "minLength": 1,
1930
- "maxLength": 1024
1931
- },
1932
- "value": {
1933
- "type": "string"
1934
- },
1935
- "displayPath": {
1936
- "type": "array",
1937
- "items": {
1938
- "type": "string"
1939
- },
1940
- "maxItems": 64
1941
- },
1942
- "layout": {
2196
+ "anyOf": [
2197
+ {
2198
+ "type": "object",
2199
+ "properties": {
2200
+ "fileName": {
2201
+ "type": "string",
2202
+ "minLength": 1,
2203
+ "maxLength": 255
2204
+ },
2205
+ "pageId": {
2206
+ "type": "string",
2207
+ "minLength": 1,
2208
+ "maxLength": 255
2209
+ },
2210
+ "pageName": {
2211
+ "type": "string",
2212
+ "minLength": 1,
2213
+ "maxLength": 255
2214
+ },
2215
+ "sourceLocale": {
2216
+ "type": "string",
2217
+ "minLength": 2,
2218
+ "maxLength": 16
2219
+ },
2220
+ "units": {
2221
+ "type": "array",
2222
+ "items": {
1943
2223
  "type": "object",
1944
2224
  "properties": {
1945
- "boxId": {
2225
+ "key": {
1946
2226
  "type": "string",
1947
2227
  "minLength": 1,
1948
2228
  "maxLength": 255
1949
2229
  },
1950
- "frameId": {
2230
+ "structuralPath": {
1951
2231
  "type": "string",
1952
2232
  "minLength": 1,
1953
- "maxLength": 255
2233
+ "maxLength": 1024
2234
+ },
2235
+ "value": {
2236
+ "type": "string"
2237
+ },
2238
+ "displayPath": {
2239
+ "type": "array",
2240
+ "items": {
2241
+ "type": "string"
2242
+ },
2243
+ "maxItems": 64
1954
2244
  },
1955
- "rect": {
2245
+ "layout": {
1956
2246
  "type": "object",
1957
2247
  "properties": {
1958
- "x": {
1959
- "type": "number"
2248
+ "boxId": {
2249
+ "type": "string",
2250
+ "minLength": 1,
2251
+ "maxLength": 255
1960
2252
  },
1961
- "y": {
1962
- "type": "number"
2253
+ "frameId": {
2254
+ "type": "string",
2255
+ "minLength": 1,
2256
+ "maxLength": 255
2257
+ },
2258
+ "rect": {
2259
+ "type": "object",
2260
+ "properties": {
2261
+ "x": {
2262
+ "type": "number"
2263
+ },
2264
+ "y": {
2265
+ "type": "number"
2266
+ },
2267
+ "width": {
2268
+ "type": "number"
2269
+ },
2270
+ "height": {
2271
+ "type": "number"
2272
+ }
2273
+ },
2274
+ "required": ["x", "y", "width", "height"],
2275
+ "additionalProperties": false
2276
+ },
2277
+ "render": {
2278
+ "type": "object",
2279
+ "properties": {
2280
+ "x": {
2281
+ "type": "number"
2282
+ },
2283
+ "y": {
2284
+ "type": "number"
2285
+ },
2286
+ "width": {
2287
+ "type": "number"
2288
+ },
2289
+ "height": {
2290
+ "type": "number"
2291
+ }
2292
+ },
2293
+ "required": ["x", "y", "width", "height"],
2294
+ "additionalProperties": false
2295
+ },
2296
+ "room": {
2297
+ "type": "object",
2298
+ "properties": {
2299
+ "left": {
2300
+ "type": "number",
2301
+ "minimum": 0
2302
+ },
2303
+ "right": {
2304
+ "type": "number",
2305
+ "minimum": 0
2306
+ },
2307
+ "up": {
2308
+ "type": "number",
2309
+ "minimum": 0
2310
+ },
2311
+ "down": {
2312
+ "type": "number",
2313
+ "minimum": 0
2314
+ }
2315
+ },
2316
+ "required": ["left", "right", "up", "down"],
2317
+ "additionalProperties": false
2318
+ },
2319
+ "autoResize": {
2320
+ "type": "string",
2321
+ "enum": [
2322
+ "NONE",
2323
+ "HEIGHT",
2324
+ "WIDTH_AND_HEIGHT",
2325
+ "TRUNCATE"
2326
+ ]
2327
+ },
2328
+ "textAlignHorizontal": {
2329
+ "type": "string",
2330
+ "enum": [
2331
+ "LEFT",
2332
+ "CENTER",
2333
+ "RIGHT",
2334
+ "JUSTIFIED"
2335
+ ]
1963
2336
  },
1964
- "width": {
2337
+ "baseFontPt": {
1965
2338
  "type": "number"
1966
2339
  },
1967
- "height": {
2340
+ "equivClass": {
2341
+ "type": "string",
2342
+ "maxLength": 255
2343
+ },
2344
+ "sizeRank": {
1968
2345
  "type": "number"
1969
2346
  }
1970
2347
  },
1971
- "required": ["x", "y", "width", "height"]
1972
- },
1973
- "autoResize": {
1974
- "type": "string",
1975
- "enum": [
1976
- "NONE",
1977
- "HEIGHT",
1978
- "WIDTH_AND_HEIGHT",
1979
- "TRUNCATE"
1980
- ]
1981
- },
1982
- "baseFontPt": {
1983
- "type": "number"
1984
- },
1985
- "equivClass": {
1986
- "type": "string",
1987
- "maxLength": 255
2348
+ "required": ["boxId"],
2349
+ "additionalProperties": false
1988
2350
  },
1989
- "sizeRank": {
1990
- "type": "number"
1991
- }
1992
- },
1993
- "required": ["boxId"],
1994
- "additionalProperties": false
1995
- },
1996
- "styleRuns": {
1997
- "type": "array",
1998
- "items": {
1999
- "type": "object",
2000
- "properties": {
2001
- "start": {
2002
- "type": "integer",
2003
- "minimum": 0
2004
- },
2005
- "end": {
2006
- "type": "integer",
2007
- "minimum": 0
2008
- },
2009
- "fontName": {
2351
+ "styleRuns": {
2352
+ "type": "array",
2353
+ "items": {
2010
2354
  "type": "object",
2011
2355
  "properties": {
2012
- "family": {
2013
- "type": "string"
2356
+ "start": {
2357
+ "type": "integer",
2358
+ "minimum": 0
2014
2359
  },
2015
- "style": {
2016
- "type": "string"
2017
- }
2018
- },
2019
- "required": ["family", "style"],
2020
- "additionalProperties": false
2021
- },
2022
- "fontSize": {
2023
- "type": "number"
2024
- },
2025
- "textDecoration": {
2026
- "type": "string"
2027
- },
2028
- "textCase": {
2029
- "type": "string"
2030
- },
2031
- "letterSpacing": {
2032
- "type": "object",
2033
- "properties": {
2034
- "value": {
2360
+ "end": {
2361
+ "type": "integer",
2362
+ "minimum": 0
2363
+ },
2364
+ "fontName": {
2365
+ "type": "object",
2366
+ "properties": {
2367
+ "family": {
2368
+ "type": "string"
2369
+ },
2370
+ "style": {
2371
+ "type": "string"
2372
+ }
2373
+ },
2374
+ "required": ["family", "style"],
2375
+ "additionalProperties": false
2376
+ },
2377
+ "fontSize": {
2035
2378
  "type": "number"
2036
2379
  },
2037
- "unit": {
2380
+ "textDecoration": {
2381
+ "type": "string"
2382
+ },
2383
+ "textCase": {
2038
2384
  "type": "string"
2385
+ },
2386
+ "letterSpacing": {
2387
+ "type": "object",
2388
+ "properties": {
2389
+ "value": {
2390
+ "type": "number"
2391
+ },
2392
+ "unit": {
2393
+ "type": "string"
2394
+ }
2395
+ },
2396
+ "required": ["value", "unit"],
2397
+ "additionalProperties": false
2398
+ },
2399
+ "lineHeight": {
2400
+ "type": "object",
2401
+ "properties": {
2402
+ "value": {
2403
+ "type": "number"
2404
+ },
2405
+ "unit": {
2406
+ "type": "string"
2407
+ }
2408
+ },
2409
+ "required": ["unit"],
2410
+ "additionalProperties": false
2411
+ },
2412
+ "fills": {
2413
+ "type": "array",
2414
+ "items": {
2415
+ "type": "object",
2416
+ "additionalProperties": {}
2417
+ }
2418
+ },
2419
+ "hyperlink": {
2420
+ "type": ["object", "null"],
2421
+ "additionalProperties": {}
2039
2422
  }
2040
2423
  },
2041
- "required": ["value", "unit"],
2424
+ "required": ["start", "end"],
2042
2425
  "additionalProperties": false
2043
2426
  },
2044
- "lineHeight": {
2045
- "type": "object",
2046
- "properties": {
2047
- "value": {
2427
+ "maxItems": 512
2428
+ },
2429
+ "instanceTextOrigin": {
2430
+ "type": "string",
2431
+ "enum": ["inherited", "overridden"]
2432
+ }
2433
+ },
2434
+ "required": [
2435
+ "key",
2436
+ "structuralPath",
2437
+ "value",
2438
+ "displayPath"
2439
+ ],
2440
+ "additionalProperties": false
2441
+ },
2442
+ "maxItems": 20000
2443
+ },
2444
+ "skipped": {
2445
+ "type": "array",
2446
+ "items": {
2447
+ "type": "object",
2448
+ "properties": {
2449
+ "key": {
2450
+ "type": "string",
2451
+ "minLength": 1,
2452
+ "maxLength": 255
2453
+ },
2454
+ "structuralPath": {
2455
+ "type": "string",
2456
+ "minLength": 1,
2457
+ "maxLength": 1024
2458
+ },
2459
+ "displayPath": {
2460
+ "type": "array",
2461
+ "items": {
2462
+ "type": "string"
2463
+ },
2464
+ "maxItems": 64
2465
+ },
2466
+ "reason": {
2467
+ "type": "string",
2468
+ "enum": [
2469
+ "not_text_node",
2470
+ "empty_text",
2471
+ "hidden_layer",
2472
+ "missing_characters",
2473
+ "in_component_master"
2474
+ ]
2475
+ },
2476
+ "details": {
2477
+ "type": "object",
2478
+ "additionalProperties": {
2479
+ "anyOf": [
2480
+ {
2481
+ "type": "string"
2482
+ },
2483
+ {
2048
2484
  "type": "number"
2049
2485
  },
2050
- "unit": {
2051
- "type": "string"
2486
+ {
2487
+ "type": "boolean"
2488
+ },
2489
+ {
2490
+ "type": "null"
2052
2491
  }
2053
- },
2054
- "required": ["unit"],
2055
- "additionalProperties": false
2056
- },
2057
- "fills": {
2058
- "type": "array",
2059
- "items": {
2060
- "type": "object",
2061
- "additionalProperties": {}
2062
- }
2063
- },
2064
- "hyperlink": {
2065
- "type": ["object", "null"],
2066
- "additionalProperties": {}
2492
+ ]
2067
2493
  }
2068
- },
2069
- "required": ["start", "end"],
2070
- "additionalProperties": false
2494
+ }
2071
2495
  },
2072
- "maxItems": 512
2496
+ "required": [
2497
+ "key",
2498
+ "structuralPath",
2499
+ "displayPath",
2500
+ "reason"
2501
+ ],
2502
+ "additionalProperties": false
2073
2503
  },
2074
- "instanceTextOrigin": {
2075
- "type": "string",
2076
- "enum": ["inherited", "overridden"]
2077
- }
2504
+ "maxItems": 20000
2078
2505
  },
2079
- "required": [
2080
- "nodeId",
2081
- "structuralPath",
2082
- "value",
2083
- "displayPath"
2084
- ],
2085
- "additionalProperties": false
2086
- },
2087
- "maxItems": 20000
2088
- },
2089
- "skipped": {
2090
- "type": "array",
2091
- "items": {
2092
- "type": "object",
2093
- "properties": {
2094
- "nodeId": {
2506
+ "allIds": {
2507
+ "type": "array",
2508
+ "items": {
2095
2509
  "type": "string",
2096
2510
  "minLength": 1,
2097
2511
  "maxLength": 255
2098
2512
  },
2099
- "structuralPath": {
2100
- "type": "string",
2101
- "minLength": 1,
2102
- "maxLength": 1024
2103
- },
2104
- "displayPath": {
2105
- "type": "array",
2106
- "items": {
2107
- "type": "string"
2108
- },
2109
- "maxItems": 64
2110
- },
2111
- "reason": {
2112
- "type": "string",
2113
- "enum": [
2114
- "not_text_node",
2115
- "empty_text",
2116
- "hidden_layer",
2117
- "missing_characters",
2118
- "in_component_master"
2119
- ]
2120
- },
2121
- "details": {
2513
+ "maxItems": 500
2514
+ }
2515
+ },
2516
+ "required": ["fileName", "pageId", "pageName", "units"],
2517
+ "additionalProperties": false
2518
+ },
2519
+ {
2520
+ "type": "object",
2521
+ "properties": {
2522
+ "projectStamp": {
2523
+ "type": "string",
2524
+ "minLength": 1,
2525
+ "maxLength": 255
2526
+ },
2527
+ "compId": {
2528
+ "type": "string",
2529
+ "minLength": 1,
2530
+ "maxLength": 255
2531
+ },
2532
+ "compName": {
2533
+ "type": "string",
2534
+ "minLength": 1,
2535
+ "maxLength": 255
2536
+ },
2537
+ "sourceLocale": {
2538
+ "type": "string",
2539
+ "minLength": 2,
2540
+ "maxLength": 16
2541
+ },
2542
+ "units": {
2543
+ "type": "array",
2544
+ "items": {
2122
2545
  "type": "object",
2123
- "additionalProperties": {
2124
- "anyOf": [
2125
- {
2546
+ "properties": {
2547
+ "key": {
2548
+ "type": "string",
2549
+ "minLength": 1,
2550
+ "maxLength": 255
2551
+ },
2552
+ "structuralPath": {
2553
+ "type": "string",
2554
+ "minLength": 1,
2555
+ "maxLength": 1024
2556
+ },
2557
+ "value": {
2558
+ "type": "string"
2559
+ },
2560
+ "displayPath": {
2561
+ "type": "array",
2562
+ "items": {
2126
2563
  "type": "string"
2127
2564
  },
2128
- {
2129
- "type": "number"
2565
+ "maxItems": 64
2566
+ },
2567
+ "styleRuns": {
2568
+ "type": "array",
2569
+ "items": {
2570
+ "type": "object",
2571
+ "properties": {
2572
+ "start": {
2573
+ "type": "integer",
2574
+ "minimum": 0
2575
+ },
2576
+ "end": {
2577
+ "type": "integer",
2578
+ "minimum": 0
2579
+ },
2580
+ "style": {
2581
+ "type": "object",
2582
+ "properties": {
2583
+ "font": {
2584
+ "type": "string",
2585
+ "maxLength": 255
2586
+ },
2587
+ "fontSize": {
2588
+ "type": "number"
2589
+ },
2590
+ "fillColor": {
2591
+ "type": "array",
2592
+ "prefixItems": [
2593
+ {
2594
+ "type": "number"
2595
+ },
2596
+ {
2597
+ "type": "number"
2598
+ },
2599
+ {
2600
+ "type": "number"
2601
+ }
2602
+ ]
2603
+ },
2604
+ "applyFill": {
2605
+ "type": "boolean"
2606
+ },
2607
+ "fauxBold": {
2608
+ "type": "boolean"
2609
+ },
2610
+ "fauxItalic": {
2611
+ "type": "boolean"
2612
+ },
2613
+ "tracking": {
2614
+ "type": "number"
2615
+ },
2616
+ "applyStroke": {
2617
+ "type": "boolean"
2618
+ },
2619
+ "strokeColor": {
2620
+ "type": "array",
2621
+ "prefixItems": [
2622
+ {
2623
+ "type": "number"
2624
+ },
2625
+ {
2626
+ "type": "number"
2627
+ },
2628
+ {
2629
+ "type": "number"
2630
+ }
2631
+ ]
2632
+ },
2633
+ "strokeWidth": {
2634
+ "type": "number"
2635
+ }
2636
+ },
2637
+ "additionalProperties": false
2638
+ }
2639
+ },
2640
+ "required": ["start", "end", "style"],
2641
+ "additionalProperties": false
2130
2642
  },
2131
- {
2132
- "type": "boolean"
2643
+ "maxItems": 512
2644
+ },
2645
+ "layout": {
2646
+ "type": "object",
2647
+ "properties": {
2648
+ "boxText": {
2649
+ "type": "boolean"
2650
+ },
2651
+ "boxSize": {
2652
+ "type": "array",
2653
+ "prefixItems": [
2654
+ {
2655
+ "type": "number",
2656
+ "minimum": 0
2657
+ },
2658
+ {
2659
+ "type": "number",
2660
+ "minimum": 0
2661
+ }
2662
+ ]
2663
+ },
2664
+ "fontSize": {
2665
+ "type": "number",
2666
+ "minimum": 0
2667
+ }
2668
+ },
2669
+ "required": ["boxText"],
2670
+ "additionalProperties": false
2671
+ }
2672
+ },
2673
+ "required": [
2674
+ "key",
2675
+ "structuralPath",
2676
+ "value",
2677
+ "displayPath"
2678
+ ],
2679
+ "additionalProperties": false
2680
+ },
2681
+ "maxItems": 20000
2682
+ },
2683
+ "skipped": {
2684
+ "type": "array",
2685
+ "items": {
2686
+ "type": "object",
2687
+ "properties": {
2688
+ "key": {
2689
+ "type": "string",
2690
+ "minLength": 1,
2691
+ "maxLength": 255
2692
+ },
2693
+ "structuralPath": {
2694
+ "type": "string",
2695
+ "minLength": 1,
2696
+ "maxLength": 1024
2697
+ },
2698
+ "displayPath": {
2699
+ "type": "array",
2700
+ "items": {
2701
+ "type": "string"
2133
2702
  },
2134
- {
2135
- "type": "null"
2703
+ "maxItems": 64
2704
+ },
2705
+ "reason": {
2706
+ "type": "string",
2707
+ "enum": [
2708
+ "not_text_layer",
2709
+ "empty_text",
2710
+ "expression_driven",
2711
+ "essential_graphics"
2712
+ ]
2713
+ },
2714
+ "details": {
2715
+ "type": "object",
2716
+ "additionalProperties": {
2717
+ "anyOf": [
2718
+ {
2719
+ "type": "string"
2720
+ },
2721
+ {
2722
+ "type": "number"
2723
+ },
2724
+ {
2725
+ "type": "boolean"
2726
+ },
2727
+ {
2728
+ "type": "null"
2729
+ }
2730
+ ]
2136
2731
  }
2137
- ]
2138
- }
2139
- }
2732
+ }
2733
+ },
2734
+ "required": [
2735
+ "key",
2736
+ "structuralPath",
2737
+ "displayPath",
2738
+ "reason"
2739
+ ],
2740
+ "additionalProperties": false
2741
+ },
2742
+ "maxItems": 20000
2140
2743
  },
2141
- "required": [
2142
- "nodeId",
2143
- "structuralPath",
2144
- "displayPath",
2145
- "reason"
2146
- ],
2147
- "additionalProperties": false
2148
- },
2149
- "maxItems": 20000
2150
- },
2151
- "allPageNames": {
2152
- "type": "array",
2153
- "items": {
2154
- "type": "string",
2155
- "minLength": 1,
2156
- "maxLength": 255
2744
+ "allIds": {
2745
+ "type": "array",
2746
+ "items": {
2747
+ "type": "string",
2748
+ "minLength": 1,
2749
+ "maxLength": 255
2750
+ },
2751
+ "maxItems": 500
2752
+ }
2157
2753
  },
2158
- "maxItems": 500
2754
+ "required": ["projectStamp", "compId", "compName", "units"],
2755
+ "additionalProperties": false
2159
2756
  }
2160
- },
2161
- "required": ["figmaFileName", "pageName", "units"],
2162
- "additionalProperties": false
2757
+ ]
2163
2758
  }
2164
2759
  }
2165
2760
  }
2166
2761
  },
2167
2762
  "responses": {
2168
2763
  "200": {
2169
- "description": "Figma plugin result",
2764
+ "description": "Plugin command result",
2170
2765
  "content": {
2171
2766
  "application/json": {
2172
2767
  "schema": {
2173
- "type": "object",
2174
- "properties": {
2175
- "fileId": {
2176
- "type": "string"
2177
- },
2178
- "versionId": {
2179
- "type": "string"
2180
- },
2181
- "sourceLocale": {
2182
- "type": "string"
2183
- },
2184
- "unitCount": {
2185
- "type": "number"
2186
- },
2187
- "skippedCount": {
2188
- "type": "number"
2768
+ "anyOf": [
2769
+ {
2770
+ "type": "object",
2771
+ "properties": {
2772
+ "fileId": {
2773
+ "type": "string"
2774
+ },
2775
+ "versionId": {
2776
+ "type": "string"
2777
+ },
2778
+ "sourceLocale": {
2779
+ "type": "string"
2780
+ },
2781
+ "unitCount": {
2782
+ "type": "number"
2783
+ },
2784
+ "skippedCount": {
2785
+ "type": "number"
2786
+ },
2787
+ "movedFrom": {
2788
+ "type": "string"
2789
+ }
2790
+ },
2791
+ "required": [
2792
+ "fileId",
2793
+ "versionId",
2794
+ "sourceLocale",
2795
+ "unitCount",
2796
+ "skippedCount"
2797
+ ]
2189
2798
  },
2190
- "movedFrom": {
2191
- "type": "string"
2799
+ {
2800
+ "type": "object",
2801
+ "properties": {
2802
+ "fileId": {
2803
+ "type": "string"
2804
+ },
2805
+ "versionId": {
2806
+ "type": "string"
2807
+ },
2808
+ "sourceLocale": {
2809
+ "type": "string"
2810
+ },
2811
+ "unitCount": {
2812
+ "type": "number"
2813
+ },
2814
+ "skippedCount": {
2815
+ "type": "number"
2816
+ },
2817
+ "movedFrom": {
2818
+ "type": "string"
2819
+ }
2820
+ },
2821
+ "required": [
2822
+ "fileId",
2823
+ "versionId",
2824
+ "sourceLocale",
2825
+ "unitCount",
2826
+ "skippedCount"
2827
+ ]
2192
2828
  }
2193
- },
2194
- "required": [
2195
- "fileId",
2196
- "versionId",
2197
- "sourceLocale",
2198
- "unitCount",
2199
- "skippedCount"
2200
2829
  ]
2201
2830
  }
2202
2831
  }
@@ -2340,12 +2969,12 @@
2340
2969
  }
2341
2970
  }
2342
2971
  },
2343
- "/v1/integrations/figma-plugin/import-translations": {
2972
+ "/v1/integrations/plugins/{provider}/import-translations": {
2344
2973
  "post": {
2345
- "operationId": "figmaPluginImportTranslations",
2974
+ "operationId": "pluginImportTranslations",
2346
2975
  "x-internal": true,
2347
- "summary": "Figma plugin import-translations",
2348
- "description": "Run the Figma plugin import-translations command.",
2976
+ "summary": "Plugin import-translations",
2977
+ "description": "Run the import-translations command for a design-tool plugin.",
2349
2978
  "tags": ["Integrations"],
2350
2979
  "security": [
2351
2980
  {
@@ -2356,6 +2985,15 @@
2356
2985
  }
2357
2986
  ],
2358
2987
  "parameters": [
2988
+ {
2989
+ "schema": {
2990
+ "type": "string",
2991
+ "enum": ["figma", "after-effects"]
2992
+ },
2993
+ "required": true,
2994
+ "name": "provider",
2995
+ "in": "path"
2996
+ },
2359
2997
  {
2360
2998
  "schema": {
2361
2999
  "$ref": "#/components/schemas/ApiVersion"
@@ -2381,73 +3019,266 @@
2381
3019
  "content": {
2382
3020
  "application/json": {
2383
3021
  "schema": {
2384
- "type": "object",
2385
- "properties": {
2386
- "figmaFileName": {
2387
- "type": "string",
2388
- "minLength": 1,
2389
- "maxLength": 255
2390
- },
2391
- "pageName": {
2392
- "type": "string",
2393
- "minLength": 1,
2394
- "maxLength": 255
2395
- },
2396
- "locale": {
2397
- "type": "string",
2398
- "minLength": 2,
2399
- "maxLength": 16
2400
- },
2401
- "versionId": {
2402
- "type": "string",
2403
- "minLength": 1,
2404
- "maxLength": 255
3022
+ "anyOf": [
3023
+ {
3024
+ "type": "object",
3025
+ "properties": {
3026
+ "fileName": {
3027
+ "type": "string",
3028
+ "minLength": 1,
3029
+ "maxLength": 255
3030
+ },
3031
+ "pageId": {
3032
+ "type": "string",
3033
+ "minLength": 1,
3034
+ "maxLength": 255
3035
+ },
3036
+ "locale": {
3037
+ "type": "string",
3038
+ "minLength": 2,
3039
+ "maxLength": 16
3040
+ },
3041
+ "versionId": {
3042
+ "type": "string",
3043
+ "minLength": 1,
3044
+ "maxLength": 255
3045
+ },
3046
+ "translations": {
3047
+ "type": "object",
3048
+ "additionalProperties": {
3049
+ "type": "string"
3050
+ }
3051
+ }
3052
+ },
3053
+ "required": [
3054
+ "fileName",
3055
+ "pageId",
3056
+ "locale",
3057
+ "versionId",
3058
+ "translations"
3059
+ ],
3060
+ "additionalProperties": false
2405
3061
  },
2406
- "translations": {
3062
+ {
2407
3063
  "type": "object",
2408
- "additionalProperties": {
2409
- "type": "string"
2410
- }
3064
+ "properties": {
3065
+ "projectStamp": {
3066
+ "type": "string",
3067
+ "minLength": 1,
3068
+ "maxLength": 255
3069
+ },
3070
+ "compId": {
3071
+ "type": "string",
3072
+ "minLength": 1,
3073
+ "maxLength": 255
3074
+ },
3075
+ "locale": {
3076
+ "type": "string",
3077
+ "minLength": 2,
3078
+ "maxLength": 16
3079
+ },
3080
+ "versionId": {
3081
+ "type": "string",
3082
+ "minLength": 1,
3083
+ "maxLength": 255
3084
+ },
3085
+ "translations": {
3086
+ "type": "object",
3087
+ "additionalProperties": {
3088
+ "type": "object",
3089
+ "properties": {
3090
+ "text": {
3091
+ "type": "string"
3092
+ },
3093
+ "styleRuns": {
3094
+ "type": "array",
3095
+ "items": {
3096
+ "type": "object",
3097
+ "properties": {
3098
+ "start": {
3099
+ "type": "integer",
3100
+ "minimum": 0
3101
+ },
3102
+ "end": {
3103
+ "type": "integer",
3104
+ "minimum": 0
3105
+ },
3106
+ "style": {
3107
+ "type": "object",
3108
+ "properties": {
3109
+ "font": {
3110
+ "type": "string",
3111
+ "maxLength": 255
3112
+ },
3113
+ "fontSize": {
3114
+ "type": "number"
3115
+ },
3116
+ "fillColor": {
3117
+ "type": "array",
3118
+ "prefixItems": [
3119
+ {
3120
+ "type": "number"
3121
+ },
3122
+ {
3123
+ "type": "number"
3124
+ },
3125
+ {
3126
+ "type": "number"
3127
+ }
3128
+ ]
3129
+ },
3130
+ "applyFill": {
3131
+ "type": "boolean"
3132
+ },
3133
+ "fauxBold": {
3134
+ "type": "boolean"
3135
+ },
3136
+ "fauxItalic": {
3137
+ "type": "boolean"
3138
+ },
3139
+ "tracking": {
3140
+ "type": "number"
3141
+ },
3142
+ "applyStroke": {
3143
+ "type": "boolean"
3144
+ },
3145
+ "strokeColor": {
3146
+ "type": "array",
3147
+ "prefixItems": [
3148
+ {
3149
+ "type": "number"
3150
+ },
3151
+ {
3152
+ "type": "number"
3153
+ },
3154
+ {
3155
+ "type": "number"
3156
+ }
3157
+ ]
3158
+ },
3159
+ "strokeWidth": {
3160
+ "type": "number"
3161
+ }
3162
+ },
3163
+ "additionalProperties": false
3164
+ }
3165
+ },
3166
+ "required": ["start", "end", "style"],
3167
+ "additionalProperties": false
3168
+ },
3169
+ "maxItems": 512
3170
+ }
3171
+ },
3172
+ "required": ["text"],
3173
+ "additionalProperties": false
3174
+ }
3175
+ }
3176
+ },
3177
+ "required": [
3178
+ "projectStamp",
3179
+ "compId",
3180
+ "locale",
3181
+ "versionId",
3182
+ "translations"
3183
+ ],
3184
+ "additionalProperties": false
2411
3185
  }
2412
- },
2413
- "required": [
2414
- "figmaFileName",
2415
- "pageName",
2416
- "locale",
2417
- "versionId",
2418
- "translations"
2419
- ],
2420
- "additionalProperties": false
3186
+ ]
2421
3187
  }
2422
3188
  }
2423
3189
  }
2424
3190
  },
2425
3191
  "responses": {
2426
3192
  "200": {
2427
- "description": "Figma plugin result",
3193
+ "description": "Plugin command result",
2428
3194
  "content": {
2429
3195
  "application/json": {
2430
3196
  "schema": {
2431
- "type": "object",
2432
- "properties": {
2433
- "saved": {
2434
- "type": "boolean"
2435
- },
2436
- "versionId": {
2437
- "type": "string"
2438
- },
2439
- "importedCount": {
2440
- "type": "number"
3197
+ "anyOf": [
3198
+ {
3199
+ "type": "object",
3200
+ "properties": {
3201
+ "saved": {
3202
+ "type": "boolean"
3203
+ },
3204
+ "versionId": {
3205
+ "type": "string"
3206
+ },
3207
+ "importedCount": {
3208
+ "type": "number"
3209
+ },
3210
+ "unmatchedCount": {
3211
+ "type": "number"
3212
+ },
3213
+ "warnings": {
3214
+ "type": "array",
3215
+ "items": {
3216
+ "type": "object",
3217
+ "properties": {
3218
+ "key": {
3219
+ "type": "string"
3220
+ },
3221
+ "reason": {
3222
+ "type": "string"
3223
+ },
3224
+ "detail": {
3225
+ "type": "string"
3226
+ }
3227
+ },
3228
+ "required": ["key", "reason"]
3229
+ }
3230
+ }
3231
+ },
3232
+ "required": [
3233
+ "saved",
3234
+ "versionId",
3235
+ "importedCount",
3236
+ "unmatchedCount",
3237
+ "warnings"
3238
+ ]
2441
3239
  },
2442
- "unmatchedCount": {
2443
- "type": "number"
3240
+ {
3241
+ "type": "object",
3242
+ "properties": {
3243
+ "saved": {
3244
+ "type": "boolean"
3245
+ },
3246
+ "versionId": {
3247
+ "type": "string"
3248
+ },
3249
+ "importedCount": {
3250
+ "type": "number"
3251
+ },
3252
+ "unmatchedCount": {
3253
+ "type": "number"
3254
+ },
3255
+ "warnings": {
3256
+ "type": "array",
3257
+ "items": {
3258
+ "type": "object",
3259
+ "properties": {
3260
+ "key": {
3261
+ "type": "string"
3262
+ },
3263
+ "reason": {
3264
+ "type": "string"
3265
+ },
3266
+ "detail": {
3267
+ "type": "string"
3268
+ }
3269
+ },
3270
+ "required": ["key", "reason"]
3271
+ }
3272
+ }
3273
+ },
3274
+ "required": [
3275
+ "saved",
3276
+ "versionId",
3277
+ "importedCount",
3278
+ "unmatchedCount",
3279
+ "warnings"
3280
+ ]
2444
3281
  }
2445
- },
2446
- "required": [
2447
- "saved",
2448
- "versionId",
2449
- "importedCount",
2450
- "unmatchedCount"
2451
3282
  ]
2452
3283
  }
2453
3284
  }
@@ -2591,12 +3422,12 @@
2591
3422
  }
2592
3423
  }
2593
3424
  },
2594
- "/v1/integrations/figma-plugin/enqueue": {
3425
+ "/v1/integrations/plugins/{provider}/enqueue": {
2595
3426
  "post": {
2596
- "operationId": "figmaPluginEnqueue",
3427
+ "operationId": "pluginEnqueue",
2597
3428
  "x-internal": true,
2598
- "summary": "Figma plugin enqueue",
2599
- "description": "Run the Figma plugin enqueue command.",
3429
+ "summary": "Plugin enqueue",
3430
+ "description": "Run the enqueue command for a design-tool plugin.",
2600
3431
  "tags": ["Integrations"],
2601
3432
  "security": [
2602
3433
  {
@@ -2607,6 +3438,15 @@
2607
3438
  }
2608
3439
  ],
2609
3440
  "parameters": [
3441
+ {
3442
+ "schema": {
3443
+ "type": "string",
3444
+ "enum": ["figma", "after-effects"]
3445
+ },
3446
+ "required": true,
3447
+ "name": "provider",
3448
+ "in": "path"
3449
+ },
2610
3450
  {
2611
3451
  "schema": {
2612
3452
  "$ref": "#/components/schemas/ApiVersion"
@@ -2632,72 +3472,141 @@
2632
3472
  "content": {
2633
3473
  "application/json": {
2634
3474
  "schema": {
2635
- "type": "object",
2636
- "properties": {
2637
- "figmaFileName": {
2638
- "type": "string",
2639
- "minLength": 1,
2640
- "maxLength": 255
2641
- },
2642
- "pageName": {
2643
- "type": "string",
2644
- "minLength": 1,
2645
- "maxLength": 255
2646
- },
2647
- "targetLocales": {
2648
- "type": "array",
2649
- "items": {
2650
- "type": "string",
2651
- "minLength": 2,
2652
- "maxLength": 16
3475
+ "anyOf": [
3476
+ {
3477
+ "type": "object",
3478
+ "properties": {
3479
+ "fileName": {
3480
+ "type": "string",
3481
+ "minLength": 1,
3482
+ "maxLength": 255
3483
+ },
3484
+ "pageId": {
3485
+ "type": "string",
3486
+ "minLength": 1,
3487
+ "maxLength": 255
3488
+ },
3489
+ "targetLocales": {
3490
+ "type": "array",
3491
+ "items": {
3492
+ "type": "string",
3493
+ "minLength": 2,
3494
+ "maxLength": 16
3495
+ },
3496
+ "minItems": 1,
3497
+ "maxItems": 64
3498
+ },
3499
+ "sourceLocale": {
3500
+ "type": "string",
3501
+ "minLength": 2,
3502
+ "maxLength": 16
3503
+ },
3504
+ "force": {
3505
+ "type": "boolean"
3506
+ }
2653
3507
  },
2654
- "minItems": 1,
2655
- "maxItems": 64
3508
+ "required": ["fileName", "pageId", "targetLocales"],
3509
+ "additionalProperties": false
2656
3510
  },
2657
- "sourceLocale": {
2658
- "type": "string",
2659
- "minLength": 2,
2660
- "maxLength": 16
2661
- },
2662
- "force": {
2663
- "type": "boolean"
3511
+ {
3512
+ "type": "object",
3513
+ "properties": {
3514
+ "projectStamp": {
3515
+ "type": "string",
3516
+ "minLength": 1,
3517
+ "maxLength": 255
3518
+ },
3519
+ "compId": {
3520
+ "type": "string",
3521
+ "minLength": 1,
3522
+ "maxLength": 255
3523
+ },
3524
+ "targetLocales": {
3525
+ "type": "array",
3526
+ "items": {
3527
+ "type": "string",
3528
+ "minLength": 2,
3529
+ "maxLength": 16
3530
+ },
3531
+ "minItems": 1,
3532
+ "maxItems": 64
3533
+ },
3534
+ "sourceLocale": {
3535
+ "type": "string",
3536
+ "minLength": 2,
3537
+ "maxLength": 16
3538
+ },
3539
+ "force": {
3540
+ "type": "boolean"
3541
+ }
3542
+ },
3543
+ "required": ["projectStamp", "compId", "targetLocales"],
3544
+ "additionalProperties": false
2664
3545
  }
2665
- },
2666
- "required": ["figmaFileName", "pageName", "targetLocales"],
2667
- "additionalProperties": false
3546
+ ]
2668
3547
  }
2669
3548
  }
2670
3549
  }
2671
3550
  },
2672
3551
  "responses": {
2673
3552
  "200": {
2674
- "description": "Figma plugin result",
3553
+ "description": "Plugin command result",
2675
3554
  "content": {
2676
3555
  "application/json": {
2677
3556
  "schema": {
2678
- "type": "object",
2679
- "properties": {
2680
- "accepted": {
2681
- "type": "boolean"
2682
- },
2683
- "sourceLocale": {
2684
- "type": "string"
2685
- },
2686
- "targetLocales": {
2687
- "type": "array",
2688
- "items": {
2689
- "type": "string"
2690
- }
3557
+ "anyOf": [
3558
+ {
3559
+ "type": "object",
3560
+ "properties": {
3561
+ "accepted": {
3562
+ "type": "boolean"
3563
+ },
3564
+ "sourceLocale": {
3565
+ "type": "string"
3566
+ },
3567
+ "targetLocales": {
3568
+ "type": "array",
3569
+ "items": {
3570
+ "type": "string"
3571
+ }
3572
+ },
3573
+ "versionId": {
3574
+ "type": "string"
3575
+ }
3576
+ },
3577
+ "required": [
3578
+ "accepted",
3579
+ "sourceLocale",
3580
+ "targetLocales",
3581
+ "versionId"
3582
+ ]
2691
3583
  },
2692
- "versionId": {
2693
- "type": "string"
3584
+ {
3585
+ "type": "object",
3586
+ "properties": {
3587
+ "accepted": {
3588
+ "type": "boolean"
3589
+ },
3590
+ "sourceLocale": {
3591
+ "type": "string"
3592
+ },
3593
+ "targetLocales": {
3594
+ "type": "array",
3595
+ "items": {
3596
+ "type": "string"
3597
+ }
3598
+ },
3599
+ "versionId": {
3600
+ "type": "string"
3601
+ }
3602
+ },
3603
+ "required": [
3604
+ "accepted",
3605
+ "sourceLocale",
3606
+ "targetLocales",
3607
+ "versionId"
3608
+ ]
2694
3609
  }
2695
- },
2696
- "required": [
2697
- "accepted",
2698
- "sourceLocale",
2699
- "targetLocales",
2700
- "versionId"
2701
3610
  ]
2702
3611
  }
2703
3612
  }
@@ -2841,12 +3750,12 @@
2841
3750
  }
2842
3751
  }
2843
3752
  },
2844
- "/v1/integrations/figma-plugin/status": {
3753
+ "/v1/integrations/plugins/{provider}/status": {
2845
3754
  "post": {
2846
- "operationId": "figmaPluginStatus",
3755
+ "operationId": "pluginStatus",
2847
3756
  "x-internal": true,
2848
- "summary": "Figma plugin status",
2849
- "description": "Run the Figma plugin status command.",
3757
+ "summary": "Plugin status",
3758
+ "description": "Run the status command for a design-tool plugin.",
2850
3759
  "tags": ["Integrations"],
2851
3760
  "security": [
2852
3761
  {
@@ -2859,11 +3768,20 @@
2859
3768
  "parameters": [
2860
3769
  {
2861
3770
  "schema": {
2862
- "$ref": "#/components/schemas/ApiVersion"
3771
+ "type": "string",
3772
+ "enum": ["figma", "after-effects"]
2863
3773
  },
2864
- "required": false,
2865
- "description": "API contract version. Defaults to the oldest supported version.",
2866
- "name": "gt-api-version",
3774
+ "required": true,
3775
+ "name": "provider",
3776
+ "in": "path"
3777
+ },
3778
+ {
3779
+ "schema": {
3780
+ "$ref": "#/components/schemas/ApiVersion"
3781
+ },
3782
+ "required": false,
3783
+ "description": "API contract version. Defaults to the oldest supported version.",
3784
+ "name": "gt-api-version",
2867
3785
  "in": "header"
2868
3786
  },
2869
3787
  {
@@ -2882,68 +3800,140 @@
2882
3800
  "content": {
2883
3801
  "application/json": {
2884
3802
  "schema": {
2885
- "type": "object",
2886
- "properties": {
2887
- "figmaFileName": {
2888
- "type": "string",
2889
- "minLength": 1,
2890
- "maxLength": 255
3803
+ "anyOf": [
3804
+ {
3805
+ "type": "object",
3806
+ "properties": {
3807
+ "fileName": {
3808
+ "type": "string",
3809
+ "minLength": 1,
3810
+ "maxLength": 255
3811
+ },
3812
+ "pageId": {
3813
+ "type": "string",
3814
+ "minLength": 1,
3815
+ "maxLength": 255
3816
+ }
3817
+ },
3818
+ "required": ["fileName", "pageId"],
3819
+ "additionalProperties": false
2891
3820
  },
2892
- "pageName": {
2893
- "type": "string",
2894
- "minLength": 1,
2895
- "maxLength": 255
3821
+ {
3822
+ "type": "object",
3823
+ "properties": {
3824
+ "projectStamp": {
3825
+ "type": "string",
3826
+ "minLength": 1,
3827
+ "maxLength": 255
3828
+ },
3829
+ "compId": {
3830
+ "type": "string",
3831
+ "minLength": 1,
3832
+ "maxLength": 255
3833
+ }
3834
+ },
3835
+ "required": ["projectStamp", "compId"],
3836
+ "additionalProperties": false
2896
3837
  }
2897
- },
2898
- "required": ["figmaFileName", "pageName"],
2899
- "additionalProperties": false
3838
+ ]
2900
3839
  }
2901
3840
  }
2902
3841
  }
2903
3842
  },
2904
3843
  "responses": {
2905
3844
  "200": {
2906
- "description": "Figma plugin result",
3845
+ "description": "Plugin command result",
2907
3846
  "content": {
2908
3847
  "application/json": {
2909
3848
  "schema": {
2910
- "type": "object",
2911
- "properties": {
2912
- "versionId": {
2913
- "type": "string"
2914
- },
2915
- "locales": {
2916
- "type": "array",
2917
- "items": {
2918
- "type": "object",
2919
- "properties": {
2920
- "locale": {
3849
+ "anyOf": [
3850
+ {
3851
+ "type": "object",
3852
+ "properties": {
3853
+ "versionId": {
3854
+ "type": "string"
3855
+ },
3856
+ "locales": {
3857
+ "type": "array",
3858
+ "items": {
2921
3859
  "type": "object",
2922
3860
  "properties": {
2923
- "code": {
2924
- "type": "string"
3861
+ "locale": {
3862
+ "type": "object",
3863
+ "properties": {
3864
+ "code": {
3865
+ "type": "string"
3866
+ },
3867
+ "name": {
3868
+ "type": "string"
3869
+ },
3870
+ "emoji": {
3871
+ "type": "string"
3872
+ }
3873
+ },
3874
+ "required": ["code", "name", "emoji"]
2925
3875
  },
2926
- "name": {
2927
- "type": "string"
3876
+ "translationProgress": {
3877
+ "type": ["number", "null"]
2928
3878
  },
2929
- "emoji": {
2930
- "type": "string"
3879
+ "done": {
3880
+ "type": "boolean"
2931
3881
  }
2932
3882
  },
2933
- "required": ["code", "name", "emoji"]
2934
- },
2935
- "translationProgress": {
2936
- "type": ["number", "null"]
2937
- },
2938
- "done": {
2939
- "type": "boolean"
3883
+ "required": [
3884
+ "locale",
3885
+ "translationProgress",
3886
+ "done"
3887
+ ]
2940
3888
  }
3889
+ }
3890
+ },
3891
+ "required": ["versionId", "locales"]
3892
+ },
3893
+ {
3894
+ "type": "object",
3895
+ "properties": {
3896
+ "versionId": {
3897
+ "type": "string"
2941
3898
  },
2942
- "required": ["locale", "translationProgress", "done"]
2943
- }
3899
+ "locales": {
3900
+ "type": "array",
3901
+ "items": {
3902
+ "type": "object",
3903
+ "properties": {
3904
+ "locale": {
3905
+ "type": "object",
3906
+ "properties": {
3907
+ "code": {
3908
+ "type": "string"
3909
+ },
3910
+ "name": {
3911
+ "type": "string"
3912
+ },
3913
+ "emoji": {
3914
+ "type": "string"
3915
+ }
3916
+ },
3917
+ "required": ["code", "name", "emoji"]
3918
+ },
3919
+ "translationProgress": {
3920
+ "type": ["number", "null"]
3921
+ },
3922
+ "done": {
3923
+ "type": "boolean"
3924
+ }
3925
+ },
3926
+ "required": [
3927
+ "locale",
3928
+ "translationProgress",
3929
+ "done"
3930
+ ]
3931
+ }
3932
+ }
3933
+ },
3934
+ "required": ["versionId", "locales"]
2944
3935
  }
2945
- },
2946
- "required": ["versionId", "locales"]
3936
+ ]
2947
3937
  }
2948
3938
  }
2949
3939
  }
@@ -3086,12 +4076,12 @@
3086
4076
  }
3087
4077
  }
3088
4078
  },
3089
- "/v1/integrations/figma-plugin/download": {
4079
+ "/v1/integrations/plugins/{provider}/download": {
3090
4080
  "post": {
3091
- "operationId": "figmaPluginDownload",
4081
+ "operationId": "pluginDownload",
3092
4082
  "x-internal": true,
3093
- "summary": "Figma plugin download",
3094
- "description": "Run the Figma plugin download command.",
4083
+ "summary": "Plugin download",
4084
+ "description": "Run the download command for a design-tool plugin.",
3095
4085
  "tags": ["Integrations"],
3096
4086
  "security": [
3097
4087
  {
@@ -3102,6 +4092,15 @@
3102
4092
  }
3103
4093
  ],
3104
4094
  "parameters": [
4095
+ {
4096
+ "schema": {
4097
+ "type": "string",
4098
+ "enum": ["figma", "after-effects"]
4099
+ },
4100
+ "required": true,
4101
+ "name": "provider",
4102
+ "in": "path"
4103
+ },
3105
4104
  {
3106
4105
  "schema": {
3107
4106
  "$ref": "#/components/schemas/ApiVersion"
@@ -3127,110 +4126,346 @@
3127
4126
  "content": {
3128
4127
  "application/json": {
3129
4128
  "schema": {
3130
- "type": "object",
3131
- "properties": {
3132
- "figmaFileName": {
3133
- "type": "string",
3134
- "minLength": 1,
3135
- "maxLength": 255
3136
- },
3137
- "pageName": {
3138
- "type": "string",
3139
- "minLength": 1,
3140
- "maxLength": 255
4129
+ "anyOf": [
4130
+ {
4131
+ "type": "object",
4132
+ "properties": {
4133
+ "fileName": {
4134
+ "type": "string",
4135
+ "minLength": 1,
4136
+ "maxLength": 255
4137
+ },
4138
+ "pageId": {
4139
+ "type": "string",
4140
+ "minLength": 1,
4141
+ "maxLength": 255
4142
+ },
4143
+ "locale": {
4144
+ "type": "string",
4145
+ "minLength": 2,
4146
+ "maxLength": 16
4147
+ }
4148
+ },
4149
+ "required": ["fileName", "pageId", "locale"],
4150
+ "additionalProperties": false
3141
4151
  },
3142
- "locale": {
3143
- "type": "string",
3144
- "minLength": 2,
3145
- "maxLength": 16
4152
+ {
4153
+ "type": "object",
4154
+ "properties": {
4155
+ "projectStamp": {
4156
+ "type": "string",
4157
+ "minLength": 1,
4158
+ "maxLength": 255
4159
+ },
4160
+ "compId": {
4161
+ "type": "string",
4162
+ "minLength": 1,
4163
+ "maxLength": 255
4164
+ },
4165
+ "locale": {
4166
+ "type": "string",
4167
+ "minLength": 2,
4168
+ "maxLength": 16
4169
+ }
4170
+ },
4171
+ "required": ["projectStamp", "compId", "locale"],
4172
+ "additionalProperties": false
3146
4173
  }
3147
- },
3148
- "required": ["figmaFileName", "pageName", "locale"],
3149
- "additionalProperties": false
4174
+ ]
3150
4175
  }
3151
4176
  }
3152
4177
  }
3153
4178
  },
3154
4179
  "responses": {
3155
4180
  "200": {
3156
- "description": "Figma plugin result",
4181
+ "description": "Plugin command result",
3157
4182
  "content": {
3158
4183
  "application/json": {
3159
4184
  "schema": {
3160
- "type": "object",
3161
- "properties": {
3162
- "versionId": {
3163
- "type": "string"
3164
- },
3165
- "locale": {
3166
- "type": "string"
4185
+ "anyOf": [
4186
+ {
4187
+ "type": "object",
4188
+ "properties": {
4189
+ "versionId": {
4190
+ "type": "string"
4191
+ },
4192
+ "locale": {
4193
+ "type": "string"
4194
+ },
4195
+ "translations": {
4196
+ "type": "object",
4197
+ "additionalProperties": {
4198
+ "type": "string"
4199
+ }
4200
+ },
4201
+ "warnings": {
4202
+ "type": "array",
4203
+ "items": {
4204
+ "type": "object",
4205
+ "properties": {
4206
+ "key": {
4207
+ "type": "string"
4208
+ },
4209
+ "reason": {
4210
+ "type": "string"
4211
+ },
4212
+ "detail": {
4213
+ "type": "string"
4214
+ }
4215
+ },
4216
+ "required": ["key", "reason"]
4217
+ }
4218
+ }
4219
+ },
4220
+ "required": [
4221
+ "versionId",
4222
+ "locale",
4223
+ "translations",
4224
+ "warnings"
4225
+ ]
3167
4226
  },
3168
- "translations": {
4227
+ {
3169
4228
  "type": "object",
3170
- "additionalProperties": {
3171
- "type": "string"
3172
- }
3173
- }
3174
- },
3175
- "required": ["versionId", "locale", "translations"]
3176
- }
3177
- }
3178
- }
3179
- },
3180
- "400": {
3181
- "description": "Request error",
3182
- "content": {
3183
- "application/json": {
3184
- "schema": {
3185
- "$ref": "#/components/schemas/ErrorResponse"
3186
- }
3187
- },
3188
- "text/html": {
3189
- "schema": {
3190
- "type": "string"
3191
- }
3192
- }
3193
- }
3194
- },
3195
- "401": {
3196
- "description": "Request error",
3197
- "content": {
3198
- "application/json": {
3199
- "schema": {
3200
- "$ref": "#/components/schemas/ErrorResponse"
3201
- }
3202
- },
3203
- "text/html": {
3204
- "schema": {
3205
- "type": "string"
3206
- }
3207
- }
3208
- }
3209
- },
3210
- "403": {
3211
- "description": "Request error",
3212
- "content": {
3213
- "application/json": {
3214
- "schema": {
3215
- "$ref": "#/components/schemas/ErrorResponse"
3216
- }
3217
- },
3218
- "text/html": {
3219
- "schema": {
3220
- "type": "string"
3221
- }
3222
- }
3223
- }
3224
- },
3225
- "404": {
3226
- "description": "Request error",
3227
- "content": {
3228
- "application/json": {
3229
- "schema": {
3230
- "$ref": "#/components/schemas/ErrorResponse"
3231
- }
3232
- },
3233
- "text/html": {
4229
+ "properties": {
4230
+ "versionId": {
4231
+ "type": "string"
4232
+ },
4233
+ "locale": {
4234
+ "type": "string"
4235
+ },
4236
+ "translations": {
4237
+ "type": "object",
4238
+ "additionalProperties": {
4239
+ "type": "object",
4240
+ "properties": {
4241
+ "text": {
4242
+ "type": "string"
4243
+ },
4244
+ "baseStyle": {
4245
+ "type": "object",
4246
+ "properties": {
4247
+ "font": {
4248
+ "type": "string",
4249
+ "maxLength": 255
4250
+ },
4251
+ "fontSize": {
4252
+ "type": "number"
4253
+ },
4254
+ "fillColor": {
4255
+ "type": "array",
4256
+ "prefixItems": [
4257
+ {
4258
+ "type": "number"
4259
+ },
4260
+ {
4261
+ "type": "number"
4262
+ },
4263
+ {
4264
+ "type": "number"
4265
+ }
4266
+ ]
4267
+ },
4268
+ "applyFill": {
4269
+ "type": "boolean"
4270
+ },
4271
+ "fauxBold": {
4272
+ "type": "boolean"
4273
+ },
4274
+ "fauxItalic": {
4275
+ "type": "boolean"
4276
+ },
4277
+ "tracking": {
4278
+ "type": "number"
4279
+ },
4280
+ "applyStroke": {
4281
+ "type": "boolean"
4282
+ },
4283
+ "strokeColor": {
4284
+ "type": "array",
4285
+ "prefixItems": [
4286
+ {
4287
+ "type": "number"
4288
+ },
4289
+ {
4290
+ "type": "number"
4291
+ },
4292
+ {
4293
+ "type": "number"
4294
+ }
4295
+ ]
4296
+ },
4297
+ "strokeWidth": {
4298
+ "type": "number"
4299
+ }
4300
+ },
4301
+ "additionalProperties": false
4302
+ },
4303
+ "styleRuns": {
4304
+ "type": "array",
4305
+ "items": {
4306
+ "type": "object",
4307
+ "properties": {
4308
+ "start": {
4309
+ "type": "integer",
4310
+ "minimum": 0
4311
+ },
4312
+ "end": {
4313
+ "type": "integer",
4314
+ "minimum": 0
4315
+ },
4316
+ "style": {
4317
+ "type": "object",
4318
+ "properties": {
4319
+ "font": {
4320
+ "type": "string",
4321
+ "maxLength": 255
4322
+ },
4323
+ "fontSize": {
4324
+ "type": "number"
4325
+ },
4326
+ "fillColor": {
4327
+ "type": "array",
4328
+ "prefixItems": [
4329
+ {
4330
+ "type": "number"
4331
+ },
4332
+ {
4333
+ "type": "number"
4334
+ },
4335
+ {
4336
+ "type": "number"
4337
+ }
4338
+ ]
4339
+ },
4340
+ "applyFill": {
4341
+ "type": "boolean"
4342
+ },
4343
+ "fauxBold": {
4344
+ "type": "boolean"
4345
+ },
4346
+ "fauxItalic": {
4347
+ "type": "boolean"
4348
+ },
4349
+ "tracking": {
4350
+ "type": "number"
4351
+ },
4352
+ "applyStroke": {
4353
+ "type": "boolean"
4354
+ },
4355
+ "strokeColor": {
4356
+ "type": "array",
4357
+ "prefixItems": [
4358
+ {
4359
+ "type": "number"
4360
+ },
4361
+ {
4362
+ "type": "number"
4363
+ },
4364
+ {
4365
+ "type": "number"
4366
+ }
4367
+ ]
4368
+ },
4369
+ "strokeWidth": {
4370
+ "type": "number"
4371
+ }
4372
+ },
4373
+ "additionalProperties": false
4374
+ }
4375
+ },
4376
+ "required": ["start", "end", "style"],
4377
+ "additionalProperties": false
4378
+ }
4379
+ }
4380
+ },
4381
+ "required": ["text", "styleRuns"]
4382
+ }
4383
+ },
4384
+ "warnings": {
4385
+ "type": "array",
4386
+ "items": {
4387
+ "type": "object",
4388
+ "properties": {
4389
+ "key": {
4390
+ "type": "string"
4391
+ },
4392
+ "reason": {
4393
+ "type": "string"
4394
+ },
4395
+ "detail": {
4396
+ "type": "string"
4397
+ }
4398
+ },
4399
+ "required": ["key", "reason"]
4400
+ }
4401
+ }
4402
+ },
4403
+ "required": [
4404
+ "versionId",
4405
+ "locale",
4406
+ "translations",
4407
+ "warnings"
4408
+ ]
4409
+ }
4410
+ ]
4411
+ }
4412
+ }
4413
+ }
4414
+ },
4415
+ "400": {
4416
+ "description": "Request error",
4417
+ "content": {
4418
+ "application/json": {
4419
+ "schema": {
4420
+ "$ref": "#/components/schemas/ErrorResponse"
4421
+ }
4422
+ },
4423
+ "text/html": {
4424
+ "schema": {
4425
+ "type": "string"
4426
+ }
4427
+ }
4428
+ }
4429
+ },
4430
+ "401": {
4431
+ "description": "Request error",
4432
+ "content": {
4433
+ "application/json": {
4434
+ "schema": {
4435
+ "$ref": "#/components/schemas/ErrorResponse"
4436
+ }
4437
+ },
4438
+ "text/html": {
4439
+ "schema": {
4440
+ "type": "string"
4441
+ }
4442
+ }
4443
+ }
4444
+ },
4445
+ "403": {
4446
+ "description": "Request error",
4447
+ "content": {
4448
+ "application/json": {
4449
+ "schema": {
4450
+ "$ref": "#/components/schemas/ErrorResponse"
4451
+ }
4452
+ },
4453
+ "text/html": {
4454
+ "schema": {
4455
+ "type": "string"
4456
+ }
4457
+ }
4458
+ }
4459
+ },
4460
+ "404": {
4461
+ "description": "Request error",
4462
+ "content": {
4463
+ "application/json": {
4464
+ "schema": {
4465
+ "$ref": "#/components/schemas/ErrorResponse"
4466
+ }
4467
+ },
4468
+ "text/html": {
3234
4469
  "schema": {
3235
4470
  "type": "string"
3236
4471
  }
@@ -3376,7 +4611,7 @@
3376
4611
  "type": "string"
3377
4612
  },
3378
4613
  "defaultLocale": {
3379
- "type": ["string", "null"]
4614
+ "type": "string"
3380
4615
  },
3381
4616
  "currentLocales": {
3382
4617
  "type": "array",
@@ -7022,13 +8257,14 @@
7022
8257
  "$ref": "#/components/schemas/FileFormat"
7023
8258
  },
7024
8259
  "dataFormat": {
7025
- "type": "string"
8260
+ "$ref": "#/components/schemas/DataFormat"
7026
8261
  },
7027
8262
  "locale": {
7028
8263
  "type": "string"
7029
8264
  }
7030
8265
  },
7031
8266
  "required": [
8267
+ "branchId",
7032
8268
  "fileId",
7033
8269
  "versionId",
7034
8270
  "fileName",
@@ -7620,7 +8856,7 @@
7620
8856
  "post": {
7621
8857
  "operationId": "translate",
7622
8858
  "summary": "Translate content at runtime",
7623
- "description": "Translate one or more strings or structured content entries with caching and memoization. Development API keys are accepted for this endpoint.",
8859
+ "description": "Translate one or more strings, structured content entries, or markdown documents with caching and memoization. Markdown and MDX documents are sent as strings with `fileFormat` set to MD or MDX. Development API keys are accepted for this endpoint.",
7624
8860
  "security": [
7625
8861
  {
7626
8862
  "BearerAuth": []
@@ -8042,13 +9278,14 @@
8042
9278
  "$ref": "#/components/schemas/FileFormat"
8043
9279
  },
8044
9280
  "dataFormat": {
8045
- "type": "string"
9281
+ "$ref": "#/components/schemas/DataFormat"
8046
9282
  },
8047
9283
  "locale": {
8048
9284
  "type": "string"
8049
9285
  }
8050
9286
  },
8051
9287
  "required": [
9288
+ "branchId",
8052
9289
  "fileId",
8053
9290
  "versionId",
8054
9291
  "fileName",
@@ -8068,7 +9305,280 @@
8068
9305
  }
8069
9306
  }
8070
9307
  },
8071
- "400": {
9308
+ "400": {
9309
+ "description": "Request error",
9310
+ "content": {
9311
+ "application/json": {
9312
+ "schema": {
9313
+ "$ref": "#/components/schemas/ErrorResponse"
9314
+ }
9315
+ },
9316
+ "text/html": {
9317
+ "schema": {
9318
+ "type": "string"
9319
+ }
9320
+ }
9321
+ }
9322
+ },
9323
+ "401": {
9324
+ "description": "Request error",
9325
+ "content": {
9326
+ "application/json": {
9327
+ "schema": {
9328
+ "$ref": "#/components/schemas/ErrorResponse"
9329
+ }
9330
+ },
9331
+ "text/html": {
9332
+ "schema": {
9333
+ "type": "string"
9334
+ }
9335
+ }
9336
+ }
9337
+ },
9338
+ "403": {
9339
+ "description": "Request error",
9340
+ "content": {
9341
+ "application/json": {
9342
+ "schema": {
9343
+ "$ref": "#/components/schemas/ErrorResponse"
9344
+ }
9345
+ },
9346
+ "text/html": {
9347
+ "schema": {
9348
+ "type": "string"
9349
+ }
9350
+ }
9351
+ }
9352
+ },
9353
+ "404": {
9354
+ "description": "Request error",
9355
+ "content": {
9356
+ "application/json": {
9357
+ "schema": {
9358
+ "$ref": "#/components/schemas/ErrorResponse"
9359
+ }
9360
+ },
9361
+ "text/html": {
9362
+ "schema": {
9363
+ "type": "string"
9364
+ }
9365
+ }
9366
+ }
9367
+ },
9368
+ "413": {
9369
+ "description": "Request error",
9370
+ "content": {
9371
+ "application/json": {
9372
+ "schema": {
9373
+ "$ref": "#/components/schemas/ErrorResponse"
9374
+ }
9375
+ },
9376
+ "text/html": {
9377
+ "schema": {
9378
+ "type": "string"
9379
+ }
9380
+ }
9381
+ }
9382
+ },
9383
+ "429": {
9384
+ "description": "Request error",
9385
+ "content": {
9386
+ "application/json": {
9387
+ "schema": {
9388
+ "$ref": "#/components/schemas/ErrorResponse"
9389
+ }
9390
+ },
9391
+ "text/html": {
9392
+ "schema": {
9393
+ "type": "string"
9394
+ }
9395
+ }
9396
+ }
9397
+ },
9398
+ "500": {
9399
+ "description": "Request error",
9400
+ "content": {
9401
+ "application/json": {
9402
+ "schema": {
9403
+ "$ref": "#/components/schemas/ErrorResponse"
9404
+ }
9405
+ },
9406
+ "text/html": {
9407
+ "schema": {
9408
+ "type": "string"
9409
+ }
9410
+ }
9411
+ }
9412
+ },
9413
+ "503": {
9414
+ "description": "Request error",
9415
+ "content": {
9416
+ "application/json": {
9417
+ "schema": {
9418
+ "$ref": "#/components/schemas/ErrorResponse"
9419
+ }
9420
+ },
9421
+ "text/html": {
9422
+ "schema": {
9423
+ "type": "string"
9424
+ }
9425
+ }
9426
+ }
9427
+ }
9428
+ },
9429
+ "tags": ["Files"]
9430
+ }
9431
+ },
9432
+ "/v2/projects/{projectId}/api-keys": {
9433
+ "post": {
9434
+ "operationId": "createProjectApiKey",
9435
+ "summary": "Create a Project API Key",
9436
+ "description": "Create an API key for the selected Project. Requires project:api_keys:write. Select permissions to limit the key, or omit them to delegate all grantable Project permissions held by the request identity. Unavailable selections are rejected.",
9437
+ "security": [
9438
+ {
9439
+ "BearerAuth": []
9440
+ },
9441
+ {
9442
+ "UserBearerAuth": []
9443
+ }
9444
+ ],
9445
+ "parameters": [
9446
+ {
9447
+ "schema": {
9448
+ "type": "string",
9449
+ "minLength": 1
9450
+ },
9451
+ "required": true,
9452
+ "name": "projectId",
9453
+ "in": "path"
9454
+ },
9455
+ {
9456
+ "schema": {
9457
+ "$ref": "#/components/schemas/ApiVersion"
9458
+ },
9459
+ "required": false,
9460
+ "description": "API contract version. Defaults to the oldest supported version.",
9461
+ "name": "gt-api-version",
9462
+ "in": "header"
9463
+ }
9464
+ ],
9465
+ "requestBody": {
9466
+ "required": true,
9467
+ "content": {
9468
+ "application/json": {
9469
+ "schema": {
9470
+ "type": "object",
9471
+ "properties": {
9472
+ "name": {
9473
+ "type": "string",
9474
+ "minLength": 1,
9475
+ "maxLength": 255
9476
+ },
9477
+ "permissions": {
9478
+ "type": "array",
9479
+ "items": {
9480
+ "$ref": "#/components/schemas/ProjectApiKeyPermission"
9481
+ },
9482
+ "minItems": 1,
9483
+ "description": "Project permissions to grant. Omit to grant all delegable project permissions held by the caller. Every selected permission must be held by the caller; duplicates are ignored."
9484
+ },
9485
+ "type": {
9486
+ "type": "string",
9487
+ "enum": ["production", "development"],
9488
+ "deprecated": true,
9489
+ "description": "Ignored. All new keys are project-scoped API keys for any environment."
9490
+ }
9491
+ },
9492
+ "required": ["name"],
9493
+ "additionalProperties": false
9494
+ }
9495
+ }
9496
+ }
9497
+ },
9498
+ "responses": {
9499
+ "201": {
9500
+ "description": "Project API key created",
9501
+ "content": {
9502
+ "application/json": {
9503
+ "schema": {
9504
+ "type": "object",
9505
+ "properties": {
9506
+ "apiKey": {
9507
+ "type": "object",
9508
+ "properties": {
9509
+ "id": {
9510
+ "type": "string"
9511
+ },
9512
+ "name": {
9513
+ "type": "string"
9514
+ },
9515
+ "key": {
9516
+ "type": "string"
9517
+ },
9518
+ "projectId": {
9519
+ "type": "string"
9520
+ },
9521
+ "type": {
9522
+ "type": "string",
9523
+ "enum": ["production"],
9524
+ "deprecated": true,
9525
+ "description": "Compatibility field. All project API keys work in any environment."
9526
+ }
9527
+ },
9528
+ "required": ["id", "name", "key", "projectId", "type"]
9529
+ }
9530
+ },
9531
+ "required": ["apiKey"]
9532
+ }
9533
+ }
9534
+ }
9535
+ },
9536
+ "400": {
9537
+ "description": "Request error",
9538
+ "content": {
9539
+ "application/json": {
9540
+ "schema": {
9541
+ "$ref": "#/components/schemas/ErrorResponse"
9542
+ }
9543
+ },
9544
+ "text/html": {
9545
+ "schema": {
9546
+ "type": "string"
9547
+ }
9548
+ }
9549
+ }
9550
+ },
9551
+ "401": {
9552
+ "description": "Request error",
9553
+ "content": {
9554
+ "application/json": {
9555
+ "schema": {
9556
+ "$ref": "#/components/schemas/ErrorResponse"
9557
+ }
9558
+ },
9559
+ "text/html": {
9560
+ "schema": {
9561
+ "type": "string"
9562
+ }
9563
+ }
9564
+ }
9565
+ },
9566
+ "403": {
9567
+ "description": "Request error",
9568
+ "content": {
9569
+ "application/json": {
9570
+ "schema": {
9571
+ "$ref": "#/components/schemas/ErrorResponse"
9572
+ }
9573
+ },
9574
+ "text/html": {
9575
+ "schema": {
9576
+ "type": "string"
9577
+ }
9578
+ }
9579
+ }
9580
+ },
9581
+ "404": {
8072
9582
  "description": "Request error",
8073
9583
  "content": {
8074
9584
  "application/json": {
@@ -8083,7 +9593,7 @@
8083
9593
  }
8084
9594
  }
8085
9595
  },
8086
- "401": {
9596
+ "413": {
8087
9597
  "description": "Request error",
8088
9598
  "content": {
8089
9599
  "application/json": {
@@ -8098,7 +9608,7 @@
8098
9608
  }
8099
9609
  }
8100
9610
  },
8101
- "403": {
9611
+ "429": {
8102
9612
  "description": "Request error",
8103
9613
  "content": {
8104
9614
  "application/json": {
@@ -8113,7 +9623,7 @@
8113
9623
  }
8114
9624
  }
8115
9625
  },
8116
- "404": {
9626
+ "500": {
8117
9627
  "description": "Request error",
8118
9628
  "content": {
8119
9629
  "application/json": {
@@ -8127,8 +9637,94 @@
8127
9637
  }
8128
9638
  }
8129
9639
  }
9640
+ }
9641
+ },
9642
+ "tags": ["Project"]
9643
+ }
9644
+ },
9645
+ "/v2/projects": {
9646
+ "get": {
9647
+ "operationId": "listProjects",
9648
+ "summary": "List Projects",
9649
+ "description": "List Projects the request identity can read, ordered by ID. Requires project:files:read. Pass nextCursor as cursor to fetch the next page.",
9650
+ "security": [
9651
+ {
9652
+ "BearerAuth": []
8130
9653
  },
8131
- "413": {
9654
+ {
9655
+ "UserBearerAuth": []
9656
+ }
9657
+ ],
9658
+ "parameters": [
9659
+ {
9660
+ "schema": {
9661
+ "type": "string",
9662
+ "minLength": 1
9663
+ },
9664
+ "required": false,
9665
+ "name": "cursor",
9666
+ "in": "query"
9667
+ },
9668
+ {
9669
+ "schema": {
9670
+ "type": "integer",
9671
+ "minimum": 1,
9672
+ "maximum": 100,
9673
+ "default": 50
9674
+ },
9675
+ "required": false,
9676
+ "name": "limit",
9677
+ "in": "query"
9678
+ },
9679
+ {
9680
+ "schema": {
9681
+ "$ref": "#/components/schemas/ApiVersion"
9682
+ },
9683
+ "required": false,
9684
+ "description": "API contract version. Defaults to the oldest supported version.",
9685
+ "name": "gt-api-version",
9686
+ "in": "header"
9687
+ }
9688
+ ],
9689
+ "responses": {
9690
+ "200": {
9691
+ "description": "Page of Projects",
9692
+ "content": {
9693
+ "application/json": {
9694
+ "schema": {
9695
+ "type": "object",
9696
+ "properties": {
9697
+ "projects": {
9698
+ "type": "array",
9699
+ "items": {
9700
+ "type": "object",
9701
+ "properties": {
9702
+ "id": {
9703
+ "type": "string"
9704
+ },
9705
+ "name": {
9706
+ "type": "string"
9707
+ },
9708
+ "orgId": {
9709
+ "type": "string"
9710
+ },
9711
+ "orgName": {
9712
+ "type": "string"
9713
+ }
9714
+ },
9715
+ "required": ["id", "name", "orgId", "orgName"]
9716
+ }
9717
+ },
9718
+ "nextCursor": {
9719
+ "type": ["string", "null"]
9720
+ }
9721
+ },
9722
+ "required": ["projects", "nextCursor"]
9723
+ }
9724
+ }
9725
+ }
9726
+ },
9727
+ "400": {
8132
9728
  "description": "Request error",
8133
9729
  "content": {
8134
9730
  "application/json": {
@@ -8143,7 +9739,7 @@
8143
9739
  }
8144
9740
  }
8145
9741
  },
8146
- "429": {
9742
+ "401": {
8147
9743
  "description": "Request error",
8148
9744
  "content": {
8149
9745
  "application/json": {
@@ -8158,7 +9754,7 @@
8158
9754
  }
8159
9755
  }
8160
9756
  },
8161
- "500": {
9757
+ "403": {
8162
9758
  "description": "Request error",
8163
9759
  "content": {
8164
9760
  "application/json": {
@@ -8173,7 +9769,22 @@
8173
9769
  }
8174
9770
  }
8175
9771
  },
8176
- "503": {
9772
+ "429": {
9773
+ "description": "Request error",
9774
+ "content": {
9775
+ "application/json": {
9776
+ "schema": {
9777
+ "$ref": "#/components/schemas/ErrorResponse"
9778
+ }
9779
+ },
9780
+ "text/html": {
9781
+ "schema": {
9782
+ "type": "string"
9783
+ }
9784
+ }
9785
+ }
9786
+ },
9787
+ "500": {
8177
9788
  "description": "Request error",
8178
9789
  "content": {
8179
9790
  "application/json": {
@@ -8189,14 +9800,14 @@
8189
9800
  }
8190
9801
  }
8191
9802
  },
8192
- "tags": ["Files"]
9803
+ "tags": ["Project"]
8193
9804
  }
8194
9805
  },
8195
- "/v2/projects/{projectId}/api-keys": {
9806
+ "/v2/orgs/{orgId}/projects": {
8196
9807
  "post": {
8197
- "operationId": "createProjectApiKey",
8198
- "summary": "Create a Project API Key",
8199
- "description": "Create an API key for the selected Project. Requires project:api_keys:write and delegates only Project permissions held by the request identity.",
9808
+ "operationId": "createProject",
9809
+ "summary": "Create a Project",
9810
+ "description": "Create a Project in the Organization selected by the orgId path parameter, optionally enabling CDN delivery. Requires org:projects:create.",
8200
9811
  "security": [
8201
9812
  {
8202
9813
  "BearerAuth": []
@@ -8212,7 +9823,7 @@
8212
9823
  "minLength": 1
8213
9824
  },
8214
9825
  "required": true,
8215
- "name": "projectId",
9826
+ "name": "orgId",
8216
9827
  "in": "path"
8217
9828
  },
8218
9829
  {
@@ -8233,17 +9844,16 @@
8233
9844
  "type": "object",
8234
9845
  "properties": {
8235
9846
  "name": {
8236
- "type": "string",
8237
- "minLength": 1,
8238
- "maxLength": 255
9847
+ "type": "string"
8239
9848
  },
8240
- "type": {
8241
- "type": "string",
8242
- "enum": ["production", "development"],
8243
- "default": "production"
9849
+ "defaultLocale": {
9850
+ "type": "string"
9851
+ },
9852
+ "cdnEnabled": {
9853
+ "type": "boolean"
8244
9854
  }
8245
9855
  },
8246
- "required": ["name"],
9856
+ "required": ["name", "defaultLocale"],
8247
9857
  "additionalProperties": false
8248
9858
  }
8249
9859
  }
@@ -8251,13 +9861,13 @@
8251
9861
  },
8252
9862
  "responses": {
8253
9863
  "201": {
8254
- "description": "Project API key created",
9864
+ "description": "Project created",
8255
9865
  "content": {
8256
9866
  "application/json": {
8257
9867
  "schema": {
8258
9868
  "type": "object",
8259
9869
  "properties": {
8260
- "apiKey": {
9870
+ "project": {
8261
9871
  "type": "object",
8262
9872
  "properties": {
8263
9873
  "id": {
@@ -8266,21 +9876,17 @@
8266
9876
  "name": {
8267
9877
  "type": "string"
8268
9878
  },
8269
- "key": {
9879
+ "orgId": {
8270
9880
  "type": "string"
8271
9881
  },
8272
- "projectId": {
9882
+ "defaultLocale": {
8273
9883
  "type": "string"
8274
- },
8275
- "type": {
8276
- "type": "string",
8277
- "enum": ["production", "development"]
8278
9884
  }
8279
9885
  },
8280
- "required": ["id", "name", "key", "projectId", "type"]
9886
+ "required": ["id", "name", "orgId", "defaultLocale"]
8281
9887
  }
8282
9888
  },
8283
- "required": ["apiKey"]
9889
+ "required": ["project"]
8284
9890
  }
8285
9891
  }
8286
9892
  }
@@ -8330,7 +9936,7 @@
8330
9936
  }
8331
9937
  }
8332
9938
  },
8333
- "404": {
9939
+ "409": {
8334
9940
  "description": "Request error",
8335
9941
  "content": {
8336
9942
  "application/json": {
@@ -8394,15 +10000,12 @@
8394
10000
  "tags": ["Project"]
8395
10001
  }
8396
10002
  },
8397
- "/v2/orgs/{orgId}/projects": {
8398
- "post": {
8399
- "operationId": "createProject",
8400
- "summary": "Create a Project",
8401
- "description": "Create a Project in the Organization selected by the orgId path parameter, optionally enabling CDN delivery. Requires org:projects:create.",
10003
+ "/v2/orgs": {
10004
+ "get": {
10005
+ "operationId": "listOrgs",
10006
+ "summary": "List Organizations",
10007
+ "description": "List Organizations where the signed-in user can create Projects, ordered by ID. Accepts user tokens only and requires org:projects:create. Pass nextCursor as cursor to fetch the next page.",
8402
10008
  "security": [
8403
- {
8404
- "BearerAuth": []
8405
- },
8406
10009
  {
8407
10010
  "UserBearerAuth": []
8408
10011
  }
@@ -8413,9 +10016,20 @@
8413
10016
  "type": "string",
8414
10017
  "minLength": 1
8415
10018
  },
8416
- "required": true,
8417
- "name": "orgId",
8418
- "in": "path"
10019
+ "required": false,
10020
+ "name": "cursor",
10021
+ "in": "query"
10022
+ },
10023
+ {
10024
+ "schema": {
10025
+ "type": "integer",
10026
+ "minimum": 1,
10027
+ "maximum": 100,
10028
+ "default": 50
10029
+ },
10030
+ "required": false,
10031
+ "name": "limit",
10032
+ "in": "query"
8419
10033
  },
8420
10034
  {
8421
10035
  "schema": {
@@ -8427,57 +10041,34 @@
8427
10041
  "in": "header"
8428
10042
  }
8429
10043
  ],
8430
- "requestBody": {
8431
- "required": true,
8432
- "content": {
8433
- "application/json": {
8434
- "schema": {
8435
- "type": "object",
8436
- "properties": {
8437
- "name": {
8438
- "type": "string"
8439
- },
8440
- "defaultLocale": {
8441
- "type": "string"
8442
- },
8443
- "cdnEnabled": {
8444
- "type": "boolean"
8445
- }
8446
- },
8447
- "required": ["name", "defaultLocale"],
8448
- "additionalProperties": false
8449
- }
8450
- }
8451
- }
8452
- },
8453
10044
  "responses": {
8454
- "201": {
8455
- "description": "Project created",
10045
+ "200": {
10046
+ "description": "Page of Organizations",
8456
10047
  "content": {
8457
10048
  "application/json": {
8458
10049
  "schema": {
8459
10050
  "type": "object",
8460
10051
  "properties": {
8461
- "project": {
8462
- "type": "object",
8463
- "properties": {
8464
- "id": {
8465
- "type": "string"
8466
- },
8467
- "name": {
8468
- "type": "string"
8469
- },
8470
- "orgId": {
8471
- "type": "string"
10052
+ "orgs": {
10053
+ "type": "array",
10054
+ "items": {
10055
+ "type": "object",
10056
+ "properties": {
10057
+ "id": {
10058
+ "type": "string"
10059
+ },
10060
+ "name": {
10061
+ "type": "string"
10062
+ }
8472
10063
  },
8473
- "defaultLocale": {
8474
- "type": "string"
8475
- }
8476
- },
8477
- "required": ["id", "name", "orgId", "defaultLocale"]
10064
+ "required": ["id", "name"]
10065
+ }
10066
+ },
10067
+ "nextCursor": {
10068
+ "type": ["string", "null"]
8478
10069
  }
8479
10070
  },
8480
- "required": ["project"]
10071
+ "required": ["orgs", "nextCursor"]
8481
10072
  }
8482
10073
  }
8483
10074
  }
@@ -8527,36 +10118,6 @@
8527
10118
  }
8528
10119
  }
8529
10120
  },
8530
- "409": {
8531
- "description": "Request error",
8532
- "content": {
8533
- "application/json": {
8534
- "schema": {
8535
- "$ref": "#/components/schemas/ErrorResponse"
8536
- }
8537
- },
8538
- "text/html": {
8539
- "schema": {
8540
- "type": "string"
8541
- }
8542
- }
8543
- }
8544
- },
8545
- "413": {
8546
- "description": "Request error",
8547
- "content": {
8548
- "application/json": {
8549
- "schema": {
8550
- "$ref": "#/components/schemas/ErrorResponse"
8551
- }
8552
- },
8553
- "text/html": {
8554
- "schema": {
8555
- "type": "string"
8556
- }
8557
- }
8558
- }
8559
- },
8560
10121
  "429": {
8561
10122
  "description": "Request error",
8562
10123
  "content": {
@@ -8595,6 +10156,7 @@
8595
10156
  "post": {
8596
10157
  "operationId": "createCliWizardSession",
8597
10158
  "x-internal": true,
10159
+ "deprecated": true,
8598
10160
  "summary": "Create a CLI wizard session",
8599
10161
  "description": "Create a temporary session for CLI browser authentication.",
8600
10162
  "tags": ["CLI Wizard"],
@@ -8697,6 +10259,7 @@
8697
10259
  "get": {
8698
10260
  "operationId": "getCliWizardSession",
8699
10261
  "x-internal": true,
10262
+ "deprecated": true,
8700
10263
  "summary": "Get a CLI wizard session",
8701
10264
  "description": "Get credentials for a completed CLI wizard session or its current waiting status.",
8702
10265
  "tags": ["CLI Wizard"],
@@ -8821,6 +10384,7 @@
8821
10384
  "delete": {
8822
10385
  "operationId": "deleteCliWizardSession",
8823
10386
  "x-internal": true,
10387
+ "deprecated": true,
8824
10388
  "summary": "Delete a CLI wizard session",
8825
10389
  "description": "Delete a completed or abandoned CLI wizard session.",
8826
10390
  "tags": ["CLI Wizard"],