How to update identity?
Process of updating an identity
Arrange Identity
Arrange identity in the format
If want to remove addresses from secondary, do not add them in the list
If want to add new addresses in secondary, add them in secondary list
If want to keep some addresses in secondary, then keep them in the data
{
"id": "string",
"identifier": "string",
"provider": "string",
"default": {
"address": "address",
"chain": number,
"isContract": boolean
},
"secondary": [
{
"address": "address",
"chain": number,
"isContract": boolean
},
{
"address": "address",
"chain": number,
"isContract": boolean
}
]
}
Generate Message
Using the above arranged identity, generate a message using the below endpoint and sign it using default address by following guide for respective chains
POST /v1/identity/generate-message HTTP/1.1
Host: sandbox-api.fetcch.xyz
secret-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 280
{
"id": "text",
"identifier": "text",
"provider": "text",
"default": {
"address": "text",
"chain": 1,
"isSmartContractWallet": true,
"isMultisig": true
},
"secondary": [
{
"address": "text",
"chain": 1,
"isSmartContractWallet": true,
"isMultisig": true
}
],
"currentSignature": "text",
"previousSignature": "text"
}{
"data": {
"message": "ds"
},
"status": 200,
"timestamp": ""
}After generating message, you need to sign message using appropriate functions for respective chains, check our guide for each blockchain here
There are 2 signatures needed while updating identity
currentSignature- Will be signed by current (new)defaultaddresspreviousSignature- Will be signed by previous (old)defaultaddress, only ifdefaultis updatedIf
defaultisn't updated, you need to use same signature for bothcurrentSignatureandpreviousSignature
Update Identity
After signing the message, add the generated signature in the arranged identity, at currentSignature and previousSignature respectively
Now, data should look something like this
{
"id": "string",
"identifier": "string",
"provider": "string",
"default": {
"address": "address",
"chain": number,
"isMultisig": boolean,
"isSmartContractWallet": boolean
},
"secondary": [
{
"address": "address",
"chain": number,
"isMultisig": boolean,
"isSmartContractWallet": boolean
},
{
"address": "address",
"chain": number,
"isMultisig": boolean,
"isSmartContractWallet": boolean
}
],
"currentSignature": "string",
"previousSignature": "string"
}Call Update Identity API
Important Note
If
defaultchain isAPTOS, then while calling this API, swapdefaultaddress with public key of the same address, so that we can easily verify signaturesIf
defaultis changing in this request, then send previousdefaultaddress's public key inextraData: { publicKey: "" }For example
satyam@martianhasAPTOShas default chainIn this request, we are updating it to
EVMSigned message using
EVMaddress will be incurrentSignatureSigned message using
APTOSaddress will be inpreviousSignatureTo verify
previousSignature, we need to havepublicKeyof theAPTOSaddress, which we will send inextraData
So now, data will look something like this
{
"id": "string",
"identifier": "string",
"provider": "string",
"default": {
"address": "address",
"chain": number,
"isMultisig": boolean,
"isSmartContractWallet": boolean
},
"secondary": [
{
"address": "address",
"chain": number,
"isMultisig": boolean,
"isSmartContractWallet": boolean
},
{
"address": "address",
"chain": number,
"isMultisig": boolean,
"isSmartContractWallet": boolean
}
],
"currentSignature": "string",
"previousSignature": "string",
"extraData": {
"publicKey": "string"
}
}PATCH /v1/identity HTTP/1.1
Host: sandbox-api.fetcch.xyz
secret-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 242
{
"id": "text",
"default": {
"address": "text",
"chain": 1,
"isSmartContractWallet": true,
"isMultisig": true
},
"secondary": [
{
"address": "text",
"chain": 1,
"isSmartContractWallet": true,
"isMultisig": true
}
],
"currentSignature": "text",
"previousSignature": "text"
}{
"id": "text",
"identifier": "text",
"providerId": "text",
"provider": {
"id": "text",
"logo": "text",
"apiKey": "text",
"delimiter": "text",
"txHash": "text",
"registry": [
{
"address": "text",
"chainType": "EVM",
"txHash": "text",
"providerId": "text",
"provider": {
"id": "text",
"logo": "text",
"apiKey": "text",
"delimiter": "text",
"txHash": "text",
"registry": [
"[Circular Reference]"
],
"dataSourceId": 1,
"ownerId": "text",
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
}
}
],
"dataSourceId": 1,
"ownerId": "text",
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"defaultAddress": "text",
"default": {
"address": "text",
"chain": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"chainId": 1,
"isMultisig": false,
"isSmartContractWallet": false,
"walletId": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"secondary": [
{
"id": "text",
"address": "text",
"isMultisig": false,
"isSmartContractWallet": false,
"chainId": 1,
"chain": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"walletId": "text",
"identity": {
"id": "text",
"identifier": "text",
"providerId": "text",
"provider": {
"id": "text",
"logo": "text",
"apiKey": "text",
"delimiter": "text",
"txHash": "text",
"registry": [
{
"address": "text",
"chainType": "EVM",
"txHash": "text",
"providerId": "text",
"provider": {
"id": "text",
"logo": "text",
"apiKey": "text",
"delimiter": "text",
"txHash": "text",
"registry": [
"[Circular Reference]"
],
"dataSourceId": 1,
"ownerId": "text",
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
}
}
],
"dataSourceId": 1,
"ownerId": "text",
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"defaultAddress": "text",
"default": {
"address": "text",
"chain": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"chainId": 1,
"isMultisig": false,
"isSmartContractWallet": false,
"walletId": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"secondary": [
{
"id": "text",
"address": "text",
"isMultisig": false,
"isSmartContractWallet": false,
"chainId": 1,
"chain": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"walletId": "text",
"identity": "[Circular Reference]",
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
}
],
"nonce": 0,
"currentSignature": "text",
"previousSignature": "text",
"isContract": false,
"syncedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
}
],
"nonce": 0,
"currentSignature": "text",
"previousSignature": "text",
"isContract": false,
"syncedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
}Identity should now be created, if faced with any error, check our troubleshooting guide or ask in our discord
Resolve Identity
satyams@fetcch0x8E9e20b90efa7d0A072bfc8b0C74D96104F1F6FE0x8E9e20b90efa7d0A072bfc8b0C74D96104F1F6FE34423232GET /v1/identity HTTP/1.1
Host: sandbox-api.fetcch.xyz
secret-key: YOUR_API_KEY
Accept: */*
{
"data": {
"id": "text",
"identifier": "text",
"providerId": "text",
"provider": {
"id": "text",
"logo": "text",
"apiKey": "text",
"delimiter": "text",
"txHash": "text",
"registry": [
{
"address": "text",
"chainType": "EVM",
"txHash": "text",
"providerId": "text",
"provider": {
"id": "text",
"logo": "text",
"apiKey": "text",
"delimiter": "text",
"txHash": "text",
"registry": "[Circular Reference]",
"dataSourceId": 1,
"ownerId": "text",
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
}
}
],
"dataSourceId": 1,
"ownerId": "text",
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"defaultAddress": "text",
"default": {
"address": "text",
"chain": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"chainId": 1,
"isMultisig": false,
"isSmartContractWallet": false,
"walletId": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"secondary": [
{
"id": "text",
"address": "text",
"isMultisig": false,
"isSmartContractWallet": false,
"chainId": 1,
"chain": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"walletId": "text",
"identity": {
"id": "text",
"identifier": "text",
"providerId": "text",
"provider": {
"id": "text",
"logo": "text",
"apiKey": "text",
"delimiter": "text",
"txHash": "text",
"registry": [
{
"address": "text",
"chainType": "EVM",
"txHash": "text",
"providerId": "text",
"provider": {
"id": "text",
"logo": "text",
"apiKey": "text",
"delimiter": "text",
"txHash": "text",
"registry": "[Circular Reference]",
"dataSourceId": 1,
"ownerId": "text",
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
}
}
],
"dataSourceId": 1,
"ownerId": "text",
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"defaultAddress": "text",
"default": {
"address": "text",
"chain": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"chainId": 1,
"isMultisig": false,
"isSmartContractWallet": false,
"walletId": {
"id": 1,
"name": "text",
"symbol": "text",
"icon": "text",
"rpc": [
"text"
],
"type": "EVM",
"shortName": "text",
"infoURL": "text",
"chainId": 1,
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"secondary": [
"[Circular Reference]"
],
"nonce": 0,
"currentSignature": "text",
"previousSignature": "text",
"isContract": false,
"syncedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"updatedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
}
],
"nonce": 0,
"currentSignature": "text",
"previousSignature": "text",
"isContract": false,
"syncedAt": "2025-11-06T17:48:05.110Z",
"createdAt": "2025-11-06T17:48:05.110Z"
},
"status": 1,
"timestamp": "2025-11-06T17:48:05.110Z"
}Last updated