# 0x1 Certificate API Doc - **Github**: https://github.com/yhuag/chain-certificate - **Endpoint**: https://x1certificate-aqkcbxdduq-uc.a.run.app/ipfs ## Current | Function | API | Required Field | | -------- | -------- | -------- | | View all certificates |`/ipfs` | x | | Issue new certificates | `/issue?certName=iota&name=tina` | certName, name | ## Goal | Function | Method | URI | Required Fields | Returns | Access Right | |:------------------------------------------:|:------:|:--------------------------------------:|:--------------------------------:|:---------------------:|:-------------------:| | **View Certificates** | | | | | | | View all certs | GET | `/certs` | x | A list of certs | Anyone | | View all certs holders | GET | `/certs/holders` | x | A list of certs holders | Anyone | | View all certs types | GET | `/certs/types` | x | A list of certs types | Anyone | | View all certs of a specified holder | GET | `/certs?holder=tina` | holder | A list of certs | Anyone | | View all certs of a specified type | GET | `/certs?type=hkust` | type | A list of certs | Anyone | | **Manage Issuer** | | | | | | | Register as an issuer of a specified type | POST | `/issuers?type=hkust` | type | issuer ID | Admin | | Revoke an issuer for a specified type | DEL | `/issuers?type=hkust` | type | issuer ID | Admin | | **Issue Certificates** | | | | | | | Issue a certificate of a type | POST | `/issue?type=hkust` | type | x | Issuer of that type | | Issue a batch of certificates of a type | POST | `/issue?type=hkust` | type; request body with an array | x | Issuer of that type | | **Revoke Certificates** | | | | | | | Revoke a certificate of a type | DEL | `/certs?type=hkust` | type | x | Issuer of that type | | Revoke a batch of certificates of a type | DEL | `/certs?type=hkust` | type; request body with an array | x | Issuer of that type | | **Verify Certificates** | | | | | | | Verify a certificate of a specified holder | GET | `/certs/verify?holder=tina&type=hkust` | holder; type | A boolean value | Anyone | ## Goal (Old) | Function | API | Required Field | | -------- | -------- | -------- | | **View** | | | | All certs (Temporarily Available) |`/view` | x | | All cert types |`/view/type` | x | | Specific cert type |`/view?certName=iota` | x | | Specific owner |`/view?owner=tina` | x | | **Issue** | | | | One cert | `/issue/new?certName=iota&owner=tina` | certName, owner | | Batch certs | `/issue/new?certName=iota&owners=xxx.csv` | certName, owners | | Revoke | `/issue/revoke?certName=iota&owner=tina` | certName, owner | | **Verify** | | | | Specific cert | `/verify?certName=iota&owner=tina` | certName, owner | | **Admin** | | | | Assign new issuer; return new issuer access token | `/admin/newIssuer?certName=iota` | certName | | Revoke issuer | `/admin/revokeIssuer?certName=iota` | certName | ## TODO - [x] Reorganize code - Modularize all index_xxx.js files - Make them all similar to index_iota.js - [ ] Require credentials for Admin and Issuer - We, as Admin, have the admin secret key - We will give the Issuer a access token - Only Issuer for specific cert type can issue and revoke certs - [ ] Define standard schema for cert, issuer, and owner (reference W3C DID) - cert schema - ID (ipfs hash) - owner - certName - issuer - timestamp - isValid (revoked or not) - [ ] Track all certs by ID - create a table that maps cert ID to cert owner, cert name, etc, according to cert schema - can view, verify, revoke cert by ID - [ ] Store all cert schema data in our DB, for emergencies - [ ] Speed up ipfs loading speed - https://github.com/ConsenSys/Mahuta - [ ] Integrate with IOTA TangleID - https://github.com/TangleID/TangleID ## References - [Rest API Best Practices](https://restfulapi.net/resource-naming/) - [HTTP Status Code Cheatsheet](https://codeburst.io/know-your-http-status-a-cheat-sheet-for-http-status-codes-5fb43863e589)