{"openapi":"3.1.0","info":{"title":"MOF++ API","description":"\nWeb resource for the construction of metal-organic frameworks: net topologies,\nbuilding blocks, framework structures and MOF-FF force-field parameters.\n\n**Reads need no credential.** Search and download are open, by design.\n\nThree API surfaces, one implementation behind them:\n\n* `/api/v1` — the REST core. Target this.\n* `/ff/…` — the surface the installed `mofplus` Python client speaks.\n* `/API/{user,admin}/xmlrpc` — the original XML-RPC contract, deprecated,\n  answering `Deprecation` and `Sunset` headers on every call.\n\nData is licensed per record; the licence is in every response.\n","contact":{"name":"MOF++ maintainers","url":"https://mofpp.ramabile.casa/contact"},"license":{"name":"MIT","identifier":"MIT"},"version":"0.1.0"},"paths":{"/api/v1/search":{"get":{"tags":["rest core"],"summary":"Search every record type by name","description":"The simple search, for callers that would rather not pick a collection.\n\nNets, building blocks, frameworks and force fields, grouped and counted by\ntype. The ranking rule travels in ``ranking``; a query that was trimmed or\nstripped of punctuation says so in ``interpretation`` and reports what it\nactually matched in ``searched_for``; a query that matched nothing carries\n``suggestions``. Held nets are excluded and counted, never dropped in\nsilence.\n\nThe same object the HTML page and ``/search.json`` are rendered from — one\nimplementation, so the three surfaces cannot disagree. For nets by\ncoordination number, symmetry, transitivity or coordination sequence, that\nis ``GET /api/v1/nets`` and ``POST /api/v1/nets/search-cs``.","operationId":"site_search_api_v1_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"A name, or part of one, e.g. 'pcu'","default":"","title":"Q"},"description":"A name, or part of one, e.g. 'pcu'"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Records listed per type; each group also reports its true total","default":20,"title":"Limit"},"description":"Records listed per type; each group also reports its true total"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Site Search Api V1 Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/nets":{"get":{"tags":["rest core"],"summary":"Search nets","operationId":"search_nets_api_v1_nets_get","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Substring of the net name","title":"Name"},"description":"Substring of the net name"},{"name":"coordination","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated coordination numbers, e.g. '3,6'","title":"Coordination"},"description":"Comma-separated coordination numbers, e.g. '3,6'"},{"name":"exclusive","in":"query","required":false,"schema":{"type":"boolean","description":"Forbid vertices outside the requested coordinations","default":false,"title":"Exclusive"},"description":"Forbid vertices outside the requested coordinations"},{"name":"spacegroup_number","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":230,"minimum":1},{"type":"null"}],"title":"Spacegroup Number"}},{"name":"pqrs","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Transitivity, e.g. '3,4,*,*'","title":"Pqrs"},"description":"Transitivity, e.g. '3,4,*,*'"},{"name":"include_catenated","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Catenated"}},{"name":"order","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Result order: 'rcsr' (default) by the derived RCSR index, nets without an RCSR symbol last and by name; 'name'; 'complexity'.","title":"Order"},"description":"Result order: 'rcsr' (default) by the derived RCSR index, nets without an RCSR symbol last and by name; 'name'; 'complexity'."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":9223372036854775807,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/nets/search-cs":{"post":{"tags":["rest core"],"summary":"Search nets by coordination sequence","description":"Advanced search. Backs the XML-RPC ``search_cs`` method as well.","operationId":"search_nets_cs_api_v1_nets_search_cs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CSSearch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Search Nets Cs Api V1 Nets Search Cs Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/nets/{name}":{"get":{"tags":["rest core"],"summary":"One net","description":"One net, or 403 for one held pending licence verification.\n\nThe held answer is the same object the HTML page renders, at the same\nstatus code (``web.held_record`` explains the choice): the record is known\nand identified, its content is withheld, and saying so is not a 404.\n\nThe full record carries three blocks the list rows do not: ``systre`` (the\ncanonical key, its checksum and the provenance of both — see\n``nets.systre`` for why it is not on a 500-row page, and ``nets.systre_held``\nfor why a held record states it as withheld instead), and\n``coordination_sequences``, which says whether the mapping of the sequences\nonto the vertex classes was corroborated, corrected here, or left\nundecided. Neither is derived in this layer; both are the record's own\nprovenance, read out.","operationId":"get_net_api_v1_nets__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Net Api V1 Nets  Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/building-blocks":{"get":{"tags":["rest core"],"summary":"Search building blocks","operationId":"search_bbs_api_v1_building_blocks_get","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^(organic|inorganic)$"},{"type":"null"}],"title":"Type"}},{"name":"coordination","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":9223372036854775807,"minimum":1},{"type":"null"}],"title":"Coordination"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":9223372036854775807,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/building-blocks/{name}":{"get":{"tags":["rest core"],"summary":"One building block","operationId":"get_bb_api_v1_building_blocks__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Bb Api V1 Building Blocks  Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/frameworks":{"get":{"tags":["rest core"],"summary":"Search frameworks","operationId":"search_frameworks_api_v1_frameworks_get","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},{"name":"net","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Restrict to one underlying net","title":"Net"},"description":"Restrict to one underlying net"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","maximum":9223372036854775807,"minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Page"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/frameworks/{name}":{"get":{"tags":["rest core"],"summary":"One framework","operationId":"get_framework_api_v1_frameworks__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Framework Api V1 Frameworks  Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/force-fields":{"get":{"tags":["rest core"],"summary":"Force fields","operationId":"list_force_fields_api_v1_force_fields_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response List Force Fields Api V1 Force Fields Get"}}}}}}},"/api/v1/force-fields/{name}":{"get":{"tags":["rest core"],"summary":"One force field, with its fits","operationId":"get_force_field_api_v1_force_fields__name__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Force Field Api V1 Force Fields  Name  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/force-fields/{name}/fits/{fit_id}/params/{ric}":{"get":{"tags":["rest core"],"summary":"Parameters of a fit","operationId":"get_fit_params_api_v1_force_fields__name__fits__fit_id__params__ric__get","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","title":"Name"}},{"name":"fit_id","in":"path","required":true,"schema":{"type":"integer","title":"Fit Id"}},{"name":"ric","in":"path","required":true,"schema":{"type":"string","title":"Ric"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Fit Params Api V1 Force Fields  Name  Fits  Fit Id  Params  Ric  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/fragments":{"get":{"tags":["rest core"],"summary":"Force-field fragments","operationId":"list_fragments_api_v1_fragments_get","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},{"name":"atypes","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated atom types","title":"Atypes"},"description":"Comma-separated atom types"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Fragments Api V1 Fragments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tokens":{"post":{"tags":["rest core"],"summary":"Mint an API token","description":"Exchange any accepted credential — including a legacy password over\nHTTP Basic — for a scoped token. This is the bridge that lets installed\nclients migrate without a flag day.\n\nA token can only carry scopes its holder already has, so an upload token\nminted by a ``weaver`` cannot reach curation endpoints.","operationId":"create_token_api_v1_tokens_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/whoami":{"get":{"tags":["rest core"],"summary":"Identify the current credential","operationId":"whoami_api_v1_whoami_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Whoami Api V1 Whoami Get"}}}}}}},"/ff/gen/check":{"get":{"tags":["ff (legacy client surface)"],"summary":"Connection check","description":"``api.check_connection`` (``napi.py:141-148``).","operationId":"check_ff_gen_check_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ff/gen/special_atypes":{"get":{"tags":["ff (legacy client surface)"],"summary":"Special atom types","operationId":"special_atypes_ff_gen_special_atypes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ff/gen/FF":{"get":{"tags":["ff (legacy client surface)"],"summary":"Force fields","operationId":"list_ff_ff_gen_FF_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ff/gen/FFrefs":{"get":{"tags":["ff (legacy client surface)"],"summary":"Reference systems","operationId":"list_refs_ff_gen_FFrefs_get","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ff/gen/FFfits":{"get":{"tags":["ff (legacy client surface)"],"summary":"Fits","operationId":"list_fits_ff_gen_FFfits_get","parameters":[{"name":"FFID","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ffid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ff (legacy client surface)"],"summary":"Create or update a fit","description":"Answers ``{\"status\", \"id\", \"errors\"}``.\n\nDeliberately no ``FFfits`` key: the client reads ``ret[\"errors\"]`` and\n``ret[\"id\"]`` off the whole document (``napi.py:194-200``), which only works\nwhen ``send_data`` finds no reskey and returns the document itself.","operationId":"post_fit_ff_gen_FFfits_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ff/gen/atypes":{"get":{"tags":["ff (legacy client surface)"],"summary":"Atom types","operationId":"list_atypes_ff_gen_atypes_get","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ff/gen/FFfrags":{"get":{"tags":["ff (legacy client surface)"],"summary":"All fragments","operationId":"list_frags_ff_gen_FFfrags_get","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ff/frags/frags":{"get":{"tags":["ff (legacy client surface)"],"summary":"Fragments matching atom types","operationId":"frags_for_atypes_ff_frags_frags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ff/gen/refs4frags":{"get":{"tags":["ff (legacy client surface)"],"summary":"References for fragments, or the reverse","description":"One endpoint, two directions.\n\nThe client calls it with ``frags=`` to get references and with ``refs=`` to\nget fragments (``napi.py:235-239``) — the same URL both ways.","operationId":"refs4frags_ff_gen_refs4frags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ff/gen/refs4atypes":{"get":{"tags":["ff (legacy client surface)"],"summary":"Atom types covered by references","operationId":"refs4atypes_ff_gen_refs4atypes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ff/gen/params/{ric}/{fitid}":{"get":{"tags":["ff (legacy client surface)"],"summary":"Parameters of a fit","operationId":"get_params_ff_gen_params__ric___fitid__get","parameters":[{"name":"ric","in":"path","required":true,"schema":{"type":"string","title":"Ric"}},{"name":"fitid","in":"path","required":true,"schema":{"type":"integer","title":"Fitid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ff/gen/topoqeq_fit":{"get":{"tags":["ff (legacy client surface)"],"summary":"topoqeq fits","operationId":"topoqeq_fit_ff_gen_topoqeq_fit_get","parameters":[{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ff/gen/topoqeq_par":{"get":{"tags":["ff (legacy client surface)"],"summary":"topoqeq parameters","operationId":"topoqeq_par_ff_gen_topoqeq_par_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ff/get_file/{fname}":{"get":{"tags":["ff (legacy client surface)"],"summary":"Raw deposited file","description":"Raw text, no envelope — ``get_response_file`` returns ``response.text``\n(``napi.py:104-112``). Looks up a fragment by name first, then falls back to\na literal path inside the file store.","operationId":"get_file_ff_get_file__fname__get","parameters":[{"name":"fname","in":"path","required":true,"schema":{"type":"string","title":"Fname"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ff/gen/set_params/{ric}":{"post":{"tags":["ff (legacy client surface)"],"summary":"Insert or update parameters","description":"Answers ``{\"status\", \"id\"}`` — again reskey-free, see :func:`post_fit`.","operationId":"post_params_ff_gen_set_params__ric__post","parameters":[{"name":"ric","in":"path","required":true,"schema":{"type":"string","title":"Ric"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ff/gen/del_params/{ric}":{"post":{"tags":["ff (legacy client surface)"],"summary":"Delete parameters","operationId":"delete_params_ff_gen_del_params__ric__post","parameters":[{"name":"ric","in":"path","required":true,"schema":{"type":"string","title":"Ric"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ff/frags/upload":{"post":{"tags":["ff (legacy client surface)"],"summary":"Upload a fragment","description":"The one genuinely multipart call (``napi.py:291-336``).\n\n``atypes`` arrives as repeated form fields and ``annotate`` as a JSON\nstring; ``priority`` defaults client-side to the non-hydrogen atom count.","operationId":"upload_frag_ff_frags_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_frag_ff_frags_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"Body_upload_frag_ff_frags_upload_post":{"properties":{"mfpx":{"type":"string","contentMediaType":"application/octet-stream","title":"Mfpx"},"name":{"type":"string","title":"Name"},"priority":{"type":"integer","title":"Priority","default":0},"atypes":{"items":{"type":"string"},"type":"array","title":"Atypes","default":[]},"annotate":{"type":"string","title":"Annotate","default":"{}"},"comment":{"type":"string","title":"Comment","default":""}},"type":"object","required":["mfpx","name"],"title":"Body_upload_frag_ff_frags_upload_post"},"CSSearch":{"properties":{"cs":{"items":{"items":{"type":"integer"},"type":"array"},"type":"array","title":"Cs","description":"One sequence per vertex"},"vs":{"items":{"type":"string"},"type":"array","title":"Vs","description":"Vertex symbols, optional"},"filter_catenated":{"type":"boolean","title":"Filter Catenated","description":"Drop catenated nets (names containing '-c')","default":false}},"type":"object","title":"CSSearch","description":"Body of the coordination-sequence search."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"Page":{"properties":{"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"results":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Results"},"excluded_for_missing_data":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Excluded For Missing Data"},"excluded_for_unknown_catenation":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Excluded For Unknown Catenation"},"held_pending_licence":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Held Pending Licence"},"order":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Order"}},"type":"object","required":["total","limit","offset","results"],"title":"Page"},"TokenRequest":{"properties":{"label":{"type":"string","maxLength":128,"title":"Label","default":""},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"}},"type":"object","title":"TokenRequest"},"TokenResponse":{"properties":{"token":{"type":"string","title":"Token"},"prefix":{"type":"string","title":"Prefix"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"},"note":{"type":"string","title":"Note"}},"type":"object","required":["token","prefix","scopes","note"],"title":"TokenResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}}}