{
  "openapi": "3.1.0",
  "info": {
    "title": "seeded.art archive API",
    "version": "1",
    "description": "Read-only archive pages support JSON through Content negotiation. Claimed and curated identities take precedence. Among imported carriers sharing a name case-insensitively, the plain name belongs to the address credited on visible projects (highest volume breaks ties); others receive persistent name-2, name-3 and so on in first-seen order. Generated names are reserved, and old numbers are never reused. Profiles, JSON and search display and resolve these names. Address sign-in and market routes are explicit JSON APIs. No endpoint signs or broadcasts a transaction. XML sitemaps are discovery documents and do not expand access rights or grant a content licence."
  },
  "servers": [
    {
      "url": "/"
    }
  ],
  "tags": [
    {
      "name": "Archive",
      "description": "Public archive pages; HTML remains the default representation."
    },
    {
      "name": "Auth",
      "description": "Cookie-based, address-bound sign-in and profile editing."
    },
    {
      "name": "Market",
      "description": "Authenticated transaction preparation, simulation and confirmation."
    }
  ],
  "paths": {
    "/openapi.json": {
      "get": {
        "operationId": "getOpenApi",
        "tags": [
          "Archive"
        ],
        "summary": "Get this OpenAPI document",
        "responses": {
          "200": {
            "description": "OpenAPI 3.1 document",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "operationId": "getLlmsGuide",
        "tags": [
          "Archive"
        ],
        "summary": "Get the agent usage guide",
        "responses": {
          "200": {
            "description": "Plain-text usage guide",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/projects": {
      "get": {
        "operationId": "listProjects",
        "tags": [
          "Archive"
        ],
        "summary": "List projects",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Text filter."
          },
          {
            "name": "artist",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Artist filter."
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "volume",
                "newest",
                "oldest"
              ],
              "default": "volume"
            },
            "description": "Project order; `volume` (highest volume) is the default."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/After"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ProjectsPage"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/project/{id}": {
      "get": {
        "operationId": "getProject",
        "tags": [
          "Archive"
        ],
        "summary": "Get a project and its edition page",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "$ref": "#/components/parameters/ProjectId"
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "trait_name",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "trait_value",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "view",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "editions"
              ]
            },
            "description": "Only `editions`. The removed `compare` view redirects (308) to the project."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/After"
          },
          {
            "name": "articles_after",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Independent cursor for the related or profile articles."
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ProjectPage"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/token/{contract}/{id}": {
      "get": {
        "operationId": "getToken",
        "tags": [
          "Archive"
        ],
        "summary": "Get a token",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "name": "contract",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9]+$"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/TokenPage"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/artists": {
      "get": {
        "operationId": "listArtists",
        "tags": [
          "Archive"
        ],
        "summary": "List artists",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Searches artist display names case-insensitively, including generated numbered names."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/After"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ArtistsPage"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/profile/{id}": {
      "get": {
        "operationId": "getProfile",
        "tags": [
          "Archive"
        ],
        "summary": "Get a public profile and projects or collected tokens",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Tezos address or case-insensitive display name, including generated numbered names."
          },
          {
            "name": "view",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "projects",
                "collected"
              ]
            }
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "trait_name",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "trait_value",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/After"
          },
          {
            "name": "articles_after",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Independent cursor for the related or profile articles."
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ProfilePage"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/collectors": {
      "get": {
        "operationId": "listCollectors",
        "tags": [
          "Archive"
        ],
        "summary": "Get the collectors view",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "name": "address",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "A supplied address redirects to its collected-token profile."
          },
          {
            "$ref": "#/components/parameters/Page"
          },
          {
            "$ref": "#/components/parameters/After"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/CollectorsPage"
          },
          "303": {
            "description": "Redirect to /profile/{address}?view=collected."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/search": {
      "get": {
        "operationId": "searchArchive",
        "tags": [
          "Archive"
        ],
        "summary": "Search projects, artists and collectors",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Search includes case-insensitive artist and collector display names, including generated numbered names."
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "volume",
                "newest",
                "oldest"
              ],
              "default": "volume"
            },
            "description": "Project order; `volume` (highest volume) is the default."
          },
          {
            "name": "projects_after",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "artists_after",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "collectors_after",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "articles_after",
            "in": "query",
            "schema": {
              "type": "string"
            },
            "description": "Cursor of the Articles section."
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/SearchPage"
          },
          "303": {
            "description": "An exact Tezos address query redirects to its profile."
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/articles": {
      "get": {
        "operationId": "listArticles",
        "tags": [
          "Archive"
        ],
        "summary": "List and filter articles",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "$ref": "#/components/parameters/After"
          },
          {
            "name": "author",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "holder",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "project",
            "in": "query",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ArticlesPage"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/article/{id}": {
      "get": {
        "operationId": "getArticle",
        "tags": [
          "Archive"
        ],
        "summary": "Get an article",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9]+$"
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ArticlePage"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/about": {
      "get": {
        "operationId": "getAbout",
        "tags": [
          "Archive"
        ],
        "summary": "Get archive status",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/AboutPage"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/auth/profile": {
      "get": {
        "operationId": "getProfileEditView",
        "tags": [
          "Auth"
        ],
        "summary": "Get the signed-in address's profile edit view",
        "security": [
          {
            "sessionCookie": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/ProfileEditPage"
          },
          "401": {
            "$ref": "#/components/responses/AuthError"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/profile/{address}/market": {
      "get": {
        "operationId": "getOwnMarket",
        "tags": [
          "Market"
        ],
        "summary": "Get the signed-in address's listings and offers",
        "description": "The path address must equal the authenticated address. The JSON view is private and uncached.",
        "security": [
          {
            "sessionCookie": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "name": "address",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "view",
            "in": "query",
            "schema": {
              "type": "string",
              "enum": [
                "listings",
                "offers",
                "received"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/After"
          },
          {
            "name": "token_contract",
            "in": "query",
            "description": "Use together with token_id. Must be one of the supported token contracts.",
            "schema": {
              "type": "string",
              "enum": [
                "KT1KEa8z6vWXDJrVqtMrAeDVzsvxat3kHaCE",
                "KT1U6EHmNxJTkvaWJ4ThczG4FSDaHC21ssvi",
                "KT1EfsNuqwLAWDd3o4pvfUx1CAh5GMdTrRvr"
              ]
            }
          },
          {
            "name": "token_id",
            "in": "query",
            "description": "Use together with token_contract.",
            "schema": {
              "type": "integer",
              "minimum": 0
            }
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/MarketPage"
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/AuthError"
          },
          "403": {
            "$ref": "#/components/responses/AuthError"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/auth/session": {
      "get": {
        "operationId": "getSession",
        "tags": [
          "Auth"
        ],
        "summary": "Get the current session or null",
        "responses": {
          "200": {
            "description": "Session status",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "session"
                  ],
                  "properties": {
                    "session": {
                      "oneOf": [
                        {
                          "$ref": "#/components/schemas/Session"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/auth/challenge": {
      "post": {
        "operationId": "createSignInChallenge",
        "tags": [
          "Auth"
        ],
        "summary": "Create a short-lived address sign-in challenge",
        "description": "Requires the exact configured Origin. The response sets a challenge cookie. Sign the returned payload with the signing application; it grants sign-in only.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Origin"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChallengeRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Challenge and CSRF value; sets challenge cookie",
            "headers": {
              "Set-Cookie": {
                "$ref": "#/components/headers/SetCookie"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Challenge"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/AuthError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/auth/verify": {
      "post": {
        "operationId": "verifySignIn",
        "tags": [
          "Auth"
        ],
        "summary": "Verify the address signature and establish a session",
        "description": "Requires the challenge cookie, exact Origin and X-CSRF-Token from the challenge. Verification checks that the public key matches the requested Tezos address.",
        "parameters": [
          {
            "$ref": "#/components/parameters/Origin"
          },
          {
            "$ref": "#/components/parameters/Csrf"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/VerifyRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Session view; sets session cookie and clears challenge cookie",
            "headers": {
              "Set-Cookie": {
                "$ref": "#/components/headers/SetCookie"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "session"
                  ],
                  "properties": {
                    "session": {
                      "$ref": "#/components/schemas/Session"
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthError"
          },
          "403": {
            "$ref": "#/components/responses/AuthError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/auth/logout": {
      "post": {
        "operationId": "logout",
        "tags": [
          "Auth"
        ],
        "summary": "End the current session",
        "description": "Requires exact Origin and the session CSRF token. Set all=true to revoke every session for the signed-in address.",
        "security": [
          {
            "sessionCookie": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Origin"
          },
          {
            "$ref": "#/components/parameters/Csrf"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "all": {
                    "type": "boolean",
                    "default": false
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Session ended; session and challenge cookies cleared"
          },
          "401": {
            "$ref": "#/components/responses/AuthError"
          },
          "403": {
            "$ref": "#/components/responses/AuthError"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/auth/profile": {
      "post": {
        "operationId": "saveProfileEdit",
        "tags": [
          "Auth"
        ],
        "summary": "Save profile fields for the signed-in address",
        "description": "Requires exact Origin, session cookie and X-CSRF-Token. This uses the sign-in proof plus CSRF; it does not ask for a new signature over the edit.",
        "security": [
          {
            "sessionCookie": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Origin"
          },
          {
            "$ref": "#/components/parameters/Csrf"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfileEditRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Saved",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "saved"
                  ],
                  "properties": {
                    "saved": {
                      "const": true
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/AuthError"
          },
          "403": {
            "$ref": "#/components/responses/AuthError"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/market/prepare": {
      "post": {
        "operationId": "prepareMarketActions",
        "tags": [
          "Market"
        ],
        "summary": "Validate, review and simulate market actions",
        "description": "Authenticated. Rechecks mainnet identity, contract code, ownership and active terms. Returns a 120-second review ticket and unsigned operation review; it does not sign or broadcast. Accept actions require a configured fee recipient. Cancellation has no platform fee; network fees still apply.",
        "security": [
          {
            "sessionCookie": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Origin"
          },
          {
            "$ref": "#/components/parameters/Csrf"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "actions"
                ],
                "properties": {
                  "actions": {
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 50,
                    "items": {
                      "$ref": "#/components/schemas/MarketAction"
                    }
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Reviewed actions and simulation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PreparedReview"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/AuthError"
          },
          "403": {
            "$ref": "#/components/responses/AuthError"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/market/check": {
      "post": {
        "operationId": "checkMarketReview",
        "tags": [
          "Market"
        ],
        "summary": "Recheck a review and obtain unsigned operations",
        "description": "Rechecks the ticket immediately before handing unsigned operations to the connected signing application. The server has no signing or injection operation.",
        "security": [
          {
            "sessionCookie": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Origin"
          },
          {
            "$ref": "#/components/parameters/Csrf"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TicketRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Unsigned operations, branch, network and lock/receipt lifetimes",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Ready"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthError"
          },
          "403": {
            "$ref": "#/components/responses/AuthError"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/market/confirm": {
      "post": {
        "operationId": "confirmMarketOperation",
        "tags": [
          "Market"
        ],
        "summary": "Confirm a signing-application-broadcast operation",
        "description": "Submit the operation hash returned by the connected signing application. The server verifies canonical chain inclusion and operation contents; it never broadcasts. A 409 FeeEvasion with acceptance_applied=true is terminal: the acceptance applied without the reviewed platform fee. Never resend it. Detection requires a client confirmation request; the fee depends on seller cooperation.",
        "security": [
          {
            "sessionCookie": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Origin"
          },
          {
            "$ref": "#/components/parameters/Csrf"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "ticket",
                  "hash"
                ],
                "properties": {
                  "ticket": {
                    "type": "string"
                  },
                  "hash": {
                    "type": "string"
                  }
                },
                "additionalProperties": false
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Confirmed or still pending canonical confirmation",
            "content": {
              "application/json": {
                "schema": {
                  "oneOf": [
                    {
                      "type": "object",
                      "required": [
                        "confirmed"
                      ],
                      "properties": {
                        "confirmed": {
                          "const": true
                        }
                      }
                    },
                    {
                      "type": "object",
                      "required": [
                        "confirmed",
                        "pending"
                      ],
                      "properties": {
                        "confirmed": {
                          "const": false
                        },
                        "pending": {
                          "const": true
                        }
                      }
                    }
                  ]
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthError"
          },
          "403": {
            "$ref": "#/components/responses/AuthError"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/api/market/discard": {
      "post": {
        "operationId": "discardMarketReview",
        "tags": [
          "Market"
        ],
        "summary": "Discard an unsubmitted review",
        "description": "Discards the signed-in address's reviewed ticket. It does not undo a signing application broadcast.",
        "security": [
          {
            "sessionCookie": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/Origin"
          },
          {
            "$ref": "#/components/parameters/Csrf"
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TicketRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Discarded",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "discarded"
                  ],
                  "properties": {
                    "discarded": {
                      "const": true
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/AuthError"
          },
          "403": {
            "$ref": "#/components/responses/AuthError"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/RateLimited"
          },
          "503": {
            "$ref": "#/components/responses/Unavailable"
          }
        }
      }
    },
    "/sitemap.xml": {
      "get": {
        "operationId": "getSitemapIndex",
        "tags": [
          "Archive"
        ],
        "summary": "Get sitemap index",
        "description": "Index linking to all sitemap documents. Follow its links rather than constructing shard URLs. Each shard is bounded to 50,000 URLs.",
        "responses": {
          "200": {
            "description": "XML sitemap or sitemap index.",
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/sitemap/pages.xml": {
      "get": {
        "operationId": "getStaticSitemap",
        "tags": [
          "Archive"
        ],
        "summary": "Get static-page sitemap",
        "responses": {
          "200": {
            "description": "XML sitemap or sitemap index.",
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "/sitemap/projects/{start}": {
      "get": {
        "operationId": "getProjectSitemapShard",
        "tags": [
          "Archive"
        ],
        "summary": "Get project sitemap shard",
        "parameters": [
          {
            "name": "start",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "multipleOf": 5000
            },
            "description": "Nonnegative multiple of 5,000; this shard covers [start,start+5000)."
          }
        ],
        "responses": {
          "200": {
            "description": "XML sitemap or sitemap index.",
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid shard start."
          }
        }
      }
    },
    "/sitemap/tokens/{contract}/{start}": {
      "get": {
        "operationId": "getTokenSitemapShard",
        "tags": [
          "Archive"
        ],
        "summary": "Get token sitemap shard",
        "parameters": [
          {
            "name": "contract",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "start",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "multipleOf": 5000
            },
            "description": "Nonnegative multiple of 5,000; this shard covers [start,start+5000)."
          }
        ],
        "responses": {
          "200": {
            "description": "XML sitemap or sitemap index.",
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid contract or shard start."
          }
        }
      }
    },
    "/sitemap/profiles/{tail}": {
      "get": {
        "operationId": "getProfileSitemapShard",
        "tags": [
          "Archive"
        ],
        "summary": "Get profile sitemap shard",
        "parameters": [
          {
            "name": "tail",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^(?:tz[1-4]|KT1)[1-9A-HJ-NP-Za-km-z]$"
            },
            "description": "Four-character address prefix: tz1, tz2, tz3, tz4 or KT1 followed by one Base58 character."
          }
        ],
        "responses": {
          "200": {
            "description": "XML sitemap or sitemap index.",
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid profile shard key."
          }
        }
      }
    },
    "/sitemap/articles/{start}": {
      "get": {
        "operationId": "getArticleSitemapShard",
        "tags": [
          "Archive"
        ],
        "summary": "Get article sitemap shard",
        "parameters": [
          {
            "name": "start",
            "in": "path",
            "required": true,
            "schema": {
              "type": "integer",
              "minimum": 0,
              "multipleOf": 5000
            },
            "description": "Nonnegative multiple of 5,000; this shard covers [start,start+5000)."
          }
        ],
        "responses": {
          "200": {
            "description": "XML sitemap or sitemap index.",
            "content": {
              "application/xml": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Invalid shard start."
          }
        }
      }
    },
    "/auth": {
      "get": {
        "operationId": "getSignInView",
        "summary": "Sign-in status and challenge discovery",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          }
        ],
        "responses": {
          "200": {
            "description": "Negotiated sign-in page. JSON data contains address, session (or null), challenge and verify paths.",
            "content": {
              "text/html": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "object"
                }
              }
            }
          },
          "503": {
            "description": "Sign-in unavailable"
          }
        }
      }
    },
    "/token/{contract}/{id}/full": {
      "get": {
        "operationId": "getFullArtwork",
        "tags": [
          "Archive"
        ],
        "summary": "Open full-window artwork with the indexed seed",
        "description": "HTML hosts the sandboxed content-origin player. The parent creates a fresh __seeded_instance on each play. JSON provides the seed and render URL; it does not bypass the player handshake.",
        "parameters": [
          {
            "$ref": "#/components/parameters/AcceptJson"
          },
          {
            "name": "contract",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[0-9]+$"
            }
          },
          {
            "name": "seed",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Must exactly match the indexed edition seed."
          }
        ],
        "responses": {
          "200": {
            "$ref": "#/components/responses/TokenPage"
          },
          "400": {
            "description": "Missing or mismatched seed"
          },
          "404": {
            "description": "Unknown or hidden edition"
          },
          "409": {
            "description": "Live artwork unavailable"
          },
          "503": {
            "description": "Archive or content origin unavailable"
          }
        }
      }
    }
  },
  "components": {
    "parameters": {
      "AcceptJson": {
        "name": "Accept",
        "in": "header",
        "schema": {
          "type": "string",
          "default": "text/html"
        },
        "description": "Request application/json with a positive quality and preference over HTML. HTML is the default; */* alone does not select JSON. Responses vary on Accept."
      },
      "Page": {
        "name": "page",
        "in": "query",
        "schema": {
          "type": "integer",
          "minimum": 1,
          "maximum": 1
        },
        "description": "Only page=1 is supported; use returned opaque cursor links for subsequent pages."
      },
      "After": {
        "name": "after",
        "in": "query",
        "schema": {
          "type": "string"
        },
        "description": "Opaque continuation cursor. Reuse only the matching next link; malformed cursors return 400."
      },
      "ProjectId": {
        "name": "id",
        "in": "path",
        "required": true,
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "Origin": {
        "name": "Origin",
        "in": "header",
        "required": true,
        "schema": {
          "type": "string",
          "format": "uri"
        },
        "description": "Must exactly match the configured application origin."
      },
      "Csrf": {
        "name": "X-CSRF-Token",
        "in": "header",
        "required": true,
        "schema": {
          "type": "string"
        },
        "description": "Use the CSRF value returned by the current challenge or session."
      }
    },
    "headers": {
      "RetryAfter": {
        "description": "Seconds to wait before retrying, when supplied.",
        "schema": {
          "type": "integer",
          "minimum": 0
        }
      },
      "SetCookie": {
        "description": "HttpOnly SameSite cookie; retain it in a cookie jar. Production and local cookie names differ.",
        "schema": {
          "type": "string"
        }
      },
      "VaryAccept": {
        "description": "Representation selection depends on the Accept request header.",
        "schema": {
          "type": "string",
          "const": "Accept"
        }
      }
    },
    "securitySchemes": {
      "sessionCookie": {
        "type": "apiKey",
        "in": "cookie",
        "name": "__Host-seeded_session",
        "description": "HTTPS production cookie. Loopback HTTP development uses `seeded_session`. Use with exact Origin and X-CSRF-Token on writes."
      }
    },
    "schemas": {
      "Envelope": {
        "type": "object",
        "required": [
          "version",
          "kind",
          "url",
          "canonical",
          "data",
          "links"
        ],
        "properties": {
          "version": {
            "const": "1"
          },
          "kind": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "canonical": {
            "type": "string",
            "format": "uri"
          },
          "data": {
            "type": "object",
            "additionalProperties": true
          },
          "links": {
            "type": "object",
            "required": [
              "self",
              "openapi",
              "llms"
            ],
            "properties": {
              "self": {
                "type": "string",
                "format": "uri"
              },
              "openapi": {
                "const": "/openapi.json"
              },
              "llms": {
                "const": "/llms.txt"
              }
            },
            "additionalProperties": false
          }
        }
      },
      "Pagination": {
        "type": "object",
        "required": [
          "page",
          "first",
          "next"
        ],
        "properties": {
          "page": {
            "const": 1
          },
          "first": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri-reference"
          },
          "next": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri-reference"
          }
        },
        "additionalProperties": false
      },
      "PageData": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "properties": {
              "data": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array",
                    "items": {
                      "type": "object",
                      "additionalProperties": true
                    }
                  },
                  "pagination": {
                    "$ref": "#/components/schemas/Pagination"
                  }
                },
                "additionalProperties": true
              }
            }
          }
        ]
      },
      "ProjectSummary": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 0
          },
          "published": {
            "type": [
              "string",
              "null"
            ],
            "description": "When the project was published on fxhash (UTC, ISO 8601)."
          }
        },
        "additionalProperties": true
      },
      "TokenIdentity": {
        "type": "object",
        "required": [
          "contract",
          "token_id"
        ],
        "properties": {
          "contract": {
            "type": "string"
          },
          "token_id": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": true
      },
      "ProfileIdentity": {
        "type": "object",
        "required": [
          "address"
        ],
        "properties": {
          "address": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "ArticleSummary": {
        "type": "object",
        "required": [
          "token_id"
        ],
        "properties": {
          "token_id": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": true
      },
      "ArticleListItem": {
        "type": "object",
        "required": [
          "summary",
          "author_name"
        ],
        "properties": {
          "summary": {
            "$ref": "#/components/schemas/ArticleSummary"
          },
          "author_name": {
            "type": "string"
          },
          "amount": {
            "type": "integer",
            "minimum": 0
          },
          "listed": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false
      },
      "Session": {
        "type": "object",
        "required": [
          "address",
          "csrf",
          "expires_at"
        ],
        "properties": {
          "address": {
            "type": "string"
          },
          "csrf": {
            "type": "string"
          },
          "expires_at": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false
      },
      "ChallengeRequest": {
        "type": "object",
        "required": [
          "address",
          "public_key"
        ],
        "properties": {
          "address": {
            "type": "string"
          },
          "public_key": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "Challenge": {
        "type": "object",
        "required": [
          "message",
          "payload",
          "csrf",
          "expires_at"
        ],
        "properties": {
          "message": {
            "type": "string"
          },
          "payload": {
            "type": "string"
          },
          "csrf": {
            "type": "string"
          },
          "expires_at": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false
      },
      "VerifyRequest": {
        "type": "object",
        "required": [
          "signature"
        ],
        "properties": {
          "signature": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "ProfileEditRequest": {
        "type": "object",
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Requested display name; generated names are reserved and cannot be claimed."
          },
          "bio": {
            "type": [
              "string",
              "null"
            ]
          },
          "links": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      },
      "MarketToken": {
        "type": "object",
        "required": [
          "contract",
          "token_id"
        ],
        "properties": {
          "contract": {
            "type": "string"
          },
          "token_id": {
            "type": "integer",
            "minimum": 0,
            "maximum": 9007199254740991
          }
        },
        "additionalProperties": false
      },
      "MarketAction": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "action",
              "marketplace",
              "kind",
              "id"
            ],
            "properties": {
              "action": {
                "const": "cancel"
              },
              "marketplace": {
                "type": "string"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "listing",
                  "token",
                  "collection"
                ]
              },
              "id": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "action",
              "kind",
              "id",
              "token"
            ],
            "properties": {
              "action": {
                "const": "accept"
              },
              "kind": {
                "type": "string",
                "enum": [
                  "token",
                  "collection"
                ]
              },
              "id": {
                "type": "integer",
                "minimum": 0,
                "maximum": 9007199254740991
              },
              "token": {
                "$ref": "#/components/schemas/MarketToken"
              }
            },
            "additionalProperties": false
          }
        ]
      },
      "TicketRequest": {
        "type": "object",
        "required": [
          "ticket"
        ],
        "properties": {
          "ticket": {
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "PreparedReview": {
        "type": "object",
        "required": [
          "review",
          "names"
        ],
        "properties": {
          "review": {
            "type": "object",
            "required": [
              "ticket",
              "expires_seconds",
              "head",
              "items",
              "simulation"
            ],
            "properties": {
              "ticket": {
                "type": "string"
              },
              "expires_seconds": {
                "type": "integer"
              },
              "head": {
                "type": "object",
                "additionalProperties": true
              },
              "items": {
                "type": "array",
                "items": {
                  "type": "object",
                  "additionalProperties": true
                }
              },
              "simulation": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "additionalProperties": true
          },
          "names": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "additionalProperties": false
      },
      "Ready": {
        "type": "object",
        "required": [
          "operations",
          "branch",
          "chain_id",
          "signing_lock_seconds",
          "receipt_seconds"
        ],
        "properties": {
          "operations": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "branch": {
            "type": "string"
          },
          "chain_id": {
            "type": "string"
          },
          "signing_lock_seconds": {
            "type": "integer"
          },
          "receipt_seconds": {
            "type": "integer"
          }
        },
        "additionalProperties": false
      },
      "ApiError": {
        "oneOf": [
          {
            "type": "object",
            "required": [
              "version",
              "error"
            ],
            "properties": {
              "version": {
                "const": "1"
              },
              "error": {
                "type": "object",
                "required": [
                  "status",
                  "code",
                  "message"
                ],
                "properties": {
                  "status": {
                    "type": "integer"
                  },
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                },
                "additionalProperties": true
              }
            },
            "additionalProperties": false
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "string"
              }
            },
            "additionalProperties": true
          },
          {
            "type": "object",
            "required": [
              "error",
              "code"
            ],
            "properties": {
              "error": {
                "type": "string"
              },
              "code": {
                "type": "string"
              },
              "retry_after_seconds": {
                "type": [
                  "integer",
                  "null"
                ]
              }
            },
            "additionalProperties": true
          }
        ]
      },
      "PageCollection": {
        "type": "object",
        "required": [
          "items",
          "total",
          "offset",
          "limit"
        ],
        "properties": {
          "items": {
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": true
            }
          },
          "total": {
            "type": "integer",
            "minimum": 0
          },
          "offset": {
            "type": "integer",
            "minimum": 0
          },
          "limit": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": false
      },
      "MarketPagination": {
        "type": "object",
        "required": [
          "first",
          "next"
        ],
        "properties": {
          "first": {
            "type": "string",
            "format": "uri-reference"
          },
          "next": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri-reference"
          }
        },
        "additionalProperties": false
      },
      "ArtistReference": {
        "type": "object",
        "required": [
          "id",
          "name",
          "address"
        ],
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "address": {
            "type": [
              "string",
              "null"
            ]
          }
        },
        "additionalProperties": true
      },
      "ProjectEntity": {
        "type": "object",
        "required": [
          "id",
          "title",
          "artists"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 0
          },
          "title": {
            "type": "string"
          },
          "artists": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ArtistReference"
            }
          }
        },
        "additionalProperties": true
      },
      "ProjectMetadata": {
        "type": "object",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": true
      },
      "TokenEntity": {
        "type": "object",
        "required": [
          "contract",
          "token_id",
          "project_id",
          "seed",
          "iteration"
        ],
        "properties": {
          "contract": {
            "type": "string"
          },
          "token_id": {
            "type": "integer",
            "minimum": 0
          },
          "project_id": {
            "type": "integer",
            "minimum": 0
          },
          "seed": {
            "type": "string"
          },
          "iteration": {
            "type": "integer",
            "minimum": 0
          }
        },
        "additionalProperties": true
      },
      "ProfileEntity": {
        "type": "object",
        "required": [
          "address",
          "name",
          "kind"
        ],
        "properties": {
          "address": {
            "type": "string"
          },
          "name": {
            "type": [
              "string",
              "null"
            ]
          },
          "kind": {
            "type": "string",
            "enum": [
              "account",
              "contract",
              "escrow",
              "burn"
            ]
          }
        },
        "additionalProperties": true
      },
      "ArticleBodyCore": {
        "type": "object",
        "properties": {
          "text": {
            "type": [
              "string",
              "null"
            ]
          },
          "state": {
            "type": "string"
          },
          "format": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "ArticleEntity": {
        "type": "object",
        "required": [
          "token_id",
          "author",
          "body"
        ],
        "properties": {
          "token_id": {
            "type": "integer",
            "minimum": 0
          },
          "author": {
            "type": "string"
          },
          "body": {
            "$ref": "#/components/schemas/ArticleBodyCore"
          }
        },
        "additionalProperties": true
      },
      "ArticleReference": {
        "type": "object",
        "required": [
          "kind",
          "form",
          "project_id",
          "contract",
          "token_id",
          "source_text"
        ],
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "project",
              "token"
            ]
          },
          "form": {
            "type": "string"
          },
          "project_id": {
            "type": "integer",
            "minimum": 0
          },
          "contract": {
            "type": [
              "string",
              "null"
            ]
          },
          "token_id": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "source_text": {
            "type": "string"
          }
        },
        "additionalProperties": true
      },
      "ArticleMediaUrl": {
        "type": "object",
        "required": [
          "slot",
          "url",
          "kind"
        ],
        "properties": {
          "slot": {
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "kind": {
            "type": "string"
          }
        },
        "additionalProperties": true
      }
    },
    "responses": {
      "ProjectsPage": {
        "description": "Project collection; page records are in data.projects.items and pagination in data.pagination.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/PageData"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "projects"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "projects": {
                          "$ref": "#/components/schemas/PageCollection"
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        }
                      },
                      "additionalProperties": true
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "ProjectPage": {
        "description": "Project and its current edition page.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Envelope"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "project"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "tokens": {
                          "$ref": "#/components/schemas/PageCollection"
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        },
                        "project": {
                          "$ref": "#/components/schemas/ProjectEntity"
                        },
                        "metadata": {
                          "$ref": "#/components/schemas/ProjectMetadata"
                        }
                      },
                      "additionalProperties": true,
                      "required": [
                        "project",
                        "metadata"
                      ]
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "TokenPage": {
        "description": "Token and related page data.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Envelope"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "token"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "token": {
                          "$ref": "#/components/schemas/TokenEntity"
                        },
                        "project": {
                          "$ref": "#/components/schemas/ProjectEntity"
                        }
                      },
                      "additionalProperties": true,
                      "required": [
                        "token",
                        "project"
                      ]
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "ArtistsPage": {
        "description": "Artist collection; page records are in data.artists.items and pagination in data.pagination.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/PageData"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "artists"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "artists": {
                          "$ref": "#/components/schemas/PageCollection"
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        }
                      },
                      "additionalProperties": true
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "ProfilePage": {
        "description": "Public profile and projects or collected tokens.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Envelope"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "profile"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "projects": {
                          "$ref": "#/components/schemas/PageCollection"
                        },
                        "tokens": {
                          "$ref": "#/components/schemas/PageCollection"
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        },
                        "profile": {
                          "$ref": "#/components/schemas/ProfileEntity"
                        }
                      },
                      "additionalProperties": true,
                      "required": [
                        "profile"
                      ]
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "CollectorsPage": {
        "description": "Collectors view.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Envelope"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "collectors"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "tokens": {
                          "$ref": "#/components/schemas/PageCollection"
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        }
                      },
                      "additionalProperties": true
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "SearchPage": {
        "description": "Independent data.projects, data.artists and data.collectors collections have their own data.projects_pagination, data.artists_pagination and data.collectors_pagination cursor links.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Envelope"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "search"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "projects": {
                          "$ref": "#/components/schemas/PageCollection"
                        },
                        "artists": {
                          "$ref": "#/components/schemas/PageCollection"
                        },
                        "collectors": {
                          "$ref": "#/components/schemas/PageCollection"
                        },
                        "projects_pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        },
                        "artists_pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        },
                        "collectors_pagination": {
                          "$ref": "#/components/schemas/Pagination"
                        }
                      },
                      "additionalProperties": true
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "ArticlesPage": {
        "description": "Article collection; data.items uses token_id identities and data.pagination contains first/next links. Embedded profile/project article panels paginate independently.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Envelope"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "articles"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ArticleListItem"
                          }
                        },
                        "pagination": {
                          "type": "object",
                          "required": [
                            "first",
                            "next"
                          ],
                          "properties": {
                            "first": {
                              "type": "string",
                              "format": "uri-reference"
                            },
                            "next": {
                              "type": [
                                "string",
                                "null"
                              ],
                              "format": "uri-reference"
                            }
                          },
                          "additionalProperties": true
                        }
                      },
                      "additionalProperties": true
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "ArticlePage": {
        "description": "Article identified by token_id.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Envelope"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "article"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "article": {
                          "$ref": "#/components/schemas/ArticleEntity"
                        },
                        "body_untrusted": {
                          "const": true
                        },
                        "author_name": {
                          "type": "string"
                        },
                        "references": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ArticleReference"
                          }
                        },
                        "media_urls": {
                          "type": "array",
                          "items": {
                            "$ref": "#/components/schemas/ArticleMediaUrl"
                          }
                        }
                      },
                      "additionalProperties": true,
                      "required": [
                        "article",
                        "body_untrusted",
                        "author_name",
                        "references",
                        "media_urls"
                      ]
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "AboutPage": {
        "description": "Archive information and index status.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Envelope"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "about"
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "ProfileEditPage": {
        "description": "Private edit fields for the signed-in address; no other profile can be edited.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Envelope"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "profile_edit"
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "MarketPage": {
        "description": "Private market view for the signed-in address only.",
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Envelope"
                },
                {
                  "properties": {
                    "kind": {
                      "const": "market"
                    },
                    "data": {
                      "type": "object",
                      "properties": {
                        "items": {
                          "type": "array",
                          "items": {
                            "type": "object",
                            "additionalProperties": true,
                            "properties": {
                              "token_id": {
                                "type": [
                                  "integer",
                                  "null"
                                ],
                                "minimum": 0
                              },
                              "amount_mutez": {
                                "type": [
                                  "string",
                                  "null"
                                ],
                                "pattern": "^[0-9]+$",
                                "description": "Price per token in mutez, decimal string preserving integer precision."
                              }
                            }
                          }
                        },
                        "pagination": {
                          "$ref": "#/components/schemas/MarketPagination"
                        },
                        "accepts_enabled": {
                          "type": "boolean"
                        },
                        "platform_fee_bps": {
                          "type": "integer",
                          "minimum": 0,
                          "maximum": 1000
                        }
                      },
                      "additionalProperties": true
                    }
                  }
                }
              ]
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "BadRequest": {
        "description": "Invalid query, cursor or body.",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          },
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "NotFound": {
        "description": "Item is absent or hidden from the local archive.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "AuthError": {
        "description": "Authentication, signature, origin or CSRF failure.",
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "error": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          }
        },
        "headers": {
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        }
      },
      "RateLimited": {
        "description": "Rate limited; wait as directed by Retry-After.",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          },
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "Conflict": {
        "description": "Review expired, stale, busy or awaiting confirmation.",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          },
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      },
      "Unavailable": {
        "description": "Temporary archive or upstream unavailability; retry when permitted by Retry-After.",
        "headers": {
          "Retry-After": {
            "$ref": "#/components/headers/RetryAfter"
          },
          "Vary": {
            "$ref": "#/components/headers/VaryAccept"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiError"
            }
          }
        }
      }
    }
  }
}
