@lap v0.3
# Machine-readable API spec. Each @endpoint block is one API call.
@api TCGdex API
@base https://api.tcgdex.net/v2/en
@version 2
@endpoints 33
@hint download_for_search
@toc cards(2), sets(3), series(2), categories(2), hp(2), illustrators(2), rarities(2), retreats(2), types(2), dex-ids(2), energy-types(2), regulation-marks(2), stages(2), suffixes(2), trainer-types(2), variants(2)

@group cards
@endpoint GET /cards
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /cards/{cardId}
@required {cardId: str}
@returns(200) {id: str, localId: str, image: str, name: str, illustrator: str, category: str, rarity: str, set: map{id: str, name: str, logo: str, symbol: str, cardCount: map{total: num, official: num}}, variants: map{normal: bool, reverse: bool, holo: bool, firstEdition: bool, wPromo: bool}, variant_detailed: [map]?, hp: num?, types: [str], evolveFrom: str, stage: str, suffix: str, item: map{name: str, effect: str}, trainerType: str, energyType: str, regulationMark: str, legal: map{standard: bool, expanded: bool}, description: str, level: num, abilities: [map], attacks: [map], retreat: num, dexId: [num], weaknesses: [[map]], resistances: [[map]], boosters: [map], updated: str(date-time)}
@errors {400, 404, 500}

@endgroup

@group sets
@endpoint GET /sets
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /sets/{set}
@required {set: str}
@returns(200) {id: str, name: str, logo: str, symbol: str, serie: map{id: str, name: str, logo: str}, tcgOnline: str, releaseDate: str(date), variants: map{normal: bool, reverse: bool, holo: bool, firstEdition: bool, wPromo: bool}, boosters: [map], legal: map{standard: bool, expanded: bool}, abbreviation: map{official: str, localized: str}, cardCount: map{total: num, official: num, normal: num, reverse: num, holo: num, firstEd: num}, cards: [map]}
@errors {400, 404, 500}

@endpoint GET /sets/{set}/{cardLocalId}
@required {set: str, cardLocalId: str}
@returns(200) {id: str, localId: str, image: str, name: str, illustrator: str, category: str, rarity: str, set: map{id: str, name: str, logo: str, symbol: str, cardCount: map{total: num, official: num}}, variants: map{normal: bool, reverse: bool, holo: bool, firstEdition: bool, wPromo: bool}, variant_detailed: [map]?, hp: num?, types: [str], evolveFrom: str, stage: str, suffix: str, item: map{name: str, effect: str}, trainerType: str, energyType: str, regulationMark: str, legal: map{standard: bool, expanded: bool}, description: str, level: num, abilities: [map], attacks: [map], retreat: num, dexId: [num], weaknesses: [[map]], resistances: [[map]], boosters: [map], updated: str(date-time)}
@errors {400, 404, 500}

@endgroup

@group series
@endpoint GET /series
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /series/{serie}
@required {serie: str}
@returns(200) {id: str, name: str, logo: str, releaseDate: str(date), firstSet: map{id: str, name: str, logo: str, symbol: str, cardCount: map{total: num, official: num}}, lastSet: map{id: str, name: str, logo: str, symbol: str, cardCount: map{total: num, official: num}}, sets: [map]}
@errors {400, 404, 500}

@endgroup

@group categories
@endpoint GET /categories
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /categories/{category}
@required {category: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200) {name: str, cards: [map]}
@errors {400, 404, 500}

@endgroup

@group hp
@endpoint GET /hp
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /hp/{hp}
@required {hp: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200) {name: str, cards: [map]}
@errors {400, 404, 500}

@endgroup

@group illustrators
@endpoint GET /illustrators
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /illustrators/{illustrator}
@required {illustrator: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200) {name: str, cards: [map]}
@errors {400, 404, 500}

@endgroup

@group rarities
@endpoint GET /rarities
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /rarities/{rarity}
@required {rarity: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200) {name: str, cards: [map]}
@errors {400, 404, 500}

@endgroup

@group retreats
@endpoint GET /retreats
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /retreats/{retreat}
@required {retreat: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200) {name: str, cards: [map]}
@errors {400, 404, 500}

@endgroup

@group types
@endpoint GET /types
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /types/{type}
@required {type: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 404, 500}

@endgroup

@group dex-ids
@endpoint GET /dex-ids
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /dex-ids/{dexId}
@required {dexId: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 404, 500}

@endgroup

@group energy-types
@endpoint GET /energy-types
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /energy-types/{energy-type}
@required {energy-type: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 404, 500}

@endgroup

@group regulation-marks
@endpoint GET /regulation-marks
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /regulation-marks/{regulation-mark}
@required {regulation-mark: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 404, 500}

@endgroup

@group stages
@endpoint GET /stages
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /stages/{stage}
@required {stage: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 404, 500}

@endgroup

@group suffixes
@endpoint GET /suffixes
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /suffixes/{suffix}
@required {suffix: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 404, 500}

@endgroup

@group trainer-types
@endpoint GET /trainer-types
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /trainer-types/{trainer-type}
@required {trainer-type: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 404, 500}

@endgroup

@group variants
@endpoint GET /variants
@optional {sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 500}

@endpoint GET /variants/{variant}
@required {variant: str}
@optional {filters: map, sort:field: str, sort:order: str(ASC/DESC)=null, pagination:page: int=1, pagination:itemsPerPage: int=100}
@returns(200)
@errors {400, 404, 500}

@endgroup

@end
