Skip to main content
POST
Writes a claim to the registry from a hash you supply. It covers the four slots that are not backed by a proof.
The registry keeps one claim per slot. Filing a slot replaces the claim already there, whoever wrote it. The API does not check that the wallet holds an active identity, and the register reverts addClaim for one that does not.
KYC, ACCREDITATION, RESIDENCY and CITIZENSHIP are refused here with PROOF_REQUIRED. Those four slots are reserved on this API for claims filed from a proof bundle. File them with Add Claims from Proof or Attest Proofs. The one exception is the RESIDENCY claim that Build Pending Registration files with a queued approval.The register does not enforce the reservation. A wallet holding KYC_PROVIDER_ROLE can write any slot by calling the register directly.

Body Parameters

string
required
The subject.
string | integer
required
One of AML, TAX_RESIDENCY, SANCTIONS_CHECK, PEP_CHECK, by name or index.
string
The claim’s payload as a 32-byte hex hash, 0x and 64 hex characters. What it commits to is your convention. When both fields are sent, a valid dataHash wins.
string
A string to derive the hash from instead. The hash is keccak256 over the UTF-8 JSON {"claimType":"<name>","data":"<input>","wallet":"<wallet>"}, with the input trimmed and the wallet lowercased. The same input under a different slot or subject therefore gives a different hash.Supply this or dataHash.
integer
Days until the claim expires, between 0 and 36500. 0 or omitted means no expiry.
string
Send it to confirm. Omit it to receive the calldata.
string
ERC-3643 register only. The EIP-191 signature over the messageHash from a SIGN_MESSAGES answer, as 65-byte hex.
string
ERC-3643 register only. The instance wallet that signs the claim. It must hold a CLAIM key on the register’s trusted issuer.

Sign and confirm

On the Trusset register the calldata calls addClaim on the register, which needs a wallet holding KYC_PROVIDER_ROLE. Before handing it out, the API checks that one of your instance’s registered wallets holds that role, and refuses with KYC_PROVIDER_ROLE_MISSING otherwise. It skips the check when the instance has no registered wallet or the role cannot be read. On the Trusset ID Register, which instances without a register of their own share, it also refuses with 403 IDENTITY_HELD_BY_ANOTHER_ISSUER when the wallet’s identity was registered by a wallet that is not one of your instance’s, and with 409 IDENTITY_NOT_REGISTERED when the wallet holds no active identity, which the register would refuse. The confirm leg requires a mined, successful addClaim on this instance’s register that targets this wallet. It reads the slot, hash and expiry back out of the transaction and reports them, rather than comparing them with your request. On the Trusset ID Register the transaction must be signed by a verified wallet of your instance (UNAUTHORIZED_SIGNER otherwise). It records the claim once in your instance’s verification history as an ADD_CLAIM entry with the claim type, hash, expiry, transaction and signer; confirming the same txHash again writes no second entry.

On an ERC-3643 register

When the instance is bound to an ERC-3643 register, the claim is written to the subject’s ONCHAINID. It needs a signature from a CLAIM key on the register’s trusted issuer.
  1. The first call answers SIGN_MESSAGES. Sign the messageHash in messages as an EIP-191 personal message with a wallet that holds a CLAIM key on claimIssuer.
  2. Call again with claimSignature. The answer is SIGN_TRANSACTIONS, with one addClaim step addressed to the ONCHAINID.
  3. Broadcast it and confirm with txHash.
A wallet with no ONCHAINID is refused with NOT_REGISTERED. Deploy one first with POST /customers/api/identity/onchainid and confirm it, so it is recorded. The claim carries no expiry, so expiryDays is not written and the confirm leg reports expiry: 0. The role check becomes an agent check on the register.

Response Fields

object

Error Codes