This documentation is subject to update for newer updates please refer to GoPlausible Documentationor send your questions to GoPlausible Open Box
PLAUSIBLE is a W3C Compliant DIDs, Verifiable Credentials, OpenBadges, and smart utility NFTs protocol built on Algorand.
GoPlausible dApp consists of a frontend calling a PLAUSIBLE protocol smart contract ABIs and APIS. Some contract to contract (C2C) calls are made by PLAUSIBLE parent contracts to PLAUS contracts.
PLAUSIBLE protocol complies to ARC3 and ARC4 standards on Algorand.
PLAUSIBLE protocol features :
-
All operations are in full compliance and conformance to W3C DID, VC, VP , DRL and other standards.
-
Geo (allow and ban lists), Time, List, Token, Github, SSI and email constraint features.
-
WebAuthn, Oauth 2.2, OIDC, OIDC-VC integration.
-
Double pinning of all IPFS content (media and metadata) into Pinata and CrustNetwork (the best centralized and the best-decentralized networks for IPFS pinning).
-
Dynamic NFTs per PLAUS (PLAUSIBLE protocol is 100% token-less and NFTs are generated and owned by PLAUS contract which belongs to PLAUS issuer).
PLAUSIBLE protocol consists of a frontend and smart contracts on the Algorand chain:
- Frontend (Cloudflare Pages React SPA/PWA )
- Edge workers (Cloudflare Workers for GoPlausible public and private APIs)
- Smart Contracts (Algorand smart contracts and GoPlausible ABIs)
PLAUSIBLE protocol's frontend has 3 major functions (all in a single view for simplicity):
- Wallet Session
- Issuer UI
- Claimer UI
Note: Frontend is accessible through cloudflare pages and page workers (heavily distributed globally on edge).
flowchart LR
subgraph PLAUSIBLE
direction TB
subgraph Frontend
direction RL
Issuer_UI
Claimer_UI
end
subgraph ASC
direction TB
PLAUSIBLE_ASC
PLAUS_ASC
end
end
Issuer --> PLAUSIBLE
Claimer --> PLAUSIBLE
Frontend --> ASC
1- Issuer easily gets onboard to GoPlausible by opting into PLAUSIBLE protocol's parent Algorand smart contract. This issues a DID and a Verifiable Credential by PLAUSIBLE protocol for the issuer and combined with account's NFD , creates a profile.
2- Then can Issue new PLAUS (W3C DID based verifiable credentials with NFTs in background).
3- Then activate the PLAUS to let claims begin (This differs than start time option).
Options available for PLAUS creation:
- Time (default enabled): Start time check (compared to LatestTimestamp)
- Geo: Country allow and ban lists.
- Signature: Issuer's signature is needed to make PLAUS claimable for every Claimer, individually. Each and every Claimer can receive their single claimed PLAUS (in NFT or TXN depending on PLAUS configuration) only after Issuer's authorization via a successful method call (which obviously should happen after both venue activation and venue start time).
- QRCode: Upon activation a secret key will be generated and included in a transaction as a method input parameter and this TXN is then communicated by a QRCode in venue location and Claimer scans this QRCode during physical presence and claims (other arguments will be added to this raw transaction object after scan and when claiming).
Note: QRCode feature is still under heavy re-ideation, re-design and re-everything! So please, kindly consider it WIP and FUTURE release functionality!
sequenceDiagram
actor Issuer
participant PLAUSIBLE
participant PLAUSIBLE_ASC
participant Plaus_ASC
Issuer ->> PLAUSIBLE: Connect wallet
Issuer ->> PLAUSIBLE: Sign Optin Call
PLAUSIBLE ->> PLAUSIBLE_ASC: Optin Call
PLAUSIBLE_ASC -->> PLAUSIBLE: Return
Note left of PLAUSIBLE: Onboarding
Issuer ->> PLAUSIBLE: Sign `create_plaus` Method TXN
PLAUSIBLE ->> PLAUSIBLE_ASC: `create_plaus` Method Call
PLAUSIBLE_ASC -->> PLAUSIBLE: Return
Note left of PLAUSIBLE_ASC: Create PLAUS
Issuer ->> PLAUSIBLE: Sign `activate_plaus` Method TXN
PLAUSIBLE ->> Plaus_ASC: `activate_plaus` Method Call (creates NFT as well)
Plaus_ASC -->> PLAUSIBLE: Return
Note right of PLAUSIBLE_ASC: Activate PLAUS
Issuer ->> PLAUSIBLE: Sign `sig_plaus` Method TXN
PLAUSIBLE ->> PLAUSIBLE_ASC: `sig_plaus` Method Call
PLAUSIBLE_ASC -->> PLAUSIBLE: Return
Note right of PLAUSIBLE_ASC: Release SIG PLAUS
Note right of PLAUSIBLE_ASC: Only when SIG option is enabled on PLAUSIBLE
1- After PLAUS activation (by Issuer) and by satisfying what PLAUS configuration mandates from claimers, eligible users can claim the PLAUS and get NFT and attached Verifiable Credential if approved by PLAUS smart contract.
2- Claimer simply gets onboard by opting into parent ASC from UI (one button click).
3- Then get a searchable list of claimed PLAUS so far and can activate the creator mode to Issue new PLAUS at any time given there is enough balance in the account.
sequenceDiagram
actor Claimer
participant PLAUSIBLE
participant PLAUSIBLE_ASC
participant PLAUS_ASC
Claimer ->> PLAUSIBLE: Connect wallet
Claimer ->> PLAUSIBLE: Sign Optin Call
PLAUSIBLE ->> PLAUSIBLE_ASC: Optin Call
PLAUSIBLE_ASC -->> PLAUSIBLE: Return
Note left of PLAUSIBLE: Onboarding
Claimer ->> PLAUSIBLE: Sign `apply_plaus` Method TXN
PLAUSIBLE ->> PLAUS_ASC: `apply_plaus` Method Call
PLAUS_ASC -->> PLAUSIBLE: Return
Note right of PLAUSIBLE_ASC: Apply for PLAUS
Claimer ->> PLAUSIBLE: Sign `claim_plaus` Method TXN
PLAUSIBLE ->> PLAUS_ASC: `claim_plaus` Method Call ( plus optin TXN to PLAUS NFT, if required)
Note right of PLAUSIBLE_ASC: Claim PLAUS
Note right of PLAUSIBLE_ASC: Needs providing required options if configured (Geo, Time, QR)
PLAUS_ASC -->> Claimer: Send NFT
Note right of PLAUSIBLE_ASC: Requires existence of signed release by issuer in global state
PLAUS_ASC -->> PLAUSIBLE: Return
PLAUSIBLE protocol smart contract system is designed on basis of features & opcodes in TEAL v 8.0 on AVM8. PLAUSIBLE Parent contract generates and configures and controls only the lifecycles step of each PLAUS. The PLAUS internals and operations are solely controlled by PLAUS issuer.
graph TD;
GoPlausible_Service== manages ==>Parent_PLAUSIBLE_ASC;
Parent_PLAUSIBLE_ASC== manages ==>PLAUS_ASC;
PLAUS_Claimer== interacts ==>PLAUS_ASC;
PLAUS_Issuer== interacts ==>Parent_PLAUSIBLE_ASC;
PLAUS_Issuer== interacts ==>PLAUS_ASC;
stateDiagram-v2
[*] --> GoPlausible_Service
GoPlausible_Service --> Parent_PLAUSIBLE_ASC
Parent_PLAUSIBLE_ASC --> PLAUS_ASC
PLAUS_ASC --> close
Parent_PLAUSIBLE_ASC --> eol
close --> archive
eol --> archive
archive --> [*]
Note: The NoOp calls without args will be rejected with error. This is being examined as a security practice
flowchart TB
id1([Issuer]) --uses--> parentMethodCalls
id1([Issuer]) --uses--> parentAppCalls
id1([Issuer]) --uses--> plausMethodCalls
id2([Claimer]) --uses--> parentAppCalls
id2([Claimer]) --uses--> plausMethodCalls
subgraph PLAUSIBLE
subgraph parentASC
subgraph parentAppCalls
id3([create])
id4([update])
id5([delete])
id6([optin])
id7([closeout])
end
subgraph parentMethodCalls
id61([setup])
id8([item_create])
id9([item_update])
id10([item_delete])
end
end
subgraph plausASC
subgraph plausAppCalls
id13([create])
id14([update])
id15([delete])
id17([closeout])
end
subgraph plausMethodCalls
id18([setup])
id18([activate])
id19([claim])
id20([release])
end
end
end
Note 1: Data fields are global states and boxes of PLAUSIBLE parent smart contract.
classDiagram
class PLAUSIBLE_ASC
PLAUSIBLE_ASC : +Uint64 plaus_onboard_count
PLAUSIBLE_ASC : +Uint64 plaus_count
PLAUSIBLE_ASC : +Byte plaus_last_appid
PLAUSIBLE_ASC : +Byte plaus_last_author
PLAUSIBLE_ASC : +setup(string)string
PLAUSIBLE_ASC : +item_create(pay,byte[],byte[])string
PLAUSIBLE_ASC : +item_update(application,byte[],byte[])string
PLAUSIBLE_ASC : +item_delete(application)void
{
"name":"plausible-contract",
"desc": "PLAUSIBLE Parent smart contract",
"networks":{
"MainNet":{
"appID": 0
},
"TestNet":{
"appID": 0
}
},
"methods":[
{
"name": "setup",
"args": [
{
"type": "string",
"name": "version"
}
],
"returns": {
"type": "string"
},
"desc": "Sets up the PLAUSIBLE main contract, sets and logs the version and returns"
},
{
"name": "item_create",
"args": [
{
"type": "pay",
"name": "pay"
},
{
"type": "byte[]",
"name": "asc_approval_bytes"
},
{
"type": "byte[]",
"name": "asc_clear_bytes"
}
],
"returns": {
"type": "string"
},
"desc": "Creates a new PLAUS smart contract and returns the app id"
},
{
"name": "item_update",
"args": [
{
"type": "application",
"name": "application"
},
{
"type": "byte[]",
"name": "asc_approval_bytes"
},
{
"type": "byte[]",
"name": "asc_clear_bytes"
}
],
"returns": {
"type": "string"
},
"desc": "Updates an PLAUS smart contract and returns item application ID"
},
{
"name": "item_delete",
"args": [
{
"type": "application",
"name": "application"
}
],
"returns": {
"type": "void"
},
"desc": "Deletes an PLAUS smart contract and returns void (approve only)"
}
]
}
Note 1: Data fields are global states and boxes of PLAUS smart contract.
classDiagram
class PLAUS_ASC
PLAUS_ASC : +Uint64 plaus_item_onboard_count
PLAUS_ASC : +Uint64 plaus_item_txn_count
PLAUS_ASC : +Uint64 plaus_item_claim_count
PLAUS_ASC : +Uint64 plaus_start_timestamp
PLAUS_ASC : +Uint64 plaus_end_timestamp
PLAUS_ASC : +Byte plaus_name
PLAUS_ASC : +Byte plaus_logo
PLAUS_ASC : +Byte plaus_timezone
PLAUS_ASC : +Byte plaus_desc
PLAUS_ASC : +Byte plaus_address
PLAUS_ASC : +Byte plaus_url
PLAUS_ASC : +Byte plaus_web2
PLAUS_ASC : +Byte plaus_nft_media
PLAUS_ASC : +Byte plaus_has_geo
PLAUS_ASC : +Byte plaus_has_release
PLAUS_ASC : +Byte plaus_has_shared_secret
PLAUS_ASC : +Byte plaus_claimer_qty
PLAUS_ASC : +Byte author_pays_fee
PLAUS_ASC : +Byte plaus_qr_secret
PLAUS_ASC : +Byte plaus_hash
PLAUS_ASC : +Uint64 plaus_parent_id
PLAUS_ASC : +Byte plaus_parent_address
PLAUS_ASC : +Byte plaus_author_address
PLAUS_ASC : +Uint64 plaus_asa_id
PLAUS_ASC : +Uint64 plaus_setup_time
PLAUS_ASC : +Uint64 plaus_activate_time
PLAUS_ASC : +Uint64 plaus_release_time
PLAUS_ASC : +Byte plaus_is_activated
PLAUS_ASC : +Byte plaus_is_setup
PLAUS_ASC : +Byte plaus_is_released
PLAUS_ASC : +setup(pay,account,application,string,string,string,string,string,string,string,string,(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))string
PLAUS_ASC : +re_setup(pay,account,application,asset,string,string,string,string,string,string,string,(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64))string
PLAUS_ASC : +activate(pay,axfer,application,asset)string
PLAUS_ASC : +claim(asset,application,pay,axfer,string,(uint64,uint64,uint64,uint64,uint64))string
PLAUS_ASC : +release(application)string
PLAUS_ASC : +get_metric(string)string
PLAUS_ASC : +get_metrics()string
{
"name": "plaus-contract",
"desc": "PLAUS smart contract",
"networks": {
"MainNet": {
"appID": 0
},
"TestNet": {
"appID": 109691598
}
},
"methods": [
{
"name": "setup",
"args": [
{
"type": "pay",
"name": "pay_min_fee"
},
{
"type": "account",
"name": "author_account"
},
{
"type": "application",
"name": "parent_application"
},
{
"type": "string",
"name": "reserved"
},
{
"type": "string",
"name": "plaus_name"
},
{
"type": "string",
"name": "plaus_logo"
},
{
"type": "string",
"name": "plaus_desc"
},
{
"type": "string",
"name": "plaus_timezone"
},
{
"type": "string",
"name": "plaus_address"
},
{
"type": "string",
"name": "plaus_url"
},
{
"type": "string",
"name": "plaus_web2"
},
{
"type": "(uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64,uint64)",
"name": "plaus_uint64_tuple"
}
],
"returns": {
"type": "string"
},
"desc": "Sets up an PLAUS contract"
},
{
"name": "activate",
"args": [
{
"type": "pay",
"name": "pay_min_fees"
},
{
"type": "axfer",
"name": "optin_plaus_nft"
},
{
"type": "application",
"name": "parent_application"
},
{
"type": "asset",
"name": "nft_asa"
}
],
"returns": {
"type": "string"
},
"desc": "Activates an PLAUS smart contract and returns string"
},
{
"name": "claim",
"args": [
{
"type": "pay",
"name": "pay_min_fee"
},
{
"type": "asset",
"name": "nft_asset"
},
{
"type": "application",
"name": "parent_application"
},
{
"type": "account",
"name": "claimer_account"
},
{
"type": "string",
"name": "qr_secret"
},
{
"type": "(uint64,uint64,uint64,uint64,uint64)",
"name": "claim_uint64_tuple"
}
],
"returns": {
"type": "string"
},
"desc": "Claims a PLAUS for a claimer and returns NFT sending inner-transaction hash"
},
{
"name": "release",
"args": [
{
"type": "application",
"name": "parent_contract"
}
],
"returns": {
"type": "string"
},
"desc": "Releases PLAUS and allows all PLAUS claimer's to start claiming"
}
]
}
Since PLAUSIBLE protocol is totally decentralized, trustless and permission-less: Every Issuer has full authority of the created PLAUS, enforced by PLAUS smart contract.
This API spec and schema are just designed for GoPlausible service level integration projects
- OpenAPI Version: 3.1.0
- Base URL: https://api.goplausible.xyz
- Docs URL: https://api.goplausible.xyz/docs
This API is designed to handle different aspects of W3C Decentralized Identifiers (DIDs), W3C Verifiable Credentials (VCs), Self-Sovereign Identity (SSI), IPFS content management, authentication, revocation, rotation of DIDs, and more.
- REGISTRAR
- IDENTIFIERS
- CREDENTIALS
- SSI
- ISSUANCE (Tickets)
- VERIFICATION
- AUTH
- REVOKE
- ROTATE
- RESOLVE
- IPFS
- RENEW-AUTH
- DID-LINKED-RESOURCE (DLR)
-
Description: Fetches registrar records matching an optional DID uid (query parameter).
-
Query Parameters:
uid
(string, required): DID UID to search for.
-
Responses:
- 200: Returns a JSON object containing:
{ "openapi": "3.1.0", "registrar": [ { "id": "string", "did": "string", "didDocument": "string", "vcDocument": "string", "publicKey": "string", "isVc": true, "isSsi": true, "chain": "string", "network": "string", "project": "string" } ] }
- 200: Returns a JSON object containing:
- Description: Registers a project in the protocol.
- Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "signedTxn": { "type": "string", "nullable": false }, "ssi": { "type": "string", "nullable": true }, "chain": { "type": "string", "nullable": true, "default": "algorand" }, "network": { "type": "string", "nullable": true, "default": "mainnet" }, "project": { "type": "string", "nullable": false } }
-
Description: Registers a project in the protocol.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "signedTxn": { "type": "string", "nullable": false }, "ssi": { "type": "string", "nullable": true }, "chain": { "type": "string", "nullable": true, "default": "algorand" }, "network": { "type": "string", "nullable": true, "default": "mainnet" }, "project": { "type": "string", "nullable": false } }
-
Responses:
- 200: Returns the newly created registry entry:
{ "openapi": "3.1.0", "registry": { "id": "string", "did": "string", "didDocument": "string", "vcDocument": "string", "publicKey": "string", "isVc": true, "isSsi": true, "chain": "string", "network": "string", "project": "string" } }
- 200: Returns the newly created registry entry:
-
Description: Queries for DIDs in the registry.
-
Query Parameters:
uid
(string, required): DID identifier to filter by.
-
Responses:
- 200:
{ "openapi": "3.1.0", "identifiers": [ { "id": "string", "did": "string", "didDocument": "string", "issuance": "string", "isVc": true, "isSsi": true, "chain": "string", "network": "string", "project": "string" } ] }
- 200:
-
Description: Issues and registers W3C-compliant DIDs.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "ssi": { "type": "string", "nullable": true }, "isVc": { "type": "boolean", "nullable": true, "default": false }, "isSsi": { "type": "boolean", "nullable": true, "default": false }, "chain": { "type": "string", "nullable": true, "default": "algorand" }, "network": { "type": "string", "nullable": true, "default": "mainnet" }, "project": { "type": "string", "nullable": true } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "registry": { "id": "string", "publicKey": "string", "did": "string", "didDocument": "string", "issuance": "string", "isVc": true, "isSsi": true, "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Queries Verifiable Credentials (VC) by a DID’s UID.
-
Query Parameters:
uid
(string, required): DID identifier to search for credentials.
-
Responses:
- 200:
{ "openapi": "3.1.0", "credentials": [ { "id": "string", "did": "string", "ssi": "string", "cid": "string", "publicKey": "string", "didDocument": "string", "vcDocument": "string", "asset": "string", "issuance": "string", "expiration": "string", "chain": "string", "network": "string", "project": "string" } ] }
- 200:
-
Description: Issues a new Verifiable Credential.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "signedTxn": { "type": "string", "nullable": false }, "ssi": { "type": "string", "nullable": true }, "title": { "type": "string", "nullable": true }, "fullName": { "type": "string", "nullable": true }, "description": { "type": "string", "nullable": true }, "subject": { "type": "string", "nullable": true }, "subjectSsi": { "type": "string", "nullable": true }, "media": { "type": "string", "nullable": true }, "avatar": { "type": "string", "nullable": true }, "document": { "type": "string", "nullable": true }, "metadata": { "type": "object", "nullable": true }, "claims": { "type": ["string"], "nullable": true }, "tags": { "type": ["string"], "nullable": true }, "expiration": { "type": "string", "nullable": true }, "chain": { "type": "string", "nullable": true, "default": "algorand" }, "network": { "type": "string", "nullable": true, "default": "mainnet" }, "project": { "type": "string", "nullable": true } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "credential": { "id": "string", "publicKey": "string", "did": "string", "cid": "string", "ssi": "string", "asset": "string", "didDocument": "string", "vcDocument": "string", "issuance": "string", "expiration": "string", "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Queries SSI (Self-Sovereign Identity) entries by an optional UID.
-
Query Parameters:
uid
(string, required): SSI UID to search.
-
Responses:
- 200:
{ "openapi": "3.1.0", "ssis": [ { "id": "string", "did": "string", "publicKey": "string", "ssiId": "string", "didDocument": "string", "vcDocument": "string", "chain": "string", "network": "string", "project": "string" } ] }
- 200:
-
Description: Issues a Self-Sovereign Identity in the GoPlausible protocol.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": true }, "fullName": { "type": "string", "nullable": true }, "project": { "type": "string", "nullable": false }, "chain": { "type": "string", "nullable": false }, "network": { "type": "string", "nullable": false } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "ssi": { "id": "string", "did": "string", "publicKey": "string", "didDocument": "string", "vcDocument": "string", "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Queries issued verifiable tickets.
-
Query Parameters:
q
(string, required): A query string to filter issued tickets.
-
Responses:
- 200:
{ "openapi": "3.1.0", "tickets": [ { "id": "string", "did": "string", "ssi": "string", "publicKey": "string", "title": "string", "fullName": "string", "description": "string", "subject": "string", "media": "string", "avatar": "string", "metadata": {}, "claims": [], "tags": [], "didDocument": "string", "vcDocument": "string", "asset": "string", "issuance": "string", "expiration": "string", "chain": "string", "network": "string", "project": "string" } ] }
- 200:
-
Description: Issues a verifiable ticket.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": true }, "ssi": { "type": "string", "nullable": true }, "title": { "type": "string", "nullable": true }, "fullName": { "type": "string", "nullable": true }, "description": { "type": "string", "nullable": true }, "subject": { "type": "string", "nullable": true }, "media": { "type": "string", "nullable": true }, "avatar": { "type": "string", "nullable": true }, "document": { "type": "string", "nullable": true }, "metadata": { "type": "object", "nullable": true }, "claims": { "type": ["string"], "nullable": true }, "tags": { "type": ["string"], "nullable": true }, "expiration": { "type": "string", "nullable": true }, "chain": { "type": "string", "nullable": true }, "network": { "type": "string", "nullable": true }, "project": { "type": "string", "nullable": true } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "ticket": { "id": "string", "did": "string", "cid": "string", "publicKey": "string", "fullName": "string", "ssi": "string", "didDocument": "string", "vcDocument": "string", "asset": "string", "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Fetches verifiable credential verification results.
-
Query Parameters:
uid
(string, required): The VC Verification identifier.
-
Responses:
- 200:
{ "openapi": "3.1.0", "tickets": [ { "id": "string", "did": "string", "publicKey": "string", "ssiId": "string", "didDocument": "string", "vcDocument": "string", "chain": "string", "network": "string", "project": "string" } ] }
- 200:
-
Description: Verifies a verifiable credential.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "did": { "type": "string", "nullable": false }, "ssiId": { "type": "string", "nullable": true }, "project": { "type": "string", "nullable": false }, "chain": { "type": "string", "nullable": false }, "network": { "type": "string", "nullable": false } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "ticket": { "id": "string", "did": "string", "publicKey": "string", "ssiId": "string", "didDocument": "string", "vcDocument": "string", "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Checks the status of a JWT token.
-
Query Parameters:
token
(string, required): The JWT token to verify.
-
Responses:
- 200:
{ "openapi": "3.1.0", "auth": [ { "token": "string", "issuance": "string", "expiration": "string", "status": "string", "chain": "string", "network": "string", "project": "string" } ] }
- 200:
-
Description: Authenticates a user in the protocol and returns a JWT.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "signedTxn": { "type": "string", "nullable": false }, "ssi": { "type": "string", "nullable": true }, "chain": { "type": "string", "nullable": true, "default": "algorand" }, "network": { "type": "string", "nullable": true, "default": "mainnet" }, "project": { "type": "string", "nullable": false } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "auth": { "id": "string", "did": "string", "didDocument": "string", "issuance": "string", "expiration": "string", "token": "string", "publicKey": "string", "fullName": "string", "asset": "string", "status": "string", "isSsi": true, "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Checks if a DID has been revoked.
-
Query Parameters:
did
(string, required): The DID to check for revocation.
-
Responses:
- 200:
{ "openapi": "3.1.0", "revocations": [ { "did": "string", "issuance": "string", "expiration": "string", "status": "string", "chain": "string", "network": "string", "project": "string" } ] }
- 200:
-
Description: Revokes a DID in the protocol. Only the issuer can revoke it.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "signedTxn": { "type": "string", "nullable": false }, "did": { "type": "string", "nullable": true }, "chain": { "type": "string", "nullable": true, "default": "algorand" }, "network": { "type": "string", "nullable": true, "default": "mainnet" }, "project": { "type": "string", "nullable": false } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "revoked": { "id": "string", "did": "string", "didDocument": "string", "isSSi": true, "isVc": true, "issuance": "string", "expiration": "string", "publicKey": "string", "status": "string", "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Checks DID rotation status.
-
Query Parameters:
did
(string, required): The DID to check rotation status for.
-
Responses:
- 200:
{ "openapi": "3.1.0", "rotations": [ { "did": "string", "issuance": "string", "expiration": "string", "status": "string", "chain": "string", "network": "string", "project": "string" } ] }
- 200:
-
Description: Rotates a DID in the protocol. Only the issuer can rotate it.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "signedTxn": { "type": "string", "nullable": false }, "did": { "type": "string", "nullable": true }, "chain": { "type": "string", "nullable": true, "default": "algorand" }, "network": { "type": "string", "nullable": true, "default": "mainnet" }, "project": { "type": "string", "nullable": false } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "rotated": { "id": "string", "did": "string", "didDocument": "string", "isSSi": true, "isVc": true, "issuance": "string", "expiration": "string", "publicKey": "string", "status": "string", "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Resolves and returns a DID document.
-
Query Parameters:
did
(string, required): The DID to resolve.
-
Responses:
- 200:
{ "openapi": "3.1.0", "dids": [ { "did": "string", "didDocument": "string", "issuance": "string", "expiration": "string", "status": "string", "chain": "string", "network": "string", "project": "string" } ] }
- 200:
-
Description: Fetches IPFS content by CID.
-
Query Parameters:
cid
(string, required): The CID to fetch.
-
Responses:
- 200:
{ "openapi": "3.1.0", "ipfs": { "did": "string", "cid": "string", "content": "string", "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Pins content to IPFS and returns a CID (pinned to Pinata and CrustNetwork).
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "content": { "type": "string", "nullable": false }, "chain": { "type": "string", "nullable": true, "default": "algorand" }, "network": { "type": "string", "nullable": true, "default": "mainnet" }, "project": { "type": "string", "nullable": false } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "ipfs": { "cid": "string", "publicKey": "string", "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Renews an existing JWT token.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "token": { "type": "string", "nullable": false }, "chain": { "type": "string", "nullable": true, "default": "algorand" }, "network": { "type": "string", "nullable": true, "default": "mainnet" }, "project": { "type": "string", "nullable": false } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "auth": { "id": "string", "did": "string", "didDocument": "string", "issuance": "string", "expiration": "string", "token": "string", "publicKey": "string", "asset": "string", "status": "string", "isSsi": true, "chain": "string", "network": "string", "project": "string" } }
- 200:
-
Description: Registers a DID-linked resource and adds it to a DID’s document metadata.
-
Request Body (
application/json
):{ "publicKey": { "type": "string", "nullable": false }, "signedTxn": { "type": "string", "nullable": false }, "did": { "type": "string", "nullable": true }, "linkedResource": { "type": "string", "nullable": false }, "chain": { "type": "string", "nullable": true, "default": "algorand" }, "network": { "type": "string", "nullable": true, "default": "mainnet" }, "project": { "type": "string", "nullable": false } }
-
Responses:
- 200:
{ "openapi": "3.1.0", "dlr": { "id": "string", "did": "string", "didDocument": "string", "linkedResource": "string", "publicKey": "string", "chain": "string", "network": "string", "project": "string" } }
- 200:
We welcome contributions and suggestions. Please open a pull request or an issue on our GitHub repository if you have any questions or ideas.
This API and its documentation are provided for informational and integration purposes. For licensing information, consult the official GoPlausible or contact the team members on socials.