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(
    CreateEcosystemRequest.fromPartial({
        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:      "https://example.com",
})
var response =
    trinsic
        .provider()
        .createEcosystem(
            CreateEcosystemRequest.newBuilder()
                .setDescription("My ecosystem")
                .setDomain("https://example.com")
                .build())
        .get();

Request to create an ecosystem
name
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.
description
optional string
Ecosystem description
details
The account details of the owner of the ecosystem
Show child attributes
domain
string
New domain URL

Response to CreateEcosystemRequest
ecosystem
Details of the created ecosystem
Show child attributes
profile
Account profile for auth of the owner of the ecosystem
Show child attributes
confirmation_method
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(
    UpgradeDidRequest.fromPartial({
        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():
    return


if __name__ == "__main__":
    set_eventloop_policy()
    asyncio.run(provider_demo())
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 =
    UpgradeDidRequest.newBuilder()
        .setWalletId(account.getAuthToken())
        .setMethod(SupportedDidMethod.ION)
        .setIonOptions(
            IonOptions.newBuilder().setNetwork(IonOptions.IonNetwork.TestNet).build())
        .build();

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

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

Response to UpgradeDIDRequest
did
string
New DID of wallet