Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

GoPlausible

GoPlausible provides PLAUSIBLE protocol (W3C DIDs, VCs & utility NFTs) for Web 2.5 and pioneers AI products for blockchain!
GoPlausible

GoPlausible

GoPlausible is a technology startup building identifiable, verifiable and provenant services and AI toolings for Algorand blockchain.

Since 2022, GoPlausible has been pioneering W3C compliant DIDs, Verifiable Credentials, OpenBadges, and smart utility NFTs protocol powered by Algorand blockchain (PLAUSIBLE protocol). Since 2024, GoPlausible has been building AI toolings, infrastructure, hosted services and extensions to protocols for Algorand ecosystem, powered by PLAUSIBLE protocol.

GoPlausible Vision

GoPlausible has developed and contributed cutting edge AI technologies and protocols integrations , extensions and implementations for Algorand ecosystem including GPT, MCP, A2A, AP2, X402 and more.

X402 Protocol guide and links with Algorand (AVM)

top↑

PLAUSIBLE Protocol

W3C Compliant DIDs, Verifiable Credentials and OpenBadges powered by Algorand Blockchain

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 links

top↑

PLAUSIBLE protocol concept:

top↑

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 Concept Diagram

PLAUSIBLE protocol technical design:

top↑

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
 
Loading

PLAUS Issuer's Journey:

top↑

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
Loading

Claimer's Journey:

top↑

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
Loading

PLAUSIBLE protocol Smart Contracts

top↑

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.

Entities Relations:

 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;
Loading

Lifecycle:

 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 --> [*]
Loading

UseCase:

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 
 
 
 
Loading

PLAUSIBLE prtocol contract TEAL Graph:

top↑

PLAUSIBLE protocol ASC TEAL Graph


PLAUSIBLE protocol ASC ABI :

top↑

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
 
Loading

PLAUSIBLE ASC ABI Schema :

top↑

{
 "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)"
 }
 ]
}

PLAUS ASC TEAL Graph:

top↑

PLAUS ASC ABI :

top↑

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
 
 
 
Loading

PLAUS ASC ABI Schema :

top↑

{
 "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.

GoPlausible Service integration API

top↑

This API spec and schema are just designed for GoPlausible service level integration projects

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.


Table of Contents

top↑

  1. REGISTRAR
  2. IDENTIFIERS
  3. CREDENTIALS
  4. SSI
  5. ISSUANCE (Tickets)
  6. VERIFICATION
  7. AUTH
  8. REVOKE
  9. ROTATE
  10. RESOLVE
  11. IPFS
  12. RENEW-AUTH
  13. DID-LINKED-RESOURCE (DLR)

REGISTRAR

top↑

GET /registrar

  • 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"
       }
       ]
      }

POST /registrar

  • 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 }
    }

POST /registrar

  • 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"
       }
      }

IDENTIFIERS

top↑

GET /identifiers

  • 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"
       }
       ]
      }

POST /identifiers

  • 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"
       }
      }

CREDENTIALS

top↑

GET /credentials

  • 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"
       }
       ]
      }

POST /credentials

  • 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"
       }
      }

SSI

top↑

GET /ssi

  • 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"
       }
       ]
      }

POST /ssi

  • 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"
       }
      }

ISSUANCE

top↑

GET /issuance

  • 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"
       }
       ]
      }

POST /issuance

  • 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"
       }
      }

VERIFICATION

top↑

GET /verification

  • 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"
       }
       ]
      }

POST /verification

  • 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"
       }
      }

AUTH

top↑

GET /auth

  • 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"
       }
       ]
      }

POST /auth

  • 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"
       }
      }

REVOKE

top↑

GET /revoke

  • 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"
       }
       ]
      }

POST /revoke

  • 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"
       }
      }

ROTATE

top↑

GET /rotate

  • 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"
       }
       ]
      }

POST /rotate

  • 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"
       }
      }

RESOLVE

top↑

GET /resolve

  • 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"
       }
       ]
      }

IPFS

top↑

GET /ipfs

  • 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"
       }
      }

POST /ipfs

  • 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"
       }
      }

RENEW-AUTH

top↑

POST /renew-auth

  • 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"
       }
      }

DID-LINKED-RESOURCE (DLR)

top↑

POST /dlr

  • 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"
       }
      }

Contributing

top↑

We welcome contributions and suggestions. Please open a pull request or an issue on our GitHub repository if you have any questions or ideas.

License

top↑

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.

Pinned Loading

  1. algorand-remote-mcp algorand-remote-mcp Public

    Algorand remote (SSE) MCP Server Cloudflare Worker

    TypeScript 14 1

  2. algorand-mcp algorand-mcp Public

    Algorand Model Context Protocol (Server & Client)

    TypeScript 38 15

  3. zapier-algorand zapier-algorand Public

    Full integration (all of Algod and Indexer) of Algorand state and historical data as Zapier standard resources, actions and triggers. Usable publicly in all Zapier ZAPs. This contribution celebrate...

    JavaScript 7

  4. tinyman-mcp tinyman-mcp Public

    TinyMan MCP Server - Algorand batteries included

    TypeScript 2

  5. falcon-signatures-js falcon-signatures-js Public

    Falcon signatures (Fast-Fourier Lattice-based Compact Signatures over NTRU) in pure JS, usable in NodeJS, JS Runtimes and Browser through WASM.

    JavaScript 4

  6. x402-avm x402-avm Public

    Forked from coinbase/x402

    A payments protocol for the internet. Built on HTTP. Supporting EVM, AVM and SVM.

    TypeScript 1

Repositories

Loading
Type
Select type
Language
Select language
Sort
Select order
Showing 10 of 90 repositories

People

This organization has no public members. You must be a member to see who’s a part of this organization.

Top languages

Loading...

Most used topics

Loading...

AltStyle によって変換されたページ (->オリジナル) /