Skip to content
@GoPlausible

GoPlausible

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

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 TEAL Graph

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.

Popular repositories Loading

  1. .github .github Public

    Plausible is a proof of anything protocol for Algorand

    2 2

  2. awesome-algorand awesome-algorand Public

    Forked from awesome-algorand/awesome-algorand

    ⚡A curated list of awesome resources related to the Algorand Blockchain ⛓

    1

  3. ARCs ARCs Public

    Forked from algorandfoundation/ARCs

    Algorand Requests for Comments

    Python 1

  4. algo-did algo-did Public

    Forked from joe-p/algo-did

    TypeScript 1

  5. test-plausible-github test-plausible-github Public

    This repository is to test PLAUSIBLE protocol Github integration!

    1 3

  6. algorand-qrcode algorand-qrcode Public

    Forked from emg110/algorand-qrcode

    Algorand QR Code generator is a JavaScript module that outputs an standard QR code (exportable to SVG file and text) from a JSON object. It works in terminal, NodeJS and modern browsers. Complies t…

    JavaScript

Repositories

Showing 10 of 48 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…