{"components":{"schemas":{"CardDto":{"additionalProperties":false,"properties":{"color_identity":{"items":{"type":"string"},"type":"array"},"colors":{"items":{"type":"string"},"type":"array"},"colors_known":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"legalities":{"items":{"$ref":"#/components/schemas/LegalityDto"},"type":"array"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"mana_cost":{"type":["string","null"]},"mana_value":{"format":"double","type":["number","null"]},"name":{"type":"string"},"oracle_text":{"type":["string","null"]},"type_line":{"type":["string","null"]}},"required":["id","name","colors_known","colors","color_identity","legalities","links"],"type":"object"},"CardImageDto":{"properties":{"kind":{"type":"string"},"url":{"type":"string"}},"required":["kind","url"],"type":"object"},"CatalogStatusDto":{"properties":{"generated_at":{"format":"date-time","type":"string"},"schema_version":{"format":"int32","minimum":0,"type":"integer"},"semantic_available":{"type":"boolean"},"version":{"type":"string"}},"required":["version","generated_at","schema_version","semantic_available"],"type":"object"},"CategoryDto":{"additionalProperties":false,"properties":{"collection_id":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"name":{"type":"string"},"native_created_at_ms":{"format":"int64","type":["integer","null"]},"native_id":{"type":["string","null"]},"native_updated_at_ms":{"format":"int64","type":["integer","null"]},"position":{"format":"int64","type":"integer"},"revision":{"type":"string"},"updated_at":{"type":"string"},"zone":{"type":"string"}},"required":["id","collection_id","name","zone","position","revision","created_at","updated_at","links"],"type":"object"},"CategoryInput":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"name":{"description":"Nonblank, at most 200 UTF-16 code units; no controls.","minLength":1,"type":"string"},"native_created_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"native_id":{"description":"Original native string identity; nonblank, at most 1024 UTF-8 bytes, unique within owner and resource type.","type":["string","null"]},"native_updated_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"position":{"format":"int64","type":"integer"},"zone":{"enum":["mainboard","maybeboard","commander"],"type":"string"}},"type":"object"},"CollectionDto":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"metadata":{"$ref":"#/components/schemas/CollectionMetadataDto"},"name":{"type":"string"},"revision":{"type":"string"},"ruleset":{"type":"string"},"updated_at":{"type":"string"}},"required":["metadata","id","name","ruleset","revision","created_at","updated_at","links"],"type":"object"},"CollectionExport":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":"string"},"collection_revision":{"type":"string"},"document":{"$ref":"#/components/schemas/NativeArchive"},"export_version":{"enum":[1],"type":"integer"},"file_name":{"type":"string"},"format":{"enum":["grimora-archive"],"type":"string"},"warnings":{"items":{"type":"string"},"type":"array"}},"required":["format","export_version","collection_id","collection_revision","file_name","warnings","document"],"type":"object"},"CollectionMetadataDto":{"properties":{"dashboard_includes_lands":{"type":"boolean"},"description":{"type":"string"},"description_rtfd_base64":{"type":["string","null"]},"display_sort_direction":{"type":"string"},"display_sort_mode":{"type":["string","null"]},"is_pinned":{"type":"boolean"},"native_created_at_ms":{"format":"int64","type":["integer","null"]},"native_id":{"type":["string","null"]},"native_updated_at_ms":{"format":"int64","type":["integer","null"]},"pinned_at_ms":{"format":"int64","type":["integer","null"]},"position":{"format":"int64","type":"integer"},"shows_dashboard":{"type":"boolean"},"shows_multi_category_cards":{"type":"boolean"},"system_role":{"type":["string","null"]},"view_mode":{"type":"string"}},"required":["description","is_pinned","position","shows_dashboard","dashboard_includes_lands","display_sort_direction","view_mode","shows_multi_category_cards"],"type":"object"},"CollectionMetadataInput":{"additionalProperties":false,"properties":{"dashboard_includes_lands":{"type":"boolean"},"description":{"description":"Plain text, up to 256 KiB UTF-8; empty string clears.","type":"string"},"description_rtfd_base64":{"description":"Base64 encoding of up to 1 MiB opaque native RTFD bytes. null clears; omission preserves in PATCH.","type":["string","null"]},"display_sort_direction":{"enum":["ascending","descending"],"type":"string"},"display_sort_mode":{"enum":[null,"name","releaseDate","setNumber","rarity","color","priceUSD","priceTIX","priceEUR","manaValue","power","toughness","artistName","edhrecRank","pennyRank"],"type":["string","null"]},"is_pinned":{"type":"boolean"},"native_created_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"native_id":{"description":"Original native string identity; nonblank, at most 1024 UTF-8 bytes, unique within owner and resource type.","type":["string","null"]},"native_updated_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"pinned_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"position":{"format":"int64","type":"integer"},"shows_dashboard":{"type":"boolean"},"shows_multi_category_cards":{"type":"boolean"},"system_role":{"enum":[null,"favourites","scanned"],"type":["string","null"]},"view_mode":{"enum":["grid","list"],"type":"string"}},"type":"object"},"CollectionSummary":{"additionalProperties":false,"properties":{"calculation_version":{"enum":[1],"type":"integer"},"catalog_generation":{"type":"string"},"collection_id":{"format":"uuid","type":"string"},"collection_revision":{"type":"string"},"dashboard":{"additionalProperties":false,"properties":{"color_distribution":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"percentage":{"maximum":1,"minimum":0,"type":"number"},"quantity":{"minimum":0,"type":"integer"}},"required":["name","quantity","percentage"],"type":"object"},"type":"array"},"includes_lands":{"type":"boolean"},"price_policy":{"enum":["scryfall-retail-nonfoil-usd"],"type":"string"},"priced_quantity":{"minimum":0,"type":"integer"},"top_types":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"percentage":{"maximum":1,"minimum":0,"type":"number"},"quantity":{"minimum":0,"type":"integer"}},"required":["name","quantity","percentage"],"type":"object"},"type":"array"},"total_price_usd":{"pattern":"^[0-9]+(\\.[0-9]+)?$","type":"string"},"total_quantity":{"minimum":0,"type":"integer"},"unavailable_quantity":{"minimum":0,"type":"integer"},"unpriced_quantity":{"minimum":0,"type":"integer"}},"required":["color_distribution","includes_lands","price_policy","priced_quantity","top_types","total_price_usd","total_quantity","unavailable_quantity","unpriced_quantity"],"type":"object"},"rules":{"additionalProperties":false,"properties":{"commander_quantity":{"minimum":0,"type":"integer"},"deck_quantity":{"minimum":0,"type":"integer"},"ruleset":{"enum":["none","commander"],"type":"string"},"scope":{"enum":["whole_collection"],"type":"string"},"warnings":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"message":{"type":"string"}},"required":["id","message"],"type":"object"},"type":"array"}},"required":["scope","ruleset","commander_quantity","deck_quantity","warnings"],"type":"object"}},"required":["calculation_version","collection_id","collection_revision","catalog_generation","dashboard","rules"],"type":"object"},"DiscoveryDto":{"properties":{"api_version":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"maximum_page_size":{"format":"int32","minimum":0,"type":"integer"},"search_fields":{"items":{"type":"string"},"type":"array"},"search_grammar_version":{"format":"int32","minimum":0,"type":"integer"}},"required":["api_version","links","search_grammar_version","search_fields","maximum_page_size"],"type":"object"},"EntryDto":{"additionalProperties":false,"properties":{"collection_id":{"type":"string"},"created_at":{"type":"string"},"finish":{"type":"string"},"id":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"metadata":{"$ref":"#/components/schemas/EntryMetadataDto"},"printing_id":{"type":"string"},"quantity":{"format":"int32","type":"integer"},"revision":{"type":"string"},"updated_at":{"type":"string"},"zone":{"type":"string"}},"required":["metadata","id","collection_id","printing_id","finish","quantity","zone","revision","created_at","updated_at","links"],"type":"object"},"EntryMetadataDto":{"properties":{"category_id":{"type":["string","null"]},"finish_is_explicit":{"type":"boolean"},"label_ids":{"items":{"type":"string"},"type":"array"},"native_created_at_ms":{"format":"int64","type":["integer","null"]},"native_id":{"type":["string","null"]},"native_updated_at_ms":{"format":"int64","type":["integer","null"]},"position":{"format":"int64","type":"integer"},"secondary_category_ids":{"items":{"type":"string"},"type":"array"}},"required":["position","secondary_category_ids","label_ids","finish_is_explicit"],"type":"object"},"EntryMetadataInput":{"additionalProperties":false,"properties":{"category_id":{"format":"uuid","type":["string","null"]},"finish_is_explicit":{"type":"boolean"},"label_ids":{"items":{"format":"uuid","type":"string"},"maxItems":1000,"type":"array","uniqueItems":true},"native_created_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"native_id":{"description":"Original native string identity; nonblank, at most 1024 UTF-8 bytes, unique within owner and resource type.","type":["string","null"]},"native_updated_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"position":{"format":"int64","type":"integer"},"secondary_category_ids":{"items":{"format":"uuid","type":"string"},"maxItems":1000,"type":"array","uniqueItems":true}},"type":"object"},"Expanded_CardDto":{"additionalProperties":false,"description":"Primary fields (full or selected) and explicitly requested one-level related resources. Nested collections are bounded pages with full fields; singular resources are full representations.","properties":{"color_identity":{"items":{"type":"string"},"type":"array"},"colors":{"items":{"type":"string"},"type":"array"},"colors_known":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"included":{"additionalProperties":false,"minProperties":1,"properties":{"printings":{"$ref":"#/components/schemas/Included_PageDto_PrintingDto"},"tag-assignments":{"$ref":"#/components/schemas/Included_PageDto_TagAssignmentDto"},"tags":{"$ref":"#/components/schemas/Included_PageDto_TagDto"}},"type":"object"},"legalities":{"items":{"$ref":"#/components/schemas/LegalityDto"},"type":"array"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"mana_cost":{"type":["string","null"]},"mana_value":{"format":"double","type":["number","null"]},"name":{"type":"string"},"oracle_text":{"type":["string","null"]},"type_line":{"type":["string","null"]}},"required":["id","links","included"],"type":"object"},"Expanded_EntryDto":{"additionalProperties":false,"properties":{"collection_id":{"type":"string"},"created_at":{"type":"string"},"finish":{"type":"string"},"id":{"type":"string"},"included":{"additionalProperties":false,"properties":{"printing":{"oneOf":[{"$ref":"#/components/schemas/PrintingDto"},{"type":"null"}]}},"required":["printing"],"type":"object"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"metadata":{"$ref":"#/components/schemas/EntryMetadataDto"},"printing_id":{"type":"string"},"quantity":{"format":"int32","type":"integer"},"revision":{"type":"string"},"updated_at":{"type":"string"},"zone":{"type":"string"}},"required":["metadata","id","collection_id","printing_id","finish","quantity","zone","revision","created_at","updated_at","links","included"],"type":"object"},"Expanded_PageDto_CardDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/Expanded_CardDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"Expanded_PageDto_PrintingDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/Expanded_PrintingDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"Expanded_PageDto_TagAssignmentDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/Expanded_TagAssignmentDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"Expanded_PrintingDto":{"additionalProperties":false,"description":"Primary fields (full or selected) and explicitly requested one-level related resources. Nested collections are bounded pages with full fields; singular resources are full representations.","properties":{"card_id":{"format":"uuid","type":["string","null"]},"collector_number":{"type":"string"},"faces":{"items":{"$ref":"#/components/schemas/FaceDto"},"type":"array"},"finishes":{"items":{"type":"string"},"type":"array"},"games":{"items":{"type":"string"},"type":"array"},"id":{"format":"uuid","type":"string"},"images":{"items":{"$ref":"#/components/schemas/CardImageDto"},"type":"array"},"included":{"additionalProperties":false,"minProperties":1,"properties":{"card":{"anyOf":[{"$ref":"#/components/schemas/CardDto"},{"type":"null"}]}},"type":"object"},"language":{"type":"string"},"layout":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"metadata":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PrintingMetadataDto"}]},"name":{"type":"string"},"prices":{"items":{"$ref":"#/components/schemas/PriceDto"},"type":"array"},"rarity":{"type":"string"},"released_at":{"format":"date","type":"string"},"set_code":{"type":"string"}},"required":["id","links","included"],"type":"object"},"Expanded_PrivatePage_EntryDto":{"additionalProperties":false,"properties":{"catalog_generation":{"description":"Immutable catalog used for every printing in this page. Later private pages select the then-active catalog; private pagination is not a snapshot.","type":"string"},"data":{"items":{"$ref":"#/components/schemas/Expanded_EntryDto"},"maxItems":100,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact owned-resource count before cursor/limit, only when count=true. Count and rows share one user-store snapshot.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"Expanded_TagAssignmentDto":{"additionalProperties":false,"description":"Primary fields (full or selected) and explicitly requested one-level related resources. Nested collections are bounded pages with full fields; singular resources are full representations.","properties":{"annotation":{"type":["string","null"]},"card_id":{"format":"uuid","type":"string"},"included":{"additionalProperties":false,"minProperties":1,"properties":{"card":{"$ref":"#/components/schemas/CardDto"},"tag":{"$ref":"#/components/schemas/TagDto"}},"type":"object"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"tag_id":{"type":"string"},"weight":{"type":"string"}},"required":["card_id","tag_id","links","included"],"type":"object"},"FaceDto":{"properties":{"defense":{"type":["string","null"]},"images":{"items":{"$ref":"#/components/schemas/CardImageDto"},"type":"array"},"loyalty":{"type":["string","null"]},"mana_cost":{"type":["string","null"]},"name":{"type":"string"},"oracle_text":{"type":["string","null"]},"position":{"format":"int32","minimum":0,"type":"integer"},"power":{"type":["string","null"]},"toughness":{"type":["string","null"]},"type_line":{"type":["string","null"]}},"required":["position","name","images"],"type":"object"},"HealthDto":{"properties":{"status":{"type":"string"}},"required":["status"],"type":"object"},"Included_PageDto_PrintingDto":{"additionalProperties":false,"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/PrintingDto"},"maxItems":10,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"}},"required":["data","links","catalog_generation"],"type":"object"},"Included_PageDto_TagAssignmentDto":{"additionalProperties":false,"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/TagAssignmentDto"},"maxItems":10,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"}},"required":["data","links","catalog_generation"],"type":"object"},"Included_PageDto_TagDto":{"additionalProperties":false,"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/TagDto"},"maxItems":10,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"}},"required":["data","links","catalog_generation"],"type":"object"},"LabelDto":{"additionalProperties":false,"properties":{"collection_id":{"type":["string","null"]},"color":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"name":{"type":"string"},"native_created_at_ms":{"format":"int64","type":["integer","null"]},"native_id":{"type":["string","null"]},"native_updated_at_ms":{"format":"int64","type":["integer","null"]},"position":{"format":"int64","type":"integer"},"revision":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","color","position","revision","created_at","updated_at","links"],"type":"object"},"LabelInput":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":["string","null"]},"color":{"enum":["green","red","blue","amber","purple","orange","teal","pink","grey"],"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"description":"Nonblank, at most 200 UTF-16 code units; no controls.","minLength":1,"type":"string"},"native_created_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"native_id":{"description":"Original native string identity; nonblank, at most 1024 UTF-8 bytes, unique within owner and resource type.","type":["string","null"]},"native_updated_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"position":{"format":"int64","type":"integer"}},"type":"object"},"LegacyError":{"properties":{"error":{"properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"type":"object"}},"required":["error"],"type":"object"},"LegalityDto":{"properties":{"format":{"type":"string"},"status":{"type":"string"}},"required":["format","status"],"type":"object"},"NativeArchive":{"additionalProperties":false,"properties":{"categories":{"items":{"$ref":"#/components/schemas/NativeCategory"},"type":"array"},"entries":{"items":{"$ref":"#/components/schemas/NativeEntry"},"type":"array"},"list":{"$ref":"#/components/schemas/NativeList"},"schemaVersion":{"enum":[1,2],"format":"int32","minimum":0,"type":"integer"}},"required":["schemaVersion","list","categories","entries"],"type":"object"},"NativeCategory":{"additionalProperties":false,"properties":{"createdAt":{"type":"string"},"id":{"type":"string"},"listID":{"type":["string","null"]},"name":{"type":"string"},"position":{"format":"int64","type":"integer"},"updatedAt":{"type":"string"},"zone":{"type":"string"}},"required":["id","name","position","createdAt","updatedAt"],"type":"object"},"NativeEntry":{"additionalProperties":false,"properties":{"cardID":{"type":"string"},"cardName":{"type":["string","null"]},"categoryID":{"type":["string","null"]},"createdAt":{"type":"string"},"id":{"type":"string"},"labelIDs":{"items":{"type":"string"},"type":"array"},"listID":{"type":["string","null"]},"position":{"format":"int64","type":"integer"},"quantity":{"format":"int32","type":"integer"},"secondaryCategoryIDs":{"items":{"type":"string"},"type":"array"},"selectedFinish":{"type":["string","null"]},"updatedAt":{"type":["string","null"]},"zone":{"type":"string"}},"required":["id","cardID","position","createdAt"],"type":"object"},"NativeHiddenTerm":{"additionalProperties":false,"properties":{"displayLabel":{"maxLength":200,"type":"string"},"field":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z_]+$","type":"string"},"intent":{"enum":["include","exclude"],"type":"string"},"value":{"maxLength":200,"type":"string"}},"required":["field","value","intent","displayLabel"],"type":"object"},"NativeImportIssue":{"additionalProperties":false,"properties":{"code":{"type":"string"},"detail":{"type":"string"},"resource_id":{"format":"uuid","type":["string","null"]}},"required":["code","resource_id","detail"],"type":"object"},"NativeImportMapping":{"additionalProperties":false,"properties":{"id":{"format":"uuid","type":"string"},"native_id":{"type":"string"},"resource":{"enum":["collections","categories","labels","entries"],"type":"string"}},"required":["resource","native_id","id"],"type":"object"},"NativeImportReport":{"additionalProperties":false,"properties":{"applied":{"type":"boolean"},"blockers":{"items":{"$ref":"#/components/schemas/NativeImportIssue"},"type":"array"},"can_apply":{"type":"boolean"},"mappings":{"items":{"$ref":"#/components/schemas/NativeImportMapping"},"type":"array"},"preview_token":{"pattern":"^[a-f0-9]{64}$","type":["string","null"]},"replayed":{"type":"boolean"},"required_acknowledgements":{"items":{"type":"string"},"type":"array","uniqueItems":true},"search_preferences":{"anyOf":[{"$ref":"#/components/schemas/NativePreferencePlan"},{"type":"null"}],"description":"Previewed preference plan; null for library-only sources and receipt replay. Replay never reapplies preferences."},"warnings":{"items":{"$ref":"#/components/schemas/NativeImportIssue"},"type":"array"}},"required":["can_apply","applied","replayed","preview_token","required_acknowledgements","warnings","blockers","mappings","search_preferences"],"type":"object"},"NativeLabel":{"additionalProperties":false,"properties":{"color":{"type":"string"},"createdAt":{"type":"string"},"id":{"type":"string"},"listID":{"type":["string","null"]},"name":{"type":"string"},"position":{"format":"int64","type":"integer"},"updatedAt":{"type":"string"}},"required":["id","name","color","position","createdAt","updatedAt"],"type":"object"},"NativeLibrary":{"additionalProperties":false,"allOf":[{"if":{"properties":{"schemaVersion":{"const":1}}},"then":{"not":{"required":["searchPreferences"]}}}],"properties":{"categories":{"items":{"$ref":"#/components/schemas/NativeCategory"},"type":"array"},"collections":{"items":{"$ref":"#/components/schemas/NativeList"},"type":"array"},"entries":{"items":{"$ref":"#/components/schemas/NativeEntry"},"type":"array"},"format":{"enum":["grimora-native-library"],"type":"string"},"labels":{"items":{"$ref":"#/components/schemas/NativeLabel"},"type":"array"},"schemaVersion":{"enum":[1,2],"format":"int32","minimum":0,"type":"integer"},"searchPreferences":{"$ref":"#/components/schemas/NativeSearchPreferences"}},"required":["format","schemaVersion","collections","categories","labels","entries"],"type":"object"},"NativeList":{"additionalProperties":false,"properties":{"createdAt":{"type":"string"},"dashboardIncludesLands":{"type":"boolean"},"descriptionPlainText":{"type":"string"},"descriptionRTFDData":{"type":["string","null"]},"displaySortDirection":{"type":"string"},"displaySortMode":{"type":["string","null"]},"id":{"type":"string"},"isPinned":{"type":"boolean"},"name":{"type":"string"},"pinnedAt":{"type":["string","null"]},"position":{"format":"int64","type":"integer"},"ruleset":{"type":"string"},"showsDashboard":{"type":"boolean"},"showsMultiCategoryCards":{"type":"boolean"},"systemRole":{"type":["string","null"]},"updatedAt":{"type":"string"},"viewMode":{"type":"string"}},"required":["id","name","createdAt","updatedAt"],"type":"object"},"NativePreferencePlan":{"additionalProperties":false,"properties":{"action":{"enum":["initialize","merge","unchanged"],"type":"string"},"current":{"$ref":"#/components/schemas/NativePreferenceValues"},"current_revision":{"type":"string"},"incoming":{"$ref":"#/components/schemas/NativePreferenceValues"},"omitted_history":{"items":{"type":"string"},"type":"array"},"preserved_fields":{"items":{"type":"string"},"type":"array"},"proposed":{"$ref":"#/components/schemas/NativePreferenceValues"}},"required":["action","current_revision","current","incoming","proposed","preserved_fields","omitted_history"],"type":"object"},"NativePreferenceValues":{"additionalProperties":false,"properties":{"advanced_search_enabled":{"default":true,"type":"boolean"},"always_included_search_text":{"default":"","maxLength":2048,"type":"string"},"default_search_text":{"default":"","maxLength":2048,"type":"string"},"default_sort_direction":{"default":"ascending","enum":["ascending","descending"],"type":"string"},"default_sort_mode":{"default":"releaseDate","enum":["name","releaseDate","setNumber","rarity","color","priceUSD","priceTIX","priceEUR","manaValue","power","toughness","artistName","edhrecRank","pennyRank"],"type":"string"},"display_currency":{"default":"USD","enum":["USD","EUR","TIX"],"type":"string"},"hidden_search_terms":{"items":{"additionalProperties":false,"properties":{"display_label":{"maxLength":200,"type":"string"},"field":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z_]+$","type":"string"},"intent":{"default":"exclude","enum":["include","exclude"],"type":"string"},"value":{"maxLength":200,"type":"string"}},"required":["field","value","display_label"],"type":"object"},"maxItems":64,"type":"array"},"search_history":{"description":"Trim, remove empty/exact duplicates, keep first 10. Recording promotes a query to the front; searches never record implicitly.","items":{"maxLength":2048,"type":"string"},"maxItems":10,"type":"array"}},"required":["default_search_text","always_included_search_text","default_sort_mode","default_sort_direction","display_currency","advanced_search_enabled","search_history","hidden_search_terms"],"type":"object"},"NativeSearchPreferences":{"additionalProperties":false,"minProperties":1,"properties":{"advancedSearchEnabled":{"default":true,"type":"boolean"},"alwaysIncludedSearchText":{"default":"","maxLength":2048,"type":"string"},"defaultSearchText":{"default":"","maxLength":2048,"type":"string"},"defaultSortDirectionRawValue":{"default":"ascending","enum":["ascending","descending"],"type":"string"},"defaultSortModeRawValue":{"default":"releaseDate","enum":["name","releaseDate","setNumber","rarity","color","priceUSD","priceTIX","priceEUR","manaValue","power","toughness","artistName","edhrecRank","pennyRank"],"type":"string"},"displayCurrencyRawValue":{"default":"USD","enum":["USD","EUR","TIX"],"type":"string"},"hiddenSearchTerms":{"items":{"$ref":"#/components/schemas/NativeHiddenTerm"},"maxItems":32,"type":"array"},"searchHistory":{"description":"Trim, remove empty/exact duplicates, keep first 10. Recording promotes a query to the front; searches never record implicitly.","items":{"maxLength":2048,"type":"string"},"maxItems":100,"type":"array"}},"type":"object"},"PageDto_CardDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/CardDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"PageDto_PrintingDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/PrintingDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"PageDto_TagAssignmentDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/TagAssignmentDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"PageDto_TagDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/TagDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"PageLinks":{"properties":{"next":{"type":["string","null"]},"self":{"type":"string"}},"required":["self"],"type":"object"},"PortableCollectionExport":{"additionalProperties":false,"properties":{"catalog_generation":{"type":"string"},"collection_id":{"format":"uuid","type":"string"},"collection_revision":{"type":"string"},"content":{"description":"UTF-8 file contents, at most 2 MiB; not a full backup.","type":"string"},"export_version":{"enum":[1],"type":"integer"},"file_name":{"type":"string"},"format":{"enum":["text","csv","arena","mtgo-dek","edhrec-article"],"type":"string"},"media_type":{"enum":["text/plain","text/csv","application/xml"],"type":"string"},"selected_quantity":{"minimum":0,"type":"integer"},"unique_count":{"minimum":0,"type":"integer"},"warnings":{"items":{"type":"string"},"type":"array"}},"required":["catalog_generation","collection_id","collection_revision","content","export_version","file_name","format","media_type","selected_quantity","unique_count","warnings"],"type":"object"},"PriceDto":{"properties":{"amount":{"type":["string","null"]},"as_of":{"format":"date","type":["string","null"]},"currency":{"type":"string"},"finish":{"type":"string"},"kind":{"type":"string"},"observed_at":{"format":"date-time","type":"string"},"platform":{"type":["string","null"]},"provider":{"type":"string"},"source":{"type":["string","null"]},"source_ids":{"items":{"type":"string"},"type":"array"},"source_version":{"type":["string","null"]}},"required":["provider","currency","finish","kind","observed_at","source_ids"],"type":"object"},"PrintingDto":{"additionalProperties":false,"properties":{"card_id":{"format":"uuid","type":["string","null"]},"collector_number":{"type":"string"},"faces":{"items":{"$ref":"#/components/schemas/FaceDto"},"type":"array"},"finishes":{"items":{"type":"string"},"type":"array"},"games":{"items":{"type":"string"},"type":"array"},"id":{"format":"uuid","type":"string"},"images":{"items":{"$ref":"#/components/schemas/CardImageDto"},"type":"array"},"language":{"type":"string"},"layout":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"metadata":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PrintingMetadataDto"}]},"name":{"type":"string"},"prices":{"items":{"$ref":"#/components/schemas/PriceDto"},"type":"array"},"rarity":{"type":"string"},"released_at":{"format":"date","type":"string"},"set_code":{"type":"string"}},"required":["id","name","set_code","collector_number","language","rarity","layout","released_at","finishes","games","faces","images","prices","links"],"type":"object"},"PrintingMetadataDto":{"properties":{"alchemy":{"type":"boolean"},"artist":{"type":["string","null"]},"artist_count":{"format":"int64","minimum":0,"type":"integer"},"artist_ids":{"items":{"type":"string"},"type":"array"},"base_printing":{"type":"boolean"},"booster":{"type":"boolean"},"booster_fun":{"type":"boolean"},"border_color":{"type":["string","null"]},"color_identity":{"items":{"type":"string"},"type":"array"},"color_indicator":{"items":{"type":"string"},"type":"array"},"colors":{"items":{"type":"string"},"type":"array"},"colors_known":{"type":"boolean"},"defense":{"type":["string","null"]},"digital":{"type":"boolean"},"edhrec_rank":{"format":"int64","minimum":0,"type":["integer","null"]},"flavor_text":{"type":["string","null"]},"foil":{"type":"boolean"},"frame":{"type":["string","null"]},"frame_effects":{"items":{"type":"string"},"type":"array"},"full_art":{"type":"boolean"},"game_changer":{"type":"boolean"},"highres_image":{"type":"boolean"},"illustration_count":{"format":"int64","minimum":0,"type":"integer"},"illustration_id":{"type":["string","null"]},"keywords":{"items":{"type":"string"},"type":"array"},"legalities":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"loyalty":{"type":["string","null"]},"mana_cost":{"type":["string","null"]},"mana_value":{"format":"double","type":["number","null"]},"mtgo_id":{"format":"int64","minimum":0,"type":["integer","null"]},"new_art":{"type":"boolean"},"new_artist":{"type":"boolean"},"new_flavor":{"type":"boolean"},"new_frame":{"type":"boolean"},"new_language":{"type":"boolean"},"new_rarity":{"type":"boolean"},"nonfoil":{"type":"boolean"},"oracle_text":{"type":["string","null"]},"oversized":{"type":"boolean"},"paper_print_count":{"format":"int64","minimum":0,"type":"integer"},"paper_set_count":{"format":"int64","minimum":0,"type":"integer"},"penny_rank":{"format":"int64","minimum":0,"type":["integer","null"]},"power":{"type":["string","null"]},"print_count":{"format":"int64","minimum":0,"type":"integer"},"produced_mana":{"items":{"type":"string"},"type":"array"},"promo":{"type":"boolean"},"promo_types":{"items":{"type":"string"},"type":"array"},"real_card":{"type":"boolean"},"reprint":{"type":"boolean"},"reserved":{"type":"boolean"},"security_stamp":{"type":["string","null"]},"set_count":{"format":"int64","minimum":0,"type":"integer"},"set_name":{"type":["string","null"]},"set_type":{"type":["string","null"]},"story_spotlight":{"type":"boolean"},"textless":{"type":"boolean"},"toughness":{"type":["string","null"]},"type_line":{"type":["string","null"]},"universes_beyond":{"type":"boolean"},"variation":{"type":"boolean"},"watermark":{"type":["string","null"]}},"required":["colors_known","colors","color_identity","legalities","keywords","produced_mana","color_indicator","promo_types","frame_effects","artist_ids","digital","oversized","promo","variation","reserved","game_changer","reprint","booster","story_spotlight","full_art","textless","foil","nonfoil","highres_image","universes_beyond","alchemy","real_card","booster_fun","base_printing","new_art","new_artist","new_flavor","new_rarity","new_frame","new_language","print_count","set_count","paper_print_count","paper_set_count","artist_count","illustration_count"],"type":"object"},"PrivatePage_CategoryDto":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/CategoryDto"},"maxItems":100,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact owned-resource count before cursor/limit, only when count=true. Count and rows share one user-store snapshot.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links"],"type":"object"},"PrivatePage_CollectionDto":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/CollectionDto"},"maxItems":100,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact owned-resource count before cursor/limit, only when count=true. Count and rows share one user-store snapshot.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links"],"type":"object"},"PrivatePage_EntryDto":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/EntryDto"},"maxItems":100,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact owned-resource count before cursor/limit, only when count=true. Count and rows share one user-store snapshot.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links"],"type":"object"},"PrivatePage_LabelDto":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/LabelDto"},"maxItems":100,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact owned-resource count before cursor/limit, only when count=true. Count and rows share one user-store snapshot.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links"],"type":"object"},"Problem":{"properties":{"code":{"type":"string"},"detail":{"type":"string"},"status":{"format":"int32","minimum":0,"type":"integer"},"title":{"type":"string"},"type":{"type":"string"}},"required":["type","title","status","code","detail"],"type":"object"},"SavedSearch":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":["string","null"]},"created_at":{"format":"date-time","type":"string"},"dialect":{"default":"native","enum":["api","native"],"type":"string"},"id":{"format":"uuid","type":"string"},"links":{"additionalProperties":false,"properties":{"self":{"type":"string"}},"required":["self"],"type":"object"},"name":{"maxLength":200,"minLength":1,"type":"string"},"query":{"maxLength":2048,"minLength":1,"type":"string"},"revision":{"pattern":"^[1-9][0-9]*$","type":"string"},"target":{"default":"printings","enum":["cards","printings","entries","collections"],"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["collection_id","created_at","dialect","id","links","name","query","revision","target","updated_at"],"type":"object"},"SavedSearchCreate":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":["string","null"]},"dialect":{"default":"native","enum":["api","native"],"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"maxLength":200,"minLength":1,"type":"string"},"query":{"maxLength":2048,"minLength":1,"type":"string"},"target":{"default":"printings","enum":["cards","printings","entries","collections"],"type":"string"}},"required":["id","name","query"],"type":"object"},"SavedSearchInput":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":["string","null"]},"dialect":{"default":"native","enum":["api","native"],"type":"string"},"name":{"maxLength":200,"minLength":1,"type":"string"},"query":{"maxLength":2048,"minLength":1,"type":"string"},"target":{"default":"printings","enum":["cards","printings","entries","collections"],"type":"string"}},"type":"object"},"SavedSearchPage":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/SavedSearch"},"maxItems":100,"type":"array"},"links":{"additionalProperties":false,"properties":{"next":{"type":["string","null"]},"self":{"type":"string"}},"required":["self","next"],"type":"object"},"total_count":{"minimum":0,"type":"integer"}},"required":["data","links"],"type":"object"},"SavedSearchReplace":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":["string","null"]},"dialect":{"default":"native","enum":["api","native"],"type":"string"},"name":{"maxLength":200,"minLength":1,"type":"string"},"query":{"maxLength":2048,"minLength":1,"type":"string"},"target":{"default":"printings","enum":["cards","printings","entries","collections"],"type":"string"}},"required":["name","query"],"type":"object"},"SearchHistoryInput":{"additionalProperties":false,"properties":{"query":{"maxLength":2048,"type":"string"}},"required":["query"],"type":"object"},"SearchPreferenceInput":{"additionalProperties":false,"properties":{"advanced_search_enabled":{"default":true,"type":"boolean"},"always_included_search_text":{"default":"","maxLength":2048,"type":"string"},"default_search_text":{"default":"","maxLength":2048,"type":"string"},"default_sort_direction":{"default":"ascending","enum":["ascending","descending"],"type":"string"},"default_sort_mode":{"default":"releaseDate","enum":["name","releaseDate","setNumber","rarity","color","priceUSD","priceTIX","priceEUR","manaValue","power","toughness","artistName","edhrecRank","pennyRank"],"type":"string"},"display_currency":{"default":"USD","enum":["USD","EUR","TIX"],"type":"string"},"hidden_search_terms":{"items":{"additionalProperties":false,"properties":{"display_label":{"maxLength":200,"type":"string"},"field":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z_]+$","type":"string"},"intent":{"default":"exclude","enum":["include","exclude"],"type":"string"},"value":{"maxLength":200,"type":"string"}},"required":["field","value","display_label"],"type":"object"},"maxItems":32,"type":"array"},"search_history":{"description":"Trim, remove empty/exact duplicates, keep first 10. Recording promotes a query to the front; searches never record implicitly.","items":{"maxLength":2048,"type":"string"},"maxItems":100,"type":"array"}},"type":"object"},"SearchPreferences":{"additionalProperties":false,"properties":{"advanced_search_enabled":{"default":true,"type":"boolean"},"always_included_search_text":{"default":"","maxLength":2048,"type":"string"},"created_at":{"format":"date-time","type":"string"},"default_search_text":{"default":"","maxLength":2048,"type":"string"},"default_sort_direction":{"default":"ascending","enum":["ascending","descending"],"type":"string"},"default_sort_mode":{"default":"releaseDate","enum":["name","releaseDate","setNumber","rarity","color","priceUSD","priceTIX","priceEUR","manaValue","power","toughness","artistName","edhrecRank","pennyRank"],"type":"string"},"display_currency":{"default":"USD","enum":["USD","EUR","TIX"],"type":"string"},"hidden_search_terms":{"items":{"additionalProperties":false,"properties":{"display_label":{"maxLength":200,"type":"string"},"field":{"maxLength":64,"minLength":1,"pattern":"^[A-Za-z_]+$","type":"string"},"intent":{"default":"exclude","enum":["exclude"],"type":"string"},"value":{"maxLength":200,"type":"string"}},"required":["field","value","display_label","intent"],"type":"object"},"maxItems":32,"type":"array"},"links":{"additionalProperties":false,"properties":{"self":{"type":"string"}},"required":["self"],"type":"object"},"revision":{"pattern":"^[1-9][0-9]*$","type":"string"},"search_history":{"description":"Trim, remove empty/exact duplicates, keep first 10. Recording promotes a query to the front; searches never record implicitly.","items":{"maxLength":2048,"type":"string"},"maxItems":10,"type":"array"},"updated_at":{"format":"date-time","type":"string"}},"required":["advanced_search_enabled","always_included_search_text","created_at","default_search_text","default_sort_direction","default_sort_mode","display_currency","hidden_search_terms","links","revision","search_history","updated_at"],"type":"object"},"SearchResolution":{"additionalProperties":false,"properties":{"dialect":{"type":"string"},"effective_query":{"type":"string"},"grammar_version":{"type":"integer"},"path":{"description":"Relative API GET URL; resolution does not execute or record history.","type":"string"},"preferences_revision":{"type":["string","null"]},"saved_search_revision":{"type":["string","null"]},"target":{"type":"string"}},"required":["path","effective_query","target","dialect","preferences_revision","saved_search_revision","grammar_version"],"type":"object"},"SearchResolutionInput":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":["string","null"]},"dialect":{"default":"native","enum":["api","native"],"type":"string"},"name":{"maxLength":200,"minLength":1,"type":"string"},"query":{"maxLength":2048,"minLength":0,"type":"string"},"saved_search_id":{"format":"uuid","type":"string"},"target":{"default":"printings","enum":["cards","printings","entries","collections"],"type":"string"},"use_preferences":{"default":true,"type":"boolean"}},"type":"object"},"Selected_CardDto":{"additionalProperties":false,"description":"Only requested top-level fields plus resource identifiers and links; omitted fields are distinct from selected null fields.","properties":{"color_identity":{"items":{"type":"string"},"type":"array"},"colors":{"items":{"type":"string"},"type":"array"},"colors_known":{"type":"boolean"},"id":{"format":"uuid","type":"string"},"legalities":{"items":{"$ref":"#/components/schemas/LegalityDto"},"type":"array"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"mana_cost":{"type":["string","null"]},"mana_value":{"format":"double","type":["number","null"]},"name":{"type":"string"},"oracle_text":{"type":["string","null"]},"type_line":{"type":["string","null"]}},"required":["id","links"],"type":"object"},"Selected_CategoryDto":{"additionalProperties":false,"properties":{"collection_id":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"name":{"type":"string"},"native_created_at_ms":{"format":"int64","type":["integer","null"]},"native_id":{"type":["string","null"]},"native_updated_at_ms":{"format":"int64","type":["integer","null"]},"position":{"format":"int64","type":"integer"},"revision":{"type":"string"},"updated_at":{"type":"string"},"zone":{"type":"string"}},"required":["id","revision","links"],"type":"object"},"Selected_CollectionDto":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"metadata":{"$ref":"#/components/schemas/CollectionMetadataDto"},"name":{"type":"string"},"revision":{"type":"string"},"ruleset":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","revision","links"],"type":"object"},"Selected_EntryDto":{"additionalProperties":false,"properties":{"collection_id":{"type":"string"},"created_at":{"type":"string"},"finish":{"type":"string"},"id":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"metadata":{"$ref":"#/components/schemas/EntryMetadataDto"},"printing_id":{"type":"string"},"quantity":{"format":"int32","type":"integer"},"revision":{"type":"string"},"updated_at":{"type":"string"},"zone":{"type":"string"}},"required":["id","revision","links"],"type":"object"},"Selected_Expanded_EntryDto":{"additionalProperties":false,"properties":{"collection_id":{"type":"string"},"created_at":{"type":"string"},"finish":{"type":"string"},"id":{"type":"string"},"included":{"additionalProperties":false,"properties":{"printing":{"oneOf":[{"$ref":"#/components/schemas/PrintingDto"},{"type":"null"}]}},"required":["printing"],"type":"object"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"metadata":{"$ref":"#/components/schemas/EntryMetadataDto"},"printing_id":{"type":"string"},"quantity":{"format":"int32","type":"integer"},"revision":{"type":"string"},"updated_at":{"type":"string"},"zone":{"type":"string"}},"required":["id","revision","links","included"],"type":"object"},"Selected_Expanded_PrivatePage_EntryDto":{"additionalProperties":false,"properties":{"catalog_generation":{"description":"Immutable catalog used for every printing in this page. Later private pages select the then-active catalog; private pagination is not a snapshot.","type":"string"},"data":{"items":{"$ref":"#/components/schemas/Selected_Expanded_EntryDto"},"maxItems":100,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact owned-resource count before cursor/limit, only when count=true. Count and rows share one user-store snapshot.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"Selected_LabelDto":{"additionalProperties":false,"properties":{"collection_id":{"type":["string","null"]},"color":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"name":{"type":"string"},"native_created_at_ms":{"format":"int64","type":["integer","null"]},"native_id":{"type":["string","null"]},"native_updated_at_ms":{"format":"int64","type":["integer","null"]},"position":{"format":"int64","type":"integer"},"revision":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","revision","links"],"type":"object"},"Selected_PageDto_CardDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/Selected_CardDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"Selected_PageDto_PrintingDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/Selected_PrintingDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"Selected_PageDto_TagAssignmentDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/Selected_TagAssignmentDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"Selected_PageDto_TagDto":{"properties":{"catalog_generation":{"type":"string"},"data":{"items":{"$ref":"#/components/schemas/Selected_TagDto"},"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact filtered result count before pagination, only when count=true.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links","catalog_generation"],"type":"object"},"Selected_PrintingDto":{"additionalProperties":false,"description":"Only requested top-level fields plus resource identifiers and links; omitted fields are distinct from selected null fields.","properties":{"card_id":{"format":"uuid","type":["string","null"]},"collector_number":{"type":"string"},"faces":{"items":{"$ref":"#/components/schemas/FaceDto"},"type":"array"},"finishes":{"items":{"type":"string"},"type":"array"},"games":{"items":{"type":"string"},"type":"array"},"id":{"format":"uuid","type":"string"},"images":{"items":{"$ref":"#/components/schemas/CardImageDto"},"type":"array"},"language":{"type":"string"},"layout":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"metadata":{"oneOf":[{"type":"null"},{"$ref":"#/components/schemas/PrintingMetadataDto"}]},"name":{"type":"string"},"prices":{"items":{"$ref":"#/components/schemas/PriceDto"},"type":"array"},"rarity":{"type":"string"},"released_at":{"format":"date","type":"string"},"set_code":{"type":"string"}},"required":["id","links"],"type":"object"},"Selected_PrivatePage_CategoryDto":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Selected_CategoryDto"},"maxItems":100,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact owned-resource count before cursor/limit, only when count=true. Count and rows share one user-store snapshot.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links"],"type":"object"},"Selected_PrivatePage_CollectionDto":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Selected_CollectionDto"},"maxItems":100,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact owned-resource count before cursor/limit, only when count=true. Count and rows share one user-store snapshot.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links"],"type":"object"},"Selected_PrivatePage_EntryDto":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Selected_EntryDto"},"maxItems":100,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact owned-resource count before cursor/limit, only when count=true. Count and rows share one user-store snapshot.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links"],"type":"object"},"Selected_PrivatePage_LabelDto":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Selected_LabelDto"},"maxItems":100,"type":"array"},"links":{"$ref":"#/components/schemas/PageLinks"},"total_count":{"description":"Exact owned-resource count before cursor/limit, only when count=true. Count and rows share one user-store snapshot.","format":"int64","minimum":0,"type":"integer"}},"required":["data","links"],"type":"object"},"Selected_TagAssignmentDto":{"additionalProperties":false,"description":"Only requested top-level fields plus resource identifiers and links; omitted fields are distinct from selected null fields.","properties":{"annotation":{"type":["string","null"]},"card_id":{"format":"uuid","type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"tag_id":{"type":"string"},"weight":{"type":"string"}},"required":["card_id","tag_id","links"],"type":"object"},"Selected_TagDto":{"additionalProperties":false,"description":"Only requested top-level fields plus resource identifiers and links; omitted fields are distinct from selected null fields.","properties":{"aliases":{"items":{"type":"string"},"type":"array"},"child_ids":{"items":{"type":"string"},"type":"array"},"description":{"type":["string","null"]},"id":{"type":"string"},"label":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"parent_ids":{"items":{"type":"string"},"type":"array"},"slug":{"type":"string"},"source":{"type":"string"},"source_url":{"type":["string","null"]},"source_version":{"type":"string"}},"required":["id","links"],"type":"object"},"TagAssignmentDto":{"additionalProperties":false,"properties":{"annotation":{"type":["string","null"]},"card_id":{"format":"uuid","type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"tag_id":{"type":"string"},"weight":{"type":"string"}},"required":["card_id","tag_id","weight","links"],"type":"object"},"TagDto":{"additionalProperties":false,"properties":{"aliases":{"items":{"type":"string"},"type":"array"},"child_ids":{"items":{"type":"string"},"type":"array"},"description":{"type":["string","null"]},"id":{"type":"string"},"label":{"type":"string"},"links":{"additionalProperties":{"type":"string"},"propertyNames":{"type":"string"},"type":"object"},"parent_ids":{"items":{"type":"string"},"type":"array"},"slug":{"type":"string"},"source":{"type":"string"},"source_url":{"type":["string","null"]},"source_version":{"type":"string"}},"required":["id","slug","label","source","source_version","aliases","parent_ids","child_ids","links"],"type":"object"}},"securitySchemes":{"BearerAuth":{"bearerFormat":"JWT","description":"RS256 access token with configured issuer/audience and collections:read or collections:write scope. Writes require collections:write.","scheme":"bearer","type":"http"}}},"info":{"description":"Grimora REST API v2. Breaking changes require a new URL major version, such as /api/v3; /api/v2 retains its existing contract. Additive compatible changes remain in v2. The legacy /v1/catalog download contract is maintained separately. Database schemas, catalog generations and search grammar revisions are not API major versions. V2 query strings use UTF-8 form encoding; malformed percent escapes, invalid UTF-8 and duplicate decoded keys return 400.","title":"Grimora REST API","version":"2.0.0"},"openapi":"3.1.0","paths":{"/api/v2":{"get":{"operationId":"discover","parameters":[{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryDto"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"discoverHead","parameters":[{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/cards":{"get":{"operationId":"listCards","parameters":[{"description":"Comma-separated top-level fields. Allowed: id, name, mana_value, mana_cost, type_line, oracle_text, colors_known, colors, color_identity, legalities, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: printings, tags, tag-assignments. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"description":"Maximum children per parent and included collection. Requires include. Follow each included page's links.next unchanged for further children. Nested self links address the current first page; next links retain the generation/expiry. Does not apply to single-resource relationships.","in":"query","name":"include_limit","schema":{"default":5,"maximum":10,"minimum":1,"type":"integer"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: id, name, mana_value. Default: id ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"id","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Grammar 13: Native metadata predicates: artist, flavor/ft, watermark/wm, st/settype, border, frame, stamp, kw/keyword, produces, devotion, m/mana, cn/number, b/block, in, is/not, has, new, artists/illustrations/prints/sets/paperprints/papersets, edhrec/penny. Metadata belongs to printings and preserves their mana value, colors and legalities even without an Oracle ID; legacy catalogs return metadata=null and reject predicates requiring unavailable metadata. Exact names use ! followed by a quoted name. Name/type/oracle/flavor support /regex/ with bounded Rust regex syntax; lookaround and backreferences are rejected. Prefix the query with dialect:native followed by a space for native c: exact and id: subset semantics. Default colon meanings remain compatible. Top-level display directives unique:cards/prints/art, order, direction, prefer and cheapest are supported on printings. Native preferred selection prioritizes English, real cards, base/promotional treatments, optional USD price, images and release date. Prefer accepts oldest/newest/promo/default/atypical/notub/notuniversesbeyond/usd-low/usd-high. Preferences imply unique:cards unless unique is explicit. Art uniqueness uses illustration ID, falling back to printing ID. Display layout directives are accepted without changing JSON. Directive options inside groups or used as OR operands are rejected. Use either order/direction or the sort parameter. Release ordering follows native newest-first; explicit sort=released_at remains ascending. Functional tags match labels, aliases and descendants. Other fields: names, t/type, o/oracle, f/format/legal, banned, restricted, tag/function/otag, mv/cmc, c/color, id/identity, s/e/set/edition, r/rarity, lang/language, game, finish, layout, year, date, usd/usdfoil/usdetched/eur/eurfoil/tix; implicit/explicit AND, OR, parentheses and exclusion with -term or -(group). AND binds more tightly than OR; operators are case-insensitive. Quote literal operator words or parentheses. Quoted values support quote/backslash escapes. At most 32 conditions, 16 nested groups and 96 expression nodes; 2048 UTF-16 code units. Set, language, game, finish and layout use : or = for exact ASCII case-insensitive values; game and finish match a list member, layout matches its scalar value. Unknown values match nothing; no substring or wildcard matching. Language accepts native language-name aliases and any (no restriction). Rarity c/common, u/uncommon, r/rare, m/mythic supports :, =, !=, <, <=, >, >= in that order; other rarity names support only : or =. Mana supports != as well as the other numeric comparisons. Stats pow/power, tou/toughness, loy/loyalty, def/defense and pt/powtou support numeric comparisons with signed plain decimals from -1000000000000 to 1000000000000 or another stat field. pt sums power and toughness only when both are known. Comparisons between fields use one face; separate predicates may match different faces of the same printing. Printed star expressions *, *², N+*, *+N and N-* use zero for the variable part; other nonnumeric text and missing stats do not match positive comparisons, including !=. Raw printed stats remain strings on printing faces. Even/odd are supported for stats and mana value using integer parity; literal-text stat filters remain unsupported. Price fields select Scryfall retail quotes: usd/eur/tix use nonfoil; usdfoil/eurfoil use foil; usdetched uses etched. Comparisons :, =, !=, <, <=, >, >= use exact nonnegative decimals with at most 28 fractional digits and the catalog decimal range; : means equality. Equivalent exponent spellings and quoted amounts are accepted. Missing/null quotes do not match positive comparisons, including !=; negation includes those nonmatches. MTGJSON and buylist quotes are not used by these fields. Price predicates and all other printing predicates must match the same printing. Prices are those in the selected immutable catalog, not live market quotes. Year compares the printing release year using :, =, !=, <, <=, >, >=; : means equality. Values are unquoted ASCII integers from 0 to 9999, with leading zeroes permitted. A missing printing does not match any positive year predicate, including !=. Date compares the printing release day with the same operators as year. Values are valid Gregorian YYYY-MM-DD dates (years 0000 to 9999), four-digit years resolved to January 1, or ASCII alphanumeric set codes containing a letter. Quoted values are accepted. Set codes compare against the earliest printing release date in that set within the selected catalog generation, case-insensitively. Unknown sets or missing printings do not match positive date comparisons, including !=; negation includes those nonmatches. Date values now and today resolve to the current UTC calendar day. Returned continuations retain that reference date across midnight and catalog changes; follow the supplied next link. Relative comparisons otherwise use the same operators and printing scope as literal dates. Partial month dates are rejected. Colors and identity accept integer counts from 0 to 5 with :, =, !=, <, <=, >, >=. For color-letter sets, : contains (colorless matches empty), = is exact, != is not exact, <= is subset, < is proper subset, >= is superset, > is proper superset. Unknown card colors and absent card relations do not match positive color comparisons, including !=; negation applies after that result. Identity uses the known stored set independently of card-color availability. Color sets also accept all native nicknames, case-insensitively: azorius, dimir, rakdos, gruul, selesnya, orzhov, izzet, golgari, boros, simic, bant, esper, grixis, jund, naya, abzan, jeskai, sultai, mardu, temur, quandrix, silverquill, prismari, witherbloom, lorehold, chaos, aggression, altruism, growth, artifice. Each nickname uses the same comparisons as its color letters. Existing colon meanings are unchanged. Legal/format/f, banned and restricted require : followed by an exact format name (ASCII case-insensitive query value); format and status must match the same legality record. Missing/unknown formats, absent card relations and not_legal do not match these positive status predicates; negation includes those nonmatches. Card results require the entire expression to match one printing; cards with no printing still use false for positive printing predicates (lang:any is true). Unsupported fields or malformed expressions reject the entire query.","example":"t:creature c:w mv<=3","in":"query","name":"q","schema":{"maxLength":2048,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PageDto_CardDto"},{"$ref":"#/components/schemas/Selected_PageDto_CardDto"},{"$ref":"#/components/schemas/Expanded_PageDto_CardDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"listCardsHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: id, name, mana_value, mana_cost, type_line, oracle_text, colors_known, colors, color_identity, legalities, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: printings, tags, tag-assignments. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"description":"Maximum children per parent and included collection. Requires include. Follow each included page's links.next unchanged for further children. Nested self links address the current first page; next links retain the generation/expiry. Does not apply to single-resource relationships.","in":"query","name":"include_limit","schema":{"default":5,"maximum":10,"minimum":1,"type":"integer"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: id, name, mana_value. Default: id ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"id","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Grammar 13: Native metadata predicates: artist, flavor/ft, watermark/wm, st/settype, border, frame, stamp, kw/keyword, produces, devotion, m/mana, cn/number, b/block, in, is/not, has, new, artists/illustrations/prints/sets/paperprints/papersets, edhrec/penny. Metadata belongs to printings and preserves their mana value, colors and legalities even without an Oracle ID; legacy catalogs return metadata=null and reject predicates requiring unavailable metadata. Exact names use ! followed by a quoted name. Name/type/oracle/flavor support /regex/ with bounded Rust regex syntax; lookaround and backreferences are rejected. Prefix the query with dialect:native followed by a space for native c: exact and id: subset semantics. Default colon meanings remain compatible. Top-level display directives unique:cards/prints/art, order, direction, prefer and cheapest are supported on printings. Native preferred selection prioritizes English, real cards, base/promotional treatments, optional USD price, images and release date. Prefer accepts oldest/newest/promo/default/atypical/notub/notuniversesbeyond/usd-low/usd-high. Preferences imply unique:cards unless unique is explicit. Art uniqueness uses illustration ID, falling back to printing ID. Display layout directives are accepted without changing JSON. Directive options inside groups or used as OR operands are rejected. Use either order/direction or the sort parameter. Release ordering follows native newest-first; explicit sort=released_at remains ascending. Functional tags match labels, aliases and descendants. Other fields: names, t/type, o/oracle, f/format/legal, banned, restricted, tag/function/otag, mv/cmc, c/color, id/identity, s/e/set/edition, r/rarity, lang/language, game, finish, layout, year, date, usd/usdfoil/usdetched/eur/eurfoil/tix; implicit/explicit AND, OR, parentheses and exclusion with -term or -(group). AND binds more tightly than OR; operators are case-insensitive. Quote literal operator words or parentheses. Quoted values support quote/backslash escapes. At most 32 conditions, 16 nested groups and 96 expression nodes; 2048 UTF-16 code units. Set, language, game, finish and layout use : or = for exact ASCII case-insensitive values; game and finish match a list member, layout matches its scalar value. Unknown values match nothing; no substring or wildcard matching. Language accepts native language-name aliases and any (no restriction). Rarity c/common, u/uncommon, r/rare, m/mythic supports :, =, !=, <, <=, >, >= in that order; other rarity names support only : or =. Mana supports != as well as the other numeric comparisons. Stats pow/power, tou/toughness, loy/loyalty, def/defense and pt/powtou support numeric comparisons with signed plain decimals from -1000000000000 to 1000000000000 or another stat field. pt sums power and toughness only when both are known. Comparisons between fields use one face; separate predicates may match different faces of the same printing. Printed star expressions *, *², N+*, *+N and N-* use zero for the variable part; other nonnumeric text and missing stats do not match positive comparisons, including !=. Raw printed stats remain strings on printing faces. Even/odd are supported for stats and mana value using integer parity; literal-text stat filters remain unsupported. Price fields select Scryfall retail quotes: usd/eur/tix use nonfoil; usdfoil/eurfoil use foil; usdetched uses etched. Comparisons :, =, !=, <, <=, >, >= use exact nonnegative decimals with at most 28 fractional digits and the catalog decimal range; : means equality. Equivalent exponent spellings and quoted amounts are accepted. Missing/null quotes do not match positive comparisons, including !=; negation includes those nonmatches. MTGJSON and buylist quotes are not used by these fields. Price predicates and all other printing predicates must match the same printing. Prices are those in the selected immutable catalog, not live market quotes. Year compares the printing release year using :, =, !=, <, <=, >, >=; : means equality. Values are unquoted ASCII integers from 0 to 9999, with leading zeroes permitted. A missing printing does not match any positive year predicate, including !=. Date compares the printing release day with the same operators as year. Values are valid Gregorian YYYY-MM-DD dates (years 0000 to 9999), four-digit years resolved to January 1, or ASCII alphanumeric set codes containing a letter. Quoted values are accepted. Set codes compare against the earliest printing release date in that set within the selected catalog generation, case-insensitively. Unknown sets or missing printings do not match positive date comparisons, including !=; negation includes those nonmatches. Date values now and today resolve to the current UTC calendar day. Returned continuations retain that reference date across midnight and catalog changes; follow the supplied next link. Relative comparisons otherwise use the same operators and printing scope as literal dates. Partial month dates are rejected. Colors and identity accept integer counts from 0 to 5 with :, =, !=, <, <=, >, >=. For color-letter sets, : contains (colorless matches empty), = is exact, != is not exact, <= is subset, < is proper subset, >= is superset, > is proper superset. Unknown card colors and absent card relations do not match positive color comparisons, including !=; negation applies after that result. Identity uses the known stored set independently of card-color availability. Color sets also accept all native nicknames, case-insensitively: azorius, dimir, rakdos, gruul, selesnya, orzhov, izzet, golgari, boros, simic, bant, esper, grixis, jund, naya, abzan, jeskai, sultai, mardu, temur, quandrix, silverquill, prismari, witherbloom, lorehold, chaos, aggression, altruism, growth, artifice. Each nickname uses the same comparisons as its color letters. Existing colon meanings are unchanged. Legal/format/f, banned and restricted require : followed by an exact format name (ASCII case-insensitive query value); format and status must match the same legality record. Missing/unknown formats, absent card relations and not_legal do not match these positive status predicates; negation includes those nonmatches. Card results require the entire expression to match one printing; cards with no printing still use false for positive printing predicates (lang:any is true). Unsupported fields or malformed expressions reject the entire query.","example":"t:creature c:w mv<=3","in":"query","name":"q","schema":{"maxLength":2048,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/cards/{id}":{"get":{"operationId":"getCard","parameters":[{"description":"Comma-separated top-level fields. Allowed: id, name, mana_value, mana_cost, type_line, oracle_text, colors_known, colors, color_identity, legalities, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: printings, tags, tag-assignments. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"description":"Maximum children per parent and included collection. Requires include. Follow each included page's links.next unchanged for further children. Nested self links address the current first page; next links retain the generation/expiry. Does not apply to single-resource relationships.","in":"query","name":"include_limit","schema":{"default":5,"maximum":10,"minimum":1,"type":"integer"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CardDto"},{"$ref":"#/components/schemas/Selected_CardDto"},{"$ref":"#/components/schemas/Expanded_CardDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"getCardHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: id, name, mana_value, mana_cost, type_line, oracle_text, colors_known, colors, color_identity, legalities, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: printings, tags, tag-assignments. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"description":"Maximum children per parent and included collection. Requires include. Follow each included page's links.next unchanged for further children. Nested self links address the current first page; next links retain the generation/expiry. Does not apply to single-resource relationships.","in":"query","name":"include_limit","schema":{"default":5,"maximum":10,"minimum":1,"type":"integer"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/cards/{id}/printings":{"get":{"operationId":"listCardPrintings","parameters":[{"description":"Comma-separated top-level fields. Allowed: metadata, id, card_id, name, set_code, collector_number, language, rarity, layout, released_at, finishes, games, faces, images, prices, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: color, usd, eur, tix, mana_value, artist, power, toughness, edhrec_rank, penny_rank, collector_number_numeric, rarity_rank, id, name, released_at, set_code, collector_number, language, rarity. Default: color ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"color","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Grammar 13: Native metadata predicates: artist, flavor/ft, watermark/wm, st/settype, border, frame, stamp, kw/keyword, produces, devotion, m/mana, cn/number, b/block, in, is/not, has, new, artists/illustrations/prints/sets/paperprints/papersets, edhrec/penny. Metadata belongs to printings and preserves their mana value, colors and legalities even without an Oracle ID; legacy catalogs return metadata=null and reject predicates requiring unavailable metadata. Exact names use ! followed by a quoted name. Name/type/oracle/flavor support /regex/ with bounded Rust regex syntax; lookaround and backreferences are rejected. Prefix the query with dialect:native followed by a space for native c: exact and id: subset semantics. Default colon meanings remain compatible. Top-level display directives unique:cards/prints/art, order, direction, prefer and cheapest are supported on printings. Native preferred selection prioritizes English, real cards, base/promotional treatments, optional USD price, images and release date. Prefer accepts oldest/newest/promo/default/atypical/notub/notuniversesbeyond/usd-low/usd-high. Preferences imply unique:cards unless unique is explicit. Art uniqueness uses illustration ID, falling back to printing ID. Display layout directives are accepted without changing JSON. Directive options inside groups or used as OR operands are rejected. Use either order/direction or the sort parameter. Release ordering follows native newest-first; explicit sort=released_at remains ascending. Functional tags match labels, aliases and descendants. Other fields: names, t/type, o/oracle, f/format/legal, banned, restricted, tag/function/otag, mv/cmc, c/color, id/identity, s/e/set/edition, r/rarity, lang/language, game, finish, layout, year, date, usd/usdfoil/usdetched/eur/eurfoil/tix; implicit/explicit AND, OR, parentheses and exclusion with -term or -(group). AND binds more tightly than OR; operators are case-insensitive. Quote literal operator words or parentheses. Quoted values support quote/backslash escapes. At most 32 conditions, 16 nested groups and 96 expression nodes; 2048 UTF-16 code units. Set, language, game, finish and layout use : or = for exact ASCII case-insensitive values; game and finish match a list member, layout matches its scalar value. Unknown values match nothing; no substring or wildcard matching. Language accepts native language-name aliases and any (no restriction). Rarity c/common, u/uncommon, r/rare, m/mythic supports :, =, !=, <, <=, >, >= in that order; other rarity names support only : or =. Mana supports != as well as the other numeric comparisons. Stats pow/power, tou/toughness, loy/loyalty, def/defense and pt/powtou support numeric comparisons with signed plain decimals from -1000000000000 to 1000000000000 or another stat field. pt sums power and toughness only when both are known. Comparisons between fields use one face; separate predicates may match different faces of the same printing. Printed star expressions *, *², N+*, *+N and N-* use zero for the variable part; other nonnumeric text and missing stats do not match positive comparisons, including !=. Raw printed stats remain strings on printing faces. Even/odd are supported for stats and mana value using integer parity; literal-text stat filters remain unsupported. Price fields select Scryfall retail quotes: usd/eur/tix use nonfoil; usdfoil/eurfoil use foil; usdetched uses etched. Comparisons :, =, !=, <, <=, >, >= use exact nonnegative decimals with at most 28 fractional digits and the catalog decimal range; : means equality. Equivalent exponent spellings and quoted amounts are accepted. Missing/null quotes do not match positive comparisons, including !=; negation includes those nonmatches. MTGJSON and buylist quotes are not used by these fields. Price predicates and all other printing predicates must match the same printing. Prices are those in the selected immutable catalog, not live market quotes. Year compares the printing release year using :, =, !=, <, <=, >, >=; : means equality. Values are unquoted ASCII integers from 0 to 9999, with leading zeroes permitted. A missing printing does not match any positive year predicate, including !=. Date compares the printing release day with the same operators as year. Values are valid Gregorian YYYY-MM-DD dates (years 0000 to 9999), four-digit years resolved to January 1, or ASCII alphanumeric set codes containing a letter. Quoted values are accepted. Set codes compare against the earliest printing release date in that set within the selected catalog generation, case-insensitively. Unknown sets or missing printings do not match positive date comparisons, including !=; negation includes those nonmatches. Date values now and today resolve to the current UTC calendar day. Returned continuations retain that reference date across midnight and catalog changes; follow the supplied next link. Relative comparisons otherwise use the same operators and printing scope as literal dates. Partial month dates are rejected. Colors and identity accept integer counts from 0 to 5 with :, =, !=, <, <=, >, >=. For color-letter sets, : contains (colorless matches empty), = is exact, != is not exact, <= is subset, < is proper subset, >= is superset, > is proper superset. Unknown card colors and absent card relations do not match positive color comparisons, including !=; negation applies after that result. Identity uses the known stored set independently of card-color availability. Color sets also accept all native nicknames, case-insensitively: azorius, dimir, rakdos, gruul, selesnya, orzhov, izzet, golgari, boros, simic, bant, esper, grixis, jund, naya, abzan, jeskai, sultai, mardu, temur, quandrix, silverquill, prismari, witherbloom, lorehold, chaos, aggression, altruism, growth, artifice. Each nickname uses the same comparisons as its color letters. Existing colon meanings are unchanged. Legal/format/f, banned and restricted require : followed by an exact format name (ASCII case-insensitive query value); format and status must match the same legality record. Missing/unknown formats, absent card relations and not_legal do not match these positive status predicates; negation includes those nonmatches. Card results require the entire expression to match one printing; cards with no printing still use false for positive printing predicates (lang:any is true). Unsupported fields or malformed expressions reject the entire query.","example":"t:creature c:w mv<=3","in":"query","name":"q","schema":{"maxLength":2048,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PageDto_PrintingDto"},{"$ref":"#/components/schemas/Selected_PageDto_PrintingDto"},{"$ref":"#/components/schemas/Expanded_PageDto_PrintingDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"listCardPrintingsHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: metadata, id, card_id, name, set_code, collector_number, language, rarity, layout, released_at, finishes, games, faces, images, prices, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: color, usd, eur, tix, mana_value, artist, power, toughness, edhrec_rank, penny_rank, collector_number_numeric, rarity_rank, id, name, released_at, set_code, collector_number, language, rarity. Default: color ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"color","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Grammar 13: Native metadata predicates: artist, flavor/ft, watermark/wm, st/settype, border, frame, stamp, kw/keyword, produces, devotion, m/mana, cn/number, b/block, in, is/not, has, new, artists/illustrations/prints/sets/paperprints/papersets, edhrec/penny. Metadata belongs to printings and preserves their mana value, colors and legalities even without an Oracle ID; legacy catalogs return metadata=null and reject predicates requiring unavailable metadata. Exact names use ! followed by a quoted name. Name/type/oracle/flavor support /regex/ with bounded Rust regex syntax; lookaround and backreferences are rejected. Prefix the query with dialect:native followed by a space for native c: exact and id: subset semantics. Default colon meanings remain compatible. Top-level display directives unique:cards/prints/art, order, direction, prefer and cheapest are supported on printings. Native preferred selection prioritizes English, real cards, base/promotional treatments, optional USD price, images and release date. Prefer accepts oldest/newest/promo/default/atypical/notub/notuniversesbeyond/usd-low/usd-high. Preferences imply unique:cards unless unique is explicit. Art uniqueness uses illustration ID, falling back to printing ID. Display layout directives are accepted without changing JSON. Directive options inside groups or used as OR operands are rejected. Use either order/direction or the sort parameter. Release ordering follows native newest-first; explicit sort=released_at remains ascending. Functional tags match labels, aliases and descendants. Other fields: names, t/type, o/oracle, f/format/legal, banned, restricted, tag/function/otag, mv/cmc, c/color, id/identity, s/e/set/edition, r/rarity, lang/language, game, finish, layout, year, date, usd/usdfoil/usdetched/eur/eurfoil/tix; implicit/explicit AND, OR, parentheses and exclusion with -term or -(group). AND binds more tightly than OR; operators are case-insensitive. Quote literal operator words or parentheses. Quoted values support quote/backslash escapes. At most 32 conditions, 16 nested groups and 96 expression nodes; 2048 UTF-16 code units. Set, language, game, finish and layout use : or = for exact ASCII case-insensitive values; game and finish match a list member, layout matches its scalar value. Unknown values match nothing; no substring or wildcard matching. Language accepts native language-name aliases and any (no restriction). Rarity c/common, u/uncommon, r/rare, m/mythic supports :, =, !=, <, <=, >, >= in that order; other rarity names support only : or =. Mana supports != as well as the other numeric comparisons. Stats pow/power, tou/toughness, loy/loyalty, def/defense and pt/powtou support numeric comparisons with signed plain decimals from -1000000000000 to 1000000000000 or another stat field. pt sums power and toughness only when both are known. Comparisons between fields use one face; separate predicates may match different faces of the same printing. Printed star expressions *, *², N+*, *+N and N-* use zero for the variable part; other nonnumeric text and missing stats do not match positive comparisons, including !=. Raw printed stats remain strings on printing faces. Even/odd are supported for stats and mana value using integer parity; literal-text stat filters remain unsupported. Price fields select Scryfall retail quotes: usd/eur/tix use nonfoil; usdfoil/eurfoil use foil; usdetched uses etched. Comparisons :, =, !=, <, <=, >, >= use exact nonnegative decimals with at most 28 fractional digits and the catalog decimal range; : means equality. Equivalent exponent spellings and quoted amounts are accepted. Missing/null quotes do not match positive comparisons, including !=; negation includes those nonmatches. MTGJSON and buylist quotes are not used by these fields. Price predicates and all other printing predicates must match the same printing. Prices are those in the selected immutable catalog, not live market quotes. Year compares the printing release year using :, =, !=, <, <=, >, >=; : means equality. Values are unquoted ASCII integers from 0 to 9999, with leading zeroes permitted. A missing printing does not match any positive year predicate, including !=. Date compares the printing release day with the same operators as year. Values are valid Gregorian YYYY-MM-DD dates (years 0000 to 9999), four-digit years resolved to January 1, or ASCII alphanumeric set codes containing a letter. Quoted values are accepted. Set codes compare against the earliest printing release date in that set within the selected catalog generation, case-insensitively. Unknown sets or missing printings do not match positive date comparisons, including !=; negation includes those nonmatches. Date values now and today resolve to the current UTC calendar day. Returned continuations retain that reference date across midnight and catalog changes; follow the supplied next link. Relative comparisons otherwise use the same operators and printing scope as literal dates. Partial month dates are rejected. Colors and identity accept integer counts from 0 to 5 with :, =, !=, <, <=, >, >=. For color-letter sets, : contains (colorless matches empty), = is exact, != is not exact, <= is subset, < is proper subset, >= is superset, > is proper superset. Unknown card colors and absent card relations do not match positive color comparisons, including !=; negation applies after that result. Identity uses the known stored set independently of card-color availability. Color sets also accept all native nicknames, case-insensitively: azorius, dimir, rakdos, gruul, selesnya, orzhov, izzet, golgari, boros, simic, bant, esper, grixis, jund, naya, abzan, jeskai, sultai, mardu, temur, quandrix, silverquill, prismari, witherbloom, lorehold, chaos, aggression, altruism, growth, artifice. Each nickname uses the same comparisons as its color letters. Existing colon meanings are unchanged. Legal/format/f, banned and restricted require : followed by an exact format name (ASCII case-insensitive query value); format and status must match the same legality record. Missing/unknown formats, absent card relations and not_legal do not match these positive status predicates; negation includes those nonmatches. Card results require the entire expression to match one printing; cards with no printing still use false for positive printing predicates (lang:any is true). Unsupported fields or malformed expressions reject the entire query.","example":"t:creature c:w mv<=3","in":"query","name":"q","schema":{"maxLength":2048,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/cards/{id}/tag-assignments":{"get":{"operationId":"listCardTagAssignments","parameters":[{"description":"Comma-separated top-level fields. Allowed: card_id, tag_id, weight, annotation, links. Identifiers and navigation are always present: card_id, tag_id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card, tag. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: tag_id, weight, card_id. Default: tag_id ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"tag_id","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PageDto_TagAssignmentDto"},{"$ref":"#/components/schemas/Selected_PageDto_TagAssignmentDto"},{"$ref":"#/components/schemas/Expanded_PageDto_TagAssignmentDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"listCardTagAssignmentsHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: card_id, tag_id, weight, annotation, links. Identifiers and navigation are always present: card_id, tag_id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card, tag. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: tag_id, weight, card_id. Default: tag_id ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"tag_id","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/cards/{id}/tags":{"get":{"operationId":"listCardTags","parameters":[{"description":"Comma-separated top-level fields. Allowed: id, slug, label, description, source, source_version, source_url, aliases, parent_ids, child_ids, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: id, slug, label, source. Default: id ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"id","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PageDto_TagDto"},{"$ref":"#/components/schemas/Selected_PageDto_TagDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"listCardTagsHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: id, slug, label, description, source, source_version, source_url, aliases, parent_ids, child_ids, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: id, slug, label, source. Default: id ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"id","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/catalog":{"get":{"operationId":"getCatalog","parameters":[{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CatalogStatusDto"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"getCatalogHead","parameters":[{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/categories":{"get":{"operationId":"getcategories","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"description":"id, collection_id, name, zone, position, native_id, native_created_at_ms, native_updated_at_ms, revision, created_at, updated_at, links","in":"query","name":"fields","schema":{"type":"string"}},{"in":"query","name":"collection_id","schema":{"type":"string"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"cursor","schema":{"type":"string"}},{"in":"query","name":"sort","schema":{"type":"string"}},{"in":"query","name":"zone","schema":{"enum":["mainboard","maybeboard","commander"],"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"count","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PrivatePage_CategoryDto"},{"$ref":"#/components/schemas/Selected_PrivatePage_CategoryDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Unchanged"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"head":{"operationId":"headcategories","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"description":"id, collection_id, name, zone, position, native_id, native_created_at_ms, native_updated_at_ms, revision, created_at, updated_at, links","in":"query","name":"fields","schema":{"type":"string"}},{"in":"query","name":"collection_id","schema":{"type":"string"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"cursor","schema":{"type":"string"}},{"in":"query","name":"sort","schema":{"type":"string"}},{"in":"query","name":"zone","schema":{"enum":["mainboard","maybeboard","commander"],"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"count","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Unchanged"},"400":{"description":"Request failed"},"401":{"description":"Request failed"},"403":{"description":"Request failed"},"404":{"description":"Request failed"},"405":{"description":"Request failed"},"406":{"description":"Request failed"},"408":{"description":"Request failed"},"409":{"description":"Request failed"},"410":{"description":"Request failed"},"412":{"description":"Request failed"},"413":{"description":"Request failed"},"414":{"description":"Request failed"},"415":{"description":"Request failed"},"428":{"description":"Request failed"},"503":{"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"postcategories","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"name":{"description":"Nonblank, at most 200 UTF-16 code units; no controls.","minLength":1,"type":"string"},"native_created_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"native_id":{"description":"Original native string identity; nonblank, at most 1024 UTF-8 bytes, unique within owner and resource type.","type":["string","null"]},"native_updated_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"position":{"format":"int64","type":"integer"},"zone":{"enum":["mainboard","maybeboard","commander"],"type":"string"}},"required":["id","name","collection_id"],"type":"object"}}},"description":"JSON up to 2 MiB within 10 seconds. POST requires id; creation and PUT require name and category collection_id. PATCH retains omitted fields. PUT resets optional fields. Label collection_id null means account-global. Null native_id clears the mapping. Local labels may be promoted to global; narrowing scope or moving categories must remain valid for every existing association. Account ownership and ETag checks apply.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CategoryDto"},{"$ref":"#/components/schemas/Selected_CategoryDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CategoryDto"},{"$ref":"#/components/schemas/Selected_CategoryDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]}},"/api/v2/categories/{id}":{"delete":{"operationId":"deleteCategory","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Deleted; associations removed atomically and identity retired."},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"get":{"operationId":"getCategory","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"id, collection_id, name, zone, position, native_id, native_created_at_ms, native_updated_at_ms, revision, created_at, updated_at, links","in":"query","name":"fields","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CategoryDto"},{"$ref":"#/components/schemas/Selected_CategoryDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Unchanged"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"head":{"operationId":"headCategory","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"id, collection_id, name, zone, position, native_id, native_created_at_ms, native_updated_at_ms, revision, created_at, updated_at, links","in":"query","name":"fields","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Unchanged"},"400":{"description":"Request failed"},"401":{"description":"Request failed"},"403":{"description":"Request failed"},"404":{"description":"Request failed"},"405":{"description":"Request failed"},"406":{"description":"Request failed"},"408":{"description":"Request failed"},"409":{"description":"Request failed"},"410":{"description":"Request failed"},"412":{"description":"Request failed"},"413":{"description":"Request failed"},"414":{"description":"Request failed"},"415":{"description":"Request failed"},"428":{"description":"Request failed"},"503":{"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"patch":{"operationId":"patchCategory","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"name":{"description":"Nonblank, at most 200 UTF-16 code units; no controls.","minLength":1,"type":"string"},"native_created_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"native_id":{"description":"Original native string identity; nonblank, at most 1024 UTF-8 bytes, unique within owner and resource type.","type":["string","null"]},"native_updated_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"position":{"format":"int64","type":"integer"},"zone":{"enum":["mainboard","maybeboard","commander"],"type":"string"}},"required":[],"type":"object"}}},"description":"JSON up to 2 MiB within 10 seconds. POST requires id; creation and PUT require name and category collection_id. PATCH retains omitted fields. PUT resets optional fields. Label collection_id null means account-global. Null native_id clears the mapping. Local labels may be promoted to global; narrowing scope or moving categories must remain valid for every existing association. Account ownership and ETag checks apply.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CategoryDto"},{"$ref":"#/components/schemas/Selected_CategoryDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CategoryDto"},{"$ref":"#/components/schemas/Selected_CategoryDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"put":{"operationId":"putCategory","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":"string"},"id":{"format":"uuid","type":"string"},"name":{"description":"Nonblank, at most 200 UTF-16 code units; no controls.","minLength":1,"type":"string"},"native_created_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"native_id":{"description":"Original native string identity; nonblank, at most 1024 UTF-8 bytes, unique within owner and resource type.","type":["string","null"]},"native_updated_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"position":{"format":"int64","type":"integer"},"zone":{"enum":["mainboard","maybeboard","commander"],"type":"string"}},"required":["name","collection_id"],"type":"object"}}},"description":"JSON up to 2 MiB within 10 seconds. POST requires id; creation and PUT require name and category collection_id. PATCH retains omitted fields. PUT resets optional fields. Label collection_id null means account-global. Null native_id clears the mapping. Local labels may be promoted to global; narrowing scope or moving categories must remain valid for every existing association. Account ownership and ETag checks apply.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CategoryDto"},{"$ref":"#/components/schemas/Selected_CategoryDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CategoryDto"},{"$ref":"#/components/schemas/Selected_CategoryDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]}},"/api/v2/collections":{"get":{"operationId":"getCollections","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, name, ruleset, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"Up to three comma-separated fields; prefix '-' for descending. Fields: position, id, name, ruleset, revision, created_at, updated_at. id must be last; ascending id is appended as a unique tie-breaker when absent. Text uses case-sensitive binary order. IDs are UUIDs, quantity/revision/timestamps sort numerically. Private pages are not snapshots: later edits can change order. For non-ID ordering, a deleted/moved/nonmatching boundary returns 400 invalid_cursor; restart pagination. Follow links.next unchanged.","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"},"x-sort-fields":["position","id","name","ruleset","revision","created_at","updated_at"]},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Follow links.next unchanged. Signed and bound to account/path/page size/include/count/filters/sort/fields. Expires after 30 minutes; not a snapshot across writes or catalog changes.","in":"query","name":"cursor","schema":{"maxLength":1024,"type":"string"}},{"description":"true adds total_count for live owned resources matching all filters, before cursor/limit. Count, parent check and rows share one SQLite read snapshot and execution budget. false or omission skips counting and omits total_count. Later pages may reflect newer writes. Only lowercase true/false are accepted. Follow links.next unchanged.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Grammar 13: Account-owned card/printing search (owned revision 1), plus label:name predicates with AND/OR/NOT and quoted names. Collections match when one live entry satisfies the entire query. Labels resolve only within this account, using global or that entry's collection-local labels; case/diacritics and spaces/hyphens/underscores are ignored. Unknown/foreign labels match nothing; negation excludes nothing. Uses the shared bounded card grammar (32 predicates, 16 groups, 2048 UTF-16 units), including dialect:native. Display selection/order directives are unsupported; use resource sort. Relative dates are frozen to the first page; rows and catalog may change between pages. Combined with explicit filters using AND; all entry predicates apply to the same entry. Follow next links unchanged.","in":"query","name":"q","schema":{"maxLength":2048,"minLength":1,"type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"label_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"exclude_label_id","schema":{"format":"uuid","type":"string"}},{"description":"Literal substring of name; ASCII letters are case-insensitive, all other characters exact. 1–200 UTF-16 code units, no controls. Combined with other filters using AND; bound into continuations.","in":"query","name":"name","schema":{"maxLength":200,"minLength":1,"type":"string"}},{"description":"Exact ruleset. Combined with other filters using AND.","in":"query","name":"ruleset","schema":{"enum":["none","commander"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PrivatePage_CollectionDto"},{"$ref":"#/components/schemas/Selected_PrivatePage_CollectionDto"}]}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Canonical next-page URL","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"head":{"operationId":"headCollections","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, name, ruleset, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"Up to three comma-separated fields; prefix '-' for descending. Fields: position, id, name, ruleset, revision, created_at, updated_at. id must be last; ascending id is appended as a unique tie-breaker when absent. Text uses case-sensitive binary order. IDs are UUIDs, quantity/revision/timestamps sort numerically. Private pages are not snapshots: later edits can change order. For non-ID ordering, a deleted/moved/nonmatching boundary returns 400 invalid_cursor; restart pagination. Follow links.next unchanged.","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"},"x-sort-fields":["position","id","name","ruleset","revision","created_at","updated_at"]},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Follow links.next unchanged. Signed and bound to account/path/page size/include/count/filters/sort/fields. Expires after 30 minutes; not a snapshot across writes or catalog changes.","in":"query","name":"cursor","schema":{"maxLength":1024,"type":"string"}},{"description":"true adds total_count for live owned resources matching all filters, before cursor/limit. Count, parent check and rows share one SQLite read snapshot and execution budget. false or omission skips counting and omits total_count. Later pages may reflect newer writes. Only lowercase true/false are accepted. Follow links.next unchanged.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Grammar 13: Account-owned card/printing search (owned revision 1), plus label:name predicates with AND/OR/NOT and quoted names. Collections match when one live entry satisfies the entire query. Labels resolve only within this account, using global or that entry's collection-local labels; case/diacritics and spaces/hyphens/underscores are ignored. Unknown/foreign labels match nothing; negation excludes nothing. Uses the shared bounded card grammar (32 predicates, 16 groups, 2048 UTF-16 units), including dialect:native. Display selection/order directives are unsupported; use resource sort. Relative dates are frozen to the first page; rows and catalog may change between pages. Combined with explicit filters using AND; all entry predicates apply to the same entry. Follow next links unchanged.","in":"query","name":"q","schema":{"maxLength":2048,"minLength":1,"type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"label_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"exclude_label_id","schema":{"format":"uuid","type":"string"}},{"description":"Literal substring of name; ASCII letters are case-insensitive, all other characters exact. 1–200 UTF-16 code units, no controls. Combined with other filters using AND; bound into continuations.","in":"query","name":"name","schema":{"maxLength":200,"minLength":1,"type":"string"}},{"description":"Exact ruleset. Combined with other filters using AND.","in":"query","name":"ruleset","schema":{"enum":["none","commander"],"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Canonical next-page URL","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"405":{"description":"Method Not Allowed"},"406":{"description":"Not Acceptable"},"409":{"description":"Conflict"},"410":{"description":"Gone"},"412":{"description":"Precondition Failed"},"413":{"description":"Payload Too Large"},"414":{"description":"URI Too Long"},"415":{"description":"Unsupported Media Type"},"428":{"description":"Precondition Required"},"503":{"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"postCollections","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"add_entry_ids":{"description":"Add or move these existing owned entries into this collection atomically with scalar changes. Omitted entries are retained; an empty array is a no-op. At most 100 items before duplicate normalization. Existing writes require the target collection ETag. All entry values except collection_id are retained, and normal duplicate/Commander rules apply. Creation retries compare the original normalized set and do not reapply moves. Missing, deleted or foreign entries return 404; no entry is created by binding.","items":{"format":"uuid","type":"string"},"maxItems":100,"type":"array","writeOnly":true},"id":{"format":"uuid","type":"string"},"metadata":{"$ref":"#/components/schemas/CollectionMetadataInput"},"name":{"description":"1–200 UTF-16 code units; non-whitespace; no controls.","minLength":1,"type":"string"},"ruleset":{"default":"none","enum":["none","commander"],"type":"string"}},"required":["id","name"],"type":"object"}}},"description":"UTF-8 JSON, at most 2 MiB, received within 10 seconds of body collection starting. The total deadline is not extended by incoming chunks. Timeout returns 408 request_timeout; stream errors return 400 invalid_request and size violations return 413 body_too_large. These failures apply no collection or entry changes. Unknown/computed fields are rejected. Null clears nullable metadata fields; other null values are rejected. PATCH retains omitted values; PUT resets optional fields. Missing-resource upserts require complete creation values.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDto"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDto"}}},"description":"Created","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Write body was not received within 10 seconds; no collection or entry changes were applied."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]}},"/api/v2/collections/{id}":{"delete":{"operationId":"deleteCollection","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Deleted atomically; identity is retired."},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"get":{"operationId":"getCollection","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, name, ruleset, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CollectionDto"},{"$ref":"#/components/schemas/Selected_CollectionDto"}]}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"head":{"operationId":"headCollection","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, name, ruleset, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"405":{"description":"Method Not Allowed"},"406":{"description":"Not Acceptable"},"409":{"description":"Conflict"},"410":{"description":"Gone"},"412":{"description":"Precondition Failed"},"413":{"description":"Payload Too Large"},"414":{"description":"URI Too Long"},"415":{"description":"Unsupported Media Type"},"428":{"description":"Precondition Required"},"503":{"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"patch":{"operationId":"patchCollection","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"add_entry_ids":{"description":"Add or move these existing owned entries into this collection atomically with scalar changes. Omitted entries are retained; an empty array is a no-op. At most 100 items before duplicate normalization. Existing writes require the target collection ETag. All entry values except collection_id are retained, and normal duplicate/Commander rules apply. Creation retries compare the original normalized set and do not reapply moves. Missing, deleted or foreign entries return 404; no entry is created by binding.","items":{"format":"uuid","type":"string"},"maxItems":100,"type":"array","writeOnly":true},"id":{"format":"uuid","type":"string"},"metadata":{"$ref":"#/components/schemas/CollectionMetadataInput"},"name":{"description":"1–200 UTF-16 code units; non-whitespace; no controls.","minLength":1,"type":"string"},"ruleset":{"default":"none","enum":["none","commander"],"type":"string"}},"required":[],"type":"object"}}},"description":"UTF-8 JSON, at most 2 MiB, received within 10 seconds of body collection starting. The total deadline is not extended by incoming chunks. Timeout returns 408 request_timeout; stream errors return 400 invalid_request and size violations return 413 body_too_large. These failures apply no collection or entry changes. Unknown/computed fields are rejected. Null clears nullable metadata fields; other null values are rejected. PATCH retains omitted values; PUT resets optional fields. Missing-resource upserts require complete creation values.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDto"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDto"}}},"description":"Created","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Write body was not received within 10 seconds; no collection or entry changes were applied."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"put":{"operationId":"putCollection","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"add_entry_ids":{"description":"Add or move these existing owned entries into this collection atomically with scalar changes. Omitted entries are retained; an empty array is a no-op. At most 100 items before duplicate normalization. Existing writes require the target collection ETag. All entry values except collection_id are retained, and normal duplicate/Commander rules apply. Creation retries compare the original normalized set and do not reapply moves. Missing, deleted or foreign entries return 404; no entry is created by binding.","items":{"format":"uuid","type":"string"},"maxItems":100,"type":"array","writeOnly":true},"id":{"format":"uuid","type":"string"},"metadata":{"$ref":"#/components/schemas/CollectionMetadataInput"},"name":{"description":"1–200 UTF-16 code units; non-whitespace; no controls.","minLength":1,"type":"string"},"ruleset":{"default":"none","enum":["none","commander"],"type":"string"}},"required":["name"],"type":"object"}}},"description":"UTF-8 JSON, at most 2 MiB, received within 10 seconds of body collection starting. The total deadline is not extended by incoming chunks. Timeout returns 408 request_timeout; stream errors return 400 invalid_request and size violations return 413 body_too_large. These failures apply no collection or entry changes. Unknown/computed fields are rejected. Null clears nullable metadata fields; other null values are rejected. PATCH retains omitted values; PUT resets optional fields. Missing-resource upserts require complete creation values.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDto"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionDto"}}},"description":"Created","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Write body was not received within 10 seconds; no collection or entry changes were applied."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]}},"/api/v2/collections/{id}/entries":{"get":{"operationId":"getCollectionEntries","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, collection_id, printing_id, finish, quantity, zone, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"Up to three comma-separated fields; prefix '-' for descending. Fields: position, id, collection_id, printing_id, finish, quantity, zone, revision, created_at, updated_at. id must be last; ascending id is appended as a unique tie-breaker when absent. Text uses case-sensitive binary order. IDs are UUIDs, quantity/revision/timestamps sort numerically. Private pages are not snapshots: later edits can change order. For non-ID ordering, a deleted/moved/nonmatching boundary returns 400 invalid_cursor; restart pagination. Follow links.next unchanged.","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"},"x-sort-fields":["position","id","collection_id","printing_id","finish","quantity","zone","revision","created_at","updated_at"]},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Follow links.next unchanged. Signed and bound to account/path/page size/include/count/filters/sort/fields. Expires after 30 minutes; not a snapshot across writes or catalog changes.","in":"query","name":"cursor","schema":{"maxLength":1024,"type":"string"}},{"description":"true adds total_count for live owned resources matching all filters, before cursor/limit. Count, parent check and rows share one SQLite read snapshot and execution budget. false or omission skips counting and omits total_count. Later pages may reflect newer writes. Only lowercase true/false are accepted. Follow links.next unchanged.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Grammar 13: Account-owned card/printing search (owned revision 1), plus label:name predicates with AND/OR/NOT and quoted names. Collections match when one live entry satisfies the entire query. Labels resolve only within this account, using global or that entry's collection-local labels; case/diacritics and spaces/hyphens/underscores are ignored. Unknown/foreign labels match nothing; negation excludes nothing. Uses the shared bounded card grammar (32 predicates, 16 groups, 2048 UTF-16 units), including dialect:native. Display selection/order directives are unsupported; use resource sort. Relative dates are frozen to the first page; rows and catalog may change between pages. Combined with explicit filters using AND; all entry predicates apply to the same entry. Follow next links unchanged.","in":"query","name":"q","schema":{"maxLength":2048,"minLength":1,"type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"label_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"exclude_label_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact printing identity; nonzero UUID. All entry filters combine using AND and are bound into continuations.","in":"query","name":"printing_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact case-sensitive finish, 1–64 UTF-8 bytes with no controls.","in":"query","name":"finish","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"description":"Exact zone, including preserved native sideboards.","in":"query","name":"zone","schema":{"enum":["mainboard","maybeboard","commander","sideboard"],"type":"string"}},{"description":"Include each entry's full printing under included.printing, using one batched read against the page's catalog_generation. A printing absent from that catalog is null; the entry remains usable. One level only. Available on entry pages, not details or writes. Omission preserves the plain page shape. Follow links.next unchanged.","in":"query","name":"include","schema":{"enum":["printing"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PrivatePage_EntryDto"},{"$ref":"#/components/schemas/Expanded_PrivatePage_EntryDto"},{"$ref":"#/components/schemas/Selected_PrivatePage_EntryDto"},{"$ref":"#/components/schemas/Selected_Expanded_PrivatePage_EntryDto"}]}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Canonical next-page URL","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Included catalog read exceeded its query deadline."}},"security":[{"BearerAuth":[]}]},"head":{"operationId":"headCollectionEntries","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, collection_id, printing_id, finish, quantity, zone, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"Up to three comma-separated fields; prefix '-' for descending. Fields: position, id, collection_id, printing_id, finish, quantity, zone, revision, created_at, updated_at. id must be last; ascending id is appended as a unique tie-breaker when absent. Text uses case-sensitive binary order. IDs are UUIDs, quantity/revision/timestamps sort numerically. Private pages are not snapshots: later edits can change order. For non-ID ordering, a deleted/moved/nonmatching boundary returns 400 invalid_cursor; restart pagination. Follow links.next unchanged.","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"},"x-sort-fields":["position","id","collection_id","printing_id","finish","quantity","zone","revision","created_at","updated_at"]},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Follow links.next unchanged. Signed and bound to account/path/page size/include/count/filters/sort/fields. Expires after 30 minutes; not a snapshot across writes or catalog changes.","in":"query","name":"cursor","schema":{"maxLength":1024,"type":"string"}},{"description":"true adds total_count for live owned resources matching all filters, before cursor/limit. Count, parent check and rows share one SQLite read snapshot and execution budget. false or omission skips counting and omits total_count. Later pages may reflect newer writes. Only lowercase true/false are accepted. Follow links.next unchanged.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Grammar 13: Account-owned card/printing search (owned revision 1), plus label:name predicates with AND/OR/NOT and quoted names. Collections match when one live entry satisfies the entire query. Labels resolve only within this account, using global or that entry's collection-local labels; case/diacritics and spaces/hyphens/underscores are ignored. Unknown/foreign labels match nothing; negation excludes nothing. Uses the shared bounded card grammar (32 predicates, 16 groups, 2048 UTF-16 units), including dialect:native. Display selection/order directives are unsupported; use resource sort. Relative dates are frozen to the first page; rows and catalog may change between pages. Combined with explicit filters using AND; all entry predicates apply to the same entry. Follow next links unchanged.","in":"query","name":"q","schema":{"maxLength":2048,"minLength":1,"type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"label_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"exclude_label_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact printing identity; nonzero UUID. All entry filters combine using AND and are bound into continuations.","in":"query","name":"printing_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact case-sensitive finish, 1–64 UTF-8 bytes with no controls.","in":"query","name":"finish","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"description":"Exact zone, including preserved native sideboards.","in":"query","name":"zone","schema":{"enum":["mainboard","maybeboard","commander","sideboard"],"type":"string"}},{"description":"Include each entry's full printing under included.printing, using one batched read against the page's catalog_generation. A printing absent from that catalog is null; the entry remains usable. One level only. Available on entry pages, not details or writes. Omission preserves the plain page shape. Follow links.next unchanged.","in":"query","name":"include","schema":{"enum":["printing"],"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Canonical next-page URL","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"405":{"description":"Method Not Allowed"},"406":{"description":"Not Acceptable"},"409":{"description":"Conflict"},"410":{"description":"Gone"},"412":{"description":"Precondition Failed"},"413":{"description":"Payload Too Large"},"414":{"description":"URI Too Long"},"415":{"description":"Unsupported Media Type"},"428":{"description":"Precondition Required"},"503":{"description":"Service Unavailable"},"504":{"description":"Included catalog read exceeded its query deadline."}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"postCollectionEntries","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"collection_id":{"description":"Optional; must match the parent URL when supplied.","format":"uuid","type":"string"},"finish":{"default":"nonfoil","type":"string"},"id":{"format":"uuid","type":"string"},"metadata":{"$ref":"#/components/schemas/EntryMetadataInput"},"printing_id":{"format":"uuid","type":"string"},"quantity":{"default":1,"maximum":1000000,"minimum":1,"type":"integer"},"zone":{"default":"mainboard","enum":["mainboard","maybeboard","commander"],"type":"string"}},"required":["id","printing_id"],"type":"object"}}},"description":"UTF-8 JSON, at most 2 MiB, received within 10 seconds of body collection starting. The total deadline is not extended by incoming chunks. Timeout returns 408 request_timeout; stream errors return 400 invalid_request and size violations return 413 body_too_large. These failures apply no collection or entry changes. Unknown/computed fields are rejected. Null clears nullable metadata fields; other null values are rejected. PATCH retains omitted values; PUT resets optional fields. Missing-resource upserts require complete creation values.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryDto"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryDto"}}},"description":"Created","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Write body was not received within 10 seconds; no collection or entry changes were applied."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]}},"/api/v2/collections/{id}/export":{"get":{"description":"One owned read snapshot, at most 10000 records, with a pinned catalog for portable formats. Default grimora-archive retains native schema 2 with omission warnings and a 2 MiB minus 16 KiB document cap. Portable text/CSV/Arena/MTGO/EDHREC return content and warnings with a 2 MiB UTF-8 cap; selected_quantity and unique_count describe resolved aggregated input, before Arena availability omissions. Categories use primary membership; Arena/MTGO flatten categories. Native portable behavior flattens zones, including MTGO Sideboard=false, with an explicit warning. Missing printings are skipped with warnings. Text options apply only to text, CSV options only to CSV. No selection filters or PDF export. These formats are not account backups.","operationId":"exportCollection","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"format","schema":{"default":"grimora-archive","enum":["grimora-archive","text","csv","arena","mtgo-dek","edhrec-article"],"type":"string"}},{"description":"Text only.","in":"query","name":"quantity_x","schema":{"default":true,"type":"boolean"}},{"description":"Text only.","in":"query","name":"set_code","schema":{"default":true,"type":"boolean"}},{"description":"Text only.","in":"query","name":"collector_number","schema":{"default":true,"type":"boolean"}},{"description":"Text only.","in":"query","name":"front_name","schema":{"default":false,"type":"boolean"}},{"description":"CSV only.","in":"query","name":"header","schema":{"default":true,"type":"boolean"}},{"description":"Text only; existing categories take precedence.","in":"query","name":"section_header","schema":{"default":"none","enum":["none","generic","card-type"],"type":"string"}},{"description":"CSV only: comma-separated quantity,category,name,set_name,set_code,collector_number,price,rarity,color,mana_value,types,card_text,scryfall_id. All columns by default; empty selects none. Price is nonfoil Scryfall retail USD, then EUR, then TIX, rounded half-even to at most 2 decimals; not selected-finish valuation.","in":"query","name":"columns","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"oneOf":[{"$ref":"#/components/schemas/CollectionExport"},{"$ref":"#/components/schemas/PortableCollectionExport"}]}}},"description":"Archive and omission warnings"},"304":{"description":"Unchanged"},"400":{"description":"Invalid format or query"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope"},"404":{"description":"Owned collection not found"},"406":{"description":"JSON required"},"409":{"description":"Capacity exceeded or ambiguous native identities"},"503":{"description":"Storage or snapshot integrity failure"}},"security":[{"BearerAuth":[]}],"summary":"Export a complete owned collection as a native archive or portable document","tags":["Collections"]},"head":{"description":"One owned read snapshot, at most 10000 records, with a pinned catalog for portable formats. Default grimora-archive retains native schema 2 with omission warnings and a 2 MiB minus 16 KiB document cap. Portable text/CSV/Arena/MTGO/EDHREC return content and warnings with a 2 MiB UTF-8 cap; selected_quantity and unique_count describe resolved aggregated input, before Arena availability omissions. Categories use primary membership; Arena/MTGO flatten categories. Native portable behavior flattens zones, including MTGO Sideboard=false, with an explicit warning. Missing printings are skipped with warnings. Text options apply only to text, CSV options only to CSV. No selection filters or PDF export. These formats are not account backups.","operationId":"headCollectionExport","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"query","name":"format","schema":{"default":"grimora-archive","enum":["grimora-archive","text","csv","arena","mtgo-dek","edhrec-article"],"type":"string"}},{"description":"Text only.","in":"query","name":"quantity_x","schema":{"default":true,"type":"boolean"}},{"description":"Text only.","in":"query","name":"set_code","schema":{"default":true,"type":"boolean"}},{"description":"Text only.","in":"query","name":"collector_number","schema":{"default":true,"type":"boolean"}},{"description":"Text only.","in":"query","name":"front_name","schema":{"default":false,"type":"boolean"}},{"description":"CSV only.","in":"query","name":"header","schema":{"default":true,"type":"boolean"}},{"description":"Text only; existing categories take precedence.","in":"query","name":"section_header","schema":{"default":"none","enum":["none","generic","card-type"],"type":"string"}},{"description":"CSV only: comma-separated quantity,category,name,set_name,set_code,collector_number,price,rarity,color,mana_value,types,card_text,scryfall_id. All columns by default; empty selects none. Price is nonfoil Scryfall retail USD, then EUR, then TIX, rounded half-even to at most 2 decimals; not selected-finish valuation.","in":"query","name":"columns","schema":{"type":"string"}}],"responses":{"200":{"description":"Archive and omission warnings"},"304":{"description":"Unchanged"},"400":{"description":"Invalid format or query"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope"},"404":{"description":"Owned collection not found"},"406":{"description":"JSON required"},"409":{"description":"Capacity exceeded or ambiguous native identities"},"503":{"description":"Storage or snapshot integrity failure"}},"security":[{"BearerAuth":[]}],"summary":"Export a complete owned collection as a native archive or portable document","tags":["Collections"]}},"/api/v2/collections/{id}/summary":{"get":{"description":"Dashboard filters affect totals only; warnings use the whole collection. Missing printings contribute unavailable quantity. Native dashboard pricing uses Scryfall retail nonfoil USD irrespective of entry finish. Includes all zones and counts each entry once, ignoring secondary-category display duplicates. At most 100,000 entries; oversized collections fail instead of returning partial totals.","operationId":"getCollectionSummary","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Grammar 13: Account-owned card/printing search (owned revision 1), plus label:name predicates with AND/OR/NOT and quoted names. Collections match when one live entry satisfies the entire query. Labels resolve only within this account, using global or that entry's collection-local labels; case/diacritics and spaces/hyphens/underscores are ignored. Unknown/foreign labels match nothing; negation excludes nothing. Uses the shared bounded card grammar (32 predicates, 16 groups, 2048 UTF-16 units), including dialect:native. Display selection/order directives are unsupported; use resource sort. Relative dates are frozen to the first page; rows and catalog may change between pages. Combined with explicit filters using AND; all entry predicates apply to the same entry. Follow next links unchanged.","in":"query","name":"q","schema":{"maxLength":2048,"minLength":1,"type":"string"}},{"in":"query","name":"zone","schema":{"type":"string"}},{"in":"query","name":"finish","schema":{"type":"string"}},{"in":"query","name":"printing_id","schema":{"type":"string"}},{"in":"query","name":"label_id","schema":{"type":"string"}},{"in":"query","name":"exclude_label_id","schema":{"type":"string"}},{"in":"query","name":"include_lands","schema":{"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CollectionSummary"}}},"description":"Complete report"},"304":{"description":"Unchanged"},"400":{"description":"Invalid filter"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope"},"404":{"description":"Owned collection not found"},"409":{"description":"Collection exceeds analysis capacity"},"503":{"description":"Store unavailable"}},"security":[{"BearerAuth":[]}],"summary":"Native dashboard and Commander warnings from one owned snapshot","tags":["Collections"]},"head":{"description":"Dashboard filters affect totals only; warnings use the whole collection. Missing printings contribute unavailable quantity. Native dashboard pricing uses Scryfall retail nonfoil USD irrespective of entry finish. Includes all zones and counts each entry once, ignoring secondary-category display duplicates. At most 100,000 entries; oversized collections fail instead of returning partial totals.","operationId":"headCollectionSummary","parameters":[{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Grammar 13: Account-owned card/printing search (owned revision 1), plus label:name predicates with AND/OR/NOT and quoted names. Collections match when one live entry satisfies the entire query. Labels resolve only within this account, using global or that entry's collection-local labels; case/diacritics and spaces/hyphens/underscores are ignored. Unknown/foreign labels match nothing; negation excludes nothing. Uses the shared bounded card grammar (32 predicates, 16 groups, 2048 UTF-16 units), including dialect:native. Display selection/order directives are unsupported; use resource sort. Relative dates are frozen to the first page; rows and catalog may change between pages. Combined with explicit filters using AND; all entry predicates apply to the same entry. Follow next links unchanged.","in":"query","name":"q","schema":{"maxLength":2048,"minLength":1,"type":"string"}},{"in":"query","name":"zone","schema":{"type":"string"}},{"in":"query","name":"finish","schema":{"type":"string"}},{"in":"query","name":"printing_id","schema":{"type":"string"}},{"in":"query","name":"label_id","schema":{"type":"string"}},{"in":"query","name":"exclude_label_id","schema":{"type":"string"}},{"in":"query","name":"include_lands","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Complete report"},"304":{"description":"Unchanged"},"400":{"description":"Invalid filter"},"401":{"description":"Authentication required"},"403":{"description":"Insufficient scope"},"404":{"description":"Owned collection not found"},"409":{"description":"Collection exceeds analysis capacity"},"503":{"description":"Store unavailable"}},"security":[{"BearerAuth":[]}],"summary":"Native dashboard and Commander warnings from one owned snapshot","tags":["Collections"]}},"/api/v2/entries":{"get":{"operationId":"getEntries","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, collection_id, printing_id, finish, quantity, zone, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"Up to three comma-separated fields; prefix '-' for descending. Fields: position, id, collection_id, printing_id, finish, quantity, zone, revision, created_at, updated_at. id must be last; ascending id is appended as a unique tie-breaker when absent. Text uses case-sensitive binary order. IDs are UUIDs, quantity/revision/timestamps sort numerically. Private pages are not snapshots: later edits can change order. For non-ID ordering, a deleted/moved/nonmatching boundary returns 400 invalid_cursor; restart pagination. Follow links.next unchanged.","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"},"x-sort-fields":["position","id","collection_id","printing_id","finish","quantity","zone","revision","created_at","updated_at"]},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Follow links.next unchanged. Signed and bound to account/path/page size/include/count/filters/sort/fields. Expires after 30 minutes; not a snapshot across writes or catalog changes.","in":"query","name":"cursor","schema":{"maxLength":1024,"type":"string"}},{"description":"true adds total_count for live owned resources matching all filters, before cursor/limit. Count, parent check and rows share one SQLite read snapshot and execution budget. false or omission skips counting and omits total_count. Later pages may reflect newer writes. Only lowercase true/false are accepted. Follow links.next unchanged.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Grammar 13: Account-owned card/printing search (owned revision 1), plus label:name predicates with AND/OR/NOT and quoted names. Collections match when one live entry satisfies the entire query. Labels resolve only within this account, using global or that entry's collection-local labels; case/diacritics and spaces/hyphens/underscores are ignored. Unknown/foreign labels match nothing; negation excludes nothing. Uses the shared bounded card grammar (32 predicates, 16 groups, 2048 UTF-16 units), including dialect:native. Display selection/order directives are unsupported; use resource sort. Relative dates are frozen to the first page; rows and catalog may change between pages. Combined with explicit filters using AND; all entry predicates apply to the same entry. Follow next links unchanged.","in":"query","name":"q","schema":{"maxLength":2048,"minLength":1,"type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"label_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"exclude_label_id","schema":{"format":"uuid","type":"string"}},{"description":"Entries in this owned collection. Missing, deleted or foreign collection returns 404. Must be a nonzero UUID.","in":"query","name":"collection_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact printing identity; nonzero UUID. All entry filters combine using AND and are bound into continuations.","in":"query","name":"printing_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact case-sensitive finish, 1–64 UTF-8 bytes with no controls.","in":"query","name":"finish","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"description":"Exact zone, including preserved native sideboards.","in":"query","name":"zone","schema":{"enum":["mainboard","maybeboard","commander","sideboard"],"type":"string"}},{"description":"Include each entry's full printing under included.printing, using one batched read against the page's catalog_generation. A printing absent from that catalog is null; the entry remains usable. One level only. Available on entry pages, not details or writes. Omission preserves the plain page shape. Follow links.next unchanged.","in":"query","name":"include","schema":{"enum":["printing"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PrivatePage_EntryDto"},{"$ref":"#/components/schemas/Expanded_PrivatePage_EntryDto"},{"$ref":"#/components/schemas/Selected_PrivatePage_EntryDto"},{"$ref":"#/components/schemas/Selected_Expanded_PrivatePage_EntryDto"}]}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Canonical next-page URL","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Included catalog read exceeded its query deadline."}},"security":[{"BearerAuth":[]}]},"head":{"operationId":"headEntries","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, collection_id, printing_id, finish, quantity, zone, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"Up to three comma-separated fields; prefix '-' for descending. Fields: position, id, collection_id, printing_id, finish, quantity, zone, revision, created_at, updated_at. id must be last; ascending id is appended as a unique tie-breaker when absent. Text uses case-sensitive binary order. IDs are UUIDs, quantity/revision/timestamps sort numerically. Private pages are not snapshots: later edits can change order. For non-ID ordering, a deleted/moved/nonmatching boundary returns 400 invalid_cursor; restart pagination. Follow links.next unchanged.","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"},"x-sort-fields":["position","id","collection_id","printing_id","finish","quantity","zone","revision","created_at","updated_at"]},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Follow links.next unchanged. Signed and bound to account/path/page size/include/count/filters/sort/fields. Expires after 30 minutes; not a snapshot across writes or catalog changes.","in":"query","name":"cursor","schema":{"maxLength":1024,"type":"string"}},{"description":"true adds total_count for live owned resources matching all filters, before cursor/limit. Count, parent check and rows share one SQLite read snapshot and execution budget. false or omission skips counting and omits total_count. Later pages may reflect newer writes. Only lowercase true/false are accepted. Follow links.next unchanged.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Grammar 13: Account-owned card/printing search (owned revision 1), plus label:name predicates with AND/OR/NOT and quoted names. Collections match when one live entry satisfies the entire query. Labels resolve only within this account, using global or that entry's collection-local labels; case/diacritics and spaces/hyphens/underscores are ignored. Unknown/foreign labels match nothing; negation excludes nothing. Uses the shared bounded card grammar (32 predicates, 16 groups, 2048 UTF-16 units), including dialect:native. Display selection/order directives are unsupported; use resource sort. Relative dates are frozen to the first page; rows and catalog may change between pages. Combined with explicit filters using AND; all entry predicates apply to the same entry. Follow next links unchanged.","in":"query","name":"q","schema":{"maxLength":2048,"minLength":1,"type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"label_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact assigned-label filter (or exclusion). Nonzero UUID; only live labels owned by this account and valid for the entry's collection count. Unknown, deleted, or foreign UUIDs are indistinguishable from unassigned labels. Combined with q on the same entry. Collections require at least one matching entry, including for exclusion.","in":"query","name":"exclude_label_id","schema":{"format":"uuid","type":"string"}},{"description":"Entries in this owned collection. Missing, deleted or foreign collection returns 404. Must be a nonzero UUID.","in":"query","name":"collection_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact printing identity; nonzero UUID. All entry filters combine using AND and are bound into continuations.","in":"query","name":"printing_id","schema":{"format":"uuid","type":"string"}},{"description":"Exact case-sensitive finish, 1–64 UTF-8 bytes with no controls.","in":"query","name":"finish","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"description":"Exact zone, including preserved native sideboards.","in":"query","name":"zone","schema":{"enum":["mainboard","maybeboard","commander","sideboard"],"type":"string"}},{"description":"Include each entry's full printing under included.printing, using one batched read against the page's catalog_generation. A printing absent from that catalog is null; the entry remains usable. One level only. Available on entry pages, not details or writes. Omission preserves the plain page shape. Follow links.next unchanged.","in":"query","name":"include","schema":{"enum":["printing"],"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Canonical next-page URL","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"405":{"description":"Method Not Allowed"},"406":{"description":"Not Acceptable"},"409":{"description":"Conflict"},"410":{"description":"Gone"},"412":{"description":"Precondition Failed"},"413":{"description":"Payload Too Large"},"414":{"description":"URI Too Long"},"415":{"description":"Unsupported Media Type"},"428":{"description":"Precondition Required"},"503":{"description":"Service Unavailable"},"504":{"description":"Included catalog read exceeded its query deadline."}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"postEntries","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":"string"},"finish":{"default":"nonfoil","type":"string"},"id":{"format":"uuid","type":"string"},"metadata":{"$ref":"#/components/schemas/EntryMetadataInput"},"printing_id":{"format":"uuid","type":"string"},"quantity":{"default":1,"maximum":1000000,"minimum":1,"type":"integer"},"zone":{"default":"mainboard","enum":["mainboard","maybeboard","commander"],"type":"string"}},"required":["id","printing_id","collection_id"],"type":"object"}}},"description":"UTF-8 JSON, at most 2 MiB, received within 10 seconds of body collection starting. The total deadline is not extended by incoming chunks. Timeout returns 408 request_timeout; stream errors return 400 invalid_request and size violations return 413 body_too_large. These failures apply no collection or entry changes. Unknown/computed fields are rejected. Null clears nullable metadata fields; other null values are rejected. PATCH retains omitted values; PUT resets optional fields. Missing-resource upserts require complete creation values.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryDto"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryDto"}}},"description":"Created","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Write body was not received within 10 seconds; no collection or entry changes were applied."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]}},"/api/v2/entries/{id}":{"delete":{"operationId":"deleteEntry","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Deleted atomically; identity is retired."},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"get":{"operationId":"getEntry","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, collection_id, printing_id, finish, quantity, zone, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/EntryDto"},{"$ref":"#/components/schemas/Selected_EntryDto"}]}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"head":{"operationId":"headEntry","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, collection_id, printing_id, finish, quantity, zone, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"405":{"description":"Method Not Allowed"},"406":{"description":"Not Acceptable"},"409":{"description":"Conflict"},"410":{"description":"Gone"},"412":{"description":"Precondition Failed"},"413":{"description":"Payload Too Large"},"414":{"description":"URI Too Long"},"415":{"description":"Unsupported Media Type"},"428":{"description":"Precondition Required"},"503":{"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"patch":{"operationId":"patchEntry","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":"string"},"finish":{"default":"nonfoil","type":"string"},"id":{"format":"uuid","type":"string"},"metadata":{"$ref":"#/components/schemas/EntryMetadataInput"},"printing_id":{"format":"uuid","type":"string"},"quantity":{"default":1,"maximum":1000000,"minimum":1,"type":"integer"},"zone":{"default":"mainboard","enum":["mainboard","maybeboard","commander"],"type":"string"}},"required":[],"type":"object"}}},"description":"UTF-8 JSON, at most 2 MiB, received within 10 seconds of body collection starting. The total deadline is not extended by incoming chunks. Timeout returns 408 request_timeout; stream errors return 400 invalid_request and size violations return 413 body_too_large. These failures apply no collection or entry changes. Unknown/computed fields are rejected. Null clears nullable metadata fields; other null values are rejected. PATCH retains omitted values; PUT resets optional fields. Missing-resource upserts require complete creation values.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryDto"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryDto"}}},"description":"Created","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Write body was not received within 10 seconds; no collection or entry changes were applied."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"put":{"operationId":"putEntry","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":"string"},"finish":{"default":"nonfoil","type":"string"},"id":{"format":"uuid","type":"string"},"metadata":{"$ref":"#/components/schemas/EntryMetadataInput"},"printing_id":{"format":"uuid","type":"string"},"quantity":{"default":1,"maximum":1000000,"minimum":1,"type":"integer"},"zone":{"default":"mainboard","enum":["mainboard","maybeboard","commander"],"type":"string"}},"required":["printing_id","collection_id"],"type":"object"}}},"description":"UTF-8 JSON, at most 2 MiB, received within 10 seconds of body collection starting. The total deadline is not extended by incoming chunks. Timeout returns 408 request_timeout; stream errors return 400 invalid_request and size violations return 413 body_too_large. These failures apply no collection or entry changes. Unknown/computed fields are rejected. Null clears nullable metadata fields; other null values are rejected. PATCH retains omitted values; PUT resets optional fields. Missing-resource upserts require complete creation values.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryDto"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryDto"}}},"description":"Created","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Write body was not received within 10 seconds; no collection or entry changes were applied."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]}},"/api/v2/entries/{id}/collection":{"get":{"operationId":"getEntryCollection","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, name, ruleset, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/CollectionDto"},{"$ref":"#/components/schemas/Selected_CollectionDto"}]}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Bad Request"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unauthorized"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Forbidden"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method Not Allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Not Acceptable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Conflict"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Gone"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Payload Too Large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URI Too Long"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Unsupported Media Type"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition Required"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]},"head":{"operationId":"headEntryCollection","parameters":[{"description":"Current strong ETag or *; required to change existing resources.","in":"header","name":"If-Match","schema":{"type":"string"}},{"description":"Use * for create-only writes; matching reads return 304.","in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Comma-separated top-level fields: metadata, id, name, ruleset, revision, created_at, updated_at, links. id, revision and links are always retained. Default: all fields. No duplicates, empty fields, wildcards or nesting. Applies only to primary resources; included printings retain full fields. Detail ETags distinguish projections and can be used for conditional writes on the canonical resource. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged"},"400":{"description":"Bad Request"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"},"405":{"description":"Method Not Allowed"},"406":{"description":"Not Acceptable"},"409":{"description":"Conflict"},"410":{"description":"Gone"},"412":{"description":"Precondition Failed"},"413":{"description":"Payload Too Large"},"414":{"description":"URI Too Long"},"415":{"description":"Unsupported Media Type"},"428":{"description":"Precondition Required"},"503":{"description":"Service Unavailable"}},"security":[{"BearerAuth":[]}]}},"/api/v2/labels":{"get":{"operationId":"getlabels","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"description":"id, collection_id, name, color, position, native_id, native_created_at_ms, native_updated_at_ms, revision, created_at, updated_at, links","in":"query","name":"fields","schema":{"type":"string"}},{"in":"query","name":"collection_id","schema":{"type":"string"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"cursor","schema":{"type":"string"}},{"in":"query","name":"sort","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"count","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PrivatePage_LabelDto"},{"$ref":"#/components/schemas/Selected_PrivatePage_LabelDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Unchanged"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"head":{"operationId":"headlabels","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"description":"id, collection_id, name, color, position, native_id, native_created_at_ms, native_updated_at_ms, revision, created_at, updated_at, links","in":"query","name":"fields","schema":{"type":"string"}},{"in":"query","name":"collection_id","schema":{"type":"string"}},{"in":"query","name":"name","schema":{"type":"string"}},{"in":"query","name":"cursor","schema":{"type":"string"}},{"in":"query","name":"sort","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"count","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Unchanged"},"400":{"description":"Request failed"},"401":{"description":"Request failed"},"403":{"description":"Request failed"},"404":{"description":"Request failed"},"405":{"description":"Request failed"},"406":{"description":"Request failed"},"408":{"description":"Request failed"},"409":{"description":"Request failed"},"410":{"description":"Request failed"},"412":{"description":"Request failed"},"413":{"description":"Request failed"},"414":{"description":"Request failed"},"415":{"description":"Request failed"},"428":{"description":"Request failed"},"503":{"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"post":{"operationId":"postlabels","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":["string","null"]},"color":{"enum":["green","red","blue","amber","purple","orange","teal","pink","grey"],"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"description":"Nonblank, at most 200 UTF-16 code units; no controls.","minLength":1,"type":"string"},"native_created_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"native_id":{"description":"Original native string identity; nonblank, at most 1024 UTF-8 bytes, unique within owner and resource type.","type":["string","null"]},"native_updated_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"position":{"format":"int64","type":"integer"}},"required":["id","name"],"type":"object"}}},"description":"JSON up to 2 MiB within 10 seconds. POST requires id; creation and PUT require name and category collection_id. PATCH retains omitted fields. PUT resets optional fields. Label collection_id null means account-global. Null native_id clears the mapping. Local labels may be promoted to global; narrowing scope or moving categories must remain valid for every existing association. Account ownership and ETag checks apply.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LabelDto"},{"$ref":"#/components/schemas/Selected_LabelDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LabelDto"},{"$ref":"#/components/schemas/Selected_LabelDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]}},"/api/v2/labels/{id}":{"delete":{"operationId":"deleteLabel","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Deleted; associations removed atomically and identity retired."},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"get":{"operationId":"getLabel","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"id, collection_id, name, color, position, native_id, native_created_at_ms, native_updated_at_ms, revision, created_at, updated_at, links","in":"query","name":"fields","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LabelDto"},{"$ref":"#/components/schemas/Selected_LabelDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Unchanged"},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"head":{"operationId":"headLabel","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"id, collection_id, name, color, position, native_id, native_created_at_ms, native_updated_at_ms, revision, created_at, updated_at, links","in":"query","name":"fields","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Unchanged"},"400":{"description":"Request failed"},"401":{"description":"Request failed"},"403":{"description":"Request failed"},"404":{"description":"Request failed"},"405":{"description":"Request failed"},"406":{"description":"Request failed"},"408":{"description":"Request failed"},"409":{"description":"Request failed"},"410":{"description":"Request failed"},"412":{"description":"Request failed"},"413":{"description":"Request failed"},"414":{"description":"Request failed"},"415":{"description":"Request failed"},"428":{"description":"Request failed"},"503":{"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"patch":{"operationId":"patchLabel","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":["string","null"]},"color":{"enum":["green","red","blue","amber","purple","orange","teal","pink","grey"],"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"description":"Nonblank, at most 200 UTF-16 code units; no controls.","minLength":1,"type":"string"},"native_created_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"native_id":{"description":"Original native string identity; nonblank, at most 1024 UTF-8 bytes, unique within owner and resource type.","type":["string","null"]},"native_updated_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"position":{"format":"int64","type":"integer"}},"required":[],"type":"object"}}},"description":"JSON up to 2 MiB within 10 seconds. POST requires id; creation and PUT require name and category collection_id. PATCH retains omitted fields. PUT resets optional fields. Label collection_id null means account-global. Null native_id clears the mapping. Local labels may be promoted to global; narrowing scope or moving categories must remain valid for every existing association. Account ownership and ETag checks apply.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LabelDto"},{"$ref":"#/components/schemas/Selected_LabelDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LabelDto"},{"$ref":"#/components/schemas/Selected_LabelDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]},"put":{"operationId":"putLabel","parameters":[{"description":"Current ETag required to modify an existing resource.","in":"header","name":"If-Match","schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"collection_id":{"format":"uuid","type":["string","null"]},"color":{"enum":["green","red","blue","amber","purple","orange","teal","pink","grey"],"type":"string"},"id":{"format":"uuid","type":"string"},"name":{"description":"Nonblank, at most 200 UTF-16 code units; no controls.","minLength":1,"type":"string"},"native_created_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"native_id":{"description":"Original native string identity; nonblank, at most 1024 UTF-8 bytes, unique within owner and resource type.","type":["string","null"]},"native_updated_at_ms":{"format":"int64","maximum":253402300799999,"minimum":0,"type":["integer","null"]},"position":{"format":"int64","type":"integer"}},"required":["name"],"type":"object"}}},"description":"JSON up to 2 MiB within 10 seconds. POST requires id; creation and PUT require name and category collection_id. PATCH retains omitted fields. PUT resets optional fields. Label collection_id null means account-global. Null native_id clears the mapping. Local labels may be promoted to global; narrowing scope or moving categories must remain valid for every existing association. Account ownership and ETag checks apply.","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LabelDto"},{"$ref":"#/components/schemas/Selected_LabelDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LabelDto"},{"$ref":"#/components/schemas/Selected_LabelDto"}]}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Request failed"}},"security":[{"BearerAuth":[]}]}},"/api/v2/library-import/apply":{"post":{"description":"Requires collections:write. Bounded to 2 MiB and 10000 records. Additive only: existing and retired identities conflict. Legacy zones, automatic finishes, archive omissions, duplicate rows and Commander singleton exceptions require acknowledgement. Schema 2 optionally carries searchPreferences and permits preference-only imports. Backend scalar choices win once persisted; hidden terms and history merge backend-first. Normalization, retained scalar conflicts and history overflow require acknowledgement. Hidden-term overflow blocks. Preferences and library writes share one transaction. Apply binds the source, account, preference revision and target snapshot; 412 requires a new preview. No native sync or full Commander legality validation is implied.","operationId":"nativeImportapply","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"acknowledge":{"description":"Exactly the warning codes from preview.required_acknowledgements.","items":{"type":"string"},"type":"array"},"preview_token":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source":{"oneOf":[{"$ref":"#/components/schemas/NativeArchive"},{"$ref":"#/components/schemas/NativeLibrary"}]}},"required":["source","preview_token"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeImportReport"}}},"description":"Preview or atomic apply report. Preview blockers never write data; replay never resurrects or overwrites imported records."},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."}},"security":[{"BearerAuth":[]}]}},"/api/v2/library-import/preview":{"post":{"description":"Requires collections:write. Bounded to 2 MiB and 10000 records. Additive only: existing and retired identities conflict. Legacy zones, automatic finishes, archive omissions, duplicate rows and Commander singleton exceptions require acknowledgement. Schema 2 optionally carries searchPreferences and permits preference-only imports. Backend scalar choices win once persisted; hidden terms and history merge backend-first. Normalization, retained scalar conflicts and history overflow require acknowledgement. Hidden-term overflow blocks. Preferences and library writes share one transaction. Apply binds the source, account, preference revision and target snapshot; 412 requires a new preview. No native sync or full Commander legality validation is implied.","operationId":"nativeImportpreview","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"source":{"oneOf":[{"$ref":"#/components/schemas/NativeArchive"},{"$ref":"#/components/schemas/NativeLibrary"}]}},"required":["source"],"type":"object"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NativeImportReport"}}},"description":"Preview or atomic apply report. Preview blockers never write data; replay never resurrects or overwrites imported records."},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"408":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Import rejected; no partial collection changes."}},"security":[{"BearerAuth":[]}]}},"/api/v2/openapi.json":{"get":{"operationId":"getV2OpenApi","parameters":[{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"type":"object"}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"getV2OpenApiHead","parameters":[{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/printings":{"get":{"operationId":"listPrintings","parameters":[{"description":"Comma-separated top-level fields. Allowed: metadata, id, card_id, name, set_code, collector_number, language, rarity, layout, released_at, finishes, games, faces, images, prices, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: color, usd, eur, tix, mana_value, artist, power, toughness, edhrec_rank, penny_rank, collector_number_numeric, rarity_rank, id, name, released_at, set_code, collector_number, language, rarity. Default: color ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"color","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Grammar 13: Native metadata predicates: artist, flavor/ft, watermark/wm, st/settype, border, frame, stamp, kw/keyword, produces, devotion, m/mana, cn/number, b/block, in, is/not, has, new, artists/illustrations/prints/sets/paperprints/papersets, edhrec/penny. Metadata belongs to printings and preserves their mana value, colors and legalities even without an Oracle ID; legacy catalogs return metadata=null and reject predicates requiring unavailable metadata. Exact names use ! followed by a quoted name. Name/type/oracle/flavor support /regex/ with bounded Rust regex syntax; lookaround and backreferences are rejected. Prefix the query with dialect:native followed by a space for native c: exact and id: subset semantics. Default colon meanings remain compatible. Top-level display directives unique:cards/prints/art, order, direction, prefer and cheapest are supported on printings. Native preferred selection prioritizes English, real cards, base/promotional treatments, optional USD price, images and release date. Prefer accepts oldest/newest/promo/default/atypical/notub/notuniversesbeyond/usd-low/usd-high. Preferences imply unique:cards unless unique is explicit. Art uniqueness uses illustration ID, falling back to printing ID. Display layout directives are accepted without changing JSON. Directive options inside groups or used as OR operands are rejected. Use either order/direction or the sort parameter. Release ordering follows native newest-first; explicit sort=released_at remains ascending. Functional tags match labels, aliases and descendants. Other fields: names, t/type, o/oracle, f/format/legal, banned, restricted, tag/function/otag, mv/cmc, c/color, id/identity, s/e/set/edition, r/rarity, lang/language, game, finish, layout, year, date, usd/usdfoil/usdetched/eur/eurfoil/tix; implicit/explicit AND, OR, parentheses and exclusion with -term or -(group). AND binds more tightly than OR; operators are case-insensitive. Quote literal operator words or parentheses. Quoted values support quote/backslash escapes. At most 32 conditions, 16 nested groups and 96 expression nodes; 2048 UTF-16 code units. Set, language, game, finish and layout use : or = for exact ASCII case-insensitive values; game and finish match a list member, layout matches its scalar value. Unknown values match nothing; no substring or wildcard matching. Language accepts native language-name aliases and any (no restriction). Rarity c/common, u/uncommon, r/rare, m/mythic supports :, =, !=, <, <=, >, >= in that order; other rarity names support only : or =. Mana supports != as well as the other numeric comparisons. Stats pow/power, tou/toughness, loy/loyalty, def/defense and pt/powtou support numeric comparisons with signed plain decimals from -1000000000000 to 1000000000000 or another stat field. pt sums power and toughness only when both are known. Comparisons between fields use one face; separate predicates may match different faces of the same printing. Printed star expressions *, *², N+*, *+N and N-* use zero for the variable part; other nonnumeric text and missing stats do not match positive comparisons, including !=. Raw printed stats remain strings on printing faces. Even/odd are supported for stats and mana value using integer parity; literal-text stat filters remain unsupported. Price fields select Scryfall retail quotes: usd/eur/tix use nonfoil; usdfoil/eurfoil use foil; usdetched uses etched. Comparisons :, =, !=, <, <=, >, >= use exact nonnegative decimals with at most 28 fractional digits and the catalog decimal range; : means equality. Equivalent exponent spellings and quoted amounts are accepted. Missing/null quotes do not match positive comparisons, including !=; negation includes those nonmatches. MTGJSON and buylist quotes are not used by these fields. Price predicates and all other printing predicates must match the same printing. Prices are those in the selected immutable catalog, not live market quotes. Year compares the printing release year using :, =, !=, <, <=, >, >=; : means equality. Values are unquoted ASCII integers from 0 to 9999, with leading zeroes permitted. A missing printing does not match any positive year predicate, including !=. Date compares the printing release day with the same operators as year. Values are valid Gregorian YYYY-MM-DD dates (years 0000 to 9999), four-digit years resolved to January 1, or ASCII alphanumeric set codes containing a letter. Quoted values are accepted. Set codes compare against the earliest printing release date in that set within the selected catalog generation, case-insensitively. Unknown sets or missing printings do not match positive date comparisons, including !=; negation includes those nonmatches. Date values now and today resolve to the current UTC calendar day. Returned continuations retain that reference date across midnight and catalog changes; follow the supplied next link. Relative comparisons otherwise use the same operators and printing scope as literal dates. Partial month dates are rejected. Colors and identity accept integer counts from 0 to 5 with :, =, !=, <, <=, >, >=. For color-letter sets, : contains (colorless matches empty), = is exact, != is not exact, <= is subset, < is proper subset, >= is superset, > is proper superset. Unknown card colors and absent card relations do not match positive color comparisons, including !=; negation applies after that result. Identity uses the known stored set independently of card-color availability. Color sets also accept all native nicknames, case-insensitively: azorius, dimir, rakdos, gruul, selesnya, orzhov, izzet, golgari, boros, simic, bant, esper, grixis, jund, naya, abzan, jeskai, sultai, mardu, temur, quandrix, silverquill, prismari, witherbloom, lorehold, chaos, aggression, altruism, growth, artifice. Each nickname uses the same comparisons as its color letters. Existing colon meanings are unchanged. Legal/format/f, banned and restricted require : followed by an exact format name (ASCII case-insensitive query value); format and status must match the same legality record. Missing/unknown formats, absent card relations and not_legal do not match these positive status predicates; negation includes those nonmatches. Card results require the entire expression to match one printing; cards with no printing still use false for positive printing predicates (lang:any is true). Unsupported fields or malformed expressions reject the entire query.","example":"t:creature c:w mv<=3","in":"query","name":"q","schema":{"maxLength":2048,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PageDto_PrintingDto"},{"$ref":"#/components/schemas/Selected_PageDto_PrintingDto"},{"$ref":"#/components/schemas/Expanded_PageDto_PrintingDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"listPrintingsHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: metadata, id, card_id, name, set_code, collector_number, language, rarity, layout, released_at, finishes, games, faces, images, prices, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: color, usd, eur, tix, mana_value, artist, power, toughness, edhrec_rank, penny_rank, collector_number_numeric, rarity_rank, id, name, released_at, set_code, collector_number, language, rarity. Default: color ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"color","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"description":"Grammar 13: Native metadata predicates: artist, flavor/ft, watermark/wm, st/settype, border, frame, stamp, kw/keyword, produces, devotion, m/mana, cn/number, b/block, in, is/not, has, new, artists/illustrations/prints/sets/paperprints/papersets, edhrec/penny. Metadata belongs to printings and preserves their mana value, colors and legalities even without an Oracle ID; legacy catalogs return metadata=null and reject predicates requiring unavailable metadata. Exact names use ! followed by a quoted name. Name/type/oracle/flavor support /regex/ with bounded Rust regex syntax; lookaround and backreferences are rejected. Prefix the query with dialect:native followed by a space for native c: exact and id: subset semantics. Default colon meanings remain compatible. Top-level display directives unique:cards/prints/art, order, direction, prefer and cheapest are supported on printings. Native preferred selection prioritizes English, real cards, base/promotional treatments, optional USD price, images and release date. Prefer accepts oldest/newest/promo/default/atypical/notub/notuniversesbeyond/usd-low/usd-high. Preferences imply unique:cards unless unique is explicit. Art uniqueness uses illustration ID, falling back to printing ID. Display layout directives are accepted without changing JSON. Directive options inside groups or used as OR operands are rejected. Use either order/direction or the sort parameter. Release ordering follows native newest-first; explicit sort=released_at remains ascending. Functional tags match labels, aliases and descendants. Other fields: names, t/type, o/oracle, f/format/legal, banned, restricted, tag/function/otag, mv/cmc, c/color, id/identity, s/e/set/edition, r/rarity, lang/language, game, finish, layout, year, date, usd/usdfoil/usdetched/eur/eurfoil/tix; implicit/explicit AND, OR, parentheses and exclusion with -term or -(group). AND binds more tightly than OR; operators are case-insensitive. Quote literal operator words or parentheses. Quoted values support quote/backslash escapes. At most 32 conditions, 16 nested groups and 96 expression nodes; 2048 UTF-16 code units. Set, language, game, finish and layout use : or = for exact ASCII case-insensitive values; game and finish match a list member, layout matches its scalar value. Unknown values match nothing; no substring or wildcard matching. Language accepts native language-name aliases and any (no restriction). Rarity c/common, u/uncommon, r/rare, m/mythic supports :, =, !=, <, <=, >, >= in that order; other rarity names support only : or =. Mana supports != as well as the other numeric comparisons. Stats pow/power, tou/toughness, loy/loyalty, def/defense and pt/powtou support numeric comparisons with signed plain decimals from -1000000000000 to 1000000000000 or another stat field. pt sums power and toughness only when both are known. Comparisons between fields use one face; separate predicates may match different faces of the same printing. Printed star expressions *, *², N+*, *+N and N-* use zero for the variable part; other nonnumeric text and missing stats do not match positive comparisons, including !=. Raw printed stats remain strings on printing faces. Even/odd are supported for stats and mana value using integer parity; literal-text stat filters remain unsupported. Price fields select Scryfall retail quotes: usd/eur/tix use nonfoil; usdfoil/eurfoil use foil; usdetched uses etched. Comparisons :, =, !=, <, <=, >, >= use exact nonnegative decimals with at most 28 fractional digits and the catalog decimal range; : means equality. Equivalent exponent spellings and quoted amounts are accepted. Missing/null quotes do not match positive comparisons, including !=; negation includes those nonmatches. MTGJSON and buylist quotes are not used by these fields. Price predicates and all other printing predicates must match the same printing. Prices are those in the selected immutable catalog, not live market quotes. Year compares the printing release year using :, =, !=, <, <=, >, >=; : means equality. Values are unquoted ASCII integers from 0 to 9999, with leading zeroes permitted. A missing printing does not match any positive year predicate, including !=. Date compares the printing release day with the same operators as year. Values are valid Gregorian YYYY-MM-DD dates (years 0000 to 9999), four-digit years resolved to January 1, or ASCII alphanumeric set codes containing a letter. Quoted values are accepted. Set codes compare against the earliest printing release date in that set within the selected catalog generation, case-insensitively. Unknown sets or missing printings do not match positive date comparisons, including !=; negation includes those nonmatches. Date values now and today resolve to the current UTC calendar day. Returned continuations retain that reference date across midnight and catalog changes; follow the supplied next link. Relative comparisons otherwise use the same operators and printing scope as literal dates. Partial month dates are rejected. Colors and identity accept integer counts from 0 to 5 with :, =, !=, <, <=, >, >=. For color-letter sets, : contains (colorless matches empty), = is exact, != is not exact, <= is subset, < is proper subset, >= is superset, > is proper superset. Unknown card colors and absent card relations do not match positive color comparisons, including !=; negation applies after that result. Identity uses the known stored set independently of card-color availability. Color sets also accept all native nicknames, case-insensitively: azorius, dimir, rakdos, gruul, selesnya, orzhov, izzet, golgari, boros, simic, bant, esper, grixis, jund, naya, abzan, jeskai, sultai, mardu, temur, quandrix, silverquill, prismari, witherbloom, lorehold, chaos, aggression, altruism, growth, artifice. Each nickname uses the same comparisons as its color letters. Existing colon meanings are unchanged. Legal/format/f, banned and restricted require : followed by an exact format name (ASCII case-insensitive query value); format and status must match the same legality record. Missing/unknown formats, absent card relations and not_legal do not match these positive status predicates; negation includes those nonmatches. Card results require the entire expression to match one printing; cards with no printing still use false for positive printing predicates (lang:any is true). Unsupported fields or malformed expressions reject the entire query.","example":"t:creature c:w mv<=3","in":"query","name":"q","schema":{"maxLength":2048,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/printings/{id}":{"get":{"operationId":"getPrinting","parameters":[{"description":"Comma-separated top-level fields. Allowed: metadata, id, card_id, name, set_code, collector_number, language, rarity, layout, released_at, finishes, games, faces, images, prices, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PrintingDto"},{"$ref":"#/components/schemas/Selected_PrintingDto"},{"$ref":"#/components/schemas/Expanded_PrintingDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"getPrintingHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: metadata, id, card_id, name, set_code, collector_number, language, rarity, layout, released_at, finishes, games, faces, images, prices, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/saved-searches":{"get":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"get__api_v2_saved-searches","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":false,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"cursor","schema":{"maxLength":1024,"type":"string"}},{"in":"query","name":"count","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearchPage"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"304":{"description":"Not modified","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]},"head":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"head__api_v2_saved-searches","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":false,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"in":"query","name":"cursor","schema":{"maxLength":1024,"type":"string"}},{"in":"query","name":"count","schema":{"default":false,"type":"boolean"}}],"responses":{"200":{"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"304":{"description":"Not modified","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Rejected request; no partial mutation."},"401":{"description":"Rejected request; no partial mutation."},"403":{"description":"Rejected request; no partial mutation."},"404":{"description":"Rejected request; no partial mutation."},"405":{"description":"Rejected request; no partial mutation."},"406":{"description":"Rejected request; no partial mutation."},"409":{"description":"Rejected request; no partial mutation."},"410":{"description":"Rejected request; no partial mutation."},"412":{"description":"Rejected request; no partial mutation."},"413":{"description":"Rejected request; no partial mutation."},"414":{"description":"Rejected request; no partial mutation."},"415":{"description":"Rejected request; no partial mutation."},"428":{"description":"Rejected request; no partial mutation."},"503":{"description":"Rejected request; no partial mutation."},"504":{"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]},"post":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"post__api_v2_saved-searches","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":false,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearchCreate"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearch"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearch"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]}},"/api/v2/saved-searches/{id}":{"delete":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"delete__api_v2_saved-searches_id","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":true,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"204":{"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]},"get":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"get__api_v2_saved-searches_id","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":false,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearch"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"304":{"description":"Not modified","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]},"head":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"head__api_v2_saved-searches_id","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":false,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"responses":{"200":{"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"304":{"description":"Not modified","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Rejected request; no partial mutation."},"401":{"description":"Rejected request; no partial mutation."},"403":{"description":"Rejected request; no partial mutation."},"404":{"description":"Rejected request; no partial mutation."},"405":{"description":"Rejected request; no partial mutation."},"406":{"description":"Rejected request; no partial mutation."},"409":{"description":"Rejected request; no partial mutation."},"410":{"description":"Rejected request; no partial mutation."},"412":{"description":"Rejected request; no partial mutation."},"413":{"description":"Rejected request; no partial mutation."},"414":{"description":"Rejected request; no partial mutation."},"415":{"description":"Rejected request; no partial mutation."},"428":{"description":"Rejected request; no partial mutation."},"503":{"description":"Rejected request; no partial mutation."},"504":{"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]},"patch":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"patch__api_v2_saved-searches_id","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":true,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearchInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearch"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]},"put":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"put__api_v2_saved-searches_id","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":true,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"format":"uuid","type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearchReplace"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedSearch"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]}},"/api/v2/search-preferences":{"delete":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"delete__api_v2_search-preferences","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":true,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPreferences"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]},"get":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"get__api_v2_search-preferences","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":false,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPreferences"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"304":{"description":"Not modified","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]},"head":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"head__api_v2_search-preferences","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":false,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"304":{"description":"Not modified","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Rejected request; no partial mutation."},"401":{"description":"Rejected request; no partial mutation."},"403":{"description":"Rejected request; no partial mutation."},"404":{"description":"Rejected request; no partial mutation."},"405":{"description":"Rejected request; no partial mutation."},"406":{"description":"Rejected request; no partial mutation."},"409":{"description":"Rejected request; no partial mutation."},"410":{"description":"Rejected request; no partial mutation."},"412":{"description":"Rejected request; no partial mutation."},"413":{"description":"Rejected request; no partial mutation."},"414":{"description":"Rejected request; no partial mutation."},"415":{"description":"Rejected request; no partial mutation."},"428":{"description":"Rejected request; no partial mutation."},"503":{"description":"Rejected request; no partial mutation."},"504":{"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]},"patch":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"patch__api_v2_search-preferences","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":true,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPreferenceInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPreferences"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]},"put":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"put__api_v2_search-preferences","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":true,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPreferenceInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPreferences"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]}},"/api/v2/search-preferences/history":{"post":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"post__api_v2_search-preferences_history","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":true,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchHistoryInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPreferences"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]}},"/api/v2/search/resolve":{"post":{"description":"Account-private search state. Reads/resolution accept collections:read or collections:write; mutations require collections:write. Bounded text is preserved; explicit resolution validates the composed query. PATCH preserves omissions; PUT resets omissions; only collection_id accepts null. Preference DELETE resets defaults with a monotonic revision. Saved-search DELETE retires the UUID. Creation retries require identical initial values. At most 1000 live saved searches per account. Lists order by UUID with signed account-bound 30-minute continuations; no snapshot across writes. No implicit preference application or history writes on catalog requests.","operationId":"post__api_v2_search_resolve","parameters":[{"description":"Current strong ETag or *. Required for updates, reset, deletion and history recording.","in":"header","name":"If-Match","required":false,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResolutionInput"}}},"required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResolution"}}},"description":"Success","headers":{"ETag":{"schema":{"type":"string"}},"Location":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"401":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"403":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"415":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"428":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Rejected request; no partial mutation."}},"security":[{"BearerAuth":[]}],"tags":["Search settings"]}},"/api/v2/tag-assignments":{"get":{"description":"All weighted tag assignments in this catalog. Composite identity is card_id plus tag_id; links.self addresses one assignment. Default ordering is card_id,tag_id ascending. Custom sorts append tag_id and then card_id when absent to guarantee unique ordering; an explicitly requested tag_id must be last. Counts cover all assignments before pagination. Include card/tag or follow their links. Existing card-scoped assignment representations retain their prior link shape.","operationId":"listTagAssignments","parameters":[{"description":"Comma-separated top-level fields. Allowed: card_id, tag_id, weight, annotation, links. Identifiers and navigation are always present: card_id, tag_id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card, tag. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: tag_id, weight, card_id. Default: tag_id ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"tag_id","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PageDto_TagAssignmentDto"},{"$ref":"#/components/schemas/Selected_PageDto_TagAssignmentDto"},{"$ref":"#/components/schemas/Expanded_PageDto_TagAssignmentDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"description":"All weighted tag assignments in this catalog. Composite identity is card_id plus tag_id; links.self addresses one assignment. Default ordering is card_id,tag_id ascending. Custom sorts append tag_id and then card_id when absent to guarantee unique ordering; an explicitly requested tag_id must be last. Counts cover all assignments before pagination. Include card/tag or follow their links. Existing card-scoped assignment representations retain their prior link shape.","operationId":"listTagAssignmentsHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: card_id, tag_id, weight, annotation, links. Identifiers and navigation are always present: card_id, tag_id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card, tag. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: tag_id, weight, card_id. Default: tag_id ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"tag_id","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/tag-assignments/{card_id}/{tag_id}":{"get":{"operationId":"getTagAssignment","parameters":[{"description":"Comma-separated top-level fields. Allowed: card_id, tag_id, weight, annotation, links. Identifiers and navigation are always present: card_id, tag_id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card, tag. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"path","name":"card_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Case-sensitive tag identifier; percent-encode it as one path segment. Both card_id and tag_id identify the assignment.","in":"path","name":"tag_id","required":true,"schema":{"maxLength":256,"minLength":1,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TagAssignmentDto"},{"$ref":"#/components/schemas/Selected_TagAssignmentDto"},{"$ref":"#/components/schemas/Expanded_TagAssignmentDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"getTagAssignmentHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: card_id, tag_id, weight, annotation, links. Identifiers and navigation are always present: card_id, tag_id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"description":"One-level relationships returned under included. Allowed: card, tag. No duplicates, nesting or wildcards. fields/count/sort apply to primary resources only. Related resources have full fields and no further includes; collections are ordered by identifier and independently paged. Null card relationships remain null. Primary and related data share an immutable catalog; nested next links retain it. Maximum 1000 included resources based on requested page/relationship limits.","in":"query","name":"include","schema":{"maxLength":64,"minLength":1,"type":"string"}},{"in":"path","name":"card_id","required":true,"schema":{"format":"uuid","type":"string"}},{"description":"Case-sensitive tag identifier; percent-encode it as one path segment. Both card_id and tag_id identify the assignment.","in":"path","name":"tag_id","required":true,"schema":{"maxLength":256,"minLength":1,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/tags":{"get":{"operationId":"listTags","parameters":[{"description":"Comma-separated top-level fields. Allowed: id, slug, label, description, source, source_version, source_url, aliases, parent_ids, child_ids, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: id, slug, label, source. Default: id ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"id","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/PageDto_TagDto"},{"$ref":"#/components/schemas/Selected_PageDto_TagDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"listTagsHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: id, slug, label, description, source, source_version, source_url, aliases, parent_ids, child_ids, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"in":"query","name":"limit","schema":{"default":50,"maximum":100,"minimum":1,"type":"integer"}},{"description":"Opaque continuation from links.next. Bound to this path, query, sort, fields, count, include/include_limit, limit and immutable catalog. Registry mode signs cursors and retains the original generation across promotion/restart; expired links return 410. Direct-file mode returns 409 after a catalog change.","in":"query","name":"cursor","schema":{"maxLength":2048,"type":"string"}},{"description":"true adds total_count: the number of matching resources in this catalog generation, after search/parent filters and before cursor/limit. false or omission skips counting and omits total_count. Counting shares the page's execution deadline; expensive counts can return 504. Only lowercase true/false are accepted.","in":"query","name":"count","schema":{"default":false,"type":"boolean"}},{"description":"Comma-separated fields; prefix a field with '-' for descending order. One to three fields, no duplicates. Allowed: id, slug, label, source. Default: id ascending. Identifier must be last if explicit; otherwise it is appended ascending to break ties. NULLs always last. Text is case-sensitive binary order, including collector numbers, rarity and weight (lexical, not numeric or ranked). Follow links.next unchanged; sort is bound into the cursor.","example":"id","in":"query","name":"sort","schema":{"maxLength":128,"minLength":1,"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"Link":{"description":"Next-page link when present.","schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}},"/api/v2/tags/{id}":{"get":{"operationId":"getTag","parameters":[{"description":"Comma-separated top-level fields. Allowed: id, slug, label, description, source, source_version, source_url, aliases, parent_ids, child_ids, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/TagDto"},{"$ref":"#/components/schemas/Selected_TagDto"}],"description":"Full resource fields when fields is omitted; selected fields plus identifiers and links when fields is supplied."}}},"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Invalid request or search"},"404":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Resource not found"},"405":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Method not allowed"},"406":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Representation unavailable"},"409":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Direct-file catalog changed"},"410":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Continuation or retained generation expired"},"412":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Precondition failed"},"413":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Response too large"},"414":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"URL too long"},"503":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Catalog unavailable"},"504":{"content":{"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},"description":"Query deadline exceeded"}}},"head":{"operationId":"getTagHead","parameters":[{"description":"Comma-separated top-level fields. Allowed: id, slug, label, description, source, source_version, source_url, aliases, parent_ids, child_ids, links. Identifiers and navigation are always present: id, links. Other fields are omitted, not replaced with null. Selected nullable fields retain their null values. Nested objects/arrays are selected as a whole; no wildcards or dot paths. Default: every field. Duplicate/unknown/empty fields are rejected. Follow links.next unchanged.","in":"query","name":"fields","schema":{"maxLength":512,"minLength":1,"type":"string"}},{"in":"path","name":"id","required":true,"schema":{"type":"string"}},{"in":"header","name":"If-None-Match","schema":{"type":"string"}},{"in":"header","name":"If-Match","schema":{"type":"string"}}],"responses":{"200":{"description":"Success","headers":{"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}}}},"304":{"description":"Representation unchanged","headers":{"ETag":{"schema":{"type":"string"}}}},"400":{"description":"Invalid request or search"},"404":{"description":"Resource not found"},"405":{"description":"Method not allowed"},"406":{"description":"Representation unavailable"},"409":{"description":"Direct-file catalog changed"},"410":{"description":"Continuation or retained generation expired"},"412":{"description":"Precondition failed"},"413":{"description":"Response too large"},"414":{"description":"URL too long"},"503":{"description":"Catalog unavailable"},"504":{"description":"Query deadline exceeded"}}}}},"servers":[{"url":"/"}]}