openapi.json 25 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048
  1. {
  2. "openapi": "3.0.0",
  3. "info": {
  4. "title": "opencode",
  5. "description": "opencode api",
  6. "version": "1.0.0"
  7. },
  8. "paths": {
  9. "/event": {
  10. "get": {
  11. "responses": {
  12. "200": {
  13. "description": "Event stream",
  14. "content": {
  15. "application/json": {
  16. "schema": {
  17. "$ref": "#/components/schemas/Event"
  18. }
  19. }
  20. }
  21. }
  22. },
  23. "operationId": "getEvent",
  24. "parameters": [],
  25. "description": "Get events"
  26. }
  27. },
  28. "/app_info": {
  29. "post": {
  30. "responses": {
  31. "200": {
  32. "description": "200",
  33. "content": {
  34. "application/json": {
  35. "schema": {
  36. "$ref": "#/components/schemas/App.Info"
  37. }
  38. }
  39. }
  40. }
  41. },
  42. "operationId": "postApp_info",
  43. "parameters": [],
  44. "description": "Get app info"
  45. }
  46. },
  47. "/path_get": {
  48. "post": {
  49. "responses": {
  50. "200": {
  51. "description": "200",
  52. "content": {
  53. "application/json": {
  54. "schema": {
  55. "type": "object",
  56. "properties": {
  57. "root": {
  58. "type": "string"
  59. },
  60. "data": {
  61. "type": "string"
  62. },
  63. "cwd": {
  64. "type": "string"
  65. },
  66. "config": {
  67. "type": "string"
  68. }
  69. },
  70. "required": [
  71. "root",
  72. "data",
  73. "cwd",
  74. "config"
  75. ]
  76. }
  77. }
  78. }
  79. }
  80. },
  81. "operationId": "postPath_get",
  82. "parameters": [],
  83. "description": "Get paths"
  84. }
  85. },
  86. "/session_create": {
  87. "post": {
  88. "responses": {
  89. "200": {
  90. "description": "Successfully created session",
  91. "content": {
  92. "application/json": {
  93. "schema": {
  94. "$ref": "#/components/schemas/session.info"
  95. }
  96. }
  97. }
  98. }
  99. },
  100. "operationId": "postSession_create",
  101. "parameters": [],
  102. "description": "Create a new session"
  103. }
  104. },
  105. "/session_share": {
  106. "post": {
  107. "responses": {
  108. "200": {
  109. "description": "Successfully shared session",
  110. "content": {
  111. "application/json": {
  112. "schema": {
  113. "$ref": "#/components/schemas/session.info"
  114. }
  115. }
  116. }
  117. }
  118. },
  119. "operationId": "postSession_share",
  120. "parameters": [],
  121. "description": "Share the session",
  122. "requestBody": {
  123. "content": {
  124. "application/json": {
  125. "schema": {
  126. "type": "object",
  127. "properties": {
  128. "sessionID": {
  129. "type": "string"
  130. }
  131. },
  132. "required": [
  133. "sessionID"
  134. ]
  135. }
  136. }
  137. }
  138. }
  139. }
  140. },
  141. "/session_messages": {
  142. "post": {
  143. "responses": {
  144. "200": {
  145. "description": "Successfully created session",
  146. "content": {
  147. "application/json": {
  148. "schema": {
  149. "type": "array",
  150. "items": {
  151. "$ref": "#/components/schemas/Message.Info"
  152. }
  153. }
  154. }
  155. }
  156. }
  157. },
  158. "operationId": "postSession_messages",
  159. "parameters": [],
  160. "description": "Get messages for a session",
  161. "requestBody": {
  162. "content": {
  163. "application/json": {
  164. "schema": {
  165. "type": "object",
  166. "properties": {
  167. "sessionID": {
  168. "type": "string"
  169. }
  170. },
  171. "required": [
  172. "sessionID"
  173. ]
  174. }
  175. }
  176. }
  177. }
  178. }
  179. },
  180. "/session_list": {
  181. "post": {
  182. "responses": {
  183. "200": {
  184. "description": "List of sessions",
  185. "content": {
  186. "application/json": {
  187. "schema": {
  188. "type": "array",
  189. "items": {
  190. "$ref": "#/components/schemas/session.info"
  191. }
  192. }
  193. }
  194. }
  195. }
  196. },
  197. "operationId": "postSession_list",
  198. "parameters": [],
  199. "description": "List all sessions"
  200. }
  201. },
  202. "/session_abort": {
  203. "post": {
  204. "responses": {
  205. "200": {
  206. "description": "Aborted session",
  207. "content": {
  208. "application/json": {
  209. "schema": {
  210. "type": "boolean"
  211. }
  212. }
  213. }
  214. }
  215. },
  216. "operationId": "postSession_abort",
  217. "parameters": [],
  218. "description": "Abort a session",
  219. "requestBody": {
  220. "content": {
  221. "application/json": {
  222. "schema": {
  223. "type": "object",
  224. "properties": {
  225. "sessionID": {
  226. "type": "string"
  227. }
  228. },
  229. "required": [
  230. "sessionID"
  231. ]
  232. }
  233. }
  234. }
  235. }
  236. }
  237. },
  238. "/session_summarize": {
  239. "post": {
  240. "responses": {
  241. "200": {
  242. "description": "Summarize the session",
  243. "content": {
  244. "application/json": {
  245. "schema": {
  246. "type": "boolean"
  247. }
  248. }
  249. }
  250. }
  251. },
  252. "operationId": "postSession_summarize",
  253. "parameters": [],
  254. "description": "Summarize the session",
  255. "requestBody": {
  256. "content": {
  257. "application/json": {
  258. "schema": {
  259. "type": "object",
  260. "properties": {
  261. "sessionID": {
  262. "type": "string"
  263. },
  264. "providerID": {
  265. "type": "string"
  266. },
  267. "modelID": {
  268. "type": "string"
  269. }
  270. },
  271. "required": [
  272. "sessionID",
  273. "providerID",
  274. "modelID"
  275. ]
  276. }
  277. }
  278. }
  279. }
  280. }
  281. },
  282. "/session_chat": {
  283. "post": {
  284. "responses": {
  285. "200": {
  286. "description": "Chat with a model",
  287. "content": {
  288. "application/json": {
  289. "schema": {
  290. "$ref": "#/components/schemas/Message.Info"
  291. }
  292. }
  293. }
  294. }
  295. },
  296. "operationId": "postSession_chat",
  297. "parameters": [],
  298. "description": "Chat with a model",
  299. "requestBody": {
  300. "content": {
  301. "application/json": {
  302. "schema": {
  303. "type": "object",
  304. "properties": {
  305. "sessionID": {
  306. "type": "string"
  307. },
  308. "providerID": {
  309. "type": "string"
  310. },
  311. "modelID": {
  312. "type": "string"
  313. },
  314. "parts": {
  315. "type": "array",
  316. "items": {
  317. "$ref": "#/components/schemas/Message.Part"
  318. }
  319. }
  320. },
  321. "required": [
  322. "sessionID",
  323. "providerID",
  324. "modelID",
  325. "parts"
  326. ]
  327. }
  328. }
  329. }
  330. }
  331. }
  332. },
  333. "/provider_list": {
  334. "post": {
  335. "responses": {
  336. "200": {
  337. "description": "List of providers",
  338. "content": {
  339. "application/json": {
  340. "schema": {
  341. "type": "array",
  342. "items": {
  343. "$ref": "#/components/schemas/Provider.Info"
  344. }
  345. }
  346. }
  347. }
  348. }
  349. },
  350. "operationId": "postProvider_list",
  351. "parameters": [],
  352. "description": "List all providers"
  353. }
  354. }
  355. },
  356. "components": {
  357. "schemas": {
  358. "Event": {
  359. "oneOf": [
  360. {
  361. "$ref": "#/components/schemas/Event.storage.write"
  362. },
  363. {
  364. "$ref": "#/components/schemas/Event.message.updated"
  365. },
  366. {
  367. "$ref": "#/components/schemas/Event.lsp.client.diagnostics"
  368. },
  369. {
  370. "$ref": "#/components/schemas/Event.permission.updated"
  371. },
  372. {
  373. "$ref": "#/components/schemas/Event.session.updated"
  374. }
  375. ],
  376. "discriminator": {
  377. "propertyName": "type",
  378. "mapping": {
  379. "storage.write": "#/components/schemas/Event.storage.write",
  380. "message.updated": "#/components/schemas/Event.message.updated",
  381. "lsp.client.diagnostics": "#/components/schemas/Event.lsp.client.diagnostics",
  382. "permission.updated": "#/components/schemas/Event.permission.updated",
  383. "session.updated": "#/components/schemas/Event.session.updated"
  384. }
  385. }
  386. },
  387. "Event.storage.write": {
  388. "type": "object",
  389. "properties": {
  390. "type": {
  391. "type": "string",
  392. "const": "storage.write"
  393. },
  394. "properties": {
  395. "type": "object",
  396. "properties": {
  397. "key": {
  398. "type": "string"
  399. },
  400. "content": {}
  401. },
  402. "required": [
  403. "key"
  404. ]
  405. }
  406. },
  407. "required": [
  408. "type",
  409. "properties"
  410. ]
  411. },
  412. "Event.message.updated": {
  413. "type": "object",
  414. "properties": {
  415. "type": {
  416. "type": "string",
  417. "const": "message.updated"
  418. },
  419. "properties": {
  420. "type": "object",
  421. "properties": {
  422. "info": {
  423. "$ref": "#/components/schemas/Message.Info"
  424. }
  425. },
  426. "required": [
  427. "info"
  428. ]
  429. }
  430. },
  431. "required": [
  432. "type",
  433. "properties"
  434. ]
  435. },
  436. "Message.Info": {
  437. "type": "object",
  438. "properties": {
  439. "id": {
  440. "type": "string"
  441. },
  442. "role": {
  443. "type": "string",
  444. "enum": [
  445. "system",
  446. "user",
  447. "assistant"
  448. ]
  449. },
  450. "parts": {
  451. "type": "array",
  452. "items": {
  453. "$ref": "#/components/schemas/Message.Part"
  454. }
  455. },
  456. "metadata": {
  457. "type": "object",
  458. "properties": {
  459. "time": {
  460. "type": "object",
  461. "properties": {
  462. "created": {
  463. "type": "number"
  464. },
  465. "completed": {
  466. "type": "number"
  467. }
  468. },
  469. "required": [
  470. "created"
  471. ]
  472. },
  473. "sessionID": {
  474. "type": "string"
  475. },
  476. "tool": {
  477. "type": "object",
  478. "additionalProperties": {}
  479. },
  480. "assistant": {
  481. "type": "object",
  482. "properties": {
  483. "modelID": {
  484. "type": "string"
  485. },
  486. "providerID": {
  487. "type": "string"
  488. },
  489. "cost": {
  490. "type": "number"
  491. },
  492. "summary": {
  493. "type": "boolean"
  494. },
  495. "tokens": {
  496. "type": "object",
  497. "properties": {
  498. "input": {
  499. "type": "number"
  500. },
  501. "output": {
  502. "type": "number"
  503. },
  504. "reasoning": {
  505. "type": "number"
  506. }
  507. },
  508. "required": [
  509. "input",
  510. "output",
  511. "reasoning"
  512. ]
  513. }
  514. },
  515. "required": [
  516. "modelID",
  517. "providerID",
  518. "cost",
  519. "tokens"
  520. ]
  521. }
  522. },
  523. "required": [
  524. "time",
  525. "sessionID",
  526. "tool"
  527. ]
  528. }
  529. },
  530. "required": [
  531. "id",
  532. "role",
  533. "parts",
  534. "metadata"
  535. ]
  536. },
  537. "Message.Part": {
  538. "oneOf": [
  539. {
  540. "$ref": "#/components/schemas/Message.Part.Text"
  541. },
  542. {
  543. "$ref": "#/components/schemas/Message.Part.Reasoning"
  544. },
  545. {
  546. "$ref": "#/components/schemas/Message.Part.ToolInvocation"
  547. },
  548. {
  549. "$ref": "#/components/schemas/Message.Part.SourceUrl"
  550. },
  551. {
  552. "$ref": "#/components/schemas/Message.Part.File"
  553. },
  554. {
  555. "$ref": "#/components/schemas/Message.Part.StepStart"
  556. }
  557. ],
  558. "discriminator": {
  559. "propertyName": "type",
  560. "mapping": {
  561. "text": "#/components/schemas/Message.Part.Text",
  562. "reasoning": "#/components/schemas/Message.Part.Reasoning",
  563. "tool-invocation": "#/components/schemas/Message.Part.ToolInvocation",
  564. "source-url": "#/components/schemas/Message.Part.SourceUrl",
  565. "file": "#/components/schemas/Message.Part.File",
  566. "step-start": "#/components/schemas/Message.Part.StepStart"
  567. }
  568. }
  569. },
  570. "Message.Part.Text": {
  571. "type": "object",
  572. "properties": {
  573. "type": {
  574. "type": "string",
  575. "const": "text"
  576. },
  577. "text": {
  578. "type": "string"
  579. }
  580. },
  581. "required": [
  582. "type",
  583. "text"
  584. ]
  585. },
  586. "Message.Part.Reasoning": {
  587. "type": "object",
  588. "properties": {
  589. "type": {
  590. "type": "string",
  591. "const": "reasoning"
  592. },
  593. "text": {
  594. "type": "string"
  595. },
  596. "providerMetadata": {
  597. "type": "object",
  598. "additionalProperties": {}
  599. }
  600. },
  601. "required": [
  602. "type",
  603. "text"
  604. ]
  605. },
  606. "Message.Part.ToolInvocation": {
  607. "type": "object",
  608. "properties": {
  609. "type": {
  610. "type": "string",
  611. "const": "tool-invocation"
  612. },
  613. "toolInvocation": {
  614. "$ref": "#/components/schemas/Message.ToolInvocation"
  615. }
  616. },
  617. "required": [
  618. "type",
  619. "toolInvocation"
  620. ]
  621. },
  622. "Message.ToolInvocation": {
  623. "oneOf": [
  624. {
  625. "$ref": "#/components/schemas/Message.ToolInvocation.ToolCall"
  626. },
  627. {
  628. "$ref": "#/components/schemas/Message.ToolInvocation.ToolPartialCall"
  629. },
  630. {
  631. "$ref": "#/components/schemas/Message.ToolInvocation.ToolResult"
  632. }
  633. ],
  634. "discriminator": {
  635. "propertyName": "state",
  636. "mapping": {
  637. "call": "#/components/schemas/Message.ToolInvocation.ToolCall",
  638. "partial-call": "#/components/schemas/Message.ToolInvocation.ToolPartialCall",
  639. "result": "#/components/schemas/Message.ToolInvocation.ToolResult"
  640. }
  641. }
  642. },
  643. "Message.ToolInvocation.ToolCall": {
  644. "type": "object",
  645. "properties": {
  646. "state": {
  647. "type": "string",
  648. "const": "call"
  649. },
  650. "step": {
  651. "type": "number"
  652. },
  653. "toolCallId": {
  654. "type": "string"
  655. },
  656. "toolName": {
  657. "type": "string"
  658. },
  659. "args": {}
  660. },
  661. "required": [
  662. "state",
  663. "toolCallId",
  664. "toolName"
  665. ]
  666. },
  667. "Message.ToolInvocation.ToolPartialCall": {
  668. "type": "object",
  669. "properties": {
  670. "state": {
  671. "type": "string",
  672. "const": "partial-call"
  673. },
  674. "step": {
  675. "type": "number"
  676. },
  677. "toolCallId": {
  678. "type": "string"
  679. },
  680. "toolName": {
  681. "type": "string"
  682. },
  683. "args": {}
  684. },
  685. "required": [
  686. "state",
  687. "toolCallId",
  688. "toolName"
  689. ]
  690. },
  691. "Message.ToolInvocation.ToolResult": {
  692. "type": "object",
  693. "properties": {
  694. "state": {
  695. "type": "string",
  696. "const": "result"
  697. },
  698. "step": {
  699. "type": "number"
  700. },
  701. "toolCallId": {
  702. "type": "string"
  703. },
  704. "toolName": {
  705. "type": "string"
  706. },
  707. "args": {},
  708. "result": {
  709. "type": "string"
  710. }
  711. },
  712. "required": [
  713. "state",
  714. "toolCallId",
  715. "toolName",
  716. "result"
  717. ]
  718. },
  719. "Message.Part.SourceUrl": {
  720. "type": "object",
  721. "properties": {
  722. "type": {
  723. "type": "string",
  724. "const": "source-url"
  725. },
  726. "sourceId": {
  727. "type": "string"
  728. },
  729. "url": {
  730. "type": "string"
  731. },
  732. "title": {
  733. "type": "string"
  734. },
  735. "providerMetadata": {
  736. "type": "object",
  737. "additionalProperties": {}
  738. }
  739. },
  740. "required": [
  741. "type",
  742. "sourceId",
  743. "url"
  744. ]
  745. },
  746. "Message.Part.File": {
  747. "type": "object",
  748. "properties": {
  749. "type": {
  750. "type": "string",
  751. "const": "file"
  752. },
  753. "mediaType": {
  754. "type": "string"
  755. },
  756. "filename": {
  757. "type": "string"
  758. },
  759. "url": {
  760. "type": "string"
  761. }
  762. },
  763. "required": [
  764. "type",
  765. "mediaType",
  766. "url"
  767. ]
  768. },
  769. "Message.Part.StepStart": {
  770. "type": "object",
  771. "properties": {
  772. "type": {
  773. "type": "string",
  774. "const": "step-start"
  775. }
  776. },
  777. "required": [
  778. "type"
  779. ]
  780. },
  781. "Event.lsp.client.diagnostics": {
  782. "type": "object",
  783. "properties": {
  784. "type": {
  785. "type": "string",
  786. "const": "lsp.client.diagnostics"
  787. },
  788. "properties": {
  789. "type": "object",
  790. "properties": {
  791. "serverID": {
  792. "type": "string"
  793. },
  794. "path": {
  795. "type": "string"
  796. }
  797. },
  798. "required": [
  799. "serverID",
  800. "path"
  801. ]
  802. }
  803. },
  804. "required": [
  805. "type",
  806. "properties"
  807. ]
  808. },
  809. "Event.permission.updated": {
  810. "type": "object",
  811. "properties": {
  812. "type": {
  813. "type": "string",
  814. "const": "permission.updated"
  815. },
  816. "properties": {
  817. "$ref": "#/components/schemas/permission.info"
  818. }
  819. },
  820. "required": [
  821. "type",
  822. "properties"
  823. ]
  824. },
  825. "permission.info": {
  826. "type": "object",
  827. "properties": {
  828. "id": {
  829. "type": "string"
  830. },
  831. "sessionID": {
  832. "type": "string"
  833. },
  834. "title": {
  835. "type": "string"
  836. },
  837. "metadata": {
  838. "type": "object",
  839. "additionalProperties": {}
  840. },
  841. "time": {
  842. "type": "object",
  843. "properties": {
  844. "created": {
  845. "type": "number"
  846. }
  847. },
  848. "required": [
  849. "created"
  850. ]
  851. }
  852. },
  853. "required": [
  854. "id",
  855. "sessionID",
  856. "title",
  857. "metadata",
  858. "time"
  859. ]
  860. },
  861. "Event.session.updated": {
  862. "type": "object",
  863. "properties": {
  864. "type": {
  865. "type": "string",
  866. "const": "session.updated"
  867. },
  868. "properties": {
  869. "type": "object",
  870. "properties": {
  871. "info": {
  872. "$ref": "#/components/schemas/session.info"
  873. }
  874. },
  875. "required": [
  876. "info"
  877. ]
  878. }
  879. },
  880. "required": [
  881. "type",
  882. "properties"
  883. ]
  884. },
  885. "session.info": {
  886. "type": "object",
  887. "properties": {
  888. "id": {
  889. "type": "string",
  890. "pattern": "^ses"
  891. },
  892. "share": {
  893. "type": "object",
  894. "properties": {
  895. "secret": {
  896. "type": "string"
  897. },
  898. "url": {
  899. "type": "string"
  900. }
  901. },
  902. "required": [
  903. "secret",
  904. "url"
  905. ]
  906. },
  907. "title": {
  908. "type": "string"
  909. },
  910. "time": {
  911. "type": "object",
  912. "properties": {
  913. "created": {
  914. "type": "number"
  915. },
  916. "updated": {
  917. "type": "number"
  918. }
  919. },
  920. "required": [
  921. "created",
  922. "updated"
  923. ]
  924. }
  925. },
  926. "required": [
  927. "id",
  928. "title",
  929. "time"
  930. ]
  931. },
  932. "App.Info": {
  933. "type": "object",
  934. "properties": {
  935. "time": {
  936. "type": "object",
  937. "properties": {
  938. "initialized": {
  939. "type": "number"
  940. }
  941. }
  942. },
  943. "path": {
  944. "type": "object",
  945. "properties": {
  946. "data": {
  947. "type": "string"
  948. },
  949. "root": {
  950. "type": "string"
  951. },
  952. "cwd": {
  953. "type": "string"
  954. }
  955. },
  956. "required": [
  957. "data",
  958. "root",
  959. "cwd"
  960. ]
  961. }
  962. },
  963. "required": [
  964. "time",
  965. "path"
  966. ]
  967. },
  968. "Provider.Info": {
  969. "type": "object",
  970. "properties": {
  971. "id": {
  972. "type": "string"
  973. },
  974. "name": {
  975. "type": "string"
  976. },
  977. "options": {
  978. "type": "object",
  979. "additionalProperties": {}
  980. },
  981. "models": {
  982. "type": "array",
  983. "items": {
  984. "$ref": "#/components/schemas/Provider.Model"
  985. }
  986. }
  987. },
  988. "required": [
  989. "id",
  990. "name",
  991. "models"
  992. ]
  993. },
  994. "Provider.Model": {
  995. "type": "object",
  996. "properties": {
  997. "id": {
  998. "type": "string"
  999. },
  1000. "name": {
  1001. "type": "string"
  1002. },
  1003. "cost": {
  1004. "type": "object",
  1005. "properties": {
  1006. "input": {
  1007. "type": "number"
  1008. },
  1009. "inputCached": {
  1010. "type": "number"
  1011. },
  1012. "output": {
  1013. "type": "number"
  1014. },
  1015. "outputCached": {
  1016. "type": "number"
  1017. }
  1018. },
  1019. "required": [
  1020. "input",
  1021. "inputCached",
  1022. "output",
  1023. "outputCached"
  1024. ]
  1025. },
  1026. "contextWindow": {
  1027. "type": "number"
  1028. },
  1029. "maxOutputTokens": {
  1030. "type": "number"
  1031. },
  1032. "attachment": {
  1033. "type": "boolean"
  1034. },
  1035. "reasoning": {
  1036. "type": "boolean"
  1037. }
  1038. },
  1039. "required": [
  1040. "id",
  1041. "cost",
  1042. "contextWindow",
  1043. "attachment"
  1044. ]
  1045. }
  1046. }
  1047. }
  1048. }