Skip to content

Provider Service

The Provider Service enables the creation and management of ecosystems.

Named vs Anonymous ecosystems

There are two types of ecosystems: named and anonymous.

Named ecosystems are suitable for production, and will be prepared for you by Trinsic during onboarding.

Anonymous ecosystems have auto-generated names (such as eager-elephant-94jkn5h), and may be created by anyone at any time.

Using an anonymous ecosystem for purposes other than prototyping and testing is considered an unauthorized use of Trinsic's platform.

Create Ecosystem

Creates a new ecosystem, along with a root controlling account.

If name is left empty, an anonymous ecosystem will be created.

trinsic provider create-ecosystem --name <ECOSYSTEM_NAME> --email <OWNER_EMAIL>
let createResponse = await trinsic.provider().createEcosystem(
        description: "Test ecosystem from Node",
var (ecosystem, authToken) = await trinsic.Provider.CreateEcosystemAsync(new() {
    Description = "My ecosystem",
actual_create = await trinsic_service.provider.create_ecosystem(
    request=CreateEcosystemRequest(description="My ecosystem")
actualCreate, err := trinsic.Provider().CreateEcosystem(context.Background(), &provider.CreateEcosystemRequest{
    Description: "My ecosystem",
    Domain:      "",
var response =
                .setDescription("My ecosystem")

Request to create an ecosystem
optional string
Globally unique name for the Ecosystem. This name will be part of the ecosystem-specific URLs and namespaces. Allowed characters are lowercase letters, numbers, underscore and hyphen. If not passed, ecosystem name will be auto-generated.
optional string
Ecosystem description
The account details of the owner of the ecosystem
Show child attributes
New domain URL

Response to CreateEcosystemRequest
Details of the created ecosystem
Show child attributes
Account profile for auth of the owner of the ecosystem
Show child attributes
Indicates if confirmation of account is required.
Show enum values

Upgrade Wallet DID

Restricted API

This feature is not yet publicly available, and the list of supported DID Methods is not final.

Please contact Trinsic to enable this endpoint on your account.

Ledger Interactions

Depending on the DID Method chosen, you may be responsible for ledger write fees; additionally, there are some logistical concerns to be aware of.

Click here to learn more.

Upgrades a wallet's DID from the default did:web to another DID Method. This endpoint may only be called by an ecosystem provider.

Trinsic will register a DID Document for you, and update the wallet's public_did property to the newly-registered DID. Credentials previously issued by this wallet will not have their issuer field updated to the new DID, but they will still verify correctly.

Presently, once a wallet's DID has been upgraded, its DID Method cannot be changed again. However, it is possible to perform further upgrades within a method, to go from a testing to production network (for example, did:ion:test to did:ion).

trinsic provider upgrade-did --wallet-id {wallet_id} --method ion --method-options testnet
let upgradeResponse = await trinsic.provider().upgradeDID(
        walletId: walletId,
        method: SupportedDidMethod.ION,
        ionOptions: IonOptions.fromPartial({
            network: IonOptions_IonNetwork.TestNet,
var upgradeResponse = await trinsic.Provider.UpgradeDIDAsync(new() {
    WalletId = walletId,
    Method = SupportedDidMethod.Ion,
    IonOptions = new() {
        Network = IonOptions.Types.IonNetwork.TestNet
import asyncio
from trinsic.trinsic_util import set_eventloop_policy

async def provider_demo():

if __name__ == "__main__":
upgradeResponse, err := trinsic.Provider().UpgradeDID(context.Background(), &provider.UpgradeDidRequest{
    Account: &provider.UpgradeDidRequest_WalletId{
        WalletId: walletId,
    Method: common.SupportedDidMethod_ION,
    Options: &provider.UpgradeDidRequest_IonOptions{
        IonOptions: &provider.IonOptions{
            Network: provider.IonOptions_TestNet,
var upgradeRequest =

var upgradeResponse = trinsic.provider().upgradeDID(upgradeRequest).get();

Request to upgrade a wallet
Email address of account to upgrade. Mutually exclusive with walletId and didUri.
Wallet ID of account to upgrade. Mutually exclusive with email and didUri.
DID URI of the account to upgrade. Mutually exclusive with email and walletId.
DID Method to which wallet should be upgraded
Show enum values
Configuration for creation of DID on ION network
Show child attributes
Configuration for creation of DID on INDY network
Show child attributes

Response to UpgradeDIDRequest
New DID of wallet