FPCN
Guides
Identity

Identity

Find Identity

💡secret-key required

Route - /v1/identity

Method - GET

URL Query - ?id=satyam@metamask or ?signedMessage=SIGNATURE

Response -

{
  "status": 200,
  "timestamp": "",
  "data": {
    "id": "sax@metamask",
    "identifier": "sax",
    "provider": {...provider object},
    "default": {
      "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
      "chain": {...chain object},
      "isContract": false
    },
    "secondary": [
      {
        "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
        "chain": {...chain object},
        "isContract": false
      },
      {
        "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
        "chain": {...chain object},
        "isContract": false
      }
    ],
    "dataSourceTx": {
      "txId": "ARWEAVE_IPFS_CID",
      "txURL": "ARWEAVE_IPFS_URL"
    },
    "currentSignature": "SIGNATURE"
  }
}

Generate Message

💡 Sign this message with the default address so that smart contract can validate

Route - /v1/identity/generate-message

Method - POST

Request body -

{
    "identifier": "satyam",
    "provider": "metamask",
    "default": {
      "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
      "chain": 3,
      "isContract": false
    },
    "secondary": [
      {
        "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
        "chain": 1,
        "isContract": false
      },
      {
        "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
        "chain": 2,
        "isContract": false
      }
    ],
}

Response -

{
  "status": 200,
  "timestamp": "",
  "data": {
    "message": "Creating sax@fetcch onbehalf of user evm:0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c\n\n{\"id\":\"sax@fetcch\",\"identifier\":\"sax\",\"provider\":{\"id\":\"fetcch\",\"delimiter\":\"@\"},\"default\":{\"address\":\"0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c\",\"chain\":{\"id\":3,\"name\":\"Binance Smart Chain Mainnet\",\"chainId\":56,\"type\":\"EVM\"},\"isContract\":false},\"others\":[],\"nonce\":1}\n\nProvider: fetcch\nChain ID: 56\nNonce: 1",
    "nonce": 1,
    "identity": {
      ...identity object
    },
    "providerSignature": "0x020b48ac334f0af6f51205f2efb437c800ccffb7f59f55445dcbafdee0068420"
  }
}

Create Identity

💡 secret-key required

If using APTOS as default chain, send public key of the user instead of address, public key is needed to verify signed messages, though we convert it to address and then store, so further interactions can be done using addresses and not public keys

Above point valid only for default chain

Route - /v1/identity/

Method - POST

Request Body -

{
  "identifier": "sax",
  "provider": "metamask",
  "default": {
    "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
    "chain": 3,
    "isContract": false
  },
  "secondary": [
    {
      "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
      "chain": 1,
      "isContract": false
    },
    {
      "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
      "chain": 2,
      "isContract": false
    }
  ],
  "currentSignature": "SIGNATURE"
}

Response -

{
  "status": 200,
  "timestamp": "",
  "data": {
    "id": "sax@metamask",
    "identifier": "sax",
    "provider": {...provider object},
    "default": {
      "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
      "chain": {...chain object},
      "isContract": false
    },
    "secondary": [
      {
        "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
        "chain": {...chain object},
        "isContract": false
      },
      {
        "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
        "chain": {...chain object},
        "isContract": false
      }
    ],
    "dataSourceTx": {
      "txId": "ARWEAVE_IPFS_CID",
      "txURL": "ARWEAVE_IPFS_URL"
    },
    "currentSignature": "SIGNATURE"
  }
}

Update Identity

💡 secret-key required

Updating secondary addresses from previous identity

💡 if default.address is being updated from APTOS to some chain, you must send extraData along with identity in format mentioned below, extraData will contain previous publicKey which will be used to verify previousSignature signed by previous default.address

{
	...identity,
	"extraData": {
		"publicKey": "0x...."
	}
}

💡 Above is only applicable if default.chain is updated from APTOS to some chain (incl APTOS)

Route - /v1/identity/

Method - PATCH

Request Body -

{
  "identifier": "sax",
  "provider": "metamask",
  "default": {
    "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
    "chain": 3,
    "isContract": false
  },
  "secondary": [],
  "currentSignature": "SIGNATURE"
}

Response -

{
  "status": 200,
  "timestamp": "",
  "data": {
    "id": "sax@metamask",
    "identifier": "sax",
    "provider": {...provider object},
    "default": {
      "address": "0x9aDF83d1bB317DA878C8677E5d108CecFcFe290c",
      "chain": {...chain object},
      "isContract": false
    },
    "secondary": [],
    "currentSignature": "SIGNATURE"
  }
}
Last updated on March 7, 2023