SettleMint
Developer guidesCompliance

Configure trusted issuers

Configure trusted entities who can issue verifications via API.

This guide explains how to configure trusted issuers via API - entities authorized by your organization to issue verifications that are automatically recognized for compliance purposes.

For the web interface approach, see the user guide.

Prerequisites

  • Platform URL (e.g., https://your-platform.example.com)
  • API key from a user with the Claim Policy Manager role (see Getting Started for API key setup)
  • Wallet verification method enabled on your account (e.g., pincode or 2FA)
  • Understanding of your compliance requirements
  • Wallet address of the user you want to make a trusted issuer

About trusted issuers

Trusted issuers are entities authorized by your organization to issue verifications that are automatically recognized for compliance purposes. For background on how the verification system works, see Compliance Overview.

Organization-specific trust

Trust relationships are specific to your organization. An issuer trusted by Organization A may not be trusted by Organization B for the same verification topics.

Available verification topics

The platform comes with preset verification topics for common compliance scenarios. Each topic has a unique topicId and a signature defining the data structure for that verification type.

Custom verification topics

These are preset topics included with the platform. You can create additional custom verification topics to meet your specific compliance requirements.

Investor verification topics

Topic NameSignaturePurpose
knowYourCustomerstring claimBasic KYC verification
accreditedInvestorstring claimAccredited investor status
accreditedInvestorVerifiedstring claimVerified accredited investor
qualifiedInstitutionalInvestorstring claimQualified institutional buyer (QIB)
professionalInvestorstring claimProfessional investor status
antiMoneyLaunderingstring claimAML compliance verification
regulationSstring claimRegulation S (non-US investor) compliance

Issuer verification topics

Topic NameSignaturePurpose
issuerLicensedstring licenseType, string licenseNumber, string jurisdiction, uint256 validUntilIssuer licensing status
issuerJurisdictionstring jurisdictionIssuer jurisdiction
issuerProspectusFiledstring prospectusReferenceProspectus filing
issuerProspectusExemptstring exemptionReferenceProspectus exemption
issuerReportingCompliantbool compliant, uint256 lastUpdatedReporting compliance

Asset verification topics

Topic NameSignaturePurpose
assetClassificationstring class, string categoryAsset classification
assetLocationstring city, string districtCode, string areaIdAsset location
assetIssueraddress issuerAddressAsset issuer identity
basePriceuint256 amount, string currencyCode, uint8 decimalsBase price information
collateraluint256 amount, uint256 expiryTimestampCollateral details
contractIdentityaddress contractAddressContract identity
uniqueIdentifierstring identifierUnique identifier

Topic IDs

Each topic has a unique large numeric topicId (e.g., 26984799302505749158794800959285050858086405868089409909048783980951278841746). Use the GET /api/system/claim-topics endpoint to retrieve the exact topic IDs for your platform.

Configuring trusted issuers

Get issuer's identity address

First, you need the identity contract address of the user you want to make a trusted issuer. If you have their wallet address, query their identity:

curl -X GET "https://your-platform.example.com/api/system/identity/by-wallet/0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb" \
  -H "X-Api-Key: YOUR_API_KEY"

Response:

{
  "id": "0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890",
  "account": {
    "id": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb",
    "contractName": null
  },
  "isContract": false,
  "hasIdentity": true,
  "claims": []
}

Important: Use the id field (identity CONTRACT address), not the account.id (wallet address).

List available verification topics

Query the available verification topics to identify which topics you want this issuer to be trusted for:

curl -X GET "https://your-platform.example.com/api/system/claim-topics" \
  -H "X-Api-Key: YOUR_API_KEY"

Response:

[
  {
    "id": "0x534b8f03c16c92c70d1da1d2fae43b98352bf3d7...",
    "topicId": "26984799302505749158794800959285050858086405868089409909048783980951278841746",
    "name": "knowYourCustomer",
    "signature": "string claim",
    "registry": {
      "id": "0x534b8f03c16c92c70d1da1d2fae43b98352bf3d7"
    }
  },
  {
    "id": "0x534b8f03c16c92c70d1da1d2fae43b98352bf3d7...",
    "topicId": "15733030998618876990024220391915773205162379317494393310546829862321881862123",
    "name": "accreditedInvestor",
    "signature": "string claim",
    "registry": {
      "id": "0x534b8f03c16c92c70d1da1d2fae43b98352bf3d7"
    }
  },
  {
    "id": "0x534b8f03c16c92c70d1da1d2fae43b98352bf3d7...",
    "topicId": "39526553109170329799339511574661256630735485618560740361645615581310848276505",
    "name": "qualifiedInstitutionalInvestor",
    "signature": "string claim",
    "registry": {
      "id": "0x534b8f03c16c92c70d1da1d2fae43b98352bf3d7"
    }
  }
  // ... additional topics available
]

Note the topicId values for the topics you want to assign to this issuer. See Available verification topics above for the complete list.

Trusted issuer configuration in the verification topic registry

Add trusted issuer

Create the trusted issuer by specifying their identity address and the verification topic IDs they can issue:

curl -X POST "https://your-platform.example.com/api/system/trusted-issuers" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "issuerAddress": "0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890",
    "claimTopicIds": [
      "26984799302505749158794800959285050858086405868089409909048783980951278841746",
      "15733030998618876990024220391915773205162379317494393310546829862321881862123"
    ],
    "walletVerification": {
      "secretVerificationCode": "YOUR_PINCODE"
    }
  }'

Response:

{
  "txHash": "0x1234567890abcdef...",
  "issuerAddress": "0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890"
}

Multiple verification topics

You can assign multiple verification topics in a single request by including multiple topic IDs in the claimTopicIds array.

Verify completion

Query the trusted issuers list to confirm the issuer was added with the correct verification topics:

curl -X GET "https://your-platform.example.com/api/system/trusted-issuers" \
  -H "X-Api-Key: YOUR_API_KEY"

Response:

[
  {
    "id": "0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890",
    "account": {
      "id": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
    },
    "claimTopics": [
      {
        "id": "0x534b8f03c16c92c70d1da1d2fae43b98352bf3d7...",
        "topicId": "26984799302505749158794800959285050858086405868089409909048783980951278841746",
        "name": "knowYourCustomer",
        "signature": "string claim"
      },
      {
        "id": "0x534b8f03c16c92c70d1da1d2fae43b98352bf3d7...",
        "topicId": "15733030998618876990024220391915773205162379317494393310546829862321881862123",
        "name": "accreditedInvestor",
        "signature": "string claim"
      }
    ],
    "deployedInTransaction": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
  }
]

Key fields to verify:

  • id matches the issuer's identity address you added
  • claimTopics contains the verification topics you assigned (with fields: id, topicId, name, signature)
  • account.id shows the issuer's wallet address

The issuer can now issue verifications for the assigned topics.

Managing trusted issuers

Update issuer topics

To modify which verification topics an issuer is trusted for:

curl -X PUT "https://your-platform.example.com/api/system/trusted-issuers/0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "claimTopicIds": [
      "26984799302505749158794800959285050858086405868089409909048783980951278841746",
      "15733030998618876990024220391915773205162379317494393310546829862321881862123",
      "39526553109170329799339511574661256630735485618560740361645615581310848276505"
    ],
    "walletVerification": {
      "secretVerificationCode": "YOUR_PINCODE"
    }
  }'

Response:

{
  "txHash": "0xabcdef1234567890...",
  "issuerAddress": "0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890"
}

Topic replacement

The claimTopicIds array replaces all existing topics. Include all topics you want the issuer to be trusted for, not just new additions.

Remove trusted issuer

To revoke an issuer's trusted status:

curl -X DELETE "https://your-platform.example.com/api/system/trusted-issuers/0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890" \
  -H "X-Api-Key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "walletVerification": {
      "secretVerificationCode": "YOUR_PINCODE"
    }
  }'

Response:

{
  "txHash": "0x9876543210fedcba...",
  "issuerAddress": "0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890"
}

Impact of removal

Removing an issuer doesn't invalidate existing verifications but prevents new ones. Existing verifications remain valid until expiration.

Get topic details with trusted issuers

Get full details for a specific claim topic, including its trusted issuers:

curl -X GET "https://your-platform.example.com/api/system/claim-topics/knowYourCustomer" \
  -H "X-Api-Key: YOUR_API_KEY"

Response:

{
  "id": "0x534b8f03c16c92c70d1da1d2fae43b98352bf3d7...",
  "name": "knowYourCustomer",
  "signature": "string claim",
  "topicId": "26984799302505749158794800959285050858086405868089409909048783980951278841746",
  "trustedIssuers": [
    {
      "id": "0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890",
      "addedAt": "2024-01-15T10:30:00Z",
      "revokedAt": "1970-01-01T00:00:00Z",
      "account": {
        "id": "0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb"
      }
    }
  ]
}

The response includes full topic details along with all non-revoked trusted issuers authorized for that topic.

List claim topics for a trusted issuer

Get the full topic list for a specific trusted issuer identity:

curl -X GET "https://your-platform.example.com/api/system/trusted-issuers/0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890/topics" \
  -H "X-Api-Key: YOUR_API_KEY"

Response:

{
  "issuerAddress": "0x8e5F72f6E5b3B4D1234567890AbCdEf1234567890",
  "claimTopics": [
    {
      "id": "0x534b8f03c16c92c70d1da1d2fae43b98352bf3d7...",
      "topicId": "26984799302505749158794800959285050858086405868089409909048783980951278841746",
      "name": "knowYourCustomer",
      "signature": "string claim"
    }
  ]
}

Request parameters

Create trusted issuer

ParameterTypeRequiredDescription
issuerAddressstringYesIdentity contract address (0x...)
claimTopicIdsstring[]YesArray of verification topic IDs (min: 1)
walletVerificationobjectYesYour wallet verification to authorize the transaction

Update trusted issuer

ParameterTypeRequiredDescription
issuerAddressstringYesIdentity address to update (path parameter)
claimTopicIdsstring[]YesNew array of verification topic IDs (min: 1)
walletVerificationobjectYesYour wallet verification to authorize the transaction

Delete trusted issuer

ParameterTypeRequiredDescription
issuerAddressstringYesIdentity address to remove (path parameter)
walletVerificationobjectYesYour wallet verification to authorize the transaction

Get topic details (with trusted issuers)

ParameterTypeRequiredDescription
namestringYesClaim topic name (path parameter, e.g., knowYourCustomer)

List claim topics for issuer

ParameterTypeRequiredDescription
issuerAddressstringYesTrusted issuer identity address (path param)

Wallet verification object

FieldTypeDescription
secretVerificationCodestring6-digit pincode or TOTP code
verificationTypestring"PINCODE" (default), "SECRET_CODES", or "OTP"

Response fields

Trusted issuer

FieldTypeDescription
idstringIssuer identity contract address
account.idstringIssuer wallet address (optional)
claimTopicsarrayVerification topics this issuer can verify
deployedInTransactionstringTransaction hash where issuer was added

Verification topic

In trusted issuer response (claimTopics array):

FieldTypeDescription
idstringTopic scheme identifier
topicIdstringLarge numeric ID unique to the topic
namestringHuman-readable name of the topic
signaturestringClaim data parameter types for verification

In claim topics endpoint (GET /api/system/claim-topics):

Includes all fields above plus:

FieldTypeDescription
registryobjectRegistry information containing registry ID
registry.idstringContract address of the claim topic registry

Best practices

Issuer selection criteria

Choose trusted issuers based on:

  • Authority - Legal or professional standing
  • Expertise - Knowledge of verification area
  • Independence - Avoid conflicts of interest
  • Reliability - Consistent and accurate

Topic assignment principles

  • Segregation - Separate issuer types by domain
  • Redundancy - Multiple issuers for critical topics
  • Specialization - Match expertise to topics
  • Compliance - Follow regulatory requirements

Operational considerations

  1. Regular audits - Review issuer activities
  2. Rotation - Periodically update issuers
  3. Training - Ensure issuers understand responsibilities
  4. Documentation - Record issuer selection rationale

Troubleshooting

IssueSolution
401 UnauthorizedAPI key is invalid, expired, or disabled
403 USER_NOT_AUTHORIZEDEnsure your account has claimPolicyManager role
Identity not foundUser must be registered first; see Register User
Invalid issuer addressUse the identity CONTRACT address, not the wallet address
Topic not foundVerify the topic ID exists using GET /api/system/claim-topics
Issuer already existsThe issuer is already registered; use PUT to update topics

On this page