{"openapi":"3.0.0","paths":{"/ens/v1/mapp/permission/add":{"post":{"operationId":"MAppWriteController_addPermission","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MAppAddPermissionApiRequest"}}}},"responses":{"201":{"description":""}},"tags":["mApp","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/mapp/field/append":{"post":{"operationId":"MAppWriteController_appendField","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MAppAppendFieldApiRequest"}}}},"responses":{"201":{"description":""}},"tags":["mApp","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/mapp/permission/revoke":{"post":{"operationId":"MAppWriteController_revokePermission","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MAppRevokePermissionApiRequest"}}}},"responses":{"201":{"description":""}},"tags":["mApp","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/siwe/request-challenge":{"post":{"operationId":"SiweChallengeController_requestChallenge","summary":"Request a challenge","description":"Request a challenge.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweRequestChallengeApiRequest"}}}},"responses":{"201":{"description":"The challenge was requested successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweRequestChallengeApiResponseSuccessSwagger"}}}}},"tags":["Siwe","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/siwe/mapp/add-permission":{"post":{"operationId":"SiweChallengeController_requestAddMAppChallenge","summary":"Request a challenge to add mApp permission","description":"Request a challenge to add mApp permission.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweRequestAddMAppPermissionChallengeApiRequest"}}}},"responses":{"201":{"description":"The challenge was requested successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweRequestAddMAppPermissionChallengeApiResponseSuccessSwagger"}}}}},"tags":["Siwe","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/siwe/mapp/append-field":{"post":{"operationId":"SiweChallengeController_requestAppendMAppFieldChallenge","summary":"Request a challenge to append mApp field","description":"Request a challenge to append mApp field.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweRequestAppendMAppFieldChallengeApiRequest"}}}},"responses":{"201":{"description":"The challenge was requested successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweRequestAppendMAppFieldChallengeApiResponseSuccessSwagger"}}}}},"tags":["Siwe","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/siwe/mapp/revoke-permission":{"post":{"operationId":"SiweChallengeController_requestRevokeMAppChallenge","summary":"Request a challenge to revoke mApp permission","description":"Request a challenge to revoke mApp permission.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweRequestRevokeMAppPermissionChallengeApiRequest"}}}},"responses":{"201":{"description":"The challenge was requested successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweRequestRevokeMAppPermissionChallengeApiResponseSuccessSwagger"}}}}},"tags":["Siwe","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/siwe/verify-message":{"post":{"operationId":"SiweVerifyController_verify","summary":"Verify a message","description":"Verify a message.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweVerifyMessageApiRequest"}}}},"responses":{"201":{"description":"The message was verified successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweVerifyMessageApiResponseSuccessSwagger"}}}}},"tags":["Siwe","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/siwe/challenges":{"post":{"operationId":"SiweV2WriteController_challenge","summary":"Request a challenge","description":"Request a challenge to sign","parameters":[],"requestBody":{"required":true,"description":"The domain, address, origin and chainId of the challenge","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweChallengeApiBodyRequest"}}}},"responses":{"default":{"description":"The requested challenge","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweChallengeApiResponseSuccessSwagger"}}}}},"tags":["Siwe V2","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/siwe/verify":{"post":{"operationId":"SiweV2WriteController_verify","summary":"Verify a message","description":"Verify a message.","parameters":[],"requestBody":{"required":true,"description":"The signature, message and address of the message to verify","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweVerifyApiBodyRequest"}}}},"responses":{"default":{"description":"The message was verified successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SiweVerifyApiResponseSuccessSwagger"}}}}},"tags":["Siwe V2","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/add":{"post":{"operationId":"EnsWriteController_add","summary":"Add Ens","description":"Add Ens.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsAddApiRequest"}}}},"responses":{"default":{"description":"Ens was added successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsAddApiResponseSuccessSwagger"}}}}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/update-user-chosen-limit":{"post":{"operationId":"EnsWriteController_updateUserChosenLimit","summary":"Update Ens' user chosen limit","description":"Update Ens' user chosen limit","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserChosenLimitApiRequest"}}}},"responses":{"default":{"description":"User chosen limit updated successfullyy."}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/remove-user-chosen-limit":{"post":{"operationId":"EnsWriteController_removeUserChosenLimit","summary":"Remove Ens' user chosen limit","description":"Remove Ens' user chosen limit","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveUserChosenLimitApiRequest"}}}},"responses":{"default":{"description":"User chosen limit removed successfully."}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/delete":{"post":{"operationId":"EnsWriteController_delete","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsDeleteApiRequest"}}}},"responses":{"201":{"description":""}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/update-ens-is-blocked":{"post":{"operationId":"EnsWriteController_updateEnsIsBlocked","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateIsBlockedApiRequest"}}}},"responses":{"201":{"description":""}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/upload-to-cdn":{"post":{"operationId":"EnsWriteController_uploadFile","parameters":[{"name":"ensId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/update-workspace-id":{"post":{"operationId":"EnsWriteController_updateWorkspaceId","summary":"Update ENS workspace id","description":"Update ENS workspace id.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferEnsToNewWorkspaceApiRequest"}}}},"responses":{"default":{"description":"ENS workspace id updated successfully."}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens":{"get":{"operationId":"EnsReadController_findAll","parameters":[],"responses":{"200":{"description":""}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/id/{id}":{"get":{"operationId":"EnsReadController_findById","summary":"Get By Id","description":"Get By Id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"Ens were fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsApiResponseSuccessSwagger"}}}}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/workspace/{workspaceId}":{"get":{"operationId":"EnsReadController_findByWorkspaceId","summary":"Get Ens By Workspace Id","description":"Get Ens By Workspace Id","parameters":[{"name":"workspaceId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"Ens was fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsApiResponseSuccessSwagger"}}}}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/admin/workspace/{workspaceId}":{"get":{"operationId":"EnsReadController_findByWorkspaceIdAsAdmin","summary":"Get Ens By Workspace Id As Admin","description":"Get Ens By Workspace Id As Admin","parameters":[{"name":"workspaceId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"Ens was fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsApiResponseSuccessSwagger"}}}}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/check/resolver/{ensDomain}/{offchainResolverId}":{"get":{"operationId":"EnsReadController_checkEnsExistsByEnsDomainAndOffchainResolverId","summary":"Get Ens By Offchain Resolver","description":"Get Ens By Offchain Resolver","parameters":[{"name":"ensDomain","required":true,"in":"path","schema":{"type":"string"}},{"name":"offchainResolverId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"Ens was fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsApiResponseSuccessSwagger"}}}}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/expiry":{"post":{"operationId":"EnsReadController_getExpiry","summary":"Get expiry for ENS names","description":"Returns the expiry of each name, read from ENSv2 or ENSv1 on the given chain. A name registered in neither version has no expiry and is left out of the result, so the response can hold fewer entries than the request. Compare by name rather than by position.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsGetExpiryApiRequest"}}}},"responses":{"default":{"description":"Expiry of every registered name. Unregistered names are omitted, not returned as null.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsGetExpiryApiResponseSuccessSwagger"}}}}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/subscription/{ensId}":{"get":{"operationId":"EnsReadController_checkSubscription","summary":"Get Subscription By Ens Id","description":"Get Subscription By Ens Id","parameters":[{"name":"ensId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"Ens subscription was fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsGetSubscriptionApiResponseSuccessSwagger"}}}}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/workspaceId":{"get":{"operationId":"EnsReadController_getWorkspaceIdByEnsId","summary":"Get Workspace Id By Ens Id","description":"Get Workspace Id By Ens Id","parameters":[{"name":"ensId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"default":{"description":"Workspace Id was fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsApiResponseSuccessSwagger"}}}}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/ens/api-key":{"get":{"operationId":"EnsReadController_getByApiKey","summary":"Get all Ens by Api Key","description":"Get all Ens by Api Key","parameters":[],"responses":{"default":{"description":"Ens was fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsApiResponseSuccessSwagger"}}}}},"tags":["Ens"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/offchain-resolvers":{"get":{"operationId":"OffchainResolverReadController_findAll","summary":"Get All Offchain Resolver","description":"Get All Offchain Resolver","parameters":[],"responses":{"default":{"description":"Offchain Resolvers were fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainResolverGetAllApiResponseResultSwagger"}}}}},"tags":["OffchainResolvers","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/offchain-resolvers/{id}":{"get":{"operationId":"OffchainResolverReadController_findById","summary":"Get Offchain Resolver By Id","description":"Get Offchain Resolver By Id","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"default":{"description":"Offchain Resolver was fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainResolverGetByIdApiResponseResultSwagger"}}}}},"tags":["OffchainResolvers","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/offchain-resolvers/criteria":{"get":{"operationId":"OffchainResolverReadController_findAllByCriteria","summary":"Get All Offchain Resolvers By Criteria","description":"Get All Offchain Resolvers By Criteria","parameters":[{"name":"page","required":false,"in":"query","description":"The requested page number","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return per page","schema":{"maximum":100,"default":20,"example":20,"type":"number"}},{"name":"orderBy","required":false,"in":"query","description":"The order by field","schema":{"example":"createdAt","enum":["createdAt","subnameCount"],"type":"string"}},{"name":"orderDirection","required":false,"in":"query","description":"The order direction","schema":{"example":"desc","enum":["asc","desc"],"type":"string"}},{"name":"id","required":false,"in":"query","description":"The id to filter by","schema":{"example":"1111-1111-1111-1111","type":"string"}},{"name":"resolverAddress","required":false,"in":"query","description":"The resolver address to filter by","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}},{"name":"ensRegistryAddress","required":false,"in":"query","description":"The ens registry address to filter by","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}},{"name":"chainId","required":false,"in":"query","description":"The chain id to filter by","schema":{"example":1,"type":"number"}},{"description":"The requested page number","required":false,"name":"page","in":"query","schema":{"default":1,"example":1,"type":"number"}},{"description":"The number of items to return per page","required":false,"name":"limit","in":"query","schema":{"maximum":100,"default":20,"example":20,"type":"number"}},{"description":"The order by field","required":false,"name":"orderBy","in":"query","schema":{"example":"createdAt","enum":["createdAt","subnameCount"],"type":"string"}},{"description":"The order direction","required":false,"name":"orderDirection","in":"query","schema":{"example":"desc","enum":["asc","desc"],"type":"string"}},{"description":"The id to filter by","required":false,"name":"id","in":"query","schema":{"example":"1111-1111-1111-1111","type":"string"}},{"description":"The resolver address to filter by","required":false,"name":"resolverAddress","in":"query","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}},{"description":"The ens registry address to filter by","required":false,"name":"ensRegistryAddress","in":"query","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}},{"description":"The chain id to filter by","required":false,"name":"chainId","in":"query","schema":{"example":1,"type":"number"}},{"description":"The environment to filter by","required":false,"name":"environment","in":"query","schema":{"example":"MAINNET","type":"object"}}],"responses":{"default":{"description":"Offchain Resolvers were fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainResolverGetAllByCriteriaApiResponse"}}}}},"tags":["OffchainResolvers","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/offchain-resolvers/update":{"post":{"operationId":"OffchainResolverWriteController_update","summary":"Update Offchain Resolver","description":"Update Offchain Resolver","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainResolverUpdateApiRequest"}}}},"responses":{"default":{"description":"Offchain Resolver was updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OffchainResolverUpdateApiResponseSuccessSwagger"}}}}},"tags":["OffchainResolvers"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/accept":{"post":{"operationId":"SubdomainWriteController_accept","summary":"Accept Subname","description":"Accept a reserved Subname.","parameters":[{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameAcceptApiRequest"}}}},"responses":{"default":{"description":"The Subname was claimed successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameAcceptApiResponseSuccessSwagger"}}}}},"tags":["Public","Subname"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/admin-reserve":{"post":{"operationId":"SubdomainWriteController_reserve","summary":"Admin Reserve Subname","description":"Admin Reserve Subname.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameReserveApiRequest"}}}},"responses":{"default":{"description":"The Subname was reserved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameReserveApiResponseSuccessSwagger"}}}}},"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/reserve":{"post":{"operationId":"SubdomainWriteController_apiReserve","summary":"Reserve Subname","description":"Reserve Subname to be claimed later.","parameters":[{"name":"x-api-key","in":"header","description":"The Api Key.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameReserveApiRequest"}}}},"responses":{"default":{"description":"The Subname was reserved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameReserveApiResponseSuccessSwagger"}}}}},"tags":["Public","Subname"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/add":{"post":{"operationId":"SubdomainWriteController_add","summary":"Add Subname","description":"Add a new subname","parameters":[{"name":"x-api-key","in":"header","description":"The Api Key.","required":true,"schema":{"type":"string"}},{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameAddApiRequest"}}}},"responses":{"default":{"description":"The Subname was added successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameAddApiResponseSuccessSwagger"}}}}},"tags":["Public","Subname"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/update":{"post":{"operationId":"SubdomainWriteController_update","summary":"Update Subname","description":"Update the specified subname's data","parameters":[{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameUpdateApiRequest"}}}},"responses":{"default":{"description":"The Subname was updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameUpdateApiResponseSuccessSwagger"}}}}},"tags":["Public","Subname"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/admin-name-evm-contract":{"post":{"operationId":"SubdomainWriteController_adminAddContract","summary":"Admin Add Contract Subname","description":"Admin assigns a subname to an evm contract address","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameAddContractApiRequest"}}}},"responses":{"default":{"description":"The Subname was assigned successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameAddContractApiResponseSuccessSwagger"}}}}},"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/revoke":{"post":{"operationId":"SubdomainWriteController_revoke","summary":"Revoke Subname","description":"Revoke the specified subname","parameters":[{"name":"x-api-key","in":"header","description":"The Api Key.","required":true,"schema":{"type":"string"}},{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameRevokeApiRequest"}}}},"responses":{"default":{"description":"The Subname was revoked successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameRevokeApiResponseSuccessSwagger"}}}}},"tags":["Public","Subname"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/reject":{"post":{"operationId":"SubdomainWriteController_revokeInvitation","summary":"Reject Subname Invitation","description":"Reject the specified subname invitation","parameters":[{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameRevokeApiRequest"}}}},"responses":{"default":{"description":"The Subname invitation was rejected successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameRevokeApiResponseSuccessSwagger"}}}}},"tags":["Public","Subname"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/admin-revoke":{"post":{"operationId":"SubdomainWriteController_adminRevoke","summary":"Admin Revoke Subname","description":"Admin Revokes the specified subname by providing the ENS domain name, subdomain name, and chain ID in the request body","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameRevokeApiRequest"}}}},"responses":{"default":{"description":"The Subname was revoked successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameRevokeApiResponseSuccessSwagger"}}}}},"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/upload-to-cdn":{"post":{"operationId":"SubdomainWriteController_uploadFile","parameters":[{"name":"ens","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"x-payment-info":{"authMode":"none"}}},"/ens/v2/subname":{"get":{"operationId":"SubdomainReadController_find","summary":"Get Subname by Criteria","description":"Retrieves the subname matching the specified criteria","parameters":[{"name":"chainId","required":true,"in":"query","description":"The chain id to filter by","schema":{"example":1,"type":"number"}},{"name":"subname","required":true,"in":"query","description":"The subname to search for","schema":{"example":"x.y.eth","type":"string"}},{"description":"The chain id to filter by","required":true,"name":"chainId","in":"query","schema":{"example":1,"type":"number"}},{"description":"The subname to search for","name":"subname","in":"query","required":true,"schema":{"example":"x.y.eth","type":"string"}}],"responses":{"200":{"description":"Subname was fetched successfully.","content":{"application/json":{"schema":{"allOf":[{"properties":{"statusCode":{"type":"number","example":200},"result":{"properties":{"data":{"type":"object","$ref":"#/components/schemas/SubdomainGetApiResponse"},"error":{"type":"string","nullable":true}}}}}]}}}},"404":{"description":"No subname found matching the specified criteria"}},"tags":["Subname","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/subname/all":{"get":{"operationId":"SubdomainReadController_findAll","summary":"Get All Subnames by Criteria","description":"Retrieves all subnames matching the specified criteria. At least one of workspaceId, ensDomains or address is required, so the listing is always scoped to a known owner.","parameters":[{"name":"page","required":false,"in":"query","description":"The requested page number","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return per page","schema":{"maximum":100,"default":20,"example":20,"type":"number"}},{"name":"orderBy","required":false,"in":"query","description":"The order by field","schema":{"example":"createdAt","enum":["createdAt","subnameCount"],"type":"string"}},{"name":"orderDirection","required":false,"in":"query","description":"The order direction","schema":{"example":"desc","enum":["asc","desc"],"type":"string"}},{"name":"chainId","required":true,"in":"query","description":"The chain id to filter by","schema":{"example":1,"type":"number"}},{"name":"search","required":false,"in":"query","description":"The term to search for in domain names","schema":{"example":"mySubname","type":"string"}},{"name":"workspaceId","required":false,"in":"query","description":"The workspace id to filter by","schema":{"example":"b3f87e95-556d-401c-9b28-9f6050865f69","type":"string"}},{"name":"ensDomains","required":false,"in":"query","description":"The ens domains to filter by","schema":{"example":["x.eth","y.eth"],"type":"array","items":{"type":"string"}}},{"name":"address","required":false,"in":"query","description":"The address to filter by","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}},{"name":"coinType","required":false,"in":"query","description":"The address coin type to filter by","schema":{"example":60,"type":"number"}},{"name":"isClaimed","required":false,"in":"query","description":"Claimed status to filter by","schema":{"default":true,"example":"true","type":"boolean"}},{"description":"The requested page number","required":false,"name":"page","in":"query","schema":{"default":1,"example":1,"type":"number"}},{"description":"The number of items to return per page","required":false,"name":"limit","in":"query","schema":{"maximum":100,"default":20,"example":20,"type":"number"}},{"description":"The order by field","required":false,"name":"orderBy","in":"query","schema":{"example":"createdAt","enum":["createdAt","subnameCount"],"type":"string"}},{"description":"The order direction","required":false,"name":"orderDirection","in":"query","schema":{"example":"desc","enum":["asc","desc"],"type":"string"}},{"description":"The chain id to filter by","required":true,"name":"chainId","in":"query","schema":{"example":1,"type":"number"}},{"description":"The term to search for in domain names","required":false,"name":"search","in":"query","schema":{"example":"mySubname","type":"string"}},{"description":"The workspace id to filter by","required":false,"name":"workspaceId","in":"query","schema":{"example":"b3f87e95-556d-401c-9b28-9f6050865f69","type":"string"}},{"description":"The ens domains to filter by","required":false,"name":"ensDomains","in":"query","schema":{"example":["x.eth","y.eth"],"type":"array","items":{"type":"string"}}},{"description":"The address to filter by","required":false,"name":"address","in":"query","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}},{"description":"The address coin type to filter by","required":false,"name":"coinType","in":"query","schema":{"example":60,"type":"number"}},{"description":"Claimed status to filter by","required":false,"name":"isClaimed","in":"query","schema":{"default":true,"example":"true","type":"boolean"}}],"responses":{"200":{"description":"Subnames were fetched successfully.","content":{"application/json":{"schema":{"allOf":[{"properties":{"statusCode":{"type":"number","example":200},"result":{"properties":{"data":{"type":"object","$ref":"#/components/schemas/SubdomainGetAllApiResponse"},"error":{"type":"string","nullable":true}}}}}]}}}}},"tags":["Subname","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/subname":{"get":{"operationId":"SubdomainReadController_getSubname","summary":"Get by Subname","description":"Retrieves subname details based on the specified subname and chainId","parameters":[{"name":"subname","required":true,"in":"query","description":"The subname","schema":{"example":"ghadi.justan.id","type":"string"}},{"name":"chainId","required":true,"in":"query","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":1,"type":"number"}},{"description":"The subname","name":"subname","in":"query","required":true,"schema":{"example":"ghadi.justan.id","type":"string"}},{"description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","name":"chainId","in":"query","required":true,"schema":{"example":1,"type":"number"}}],"responses":{"200":{"description":"Subname was fetched successfully.","content":{"application/json":{"schema":{"allOf":[{"properties":{"statusCode":{"type":"number","example":200},"result":{"properties":{"data":{"type":"object","$ref":"#/components/schemas/SubnameGetByNameAndChainIdApiResponse"},"error":{"type":"string","nullable":true}}}}}]}}}}},"tags":["Subname","Subname","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/ens":{"get":{"operationId":"SubdomainReadController_getSubnamesByEnsDomain","summary":"Get all by ENS Domain","description":"Retrieves all subnames associated with the provided ens domain","parameters":[{"name":"ensDomain","required":true,"in":"query","description":"The ENS domain","schema":{"example":"justan.id","type":"string"}},{"name":"chainId","required":true,"in":"query","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":1,"type":"number"}},{"name":"page","required":false,"in":"query","description":"The page number (defaults to 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"The number of items per page (defaults to 20)","schema":{"example":20,"type":"number"}},{"name":"isClaimed","required":false,"in":"query","description":"if true, will return claimed subdomain, if false, will return unclaimed subdomain, if not provided, will return all subdomains","schema":{"example":true,"type":"boolean"}},{"description":"The ENS domain","name":"ensDomain","in":"query","required":true,"schema":{"example":"justan.id","type":"string"}},{"description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","name":"chainId","in":"query","required":true,"schema":{"example":1,"type":"number"}},{"description":"The page number (defaults to 1)","required":false,"name":"page","in":"query","schema":{"example":1,"type":"number"}},{"description":"The number of items per page (defaults to 20)","required":false,"name":"limit","in":"query","schema":{"example":20,"type":"number"}},{"description":"if true, will return claimed subdomain, if false, will return unclaimed subdomain, if not provided, will return all subdomains","required":false,"name":"isClaimed","in":"query","schema":{"example":true,"type":"boolean"}}],"responses":{"200":{"description":"Subnames were fetched successfully.","content":{"application/json":{"schema":{"allOf":[{"properties":{"statusCode":{"type":"number","example":200},"result":{"properties":{"data":{"type":"object","$ref":"#/components/schemas/SubnameGetAllEnsAndChainIdApiResponse"},"error":{"type":"string","nullable":true}}}}}]}}}}},"tags":["Subname","Subname","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/address":{"get":{"operationId":"SubdomainReadController_getSubnamesByAddress","summary":"Get all by Address","description":"Retrieves all subnames associated with an address","parameters":[{"name":"address","required":true,"in":"query","description":"The address of the subdomain","schema":{"example":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","type":"string"}},{"name":"chainId","required":true,"in":"query","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":11155111,"type":"number"}},{"name":"isClaimed","required":false,"in":"query","description":"if true, will return claimed subdomain, if false, will return unclaimed subdomain, if not provided, will return all subdomains","schema":{"example":true,"type":"boolean"}},{"name":"ensDomains","required":false,"in":"query","description":"Array of ensDomains to filter the subnames by","schema":{"type":"array","items":{"type":"string"}}},{"description":"The address of the subdomain","name":"address","in":"query","required":true,"schema":{"example":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","type":"string"}},{"description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","name":"chainId","in":"query","required":true,"schema":{"example":11155111,"type":"number"}},{"description":"The coin type of the address","required":false,"name":"coinType","in":"query","schema":{"example":60,"type":"object"}},{"description":"if true, will return claimed subdomain, if false, will return unclaimed subdomain, if not provided, will return all subdomains","required":false,"name":"isClaimed","in":"query","schema":{"example":true,"type":"boolean"}},{"description":"Array of ensDomains to filter the subnames by","required":false,"name":"ensDomains","in":"query","schema":{"example":["jan.eth"],"type":"array"}}],"responses":{"200":{"description":"Subnames were fetched successfully.","content":{"application/json":{"schema":{"allOf":[{"properties":{"statusCode":{"type":"number","example":200},"result":{"properties":{"data":{"type":"object","$ref":"#/components/schemas/SubnameGetSubnamesByAddressApiResponse"},"error":{"type":"string","nullable":true}}}}}]}}}}},"tags":["Subname","Subname","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/records":{"get":{"operationId":"SubdomainReadController_getSubnameRecords","summary":"Fetch Records - onchain","description":"Retrieves all records associated with a subname - goes through CCIP-Read flow to fetch records","parameters":[{"name":"ens","required":true,"in":"query","description":"The subname","schema":{"example":"justanexample.eth","type":"string"}},{"name":"providerUrl","required":true,"in":"query","description":"Provider URL","schema":{"example":"https://cloudflare-eth.com","type":"string"}},{"description":"The subname","name":"ens","in":"query","required":true,"schema":{"example":"justanexample.eth","type":"string"}},{"description":"Provider URL","name":"providerUrl","in":"query","required":true,"schema":{"example":"https://cloudflare-eth.com","type":"string"}}],"responses":{"200":{"description":"Records were fetched successfully.","content":{"application/json":{"schema":{"allOf":[{"properties":{"statusCode":{"type":"number","example":200},"result":{"properties":{"data":{"type":"object","$ref":"#/components/schemas/SubnameGetRecordsApiResponse"},"error":{"type":"string","nullable":true}}}}}]}}}}},"tags":["Subname","Subname","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/count":{"get":{"operationId":"SubdomainReadController_getSubnameCountByDomainId","parameters":[],"responses":{"200":{"description":""}},"tags":["Subname"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/available":{"get":{"operationId":"SubdomainReadController_isUsernameAvailable","summary":"Is Subname Available","description":"Checks if a username is available for a given ENS domain","parameters":[{"name":"subname","required":true,"in":"query","description":"The subname","schema":{"example":"user.justan.id","type":"string"}},{"name":"chainId","required":true,"in":"query","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":1,"type":"number"}},{"description":"The subname","name":"subname","in":"query","required":true,"schema":{"example":"user.justan.id","type":"string"}},{"description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","name":"chainId","in":"query","required":true,"schema":{"example":1,"type":"number"}}],"responses":{"200":{"description":"Subname was fetched successfully.","content":{"application/json":{"schema":{"allOf":[{"properties":{"statusCode":{"type":"number","example":200},"result":{"properties":{"data":{"type":"object","$ref":"#/components/schemas/SubnameIsSubnameAvailableApiResponse"},"error":{"type":"string","nullable":true}}}}}]}}}}},"tags":["Subname","Subname","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/search":{"get":{"operationId":"SubdomainReadController_searchSubnames","summary":"Search Subnames","description":"Search subnames based on the provided query","parameters":[{"name":"name","required":true,"in":"query","description":"The full name of the subdomain","schema":{"type":"string"}},{"name":"chainId","required":true,"in":"query","description":"The chain id","schema":{"type":"number"}},{"description":"The full name of the subdomain","name":"name","in":"query","required":true,"schema":{"type":"string"}},{"description":"The chain id","name":"chainId","in":"query","required":true,"schema":{"type":"number"}},{"description":"The offset","name":"skip","in":"query","required":true,"schema":{"type":"object"}},{"description":"The Take","name":"take","in":"query","required":true,"schema":{"type":"object"}},{"description":"The metadata","name":"data","in":"query","required":true,"schema":{"type":"object"}},{"description":"Check if ens is registered","name":"ensRegistered","in":"query","required":true,"schema":{"type":"object"}}],"responses":{"200":{"description":"Subnames search was fetched successfully.","content":{"application/json":{"schema":{"allOf":[{"properties":{"statusCode":{"type":"number","example":200},"result":{"properties":{"data":{"type":"object","$ref":"#/components/schemas/SubnameSearchApiResponse"},"error":{"type":"string","nullable":true}}}}}]}}}}},"tags":["Subname","Subname","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/subname/ens-list":{"get":{"operationId":"SubdomainReadController_getAllEnsWithSubnameCount","summary":"Get All Ens with Subname count","description":"Get All Ens with Subname count","parameters":[{"name":"chainId","required":true,"in":"query","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":1,"type":"number"}},{"name":"page","required":false,"in":"query","description":"The page number (defaults to 1)","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"The number of items per page (defaults to 20)","schema":{"example":20,"type":"number"}},{"name":"orderBy","required":false,"in":"query","description":"The field to order by","schema":{"example":"subnameCount","type":"string"}},{"name":"orderDirection","required":false,"in":"query","description":"The direction to order by","schema":{"example":"asc","type":"string"}},{"description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","name":"chainId","in":"query","required":true,"schema":{"example":1,"type":"number"}},{"description":"The page number (defaults to 1)","required":false,"name":"page","in":"query","schema":{"example":1,"type":"number"}},{"description":"The number of items per page (defaults to 20)","required":false,"name":"limit","in":"query","schema":{"example":20,"type":"number"}},{"description":"The field to order by","required":false,"name":"orderBy","in":"query","schema":{"example":"subnameCount","type":"string"}},{"description":"The direction to order by","required":false,"name":"orderDirection","in":"query","schema":{"example":"asc","type":"string"}}],"responses":{"200":{"description":"Ens were fetched successfully.","content":{"application/json":{"schema":{"allOf":[{"properties":{"statusCode":{"type":"number","example":200},"result":{"properties":{"data":{"type":"object","$ref":"#/components/schemas/SubnameGetAllEnsWithSubnameCountApiResponse"},"error":{"type":"string","nullable":true}}}}}]}}}}},"tags":["Subname","Subname","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/subnames":{"get":{"operationId":"SubnameV2ReadController_find","summary":"Get Subname by Criteria","description":"Retrieves the subname matching the specified criteria","parameters":[{"name":"chainId","required":true,"in":"query","description":"The chain id to filter by","schema":{"example":1,"type":"number"}},{"name":"subname","required":true,"in":"query","description":"The subname to search for","schema":{"example":"dev.jan.eth","type":"string"}},{"description":"The chain id to filter by","required":true,"name":"chainId","in":"query","schema":{"example":1,"type":"number"}},{"description":"The subname to search for","required":true,"name":"subname","in":"query","schema":{"example":"dev.jan.eth","type":"string"}}],"responses":{"404":{"description":"No subname found matching the specified criteria"},"default":{"description":"Subname fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameGetApiResponseSuccessSwagger"}}}}},"tags":["Subname V2","Public"],"x-payment-info":{"authMode":"none"}},"post":{"operationId":"SubnameV2WriteController_add","summary":"Add Subname","description":"Add a new subname","parameters":[{"name":"x-api-key","in":"header","description":"The Api Key.","required":true,"schema":{"type":"string"}},{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"The subname to add","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameAddApiBodyRequest"}}}},"responses":{"default":{"description":"The added subname","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameAddApiResponseSuccessSwagger"}}}}},"tags":["Subname V2","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/subnames/all":{"get":{"operationId":"SubnameV2ReadController_findAll","summary":"Get All Subnames by Criteria","description":"Retrieves all subnames matching the specified criteria. At least one of workspaceId, ensDomains or address is required, so the listing is always scoped to a known owner.","parameters":[{"name":"page","required":false,"in":"query","description":"The requested page number","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return per page","schema":{"maximum":100,"default":20,"example":20,"type":"number"}},{"name":"orderBy","required":false,"in":"query","description":"The order by field","schema":{"example":"createdAt","enum":["createdAt","subnameCount"],"type":"string"}},{"name":"orderDirection","required":false,"in":"query","description":"The order direction","schema":{"example":"desc","enum":["asc","desc"],"type":"string"}},{"name":"chainId","required":true,"in":"query","description":"The chain id to filter by","schema":{"example":1,"type":"number"}},{"name":"search","required":false,"in":"query","description":"The term to search for in domain names","schema":{"example":"mySubname","type":"string"}},{"name":"workspaceId","required":false,"in":"query","description":"The workspace id to filter by","schema":{"example":"b3f87e95-556d-401c-9b28-9f6050865f69","type":"string"}},{"name":"ensDomains","required":false,"in":"query","description":"The ens domains to filter by","schema":{"example":["jan.eth","example.eth"],"type":"array","items":{"type":"string"}}},{"name":"address","required":false,"in":"query","description":"The address to filter by","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}},{"name":"coinType","required":false,"in":"query","description":"The address coin type to filter by","schema":{"example":60,"type":"number"}},{"name":"isClaimed","required":false,"in":"query","description":"Claimed status to filter by","schema":{"default":true,"example":true,"type":"boolean"}},{"description":"The requested page number","required":false,"name":"page","in":"query","schema":{"default":1,"example":1,"type":"number"}},{"description":"The number of items to return per page","required":false,"name":"limit","in":"query","schema":{"maximum":100,"default":20,"example":20,"type":"number"}},{"description":"The order by field","required":false,"name":"orderBy","in":"query","schema":{"example":"createdAt","enum":["createdAt","subnameCount"],"type":"string"}},{"description":"The order direction","required":false,"name":"orderDirection","in":"query","schema":{"example":"desc","enum":["asc","desc"],"type":"string"}},{"description":"The chain id to filter by","required":true,"name":"chainId","in":"query","schema":{"example":1,"type":"number"}},{"description":"The term to search for in domain names","required":false,"name":"search","in":"query","schema":{"example":"mySubname","type":"string"}},{"description":"The workspace id to filter by","required":false,"name":"workspaceId","in":"query","schema":{"example":"b3f87e95-556d-401c-9b28-9f6050865f69","type":"string"}},{"description":"The ens domains to filter by","required":false,"name":"ensDomains","in":"query","schema":{"example":["jan.eth","example.eth"],"type":"array","items":{"type":"string"}}},{"description":"The address to filter by","required":false,"name":"address","in":"query","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}},{"description":"The address coin type to filter by","required":false,"name":"coinType","in":"query","schema":{"example":60,"type":"number"}},{"description":"Claimed status to filter by","required":false,"name":"isClaimed","in":"query","schema":{"default":true,"example":true,"type":"boolean"}}],"responses":{"default":{"description":"Subnames fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameGetAllApiResponseSuccessSwagger"}}}}},"tags":["Subname V2","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/subnames/records":{"get":{"operationId":"SubnameV2ReadController_getRecords","summary":"Fetch Subname Records","description":"Retrieves all records associated with a subname through on-chain CCIP-Read flow","parameters":[{"name":"ens","required":true,"in":"query","description":"The subname to fetch records for. Supports interoperable name format: name@chain (e.g. vitalik.eth@eip155:1 or vitalik.eth@ethereum). When chain is specified, only the address for that chain is returned.","schema":{"example":"justanexample.eth","type":"string"}},{"name":"providerUrl","required":true,"in":"query","description":"Provider URL","schema":{"example":"https://cloudflare-eth.com","type":"string"}},{"description":"The subname to fetch records for. Supports interoperable name format: name@chain (e.g. vitalik.eth@eip155:1 or vitalik.eth@ethereum). When chain is specified, only the address for that chain is returned.","required":true,"name":"ens","in":"query","schema":{"example":"justanexample.eth","type":"string"}},{"description":"Provider URL","required":true,"name":"providerUrl","in":"query","schema":{"example":"https://cloudflare-eth.com","type":"string"}}],"responses":{"default":{"description":"Records fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameRecordsApiResponseSuccessSwagger"}}}}},"tags":["Subname V2","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/subnames/{subname}":{"patch":{"operationId":"SubnameV2WriteController_update","summary":"Update Subname","description":"Update the specified subname's data","parameters":[{"name":"subname","required":true,"in":"path","description":"The subname to update","schema":{"example":"dev.jan.eth","type":"string"}},{"name":"chainId","required":true,"in":"query","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":11155111,"type":"number"}},{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"The subname update data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameUpdateApiBodyRequest"}}}},"responses":{"default":{"description":"The updated subname","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameUpdateApiResponseSuccessSwagger"}}}}},"tags":["Subname V2","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/subnames/invitations":{"post":{"operationId":"SubnameV2WriteController_reserve","summary":"Reserve Subname","description":"Reserve Subname to be claimed later.","parameters":[{"name":"x-api-key","in":"header","description":"The Api Key.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"The subname to reserve","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameReserveApiRequest"}}}},"responses":{"default":{"description":"The reserved subname","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameReserveApiResponseSuccessSwagger"}}}}},"tags":["Subname V2","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/subnames/invitations/{subname}":{"patch":{"operationId":"SubnameV2WriteController_accept","summary":"Accept Subname","description":"Accept the specified subname invitation.","parameters":[{"name":"subname","required":true,"in":"path","description":"The subname to accept","schema":{"example":"dev.jan.eth","type":"string"}},{"name":"chainId","required":true,"in":"query","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":11155111,"type":"number"}},{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"The subname acceptance data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameAcceptApiBodyRequest"}}}},"responses":{"default":{"description":"The accepted subname","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameAcceptApiResponseSuccessSwagger"}}}}},"tags":["Subname V2","Public"],"x-payment-info":{"authMode":"none"}},"delete":{"operationId":"SubnameV2WriteController_revoke","summary":"Revoke Subname","description":"Revoke the specified subname invitation","parameters":[{"name":"subname","required":true,"in":"path","description":"The subname invitation to revoke","schema":{"example":"dev.jan.eth","type":"string"}},{"name":"chainId","required":true,"in":"query","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":11155111,"type":"number"}},{"name":"x-api-key","in":"header","description":"The Api Key.","required":true,"schema":{"type":"string"}},{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":false,"description":"Optional signature data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameRevokeApiBodyRequest"}}}},"responses":{"default":{"description":"The revoked subname invitation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubnameRevokeApiResponseSuccessSwagger"}}}}},"tags":["Subname V2","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/resolve":{"get":{"operationId":"ResolveV2ReadController_resolve","summary":"Resolve ENS records (single or batch)","description":"Resolves one or more ENS names through the on-chain CCIP-Read flow. Repeat the ens query parameter (?ens=a.eth&ens=b.eth) to batch up to 50 names. The caller MAY supply an HTTPS rpcUrl, preferably via the X-Rpc-Url header (recommended; keeps the API key out of access logs) or as a query parameter -- doing so makes the request free (the caller pays the upstream RPC compute). Without an rpcUrl the request is paid (x402 or MPP, see 402 challenge). Private/loopback/link-local hosts are rejected. Response shape is polymorphic by request cardinality: an object for single-ens requests, an array (in input order, null for failed entries) for batches.","parameters":[{"name":"ens","required":true,"in":"query","description":"ENS name(s) to resolve. Pass once for a single resolution or repeat to batch (?ens=a.eth&ens=b.eth). Supports interoperable name format (e.g. vitalik.eth@eip155:1).","schema":{"minItems":1,"maxItems":50,"example":["vitalik.eth","nick.eth"],"type":"array","items":{"type":"string"}}},{"name":"rpcUrl","required":false,"in":"query","description":"HTTPS RPC URL used for on-chain reads. Caller-supplied so the cost of the resolution is paid by the caller, not the service. PREFER the X-Rpc-Url request header instead -- query strings end up in access logs and most rpcUrls embed an API key. Must use https. Private/loopback/link-local hosts are rejected.","schema":{"example":"https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY","type":"string"}},{"description":"ENS name(s) to resolve. Pass once for a single resolution or repeat to batch (?ens=a.eth&ens=b.eth). Supports interoperable name format (e.g. vitalik.eth@eip155:1).","name":"ens","in":"query","required":true,"schema":{"minItems":1,"maxItems":50,"example":["vitalik.eth","nick.eth"],"type":"array","items":{"type":"string"}}},{"description":"HTTPS RPC URL used for on-chain reads. Caller-supplied so the cost of the resolution is paid by the caller, not the service. PREFER the X-Rpc-Url request header instead -- query strings end up in access logs and most rpcUrls embed an API key. Must use https. Private/loopback/link-local hosts are rejected.","required":false,"name":"rpcUrl","in":"query","schema":{"example":"https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY","type":"string"}},{"name":"X-Rpc-Url","in":"header","description":"Optional caller-supplied rpcUrl. Takes precedence over the rpcUrl query parameter when both are present. When supplied, the route is free (BYO compute). When omitted, the route falls back to a server-managed RPC and requires payment.","required":false,"schema":{"type":"string"}}],"responses":{"402":{"description":"Payment Required. The route accepts x402 v2 and MPP-charge draft-01. See PAYMENT-REQUIRED and WWW-Authenticate headers for the full challenge; pay 0.005 USDC on Base or send X-Rpc-Url to bypass."},"404":{"description":"EnsNotFound. The name uses a JustaName resolver on chain but its domain is not onboarded in JustaName for that chain. A name that is not registered at all answers 200 with empty records instead. In a batch, such a name comes back as null in its slot."},"502":{"description":"The payment was broadcast on chain and the settlement did not confirm. The PAYMENT-RESPONSE header carries the transaction hash with success=false, and the body repeats it in `transaction`. The authorization may already be spent, so retrying with the same proof returns this same answer rather than a new challenge. A settle whose outcome never came back has no hash to report: the answer is the same 502 without `transaction`, and the authorization still must not be paid for twice."},"default":{"description":"Records resolved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveApiResponseSuccessSwagger"}}}}},"tags":["Resolution","Public"],"x-payment-info":{"authMode":"payment","offers":[{"amount":"5000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Resolves one or more ENS names through the on-chain CCIP-Read flow. Repeat the ens query parameter (?ens=a.eth&ens=b.eth) to batch up to 50 names. The caller MAY supply an HTTPS rpcUrl, preferably via the X-Rpc-Url header (recommended; keeps the API key out of access logs) or as a query parameter -- doing so makes the request free (the caller pays the upstream RPC compute). Without an rpcUrl the request is paid (x402 or MPP, see 402 challenge). Private/loopback/link-local hosts are rejected. Response shape is polymorphic by request cardinality: an object for single-ens requests, an array (in input order, null for failed entries) for batches.","intent":"charge","method":"evm","expires":60}],"protocols":[{"x402":{}},{"mpp":{"method":"evm","intent":"charge","currency":"USD"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"Input","properties":{"ens":{"type":"string"}}}}}},"/ens/v2/reverse":{"get":{"operationId":"ReverseV2ReadController_reverse","summary":"Reverse-resolve ENS names from address(es) (single or batch)","description":"ENSIP-19 reverse resolution with a 3-step fallback chain per slot: (1) on-chain lookup with the caller-supplied (or interop-derived) coinType, (2) on-chain lookup with the ENSIP-19 default coinType (0x80000000) when step 1 returns null, (3) JAW.id offchain primary-name store when both on-chain attempts return null. The response field `viaUniversalResolver` is true for steps 1+2 and false for step 3 so callers can distinguish on-chain from JAW.id-served names. Repeat the address query parameter (?address=0x..&address=0x..) to batch up to 50 addresses. Pass records=true to also forward-resolve each resolved name and attach its ENS records (texts, addresses, contentHash -- same shape as /v2/resolve) under `records`; slots with name: null or a failed records lookup carry records: null. The caller MAY supply an HTTPS rpcUrl, preferably via the X-Rpc-Url header (recommended; keeps the API key out of access logs) or as a query parameter -- doing so makes the request free (the caller pays the upstream RPC compute). Without an rpcUrl the request is paid (x402 or MPP, see 402 challenge). Private/loopback/link-local hosts are rejected. Response shape is polymorphic by request cardinality: an object for single-address requests, an array (in input order, per-item error in `error`) for batches.","parameters":[{"name":"address","required":true,"in":"query","description":"Address(es) to reverse-resolve. Pass once for a single resolution or repeat to batch (?address=0x...&address=0x...). Up to 50 per request. Each entry may be a plain hex address (0x...) or an interop-formatted address (0x...@eip155:<chainId> or 0x...@<chainLabel>); when the chain suffix is present it overrides the request-level coinType for that slot.","schema":{"minItems":1,"maxItems":50,"example":["0xb965a5f3a0fC18D84E68883ccAd508445a7917A8"],"type":"array","items":{"type":"string"}}},{"name":"coinType","required":false,"in":"query","description":"ENSIP-19 coinType identifying which chain's reverse record to look up. Mainnet primary = 60. EVM L2 primary = 0x80000000 | chainId (e.g. Base = 2147492837 / 0x80002105). Optional only when every address carries an interop chain suffix (e.g. 0x...@eip155:1) -- for plain addresses the coinType is required, otherwise that slot fails with a 400. When both the suffix and coinType are supplied for the same address, the suffix wins.","schema":{"example":60,"type":"number"}},{"name":"rpcUrl","required":false,"in":"query","description":"HTTPS RPC URL used for on-chain reads. Caller-supplied so the cost of the resolution is paid by the caller, not the service. PREFER the X-Rpc-Url request header instead -- query strings end up in access logs and most rpcUrls embed an API key. Must use https. Private/loopback/link-local hosts are rejected.","schema":{"example":"https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY","type":"string"}},{"name":"records","required":false,"in":"query","description":"When true, every slot that reverse-resolved to a name is also forward-resolved and its ENS records (texts, addresses, contentHash) are attached under `records`. Slots whose name is null carry `records: null`, as do slots whose records lookup failed (the reverse answer itself is still served). Adds one batched forward resolution against the same rpcUrl.","schema":{"example":true,"type":"boolean"}},{"description":"Address(es) to reverse-resolve. Pass once for a single resolution or repeat to batch (?address=0x...&address=0x...). Up to 50 per request. Each entry may be a plain hex address (0x...) or an interop-formatted address (0x...@eip155:<chainId> or 0x...@<chainLabel>); when the chain suffix is present it overrides the request-level coinType for that slot.","name":"address","in":"query","required":true,"schema":{"minItems":1,"maxItems":50,"example":["0xb965a5f3a0fC18D84E68883ccAd508445a7917A8"],"type":"array","items":{"type":"string"}}},{"description":"ENSIP-19 coinType identifying which chain's reverse record to look up. Mainnet primary = 60. EVM L2 primary = 0x80000000 | chainId (e.g. Base = 2147492837 / 0x80002105). Optional only when every address carries an interop chain suffix (e.g. 0x...@eip155:1) -- for plain addresses the coinType is required, otherwise that slot fails with a 400. When both the suffix and coinType are supplied for the same address, the suffix wins.","required":false,"name":"coinType","in":"query","schema":{"example":60,"type":"number"}},{"description":"HTTPS RPC URL used for on-chain reads. Caller-supplied so the cost of the resolution is paid by the caller, not the service. PREFER the X-Rpc-Url request header instead -- query strings end up in access logs and most rpcUrls embed an API key. Must use https. Private/loopback/link-local hosts are rejected.","required":false,"name":"rpcUrl","in":"query","schema":{"example":"https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY","type":"string"}},{"description":"When true, every slot that reverse-resolved to a name is also forward-resolved and its ENS records (texts, addresses, contentHash) are attached under `records`. Slots whose name is null carry `records: null`, as do slots whose records lookup failed (the reverse answer itself is still served). Adds one batched forward resolution against the same rpcUrl.","required":false,"name":"records","in":"query","schema":{"example":true,"type":"boolean"}},{"name":"X-Rpc-Url","in":"header","description":"Optional caller-supplied rpcUrl. Takes precedence over the rpcUrl query parameter when both are present. When supplied, the route is free (BYO compute). When omitted, the route falls back to a server-managed RPC and requires payment.","required":false,"schema":{"type":"string"}}],"responses":{"402":{"description":"Payment Required. The route accepts x402 v2 and MPP-charge draft-01. See PAYMENT-REQUIRED and WWW-Authenticate headers for the full challenge; pay 0.005 USDC on Base or send X-Rpc-Url to bypass."},"502":{"description":"The payment was broadcast on chain and the settlement did not confirm. The PAYMENT-RESPONSE header carries the transaction hash with success=false, and the body repeats it in `transaction`. The authorization may already be spent, so retrying with the same proof returns this same answer rather than a new challenge. A settle whose outcome never came back has no hash to report: the answer is the same 502 without `transaction`, and the authorization still must not be paid for twice."},"default":{"description":"Reverse resolved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseApiResponseSuccessSwagger"}}}}},"tags":["Resolution","Public"],"x-payment-info":{"authMode":"payment","offers":[{"amount":"5000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"ENSIP-19 reverse resolution with a 3-step fallback chain per slot: (1) on-chain lookup with the caller-supplied (or interop-derived) coinType, (2) on-chain lookup with the ENSIP-19 default coinType (0x80000000) when step 1 returns null, (3) JAW.id offchain primary-name store when both on-chain attempts return null. The response field `viaUniversalResolver` is true for steps 1+2 and false for step 3 so callers can distinguish on-chain from JAW.id-served names. Repeat the address query parameter (?address=0x..&address=0x..) to batch up to 50 addresses. Pass records=true to also forward-resolve each resolved name and attach its ENS records (texts, addresses, contentHash -- same shape as /v2/resolve) under `records`; slots with name: null or a failed records lookup carry records: null. The caller MAY supply an HTTPS rpcUrl, preferably via the X-Rpc-Url header (recommended; keeps the API key out of access logs) or as a query parameter -- doing so makes the request free (the caller pays the upstream RPC compute). Without an rpcUrl the request is paid (x402 or MPP, see 402 challenge). Private/loopback/link-local hosts are rejected. Response shape is polymorphic by request cardinality: an object for single-address requests, an array (in input order, per-item error in `error`) for batches.","intent":"charge","method":"evm","expires":60}],"protocols":[{"x402":{}},{"mpp":{"method":"evm","intent":"charge","currency":"USD"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.005"},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"Input","properties":{"address":{"type":"string"},"coinType":{"type":"string"}}}}}},"/ens/v2/enrich":{"get":{"operationId":"EnrichV2ReadController_enrich","summary":"Resolve an address into its ENS name and full published profile","description":"Reverse-resolves the address and forward-resolves the name it finds, returning the ENS profile behind it in one call: text records (socials, url, email, avatar), multichain addresses and content hash. Repeat the address query parameter (?address=0x..&address=0x..) to batch up to 50 addresses. This is /v2/reverse with records always on, priced as its own resource. Returns only what the name owner published on ENS: no wallet clustering, no related-address inference, no third-party sources. An address with no reverse record answers name: null and records: null rather than a guess (ENSIP-19 is opt-in). A records lookup that fails answers 502 rather than a 200 carrying nulls, since the records are what was paid for; payment settles before the lookup runs, so send an Idempotency-Key if you want the retry to reuse it. The caller MAY supply an HTTPS rpcUrl, preferably via the X-Rpc-Url header, which makes the request free (the caller pays the upstream RPC compute).","parameters":[{"name":"address","required":true,"in":"query","description":"Address(es) to reverse-resolve. Pass once for a single resolution or repeat to batch (?address=0x...&address=0x...). Up to 50 per request. Each entry may be a plain hex address (0x...) or an interop-formatted address (0x...@eip155:<chainId> or 0x...@<chainLabel>); when the chain suffix is present it overrides the request-level coinType for that slot.","schema":{"minItems":1,"maxItems":50,"example":["0xb965a5f3a0fC18D84E68883ccAd508445a7917A8"],"type":"array","items":{"type":"string"}}},{"name":"coinType","required":false,"in":"query","description":"ENSIP-19 coinType identifying which chain's reverse record to look up. Mainnet primary = 60. EVM L2 primary = 0x80000000 | chainId (e.g. Base = 2147492837 / 0x80002105). Optional only when every address carries an interop chain suffix (e.g. 0x...@eip155:1) -- for plain addresses the coinType is required, otherwise that slot fails with a 400. When both the suffix and coinType are supplied for the same address, the suffix wins.","schema":{"example":60,"type":"number"}},{"name":"rpcUrl","required":false,"in":"query","description":"HTTPS RPC URL used for on-chain reads. Caller-supplied so the cost of the resolution is paid by the caller, not the service. PREFER the X-Rpc-Url request header instead -- query strings end up in access logs and most rpcUrls embed an API key. Must use https. Private/loopback/link-local hosts are rejected.","schema":{"example":"https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY","type":"string"}},{"description":"Address(es) to reverse-resolve. Pass once for a single resolution or repeat to batch (?address=0x...&address=0x...). Up to 50 per request. Each entry may be a plain hex address (0x...) or an interop-formatted address (0x...@eip155:<chainId> or 0x...@<chainLabel>); when the chain suffix is present it overrides the request-level coinType for that slot.","name":"address","in":"query","required":true,"schema":{"minItems":1,"maxItems":50,"example":["0xb965a5f3a0fC18D84E68883ccAd508445a7917A8"],"type":"array","items":{"type":"string"}}},{"description":"ENSIP-19 coinType identifying which chain's reverse record to look up. Mainnet primary = 60. EVM L2 primary = 0x80000000 | chainId (e.g. Base = 2147492837 / 0x80002105). Optional only when every address carries an interop chain suffix (e.g. 0x...@eip155:1) -- for plain addresses the coinType is required, otherwise that slot fails with a 400. When both the suffix and coinType are supplied for the same address, the suffix wins.","required":false,"name":"coinType","in":"query","schema":{"example":60,"type":"number"}},{"description":"HTTPS RPC URL used for on-chain reads. Caller-supplied so the cost of the resolution is paid by the caller, not the service. PREFER the X-Rpc-Url request header instead -- query strings end up in access logs and most rpcUrls embed an API key. Must use https. Private/loopback/link-local hosts are rejected.","required":false,"name":"rpcUrl","in":"query","schema":{"example":"https://eth-mainnet.g.alchemy.com/v2/YOUR_KEY","type":"string"}},{"name":"X-Rpc-Url","in":"header","description":"Optional caller-supplied rpcUrl. Takes precedence over the rpcUrl query parameter when both are present. When supplied, the route is free (BYO compute). When omitted, the route falls back to a server-managed RPC and requires payment.","required":false,"schema":{"type":"string"}}],"responses":{"402":{"description":"Payment Required. The route accepts x402 v2 and MPP-charge draft-01. See PAYMENT-REQUIRED and WWW-Authenticate headers for the full challenge; pay 0.02 USDC on Base or send X-Rpc-Url to bypass."},"502":{"description":"The payment was broadcast on chain and the settlement did not confirm. The PAYMENT-RESPONSE header carries the transaction hash with success=false, and the body repeats it in `transaction`. The authorization may already be spent, so retrying with the same proof returns this same answer rather than a new challenge. A settle whose outcome never came back has no hash to report: the answer is the same 502 without `transaction`, and the authorization still must not be paid for twice."},"default":{"description":"Address enriched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseApiResponseSuccessSwagger"}}}}},"tags":["Resolution","Public"],"x-payment-info":{"authMode":"payment","offers":[{"amount":"20000","currency":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","description":"Reverse-resolves the address and forward-resolves the name it finds, returning the ENS profile behind it in one call: text records (socials, url, email, avatar), multichain addresses and content hash. Repeat the address query parameter (?address=0x..&address=0x..) to batch up to 50 addresses. This is /v2/reverse with records always on, priced as its own resource. Returns only what the name owner published on ENS: no wallet clustering, no related-address inference, no third-party sources. An address with no reverse record answers name: null and records: null rather than a guess (ENSIP-19 is opt-in). A records lookup that fails answers 502 rather than a 200 carrying nulls, since the records are what was paid for; payment settles before the lookup runs, so send an Idempotency-Key if you want the retry to reuse it. The caller MAY supply an HTTPS rpcUrl, preferably via the X-Rpc-Url header, which makes the request free (the caller pays the upstream RPC compute).","intent":"charge","method":"evm","expires":60}],"protocols":[{"x402":{}},{"mpp":{"method":"evm","intent":"charge","currency":"USD"}}],"price":{"mode":"fixed","currency":"USD","amount":"0.02"},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","title":"Input","properties":{"address":{"type":"string"},"coinType":{"type":"string"}}}}}},"/ens/v2/pricing":{"get":{"operationId":"PricingV2ReadController_list","summary":"List paid routes and their prices","description":"Free discovery endpoint. Returns the list of paid routes with their current scheme, amount (in base units), asset, CAIP-2 network and recipient address. Callers can read this BEFORE attempting to pay so they know what to authorize. Pricing changes require a deploy; this list is the canonical source of truth used by both the discovery endpoint and the @Paid() guards on the routes themselves.","parameters":[],"responses":{"default":{"description":"Pricing fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingApiResponseSuccessSwagger"}}}}},"tags":["Discovery","Public"],"x-payment-info":{"authMode":"none"}}},"/.well-known/x402.json":{"get":{"operationId":"WellKnownController_x402","summary":"Public x402 service catalog (v2 wire format)","description":"Free discovery manifest per the x402 community well-known convention. Returns the same paid routes as /v2/pricing but shaped as { x402Version, services[{ resource, accepts[] }] } so agents (Bazaar, agentcash, x402scan crawlers) can index without firing a real 402.","parameters":[],"responses":{"200":{"description":""}},"tags":["Discovery","Public"],"x-payment-info":{"authMode":"none"}}},"/.well-known/x402":{"get":{"operationId":"WellKnownController_x402Canonical","summary":"Public x402 service catalog (canonical path alias)","description":"Identical payload to /.well-known/x402.json. Kept as a separate route so spec-compliant crawlers that probe the no-extension path find us without a 404 round-trip.","parameters":[],"responses":{"200":{"description":""}},"tags":["Discovery","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/primary-name/address":{"get":{"operationId":"PrimaryNameReadController_getPrimaryNameByAddress","summary":"Get by Address","description":"Retrieves primary name for a given address","parameters":[{"name":"address","required":true,"in":"query","description":"The address of the primary name","schema":{"example":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","type":"string"}},{"name":"chainId","required":true,"in":"query","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":11155111,"enum":[1,11155111],"type":"number"}},{"description":"The address of the primary name","required":true,"name":"address","in":"query","schema":{"example":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","type":"string"}},{"description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","required":true,"name":"chainId","in":"query","schema":{"example":11155111,"enum":[1,11155111],"type":"number"}}],"responses":{"default":{"description":"The primary name was fetched successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrimaryNameApiResponseSuccessSwagger"}}}}},"tags":["Public","Primary Name"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/primary-name/batch/address":{"post":{"operationId":"PrimaryNameReadController_getPrimaryNamesInBatch","summary":"Get Primary Names in Batch","description":"Retrieves primary names for an array of addresses on a given chainId.","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrimaryNameGetByAddressBatchApiRequest"}}}},"responses":{"default":{"description":"The primary names were fetched successfully.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/PrimaryNameApiResponseSuccessSwagger"}}}}}},"tags":["Public","Primary Name"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/primary-names/{address}/{chainId}":{"get":{"operationId":"PrimaryNameV2ReadController_findOne","summary":"Get Primary Name","description":"Retrieves primary name for a given address and chainId","parameters":[{"name":"address","required":true,"in":"path","description":"The address of the primary name","schema":{"example":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","type":"string"}},{"name":"chainId","required":true,"in":"path","description":"The chain id of the primary name, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":11155111,"enum":[1,11155111],"type":"number"}}],"responses":{"default":{"description":"The primary name for the given address and chainId","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrimaryNameApiResponseSuccessSwagger"}}}}},"tags":["Primary Name V2","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/primary-names/{chainId}":{"get":{"operationId":"PrimaryNameV2ReadController_findAllByCriteria","summary":"Get All Primary Names","description":"Get All Primary Names for a specific chain with optional filtering","parameters":[{"name":"chainId","required":true,"in":"path","description":"The chain id to get primary names for, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","schema":{"example":11155111,"enum":[1,11155111],"type":"number"}},{"name":"page","required":false,"in":"query","description":"The requested page number","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"The number of items to return per page","schema":{"maximum":100,"default":20,"example":20,"type":"number"}},{"name":"orderBy","required":false,"in":"query","description":"The order by field","schema":{"example":"createdAt","enum":["createdAt","subnameCount"],"type":"string"}},{"name":"orderDirection","required":false,"in":"query","description":"The order direction","schema":{"example":"desc","enum":["asc","desc"],"type":"string"}},{"name":"address","required":false,"in":"query","description":"The address to filter by","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}},{"name":"nameHash","required":false,"in":"query","description":"The name hash to filter by","schema":{"example":"0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890","type":"string"}},{"description":"The requested page number","required":false,"name":"page","in":"query","schema":{"default":1,"example":1,"type":"number"}},{"description":"The number of items to return per page","required":false,"name":"limit","in":"query","schema":{"maximum":100,"default":20,"example":20,"type":"number"}},{"description":"The order by field","required":false,"name":"orderBy","in":"query","schema":{"example":"createdAt","enum":["createdAt","subnameCount"],"type":"string"}},{"description":"The order direction","required":false,"name":"orderDirection","in":"query","schema":{"example":"desc","enum":["asc","desc"],"type":"string"}},{"description":"The address to filter by","required":false,"name":"address","in":"query","schema":{"example":"0x1234567890123456789012345678901234567890","type":"string"}},{"description":"The name hash to filter by","required":false,"name":"nameHash","in":"query","schema":{"example":"0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890","type":"string"}}],"responses":{"default":{"description":"Primary names that match the criteria","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrimaryNameGetAllApiResponse"}}}}},"tags":["Primary Name V2","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v1/primary-name/set-primary-name":{"post":{"operationId":"PrimaryNameWriteController_setPrimaryName","summary":"Set Primary Name","description":"Set a Subname as Primary Name for an address.","parameters":[{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrimaryNameAddApiRequest"}}}},"responses":{"default":{"description":"The primary name was set successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrimaryNameAddApiResponseSuccessSwagger"}}}}},"tags":["Primary Name","Public"],"x-payment-info":{"authMode":"none"}}},"/ens/v2/primary-names":{"post":{"operationId":"PrimaryNameV2WriteController_setPrimaryName","summary":"Set Primary Name","description":"Set a Subname as Primary Name for an address.","parameters":[{"name":"x-signature","in":"header","description":"The signature.","required":false,"schema":{"type":"string"}},{"name":"x-message","in":"header","description":"The Message.","required":true,"schema":{"type":"string"}},{"name":"x-address","in":"header","description":"The Address.","required":true,"schema":{"type":"string"}}],"requestBody":{"required":true,"description":"Primary name data to be set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PrimaryNameSetApiBodyRequest"}}}},"responses":{"201":{"description":""}},"tags":["Primary Name V2","Public"],"x-payment-info":{"authMode":"none"}}}},"info":{"title":"JAW.id API","description":"ENS resolution, reverse resolution and identity enrichment for agents, pay per call in USDC on Base via x402 or MPP.","version":"1.0","contact":{},"x-guidance":"JAW.id ENS resolution: GET /ens/v2/resolve?ens=<name> for forward, GET /ens/v2/reverse?address=<addr> for reverse, GET /ens/v2/enrich?address=<addr> for the name plus the full profile its owner published. All three are pay-per-call in USDC on Base (x402 v2 or MPP-charge draft-01); GET /ens/v2/pricing lists the current amounts. Send X-Rpc-Url with your own HTTPS Ethereum RPC URL to skip payment (caller pays upstream RPC compute). Batch up to 50 names/addresses per call by repeating the query parameter."},"tags":[{"name":"Resolution","description":"Forward and reverse ENS resolution, plus the enriched address-to-profile call. Free when the caller supplies its own RPC URL (X-Rpc-Url header or rpcUrl query param); otherwise the route answers 402 and accepts per-request payment in USDC on Base via x402 v2 or MPP-charge. Each route carries its own price: see the Discovery tag or the 402 challenge."},{"name":"Discovery","description":"Free, unauthenticated endpoints that describe the paid routes -- price, asset, CAIP-2 network and recipient -- so agents can read the terms before firing a request that would 402."}],"servers":[{"url":"https://api.justaname.id"},{"url":"https://api-staging.justaname.id"},{"url":"http://localhost:8000"}],"components":{"schemas":{"MAppAddPermissionApiRequest":{"type":"object","properties":{"signature":{"type":"string","example":"0x0a"},"message":{"type":"string","example":"domain wants you to sign in with your Ethereum account:\nAddress\n\nPlease sign this message to verify that you want to add/update your subdomain provided by justawallet to your account Address using JustAName\n\nURI: uri\nVersion: 1\nChain ID: ChainId\nNonce: nonce\nIssued At: Date\nExpiration Time: Date"},"address":{"type":"string","example":"0x1234567890123456789012345678901234567890"}},"required":["signature","message","address"]},"MAppFieldRequest":{"type":"object","properties":{"key":{"type":"string","example":"Key"},"value":{"type":"string","example":"Value"}},"required":["key","value"]},"MAppAppendFieldApiRequest":{"type":"object","properties":{"subname":{"type":"string","example":"example.justan.id"},"fields":{"type":"array","items":{"$ref":"#/components/schemas/MAppFieldRequest"}}},"required":["subname","fields"]},"MAppRevokePermissionApiRequest":{"type":"object","properties":{"signature":{"type":"string","example":"0x0a"},"message":{"type":"string","example":"domain wants you to sign in with your Ethereum account:\nAddress\n\nPlease sign this message to verify that you want to add/update your subdomain provided by justawallet to your account Address using JustAName\n\nURI: uri\nVersion: 1\nChain ID: ChainId\nNonce: nonce\nIssued At: Date\nExpiration Time: Date"},"address":{"type":"string","example":"0x1234567890123456789012345678901234567890"}},"required":["signature","message","address"]},"SiweRequestChallengeApiRequest":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name","example":"justaname"},"address":{"type":"string","description":"Address","example":"0x1234567890123456789012345678901234567890"},"origin":{"type":"string","description":"Origin","example":"https://justaname.id"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":"11155111"},"ttl":{"type":"number","description":"Time to Live (TTL) in milliseconds (ms), default is 2 minutes (2 * 60 * 1000 = 120000 ms)","example":120000,"default":120000}},"required":["domain","address","origin","chainId"]},"SiweRequestChallengeApiResponse":{"type":"object","properties":{"challenge":{"type":"string","example":"domain wants you to sign in with your Ethereum account:\nAddress\n\nPlease sign this message to verify that you want to add/update your subdomain provided by justawallet to your account Address using JustAName\n\nURI: uri\nVersion: 1\nChain ID: ChainId\nNonce: nonce\nIssued At: Date\nExpiration Time: Date"}},"required":["challenge"]},"SiweRequestChallengeApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SiweRequestChallengeApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SiweRequestChallengeApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SiweRequestChallengeApiResponseResultSwagger"}},"required":["statusCode","result"]},"SiweRequestAddMAppPermissionChallengeApiRequest":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name","example":"justaname"},"address":{"type":"string","description":"Address","example":"0x1234567890123456789012345678901234567890"},"origin":{"type":"string","description":"Origin","example":"https://justaname.id"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":"11155111"},"ttl":{"type":"number","description":"Time to Live (TTL) in milliseconds (ms), default is 2 minutes (2 * 60 * 1000 = 120000 ms)","example":120000,"default":120000},"subname":{"type":"string","description":"Subname requesting the mApp Permission","example":"test.justan.id"},"mApp":{"type":"string","description":"Subname requesting the mApp Permission","example":"justan.id"}},"required":["domain","address","origin","chainId","subname","mApp"]},"SiweRequestAddMAppPermissionChallengeApiResponse":{"type":"object","properties":{"challenge":{"type":"string","example":"domain wants you to sign in with your Ethereum account:\nAddress\n\nPlease sign this message to verify that you want to add/update your subdomain provided by justawallet to your account Address using JustAName\n\nURI: uri\nVersion: 1\nChain ID: ChainId\nNonce: nonce\nIssued At: Date\nExpiration Time: Date"}},"required":["challenge"]},"SiweRequestAddMAppPermissionChallengeApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SiweRequestAddMAppPermissionChallengeApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SiweRequestAddMAppPermissionChallengeApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SiweRequestAddMAppPermissionChallengeApiResponseResultSwagger"}},"required":["statusCode","result"]},"SiweRequestAppendMAppFieldChallengeApiRequest":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name","example":"justaname"},"address":{"type":"string","description":"Address","example":"0x1234567890123456789012345678901234567890"},"origin":{"type":"string","description":"Origin","example":"https://justaname.id"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":"11155111"},"ttl":{"type":"number","description":"Time to Live (TTL) in milliseconds (ms), default is 2 minutes (2 * 60 * 1000 = 120000 ms)","example":120000,"default":120000},"subname":{"type":"string","description":"Subname requesting the mApp Permission","example":"test.justan.id"},"mApp":{"type":"string","description":"Subname requesting the mApp Permission","example":"justan.id"}},"required":["domain","address","origin","chainId","subname","mApp"]},"SiweRequestAppendMAppFieldChallengeApiResponse":{"type":"object","properties":{"challenge":{"type":"string","example":"domain wants you to sign in with your Ethereum account:\nAddress\n\nPlease sign this message to verify that you want to add/update your subdomain provided by justawallet to your account Address using JustAName\n\nURI: uri\nVersion: 1\nChain ID: ChainId\nNonce: nonce\nIssued At: Date\nExpiration Time: Date"}},"required":["challenge"]},"SiweRequestAppendMAppFieldChallengeApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SiweRequestAppendMAppFieldChallengeApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SiweRequestAppendMAppFieldChallengeApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SiweRequestAppendMAppFieldChallengeApiResponseResultSwagger"}},"required":["statusCode","result"]},"SiweRequestRevokeMAppPermissionChallengeApiRequest":{"type":"object","properties":{"domain":{"type":"string","description":"Domain name","example":"justaname"},"address":{"type":"string","description":"Address","example":"0x1234567890123456789012345678901234567890"},"origin":{"type":"string","description":"Origin","example":"https://justaname.id"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":"11155111"},"ttl":{"type":"number","description":"Time to Live (TTL) in milliseconds (ms), default is 2 minutes (2 * 60 * 1000 = 120000 ms)","example":120000,"default":120000},"subname":{"type":"string","description":"Subname requesting the mApp Permission","example":"test.justan.id"},"mApp":{"type":"string","description":"Subname requesting the mApp Permission","example":"justan.id"}},"required":["domain","address","origin","chainId","subname","mApp"]},"SiweRequestRevokeMAppPermissionChallengeApiResponse":{"type":"object","properties":{"challenge":{"type":"string","example":"domain wants you to sign in with your Ethereum account:\nAddress\n\nPlease sign this message to verify that you want to add/update your subdomain provided by justawallet to your account Address using JustAName\n\nURI: uri\nVersion: 1\nChain ID: ChainId\nNonce: nonce\nIssued At: Date\nExpiration Time: Date"}},"required":["challenge"]},"SiweRequestRevokeMAppPermissionChallengeApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SiweRequestRevokeMAppPermissionChallengeApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SiweRequestRevokeMAppPermissionChallengeApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SiweRequestRevokeMAppPermissionChallengeApiResponseResultSwagger"}},"required":["statusCode","result"]},"SiweVerifyMessageApiRequest":{"type":"object","properties":{"signature":{"type":"string","example":"0x6d2991c1b49e2cf6e6eeeead319fdb5ce213d79d4598517c582a5d9e3935c8323dd3aed9ec542b8f842cac899767bd7922d09ba5d97e9d6760458e2cf08cee1a1c"},"message":{"type":"string","example":"justaname wants you to sign in with your Ethereum account:\nAddress\n\nPlease sign this message to verify that you want to add/update your subdomain provided by justawallet to your account Address using JustAName\n\nURI: uri\nVersion: 1\nChain ID: ChainId\nNonce: nonce\nIssued At: Date\nExpiration Time: Date"},"address":{"type":"string","example":"0x1234567890123456789012345678901234567890"}},"required":["signature","message","address"]},"SiweVerifyMessageApiResponse":{"type":"object","properties":{"verified":{"type":"boolean","example":true}},"required":["verified"]},"SiweVerifyMessageApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SiweVerifyMessageApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SiweVerifyMessageApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SiweVerifyMessageApiResponseResultSwagger"}},"required":["statusCode","result"]},"SiweChallengeApiBodyRequest":{"type":"object","properties":{"domain":{"type":"string","description":"The domain name","example":"justaname"},"address":{"type":"string","description":"The address that will sign the message","example":"0x1234567890123456789012345678901234567890"},"origin":{"type":"string","description":"The origin requesting the challenge","example":"https://justaname.id"},"chainId":{"type":"number","description":"The chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":11155111},"ttl":{"type":"number","description":"Time to Live (TTL) in milliseconds (ms), default is 2 minutes (2 * 60 * 1000 = 120000 ms)","example":120000,"default":120000}},"required":["domain","address","origin","chainId"]},"SiweChallengeApiResponse":{"type":"object","properties":{"challenge":{"type":"string","description":"The challenge message","example":"domain wants you to sign in with your Ethereum account:\nAddress\n\nPlease sign this message to verify that you want to add/update your subdomain provided by justawallet to your account Address using JustAName\n\nURI: uri\nVersion: 1\nChain ID: ChainId\nNonce: nonce\nIssued At: Date\nExpiration Time: Date"}},"required":["challenge"]},"SiweChallengeApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SiweChallengeApiResponse"},"error":{"type":"string","nullable":true,"description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SiweChallengeApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SiweChallengeApiResponseResultSwagger"}},"required":["statusCode","result"]},"SiweVerifyApiBodyRequest":{"type":"object","properties":{"signature":{"type":"string","description":"The signature of the Siwe message","example":"0x6d2991c1b49e2cf6e6eeeead319fdb5ce213d79d4598517c582a5d9e3935c8323dd3aed9ec542b8f842cac899767bd7922d09ba5d97e9d6760458e2cf08cee1a1c"},"message":{"type":"string","description":"The message of the Siwe message","example":"justaname wants you to sign in with your Ethereum account:\nAddress\n\nPlease sign this message to verify that you want to add/update your subdomain provided by justawallet to your account Address using JustAName\n\nURI: uri\nVersion: 1\nChain ID: ChainId\nNonce: nonce\nIssued At: Date\nExpiration Time: Date"},"address":{"type":"string","description":"The address of the Siwe message","example":"0x1234567890123456789012345678901234567890"}},"required":["signature","message","address"]},"SiweVerifyApiResponse":{"type":"object","properties":{"verified":{"type":"boolean","description":"Whether the Siwe message passed the verification","example":true}},"required":["verified"]},"SiweVerifyApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SiweVerifyApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SiweVerifyApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SiweVerifyApiResponseResultSwagger"}},"required":["statusCode","result"]},"EnsAddApiRequest":{"type":"object","properties":{"ensDomain":{"type":"string"},"offchainResolverId":{"type":"string"},"workspaceId":{"type":"string"},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}},"required":["ensDomain","offchainResolverId","workspaceId"]},"EnsAddApiResponse":{"type":"object","properties":{"id":{"type":"string"}},"required":["id"]},"EnsAddApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EnsAddApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"EnsAddApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/EnsAddApiResponseResultSwagger"}},"required":["statusCode","result"]},"UpdateUserChosenLimitApiRequest":{"type":"object","properties":{"ensId":{"type":"string"},"userChosenLimit":{"type":"number"}},"required":["ensId","userChosenLimit"]},"RemoveUserChosenLimitApiRequest":{"type":"object","properties":{"ensId":{"type":"string"}},"required":["ensId"]},"EnsDeleteApiRequest":{"type":"object","properties":{"ensId":{"type":"string"}},"required":["ensId"]},"UpdateIsBlockedApiRequest":{"type":"object","properties":{"ens":{"type":"string"},"chainId":{"type":"number"},"isBlocked":{"type":"boolean"}},"required":["ens","chainId","isBlocked"]},"TransferEnsToNewWorkspaceApiRequest":{"type":"object","properties":{"ensId":{"type":"string"},"newWorkspaceId":{"type":"string"},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}},"required":["ensId","newWorkspaceId"]},"EnsApiResponse":{"type":"object","properties":{"ensId":{"type":"string"},"domainName":{"type":"string"},"userChosenLimit":{"type":"number"}},"required":["ensId","domainName","userChosenLimit"]},"EnsApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EnsApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"EnsApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/EnsApiResponseResultSwagger"}},"required":["statusCode","result"]},"EnsGetExpiryApiRequest":{"type":"object","properties":{"names":{"type":"array","items":{"type":"string"}}},"required":["names"]},"EnsGetExpiryApiResponse":{"type":"object","properties":{"name":{"type":"string"},"expiryDateBeforeGrace":{"type":"string","description":"UTC string; null for an imported name."},"expiryDate":{"type":"string","description":"UTC string; null for an imported name."},"gracePeriodExpiryDate":{"type":"number","description":"Length of the grace period in seconds, expiryDate minus expiryDateBeforeGrace: 7776000 (90 days) under ENSv1, 2419200 (28 days) under ENSv2. A duration despite the name. Null for an imported name.","nullable":true,"example":7776000},"status":{"type":"object"}},"required":["name","expiryDateBeforeGrace","expiryDate","gracePeriodExpiryDate","status"]},"EnsGetExpiryApiResponseResultSwagger":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/EnsGetExpiryApiResponse"}},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"EnsGetExpiryApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/EnsGetExpiryApiResponseResultSwagger"}},"required":["statusCode","result"]},"EnsGetSubscriptionApiResponse":{"type":"object","properties":{"isSubscribed":{"type":"boolean"}},"required":["isSubscribed"]},"EnsGetSubscriptionApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/EnsGetSubscriptionApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"EnsGetSubscriptionApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/EnsGetSubscriptionApiResponseResultSwagger"}},"required":["statusCode","result"]},"OffchainResolverApiResponse":{"type":"object","properties":{"id":{"type":"string"},"resolverAddress":{"type":"string"},"ensRegistryAddress":{"type":"string"},"chainId":{"type":"number"},"chainName":{"type":"string"},"environment":{"type":"string"}},"required":["id","resolverAddress","ensRegistryAddress","chainId","chainName","environment"]},"OffchainResolverGetAllApiResponse":{"type":"object","properties":{"offchainResolvers":{"type":"array","items":{"$ref":"#/components/schemas/OffchainResolverApiResponse"}}},"required":["offchainResolvers"]},"OffchainResolverGetAllApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/OffchainResolverGetAllApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"OffchainResolverGetByIdApiResponse":{"type":"object","properties":{"id":{"type":"string"},"resolverAddress":{"type":"string"},"ensRegistryAddress":{"type":"string"},"chainId":{"type":"number"},"chainName":{"type":"string"},"environment":{"type":"string"}},"required":["id","resolverAddress","ensRegistryAddress","chainId","chainName","environment"]},"OffchainResolverGetByIdApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/OffchainResolverGetByIdApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"Pagination":{"type":"object","properties":{"totalCount":{"type":"number","example":20},"page":{"type":"number","example":1},"limit":{"type":"number","example":10},"totalPages":{"type":"number","example":2},"nextPage":{"type":"number","example":2,"nullable":true},"prevPage":{"type":"number","example":null,"nullable":true},"hasNextPage":{"type":"boolean","example":true},"hasPrevPage":{"type":"boolean","example":false}},"required":["totalCount","page","limit","totalPages","nextPage","prevPage","hasNextPage","hasPrevPage"]},"OffchainResolverGetAllByCriteriaApiResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/OffchainResolverApiResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"]},"OffchainResolverUpdateApiRequest":{"type":"object","properties":{"id":{"type":"string"},"resolverAddress":{"type":"string"},"ensRegistryAddress":{"type":"string"},"nodeProvider":{"type":"string"},"indexerUrl":{"type":"string","description":"GraphQL indexer used for expiry lookups on this chain. Omit to keep the built-in default."},"ensV2RegistryAddress":{"type":"string","description":"ENSv2 .eth registry for this chain. Omit to discover it at runtime."},"environment":{"type":"object"}},"required":["id","resolverAddress","ensRegistryAddress","nodeProvider","environment"]},"OffchainResolverUpdateApiResponse":{"type":"object","properties":{"id":{"type":"string"},"resolverAddress":{"type":"string"},"ensRegistryAddress":{"type":"string"},"nodeProvider":{"type":"string"},"indexerUrl":{"type":"string","nullable":true},"ensV2RegistryAddress":{"type":"string","nullable":true},"environment":{"type":"object"}},"required":["id","resolverAddress","ensRegistryAddress","nodeProvider","environment"]},"OffchainResolverUpdateApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/OffchainResolverUpdateApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"OffchainResolverUpdateApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/OffchainResolverUpdateApiResponseResultSwagger"}},"required":["statusCode","result"]},"AddressEnsDto":{"type":"object","properties":{"address":{"type":"string"},"coinType":{"type":"number"}},"required":["address","coinType"]},"TextRecordDto":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"SubnameAcceptApiRequest":{"type":"object","properties":{"username":{"type":"string","description":"The username","example":"dev"},"ensDomain":{"type":"string","description":"The second-level domain","example":"jan.eth"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":11155111},"addresses":{"description":"The new addresses associated with the subdomain","example":[{"address":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","coinType":60},{"address":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa","coinType":0}],"type":"array","items":{"$ref":"#/components/schemas/AddressEnsDto"}},"text":{"description":"The new texts of the subdomain","example":[{"key":"twitter.com","value":"justaname_id"},{"key":"youtube.com","value":"justaname"}],"type":"array","items":{"$ref":"#/components/schemas/TextRecordDto"}},"contentHash":{"type":"string","description":"The new contentHash of the subdomain","example":"ipfs://QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4"},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}},"required":["username","ensDomain","chainId"]},"Text":{"type":"object","properties":{"key":{"type":"string","example":"com.twitter"},"value":{"type":"string","example":"justaname_id"}},"required":["key","value"]},"Coin":{"type":"object","properties":{"id":{"type":"number","example":60},"name":{"type":"string","example":"eth"},"value":{"type":"string","example":"0x1FA89227d0F42960eb5f5693fAFCF58e255A4dfa"}},"required":["id","name","value"]},"ContentHash":{"type":"object","properties":{"protocolType":{"type":"string","example":"ipfs"},"decoded":{"type":"string","example":"bafybeiafwq5iqeyk73or3dmzyjyqaauyzdwi3xtync7h6kp64umwvsiumi"}},"required":["protocolType","decoded"]},"RecordApiResponse":{"type":"object","properties":{"resolverAddress":{"type":"string","example":"0x48De002d3c64e4cFD130A87A35ECD960c01954bc"},"texts":{"example":[{"key":"com.twitter","value":"justaname_id"}],"type":"array","items":{"$ref":"#/components/schemas/Text"}},"coins":{"example":[{"id":60,"name":"eth","value":"0x1FA89227d0F42960eb5f5693fAFCF58e255A4dfa"}],"type":"array","items":{"$ref":"#/components/schemas/Coin"}},"contentHash":{"$ref":"#/components/schemas/ContentHash"}},"required":["resolverAddress","texts","coins","contentHash"]},"SubnameAcceptApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/RecordApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubnameAcceptApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SubnameAcceptApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SubnameAcceptApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SubnameAcceptApiResponseResultSwagger"}},"required":["statusCode","result"]},"SubnameReserveApiRequest":{"type":"object","properties":{"subname":{"type":"string","description":"The subname to reserve","example":"dev.jan.eth"},"chainId":{"type":"number","description":"The chain id","example":1},"ethAddress":{"type":"string","description":"The Ethereum address to reserve the subname for","example":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8"}},"required":["subname","chainId","ethAddress"]},"SubnameReserveApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/RecordApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubnameReserveApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SubnameReserveApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SubnameReserveApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SubnameReserveApiResponseResultSwagger"}},"required":["statusCode","result"]},"SubnameAddApiRequest":{"type":"object","properties":{"username":{"type":"string","description":"The username","example":"dev"},"ensDomain":{"type":"string","description":"The second-level domain","example":"jan.eth"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":11155111},"addresses":{"description":"The addresses corresponding to the subname","example":[{"address":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","coinType":60},{"address":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa","coinType":0}],"type":"array","items":{"$ref":"#/components/schemas/AddressEnsDto"}},"text":{"description":"The texts records corresponding to the subname","example":[{"key":"twitter.com","value":"justaname_id"},{"key":"youtube.com","value":"justaname"}],"type":"array","items":{"$ref":"#/components/schemas/TextRecordDto"}},"contentHash":{"type":"string","description":"The content hash of the subname","example":"ipfs://QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4"},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}},"required":["username","ensDomain","chainId","addresses"]},"SubnameAddApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/RecordApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubnameAddApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SubnameAddApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SubnameAddApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SubnameAddApiResponseResultSwagger"}},"required":["statusCode","result"]},"SubnameUpdateApiRequest":{"type":"object","properties":{"username":{"type":"string","description":"The username","example":"dev"},"ensDomain":{"type":"string","description":"The second-level domain","example":"jan.eth"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":11155111},"addresses":{"description":"The new addresses associated with the subdomain","example":[{"address":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","coinType":60},{"address":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa","coinType":0}],"type":"array","items":{"$ref":"#/components/schemas/AddressEnsDto"}},"text":{"description":"The new texts of the subdomain","example":[{"key":"twitter.com","value":"justaname_id"},{"key":"youtube.com","value":"justaname"}],"type":"array","items":{"$ref":"#/components/schemas/TextRecordDto"}},"contentHash":{"type":"string","description":"The new contentHash of the subdomain","example":"ipfs://QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4"},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}},"required":["username","ensDomain","chainId"]},"SubnameUpdateApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/RecordApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubnameUpdateApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SubnameUpdateApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SubnameUpdateApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SubnameUpdateApiResponseResultSwagger"}},"required":["statusCode","result"]},"SubnameAddContractApiRequest":{"type":"object","properties":{"username":{"type":"string","description":"The username","example":"dev"},"ensDomain":{"type":"string","description":"The second-level domain","example":"jan.eth"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":11155111},"addresses":{"description":"The contract address","example":[{"address":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","coinType":60}],"type":"array","items":{"$ref":"#/components/schemas/AddressEnsDto"}},"providerUrls":{"description":"The node provider url","example":"https://eth-mainnet.g.alchemy.com/v2","type":"array","items":{"type":"string"}}},"required":["username","ensDomain","chainId","addresses","providerUrls"]},"SubnameAddContractApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/RecordApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubnameAddContractApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SubnameAddContractApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SubnameAddContractApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SubnameAddContractApiResponseResultSwagger"}},"required":["statusCode","result"]},"SubnameRevokeApiRequest":{"type":"object","properties":{"ensDomain":{"type":"string","description":"The second-level domain","example":"jan.eth"},"username":{"type":"string","description":"The username","example":"dev"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":11155111},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}},"required":["ensDomain","username","chainId"]},"SubnameRevokeApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/RecordApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubnameRevokeApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/SubnameRevokeApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"SubnameRevokeApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/SubnameRevokeApiResponseResultSwagger"}},"required":["statusCode","result"]},"BaseApiResponseSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."}},"required":["statusCode"]},"SubdomainGetApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/RecordApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubnameApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/RecordApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubdomainGetAllApiResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubnameApiResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"]},"SubnameGetByNameAndChainIdApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/RecordApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubnameGetAllEnsAndChainIdApiResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubnameApiResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"]},"SubnameGetSubnamesByAddressApiResponse":{"type":"object","properties":{"subnames":{"example":[{"ens":"user.justan.id","isClaimed":true,"claimedAt":"2024-05-22T11:55:29.000Z","isJAN":true,"records":{"resolverAddress":"0x48De002d3c64e4cFD130A87A35ECD960c01954bc","texts":[{"key":"com.twitter","value":"justaname_id"}],"coins":[{"id":60,"name":"eth","value":"0x1FA89227d0F42960eb5f5693fAFCF58e255A4dfa"}],"contentHash":{"protocolType":"ipfs","decoded":"bafybeiafwq5iqeyk73or3dmzyjyqaauyzdwi3xtync7h6kp64umwvsiumi"}}}],"type":"array","items":{"$ref":"#/components/schemas/SubnameApiResponse"}}},"required":["subnames"]},"SubnameGetRecordsApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/RecordApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubnameIsSubnameAvailableApiResponse":{"type":"object","properties":{"isAvailable":{"type":"boolean","example":false,"description":"True if the subname is available, otherwise false."}},"required":["isAvailable"]},"SubnameSearchApiResponse":{"type":"object","properties":{"domains":{"type":"array","items":{"type":"string"}},"registered":{"type":"boolean"}},"required":["domains","registered"]},"SubnameAllEnsWithSubnameCountApiResponse":{"type":"object","properties":{"ensDomain":{"type":"string","example":"justan.id"},"subnameCount":{"type":"number","example":2},"ensSubname":{"$ref":"#/components/schemas/SubnameApiResponse"}},"required":["ensDomain","subnameCount","ensSubname"]},"SubnameGetAllEnsWithSubnameCountApiResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SubnameAllEnsWithSubnameCountApiResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"]},"SubnameTextRecordApiResponse":{"type":"object","properties":{"key":{"type":"string","example":"com.twitter"},"value":{"type":"string","example":"justaname_id"}},"required":["key","value"]},"SubnameAddressApiResponse":{"type":"object","properties":{"id":{"type":"number","example":60},"name":{"type":"string","example":"eth"},"value":{"type":"string","example":"0x1FA89227d0F42960eb5f5693fAFCF58e255A4dfa"}},"required":["id","name","value"]},"SubnameContentHashApiResponse":{"type":"object","properties":{"protocolType":{"type":"string","example":"ipfs"},"decoded":{"type":"string","example":"bafybeiafwq5iqeyk73or3dmzyjyqaauyzdwi3xtync7h6kp64umwvsiumi"}},"required":["protocolType","decoded"]},"SubnameMetadataApiResponse":{"type":"object","properties":{"resolverAddress":{"type":"string","example":"0x48De002d3c64e4cFD130A87A35ECD960c01954bc"},"texts":{"example":[{"key":"com.twitter","value":"justaname_id"}],"type":"array","items":{"$ref":"#/components/schemas/SubnameTextRecordApiResponse"}},"addresses":{"example":[{"id":60,"name":"eth","value":"0x1FA89227d0F42960eb5f5693fAFCF58e255A4dfa"}],"type":"array","items":{"$ref":"#/components/schemas/SubnameAddressApiResponse"}},"contentHash":{"$ref":"#/components/schemas/SubnameContentHashApiResponse"}},"required":["resolverAddress","texts","addresses","contentHash"]},"SubnameGetApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/SubnameMetadataApiResponse"}},"required":["ens","isClaimed","claimedAt","isJAN","records"]},"SubnameGetApiResponseResultSwagger":{"type":"object","properties":{"data":{"description":"Subname data or null if error occurred","allOf":[{"$ref":"#/components/schemas/SubnameGetApiResponse"}]},"error":{"type":"string","nullable":true,"description":"Error message if operation failed, null otherwise","example":null}},"required":["data","error"]},"SubnameGetApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"HTTP status code of the response"},"result":{"description":"Response payload containing subname data or error","allOf":[{"$ref":"#/components/schemas/SubnameGetApiResponseResultSwagger"}]}},"required":["statusCode","result"]},"SubnamePaginationApiResponse":{"type":"object","properties":{"page":{"type":"number","description":"Current page number","example":1},"limit":{"type":"number","description":"Number of items per page","example":20},"totalPages":{"type":"number","description":"Total number of pages","example":5},"totalItems":{"type":"number","description":"Total number of items","example":100},"hasNext":{"type":"boolean","description":"Whether there is a next page","example":true},"hasPrevious":{"type":"boolean","description":"Whether there is a previous page","example":false}},"required":["page","limit","totalPages","totalItems","hasNext","hasPrevious"]},"SubnameGetAllApiResponse":{"type":"object","properties":{"data":{"description":"Array of subnames","type":"array","items":{"$ref":"#/components/schemas/SubnameApiResponse"}},"pagination":{"description":"Pagination information","allOf":[{"$ref":"#/components/schemas/SubnamePaginationApiResponse"}]}},"required":["data","pagination"]},"SubnameGetAllApiResponseResultSwagger":{"type":"object","properties":{"data":{"description":"Subnames data or null if error occurred","allOf":[{"$ref":"#/components/schemas/SubnameGetAllApiResponse"}]},"error":{"type":"string","nullable":true,"description":"Error message if operation failed, null otherwise","example":null}},"required":["data","error"]},"SubnameGetAllApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"HTTP status code of the response"},"result":{"description":"Response payload containing subnames data or error","allOf":[{"$ref":"#/components/schemas/SubnameGetAllApiResponseResultSwagger"}]}},"required":["statusCode","result"]},"SubnameRecordsApiResponse":{"type":"object","properties":{"ens":{"type":"string","example":"user.justan.id"},"isClaimed":{"type":"boolean","example":true},"claimedAt":{"type":"string","example":"2024-05-22T11:55:29.000Z"},"isJAN":{"type":"boolean","example":true},"records":{"$ref":"#/components/schemas/SubnameMetadataApiResponse"},"viaUniversalResolver":{"type":"boolean","example":true,"description":"True when the resolution was performed through the ENS Universal Resolver (ENSv2-ready path). The live canary spec at apps/ens/test/.../universal-resolver.canary.spec.ts guards this guarantee against regressions."}},"required":["ens","isClaimed","claimedAt","isJAN","records","viaUniversalResolver"]},"SubnameRecordsApiResponseResultSwagger":{"type":"object","properties":{"data":{"description":"Subname records data or null if error occurred","allOf":[{"$ref":"#/components/schemas/SubnameRecordsApiResponse"}]},"error":{"type":"string","nullable":true,"description":"Error message if operation failed, null otherwise","example":null}},"required":["data","error"]},"SubnameRecordsApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"HTTP status code of the response"},"result":{"description":"Response payload containing records data or error","allOf":[{"$ref":"#/components/schemas/SubnameRecordsApiResponseResultSwagger"}]}},"required":["statusCode","result"]},"SubnameAddressApiRequest":{"type":"object","properties":{"address":{"type":"string"},"coinType":{"type":"number"}},"required":["address","coinType"]},"SubnameTextRecordApiRequest":{"type":"object","properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"]},"SubnameAddApiBodyRequest":{"type":"object","properties":{"subname":{"type":"string","description":"The subname to add","example":"dev.jan.eth"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":11155111},"addresses":{"description":"The addresses corresponding to the subname","example":[{"address":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","coinType":60},{"address":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa","coinType":0}],"type":"array","items":{"$ref":"#/components/schemas/SubnameAddressApiRequest"}},"textRecords":{"description":"The text records corresponding to the subname","example":[{"key":"twitter.com","value":"justaname_id"},{"key":"youtube.com","value":"justaname"}],"type":"array","items":{"$ref":"#/components/schemas/SubnameTextRecordApiRequest"}},"contentHash":{"type":"string","description":"The content hash of the subname","example":"ipfs://QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4"},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}},"required":["subname","chainId"]},"SubnameUpdateApiBodyRequest":{"type":"object","properties":{"addresses":{"description":"The new addresses associated with the subname","example":[{"address":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","coinType":60},{"address":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa","coinType":0}],"type":"array","items":{"$ref":"#/components/schemas/SubnameAddressApiRequest"}},"textRecords":{"description":"The new text records of the subdomain","example":[{"key":"twitter.com","value":"justaname_id"},{"key":"youtube.com","value":"justaname"}],"type":"array","items":{"$ref":"#/components/schemas/SubnameTextRecordApiRequest"}},"contentHash":{"type":"string","description":"The new content hash of the subname","example":"ipfs://QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4"},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}}},"SubnameAcceptApiBodyRequest":{"type":"object","properties":{"addresses":{"description":"The new addresses associated with the subname","example":[{"address":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","coinType":60},{"address":"1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa","coinType":0}],"type":"array","items":{"$ref":"#/components/schemas/SubnameAddressApiRequest"}},"textRecords":{"description":"The new text records of the subname","example":[{"key":"twitter.com","value":"justaname_id"},{"key":"youtube.com","value":"justaname"}],"type":"array","items":{"$ref":"#/components/schemas/SubnameTextRecordApiRequest"}},"contentHash":{"type":"string","description":"The new content hash of the subname","example":"ipfs://QmRAQB6YaCyidP37UdDnjFY5vQuiBrcqdyoW1CuDgwxkD4"},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}}},"SubnameRevokeApiBodyRequest":{"type":"object","properties":{"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}}},"ResolveApiResponseResultSwagger":{"type":"object","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/SubnameRecordsApiResponse"},{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/SubnameRecordsApiResponse"},{"type":"null"}]}}],"description":"Resolved records. Object when a single ens was requested; array (same length as input, in order, null for failures) when multiple were requested."},"error":{"type":"string","nullable":true,"description":"Error message if the entire request failed, null otherwise.","example":null}},"required":["data","error"]},"ResolveApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"HTTP status code of the response"},"result":{"description":"Response payload containing resolved records.","allOf":[{"$ref":"#/components/schemas/ResolveApiResponseResultSwagger"}]}},"required":["statusCode","result"]},"ReverseApiEntry":{"type":"object","properties":{"address":{"type":"string","example":"0xb965a5f3a0fc18d84e68883ccad508445a7917a8","description":"The lowercased address that was queried."},"name":{"type":"string","nullable":true,"example":"vitalik.eth","description":"Reverse-resolved ENS name, or null if no verified reverse exists for (address, coinType). ENSIP-19 round-trip verified by viem."},"coinType":{"type":"number","example":60,"description":"The coinType used in the lookup. When the input address carried an interop chain suffix (e.g. 0x...@eip155:1) the value reflects that suffix; otherwise it is the request-level coinType passed in the query."},"viaUniversalResolver":{"type":"boolean","example":true,"description":"True when the resolution came from the ENS Universal Resolver (steps 1–2 of the fallback chain: caller-supplied coinType, or the ENSIP-19 default coinType). False when the on-chain lookup returned no verified reverse and the name was served from the JAW.id offchain primary-name store."},"records":{"nullable":true,"description":"ENS records of the resolved name (same shape as /v2/resolve). Present only when the request was made with records=true; null when the reverse resolved to name: null or the records lookup failed.","allOf":[{"$ref":"#/components/schemas/SubnameRecordsApiResponse"}]}},"required":["address","name","coinType","viaUniversalResolver"]},"ReverseApiBatchEntry":{"type":"object","properties":{"address":{"type":"string","example":"0xb965a5f3a0fc18d84e68883ccad508445a7917a8","description":"The lowercased address that was queried (chain suffix stripped)."},"name":{"type":"string","nullable":true,"example":"vitalik.eth","description":"Reverse-resolved ENS name, or null if no verified reverse exists for (address, coinType) or the slot failed."},"coinType":{"type":"number","nullable":true,"example":60,"description":"The coinType used in the lookup. Null when the slot failed before reaching the RPC call (preflight failure: malformed interop suffix, unsupported chain label, or missing coinType for a plain address)."},"viaUniversalResolver":{"type":"boolean","example":true,"description":"True when the slot resolved via the ENS Universal Resolver (steps 1–2 of the fallback chain: caller-supplied coinType, or the ENSIP-19 default coinType). False when the slot was served from the JAW.id offchain primary-name store after both on-chain attempts returned null."},"error":{"type":"string","nullable":true,"example":null,"description":"Per-item error message if this slot failed to resolve. Only present in batch responses."},"records":{"nullable":true,"description":"ENS records of the resolved name (same shape as /v2/resolve). Present only when the request was made with records=true; null when the slot resolved to name: null, the slot failed, or the records lookup failed.","allOf":[{"$ref":"#/components/schemas/SubnameRecordsApiResponse"}]}},"required":["address","name","coinType","viaUniversalResolver","error"]},"ReverseApiResponseResultSwagger":{"type":"object","properties":{"data":{"oneOf":[{"$ref":"#/components/schemas/ReverseApiEntry"},{"type":"array","items":{"$ref":"#/components/schemas/ReverseApiBatchEntry"}}],"description":"Reverse resolution result. Object when a single address was requested; array (same length as input, in order) when multiple were requested."},"error":{"type":"string","nullable":true,"description":"Error message if the entire request failed, null otherwise.","example":null}},"required":["data","error"]},"ReverseApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"HTTP status code of the response"},"result":{"description":"Response payload containing the reverse resolution result.","allOf":[{"$ref":"#/components/schemas/ReverseApiResponseResultSwagger"}]}},"required":["statusCode","result"]},"PricingApiEntry":{"type":"object","properties":{"path":{"type":"string","example":"/ens/v2/reverse"},"method":{"type":"string","example":"GET"},"schemes":{"example":["x402","mpp-charge"],"description":"Payment schemes the route accepts, in precedence order. Clients that understand the first scheme should send proofs in that wire format; the server will accept any of them and dispatch by inbound headers.","type":"array","items":{"type":"string"}},"amount":{"type":"string","example":"5000","description":"Amount required, in base units of the asset (USDC has 6 decimals; 5000 means 0.005 USDC)."},"asset":{"type":"string","example":"USDC"},"network":{"type":"string","example":"eip155:8453","description":"CAIP-2 network identifier (eip155:8453 = Base mainnet)."},"recipient":{"type":"string","example":"0xb965a5f3a0fc18d84e68883ccad508445a7917a8","description":"Address that receives the payment."}},"required":["path","method","schemes","amount","asset","network","recipient"]},"PricingApiResponse":{"type":"object","properties":{"routes":{"type":"array","items":{"$ref":"#/components/schemas/PricingApiEntry"}}},"required":["routes"]},"PricingApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PricingApiResponse"},"error":{"type":"string","nullable":true,"example":null}},"required":["data","error"]},"PricingApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200},"result":{"$ref":"#/components/schemas/PricingApiResponseResultSwagger"}},"required":["statusCode","result"]},"PrimaryNameApiResponse":{"type":"object","properties":{"name":{"type":"string","example":"justghadi.jaw.eth"},"address":{"type":"string","example":"0x23d3957be879aba6ca925ee4f072d1a8c4e8c890"},"nameHash":{"type":"string","example":"0xe16944c2d7405e74b0263328cc8ad84415ba33fbcebd86e57718c72bc7f9442f"},"chainId":{"type":"number","example":11155111}},"required":["name","address","nameHash","chainId"]},"PrimaryNameApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PrimaryNameApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"PrimaryNameApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/PrimaryNameApiResponseResultSwagger"}},"required":["statusCode","result"]},"PrimaryNameGetByAddressBatchApiRequest":{"type":"object","properties":{"addresses":{"description":"The addresses of the primary names","example":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8","type":"array","items":{"type":"string"}},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":11155111,"enum":[1,11155111]}},"required":["addresses","chainId"]},"PrimaryNameGetAllApiResponse":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/PrimaryNameApiResponse"}},"pagination":{"$ref":"#/components/schemas/Pagination"}},"required":["data","pagination"]},"PrimaryNameAddApiRequest":{"type":"object","properties":{"name":{"type":"string","description":"The subname","example":"ghadi.jan.eth"},"address":{"type":"string","description":"The address of the primary name","example":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":11155111},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}},"required":["name","address","chainId"]},"PrimaryNameAddApiResponse":{"type":"object","properties":{"id":{"type":"string","example":"id"}},"required":["id"]},"PrimaryNameAddApiResponseResultSwagger":{"type":"object","properties":{"data":{"$ref":"#/components/schemas/PrimaryNameAddApiResponse"},"error":{"type":"string","description":"Null if no error occurred, otherwise the error message."}},"required":["data","error"]},"PrimaryNameAddApiResponseSuccessSwagger":{"type":"object","properties":{"statusCode":{"type":"number","example":200,"description":"The status code of the response."},"result":{"$ref":"#/components/schemas/PrimaryNameAddApiResponseResultSwagger"}},"required":["statusCode","result"]},"PrimaryNameSetApiBodyRequest":{"type":"object","properties":{"name":{"type":"string","description":"The subname","example":"ghadi.jan.eth"},"address":{"type":"string","description":"The address of the primary name","example":"0xb965a5f3a0fC18D84E68883ccAd508445a7917A8"},"chainId":{"type":"number","description":"Chain id, we only support Ethereum Mainnet and Sepolia Testnet (1 for mainnet, 11155111 for sepolia)","example":11155111},"signature":{"type":"string","description":"Signature of the Siwe message","example":"0x..."}},"required":["name","address","chainId"]}}},"x-discovery":{"ownershipProofs":[]}}