{"openapi":"3.0.3","info":{"title":"Tokenizer API","description":"Control-plane API for deploying and managing ERC-20/ERC-721 tokens via the Moonwell Factory.","version":"1.0.0"},"tags":[{"name":"Auth","description":"Signup and signin"},{"name":"API Keys","description":"Programmatic access keys"},{"name":"Profile","description":"User profile"},{"name":"Stats","description":"Mint quota usage"},{"name":"Tokens","description":"Deploy, list, and manage tokens including pause, transfer lock, freeze, and on-chain metadata with external/IPFS URIs"},{"name":"Token URI","description":"Public metadata resolver (ERC-8048 → JSON)"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT or API key (mw_...)"}},"schemas":{"TokenListItem":{"type":"object","required":["address","type","name","symbol","createdAt"],"properties":{"address":{"type":"string"},"type":{"type":"string","enum":["ERC20","ERC721"]},"name":{"type":"string"},"symbol":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}},"$id":"#/components/schemas/TokenListItem"},"TokenCreatedResponse":{"type":"object","required":["success","data"],"properties":{"success":{"const":true,"type":"boolean"},"data":{"type":"object","required":["address","type","name","symbol","createdAt","transaction"],"properties":{"address":{"type":"string"},"type":{"type":"string","enum":["ERC20","ERC721"]},"name":{"type":"string"},"symbol":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"transaction":{"type":"object","required":["hash","explorerUrl"],"properties":{"hash":{"type":"string"},"explorerUrl":{"type":"string"}}}}}},"$id":"#/components/schemas/TokenCreatedResponse"},"MintSuccessResponse":{"type":"object","required":["success","data"],"properties":{"success":{"const":true,"type":"boolean"},"data":{"type":"object","required":["transaction"],"properties":{"transaction":{"type":"object","required":["hash","explorerUrl"],"properties":{"hash":{"type":"string"},"explorerUrl":{"type":"string"}}}}}},"$id":"#/components/schemas/MintSuccessResponse"},"TokenDetailsResponse":{"type":"object","required":["address","type","name","symbol","paused","transferLocked","permissionless","owner","creator"],"properties":{"address":{"type":"string"},"type":{"type":"string","enum":["ERC20","ERC721"]},"name":{"type":"string"},"symbol":{"type":"string"},"paused":{"type":"boolean"},"transferLocked":{"type":"boolean"},"permissionless":{"type":"boolean"},"owner":{"type":"string"},"creator":{"type":"string"}},"$id":"#/components/schemas/TokenDetailsResponse"},"ActionResponse":{"type":"object","required":["success"],"properties":{"success":{"const":true,"type":"boolean"}},"$id":"#/components/schemas/ActionResponse"}}},"paths":{"/auth/signup":{"post":{"tags":["Auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"format":"email","type":"string"},"password":{"minLength":8,"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"format":"email","type":"string"},"password":{"minLength":8,"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"format":"email","type":"string"},"password":{"minLength":8,"type":"string"}}}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["token","user"],"properties":{"token":{"type":"string"},"user":{"type":"object","required":["id","email","plan"],"properties":{"id":{"type":"string"},"email":{"type":"string"},"plan":{"type":"string","enum":["BASIC","PRO","PRO_PLUS"]}}}}}}}},"409":{"description":"Response for status 409","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"postAuthSignup"}},"/auth/signin":{"post":{"tags":["Auth"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"format":"email","type":"string"},"password":{"minLength":8,"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"format":"email","type":"string"},"password":{"minLength":8,"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"format":"email","type":"string"},"password":{"minLength":8,"type":"string"}}}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["token","user"],"properties":{"token":{"type":"string"},"user":{"type":"object","required":["id","email","plan"],"properties":{"id":{"type":"string"},"email":{"type":"string"},"plan":{"type":"string","enum":["BASIC","PRO","PRO_PLUS"]}}}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"postAuthSignin"}},"/api-keys/":{"post":{"tags":["API Keys"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"name":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","properties":{"name":{"type":"string"}}}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["id","name","keyPrefix","key","createdAt"],"properties":{"id":{"type":"string"},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"keyPrefix":{"type":"string"},"key":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"postApi-keys"},"get":{"tags":["API Keys"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["id","name","keyPrefix","revokedAt","createdAt"],"properties":{"id":{"type":"string"},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"keyPrefix":{"type":"string"},"revokedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"getApi-keys"}},"/api-keys/{id}":{"delete":{"tags":["API Keys"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["id","name","keyPrefix","revokedAt","createdAt"],"properties":{"id":{"type":"string"},"name":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]},"keyPrefix":{"type":"string"},"revokedAt":{"nullable":true,"anyOf":[{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},{"type":"null"}]},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"Response for status 409","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"deleteApi-keysById"}},"/me/":{"get":{"tags":["Profile"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["id","email","plan","walletAddress"],"properties":{"id":{"type":"string"},"email":{"type":"string"},"plan":{"type":"string","enum":["BASIC","PRO","PRO_PLUS"]},"walletAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"getMe"},"patch":{"tags":["Profile"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["walletAddress"],"properties":{"walletAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["walletAddress"],"properties":{"walletAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}},"multipart/form-data":{"schema":{"type":"object","required":["walletAddress"],"properties":{"walletAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["id","email","plan","walletAddress"],"properties":{"id":{"type":"string"},"email":{"type":"string"},"plan":{"type":"string","enum":["BASIC","PRO","PRO_PLUS"]},"walletAddress":{"nullable":true,"anyOf":[{"type":"string"},{"type":"null"}]}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Response for status 422","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"patchMe"}},"/stats/":{"get":{"tags":["Stats"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["plan","mintsUsed","mintsRemaining","periodStart","periodEnd"],"properties":{"plan":{"type":"string","enum":["BASIC","PRO","PRO_PLUS"]},"mintsUsed":{"type":"number"},"mintsRemaining":{"type":"number"},"periodStart":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]},"periodEnd":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"getStats"}},"/tokens/":{"get":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","required":["address","type","name","symbol","createdAt"],"properties":{"address":{"type":"string"},"type":{"type":"string","enum":["ERC20","ERC721"]},"name":{"type":"string"},"symbol":{"type":"string"},"createdAt":{"anyOf":[{"type":"Date"},{"format":"date-time","type":"string"},{"format":"date","type":"string"},{"type":"number"}]}},"$id":"#/components/schemas/TokenListItem"}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"getTokens"},"post":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","required":["type","name","symbol","isPermissionless","decimals"],"properties":{"type":{"const":"ERC20","type":"string"},"name":{"maxLength":25,"type":"string"},"symbol":{"maxLength":5,"type":"string"},"isPermissionless":{"type":"boolean"},"decimals":{"minimum":0,"maximum":18,"type":"number"}}},{"type":"object","required":["type","name","symbol","isPermissionless"],"properties":{"type":{"const":"ERC721","type":"string"},"name":{"maxLength":25,"type":"string"},"symbol":{"maxLength":5,"type":"string"},"isPermissionless":{"type":"boolean"}}}]}},"application/x-www-form-urlencoded":{"schema":{"anyOf":[{"type":"object","required":["type","name","symbol","isPermissionless","decimals"],"properties":{"type":{"const":"ERC20","type":"string"},"name":{"maxLength":25,"type":"string"},"symbol":{"maxLength":5,"type":"string"},"isPermissionless":{"type":"boolean"},"decimals":{"minimum":0,"maximum":18,"type":"number"}}},{"type":"object","required":["type","name","symbol","isPermissionless"],"properties":{"type":{"const":"ERC721","type":"string"},"name":{"maxLength":25,"type":"string"},"symbol":{"maxLength":5,"type":"string"},"isPermissionless":{"type":"boolean"}}}]}},"multipart/form-data":{"schema":{"anyOf":[{"type":"object","required":["type","name","symbol","isPermissionless","decimals"],"properties":{"type":{"const":"ERC20","type":"string"},"name":{"maxLength":25,"type":"string"},"symbol":{"maxLength":5,"type":"string"},"isPermissionless":{"type":"boolean"},"decimals":{"minimum":0,"maximum":18,"type":"number"}}},{"type":"object","required":["type","name","symbol","isPermissionless"],"properties":{"type":{"const":"ERC721","type":"string"},"name":{"maxLength":25,"type":"string"},"symbol":{"maxLength":5,"type":"string"},"isPermissionless":{"type":"boolean"}}}]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenCreatedResponse"}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"Response for status 403","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Response for status 422","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"Response for status 503","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"postTokens"}},"/tokens/{address}":{"get":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenDetailsResponse"}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"Response for status 403","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Response for status 422","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"getTokensByAddress"}},"/tokens/{address}/mint":{"post":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","required":["owner","amount"],"properties":{"owner":{"type":"string"},"amount":{"type":"string"}}},{"type":"object","required":["owner"],"properties":{"owner":{"type":"string"}}}]}},"application/x-www-form-urlencoded":{"schema":{"anyOf":[{"type":"object","required":["owner","amount"],"properties":{"owner":{"type":"string"},"amount":{"type":"string"}}},{"type":"object","required":["owner"],"properties":{"owner":{"type":"string"}}}]}},"multipart/form-data":{"schema":{"anyOf":[{"type":"object","required":["owner","amount"],"properties":{"owner":{"type":"string"},"amount":{"type":"string"}}},{"type":"object","required":["owner"],"properties":{"owner":{"type":"string"}}}]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MintSuccessResponse"}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"Response for status 403","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"Response for status 409","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Response for status 422","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"Response for status 503","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"postTokensByAddressMint"}},"/tokens/{address}/pause":{"post":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"postTokensByAddressPause"}},"/tokens/{address}/unpause":{"post":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"postTokensByAddressUnpause"}},"/tokens/{address}/lock-transfers":{"post":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"postTokensByAddressLock-transfers"}},"/tokens/{address}/unlock-transfers":{"post":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"operationId":"postTokensByAddressUnlock-transfers"}},"/tokens/{address}/freeze":{"post":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["success"],"properties":{"success":{"const":true,"type":"boolean"}},"$id":"#/components/schemas/ActionResponse"}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"Response for status 403","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"Response for status 409","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Response for status 422","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"Response for status 503","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"postTokensByAddressFreeze"}},"/tokens/{address}/unfreeze":{"post":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["success"],"properties":{"success":{"const":true,"type":"boolean"}},"$id":"#/components/schemas/ActionResponse"}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"Response for status 403","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"Response for status 409","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Response for status 422","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"Response for status 503","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"postTokensByAddressUnfreeze"}},"/tokens/{address}/approve-account":{"post":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["success"],"properties":{"success":{"const":true,"type":"boolean"}},"$id":"#/components/schemas/ActionResponse"}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"Response for status 403","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"Response for status 409","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Response for status 422","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"Response for status 503","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"postTokensByAddressApprove-account"}},"/tokens/{address}/unapprove-account":{"post":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}},"multipart/form-data":{"schema":{"type":"object","required":["account"],"properties":{"account":{"type":"string"}}}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["success"],"properties":{"success":{"const":true,"type":"boolean"}},"$id":"#/components/schemas/ActionResponse"}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"Response for status 403","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"Response for status 409","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Response for status 422","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"Response for status 503","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"postTokensByAddressUnapprove-account"}},"/tokens/{address}/metadata/keys":{"get":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"summary":"List on-chain metadata keys","description":"Returns the metadata key names currently configured on the token contract.","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"}}}}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"Response for status 403","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"getTokensByAddressMetadataKeys"}},"/tokens/{address}/metadata":{"put":{"tags":["Tokens"],"security":[{"bearerAuth":[]}],"summary":"Set token metadata on-chain","description":"Upload assets to IPFS (or any host) from the frontend, then send structured metadata here. The API maps name, description, image, and attributes to on-chain keys and values automatically.","parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"anyOf":[{"type":"object","required":["name","description"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"attributes":{"maxProperties":13,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}},{"type":"object","required":["tokenId","name","description"],"properties":{"tokenId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"attributes":{"maxProperties":13,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}]}},"application/x-www-form-urlencoded":{"schema":{"anyOf":[{"type":"object","required":["name","description"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"attributes":{"maxProperties":13,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}},{"type":"object","required":["tokenId","name","description"],"properties":{"tokenId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"attributes":{"maxProperties":13,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}]}},"multipart/form-data":{"schema":{"anyOf":[{"type":"object","required":["name","description"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"attributes":{"maxProperties":13,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}},{"type":"object","required":["tokenId","name","description"],"properties":{"tokenId":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"image":{"type":"string"},"attributes":{"maxProperties":13,"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}]}}}},"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["success"],"properties":{"success":{"const":true,"type":"boolean"}},"$id":"#/components/schemas/ActionResponse"}}}},"401":{"description":"Response for status 401","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"403":{"description":"Response for status 403","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"409":{"description":"Response for status 409","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"422":{"description":"Response for status 422","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"500":{"description":"Response for status 500","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"503":{"description":"Response for status 503","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"putTokensByAddressMetadata"}},"/tokenURI/{address}/{tokenId}":{"get":{"tags":["Token URI"],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}},{"name":"tokenId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["name","description","image","attributes"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"image":{"description":"Resolved from on-chain metadata; typically an IPFS or HTTP URI","type":"string"},"attributes":{"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"getTokenURIByAddressByTokenId"}},"/tokenURI/{address}":{"get":{"tags":["Token URI"],"parameters":[{"name":"address","in":"path","required":true,"schema":{"type":"string"}},{"name":"tokenId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Response for status 200","content":{"application/json":{"schema":{"type":"object","required":["name","description","image","attributes"],"properties":{"name":{"type":"string"},"description":{"type":"string"},"image":{"description":"Resolved from on-chain metadata; typically an IPFS or HTTP URI","type":"string"},"attributes":{"type":"object","patternProperties":{"^(.*)$":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}}}}}}},"404":{"description":"Response for status 404","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}},"502":{"description":"Response for status 502","content":{"application/json":{"schema":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}}}},"operationId":"getTokenURIByAddress"}}}}