Overall improvements and data update (#22)

This PR contains the work done to update the live tests to the latest data plus lots of QoL improvements to the library, including:

* added test cases to test the ``AmiiboService` locally;
* conformed the models to the `Hashable` protocol;
* documented the use of caching with the `AmiiboService` service;
* updated the reference to the new AmiiboAPI url;
* updated the year on the copyrights and header files;
* updated the overall documentation of the source code and the package.

Reviewed-on: #22
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
This commit was merged in pull request #22.
This commit is contained in:
2026-03-22 23:39:48 +00:00
committed by Javier Cicchelli
parent fae4b44698
commit 2b01ec14bf
375 changed files with 1177 additions and 700 deletions
@@ -0,0 +1,19 @@
# ``AmiiboServiceError``
## Topics
### Request errors
- ``AmiiboServiceError/badRequest``
- ``AmiiboServiceError/cancelled``
### Response errors
- ``AmiiboServiceError/decoding``
- ``AmiiboServiceError/notFound``
### Service errors
- ``AmiiboServiceError/notAvailable``
- ``AmiiboServiceError/undocumented(_:)``
- ``AmiiboServiceError/unknown``
@@ -4,7 +4,7 @@ A library that provides everything the developer needs to interact with the **Am
## Overview
The `amiibo-service` library is a package that allows the developer to interact with the [Amiibo API](https://www.amiiboapi.com) backend service seamlessly, by not only providing the *service* type but also any possible *models*, *filters*, *errors* and *interfaces* types that might be needed during implementation.
The `amiibo-service` library is a package that allows the developer to interact with the [Amiibo API](https://www.amiiboapi.org) backend service seamlessly, by not only providing the *service* type but also any possible *models*, *filters*, *errors* and *interfaces* types that might be needed during implementation.
## Design
@@ -18,7 +18,7 @@ To use the `AmiiboService` library with your package, then add it as a dependenc
let package = Package(
// name, platforms, products, etc.
dependencies: [
.package(url: "https://github.com/rock-n-code/amiibo-service", from: "1.3.0"),
.package(url: "https://github.com/rock-n-code/amiibo-service", from: "1.4.0"),
// other dependencies
],
targets: [
@@ -37,6 +37,66 @@ It is also possible to use the `AmiiboService` library with your app in Xcode, t
> important: Swift 5.10 or higher is required in order to compile this library.
## Caching
The [Amiibo API](https://www.amiiboapi.org) recommends that consumers who call the API regularly implement caching on their systems. This library does not include a built-in cache, leaving the choice of caching strategy to the consumer. The following examples show two common approaches.
### URLCache on the transport layer
Pass a custom `URLSessionTransport` with a cache-configured `URLSession` to ``AmiiboLiveClient``:
```swift
import OpenAPIURLSession
let configuration = URLSessionConfiguration.default
configuration.urlCache = URLCache(
memoryCapacity: 5_000_000,
diskCapacity: 50_000_000
)
let transport = URLSessionTransport(
configuration: .init(
session: URLSession(configuration: configuration)
)
)
let service = AmiiboService(
client: AmiiboLiveClient(transport: transport)
)
```
This leverages HTTP cache headers from the server and persists cached responses to disk.
### Application-level caching
Alternatively, cache the results returned by ``AmiiboService`` directly in your application using any storage mechanism that fits your needs, such as an in-memory dictionary, a database, or a file-based store.
## Testing
The ``AmiiboClient`` protocol enables creating custom mock clients for testing, eliminating the need for network calls in unit tests. Conform to ``AmiiboClient`` and return stubbed data or throw ``AmiiboServiceError`` errors to verify your application's behavior:
```swift
import AmiiboService
struct MyMockClient: AmiiboClient {
var error: AmiiboServiceError?
func getAmiibos(
by filter: AmiiboFilter
) async throws(AmiiboServiceError) -> [Amiibo] {
if let error { throw error }
return []
}
// Implement remaining protocol requirements...
}
let service = AmiiboService(client: MyMockClient())
```
Inject the mock client into ``AmiiboService`` via its ``AmiiboService/init(client:)`` initializer to test how your code handles empty results, specific errors, or any other scenario without relying on the live backend.
## Tasks
This library offers a set of ready-to-use tasks that simplify the interaction with the library, which the developer can use from any `Terminal` application.
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -12,7 +12,7 @@
//
// ===----------------------------------------------------------------------===
/// A protocol that defines filters that might contain `key` and/or `name` values.
/// A protocol that defines filters containing optional `key` and/or `name` values for querying resources.
protocol KeyNameFilter {
// MARK: Properties
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -12,15 +12,15 @@
//
// ===----------------------------------------------------------------------===
/// A protocol that defines decodable models containing the `key` and `name` properties.
protocol KeyNameModel: Sendable {
/// A protocol that defines models containing a `key` and `name` pair.
protocol KeyNameModel: Sendable, Hashable {
// MARK: Properties
/// A key.
/// A hexadecimal key that uniquely identifies this model.
var key: String { get }
/// A name.
/// A display name for this model.
var name: String { get }
// MARK: Initializers
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -31,10 +31,16 @@ extension ISOTimestampTranscoder: DateTranscoder {
// MARK: Functions
/// Encodes a date into an ISO timestamp string.
/// - Parameter date: A date to encode.
/// - Returns: A string representation of the date in `yyyy-MM-dd'T'HH:mm:ss.SSSSSS` format.
func encode(_ date: Date) throws -> String {
dateFormatter.string(from: date)
}
/// Decodes an ISO timestamp string into a date.
/// - Parameter string: A string to decode.
/// - Returns: A date parsed from the string, or the Unix epoch if the string cannot be parsed.
func decode(_ string: String) throws -> Date {
dateFormatter.date(from: string) ?? .init()
}
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -16,18 +16,18 @@ import Foundation
import OpenAPIRuntime
import OpenAPIURLSession
/// A type that implements a live client to the online service.
/// A type that implements a live client to the [Amiibo API](https://www.amiiboapi.org) online service.
public struct AmiiboLiveClient: Sendable {
// MARK: Properties
/// A client generated by the `OpenAPIRuntime` library.
/// A client generated by the OpenAPI Runtime library to perform API calls.
private let client: Client
// MARK: Initializers
/// Initializes this client.
/// - Parameter transport: A transport that performs HTTP operations.
/// Initializes this client with a transport for performing HTTP operations.
/// - Parameter transport: A transport that performs HTTP operations. Defaults to a `URLSessionTransport` using the shared session.
public init(transport: any ClientTransport = URLSessionTransport()) {
self.client = .init(
// The force unwrapping implemented below assumes that the server definition from the OpenAPI specification is correct.
@@ -415,9 +415,9 @@ private extension AmiiboLiveClient {
}
}
/// Maps a given error to a `AmiiboServiceError` error.
/// Maps a given error to an ``AmiiboServiceError`` error.
/// - Parameter error: An error to map.
/// - Throws: An ``AmiiboServiceError`` error.
/// - Throws: An ``AmiiboServiceError`` error that corresponds to the given error.
func handle(error: any Error) throws -> Never {
switch error {
case is CancellationError:
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -14,19 +14,19 @@
/// A representation of all the possible errors that the ``AmiiboService`` service could throw.
public enum AmiiboServiceError: Error {
/// A bad request has been given to the client.
/// The request was malformed or contained invalid filter parameters.
case badRequest
/// A call to an endpoint has been cancelled by the user.
/// The request was cancelled before a response was received.
case cancelled
/// A response cannot be decoded.
/// The response body could not be decoded into the expected model.
case decoding
/// An online service is not currently available.
/// The backend service is currently unreachable due to a network or server issue.
case notAvailable
/// A response cannot be found.
/// No results were found matching the given filter criteria.
case notFound
/// An undocumented/unsupported status code error.
/// The server returned an undocumented HTTP status code.
case undocumented(_ statusCode: Int)
/// An unknown error.
/// An unexpected error that does not fall into any other category.
case unknown
}
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -15,38 +15,38 @@
import Foundation
/// A model that represents an amiibo.
public struct Amiibo: Sendable {
public struct Amiibo: Sendable, Hashable {
// MARK: Properties
/// A game character.
/// The name of the game character associated with this amiibo.
public let gameCharacter: String
/// A game series.
/// The name of the game series associated with this amiibo.
public let gameSeries: String
/// The first 8 hexadecimal characters of an identifier.
/// The first 8 hexadecimal characters of the amiibo identifier.
public let head: String
/// An image link.
/// A URL string pointing to the image of this amiibo.
public let image: String
/// An amiibo name.
/// The name of this amiibo.
public let name: String
/// A game platform type, if any.
/// The game platform data for this amiibo, if available.
public let platform: Platform?
/// A release date.
/// The release dates of this amiibo across different regions.
public let release: Release
/// An amiibo series.
/// The name of the amiibo series this amiibo belongs to.
public let series: String
/// The last 8 hexadecimal characters of an identifier.
/// The last 8 hexadecimal characters of the amiibo identifier.
public let tail: String
/// An amiibo type.
/// The type of this amiibo (e.g., Figure, Card, Yarn, Band).
public let type: String
// MARK: Initializers
@@ -73,12 +73,12 @@ public struct Amiibo: Sendable {
// MARK: Computed
/// An identifier.
/// The full 16-character hexadecimal identifier, composed of the ``head`` and ``tail``.
public var identifier: String {
head + tail
}
/// A URL related to an image link, if any.
/// A URL constructed from the ``image`` string, if valid.
public var imageURL: URL? {
.init(string: image)
}
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -14,17 +14,17 @@
extension Amiibo {
/// A model that represents a game related to an amiibo.
public struct Game: Sendable {
public struct Game: Sendable, Hashable {
// MARK: Properties
/// A list of identifiers.
/// A list of game identifiers associated with this game.
public let identifiers: [String]
/// A name.
/// The name of this game.
public let name: String
/// A list of amiibo usages, if any.
/// A list of amiibo usages within this game, if available.
public let usages: [Usage]?
// MARK: Initializers
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -13,8 +13,8 @@
// ===----------------------------------------------------------------------===
extension Amiibo {
/// A model that represents a collection of `Switch`, `Switch 2`, `3DS`, and `WiiU` games related to an amiibo.
public struct Platform: Sendable {
/// A model that represents a collection of `Switch`, `Switch 2`, `3DS`, and `Wii U` games related to an amiibo.
public struct Platform: Sendable, Hashable {
// MARK: Properties
@@ -27,7 +27,7 @@ extension Amiibo {
/// A list of `3DS` games related to an amiibo.
public let threeDS: [Game]
/// A list of `WiiU` games related to an amiibo.
/// A list of `Wii U` games related to an amiibo.
public let wiiU: [Game]
// MARK: Initializers
@@ -40,7 +40,7 @@ extension Amiibo {
/// - switch: A list of `Switch` games related to an amiibo, if any.
/// - switch2: A list of `Switch 2` games related to an amiibo, if any.
/// - threeDS: A list of `3DS` games related to an amiibo, if any.
/// - wiiU: A list of `WiiU` games related to an amiibo, if any.
/// - wiiU: A list of `Wii U` games related to an amiibo, if any.
init?(
_ `switch`: [Components.Schemas.AmiiboGame]?,
_ switch2: [Components.Schemas.AmiiboGame]?,
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -15,8 +15,8 @@
import Foundation
extension Amiibo {
/// A model that represents a collection of release dates related to an amiibo.
public struct Release: Sendable {
/// A model that represents the regional release dates of an amiibo.
public struct Release: Sendable, Hashable {
// MARK: Properties
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -14,14 +14,14 @@
extension Amiibo {
/// A model that represents the usage of an amiibo within a certain game.
public struct Usage: Sendable {
public struct Usage: Sendable, Hashable {
// MARK: Properties
/// An explanation of how to use an amiibo.
/// A description of how the amiibo is used within the game.
public let explanation: String
/// A flag that indicates whether an amiibo can save game data in it.
/// A flag that indicates whether the amiibo can save game data.
public let isWriteable: Bool
// MARK: Initializers
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -17,10 +17,10 @@ public struct AmiiboSeries: KeyNameModel {
// MARK: Properties
/// An amiibo series key.
/// The hexadecimal key that uniquely identifies this amiibo series.
public let key: String
/// An amiibo series name.
/// The name of this amiibo series.
public let name: String
// MARK: Initializers
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -17,10 +17,10 @@ public struct AmiiboType: KeyNameModel {
// MARK: Properties
/// An amiibo type key.
/// The hexadecimal key that uniquely identifies this amiibo type.
public let key: String
/// An amiibo type name.
/// The name of this amiibo type (e.g., Figure, Card, Yarn, Band).
public let name: String
// MARK: Initializers
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -17,10 +17,10 @@ public struct GameCharacter: KeyNameModel {
// MARK: Properties
/// A game character key.
/// The hexadecimal key that uniquely identifies this game character.
public let key: String
/// A game character name.
/// The name of this game character.
public let name: String
// MARK: Initializers
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -17,10 +17,10 @@ public struct GameSeries: KeyNameModel {
// MARK: Properties
/// A game series key.
/// The hexadecimal key that uniquely identifies this game series.
public let key: String
/// A game series name.
/// The name of this game series.
public let name: String
// MARK: Initializers
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -2,7 +2,7 @@
//
// This source file is part of the Amiibo Service open source project
//
// Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
// Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
// Licensed under Apache license v2.0
//
// See LICENSE for license information
@@ -2,7 +2,7 @@
##
## This source file is part of the Amiibo Service open source project
##
## Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
## Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
## Licensed under Apache license v2.0
##
## See LICENSE for license information
+12 -12
View File
@@ -2,7 +2,7 @@
##
## This source file is part of the Amiibo Service open source project
##
## Copyright (c) 2025 Röck+Cöde VoF. and the Amiibo Service project authors
## Copyright (c) 2026 Röck+Cöde VoF. and the Amiibo Service project authors
## Licensed under Apache license v2.0
##
## See LICENSE for license information
@@ -19,7 +19,7 @@ info:
description: |
# Information
The [AmiiboAPI](https://www.amiiboapi.com) service is primarily used for educational purposes.
The [AmiiboAPI](https://www.amiiboapi.org) service is primarily used for educational purposes.
This is a **reading-only API**. Only HTTP GET method is allowed by this API.
**No authentication** is required to use this API. All resources are allowed to access.
@@ -36,18 +36,18 @@ info:
* *You will comply with all applicable law, regulation, and third party rights (including without limitation laws regarding the import or export of data or software, privacy, and local laws). You will not use the APIs to encourage or promote illegal activity or violation of third party rights.*
* *These Terms and Conditions are subject to change without notice, from time to time in our sole discretion.*
version: v1.0.0
termsOfService: https://www.amiiboapi.com/docs/#termscondition
termsOfService: https://www.amiiboapi.org/docs/#termscondition
contact:
name: FAQ
url: https://www.amiiboapi.com/faq/
url: https://www.amiiboapi.org/faq/
license:
name: MIT license
identifier: MIT
externalDocs:
url: https://www.amiiboapi.com/docs
url: https://www.amiiboapi.org/docs
description: Amiibo API documentation
servers:
- url: https://www.amiiboapi.com/api
- url: https://www.amiiboapi.org/api
description: Live service
tags:
- name: Amiibo
@@ -63,7 +63,7 @@ paths:
description: |
Get a list of all the Amiibo items available in the database.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.com/docs/#amiibo) for further information.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.org/docs/#amiibo) for further information.
operationId: getAmiibos
tags:
- Amiibo
@@ -100,7 +100,7 @@ paths:
description: |
Get a list of all the Amiibo series available in the database.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.com/docs/#series) for further information.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.org/docs/#series) for further information.
operationId: getAmiiboSeries
parameters:
- $ref: '#/components/parameters/Key'
@@ -128,7 +128,7 @@ paths:
description: |
Get a list of all the game characters available in the database.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.com/docs/#character) for further information.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.org/docs/#character) for further information.
operationId: getGameCharacters
parameters:
- $ref: '#/components/parameters/Key'
@@ -156,7 +156,7 @@ paths:
description: |
Gets a list of all the Game series available in the database.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.com/docs/#gameSeries) for further information.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.org/docs/#gameSeries) for further information.
operationId: getGameSeries
parameters:
- $ref: '#/components/parameters/Key'
@@ -184,7 +184,7 @@ paths:
description: |
Gets a list of all the amiibo types available in the database.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.com/docs/#type) for further information.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.org/docs/#type) for further information.
operationId: getAmiiboTypes
parameters:
- $ref: '#/components/parameters/Key'
@@ -212,7 +212,7 @@ paths:
description: |
Gets an ISO-formatted date+time when the Amiibo data was last updated.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.com/docs/#lastUpdated) for further information.
Please refer to [the documentation of the endpoint](https://www.amiiboapi.org/docs/#lastUpdated) for further information.
operationId: getLastUpdated
responses:
'200':