From 1ea621813fcc37a2bd1d194aa8e034b7aadd1bdc Mon Sep 17 00:00:00 2001 From: Hyperledger Bot Date: Fri, 26 Apr 2024 13:53:28 +0000 Subject: [PATCH] chore(release): cut Identus Cloud agent 1.32.0 release # [1.32.0](https://github.com/hyperledger/identus-cloud-agent/compare/cloud-agent-v1.31.0...cloud-agent-v1.32.0) (2024-04-26) ### Bug Fixes * add shared-crypto module and apollo wrapper for other key types ([#958](https://github.com/hyperledger/identus-cloud-agent/issues/958)) ([7eaa66c](https://github.com/hyperledger/identus-cloud-agent/commit/7eaa66c51904e58c309fd3bb0a8e8864c7902cb9)) * Check purpose of the keys ([#968](https://github.com/hyperledger/identus-cloud-agent/issues/968)) ([4b8e48d](https://github.com/hyperledger/identus-cloud-agent/commit/4b8e48d238b751ee8526e1440e8a0515f6b62de5)) * Integration Test ([#974](https://github.com/hyperledger/identus-cloud-agent/issues/974)) ([847eb2f](https://github.com/hyperledger/identus-cloud-agent/commit/847eb2f56ba2766ed28f6484391cbd9b3202fbe5)) * **prism-agent:** add missing 'PresentationVerificationFailed' status to REST API response enum ([#948](https://github.com/hyperledger/identus-cloud-agent/issues/948)) ([9a38cc9](https://github.com/hyperledger/identus-cloud-agent/commit/9a38cc97c18d26f13efa1c9535de1df003547a2b)) * use apollo for secp256k1 in shared-crypto ([#971](https://github.com/hyperledger/identus-cloud-agent/issues/971)) ([dd5e20b](https://github.com/hyperledger/identus-cloud-agent/commit/dd5e20bdedd004c2e0a81383d10b5eee3ae03788)) ### Features * add sample maintainers.md ([#878](https://github.com/hyperledger/identus-cloud-agent/issues/878)) ([c6a41ed](https://github.com/hyperledger/identus-cloud-agent/commit/c6a41edc5466312da76283d37f12406d79449a7d)) * **agent:** verification API integration test + documentation ATL-6775 ([#986](https://github.com/hyperledger/identus-cloud-agent/issues/986)) ([9308b21](https://github.com/hyperledger/identus-cloud-agent/commit/9308b21e46d267265c7fcdbfc88b78ddd5ae6558)) * Align the repo with new name identus-cloud-agent ([#973](https://github.com/hyperledger/identus-cloud-agent/issues/973)) ([9fc7bb0](https://github.com/hyperledger/identus-cloud-agent/commit/9fc7bb07cac9aae1db8d389ec8831403f106d612)) * Configurations load improvement ([#954](https://github.com/hyperledger/identus-cloud-agent/issues/954)) ([dfb7577](https://github.com/hyperledger/identus-cloud-agent/commit/dfb75778f925a615aaec815241d964014d236777)) * **connect:** ATL-6599 Use ZIO Failures and Defects effectively + RFC-9457 in connect ([#927](https://github.com/hyperledger/identus-cloud-agent/issues/927)) ([eb898e0](https://github.com/hyperledger/identus-cloud-agent/commit/eb898e068f768507d6979a5d9bab35ef7ad4a045)) * key management for Ed25519 and X25519 ([#966](https://github.com/hyperledger/identus-cloud-agent/issues/966)) ([a0f6819](https://github.com/hyperledger/identus-cloud-agent/commit/a0f6819bb80d87c13f903d7dc1b67cb08b4687db)) * Vc Verification Api ([#975](https://github.com/hyperledger/identus-cloud-agent/issues/975)) ([f0a1f2c](https://github.com/hyperledger/identus-cloud-agent/commit/f0a1f2c1aaafb636cabcb84c599d9deaa90fd373)) Signed-off-by: Allain Magyar --- CHANGELOG.md | 22 + DEPENDENCIES.md | 129 +- .../api/http/cloud-agent-openapi-spec.yaml | 3869 ++++++++--------- infrastructure/charts/agent/Chart.yaml | 4 +- infrastructure/charts/index.yaml | 64 +- infrastructure/charts/prism-agent-1.32.0.tgz | Bin 0 -> 160949 bytes infrastructure/local/.env | 2 +- package-lock.json | 8 +- package.json | 2 +- version.sbt | 2 +- 10 files changed, 2049 insertions(+), 2053 deletions(-) create mode 100644 infrastructure/charts/prism-agent-1.32.0.tgz diff --git a/CHANGELOG.md b/CHANGELOG.md index a3a46b31f3..59af0deea7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,25 @@ +# [1.32.0](https://github.com/hyperledger/identus-cloud-agent/compare/cloud-agent-v1.31.0...cloud-agent-v1.32.0) (2024-04-26) + + +### Bug Fixes + +* add shared-crypto module and apollo wrapper for other key types ([#958](https://github.com/hyperledger/identus-cloud-agent/issues/958)) ([7eaa66c](https://github.com/hyperledger/identus-cloud-agent/commit/7eaa66c51904e58c309fd3bb0a8e8864c7902cb9)) +* Check purpose of the keys ([#968](https://github.com/hyperledger/identus-cloud-agent/issues/968)) ([4b8e48d](https://github.com/hyperledger/identus-cloud-agent/commit/4b8e48d238b751ee8526e1440e8a0515f6b62de5)) +* Integration Test ([#974](https://github.com/hyperledger/identus-cloud-agent/issues/974)) ([847eb2f](https://github.com/hyperledger/identus-cloud-agent/commit/847eb2f56ba2766ed28f6484391cbd9b3202fbe5)) +* **prism-agent:** add missing 'PresentationVerificationFailed' status to REST API response enum ([#948](https://github.com/hyperledger/identus-cloud-agent/issues/948)) ([9a38cc9](https://github.com/hyperledger/identus-cloud-agent/commit/9a38cc97c18d26f13efa1c9535de1df003547a2b)) +* use apollo for secp256k1 in shared-crypto ([#971](https://github.com/hyperledger/identus-cloud-agent/issues/971)) ([dd5e20b](https://github.com/hyperledger/identus-cloud-agent/commit/dd5e20bdedd004c2e0a81383d10b5eee3ae03788)) + + +### Features + +* add sample maintainers.md ([#878](https://github.com/hyperledger/identus-cloud-agent/issues/878)) ([c6a41ed](https://github.com/hyperledger/identus-cloud-agent/commit/c6a41edc5466312da76283d37f12406d79449a7d)) +* **agent:** verification API integration test + documentation ATL-6775 ([#986](https://github.com/hyperledger/identus-cloud-agent/issues/986)) ([9308b21](https://github.com/hyperledger/identus-cloud-agent/commit/9308b21e46d267265c7fcdbfc88b78ddd5ae6558)) +* Align the repo with new name identus-cloud-agent ([#973](https://github.com/hyperledger/identus-cloud-agent/issues/973)) ([9fc7bb0](https://github.com/hyperledger/identus-cloud-agent/commit/9fc7bb07cac9aae1db8d389ec8831403f106d612)) +* Configurations load improvement ([#954](https://github.com/hyperledger/identus-cloud-agent/issues/954)) ([dfb7577](https://github.com/hyperledger/identus-cloud-agent/commit/dfb75778f925a615aaec815241d964014d236777)) +* **connect:** ATL-6599 Use ZIO Failures and Defects effectively + RFC-9457 in connect ([#927](https://github.com/hyperledger/identus-cloud-agent/issues/927)) ([eb898e0](https://github.com/hyperledger/identus-cloud-agent/commit/eb898e068f768507d6979a5d9bab35ef7ad4a045)) +* key management for Ed25519 and X25519 ([#966](https://github.com/hyperledger/identus-cloud-agent/issues/966)) ([a0f6819](https://github.com/hyperledger/identus-cloud-agent/commit/a0f6819bb80d87c13f903d7dc1b67cb08b4687db)) +* Vc Verification Api ([#975](https://github.com/hyperledger/identus-cloud-agent/issues/975)) ([f0a1f2c](https://github.com/hyperledger/identus-cloud-agent/commit/f0a1f2c1aaafb636cabcb84c599d9deaa90fd373)) + # [1.31.0](https://github.com/hyperledger/identus-cloud-agent/compare/prism-agent-v1.30.1...prism-agent-v1.31.0) (2024-03-20) diff --git a/DEPENDENCIES.md b/DEPENDENCIES.md index 572b9e8887..e1d2e54810 100644 --- a/DEPENDENCIES.md +++ b/DEPENDENCIES.md @@ -49,7 +49,7 @@ Apache | [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [com.softwar Apache | [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [com.softwaremill.sttp.tapir # tapir-zio-http-server_3 # 1.6.4](http://softwaremill.com/open-source) | Apache | [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [com.softwaremill.sttp.tapir # tapir-zio_3 # 1.6.4](http://softwaremill.com/open-source) | Apache | [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | com.squareup.okhttp # okhttp # 2.7.4 | -Apache | [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | com.squareup.okhttp3 # okhttp # 3.12.8 | +Apache | [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | com.squareup.okhttp3 # okhttp # 3.14.9 | Apache | [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | com.squareup.okio # okio # 1.17.5 | Apache | [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [io.circe # circe-yaml_3 # 0.14.2](https://github.com/circe/circe-yaml) | Apache | [Apache 2.0](https://opensource.org/licenses/Apache-2.0) | [io.grpc # grpc-api # 1.47.1](https://github.com/grpc/grpc-java) | @@ -64,7 +64,6 @@ Apache | [Apache 2.0](https://opensource.org/licenses/Apache-2.0) | [io.perfmark Apache | [Apache 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [org.typelevel # simulacrum-scalafix-annotations_3 # 0.5.4](https://github.com/typelevel/simulacrum-scalafix) | Apache | [Apache 2.0](https://github.com/swagger-api/swagger-ui) | [org.webjars # swagger-ui # 5.1.3](http://webjars.org) | Apache | [Apache 2.0 License](http://www.apache.org/licenses/LICENSE-2.0.html) | [com.typesafe.scala-logging # scala-logging_3 # 3.9.5](https://github.com/lightbend/scala-logging) | -Apache | [Apache License 2.0](https://raw.githubusercontent.com/h0tk3y/better-parse/master/LICENSE) | [com.github.h0tk3y.betterParse # better-parse-jvm # 0.4.3](https://github.com/h0tk3y/better-parse) | Apache | [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [io.getquill # quill-doobie_3 # 4.7.3](https://zio.dev/zio-protoquill) | Apache | [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [io.getquill # quill-engine_3 # 4.7.3](https://zio.dev/zio-quill) | Apache | [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [io.getquill # quill-jdbc-zio_3 # 4.7.3](https://zio.dev/zio-protoquill) | @@ -81,6 +80,13 @@ Apache | [Apache License 2.0](https://repository.jboss.org/licenses/apache-2.0.t Apache | [Apache License 2.0](https://repository.jboss.org/licenses/apache-2.0.txt) | org.jboss.resteasy # resteasy-jaxb-provider # 6.2.4.Final | Apache | [Apache License 2.0](https://repository.jboss.org/licenses/apache-2.0.txt) | org.jboss.resteasy # resteasy-multipart-provider # 6.2.4.Final | Apache | [Apache License Version 2.0](https://www.apache.org/licenses/LICENSE-2.0) | [com.networknt # json-schema-validator # 1.3.2](https://github.com/networknt/json-schema-validator) | +Apache | [Apache License v2.0](https://www.apache.org/licenses/LICENSE-2.0) | [fr.acinq.secp256k1 # secp256k1-kmp-jni-common # 0.11.0](https://github.com/ACINQ/secp256k1-kmp) | +Apache | [Apache License v2.0](https://www.apache.org/licenses/LICENSE-2.0) | [fr.acinq.secp256k1 # secp256k1-kmp-jni-jvm # 0.11.0](https://github.com/ACINQ/secp256k1-kmp) | +Apache | [Apache License v2.0](https://www.apache.org/licenses/LICENSE-2.0) | [fr.acinq.secp256k1 # secp256k1-kmp-jni-jvm-darwin # 0.11.0](https://github.com/ACINQ/secp256k1-kmp) | +Apache | [Apache License v2.0](https://www.apache.org/licenses/LICENSE-2.0) | [fr.acinq.secp256k1 # secp256k1-kmp-jni-jvm-extract # 0.11.0](https://github.com/ACINQ/secp256k1-kmp) | +Apache | [Apache License v2.0](https://www.apache.org/licenses/LICENSE-2.0) | [fr.acinq.secp256k1 # secp256k1-kmp-jni-jvm-linux # 0.11.0](https://github.com/ACINQ/secp256k1-kmp) | +Apache | [Apache License v2.0](https://www.apache.org/licenses/LICENSE-2.0) | [fr.acinq.secp256k1 # secp256k1-kmp-jni-jvm-mingw # 0.11.0](https://github.com/ACINQ/secp256k1-kmp) | +Apache | [Apache License v2.0](https://www.apache.org/licenses/LICENSE-2.0) | [fr.acinq.secp256k1 # secp256k1-kmp-jvm # 0.14.0](https://github.com/ACINQ/secp256k1-kmp) | Apache | [Apache License v2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [net.java.dev.jna # jna # 5.3.1](https://github.com/java-native-access/jna) | Apache | [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [com.ethlo.time # itu # 1.8.0](https://github.com/ethlo/itu) | Apache | [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [com.github.stephenc.jcip # jcip-annotations # 1.0-1](http://stephenc.github.com/jcip-annotations) | @@ -90,7 +96,6 @@ Apache | [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2 Apache | [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [io.github.erdtman # java-json-canonicalization # 1.1](https://github.com/erdtman/java-json-canonicalization) | Apache | [Apache License, Version 2.0](https://opensource.org/licenses/Apache-2.0) | [io.iohk.atala # prism-common-jvm # 1.4.1](https://github.com/input-output-hk/atala-prism-sdk.git) | Apache | [Apache License, Version 2.0](https://opensource.org/licenses/Apache-2.0) | [io.iohk.atala # prism-crypto-jvm # 1.4.1](https://github.com/input-output-hk/atala-prism-sdk.git) | -Apache | [Apache License, Version 2.0](https://opensource.org/licenses/Apache-2.0) | [io.iohk.atala # prism-identity-jvm # 1.4.1](https://github.com/input-output-hk/atala-prism-sdk.git) | Apache | [Apache License, Version 2.0](https://opensource.org/licenses/Apache-2.0) | [io.iohk.atala # prism-protos-jvm # 1.4.1](https://github.com/input-output-hk/atala-prism-sdk.git) | Apache | [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0) | io.netty # netty-buffer # 4.1.101.Final | Apache | [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0) | io.netty # netty-codec # 4.1.101.Final | @@ -142,10 +147,10 @@ Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [com.typesa Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # izumi-reflect-thirdparty-boopickle-shaded_3 # 2.3.8](https://zio.dev) | Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # izumi-reflect_3 # 2.3.8](https://zio.dev) | Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-concurrent_3 # 2.0.18](https://zio.dev) | -Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-config-derivation_3 # 3.0.7](https://zio.dev/zio-config/) | -Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-config-magnolia_3 # 3.0.7](https://zio.dev/zio-config/) | -Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-config-typesafe_3 # 3.0.7](https://zio.dev/zio-config/) | -Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-config_3 # 3.0.7](https://zio.dev/zio-config/) | +Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-config-derivation_3 # 4.0.1](https://zio.dev/zio-config/) | +Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-config-magnolia_3 # 4.0.1](https://zio.dev/zio-config/) | +Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-config-typesafe_3 # 4.0.1](https://zio.dev/zio-config/) | +Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-config_3 # 4.0.1](https://zio.dev/zio-config/) | Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-constraintless_3 # 0.3.2](https://zio.dev/zio-flow/) | Apache | [Apache-2.0](https://github.com/zio/zio-http/blob/master/LICENSE) | [dev.zio # zio-http_3 # 3.0.0-RC4](https://github.com/zio/zio-http) | Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [dev.zio # zio-internal-macros_3 # 2.0.18](https://zio.dev) | @@ -198,22 +203,22 @@ Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html) | [org.h Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.http4s # http4s-crypto_3 # 0.2.4](https://github.com/http4s/http4s-crypto) | Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.html) | [org.http4s # http4s-server_3 # 0.23.23](https://http4s.org/) | Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala-compiler # 2.13.11](https://www.scala-lang.org/) | -Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala-library # 2.13.10](https://www.scala-lang.org/) | -Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala-library # 2.13.11](https://www.scala-lang.org/) | +Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala-library # 2.13.12](https://www.scala-lang.org/) | Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala-reflect # 2.13.11](https://www.scala-lang.org/) | -Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala3-compiler_3 # 3.3.1](https://github.com/lampepfl/dotty) | -Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala3-interfaces # 3.3.1](https://github.com/lampepfl/dotty) | -Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala3-library_3 # 3.3.1](https://github.com/lampepfl/dotty) | -Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala3-tasty-inspector_3 # 3.3.1](https://github.com/lampepfl/dotty) | -Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scaladoc_3 # 3.3.1](https://github.com/lampepfl/dotty) | +Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala3-compiler_3 # 3.3.3](https://github.com/lampepfl/dotty) | +Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala3-interfaces # 3.3.3](https://github.com/lampepfl/dotty) | +Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala3-library_3 # 3.3.3](https://github.com/lampepfl/dotty) | +Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scala3-tasty-inspector_3 # 3.3.3](https://github.com/lampepfl/dotty) | +Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scaladoc_3 # 3.3.3](https://github.com/lampepfl/dotty) | Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # scalap # 2.13.11](https://www.scala-lang.org/) | -Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # tasty-core_3 # 3.3.1](https://github.com/lampepfl/dotty) | +Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang # tasty-core_3 # 3.3.3](https://github.com/lampepfl/dotty) | Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang.modules # scala-collection-compat_3 # 2.11.0](http://www.scala-lang.org/) | Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang.modules # scala-collection-compat_3 # 2.8.1](http://www.scala-lang.org/) | Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang.modules # scala-collection-compat_3 # 2.9.0](http://www.scala-lang.org/) | Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang.modules # scala-parallel-collections_3 # 1.0.4](http://www.scala-lang.org/) | Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-lang.modules # scala-xml_3 # 2.1.0](http://www.scala-lang.org/) | -Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-sbt # compiler-interface # 1.3.5](https://github.com/sbt/zinc) | +Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0) | [org.scala-sbt # compiler-interface # 1.9.3](https://github.com/sbt/zinc) | +Apache | [Apache-2.0](https://github.com/sbt/sbt/blob/develop/LICENSE) | [org.scala-sbt # util-interface # 1.9.2](https://github.com/sbt/sbt) | Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [org.scalameta # junit-interface # 0.7.29](https://github.com/scalameta/munit) | Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [org.scalameta # junit-interface # 1.0.0-M8](https://github.com/scalameta/munit) | Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [org.scalameta # munit_3 # 0.7.29](https://github.com/scalameta/munit) | @@ -236,18 +241,19 @@ Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.ty Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.typelevel # log4cats-core_3 # 2.6.0](https://typelevel.org/log4cats) | Apache | [Apache-2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.typelevel # log4cats-slf4j_3 # 2.6.0](https://typelevel.org/log4cats) | Apache | [Apache-2.0](http://www.apache.org/licenses/LICENSE-2.0) | [org.typelevel # paiges-core_2.13 # 0.4.2](https://github.com/typelevel/paiges) | -Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [com.ionspin.kotlin # bignum-jvm # 0.3.1](https://github.com/ionspin/kotlin-multiplatform-bignum) | +Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [com.ionspin.kotlin # bignum-jvm # 0.3.9](https://github.com/ionspin/kotlin-multiplatform-bignum) | Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [com.zmannotes # varint # 1.0.0](https://github.com/zman2013/varint) | +Apache | [The Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [io.iohk.atala.prism.apollo # apollo-jvm # 1.2.14](https://docs.atalaprism.io/) | Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.didcommx # didcomm # 0.3.1](https://github.com/sicpa-dlab/didcomm-jvm) | Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.didcommx # peerdid # 0.5.0](https://github.com/sicpa-dlab/peer-did-jvm) | -Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib # 1.6.0](https://kotlinlang.org/) | Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib # 1.8.22](https://kotlinlang.org/) | -Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib-common # 1.6.0](https://kotlinlang.org/) | +Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib # 1.9.22](https://kotlinlang.org/) | Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib-common # 1.8.22](https://kotlinlang.org/) | -Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib-jdk7 # 1.6.0](https://kotlinlang.org/) | +Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib-common # 1.9.21](https://kotlinlang.org/) | Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib-jdk7 # 1.8.22](https://kotlinlang.org/) | -Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib-jdk8 # 1.6.0](https://kotlinlang.org/) | +Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib-jdk7 # 1.9.21](https://kotlinlang.org/) | Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib-jdk8 # 1.8.22](https://kotlinlang.org/) | +Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlin # kotlin-stdlib-jdk8 # 1.9.21](https://kotlinlang.org/) | Apache | [The Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlinx # kotlinx-datetime-jvm # 0.2.1](https://github.com/Kotlin/kotlinx-datetime) | Apache | [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [com.fasterxml.jackson.core # jackson-annotations # 2.10.3](http://github.com/FasterXML/jackson) | Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [com.fasterxml.jackson.core # jackson-annotations # 2.14.0](https://github.com/FasterXML/jackson) | @@ -291,15 +297,21 @@ Apache | [The Apache Software License, Version 2.0](http://www.apache.org/licens Apache | [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | io.prometheus # simpleclient_tracer_otel # 0.16.0 | Apache | [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | io.prometheus # simpleclient_tracer_otel_agent # 0.16.0 | Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | io.quarkus # quarkus-junit4-mock # 3.2.0.Final | -Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.bitcoinj # bitcoinj-core # 0.15.10](https://bitcoinj.github.io) | +Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.bitcoinj # bitcoinj-core # 0.16.2](https://bitcoinj.org/) | Apache | [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains # annotations # 13.0](http://www.jetbrains.org) | Apache | [The Apache Software License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains # annotations # 15.0](http://www.jetbrains.org) | Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains # annotations # 17.0.0](https://github.com/JetBrains/java-annotations) | Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlinx # kotlinx-coroutines-core # 1.5.1-new-mm-dev2](https://github.com/Kotlin/kotlinx.coroutines) | -Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlinx # kotlinx-coroutines-core-jvm # 1.5.2](https://github.com/Kotlin/kotlinx.coroutines) | +Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlinx # kotlinx-coroutines-core-jvm # 1.5.1-new-mm-dev2](https://github.com/Kotlin/kotlinx.coroutines) | Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlinx # kotlinx-coroutines-jdk8 # 1.5.2](https://github.com/Kotlin/kotlinx.coroutines) | -Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlinx # kotlinx-serialization-core-jvm # 1.3.0](https://github.com/Kotlin/kotlinx.serialization) | -Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlinx # kotlinx-serialization-json-jvm # 1.3.0](https://github.com/Kotlin/kotlinx.serialization) | +Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlinx # kotlinx-serialization-core-jvm # 1.6.2](https://github.com/Kotlin/kotlinx.serialization) | +Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.jetbrains.kotlinx # kotlinx-serialization-json-jvm # 1.6.2](https://github.com/Kotlin/kotlinx.serialization) | +Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.kotlincrypto.core # common-jvm # 0.4.0](https://github.com/KotlinCrypto/core/) | +Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.kotlincrypto.core # digest-jvm # 0.4.0](https://github.com/KotlinCrypto/core/) | +Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.kotlincrypto.core # mac-jvm # 0.3.0](https://github.com/KotlinCrypto/core/) | +Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.kotlincrypto.hash # sha2-jvm # 0.4.0](https://github.com/KotlinCrypto/hash/) | +Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.kotlincrypto.macs # hmac-jvm # 0.3.0](https://github.com/KotlinCrypto/MACs/) | +Apache | [The Apache Software License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0.txt) | [org.kotlincrypto.macs # hmac-sha2-jvm # 0.3.0](https://github.com/KotlinCrypto/MACs/) | Apache | [the Apache License, ASL Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [org.scalactic # scalactic_3 # 3.2.15](http://www.scalatest.org) | Apache | [the Apache License, ASL Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [org.scalactic # scalactic_3 # 3.2.16](http://www.scalatest.org) | Apache | [the Apache License, ASL Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [org.scalatest # scalatest-compatible # 3.2.15](http://www.scalatest.org) | @@ -334,7 +346,7 @@ Apache | [the Apache License, ASL Version 2.0](http://www.apache.org/licenses/LI Apache | [the Apache License, ASL Version 2.0](http://www.apache.org/licenses/LICENSE-2.0) | [org.scalatest # scalatest_3 # 3.2.16](http://www.scalatest.org) | BSD | [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) | com.google.protobuf # protobuf-java # 3.14.0 | BSD | [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) | com.google.protobuf # protobuf-java # 3.19.6 | -BSD | [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) | com.google.protobuf # protobuf-java # 3.7.0 | +BSD | [3-Clause BSD License](https://opensource.org/licenses/BSD-3-Clause) | com.google.protobuf # protobuf-javalite # 3.18.0 | BSD | [BSD](https://github.com/sbt/test-interface/blob/master/LICENSE) | [org.scala-sbt # test-interface # 1.0](http://www.scala-sbt.org) | BSD | [BSD](https://github.com/scalameta/scalameta/blob/main/LICENSE.md) | [org.scalameta # common_2.13 # 4.8.10](https://github.com/scalameta/scalameta) | BSD | [BSD](https://github.com/scalameta/scalameta/blob/main/LICENSE.md) | [org.scalameta # parsers_2.13 # 4.8.10](https://github.com/scalameta/scalameta) | @@ -366,7 +378,6 @@ BSD | [BSD 2-Clause License](http://opensource.org/licenses/BSD-2-Clause) | com. BSD | [BSD 2-Clause License](http://opensource.org/licenses/BSD-2-Clause) | com.vladsch.flexmark # flexmark-util-visitor # 0.62.2 | BSD | [BSD 3-clause](http://opensource.org/licenses/BSD-3-Clause) | [org.scala-lang.modules # scala-asm # 9.5.0-scala-1](http://www.scala-lang.org/) | BSD | [BSD New](https://github.com/portable-scala/portable-scala-reflect/blob/master/LICENSE) | [org.portable-scala # portable-scala-reflect_2.13 # 1.1.2](https://github.com/portable-scala/portable-scala-reflect) | -BSD | [BSD New](https://github.com/sbt/sbt/blob/0.13/LICENSE) | [org.scala-sbt # util-interface # 1.3.0](https://github.com/sbt/util) | BSD | [BSD-2-Clause](https://jdbc.postgresql.org/about/license.html) | [org.postgresql # postgresql # 42.3.1](https://jdbc.postgresql.org) | BSD | [BSD-3-Clause](https://github.com/scodec/scodec-bits/blob/main/LICENSE) | [org.scodec # scodec-bits_3 # 1.1.38](https://github.com/scodec/scodec-bits) | BSD | [EDL 1.0](http://www.eclipse.org/org/documents/edl-v10.php) | [jakarta.activation # jakarta.activation-api # 2.1.2](https://github.com/jakartaee/jaf-api) | @@ -377,9 +388,8 @@ BSD | [The BSD License](https://opensource.org/licenses/BSD-3-Clause) | org.jlin BSD | [The BSD License](https://opensource.org/licenses/BSD-3-Clause) | org.jline # jline-terminal # 3.19.0 | BSD | [The BSD License](https://opensource.org/licenses/BSD-3-Clause) | org.jline # jline-terminal-jna # 3.19.0 | Bouncy Castle License | [Bouncy Castle Licence](https://www.bouncycastle.org/licence.html) | [org.bouncycastle # bcpkix-jdk15on # 1.70](https://www.bouncycastle.org/java.html) | -Bouncy Castle License | [Bouncy Castle Licence](http://www.bouncycastle.org/licence.html) | [org.bouncycastle # bcprov-jdk15on # 1.68](http://www.bouncycastle.org/java.html) | Bouncy Castle License | [Bouncy Castle Licence](https://www.bouncycastle.org/licence.html) | [org.bouncycastle # bcprov-jdk15on # 1.70](https://www.bouncycastle.org/java.html) | -Bouncy Castle License | [Bouncy Castle Licence](http://www.bouncycastle.org/licence.html) | [org.bouncycastle # bcprov-jdk15to18 # 1.68](http://www.bouncycastle.org/java.html) | +Bouncy Castle License | [Bouncy Castle Licence](http://www.bouncycastle.org/licence.html) | [org.bouncycastle # bcprov-jdk15to18 # 1.69](http://www.bouncycastle.org/java.html) | Bouncy Castle License | [Bouncy Castle Licence](https://www.bouncycastle.org/licence.html) | [org.bouncycastle # bcutil-jdk15on # 1.70](https://www.bouncycastle.org/java.html) | EPL | [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html) | [junit # junit # 4.13.1](http://junit.org) | EPL | [Eclipse Public License 1.0](http://www.eclipse.org/legal/epl-v10.html) | [junit # junit # 4.13.2](http://junit.org) | @@ -413,8 +423,10 @@ MIT | [MIT](http://opensource.org/licenses/MIT) | [org.tpolecat # doobie-hikari_ MIT | [MIT](http://opensource.org/licenses/MIT) | [org.tpolecat # doobie-postgres-circe_3 # 1.0.0-RC2](https://github.com/tpolecat/doobie) | MIT | [MIT](http://opensource.org/licenses/MIT) | [org.tpolecat # doobie-postgres_3 # 1.0.0-RC2](https://github.com/tpolecat/doobie) | MIT | [MIT](http://opensource.org/licenses/MIT) | [org.tpolecat # typename_3 # 1.0.0](https://github.com/tpolecat/typename) | +MIT | [MIT](https://opensource.org/licenses/MIT) | [org.typelevel # cats-core_3 # 2.8.0](https://typelevel.org/cats) | MIT | [MIT](https://opensource.org/licenses/MIT) | [org.typelevel # cats-core_3 # 2.9.0](https://typelevel.org/cats) | MIT | [MIT](http://opensource.org/licenses/MIT) | [org.typelevel # cats-free_3 # 2.7.0](https://github.com/typelevel/cats) | +MIT | [MIT](https://opensource.org/licenses/MIT) | [org.typelevel # cats-kernel_3 # 2.8.0](https://typelevel.org/cats) | MIT | [MIT](https://opensource.org/licenses/MIT) | [org.typelevel # cats-kernel_3 # 2.9.0](https://typelevel.org/cats) | MIT | [MIT](https://opensource.org/licenses/MIT) | [org.typelevel # cats-parse_3 # 0.3.10](https://typelevel.org/cats-parse) | MIT | [MIT](https://opensource.org/licenses/MIT) | [org.typelevel # cats-parse_3 # 0.3.8](https://typelevel.org/cats-parse) | @@ -435,7 +447,7 @@ MIT | [MIT License](http://www.opensource.org/licenses/mit-license.php) | [ua.co MIT | [MIT license](http://www.opensource.org/licenses/mit-license.php) | org.codehaus.mojo # animal-sniffer-annotations # 1.19 | MIT | [The MIT License](http://opensource.org/licenses/MIT) | [org.checkerframework # checker-compat-qual # 2.5.5](https://checkerframework.org) | MIT | [The MIT License](http://opensource.org/licenses/MIT) | [org.checkerframework # checker-qual # 3.12.0](https://checkerframework.org) | -MIT | [The MIT License](https://jsoup.org/license) | [org.jsoup # jsoup # 1.14.3](https://jsoup.org/) | +MIT | [The MIT License](https://jsoup.org/license) | [org.jsoup # jsoup # 1.17.2](https://jsoup.org/) | MIT | [The MIT License](https://github.com/mockito/mockito/blob/main/LICENSE) | [org.mockito # mockito-core # 4.11.0](https://github.com/mockito/mockito) | MIT | [The MIT License (MIT)](https://opensource.org/licenses/MIT) | [com.dimafeng # testcontainers-scala-core_3 # 0.41.0](https://github.com/testcontainers/testcontainers-scala) | MIT | [The MIT License (MIT)](https://opensource.org/licenses/MIT) | [com.dimafeng # testcontainers-scala-jdbc_3 # 0.41.0](https://github.com/testcontainers/testcontainers-scala) | @@ -443,33 +455,34 @@ MIT | [The MIT License (MIT)](https://opensource.org/licenses/MIT) | [com.dimafe MIT | [The MIT License (MIT)](https://opensource.org/licenses/MIT) | [com.dimafeng # testcontainers-scala-vault_3 # 0.41.0](https://github.com/testcontainers/testcontainers-scala) | Public Domain | [Public Domain, per Creative Commons CC0](http://creativecommons.org/publicdomain/zero/1.0/) | [org.hdrhistogram # HdrHistogram # 2.1.12](http://hdrhistogram.github.io/HdrHistogram/) | Public Domain | [Public Domain, per Creative Commons CC0](http://creativecommons.org/publicdomain/zero/1.0/) | [org.latencyutils # LatencyUtils # 2.0.3](http://latencyutils.github.io/LatencyUtils/) | -none specified | []() | [io.iohk.atala # castor-core_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # connect-core_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # connect-sql-doobie_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # event-notification_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-agent-core_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-agent-didcommx_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-data-models_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-connection_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-coordinate-mediation_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-invitation_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-issue-credential_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-mailbox_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-outofband-login_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-present-proof_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-report-problem_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-revocation-notification_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-routing-2-0_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-protocol-trust-ping_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-resolver_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # mercury-verifiable-credentials_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # pollux-anoncreds_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # pollux-core_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # pollux-sql-doobie_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # pollux-vc-jwt_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # prism-agent-wallet-api_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # prism-node-client_3 # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # shared # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | -none specified | []() | [io.iohk.atala # sharedtest # 1.30.1-SNAPSHOT](https://github.com/input-output-hk/atala-prism-building-blocks) | none specified | []() | [net.jcip # jcip-annotations # 1.0](http://jcip.net/) | +none specified | []() | [org.hyperledger # castor-core_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # cloud-agent-wallet-api_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # connect-core_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # connect-sql-doobie_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # event-notification_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-agent-core_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-agent-didcommx_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-data-models_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-connection_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-coordinate-mediation_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-invitation_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-issue-credential_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-mailbox_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-outofband-login_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-present-proof_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-report-problem_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-revocation-notification_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-routing-2-0_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-protocol-trust-ping_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-resolver_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # mercury-verifiable-credentials_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # pollux-anoncreds_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # pollux-core_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # pollux-sql-doobie_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # pollux-vc-jwt_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # prism-node-client_3 # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # shared # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # shared-crypto # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | +none specified | []() | [org.hyperledger # shared-test # 1.31.0-SNAPSHOT](https://github.com/hyperledger/identus-cloud-agent) | diff --git a/cloud-agent/service/api/http/cloud-agent-openapi-spec.yaml b/cloud-agent/service/api/http/cloud-agent-openapi-spec.yaml index d0076a76b7..b7fdecc6ae 100644 --- a/cloud-agent/service/api/http/cloud-agent-openapi-spec.yaml +++ b/cloud-agent/service/api/http/cloud-agent-openapi-spec.yaml @@ -1,24 +1,20 @@ openapi: 3.0.3 info: - title: Identus Cloud Agent API Reference - version: 1.31.0 + title: Open Enterprise Agent API Reference + version: 1.32.0 description: |2 - The Identus Cloud Agent API facilitates the integration and management of self-sovereign identity capabilities within applications. + The Open Enterprise Agent API facilitates the integration and management of self-sovereign identity capabilities within applications. It supports DID (Decentralized Identifiers) management, verifiable credential exchange, and secure messaging based on DIDComm standards. The API is designed to be interoperable with various blockchain and DLT (Distributed Ledger Technology) platforms, ensuring wide compatibility and flexibility. Key features include connection management, credential issuance and verification, and secure, privacy-preserving communication between entities. - Additional information and the full list of capabilities can be found in the [Identus Cloud Agent documentation](https://docs.atalaprism.io/docs/category/prism-cloud-agent) - termsOfService: |2 - - Users of the Identus Cloud Agent API must adhere to the terms and conditions outlined in [Link to Terms of Service](/). - This includes compliance with relevant data protection regulations, responsible usage policies, and adherence to the principles of decentralized identity management. + Additional information and the full list of capabilities can be found in the [Open Enterprise Agent documentation](https://docs.atalaprism.io/docs/category/prism-cloud-agent) license: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0 tags: - - name: Connections Management - description: |2 +- name: Connections Management + description: |2 The __Connections Management__ endpoints facilitate the initiation of connection flows between the current Agent and peer Agents, regardless of whether they reside in Cloud Agent or edge environments. This implementation adheres to the DIDComm Messaging v2.0 - [Out of Band Messages](https://identity.foundation/didcomm-messaging/spec/v2.0/#out-of-band-messages) specification [section 9.5.4](https://identity.foundation/didcomm-messaging/spec/v2.0/#invitation) - to generate invitations. @@ -27,9 +23,9 @@ tags: Upon accepting an invitation, the invitee sends a connection request to the inviter's DIDComm messaging service endpoint. The connection request's 'type' attribute must be specified as "https://atalaprism.io/mercury/connections/1.0/request". The inviter agent responds with a connection response message, indicated by a 'type' attribute of "https://atalaprism.io/mercury/connections/1.0/response". - Both request and response types are proprietary to the Identus Cloud Agent ecosystem. - - name: Issue Credentials Protocol - description: |2 + Both request and response types are proprietary to the Open Enterprise Agent ecosystem. +- name: Issue Credentials Protocol + description: |2 The __Issue Credentials Protocol__ endpoints facilitate the initiation of credential issuance flows between the current Agent and peer Agents, regardless of whether they reside in Cloud Agent or edge environments. This implementation adheres to the [Issue Credential Protocol 3.0](https://github.com/decentralized-identity/waci-didcomm/tree/main/issue_credential) specification to execute credential issuance flows. @@ -37,8 +33,8 @@ tags: Upon accepting the received offer, the holder sends a [credential request](https://github.com/decentralized-identity/waci-didcomm/tree/main/issue_credential#request-credential) to the issuer. The issuer agent will then issue the credential (JWT or AnonCreds) and send an [issue credential](https://github.com/decentralized-identity/waci-didcomm/tree/main/issue_credential#issue-credential) message containing the verifiable credential to the holder. The current implementation only supports one of the three alternative beginnings proposed in the spec, which is "the Issuer begin with an offer". - - name: Verification - description: |2- +- name: Verification + description: |2- The __Verification__ endpoints enable the management and lookup of verification policies,which are applied to W3C Verifiable Credentials in JWT format. @@ -49,8 +45,8 @@ tags: This functionality ensures the system's integrity and adherence to specific verification requirements. Endpoints are secured by __apiKeyAuth__ or __jwtAuth__ authentication. - - name: Schema Registry - description: |2 +- name: Schema Registry + description: |2 The __Schema Registry__ is a REST API that allows to publish and lookup credential schemas in [W3C](https://w3c.github.io/vc-json-schema/) and [AnonCreds](https://hyperledger.github.io/anoncreds-spec/#term:schema) formats. @@ -72,11 +68,11 @@ tags: The __Credential Schema__ is referenced via `schemaId` field in the issuance and verification flows. Endpoints are secured by __apiKeyAuth__ or __jwtAuth__ authentication. - externalDocs: - url: https://docs.atalaprism.io/tutorials/schemas/credential-schema - description: Credential Schema documentation - - name: Credential Definition Registry - description: |2 + externalDocs: + url: https://docs.atalaprism.io/tutorials/schemas/credential-schema + description: Credential Schema documentation +- name: Credential Definition Registry + description: |2 The __Credential Definition Registry__ is a REST API that allows to publish and lookup [Anoncreds Credential Definition](https://hyperledger.github.io/anoncreds-spec/#term:credential-definition) entities. @@ -85,19 +81,19 @@ tags: The secret data includes the private keys necessary to generate signed verifiable credentials that can be presented and verified using the published credential definition. Endpoints are secured by __apiKeyAuth__ or __jwtAuth__ authentication. - externalDocs: - url: https://docs.atalaprism.io/tutorials/category/credential-definition - description: Credential Definition documentation - - name: DID - description: |2 + externalDocs: + url: https://docs.atalaprism.io/tutorials/category/credential-definition + description: Credential Definition documentation +- name: DID + description: |2 The __DID__ endpoints expose publicly available DID operations. The key distinction from the __DID Registrar__ endpoints is that it directly exposes the DID resources interfacing with the [VDR](https://www.w3.org/TR/did-core/#dfn-verifiable-data-registry). It is independent of the key management and the exposed operations are not part of the tenancy within the Agent. It serves as a proxy for interacting with the VDR, facilitating actions like resolving DIDs. - - name: DID Registrar - description: |2 +- name: DID Registrar + description: |2 The __DID Registrar__ endpoints facilitate the management of [PRISM DIDs](https://github.com/input-output-hk/prism-did-method-spec) hosted in the cloud agent. @@ -107,8 +103,8 @@ tags: These DIDs can be utilized for various operations during issuance and verification processes. More examples and tutorials can be found in this [documentation](https://docs.atalaprism.io/tutorials/category/dids/). - - name: Wallet Management - description: |2 +- name: Wallet Management + description: |2 The __Wallet Management__ endpoints enable both users and administrators to manage [wallets](https://docs.atalaprism.io/docs/concepts/multi-tenancy#wallet). @@ -121,8 +117,8 @@ tags: Wallet permissions are controlled by [UMA](https://docs.atalaprism.io/docs/concepts/glossary#uma) configuration which the agent exposes endpoints to easily configure wallet access using `uma-permissions` resource. The permissions can also be configured out-of-band directly on the external IAM provider that supports the UMA standard. - - name: System - description: |2 +- name: System + description: |2 The __System__ is a REST API that allows to check the system health and scrap the runtime metrics. @@ -132,98 +128,94 @@ tags: The __metrics__ endpoint returns the runtime metrics of the running service scraped from the internal prometheus registry. This information is collected by the prometheus server and can be used to monitor the running service. servers: - - url: http://localhost:8085 - description: Local Prism Agent - - url: http://localhost/prism-agent - description: Local Prism Agent with APISIX proxy - - url: https://k8s-dev.atalaprism.io/prism-agent - description: Prism Agent on the Staging Environment +- url: http://localhost:8085 + description: Local Prism Agent +- url: http://localhost/prism-agent + description: Local Prism Agent with APISIX proxy +- url: https://k8s-dev.atalaprism.io/prism-agent + description: Prism Agent on the Staging Environment paths: /credential-definition-registry/definitions: get: tags: - - Credential Definition Registry + - Credential Definition Registry summary: Lookup credential definitions by indexed fields - description: - "Lookup credential definitions by `author`, `name`, `tag` parameters - and control the pagination by `offset` and `limit` parameters " + description: 'Lookup credential definitions by `author`, `name`, `tag` parameters + and control the pagination by `offset` and `limit` parameters ' operationId: lookupCredentialDefinitionsByQuery parameters: - - name: author - in: query - required: false - schema: - type: string - example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff - - name: name - in: query - required: false - schema: - type: string - example: DrivingLicense - - name: version - in: query - required: false - schema: - type: string - example: 1.0.0 - - name: tag - in: query - required: false - schema: - type: string - example: licence - - name: offset - in: query - description: - The number of items to skip before returning results. Default - is 0 if not specified. - required: false - schema: - type: integer - format: int32 - - name: limit - in: query - description: - The maximum number of items to return. Defaults to 100 if not - specified. - required: false - schema: - type: integer - format: int32 - - name: order - in: query - required: false - schema: - type: string + - name: author + in: query + required: false + schema: + type: string + example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff + - name: name + in: query + required: false + schema: + type: string + example: DrivingLicense + - name: version + in: query + required: false + schema: + type: string + example: 1.0.0 + - name: tag + in: query + required: false + schema: + type: string + example: licence + - name: offset + in: query + description: The number of items to skip before returning results. Default + is 0 if not specified. + required: false + schema: + type: integer + format: int32 + - name: limit + in: query + description: The maximum number of items to return. Defaults to 100 if not + specified. + required: false + schema: + type: integer + format: int32 + - name: order + in: query + required: false + schema: + type: string responses: - "200": + '200': description: Collection of CredentialDefinitions records. content: application/json: schema: - $ref: "#/components/schemas/CredentialDefinitionResponsePage" - "400": + $ref: '#/components/schemas/CredentialDefinitionResponsePage' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] post: tags: - - Credential Definition Registry + - Credential Definition Registry summary: Publish new definition to the definition registry - description: - Create the new credential definition record with metadata and internal + description: Create the new credential definition record with metadata and internal JSON Schema on behalf of Cloud Agent. The credential definition will be signed by the keys of Cloud Agent and issued by the DID that corresponds to it. operationId: createCredentialDefinition @@ -232,215 +224,209 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/CredentialDefinitionInput" + $ref: '#/components/schemas/CredentialDefinitionInput' required: true responses: - "201": + '201': description: The new credential definition record is successfully created content: application/json: schema: - $ref: "#/components/schemas/CredentialDefinitionResponse" - "400": + $ref: '#/components/schemas/CredentialDefinitionResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /credential-definition-registry/definitions/{guid}: get: tags: - - Credential Definition Registry + - Credential Definition Registry summary: Fetch the credential definition from the registry by `guid` description: Fetch the credential definition by the unique identifier operationId: getCredentialDefinitionById parameters: - - name: guid - in: path - description: Globally unique identifier of the credential definition record - required: true - schema: - type: string - format: uuid + - name: guid + in: path + description: Globally unique identifier of the credential definition record + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: CredentialDefinition found by `guid` content: application/json: schema: - $ref: "#/components/schemas/CredentialDefinitionResponse" - "400": + $ref: '#/components/schemas/CredentialDefinitionResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' /credential-definition-registry/definitions/{guid}/definition: get: tags: - - Credential Definition Registry - summary: - Fetch the inner definition field of the credential definition from + - Credential Definition Registry + summary: Fetch the inner definition field of the credential definition from the registry by `guid` - description: - Fetch the inner definition fields of the credential definition + description: Fetch the inner definition fields of the credential definition by the unique identifier operationId: getCredentialDefinitionInnerDefinitionById parameters: - - name: guid - in: path - required: true - schema: - type: string - format: uuid + - name: guid + in: path + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: CredentialDefinition found by `guid` content: application/json: schema: {} - "400": + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' /schema-registry/schemas: get: tags: - - Schema Registry + - Schema Registry summary: Lookup schemas by indexed fields - description: - "Lookup schemas by `author`, `name`, `tags` parameters and control - the pagination by `offset` and `limit` parameters " + description: 'Lookup schemas by `author`, `name`, `tags` parameters and control + the pagination by `offset` and `limit` parameters ' operationId: lookupSchemasByQuery parameters: - - name: author - in: query - required: false - schema: - type: string - example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff - - name: name - in: query - required: false - schema: - type: string - example: DrivingLicense - - name: version - in: query - required: false - schema: - type: string - example: 1.0.0 - - name: tags - in: query - required: false - schema: - type: string - example: driving - - name: offset - in: query - description: - The number of items to skip before returning results. Default - is 0 if not specified. - required: false - schema: - type: integer - format: int32 - - name: limit - in: query - description: - The maximum number of items to return. Defaults to 100 if not - specified. - required: false - schema: - type: integer - format: int32 - - name: order - in: query - required: false - schema: - type: string + - name: author + in: query + required: false + schema: + type: string + example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff + - name: name + in: query + required: false + schema: + type: string + example: DrivingLicense + - name: version + in: query + required: false + schema: + type: string + example: 1.0.0 + - name: tags + in: query + required: false + schema: + type: string + example: driving + - name: offset + in: query + description: The number of items to skip before returning results. Default + is 0 if not specified. + required: false + schema: + type: integer + format: int32 + - name: limit + in: query + description: The maximum number of items to return. Defaults to 100 if not + specified. + required: false + schema: + type: integer + format: int32 + - name: order + in: query + required: false + schema: + type: string responses: - "200": + '200': description: Collection of CredentialSchema records. content: application/json: schema: - $ref: "#/components/schemas/CredentialSchemaResponsePage" - "400": + $ref: '#/components/schemas/CredentialSchemaResponsePage' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] post: tags: - - Schema Registry + - Schema Registry summary: Publish new schema to the schema registry - description: - Create the new credential schema record with metadata and internal + description: Create the new credential schema record with metadata and internal JSON Schema on behalf of Cloud Agent. The credential schema will be signed by the keys of Cloud Agent and issued by the DID that corresponds to it. operationId: createSchema @@ -449,256 +435,251 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/CredentialSchemaInput" + $ref: '#/components/schemas/CredentialSchemaInput' required: true responses: - "201": + '201': description: The new credential schema record is successfully created content: application/json: schema: - $ref: "#/components/schemas/CredentialSchemaResponse" - "400": + $ref: '#/components/schemas/CredentialSchemaResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /schema-registry/{author}/{id}: put: tags: - - Schema Registry + - Schema Registry summary: Publish the new version of the credential schema to the schema registry - description: - Publish the new version of the credential schema record with metadata + description: Publish the new version of the credential schema record with metadata and internal JSON Schema on behalf of Cloud Agent. The credential schema will be signed by the keys of Cloud Agent and issued by the DID that corresponds to it. operationId: updateSchema parameters: - - name: author - in: path - description: - DID of the identity which authored the credential schema. A piece - of Metadata. - required: true - schema: - type: string - - name: id - in: path - description: - A locally unique identifier to address the schema. UUID is generated - by the backend. - required: true - schema: - type: string - format: uuid + - name: author + in: path + description: DID of the identity which authored the credential schema. A piece + of Metadata. + required: true + schema: + type: string + - name: id + in: path + description: A locally unique identifier to address the schema. UUID is generated + by the backend. + required: true + schema: + type: string + format: uuid requestBody: description: JSON object required for the credential schema update content: application/json: schema: - $ref: "#/components/schemas/CredentialSchemaInput" + $ref: '#/components/schemas/CredentialSchemaInput' required: true responses: - "200": + '200': description: The credential schema record is successfully updated content: application/json: schema: - $ref: "#/components/schemas/CredentialSchemaResponse" - "400": + $ref: '#/components/schemas/CredentialSchemaResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /schema-registry/schemas/{guid}: get: tags: - - Schema Registry + - Schema Registry summary: Fetch the schema from the registry by `guid` description: Fetch the credential schema by the unique identifier operationId: getSchemaById parameters: - - name: guid - in: path - description: Globally unique identifier of the credential schema record - required: true - schema: - type: string - format: uuid + - name: guid + in: path + description: Globally unique identifier of the credential schema record + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: CredentialSchema found by `guid` content: application/json: schema: - $ref: "#/components/schemas/CredentialSchemaResponse" - "400": + $ref: '#/components/schemas/CredentialSchemaResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' /schema-registry/schemas/{guid}/schema: get: tags: - - Schema Registry + - Schema Registry summary: Fetch the schema from the registry by `guid` description: Fetch the credential schema by the unique identifier operationId: getRawSchemaById parameters: - - name: guid - in: path - required: true - schema: - type: string - format: uuid + - name: guid + in: path + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: Raw JSON response of the CredentialSchema content: application/json: schema: {} - "400": + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' /verification/policies: get: tags: - - Verification + - Verification summary: Lookup verification policies by query - description: - Lookup verification policies by `name`, and control the pagination + description: Lookup verification policies by `name`, and control the pagination by `offset` and `limit` parameters operationId: lookupVerificationPoliciesByQuery parameters: - - name: name - in: query - description: - A human-readable name for the verification policy. The `name` - cannot be empty. - required: false - schema: - type: string - - name: offset - in: query - required: false - schema: - type: integer - format: int32 - - name: limit - in: query - required: false - schema: - type: integer - format: int32 - - name: order - in: query - required: false - schema: - type: string + - name: name + in: query + description: A human-readable name for the verification policy. The `name` + cannot be empty. + required: false + schema: + type: string + - name: offset + in: query + required: false + schema: + type: integer + format: int32 + - name: limit + in: query + required: false + schema: + type: integer + format: int32 + - name: order + in: query + required: false + schema: + type: string responses: - "200": - description: "" + '200': + description: '' content: application/json: schema: - $ref: "#/components/schemas/VerificationPolicyResponsePage" - "400": + $ref: '#/components/schemas/VerificationPolicyResponsePage' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] post: tags: - - Verification + - Verification summary: Create the new verification policy description: Create the new verification policy operationId: createVerificationPolicy @@ -707,196 +688,195 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/VerificationPolicyInput" + $ref: '#/components/schemas/VerificationPolicyInput' required: true responses: - "201": + '201': description: Created verification policy entity content: application/json: schema: - $ref: "#/components/schemas/VerificationPolicyResponse" - "400": + $ref: '#/components/schemas/VerificationPolicyResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /verification/policies/{id}: get: tags: - - Verification + - Verification summary: Fetch the verification policy by id description: Get the verification policy by id operationId: getVerificationPolicyById parameters: - - name: id - in: path - description: Get the verification policy by id - required: true - schema: - type: string - format: uuid + - name: id + in: path + description: Get the verification policy by id + required: true + schema: + type: string + format: uuid responses: - "200": - description: "" + '200': + description: '' content: application/json: schema: - $ref: "#/components/schemas/VerificationPolicyResponse" - "400": + $ref: '#/components/schemas/VerificationPolicyResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] put: tags: - - Verification + - Verification summary: Update the verification policy object by id description: Update the verification policy entry operationId: updateVerificationPolicy parameters: - - name: id - in: path - required: true - schema: - type: string - format: uuid - - name: nonce - in: query - description: Nonce of the previous VerificationPolicy - required: true - schema: - type: integer - format: int32 + - name: id + in: path + required: true + schema: + type: string + format: uuid + - name: nonce + in: query + description: Nonce of the previous VerificationPolicy + required: true + schema: + type: integer + format: int32 requestBody: description: Update verification policy object content: application/json: schema: - $ref: "#/components/schemas/VerificationPolicyInput" + $ref: '#/components/schemas/VerificationPolicyInput' required: true responses: - "200": - description: "" + '200': + description: '' content: application/json: schema: - $ref: "#/components/schemas/VerificationPolicyResponse" - "400": + $ref: '#/components/schemas/VerificationPolicyResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] delete: tags: - - Verification + - Verification summary: Deleted the verification policy by id description: Delete the verification policy by id operationId: deleteVerificationPolicyById parameters: - - name: id - in: path - description: Delete the verification policy by id - required: true - schema: - type: string - format: uuid + - name: id + in: path + description: Delete the verification policy by id + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: Verification policy deleted successfully - "400": + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /connections: get: tags: - - Connections Management - summary: - Retrieves the list of connection flow records available from the Agent's + - Connections Management + summary: Retrieves the list of connection flow records available from the Agent's database. description: |2 @@ -906,67 +886,62 @@ paths: Pagination support is available, allowing for efficient handling of large datasets. operationId: getConnections parameters: - - name: offset - in: query - description: - The number of items to skip before returning results. Default - is 0 if not specified. - required: false - schema: - type: integer - format: int32 - - name: limit - in: query - description: - The maximum number of items to return. Defaults to 100 if not - specified. - required: false - schema: - type: integer - format: int32 - - name: thid - in: query - description: - The `thid`, shared between the inviter and the invitee, that - uniquely identifies a connection flow. - required: false - schema: - type: string + - name: offset + in: query + description: The number of items to skip before returning results. Default + is 0 if not specified. + required: false + schema: + type: integer + format: int32 + - name: limit + in: query + description: The maximum number of items to return. Defaults to 100 if not + specified. + required: false + schema: + type: integer + format: int32 + - name: thid + in: query + description: The `thid`, shared between the inviter and the invitee, that + uniquely identifies a connection flow. + required: false + schema: + type: string responses: - "200": - description: - The list of connection flow records available from the Agent's + '200': + description: The list of connection flow records available from the Agent's database content: application/json: schema: - $ref: "#/components/schemas/ConnectionsPage" - "400": + $ref: '#/components/schemas/ConnectionsPage' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] post: tags: - - Connections Management - summary: - Create a new connection invitation that can be delivered out-of-band + - Connections Management + summary: Create a new connection invitation that can be delivered out-of-band to a peer Agent. description: |2 @@ -982,44 +957,42 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/CreateConnectionRequest" + $ref: '#/components/schemas/CreateConnectionRequest' required: true responses: - "201": - description: - The connection record was created successfully, and is returned + '201': + description: The connection record was created successfully, and is returned in the response body. content: application/json: schema: - $ref: "#/components/schemas/Connection" - "400": + $ref: '#/components/schemas/Connection' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /connections/{connectionId}: get: tags: - - Connections Management - summary: - Retrieves a specific connection flow record from the Agent's database + - Connections Management + summary: Retrieves a specific connection flow record from the Agent's database based on its unique `connectionId`. description: |2 @@ -1027,53 +1000,52 @@ paths: The returned item includes essential metadata such as connection ID, thread ID, state, role, participant information, and other relevant details. operationId: getConnection parameters: - - name: connectionId - in: path - description: The `connectionId` uniquely identifying the connection flow record. - required: true - schema: - type: string - format: uuid + - name: connectionId + in: path + description: The `connectionId` uniquely identifying the connection flow record. + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: The specific connection flow record. content: application/json: schema: - $ref: "#/components/schemas/Connection" - "400": + $ref: '#/components/schemas/Connection' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /connection-invitations: post: tags: - - Connections Management - summary: - Accept a new connection invitation received out-of-band from another + - Connections Management + summary: Accept a new connection invitation received out-of-band from another peer Agent. description: |2 @@ -1084,46 +1056,45 @@ paths: A connection request will then be sent to the peer Agent to actually establish the connection, moving the record state to `ConnectionRequestSent`, and waiting the connection response from the peer Agent. operationId: acceptConnectionInvitation requestBody: - description: - The request used by an invitee to accept a connection invitation + description: The request used by an invitee to accept a connection invitation received from an inviter, using out-of-band mechanism. content: application/json: schema: - $ref: "#/components/schemas/AcceptConnectionInvitationRequest" + $ref: '#/components/schemas/AcceptConnectionInvitationRequest' required: true responses: - "200": + '200': description: The invitation was successfully accepted. content: application/json: schema: - $ref: "#/components/schemas/Connection" - "400": + $ref: '#/components/schemas/Connection' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /dids/{didRef}: get: tags: - - DID + - DID summary: Resolve Prism DID to a W3C representation description: | Resolve Prism DID to a W3C DID document representation. @@ -1132,143 +1103,141 @@ paths: The response is implemented according to [resolver HTTP binding](https://w3c-ccg.github.io/did-resolution/#bindings-https) in the DID resolution spec. operationId: getDID parameters: - - name: didRef - in: path - description: Prism DID according to [the Prism DID method syntax](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#prism-did-method-syntax) - required: true - schema: - type: string - example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff + - name: didRef + in: path + description: Prism DID according to [the Prism DID method syntax](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#prism-did-method-syntax) + required: true + schema: + type: string + example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff responses: - "200": - description: "" + '200': + description: '' content: application/ld+json; profile=https://w3id.org/did-resolution: schema: - $ref: "#/components/schemas/DIDResolutionResult" + $ref: '#/components/schemas/DIDResolutionResult' application/did+ld+json: schema: - $ref: "#/components/schemas/DIDDocument" - "400": + $ref: '#/components/schemas/DIDDocument' + '400': description: Invalid value content: text/plain: schema: type: string - "404": - description: "" + '404': + description: '' content: application/ld+json; profile=https://w3id.org/did-resolution: schema: - $ref: "#/components/schemas/DIDResolutionResult" + $ref: '#/components/schemas/DIDResolutionResult' application/did+ld+json: schema: type: string description: Empty representation - example: "" - "406": - description: "" + example: '' + '406': + description: '' content: application/ld+json; profile=https://w3id.org/did-resolution: schema: - $ref: "#/components/schemas/DIDResolutionResult" + $ref: '#/components/schemas/DIDResolutionResult' application/did+ld+json: schema: type: string description: Empty representation - example: "" - "410": - description: "" + example: '' + '410': + description: '' content: application/ld+json; profile=https://w3id.org/did-resolution: schema: - $ref: "#/components/schemas/DIDResolutionResult" + $ref: '#/components/schemas/DIDResolutionResult' application/did+ld+json: schema: type: string description: Empty representation - example: "" - "500": - description: "" + example: '' + '500': + description: '' content: application/ld+json; profile=https://w3id.org/did-resolution: schema: - $ref: "#/components/schemas/DIDResolutionResult" + $ref: '#/components/schemas/DIDResolutionResult' application/did+ld+json: schema: type: string description: Empty representation - example: "" - "501": - description: "" + example: '' + '501': + description: '' content: application/ld+json; profile=https://w3id.org/did-resolution: schema: - $ref: "#/components/schemas/DIDResolutionResult" + $ref: '#/components/schemas/DIDResolutionResult' application/did+ld+json: schema: type: string description: Empty representation - example: "" + example: '' /did-registrar/dids: get: tags: - - DID Registrar + - DID Registrar summary: List all DIDs stored in the agent's wallet description: |- List all DIDs stored in the agent's wallet. Return a paginated items ordered by created timestamp. operationId: getDid-registrarDids parameters: - - name: offset - in: query - description: - The number of items to skip before returning results. Default - is 0 if not specified. - required: false - schema: - type: integer - format: int32 - - name: limit - in: query - description: - The maximum number of items to return. Defaults to 100 if not - specified. - required: false - schema: - type: integer - format: int32 + - name: offset + in: query + description: The number of items to skip before returning results. Default + is 0 if not specified. + required: false + schema: + type: integer + format: int32 + - name: limit + in: query + description: The maximum number of items to return. Defaults to 100 if not + specified. + required: false + schema: + type: integer + format: int32 responses: - "200": + '200': description: List the agent managed DIDs in the wallet content: application/json: schema: - $ref: "#/components/schemas/ManagedDIDPage" - "400": + $ref: '#/components/schemas/ManagedDIDPage' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] post: tags: - - DID Registrar + - DID Registrar summary: Create an unpublished PRISM DID and store it in the agent's wallet description: |- Create an unpublished PRISM DID and store it in the agent's wallet. @@ -1280,101 +1249,101 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/CreateManagedDidRequest" + $ref: '#/components/schemas/CreateManagedDidRequest' required: true responses: - "201": + '201': description: Created an unpublished PRISM DID content: application/json: schema: - $ref: "#/components/schemas/CreateManagedDIDResponse" - "400": + $ref: '#/components/schemas/CreateManagedDIDResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "422": + $ref: '#/components/schemas/ErrorResponse' + '422': description: Unable to process the request content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /did-registrar/dids/{didRef}: get: tags: - - DID Registrar + - DID Registrar summary: Get a specific DID stored in the agent's wallet description: Get a specific DID stored in the agent's wallet operationId: getDid-registrarDidsDidref parameters: - - name: didRef - in: path - description: Prism DID according to [the Prism DID method syntax](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#prism-did-method-syntax) - required: true - schema: - type: string - example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff + - name: didRef + in: path + description: Prism DID according to [the Prism DID method syntax](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#prism-did-method-syntax) + required: true + schema: + type: string + example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff responses: - "200": + '200': description: Get a DID in the agent's wallet content: application/json: schema: - $ref: "#/components/schemas/ManagedDID" - "400": + $ref: '#/components/schemas/ManagedDID' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /did-registrar/dids/{didRef}/publications: post: tags: - - DID Registrar + - DID Registrar summary: Publish the DID stored in the agent's wallet to the VDR description: | Initiate the publication of the DID stored in the agent's wallet to the VDR. @@ -1385,51 +1354,51 @@ paths: In case of a failed DID publication, the status is reverted to `CREATED`. operationId: postDid-registrarDidsDidrefPublications parameters: - - name: didRef - in: path - description: Prism DID according to [the Prism DID method syntax](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#prism-did-method-syntax) - required: true - schema: - type: string - example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff + - name: didRef + in: path + description: Prism DID according to [the Prism DID method syntax](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#prism-did-method-syntax) + required: true + schema: + type: string + example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff responses: - "202": + '202': description: Publishing DID to the VDR initiated content: application/json: schema: - $ref: "#/components/schemas/DIDOperationResponse" - "400": + $ref: '#/components/schemas/DIDOperationResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /did-registrar/dids/{didRef}/updates: post: tags: - - DID Registrar + - DID Registrar summary: Update DID in the agent's wallet and post update operation to the VDR description: |- Update DID in the agent's wallet and post the update operation to the VDR. @@ -1439,71 +1408,70 @@ paths: a new update request if the previous operation is not yet comfirmed. operationId: postDid-registrarDidsDidrefUpdates parameters: - - name: didRef - in: path - description: Prism DID according to [the Prism DID method syntax](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#prism-did-method-syntax) - required: true - schema: - type: string - example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff + - name: didRef + in: path + description: Prism DID according to [the Prism DID method syntax](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#prism-did-method-syntax) + required: true + schema: + type: string + example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff requestBody: content: application/json: schema: - $ref: "#/components/schemas/UpdateManagedDIDRequest" + $ref: '#/components/schemas/UpdateManagedDIDRequest' required: true responses: - "202": + '202': description: DID update operation accepted content: application/json: schema: - $ref: "#/components/schemas/DIDOperationResponse" - "400": + $ref: '#/components/schemas/DIDOperationResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "409": + $ref: '#/components/schemas/ErrorResponse' + '409': description: Cannot process due to conflict with current state of the resource content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "422": + $ref: '#/components/schemas/ErrorResponse' + '422': description: Unable to process the request content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /did-registrar/dids/{didRef}/deactivations: post: tags: - - DID Registrar - summary: - Deactivate DID in the agent's wallet and post deactivate operation + - DID Registrar + summary: Deactivate DID in the agent's wallet and post deactivate operation to the VDR description: |- Deactivate DID in the agent's wallet and post deactivate operation to the VDR. @@ -1512,59 +1480,58 @@ paths: a new deactivate request if the previous operation is not yet comfirmed. operationId: postDid-registrarDidsDidrefDeactivations parameters: - - name: didRef - in: path - description: Prism DID according to [the Prism DID method syntax](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#prism-did-method-syntax) - required: true - schema: - type: string - example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff + - name: didRef + in: path + description: Prism DID according to [the Prism DID method syntax](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#prism-did-method-syntax) + required: true + schema: + type: string + example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff responses: - "202": + '202': description: DID deactivation operation accepted content: application/json: schema: - $ref: "#/components/schemas/DIDOperationResponse" - "400": + $ref: '#/components/schemas/DIDOperationResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "422": + $ref: '#/components/schemas/ErrorResponse' + '422': description: Unable to process the request content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /issue-credentials/credential-offers: post: tags: - - Issue Credentials Protocol - summary: - As a credential issuer, create a new credential offer that will be + - Issue Credentials Protocol + summary: As a credential issuer, create a new credential offer that will be sent to a holder Agent. description: |2 @@ -1577,46 +1544,46 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/CreateIssueCredentialRecordRequest" + $ref: '#/components/schemas/CreateIssueCredentialRecordRequest' required: true responses: - "201": + '201': description: The issue credential record. content: application/json: schema: - $ref: "#/components/schemas/IssueCredentialRecord" - "400": + $ref: '#/components/schemas/IssueCredentialRecord' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /issue-credentials/records: get: tags: - - Issue Credentials Protocol + - Issue Credentials Protocol summary: Retrieves the list of issue credential records from the Agent's database. description: |2 @@ -1625,68 +1592,63 @@ paths: The returned items include essential metadata such as record ID, thread ID, state, role, issued credential, and other relevant details. operationId: getCredentialRecords parameters: - - name: offset - in: query - description: - The number of items to skip before returning results. Default - is 0 if not specified. - required: false - schema: - type: integer - format: int32 - - name: limit - in: query - description: - The maximum number of items to return. Defaults to 100 if not - specified. - required: false - schema: - type: integer - format: int32 - - name: thid - in: query - description: - The thread ID associated with a specific credential issue flow - execution. - required: false - schema: - type: string + - name: offset + in: query + description: The number of items to skip before returning results. Default + is 0 if not specified. + required: false + schema: + type: integer + format: int32 + - name: limit + in: query + description: The maximum number of items to return. Defaults to 100 if not + specified. + required: false + schema: + type: integer + format: int32 + - name: thid + in: query + description: The thread ID associated with a specific credential issue flow + execution. + required: false + schema: + type: string responses: - "200": - description: - The list of issue credential records available found in the + '200': + description: The list of issue credential records available found in the Agent's database. content: application/json: schema: - $ref: "#/components/schemas/IssueCredentialRecordPage" - "400": + $ref: '#/components/schemas/IssueCredentialRecordPage' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /issue-credentials/records/{recordId}: get: tags: - - Issue Credentials Protocol - summary: - Retrieves a specific issue credential flow record from the Agent's + - Issue Credentials Protocol + summary: Retrieves a specific issue credential flow record from the Agent's database based on its unique `recordId`. description: |2 @@ -1695,54 +1657,52 @@ paths: The returned items include essential metadata such as record ID, thread ID, state, role, issued credential, and other relevant details. operationId: getCredentialRecord parameters: - - name: recordId - in: path - description: - The `recordId` uniquely identifying the issue credential flow - record. - required: true - schema: - type: string + - name: recordId + in: path + description: The `recordId` uniquely identifying the issue credential flow + record. + required: true + schema: + type: string responses: - "200": + '200': description: The specific issue credential flow record. content: application/json: schema: - $ref: "#/components/schemas/IssueCredentialRecord" - "400": + $ref: '#/components/schemas/IssueCredentialRecord' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /issue-credentials/records/{recordId}/accept-offer: post: tags: - - Issue Credentials Protocol - summary: - As a holder, accept a new credential offer received from another issuer + - Issue Credentials Protocol + summary: As a holder, accept a new credential offer received from another issuer Agent. description: |2 @@ -1750,63 +1710,60 @@ paths: The subsequent credential request message sent to the issuer adheres to the [Issue Credential Protocol 3.0 - Request Credential](https://github.com/decentralized-identity/waci-didcomm/tree/main/issue_credential#request-credential) specification. operationId: acceptCredentialOffer parameters: - - name: recordId - in: path - description: - The `recordId` uniquely identifying the issue credential flow - record. - required: true - schema: - type: string + - name: recordId + in: path + description: The `recordId` uniquely identifying the issue credential flow + record. + required: true + schema: + type: string requestBody: description: The accept credential offer request object. content: application/json: schema: - $ref: "#/components/schemas/AcceptCredentialOfferRequest" + $ref: '#/components/schemas/AcceptCredentialOfferRequest' required: true responses: - "200": - description: - The issue credential offer was successfully accepted, and the + '200': + description: The issue credential offer was successfully accepted, and the updated record is returned in the response body. content: application/json: schema: - $ref: "#/components/schemas/IssueCredentialRecord" - "400": + $ref: '#/components/schemas/IssueCredentialRecord' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /issue-credentials/records/{recordId}/issue-credential: post: tags: - - Issue Credentials Protocol - summary: - As an issuer, issues the verifiable credential related the identified + - Issue Credentials Protocol + summary: As an issuer, issues the verifiable credential related the identified issuance flow record. description: |2 @@ -1815,16 +1772,15 @@ paths: Note that this endpoint should only be called when automatic issuance is disabled for this record (i.e. `automaticIssuance` attribute set to `false` at offer creation time). operationId: issueCredential parameters: - - name: recordId - in: path - description: - The `recordId` uniquely identifying the issue credential flow - record. - required: true - schema: - type: string + - name: recordId + in: path + description: The `recordId` uniquely identifying the issue credential flow + record. + required: true + schema: + type: string responses: - "200": + '200': description: |2 The issue credential request was successfully processed, and the updated record is returned in the response body. @@ -1832,181 +1788,176 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/IssueCredentialRecord" - "400": + $ref: '#/components/schemas/IssueCredentialRecord' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /credential-status/{id}: get: tags: - - Credential status list + - Credential status list summary: Fetch credential status list by its ID description: Fetch credential status list by its ID operationId: getCredentialStatusListEndpoint parameters: - - name: id - in: path - description: Globally unique identifier of the credential status list - required: true - schema: - type: string - format: uuid + - name: id + in: path + description: Globally unique identifier of the credential status list + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: Status List credential with embedded proof found by ID content: application/json: schema: - $ref: "#/components/schemas/StatusListCredential" - "400": + $ref: '#/components/schemas/StatusListCredential' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' /credential-status/revoke-credential/{id}: patch: tags: - - Credential status list + - Credential status list summary: Revoke a credential by its ID - description: - Marks credential to be ready for revocation, it will be revoked + description: Marks credential to be ready for revocation, it will be revoked automatically operationId: patchCredential-statusRevoke-credentialId parameters: - - name: id - in: path - description: Revoke a credential by its ID - required: true - schema: - type: string + - name: id + in: path + description: Revoke a credential by its ID + required: true + schema: + type: string responses: - "200": - description: "" - "400": + '200': + description: '' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /present-proof/presentations: get: tags: - - Present Proof + - Present Proof summary: Gets the list of proof presentation records. description: list of presentation statuses operationId: getAllPresentation parameters: - - name: offset - in: query - description: - The number of items to skip before returning results. Default - is 0 if not specified. - required: false - schema: - type: integer - format: int32 - - name: limit - in: query - description: - The maximum number of items to return. Defaults to 100 if not - specified. - required: false - schema: - type: integer - format: int32 - - name: thid - in: query - required: false - schema: - type: string + - name: offset + in: query + description: The number of items to skip before returning results. Default + is 0 if not specified. + required: false + schema: + type: integer + format: int32 + - name: limit + in: query + description: The maximum number of items to return. Defaults to 100 if not + specified. + required: false + schema: + type: integer + format: int32 + - name: thid + in: query + required: false + schema: + type: string responses: - "200": + '200': description: The list of proof presentation records. content: application/json: schema: - $ref: "#/components/schemas/PresentationStatusPage" - "400": + $ref: '#/components/schemas/PresentationStatusPage' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] post: tags: - - Present Proof - summary: - As a Verifier, create a new proof presentation request and send it + - Present Proof + summary: As a Verifier, create a new proof presentation request and send it to the Prover. - description: - Holder presents proof derived from the verifiable credential to + description: Holder presents proof derived from the verifiable credential to verifier. operationId: requestPresentation requestBody: @@ -2014,266 +1965,305 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/RequestPresentationInput" + $ref: '#/components/schemas/RequestPresentationInput' required: true responses: - "201": - description: - The proof presentation request was created successfully and + '201': + description: The proof presentation request was created successfully and will be sent asynchronously to the Prover. content: application/json: schema: - $ref: "#/components/schemas/PresentationStatus" - "400": + $ref: '#/components/schemas/PresentationStatus' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /present-proof/presentations/{presentationId}: get: tags: - - Present Proof - summary: - Gets an existing proof presentation record by its unique identifier. + - Present Proof + summary: Gets an existing proof presentation record by its unique identifier. More information on the error can be found in the response body. description: Returns an existing presentation record by id. operationId: getPresentation parameters: - - name: presentationId - in: path - description: The unique identifier of the presentation record. - required: true - schema: - type: string - format: uuid + - name: presentationId + in: path + description: The unique identifier of the presentation record. + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: The proof presentation record. content: application/json: schema: - $ref: "#/components/schemas/PresentationStatus" - "400": + $ref: '#/components/schemas/PresentationStatus' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] patch: tags: - - Present Proof - summary: - Updates the proof presentation record matching the unique identifier, + - Present Proof + summary: Updates the proof presentation record matching the unique identifier, with the specific action to perform. description: Accept or reject presentation of proof request. operationId: updatePresentation parameters: - - name: presentationId - in: path - description: The unique identifier of the presentation record. - required: true - schema: - type: string - format: uuid + - name: presentationId + in: path + description: The unique identifier of the presentation record. + required: true + schema: + type: string + format: uuid requestBody: description: The action to perform on the proof presentation record. content: application/json: schema: - $ref: "#/components/schemas/RequestPresentationAction" + $ref: '#/components/schemas/RequestPresentationAction' required: true responses: - "200": + '200': description: The proof presentation record was successfully updated. content: application/json: schema: - $ref: "#/components/schemas/PresentationStatus" - "400": + $ref: '#/components/schemas/PresentationStatus' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] + /verification/credential: + post: + tags: + - Verifiable Credentials Verification + summary: As a Verifier, verify a set of credentials + description: As a Verifier, verify a set of credentials + operationId: verify + requestBody: + description: List of VC to verify + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/VcVerificationRequest' + required: false + responses: + '200': + description: List of VC verification outcome + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/VcVerificationResponse' + '400': + description: Invalid request parameters + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + '403': + description: Forbidden + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + '500': + description: Internal server error + content: + application/json: + schema: + $ref: '#/components/schemas/ErrorResponse' + security: + - apiKeyAuth: [] + - jwtAuth: [] /_system/health: get: tags: - - System + - System summary: Check the health status of the running service description: Returns the health info object of the running service operationId: systemHealth responses: - "200": + '200': description: The health info object. content: application/json: schema: - $ref: "#/components/schemas/HealthInfo" - "400": + $ref: '#/components/schemas/HealthInfo' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' /_system/metrics: get: tags: - - System + - System summary: Collect the runtime metrics of the running service - description: - Returns the metrics of the running service from the internal Prometheus + description: Returns the metrics of the running service from the internal Prometheus registry operationId: systemMetrics responses: - "200": + '200': description: The metrics as plain strings. content: text/plain: schema: type: string - "400": + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' /iam/entities: get: tags: - - Identity and Access Management + - Identity and Access Management summary: Get all entities - description: "Get all entities with the pagination by `offset` and `limit` parameters " + description: 'Get all entities with the pagination by `offset` and `limit` parameters ' operationId: getAllEntities parameters: - - name: offset - in: query - description: - The number of items to skip before returning results. Default - is 0 if not specified. - required: false - schema: - type: integer - format: int32 - - name: limit - in: query - description: - The maximum number of items to return. Defaults to 100 if not - specified. - required: false - schema: - type: integer - format: int32 + - name: offset + in: query + description: The number of items to skip before returning results. Default + is 0 if not specified. + required: false + schema: + type: integer + format: int32 + - name: limit + in: query + description: The maximum number of items to return. Defaults to 100 if not + specified. + required: false + schema: + type: integer + format: int32 responses: - "200": + '200': description: Collection of Entity records content: application/json: schema: - $ref: "#/components/schemas/EntityResponsePage" - "400": + $ref: '#/components/schemas/EntityResponsePage' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - jwtAuth: [] post: tags: - - Identity and Access Management + - Identity and Access Management summary: Create a new entity record - description: - Create the new entity record. The entity record is a representation + description: Create the new entity record. The entity record is a representation of the account in the system. operationId: createEntity requestBody: @@ -2281,249 +2271,249 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/CreateEntityRequest" + $ref: '#/components/schemas/CreateEntityRequest' required: true responses: - "201": + '201': description: The new entity is successfully created content: application/json: schema: - $ref: "#/components/schemas/EntityResponse" - "400": + $ref: '#/components/schemas/EntityResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - jwtAuth: [] /iam/entities/{id}/name: put: tags: - - Identity and Access Management + - Identity and Access Management summary: Update the entity record name by `id` description: Update the entity record name by `id` operationId: updateEntityName parameters: - - name: id - in: path - required: true - schema: - type: string - format: uuid + - name: id + in: path + required: true + schema: + type: string + format: uuid requestBody: description: JSON object required for the entity name update content: application/json: schema: - $ref: "#/components/schemas/UpdateEntityNameRequest" + $ref: '#/components/schemas/UpdateEntityNameRequest' required: true responses: - "200": + '200': description: The entity record is successfully updated content: application/json: schema: - $ref: "#/components/schemas/EntityResponse" - "400": + $ref: '#/components/schemas/EntityResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - jwtAuth: [] /iam/entities/{id}/walletId: put: tags: - - Identity and Access Management + - Identity and Access Management summary: Update the entity record `walletId` by `id` description: Update the entity record `walletId` field by `id` operationId: updateEntityWalletId parameters: - - name: id - in: path - required: true - schema: - type: string - format: uuid + - name: id + in: path + required: true + schema: + type: string + format: uuid requestBody: description: JSON object required for the entity walletId update content: application/json: schema: - $ref: "#/components/schemas/UpdateEntityWalletIdRequest" + $ref: '#/components/schemas/UpdateEntityWalletIdRequest' required: true responses: - "200": + '200': description: The entity record is successfully updated content: application/json: schema: - $ref: "#/components/schemas/EntityResponse" - "400": + $ref: '#/components/schemas/EntityResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - jwtAuth: [] /iam/entities/{id}: get: tags: - - Identity and Access Management + - Identity and Access Management summary: Get the entity by the `id` description: Get the entity by the unique identifier operationId: getEntityById parameters: - - name: id - in: path - description: Identifier of the entity - required: true - schema: - type: string - format: uuid + - name: id + in: path + description: Identifier of the entity + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: Entity found by `id` content: application/json: schema: - $ref: "#/components/schemas/EntityResponse" - "400": + $ref: '#/components/schemas/EntityResponse' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - jwtAuth: [] delete: tags: - - Identity and Access Management + - Identity and Access Management summary: Delete the entity by `id` description: Delete the entity by the unique identifier operationId: deleteEntityById parameters: - - name: id - in: path - description: Identifier of the entity - required: true - schema: - type: string - format: uuid + - name: id + in: path + description: Identifier of the entity + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: Entity deleted successfully - "400": + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - jwtAuth: [] /iam/apikey-authentication: post: tags: - - Identity and Access Management + - Identity and Access Management summary: Register the `apikey` for the entity description: Register the `apikey` for the entity. operationId: addEntityApiKeyAuthentication @@ -2532,41 +2522,41 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/ApiKeyAuthenticationRequest" + $ref: '#/components/schemas/ApiKeyAuthenticationRequest' required: true responses: - "201": + '201': description: The new `apikey` is successfully registered for the entity - "400": + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - jwtAuth: [] delete: tags: - - Identity and Access Management + - Identity and Access Management summary: Unregister the `apikey` for the entity description: Unregister the `apikey` for the entity. operationId: deleteEntityApiKeyAuthentication @@ -2575,101 +2565,97 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/ApiKeyAuthenticationRequest" + $ref: '#/components/schemas/ApiKeyAuthenticationRequest' required: true responses: - "200": + '200': description: The new `apikey` is successfully unregistered for the entity - "400": + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - jwtAuth: [] /wallets: get: tags: - - Wallet Management + - Wallet Management summary: List all permitted wallets - description: - List all permitted wallets. If the role is admin, returns all the + description: List all permitted wallets. If the role is admin, returns all the wallets. If the role is tenant, only return permitted wallets. operationId: getWallets parameters: - - name: offset - in: query - description: - The number of items to skip before returning results. Default - is 0 if not specified. - required: false - schema: - type: integer - format: int32 - - name: limit - in: query - description: - The maximum number of items to return. Defaults to 100 if not - specified. - required: false - schema: - type: integer - format: int32 + - name: offset + in: query + description: The number of items to skip before returning results. Default + is 0 if not specified. + required: false + schema: + type: integer + format: int32 + - name: limit + in: query + description: The maximum number of items to return. Defaults to 100 if not + specified. + required: false + schema: + type: integer + format: int32 responses: - "200": + '200': description: Successfully list all permitted wallets content: application/json: schema: - $ref: "#/components/schemas/WalletDetailPage" - "400": + $ref: '#/components/schemas/WalletDetailPage' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - apiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] post: tags: - - Wallet Management + - Wallet Management summary: Create a new wallet - description: - "Create a new wallet with the option to provide the seed.\nThe\ + description: "Create a new wallet with the option to provide the seed.\nThe\ \ seed will be used for all PRISM DID keypair derivation within the wallet.\n\ \nIf the role is admin, a wallet can be created at any time.\nIf the role\ \ is tenant, a wallet can only be created if there is no existing wallet permission\ @@ -2680,317 +2666,312 @@ paths: content: application/json: schema: - $ref: "#/components/schemas/CreateWalletRequest" + $ref: '#/components/schemas/CreateWalletRequest' required: true responses: - "201": + '201': description: Successfully create a new wallet content: application/json: schema: - $ref: "#/components/schemas/WalletDetail" - "400": + $ref: '#/components/schemas/WalletDetail' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - apiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /wallets/{walletId}: get: tags: - - Wallet Management + - Wallet Management summary: Get the wallet by ID - description: - Get the wallet by ID. If the role is tenant, only search the ID + description: Get the wallet by ID. If the role is tenant, only search the ID of permitted wallets. operationId: getWalletsWalletid parameters: - - name: walletId - in: path - required: true - schema: - type: string - format: uuid + - name: walletId + in: path + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: Successfully get the wallet content: application/json: schema: - $ref: "#/components/schemas/WalletDetail" - "400": + $ref: '#/components/schemas/WalletDetail' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - apiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /wallets/{walletId}/uma-permissions: post: tags: - - Wallet Management - summary: - Create a UMA resource permission on an authorization server for the + - Wallet Management + summary: Create a UMA resource permission on an authorization server for the wallet. - description: - "Create a UMA resource permission on an authorization server for\ + description: "Create a UMA resource permission on an authorization server for\ \ the wallet.\nThis grants the wallet permission to the specified `subject`,\ \ where the `subject` denotes the identity of the tenant on an authorization\ \ server.\n " operationId: createWalletUmaPermission parameters: - - name: walletId - in: path - required: true - schema: - type: string - format: uuid + - name: walletId + in: path + required: true + schema: + type: string + format: uuid requestBody: content: application/json: schema: - $ref: "#/components/schemas/CreateWalletUmaPermissionRequest" + $ref: '#/components/schemas/CreateWalletUmaPermissionRequest' required: true responses: - "200": + '200': description: UMA resource permission is created on an authorization server - "400": + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - apiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] delete: tags: - - Wallet Management - summary: - Delete a UMA resource permission on an authorization server for the + - Wallet Management + summary: Delete a UMA resource permission on an authorization server for the wallet. - description: - "Remove a UMA resource permission on an authorization server for\ + description: "Remove a UMA resource permission on an authorization server for\ \ the wallet.\nThis remove the wallet permission to the specified `subject`,\ \ where the `subject` denotes the identity of the tenant on an authorization\ \ server.\n " operationId: deleteWalletUmaPermission parameters: - - name: walletId - in: path - required: true - schema: - type: string - format: uuid - - name: subject - in: query - required: true - schema: - type: string - format: uuid + - name: walletId + in: path + required: true + schema: + type: string + format: uuid + - name: subject + in: query + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: UMA resource permission is removed from an authorization server. - "400": + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - adminApiKeyAuth: [] - - apiKeyAuth: [] - - jwtAuth: [] + - adminApiKeyAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /events/webhooks: get: tags: - - Events + - Events summary: List wallet webhook notifications operationId: getEventsWebhooks responses: - "200": + '200': description: List wallet webhook notifications content: application/json: schema: - $ref: "#/components/schemas/WebhookNotificationPage" - "400": + $ref: '#/components/schemas/WebhookNotificationPage' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] post: tags: - - Events + - Events summary: Create wallet webhook notifications operationId: postEventsWebhooks requestBody: content: application/json: schema: - $ref: "#/components/schemas/CreateWebhookNotification" + $ref: '#/components/schemas/CreateWebhookNotification' required: true responses: - "200": + '200': description: Webhook notification has been created successfully content: application/json: schema: - $ref: "#/components/schemas/WebhookNotification" - "400": + $ref: '#/components/schemas/WebhookNotification' + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "409": + $ref: '#/components/schemas/ErrorResponse' + '409': description: Cannot process due to conflict with current state of the resource content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] /events/webhooks/{id}: delete: tags: - - Events + - Events summary: Delete the wallet webhook notification by `id` operationId: deleteEventsWebhooksId parameters: - - name: id - in: path - description: ID of the webhook notification to delete. - required: true - schema: - type: string - format: uuid + - name: id + in: path + description: ID of the webhook notification to delete. + required: true + schema: + type: string + format: uuid responses: - "200": + '200': description: Webhook notification has been deleted. - "400": + '400': description: Invalid request parameters content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "403": + $ref: '#/components/schemas/ErrorResponse' + '403': description: Forbidden content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "404": + $ref: '#/components/schemas/ErrorResponse' + '404': description: Resource could not be found content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" - "500": + $ref: '#/components/schemas/ErrorResponse' + '500': description: Internal server error content: application/json: schema: - $ref: "#/components/schemas/ErrorResponse" + $ref: '#/components/schemas/ErrorResponse' security: - - apiKeyAuth: [] - - jwtAuth: [] + - apiKeyAuth: [] + - jwtAuth: [] components: schemas: AcceptConnectionInvitationRequest: required: - - invitation + - invitation type: object properties: invitation: @@ -3010,15 +2991,15 @@ components: ActionType: type: string enum: - - ADD_KEY - - ADD_SERVICE - - PATCH_CONTEXT - - REMOVE_KEY - - REMOVE_SERVICE - - UPDATE_SERVICE + - ADD_KEY + - ADD_SERVICE + - PATCH_CONTEXT + - REMOVE_KEY + - REMOVE_SERVICE + - UPDATE_SERVICE AnoncredCredentialProofV1: required: - - credential + - credential type: object properties: credential: @@ -3037,9 +3018,8 @@ components: credentialProofs: type: array items: - $ref: "#/components/schemas/AnoncredCredentialProofV1" - description: - A list of proofs from the Anoncred library, each corresponding + $ref: '#/components/schemas/AnoncredCredentialProofV1' + description: A list of proofs from the Anoncred library, each corresponding to a credential. AnoncredNonRevokedIntervalV1: type: object @@ -3052,17 +3032,17 @@ components: format: int32 AnoncredPresentationRequestV1: required: - - requested_attributes - - requested_predicates - - name - - nonce - - version + - requested_attributes + - requested_predicates + - name + - nonce + - version type: object properties: requested_attributes: - $ref: "#/components/schemas/Map_AnoncredRequestedAttributeV1" + $ref: '#/components/schemas/Map_AnoncredRequestedAttributeV1' requested_predicates: - $ref: "#/components/schemas/Map_AnoncredRequestedPredicateV1" + $ref: '#/components/schemas/Map_AnoncredRequestedPredicateV1' name: type: string nonce: @@ -3070,16 +3050,15 @@ components: version: type: string non_revoked: - $ref: "#/components/schemas/AnoncredNonRevokedIntervalV1" + $ref: '#/components/schemas/AnoncredNonRevokedIntervalV1' description: Anoncred Presentation Request - example: - AnoncredPresentationRequestV1(Map(attribute1 -> AnoncredRequestedAttributeV1(Attribute + example: AnoncredPresentationRequestV1(Map(attribute1 -> AnoncredRequestedAttributeV1(Attribute 1,List(Map(cred_def_id -> credential_definition_id_of_attribute1)),Some(AnoncredNonRevokedIntervalV1(Some(1635734400),Some(1735734400))))),Map(predicate1 -> AnoncredRequestedPredicateV1(Predicate 1,>=,18,List(Map(schema_id -> schema_id_of_predicate1)),Some(AnoncredNonRevokedIntervalV1(Some(1635734400),None)))),Example Presentation Request,1234567890,1.0,None) AnoncredRequestedAttributeV1: required: - - name + - name type: object properties: name: @@ -3087,14 +3066,14 @@ components: restrictions: type: array items: - $ref: "#/components/schemas/Map_String" + $ref: '#/components/schemas/Map_String' non_revoked: - $ref: "#/components/schemas/AnoncredNonRevokedIntervalV1" + $ref: '#/components/schemas/AnoncredNonRevokedIntervalV1' AnoncredRequestedPredicateV1: required: - - name - - p_type - - p_value + - name + - p_type + - p_value type: object properties: name: @@ -3107,13 +3086,13 @@ components: restrictions: type: array items: - $ref: "#/components/schemas/Map_String" + $ref: '#/components/schemas/Map_String' non_revoked: - $ref: "#/components/schemas/AnoncredNonRevokedIntervalV1" + $ref: '#/components/schemas/AnoncredNonRevokedIntervalV1' ApiKeyAuthenticationRequest: required: - - entityId - - apiKey + - entityId + - apiKey type: object properties: entityId: @@ -3135,22 +3114,22 @@ components: items: {} Bool: required: - - value + - value type: object properties: value: type: boolean Connection: required: - - connectionId - - thid - - role - - state - - invitation - - createdAt - - metaRetries - - self - - kind + - connectionId + - thid + - role + - state + - invitation + - createdAt + - metaRetries + - self + - kind type: object properties: connectionId: @@ -3160,8 +3139,7 @@ components: example: 0527aea1-d131-3948-a34d-03af39aba8b4 thid: type: string - description: - The unique identifier of the thread this connection record + description: The unique identifier of the thread this connection record belongs to. The value will identical on both sides of the connection (inviter and invitee) example: 0527aea1-d131-3948-a34d-03af39aba8b4 @@ -3171,27 +3149,23 @@ components: example: Peter goalCode: type: string - description: - A self-attested code the receiver may want to display to the + description: A self-attested code the receiver may want to display to the user or use in automatically deciding what to do with the out-of-band message. example: issue-vc goal: type: string - description: - A self-attested string that the receiver may want to display + description: A self-attested string that the receiver may want to display to the user about the context-specific goal of the out-of-band message. example: To issue a Faber College Graduate credential myDid: type: string - description: - The DID representing me as the inviter or invitee in this specific + description: The DID representing me as the inviter or invitee in this specific connection. example: did:peer:12345 theirDid: type: string - description: - The DID representing the other peer as the an inviter or invitee + description: The DID representing the other peer as the an inviter or invitee in this specific connection. example: did:peer:67890 role: @@ -3199,26 +3173,26 @@ components: description: The role played by the Prism agent in the connection flow. example: Inviter enum: - - Inviter - - Invitee + - Inviter + - Invitee state: type: string description: The current state of the connection protocol execution. example: InvitationGenerated enum: - - InvitationGenerated - - InvitationReceived - - ConnectionRequestPending - - ConnectionRequestSent - - ConnectionRequestReceived - - ConnectionResponsePending - - ConnectionResponseSent - - ConnectionResponseReceived - - ProblemReportPending - - ProblemReportSent - - ProblemReportReceived + - InvitationGenerated + - InvitationReceived + - ConnectionRequestPending + - ConnectionRequestSent + - ConnectionRequestReceived + - ConnectionResponsePending + - ConnectionResponseSent + - ConnectionResponseReceived + - ProblemReportPending + - ProblemReportSent + - ProblemReportReceived invitation: - $ref: "#/components/schemas/ConnectionInvitation" + $ref: '#/components/schemas/ConnectionInvitation' createdAt: type: string description: The date and time the connection record was created. @@ -3231,8 +3205,7 @@ components: example: 2022-03-10T12:00Z metaRetries: type: integer - description: - The maximum background processing attempts remaining for this + description: The maximum background processing attempts remaining for this record format: int32 example: 5 @@ -3246,84 +3219,74 @@ components: example: Connection ConnectionInvitation: required: - - id - - type - - from - - invitationUrl + - id + - type + - from + - invitationUrl type: object properties: id: type: string - description: - The unique identifier of the invitation. It should be used + description: The unique identifier of the invitation. It should be used as parent thread ID (pthid) for the Connection Request message that follows. format: uuid example: 0527aea1-d131-3948-a34d-03af39aba8b4 type: type: string - description: - The DIDComm Message Type URI (MTURI) the invitation message + description: The DIDComm Message Type URI (MTURI) the invitation message complies with. example: https://didcomm.org/out-of-band/2.0/invitation from: type: string - description: - The DID representing the sender to be used by recipients for + description: The DID representing the sender to be used by recipients for future interactions. example: did:peer:1234457 invitationUrl: type: string - description: - The invitation message encoded as a URL. This URL follows the + description: The invitation message encoded as a URL. This URL follows the Out of [Band 2.0 protocol](https://identity.foundation/didcomm-messaging/spec/v2.0/#out-of-band-messages) and can be used to generate a QR code for example. example: https://my.domain.com/path?_oob=eyJAaWQiOiIzZmE4NWY2NC01NzE3LTQ1NjItYjNmYy0yYzk2M2Y2NmFmYTYiLCJAdHlwZSI6Imh0dHBzOi8vZGlkY29tbS5vcmcvbXktZmFtaWx5LzEuMC9teS1tZXNzYWdlLXR5cGUiLCJkaWQiOiJXZ1d4cXp0ck5vb0c5MlJYdnhTVFd2IiwiaW1hZ2VVcmwiOiJodHRwOi8vMTkyLjE2OC41Ni4xMDEvaW1nL2xvZ28uanBnIiwibGFiZWwiOiJCb2IiLCJyZWNpcGllbnRLZXlzIjpbIkgzQzJBVnZMTXY2Z21NTmFtM3VWQWpacGZrY0pDd0R3blpuNnozd1htcVBWIl0sInJvdXRpbmdLZXlzIjpbIkgzQzJBVnZMTXY2Z21NTmFtM3VWQWpacGZrY0pDd0R3blpuNnozd1htcVBWIl0sInNlcnZpY2VFbmRwb2ludCI6Imh0dHA6Ly8xOTIuMTY4LjU2LjEwMTo4MDIwIn0= description: The invitation for this connection ConnectionsPage: required: - - kind - - self - - pageOf + - kind + - self + - pageOf type: object properties: contents: type: array items: - $ref: "#/components/schemas/Connection" - description: - "\nArray of resources (Connection)\nA sequence of Connection\ + $ref: '#/components/schemas/Connection' + description: "\nArray of resources (Connection)\nA sequence of Connection\ \ resources representing the list of connections that the paginated response\ \ contains.\n " example: [] kind: type: string - description: - A string that identifies the type of resource being returned + description: A string that identifies the type of resource being returned in the response. example: ConnectionsPage self: type: string - description: - The URL that uniquely identifies the resource being returned + description: The URL that uniquely identifies the resource being returned in the response. example: /prism-agent/connections?offset=10&limit=10 pageOf: type: string - description: - A string field indicating the type of resource that the contents + description: A string field indicating the type of resource that the contents field contains. - example: "" + example: '' next: type: string - description: - An optional string field containing the URL of the next page + description: An optional string field containing the URL of the next page of results. If the API response does not contain any more pages, this field should be set to None. example: /prism-agent/connections?offset=20&limit=10 previous: type: string - description: - An optional string field containing the URL of the previous + description: An optional string field containing the URL of the previous page of results. If the API response is the first page of results, this field should be set to None. example: /prism-agent/connections?offset=0&limit=10 @@ -3336,54 +3299,48 @@ components: example: Peter goalCode: type: string - description: - A self-attested code the receiver may want to display to the + description: A self-attested code the receiver may want to display to the user or use in automatically deciding what to do with the out-of-band message. example: issue-vc goal: type: string - description: - A self-attested string that the receiver may want to display + description: A self-attested string that the receiver may want to display to the user about the context-specific goal of the out-of-band message. example: To issue a Faber College Graduate credential CreateEntityRequest: required: - - name + - name type: object properties: id: type: string - description: - The new `id` of the entity to be created. If this field is + description: The new `id` of the entity to be created. If this field is not provided, the server will generate a new UUID for the entity format: uuid example: 00000000-0000-0000-0000-000000000000 name: type: string - description: - The new `name` of the entity to be created. If this field is + description: The new `name` of the entity to be created. If this field is not provided, the server will generate a random name for the entity example: John Doe minLength: 1 maxLength: 128 walletId: type: string - description: - The new `walletId` of the entity to be created. If this field + description: The new `walletId` of the entity to be created. If this field is not provided, the server will set the default `walletId` format: uuid example: 00000000-0000-0000-0000-000000000000 CreateIssueCredentialRecordRequest: required: - - claims - - connectionId + - claims + - connectionId type: object properties: validityPeriod: type: number - description: - The validity period in seconds of the verifiable credential + description: The validity period in seconds of the verifiable credential that will be issued. format: double example: 3600.0 @@ -3441,7 +3398,7 @@ components: example: d9569cec-c81e-4779-aa86-0d5994d82676 CreateManagedDIDResponse: required: - - longFormDid + - longFormDid type: object properties: longFormDid: @@ -3450,22 +3407,22 @@ components: example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff:Cr4BCrsBElsKBmF1dGgtMRAEQk8KCXNlY3AyNTZrMRIg0opTuxu-zt6aRbT1tPniG4eu4CYsQPM3rrLzvzNiNgwaIIFTnyT2N4U7qCQ78qtWC3-p0el6Hvv8qxG5uuEw-WgMElwKB21hc3RlcjAQAUJPCglzZWNwMjU2azESIKhBU0eCOO6Vinz_8vhtFSAhYYqrkEXC8PHGxkuIUev8GiAydFHLXb7c22A1Uj_PR21NZp6BCDQqNq2xd244txRgsQ CreateManagedDidRequest: required: - - documentTemplate + - documentTemplate type: object properties: documentTemplate: - $ref: "#/components/schemas/CreateManagedDidRequestDocumentTemplate" + $ref: '#/components/schemas/CreateManagedDidRequestDocumentTemplate' CreateManagedDidRequestDocumentTemplate: type: object properties: publicKeys: type: array items: - $ref: "#/components/schemas/ManagedDIDKeyTemplate" + $ref: '#/components/schemas/ManagedDIDKeyTemplate' services: type: array items: - $ref: "#/components/schemas/Service" + $ref: '#/components/schemas/Service' contexts: type: array items: @@ -3474,13 +3431,12 @@ components: example: https://didcomm.org/messaging/contexts/v2 CreateWalletRequest: required: - - name + - name type: object properties: seed: type: string - description: - A BIP32 seed encoded in hexadecimal string. It is expected + description: A BIP32 seed encoded in hexadecimal string. It is expected to represent 64-bytes binary seed (128 hex characters). example: c9994785ce6d548134020f610b76102ca1075d3bb672a75ec8c9a27a7b8607e3b9b384e43b77bb08f8d5159651ae38b98573f7ecc79f2d7e1f1cc371ce60cf8a name: @@ -3496,75 +3452,68 @@ components: example: 00000000-0000-0000-0000-000000000000 CreateWalletUmaPermissionRequest: required: - - subject + - subject type: object properties: subject: type: string - description: - The subject ID that should be granted the permission to the + description: The subject ID that should be granted the permission to the wallet. This can be found in the `sub` claim of a JWT token. format: uuid example: 00000000-0000-0000-0000-000000000000 CreateWebhookNotification: required: - - url + - url type: object properties: url: type: string customHeaders: - $ref: "#/components/schemas/Map_String" + $ref: '#/components/schemas/Map_String' CredentialDefinitionInput: required: - - name - - version - - tag - - author - - schemaId - - signatureType - - supportRevocation + - name + - version + - tag + - author + - schemaId + - signatureType + - supportRevocation type: object properties: name: type: string - description: - A human-readable name for the credential definition. A piece + description: A human-readable name for the credential definition. A piece of Metadata. example: DrivingLicense minLength: 1 description: type: string description: A human-readable description of the credential definition - example: - Simple credential definition for the driving licence verifiable + example: Simple credential definition for the driving licence verifiable credential. minLength: 1 version: type: string - description: - Denotes the revision of a given Credential Definition. It should + description: Denotes the revision of a given Credential Definition. It should follow semantic version convention to describe the impact of the credential definition evolution. example: 1.0.0 pattern: ^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$ tag: type: string - description: - Token that allow to lookup and filter the credential definition + description: Token that allow to lookup and filter the credential definition records. example: licence author: type: string - description: - DID of the identity which authored the credential definition. + description: DID of the identity which authored the credential definition. A piece of Metadata. example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff pattern: ^did:(?[a-z0-9]+(:[a-z0-9]+)*)\:(?[^#?]*)$ schemaId: type: string - description: - The unique identifier of the schema used for this credential + description: The unique identifier of the schema used for this credential definition. example: https://agent-host.com/prism-agent/schema-registry/schemas/d9569cec-c81e-4779-aa86-0d5994d82676 signatureType: @@ -3573,108 +3522,95 @@ components: example: CL supportRevocation: type: boolean - description: - Boolean flag indicating whether revocation is supported for + description: Boolean flag indicating whether revocation is supported for this CredentialDefinition. example: false CredentialDefinitionResponse: required: - - guid - - id - - name - - version - - tag - - description - - author - - authored - - schemaId - - definition - - keyCorrectnessProof - - signatureType - - supportRevocation - - kind - - self + - guid + - id + - name + - version + - tag + - description + - author + - authored + - schemaId + - definition + - keyCorrectnessProof + - signatureType + - supportRevocation + - kind + - self type: object properties: guid: type: string - description: - "Globally unique id of the credential definition.It's composed + description: 'Globally unique id of the credential definition.It''s composed from the bytes of the string that contain the `author`, `name`, and `version` - values.The string format looks like the resource identifier: `author`/`id`?version=`version`" + values.The string format looks like the resource identifier: `author`/`id`?version=`version`' format: uuid example: 0527aea1-d131-3948-a34d-03af39aba8b4 id: type: string - description: - A locally unique identifier to address the credential definition. + description: A locally unique identifier to address the credential definition. UUID is generated by the backend. example: 0527aea1-d131-3948-a34d-03af39aba8b5 longId: type: string - description: - Resource id of the credential definition. Contains the `author`'s + description: Resource id of the credential definition. Contains the `author`'s DID, `id` and `version` fields. example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff/0527aea1-d131-3948-a34d-03af39aba8b4?version=1.0.0 name: type: string - description: - A human-readable name for the credential definition. A piece + description: A human-readable name for the credential definition. A piece of Metadata. example: DrivingLicense version: type: string - description: - Denotes the revision of a given Credential Definition. It should + description: Denotes the revision of a given Credential Definition. It should follow semantic version convention to describe the impact of the credential definition evolution. example: 1.0.0 tag: type: string - description: - Token that allow to lookup and filter the credential definition + description: Token that allow to lookup and filter the credential definition records. example: licence description: type: string description: A human-readable description of the credential definition - example: - Simple credential definition for the driving licence verifiable + example: Simple credential definition for the driving licence verifiable credential. author: type: string - description: - DID of the identity which authored the credential definition. + description: DID of the identity which authored the credential definition. A piece of Metadata. example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff authored: type: string - description: - "[RFC3339](https://www.rfc-editor.org/rfc/rfc3339) date on - which the credential definition was created. A piece of Metadata." + description: '[RFC3339](https://www.rfc-editor.org/rfc/rfc3339) date on + which the credential definition was created. A piece of Metadata.' format: date-time example: 2022-03-10T12:00Z schemaId: type: string - description: - The unique identifier of the schema used for this credential + description: The unique identifier of the schema used for this credential definition. example: https://agent-host.com/prism-agent/schema-registry/schemas/d9569cec-c81e-4779-aa86-0d5994d82676 definition: - description: - Definition object that represents the actual definition of + description: Definition object that represents the actual definition of the credential. example: credentialSubject: emailAddress: alice@wonderland.com givenName: Alice familyName: Wonderland - dateOfIssuance: "2000-01-01T10:00:00Z" - drivingLicenseID: "12345" + dateOfIssuance: '2000-01-01T10:00:00Z' + drivingLicenseID: '12345' drivingClass: 5 keyCorrectnessProof: - description: - A proof that validates the correctness of the key within the + description: A proof that validates the correctness of the key within the context of the credential definition. signatureType: type: string @@ -3682,43 +3618,38 @@ components: example: CL supportRevocation: type: boolean - description: - Boolean flag indicating whether revocation is supported for + description: Boolean flag indicating whether revocation is supported for this CredentialDefinition. example: false proof: - $ref: "#/components/schemas/Proof" + $ref: '#/components/schemas/Proof' kind: type: string - description: - A string that identifies the type of resource being returned + description: A string that identifies the type of resource being returned in the response. example: CredentialDefinition self: type: string - description: - The URL that uniquely identifies the resource being returned + description: The URL that uniquely identifies the resource being returned in the response. example: /prism-agent/credential-definition-registry/schemas/0527aea1-d131-3948-a34d-03af39aba8b4 CredentialDefinitionResponsePage: required: - - kind - - self - - pageOf + - kind + - self + - pageOf type: object properties: contents: type: array items: - $ref: "#/components/schemas/CredentialDefinitionResponse" - description: - A sequence of CredentialSchemaResponse objects representing + $ref: '#/components/schemas/CredentialDefinitionResponse' + description: A sequence of CredentialSchemaResponse objects representing the list of credential schemas that the API response contains example: [] kind: type: string - description: - A string field indicating the type of the API response. In + description: A string field indicating the type of the API response. In this case, it will always be set to `CredentialSchemaPage` example: CredentialSchemaPage self: @@ -3727,44 +3658,39 @@ components: example: /prism-agent/schema-registry/schemas?skip=10&limit=10 pageOf: type: string - description: - A string field indicating the type of resource that the contents + description: A string field indicating the type of resource that the contents field contains example: /prism-agent/schema-registry/schemas next: type: string - description: - An optional string field containing the URL of the next page + description: An optional string field containing the URL of the next page of results. If the API response does not contain any more pages, this field should be set to None. example: /prism-agent/schema-registry/schemas?skip=20&limit=10 previous: type: string - description: - An optional string field containing the URL of the previous + description: An optional string field containing the URL of the previous page of results. If the API response is the first page of results, this field should be set to None. example: /prism-agent/schema-registry/schemas?skip=0&limit=10 CredentialSchemaInput: required: - - name - - version - - type - - schema - - author + - name + - version + - type + - schema + - author type: object properties: name: type: string - description: - A human-readable name for the credential schema. A piece of + description: A human-readable name for the credential schema. A piece of Metadata. example: DrivingLicense minLength: 1 version: type: string - description: - Denotes the revision of a given Credential Schema. It should + description: Denotes the revision of a given Credential Schema. It should follow semantic version convention to describe the impact of the schema evolution. example: 1.0.0 @@ -3776,13 +3702,11 @@ components: minLength: 1 type: type: string - description: - This field resolves to a JSON schema with details about the + description: This field resolves to a JSON schema with details about the schema metadata that applies to the schema. A piece of Metadata. example: https://w3c-ccg.github.io/vc-json-schemas/schema/2.0/schema.json schema: - description: - Valid JSON Schema where the Credential Schema data fields are + description: Valid JSON Schema where the Credential Schema data fields are defined. A piece of Metadata example: $id: https://example.com/driving-license-1.0 @@ -3805,75 +3729,68 @@ components: drivingClass: type: integer required: - - emailAddress - - familyName - - dateOfIssuance - - drivingLicenseID - - drivingClass + - emailAddress + - familyName + - dateOfIssuance + - drivingLicenseID + - drivingClass additionalProperties: false tags: type: array items: type: string - description: - Tokens that allow to lookup and filter the credential schema + description: Tokens that allow to lookup and filter the credential schema records. example: - - driving - - licence - - id + - driving + - licence + - id author: type: string - description: - DID of the identity which authored the credential schema. A + description: DID of the identity which authored the credential schema. A piece of Metadata. example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff pattern: ^did:(?[a-z0-9]+(:[a-z0-9]+)*)\:(?[^#?]*)$ CredentialSchemaResponse: required: - - guid - - id - - name - - version - - description - - type - - schema - - author - - authored - - kind - - self + - guid + - id + - name + - version + - description + - type + - schema + - author + - authored + - kind + - self type: object properties: guid: type: string - description: - "Globally unique id of the credential schema.It's composed + description: 'Globally unique id of the credential schema.It''s composed from the bytes of the string that contain the `author`, `name`, and `version` - values.The string format looks like the resource identifier: `author`/`id`?version=`version`" + values.The string format looks like the resource identifier: `author`/`id`?version=`version`' format: uuid example: 0527aea1-d131-3948-a34d-03af39aba8b4 id: type: string - description: - A locally unique identifier to address the schema. UUID is + description: A locally unique identifier to address the schema. UUID is generated by the backend. example: 0527aea1-d131-3948-a34d-03af39aba8b5 longId: type: string - description: - Resource id of the credential schema. Contains the `author`'s + description: Resource id of the credential schema. Contains the `author`'s DID, `id` and `version` fields. example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff/0527aea1-d131-3948-a34d-03af39aba8b4?version=1.0.0 name: type: string - description: - A human-readable name for the credential schema. A piece of + description: A human-readable name for the credential schema. A piece of Metadata. example: DrivingLicense version: type: string - description: - Denotes the revision of a given Credential Schema. It should + description: Denotes the revision of a given Credential Schema. It should follow semantic version convention to describe the impact of the schema evolution. example: 1.0.0 @@ -3881,26 +3798,23 @@ components: type: array items: type: string - description: - Tokens that allow to lookup and filter the credential schema + description: Tokens that allow to lookup and filter the credential schema records. example: - - driving - - licence - - id + - driving + - licence + - id description: type: string description: A human-readable description of the credential schema example: Simple credential schema for the driving licence verifiable credential. type: type: string - description: - This field resolves to a JSON schema with details about the + description: This field resolves to a JSON schema with details about the schema metadata that applies to the schema. A piece of Metadata. example: https://w3c-ccg.github.io/vc-json-schemas/schema/2.0/schema.json schema: - description: - Valid JSON Schema where the Credential Schema data fields are + description: Valid JSON Schema where the Credential Schema data fields are defined. A piece of Metadata example: $id: https://example.com/driving-license-1.0 @@ -3923,58 +3837,52 @@ components: drivingClass: type: integer required: - - emailAddress - - familyName - - dateOfIssuance - - drivingLicenseID - - drivingClass + - emailAddress + - familyName + - dateOfIssuance + - drivingLicenseID + - drivingClass additionalProperties: false author: type: string - description: - DID of the identity which authored the credential schema. A + description: DID of the identity which authored the credential schema. A piece of Metadata. example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff authored: type: string - description: - "[RFC3339](https://www.rfc-editor.org/rfc/rfc3339) date on - which the credential schema was created. A piece of Metadata." + description: '[RFC3339](https://www.rfc-editor.org/rfc/rfc3339) date on + which the credential schema was created. A piece of Metadata.' format: date-time example: 2022-03-10T12:00Z proof: - $ref: "#/components/schemas/Proof1" + $ref: '#/components/schemas/Proof1' kind: type: string - description: - A string that identifies the type of resource being returned + description: A string that identifies the type of resource being returned in the response. example: CredentialSchema self: type: string - description: - The URL that uniquely identifies the resource being returned + description: The URL that uniquely identifies the resource being returned in the response. example: /prism-agent/schema-registry/schemas/0527aea1-d131-3948-a34d-03af39aba8b4 CredentialSchemaResponsePage: required: - - kind - - self - - pageOf + - kind + - self + - pageOf type: object properties: contents: type: array items: - $ref: "#/components/schemas/CredentialSchemaResponse" - description: - A sequence of CredentialSchemaResponse objects representing + $ref: '#/components/schemas/CredentialSchemaResponse' + description: A sequence of CredentialSchemaResponse objects representing the list of credential schemas that the API response contains example: [] kind: type: string - description: - A string field indicating the type of the API response. In + description: A string field indicating the type of the API response. In this case, it will always be set to `CredentialSchemaPage` example: CredentialSchemaPage self: @@ -3983,30 +3891,27 @@ components: example: /prism-agent/schema-registry/schemas?skip=10&limit=10 pageOf: type: string - description: - A string field indicating the type of resource that the contents + description: A string field indicating the type of resource that the contents field contains example: /prism-agent/schema-registry/schemas next: type: string - description: - An optional string field containing the URL of the next page + description: An optional string field containing the URL of the next page of results. If the API response does not contain any more pages, this field should be set to None. example: /prism-agent/schema-registry/schemas?skip=20&limit=10 previous: type: string - description: - An optional string field containing the URL of the previous + description: An optional string field containing the URL of the previous page of results. If the API response is the first page of results, this field should be set to None. example: /prism-agent/schema-registry/schemas?skip=0&limit=10 CredentialSubject: required: - - id - - type - - statusPurpose - - encodedList + - id + - type + - statusPurpose + - encodedList type: object properties: id: @@ -4018,7 +3923,7 @@ components: description: Always equals to constnat value - StatusList2021 example: StatusList2021 statusPurpose: - $ref: "#/components/schemas/StatusPurpose" + $ref: '#/components/schemas/StatusPurpose' encodedList: type: string description: base64 url encoded bitstring of credential statuses @@ -4026,10 +3931,10 @@ components: description: Object containing claims specific to status list credential DIDDocument: required: - - id + - id type: object properties: - "@context": + '@context': type: array items: type: string @@ -4043,12 +3948,12 @@ components: example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff controller: type: string - description: "[DID controller](https://www.w3.org/TR/did-core/#did-controller)" + description: '[DID controller](https://www.w3.org/TR/did-core/#did-controller)' example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff verificationMethod: type: array items: - $ref: "#/components/schemas/VerificationMethod" + $ref: '#/components/schemas/VerificationMethod' authentication: type: array items: @@ -4072,15 +3977,14 @@ components: service: type: array items: - $ref: "#/components/schemas/Service" + $ref: '#/components/schemas/Service' description: A W3C compliant Prism DID document representation. DIDDocumentMetadata: type: object properties: deactivated: type: boolean - description: - If a DID has been deactivated, DID document metadata MUST include + description: If a DID has been deactivated, DID document metadata MUST include this property with the boolean value true. If a DID has not been deactivated, this property is OPTIONAL, but if included, MUST have the boolean value false. @@ -4101,25 +4005,23 @@ components: example: 4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff created: type: string - description: - The timestamp of the Cardano block that contained the first + description: The timestamp of the Cardano block that contained the first valid SignedAtalaOperation with a CreateDIDOperation that created the DID. - example: "2023-02-04T13:52:10Z" + example: '2023-02-04T13:52:10Z' updated: type: string - description: - The timestamp of the Cardano block that contained the latest + description: The timestamp of the Cardano block that contained the latest valid SignedAtalaOperation that changed the DID's internal state. - example: "2023-02-04T13:52:10Z" - description: "[DID document metadata](https://www.w3.org/TR/did-core/#did-document-metadata)" + example: '2023-02-04T13:52:10Z' + description: '[DID document metadata](https://www.w3.org/TR/did-core/#did-document-metadata)' DIDOperationResponse: required: - - scheduledOperation + - scheduledOperation type: object properties: scheduledOperation: - $ref: "#/components/schemas/DidOperationSubmission" + $ref: '#/components/schemas/DidOperationSubmission' DIDResolutionMetadata: type: object properties: @@ -4135,28 +4037,36 @@ components: type: string description: The media type of the returned DID document example: application/did+ld+json - description: "[DID resolution metadata](https://www.w3.org/TR/did-core/#did-resolution-metadata)" + description: '[DID resolution metadata](https://www.w3.org/TR/did-core/#did-resolution-metadata)' DIDResolutionResult: required: - - "@context" - - didDocumentMetadata - - didResolutionMetadata + - '@context' + - didDocumentMetadata + - didResolutionMetadata type: object properties: - "@context": + '@context': type: string description: The JSON-LD context describing the JSON document example: https://didcomm.org/messaging/contexts/v2 didDocument: - $ref: "#/components/schemas/DIDDocument" + $ref: '#/components/schemas/DIDDocument' didDocumentMetadata: - $ref: "#/components/schemas/DIDDocumentMetadata" + $ref: '#/components/schemas/DIDDocumentMetadata' didResolutionMetadata: - $ref: "#/components/schemas/DIDResolutionMetadata" + $ref: '#/components/schemas/DIDResolutionMetadata' + DateTimeParameter: + required: + - dateTime + type: object + properties: + dateTime: + type: string + format: date-time DidOperationSubmission: required: - - id - - didRef + - id + - didRef type: object properties: id: @@ -4167,15 +4077,22 @@ components: type: string description: A DID affected by the scheduled operation example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff + DidParameter: + required: + - aud + type: object + properties: + aud: + type: string EntityResponse: required: - - kind - - self - - id - - name - - walletId - - createdAt - - updatedAt + - kind + - self + - id + - name + - walletId + - createdAt + - updatedAt type: object properties: kind: @@ -4204,33 +4121,31 @@ components: type: string description: The `createdAt` timestamp of the entity. format: date-time - example: "2023-01-01T00:00:00Z" + example: '2023-01-01T00:00:00Z' updatedAt: type: string description: The `updatedAt` timestamp of the entity. format: date-time - example: "2023-01-01T00:00:00Z" + example: '2023-01-01T00:00:00Z' EntityResponsePage: required: - - kind - - self - - pageOf + - kind + - self + - pageOf type: object properties: contents: type: array items: - $ref: "#/components/schemas/EntityResponse" - description: - A sequence of CredentialSchemaResponse objects representing + $ref: '#/components/schemas/EntityResponse' + description: A sequence of CredentialSchemaResponse objects representing the list of credential schemas that the API response contains example: - - EntityResponse(Entity,/prism-agent/iam/entities/00000000-0000-0000-0000-000000000000,00000000-0000-0000-0000-000000000000,John - Doe,00000000-0000-0000-0000-000000000000,2023-01-01T00:00:00Z,2023-01-01T00:00:00Z) + - EntityResponse(Entity,/prism-agent/iam/entities/00000000-0000-0000-0000-000000000000,00000000-0000-0000-0000-000000000000,John + Doe,00000000-0000-0000-0000-000000000000,2023-01-01T00:00:00Z,2023-01-01T00:00:00Z) kind: type: string - description: - A string field indicating the type of the API response. In + description: A string field indicating the type of the API response. In this case, it will always be set to `CredentialSchemaPage` example: CredentialSchemaPage self: @@ -4239,30 +4154,27 @@ components: example: /prism-agent/schema-registry/schemas?skip=10&limit=10 pageOf: type: string - description: - A string field indicating the type of resource that the contents + description: A string field indicating the type of resource that the contents field contains example: /prism-agent/schema-registry/schemas next: type: string - description: - An optional string field containing the URL of the next page + description: An optional string field containing the URL of the next page of results. If the API response does not contain any more pages, this field should be set to None. example: /prism-agent/schema-registry/schemas?skip=20&limit=10 previous: type: string - description: - An optional string field containing the URL of the previous + description: An optional string field containing the URL of the previous page of results. If the API response is the first page of results, this field should be set to None. example: /prism-agent/schema-registry/schemas?skip=0&limit=10 ErrorResponse: required: - - status - - type - - title - - instance + - status + - type + - title + - instance type: object properties: status: @@ -4276,25 +4188,22 @@ components: example: https://example.org/doc/#model-MalformedEmail/ title: type: string - description: - A short, human-readable summary of the problem type. It does + description: A short, human-readable summary of the problem type. It does not change from occurrence to occurrence of the problem. example: Malformed email detail: type: string - description: - A human-readable explanation specific to this occurrence of + description: A human-readable explanation specific to this occurrence of the problem. example: The received '{}à!è@!.b}' email does not conform to the email format instance: type: string - description: - A URI reference that identifies the specific occurrence of + description: A URI reference that identifies the specific occurrence of the problem. It may or may not yield further information if dereferenced. example: The received '{}à!è@!.b}' email does not conform to the email format HealthInfo: required: - - version + - version type: object properties: version: @@ -4303,14 +4212,14 @@ components: example: 1.1.0 IssueCredentialRecord: required: - - recordId - - thid - - credentialFormat - - claims - - createdAt - - role - - protocolState - - metaRetries + - recordId + - thid + - credentialFormat + - claims + - createdAt + - role + - protocolState + - metaRetries type: object properties: recordId: @@ -4333,8 +4242,8 @@ components: description: The credential format for this offer. example: JWT enum: - - JWT - - AnonCreds + - JWT + - AnonCreds subjectId: type: string description: |2 @@ -4369,11 +4278,10 @@ components: type: string description: The date and time when the issue credential record was created. format: date-time - example: "2024-03-20T18:35:17.903237532Z" + example: '2024-04-26T13:30:41.666452407Z' updatedAt: type: string - description: - The date and time when the issue credential record was last + description: The date and time when the issue credential record was last updated. format: date-time role: @@ -4381,31 +4289,30 @@ components: description: The role played by the agent in the credential issuance flow. example: Issuer enum: - - Issuer - - Holder + - Issuer + - Holder protocolState: type: string description: The current state of the issue credential protocol execution. example: CredentialSent enum: - - OfferPending - - OfferSent - - OfferReceived - - RequestPending - - RequestGenerated - - RequestSent - - RequestReceived - - CredentialPending - - CredentialGenerated - - CredentialSent - - CredentialReceived - - ProblemReportPending - - ProblemReportSent - - ProblemReportReceived + - OfferPending + - OfferSent + - OfferReceived + - RequestPending + - RequestGenerated + - RequestSent + - RequestReceived + - CredentialPending + - CredentialGenerated + - CredentialSent + - CredentialReceived + - ProblemReportPending + - ProblemReportSent + - ProblemReportReceived credential: type: string - description: - The base64-encoded credential that was issued by the issuer + description: The base64-encoded credential that was issued by the issuer agent, in 'JWT' or 'AnonCreds' format depending on the offer type. example: eyJzY2hlbWFfaWQiOiJodHRwOi8vaG9zdC5kb2NrZXIuaW50ZXJuYWw6ODA4MC9wcmlzbS1hZ2VudC9zY2hlbWEtcmVnaXN0cnkvc2NoZW1hcy8zOTZmZDE2OC02YmVmLTMyNDItYTJiNy1hNTZlYWM1MDc2OWMvc2NoZW1hIiwiY3JlZF9kZWZfaWQiOiJodHRwOi8vMTkyLjE2OC4wLjE0OjgwODAvcHJpc20tYWdlbnQvY3JlZGVudGlhbC1kZWZpbml0aW9uLXJlZ2lzdHJ5L2RlZmluaXRpb25zLzNhZmQxZWJkLWIzN2ItMzRiNC1iMWQ2LWYwMDQ5ZmU5ZmQ1Mi9kZWZpbml0aW9uIiwicmV2X3JlZ19pZCI6bnVsbCwidmFsdWVzIjp7ImdpdmVuTmFtZSI6eyJyYXciOiJBbGljZSIsImVuY29kZWQiOiIyNzAzNDY0MDAyNDExNzMzMTAzMzA2MzEyODA0NDAwNDMxODIxODQ4NjgxNjkzMTUyMDg4NjQwNTUzNTY1OTkzNDQxNzQzODc4MTUwNyJ9LCJlbWFpbEFkZHJlc3MiOnsicmF3IjoiYWxpY2VAd29uZGVybGFuZC5jb20iLCJlbmNvZGVkIjoiNzUxMDcwNDYzNDAxNjU2NzcwMTE5NDIwNzU2NDQwMDkwNjY1NDE2NjExNDg4MjI1ODkwMzM2Nzk4NjEyMDkxODY0OTI3Njg2Njk5MjQifSwiZmFtaWx5TmFtZSI6eyJyYXciOiJXb25kZXJsYW5kIiwiZW5jb2RlZCI6IjE2NzkwODQ5MzEyMzc0Nzk0NzM2ODEzMzc3NTY3MjUzODUxMzczNjA3OTcwNDczMzc3NzAxNDc3MjY5MTk0MDE5NTU3NjU0NTYyMDM1In0sImRhdGVPZklzc3VhbmNlIjp7InJhdyI6IjIwMjAtMTEtMTNUMjA6MjA6MzkrMDA6MDAiLCJlbmNvZGVkIjoiNTM4Njg1NTk1MzE3NDg0NjcwOTc1MjA4NTkwNTMwODE4MzU3NDc0MzU2MTE2MDY4NDIwNDExNDc1ODIwMDQ4NzQzNDgwNDYxNjQ2ODUifSwiZHJpdmluZ0xpY2Vuc2VJRCI6eyJyYXciOiIxMjM0NSIsImVuY29kZWQiOiIxMjM0NSJ9LCJkcml2aW5nQ2xhc3MiOnsicmF3IjoiMyIsImVuY29kZWQiOiIzIn19LCJzaWduYXR1cmUiOnsicF9jcmVkZW50aWFsIjp7Im1fMiI6IjMzNjg4ODUzNTU3NTg2MDI3MDg3OTY5ODAzMjgzMzcyNzE4Nzc5MDAzNDAzMDgwODMzMjQzNDIxMTU3MDA5NzE4MDUzMTMyNDIwODAwIiwiYSI6IjEwMjUxMTg2OTU5MTg2NDc2NDcwNzU0MTQ0MDg5NDE3MjI4OTM1Mjk0ODgxNDExMTc5ODYwNzgxODIxODY2OTcyODIyMzg1MTQ1OTcwNDA4Mzk2Mjg5OTM2NzgzNTUxMDk4NDA2MjE2MjcwNjgyNDM1ODg3NjY0OTI0MzQwMDg3NTY4MDMyNzMyMzYwMDc5MTI2ODk2MDU3NDA3MTYyMjI0NDgwODM2NTgzNjY2MzQ1MzA5NzQ0NDE5NjA0ODg5ODA1NDU3Mjc4NDE0MjgyMjA4NzIzMDIwNDQzNzk0MjM0NzU1NTgwNjA1MTE1NjU3NTQ4NjE1MTgwNTU1ODEzMjA0MzQyNjkzNjYyODQzNzY4MjQ2NDM1NjU4MjQ5MDYyMjUxMzYwNzE2MzEyNzM4MjAyMTU2NTEwNzM2NDY1ODk2NjIyNDY4MDk3OTY0OTk0NTA1NDUwMjczMzQ2Mzk4MzY4NzcxNDM3MzAzNTI2NjE0NTk4NTU4Mjg0MTAxNzk0NjYwOTAxNDMwOTI4MzY1MTk3MzA2MDIxMzQ5OTQ3MDI2MzIzMzEwOTE3MjgzODM0ODY2NzI1MzgyMDg4NDIzNDU1NzE0MDY3MTk1NDEzMDA4MzAxNTQ2MTA1NzY4NTAxNzMxNjEwMjk3MDY5ODUyNjAxMTgxMTM3OTg2NjM2MDU2MjI4MTE4NzUzMTM1NjMxMDIwNzA0MzYxODQxNTg0MjA0NzIwMDU1NjY0ODIxMTczOTA3MzYyMTQzNTQyNjk1NTExMTMxNzU3NTE0OTUxMDY2ODQ2MzIyMDAyNzYxMzg4MzIwNjkyNSIsImUiOiIyNTkzNDQ3MjMwNTUwNjIwNTk5MDcwMjU0OTE0ODA2OTc1NzE5MzgyNzc4ODk1MTUxNTIzMDYyNDk3Mjg1ODMxMDU2NjU4MDA3MTMzMDY3NTkxNDk5ODE2OTA1NTkxOTM5ODcxNDMwMTIzNjc5MTMyMDYyOTkzMjM4OTk2OTY5NDIyMTMyMzU5NTY3NDI5Mjk4MTYwMTkzMjA4MDYyNzM5NTc5MDExNDE1Njk0NDAwMjUyMTkiLCJ2IjoiMTAwODYwMTE5NjExNDQ0MjUxODg1ODcyNzA0OTEyNDQwMTQzNTA0MDEwMDQ3NzE3MzYxNzgxMjIwOTQ0OTA3OTE3ODM0NTE3NjQyOTk5MDgxMjEzMDcyNTI4NzU5NTczMzIyNDM1NjU5NzY4OTI2NzA4MjE0NTI5Njg0Njg5NTc5MjAwNzY4MDkxMTM0OTM0MzYxNDUyNzM5ODUwMjEyODc1MDUwMzg5NjkzOTMxMjEzMDg2MTUyOTM4NzA2ODc4MzQyNjIxNjQ1MTc2NDY5NTU0NDMyNTY2MDk0MDY5NjU2ODkzNDg1NjQyNDI2MTc0MjA5MjY3OTI1MDEzODkxMTU2MzAzMzY0MzUwMzgwNTUwMzQ4OTk3MDI1Nzc3NDc5NDg3ODI0NDkzNzg4MDYwNTg1NzMxMTY2NDM5OTE1MTc3ODUyNTYwNjczMjkwODA2Mjk5ODEyOTY1NjMwNDc2OTc0NzExNDY4MDE1MzY4NzM2NTc3MDEzNDE2NjE3ODc0MTc3ODgwNjMzNTc1OTAwMzQyODM5MDUxNjc4NjExNDMxMTk5Mzk3NTIzMDE5Njc0NTA3MjM0NDAzNzcyMTcxMDM3Nzg3NzUyNTMwMjIyODYyNDg5OTMzMzczMzY1MjIwNTc4MDIzNDY2NjkyMDQ4MTA0NTE0NjczMzMwMzMwNzQ1OTEyMjUzNzQ0MDQwMjI1NTM4NjMxNDk2MjY4NDM0MDk5Njk3Nzk1NTY5MDA3MTExMjQzMTg4MTc3MzUyNjE5MTUxNzk1NjEzNTAwNjg5MzUwMzQyNTk3NjA1ODY2MjUyOTYwMjQ3ODg4OTE2NDIwNDcyMDEzNDYzMTA5NTA5MjMxNDcwNjc4MDc5MDI2Mzc3MzY4NDEwNTIyODg3NDExOTIyMzE4Njk5NzA4MjkxNzI4NTg3ODgzNjExODMyMjU4MTE5MzI2ODQ5NjkxODI1MDI2MzU2NDQ1OTM1NjYxOTkyODEyNjIwNDY4MzAxMjEwMzMwNTA1NjEwMjYyNTU5MDk5NDgwNzcxMjA0NDU0ODg0MDI5ODA3MDcwOTM4NDU5OTgxNDM1NjQyNTkzNTQyODc0ODAifSwicl9jcmVkZW50aWFsIjpudWxsfSwic2lnbmF0dXJlX2NvcnJlY3RuZXNzX3Byb29mIjp7InNlIjoiMjMwNDc5NjEzNTA0MDI5NTI3NTk3NzM3MTY4NjY0OTQ5MzQwNzk1NTg1ODM5NTQ4OTI2MTEwMjQ2NzU0NzA3OTgyNjc2MDEyMjIyMTYyNzQyNTQ2Nzg4NDI3MDA4MDQ5NzIyNDMwNDgyODAyOTYyNTgxNDE2ODI2MjEzMTgwMTE4MTA4MTA1Nzg1NjA4OTg5NjEyNTU0ODMwOTE5MjU4MTI0NDgyMzUwNTQ2MTkxOTQ5NTU5ODM2NTk4NzcxMTE0MzI1NjA5MTI4MjUxMTc1MDM4NDMxNDA2NzM2NTc1MDkwMzk5ODk0MDQzMjc3MTg5MTM3MzE1NTM5NTQ2MTE3Mjk2NTM1OTMyOTQ3NDk3NTU0Mjg0NDc1NjkxNDE1NDEzMzIzNjE2OTYyNTk1NDAzMTkxMjQ4ODY2NDE1MjI0NDY2MTU2OTgyODg4OTkyNTAxNjc1NTcwNjI0MzQ2MzMyMTE0NjMzMDQ1NzUxNDg3NzU3ODM3MDA5Mzc3ODMwNTI1MTU5MjUwNjMwMjcxNjY3NDQxMDI3MTM5MjE3Nzc5ODU5MDExMjUxOTc1OTczNjY0NTc4MjMxOTk1Mzc3OTE4Mjg4MTkyNjIyMDM5NDEzMDM0ODg5MjM3Mzg2NzU4Mzg3NTcwNTMxNDc1OTQxMDU2MTg3NzUzOTEyNDA0NzkwNzQ5NzgzMTM0OTk3MDgzODk3NjE5MTczMTg3MDg1MzE1MjQ3NTM4NjU2OTcwOTE0NzI2MzM1ODA1ODY5OTk3NzI3OTc5NTUwMjIzNjkzMDA2MjcwNjIzNTc3NjM2NTIyNjIyNTY0MTE4NTMiLCJjIjoiOTM2NzQ1MDczNzcxNzQ3MjE3OTg3OTY2OTYzMDQxNzUzMTE4NDk0NDE4NDQ0NzQ1MDI3NzAyMjI3Nzk0NzU1ODQ2Mjg3ODMzMzU4NTAifSwicmV2X3JlZyI6bnVsbCwid2l0bmVzcyI6bnVsbH0= issuingDID: @@ -4417,74 +4324,67 @@ components: example: did:prism:3bb0505d13fcb04d28a48234edb27b0d4e6d7e18a81e2c1abab58f3bbc21ce6f metaRetries: type: integer - description: - The maximum background processing attempts remaining for this + description: The maximum background processing attempts remaining for this record. format: int32 example: 5 IssueCredentialRecordPage: required: - - kind - - self - - pageOf + - kind + - self + - pageOf type: object properties: contents: type: array items: - $ref: "#/components/schemas/IssueCredentialRecord" + $ref: '#/components/schemas/IssueCredentialRecord' description: |2 An sequence of IssueCredentialRecord resources representing the list of credential records that the paginated response contains. example: [] kind: type: string - description: - A string that identifies the type of resource being returned + description: A string that identifies the type of resource being returned in the response. example: Collection self: type: string - description: - The URL that uniquely identifies the resource being returned + description: The URL that uniquely identifies the resource being returned in the response. example: /prism-agent/issue-credentials/records?offset=10&limit=10 pageOf: type: string - description: - A string field indicating the type of resource that the contents + description: A string field indicating the type of resource that the contents field contains. example: /prism-agent/issue-credentials/records next: type: string - description: - An optional string field containing the URL of the next page + description: An optional string field containing the URL of the next page of results. If the API response does not contain any more pages, this field should be set to None. example: /prism-agent/issue-credentials/records?offset=20&limit=10 previous: type: string - description: - An optional string field containing the URL of the previous + description: An optional string field containing the URL of the previous page of results. If the API response is the first page of results, this field should be set to None. example: /prism-agent/issue-credentials/records?offset=0&limit=10 Json: - description: - The service endpoint. Can contain multiple possible values as described + description: The service endpoint. Can contain multiple possible values as described in the [Create DID operation](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#create-did) example: https://example.com oneOf: - - $ref: "#/components/schemas/Arr" - - $ref: "#/components/schemas/Bool" - - $ref: "#/components/schemas/Null" - - $ref: "#/components/schemas/Num" - - $ref: "#/components/schemas/Obj" - - $ref: "#/components/schemas/Str" + - $ref: '#/components/schemas/Arr' + - $ref: '#/components/schemas/Bool' + - $ref: '#/components/schemas/Null' + - $ref: '#/components/schemas/Num' + - $ref: '#/components/schemas/Obj' + - $ref: '#/components/schemas/Str' ManagedDID: required: - - did - - status + - did + - status type: object properties: did: @@ -4493,8 +4393,7 @@ components: example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff longFormDid: type: string - description: - A long-form DID. Mandatory when status is not `PUBLISHED` and + description: A long-form DID. Mandatory when status is not `PUBLISHED` and optional when status is `PUBLISHED` example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff:Cr4BCrsBElsKBmF1dGgtMRAEQk8KCXNlY3AyNTZrMRIg0opTuxu-zt6aRbT1tPniG4eu4CYsQPM3rrLzvzNiNgwaIIFTnyT2N4U7qCQ78qtWC3-p0el6Hvv8qxG5uuEw-WgMElwKB21hc3RlcjAQAUJPCglzZWNwMjU2azESIKhBU0eCOO6Vinz_8vhtFSAhYYqrkEXC8PHGxkuIUev8GiAydFHLXb7c22A1Uj_PR21NZp6BCDQqNq2xd244txRgsQ status: @@ -4505,8 +4404,8 @@ components: example: CREATED ManagedDIDKeyTemplate: required: - - id - - purpose + - id + - purpose type: object properties: id: @@ -4514,13 +4413,13 @@ components: description: Identifier of a verification material in the DID Document example: key-1 purpose: - $ref: "#/components/schemas/Purpose" + $ref: '#/components/schemas/Purpose' description: A key-pair template to add to DID document. ManagedDIDPage: required: - - self - - kind - - pageOf + - self + - kind + - pageOf type: object properties: self: @@ -4536,24 +4435,24 @@ components: contents: type: array items: - $ref: "#/components/schemas/ManagedDID" + $ref: '#/components/schemas/ManagedDID' Map_AnoncredRequestedAttributeV1: type: object additionalProperties: - $ref: "#/components/schemas/AnoncredRequestedAttributeV1" + $ref: '#/components/schemas/AnoncredRequestedAttributeV1' Map_AnoncredRequestedPredicateV1: type: object additionalProperties: - $ref: "#/components/schemas/AnoncredRequestedPredicateV1" + $ref: '#/components/schemas/AnoncredRequestedPredicateV1' Map_String: type: object additionalProperties: type: string - "Null": + 'Null': type: object Num: required: - - value + - value type: object properties: value: @@ -4562,8 +4461,8 @@ components: type: object Options: required: - - challenge - - domain + - challenge + - domain type: object properties: challenge: @@ -4574,9 +4473,17 @@ components: type: string description: The domain value can be any string or URI. example: https://example-verifier.com - description: - The options to use when creating the proof presentation request + description: The options to use when creating the proof presentation request (e.g., domain, challenge). + ParameterizableVcVerification: + required: + - verification + type: object + properties: + verification: + $ref: '#/components/schemas/VcVerification' + parameter: + $ref: '#/components/schemas/VcVerificationParameter' PatchContextAction: type: object properties: @@ -4588,11 +4495,11 @@ components: example: https://didcomm.org/messaging/contexts/v2 PresentationStatus: required: - - presentationId - - thid - - role - - status - - metaRetries + - presentationId + - thid + - role + - status + - metaRetries type: object properties: presentationId: @@ -4601,45 +4508,43 @@ components: example: 3c6d9fa5-d277-431e-a6cb-d3956e47e610 thid: type: string - description: - The unique identifier of the thread this presentation record + description: The unique identifier of the thread this presentation record belongs to. The value will identical on both sides of the presentation flow (verifier and prover) example: 0527aea1-d131-3948-a34d-03af39aba8b4 role: type: string - description: - The role played by the Prism agent in the proof presentation + description: The role played by the Prism agent in the proof presentation flow. example: Verifier enum: - - Verifier - - Prover + - Verifier + - Prover status: type: string description: The current state of the proof presentation record. example: RequestPending enum: - - RequestPending - - RequestSent - - RequestReceived - - RequestRejected - - PresentationPending - - PresentationGenerated - - PresentationSent - - PresentationReceived - - PresentationVerified - - PresentationAccepted - - PresentationRejected - - ProblemReportPending - - ProblemReportSent - - ProblemReportReceived + - RequestPending + - RequestSent + - RequestReceived + - RequestRejected + - PresentationPending + - PresentationGenerated + - PresentationSent + - PresentationReceived + - PresentationVerified + - PresentationVerificationFailed + - PresentationAccepted + - PresentationRejected + - ProblemReportPending + - ProblemReportSent + - ProblemReportReceived proofs: type: array items: - $ref: "#/components/schemas/ProofRequestAux" - description: - The type of proofs requested in the context of this proof presentation + $ref: '#/components/schemas/ProofRequestAux' + description: The type of proofs requested in the context of this proof presentation request (e.g., VC schema, trusted issuers, etc.) example: [] data: @@ -4650,28 +4555,26 @@ components: example: [] connectionId: type: string - description: - The unique identifier of an established connection between + description: The unique identifier of an established connection between the verifier and the prover. example: bc528dc8-69f1-4c5a-a508-5f8019047900 metaRetries: type: integer - description: - The maximum background processing attempts remaining for this + description: The maximum background processing attempts remaining for this record format: int32 example: 5 PresentationStatusPage: required: - - self - - kind - - pageOf + - self + - kind + - pageOf type: object properties: contents: type: array items: - $ref: "#/components/schemas/PresentationStatus" + $ref: '#/components/schemas/PresentationStatus' description: A sequence of Presentation objects. example: [] self: @@ -4689,53 +4592,48 @@ components: next: type: string description: URL of the next page (if available) - example: "" + example: '' previous: type: string description: URL of the previous page (if available) - example: "" + example: '' Proof: required: - - type - - created - - verificationMethod - - proofPurpose - - proofValue - - jws + - type + - created + - verificationMethod + - proofPurpose + - proofValue + - jws type: object properties: type: type: string - description: - The type of cryptographic signature algorithm used to generate + description: The type of cryptographic signature algorithm used to generate the proof. example: Ed25519Signature2018 created: type: string - description: - The date and time at which the proof was created, in UTC format. + description: The date and time at which the proof was created, in UTC format. This field is used to ensure that the proof was generated before or at the same time as the credential definition itself. format: date-time example: 2022-03-10T12:00Z verificationMethod: type: string - description: - The verification method used to generate the proof. This is + description: The verification method used to generate the proof. This is usually a DID and key ID combination that can be used to look up the public key needed to verify the proof. example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff#key-1 proofPurpose: type: string - description: - "The purpose of the proof (for example: `assertionMethod`). + description: 'The purpose of the proof (for example: `assertionMethod`). This indicates that the proof is being used to assert that the issuer - really issued this credential definition instance." + really issued this credential definition instance.' example: assertionMethod proofValue: type: string - description: - The cryptographic signature value that was generated using + description: The cryptographic signature value that was generated using the private key associated with the verification method, and which can be used to verify the proof. example: FiPfjknHikKmZ... @@ -4745,16 +4643,14 @@ components: example: eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il0sImt0eSI6Ik... domain: type: string - description: - It specifies the domain context within which the credential + description: It specifies the domain context within which the credential definition and proof are being used example: prims.atala.com - description: - A digital signature over the Credential Definition for the sake + description: A digital signature over the Credential Definition for the sake of asserting authorship. A piece of Metadata. example: type: Ed25519Signature2018 - created: "2022-03-10T12:00:00Z" + created: '2022-03-10T12:00:00Z' verificationMethod: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff#key-1 proofPurpose: assertionMethod proofValue: FiPfjknHikKmZ... @@ -4762,46 +4658,41 @@ components: domain: prims.atala.com Proof1: required: - - type - - created - - verificationMethod - - proofPurpose - - proofValue - - jws + - type + - created + - verificationMethod + - proofPurpose + - proofValue + - jws type: object properties: type: type: string - description: - The type of cryptographic signature algorithm used to generate + description: The type of cryptographic signature algorithm used to generate the proof. example: Ed25519Signature2018 created: type: string - description: - The date and time at which the proof was created, in UTC format. + description: The date and time at which the proof was created, in UTC format. This field is used to ensure that the proof was generated before or at the same time as the credential schema itself. format: date-time example: 2022-03-10T12:00Z verificationMethod: type: string - description: - The verification method used to generate the proof. This is + description: The verification method used to generate the proof. This is usually a DID and key ID combination that can be used to look up the public key needed to verify the proof. example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff#key-1 proofPurpose: type: string - description: - "The purpose of the proof (for example: `assertionMethod`). + description: 'The purpose of the proof (for example: `assertionMethod`). This indicates that the proof is being used to assert that the issuer - really issued this credential schema instance." + really issued this credential schema instance.' example: assertionMethod proofValue: type: string - description: - The cryptographic signature value that was generated using + description: The cryptographic signature value that was generated using the private key associated with the verification method, and which can be used to verify the proof. example: FiPfjknHikKmZ... @@ -4811,16 +4702,14 @@ components: example: eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il0sImt0eSI6Ik... domain: type: string - description: - It specifies the domain context within which the credential + description: It specifies the domain context within which the credential schema and proof are being used example: prims.atala.com - description: - A digital signature over the Credential Schema for the sake of + description: A digital signature over the Credential Schema for the sake of asserting authorship. A piece of Metadata. example: type: Ed25519Signature2018 - created: "2022-03-10T12:00:00Z" + created: '2022-03-10T12:00:00Z' verificationMethod: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff#key-1 proofPurpose: assertionMethod proofValue: FiPfjknHikKmZ... @@ -4828,7 +4717,7 @@ components: domain: prims.atala.com ProofRequestAux: required: - - schemaId + - schemaId type: object properties: schemaId: @@ -4839,16 +4728,15 @@ components: type: array items: type: string - description: - One or more issuers that are trusted by the verifier emitting + description: One or more issuers that are trusted by the verifier emitting the proof presentation request. example: - - did:web:atalaprism.io/users/testUser - - did.prism:123 - - did:prism:... + - did:web:atalaprism.io/users/testUser + - did.prism:123 + - did:prism:... PublicKeyJwk: required: - - kty + - kty type: object properties: crv: @@ -4864,21 +4752,21 @@ components: description: Purpose of the verification material in the DID Document example: authentication enum: - - assertionMethod - - authentication - - capabilityDelegation - - capabilityInvocation - - keyAgreement + - assertionMethod + - authentication + - capabilityDelegation + - capabilityInvocation + - keyAgreement RemoveEntryById: required: - - id + - id type: object properties: id: type: string RequestPresentationAction: required: - - action + - action type: object properties: action: @@ -4886,44 +4774,41 @@ components: description: The action to perform on the proof presentation record. example: request-accept enum: - - request-accept - - request-reject - - presentation-accept - - presentation-reject + - request-accept + - request-reject + - presentation-accept + - presentation-reject proofId: type: array items: type: string - description: - The unique identifier of the issue credential record - and + description: The unique identifier of the issue credential record - and hence VC - to use as the prover accepts the presentation request. Only applicable on the prover side when the action is `request-accept`. anoncredPresentationRequest: - $ref: "#/components/schemas/AnoncredCredentialProofsV1" + $ref: '#/components/schemas/AnoncredCredentialProofsV1' RequestPresentationInput: required: - - connectionId + - connectionId type: object properties: connectionId: type: string - description: - The unique identifier of an established connection between + description: The unique identifier of an established connection between the verifier and the prover. format: uuid example: bc528dc8-69f1-4c5a-a508-5f8019047900 options: - $ref: "#/components/schemas/Options" + $ref: '#/components/schemas/Options' proofs: type: array items: - $ref: "#/components/schemas/ProofRequestAux" - description: - The type of proofs requested in the context of this proof presentation + $ref: '#/components/schemas/ProofRequestAux' + description: The type of proofs requested in the context of this proof presentation request (e.g., VC schema, trusted issuers, etc.) example: [] anoncredPresentationRequest: - $ref: "#/components/schemas/AnoncredPresentationRequestV1" + $ref: '#/components/schemas/AnoncredPresentationRequestV1' credentialFormat: type: string description: The credential format (default to 'JWT') @@ -4932,9 +4817,9 @@ components: type: object Service: required: - - id - - type - - serviceEndpoint + - id + - type + - serviceEndpoint type: object properties: id: @@ -4945,44 +4830,43 @@ components: Returns the full ID (with DID prefix) when resolving DID example: service-1 type: - description: - Service type. Can contain multiple possible values as described + description: Service type. Can contain multiple possible values as described in the [Create DID operation](https://github.com/input-output-hk/prism-did-method-spec/blob/main/w3c-spec/PRISM-method.md#create-did) under the construction section. example: LinkedDomains oneOf: - - type: array - items: - type: string - - type: string + - type: array + items: + type: string + - type: string serviceEndpoint: - $ref: "#/components/schemas/Json" + $ref: '#/components/schemas/Json' description: A service that should appear in the DID document. https://www.w3.org/TR/did-core/#services StatusListCredential: required: - - issuer - - id - - issuanceDate - - credentialSubject - - proof + - issuer + - id + - issuanceDate + - credentialSubject + - proof type: object properties: - "@context": + '@context': type: array items: type: string description: List of JSON-LD contexts example: - - https://www.w3.org/2018/credentials/v1 - - https://w3id.org/vc/status-list/2021/v1 + - https://www.w3.org/2018/credentials/v1 + - https://w3id.org/vc/status-list/2021/v1 type: type: array items: type: string description: List of credential types example: - - VerifiableCredential - - StatusList2021Credential + - VerifiableCredential + - StatusList2021Credential issuer: type: string description: DID of the issuer of status list credential @@ -4995,30 +4879,29 @@ components: type: string description: Issuance timestamp of status list credential format: date-time - example: "2024-03-20T18:35:17.949576647Z" + example: '2024-04-26T13:30:41.708554220Z' credentialSubject: - $ref: "#/components/schemas/CredentialSubject" + $ref: '#/components/schemas/CredentialSubject' proof: - description: - Embedded proof to verify data integrity of status list credential, + description: Embedded proof to verify data integrity of status list credential, includes "type" property which defines an algorithm to be used for proof verification example: type: DataIntegrityProof proofPurpose: assertionMethod verificationMethod: data:application/json;base64,eyJAY29udGV4dCI6WyJodHRwczovL3czaWQub3JnL3NlY3VyaXR5L211bHRpa2V5L3YxIl0sInR5cGUiOiJNdWx0aWtleSIsInB1YmxpY0tleU11bHRpYmFzZSI6InVNRmt3RXdZSEtvWkl6ajBDQVFZSUtvWkl6ajBEQVFjRFFnQUVRUENjM1M0X0xHVXRIM25DRjZ2dUw3ekdEMS13UmVrMHRHbnB0UnZUakhIMUdvTnk1UFBIZ0FmNTZlSzNOd3B0LWNGcmhrT2pRQk1rcFRKOHNaS1pCZz09In0= - created: "2024-01-22T22:40:34.560891Z" + created: '2024-01-22T22:40:34.560891Z' proofValue: zAN1rKq8npnByRqPRxhjHEkivhN8AhA8V6MqDJga1zcCUEvPDUoqJB5Rj6ZJHTCnBZ98VXTEVd1rprX2wvP1MAaTEi7Pm241qm cryptoSuite: eddsa-jcs-2022 StatusPurpose: description: type of status list credential, either revocation or suspension example: Revocation oneOf: - - $ref: "#/components/schemas/Revocation" - - $ref: "#/components/schemas/Suspension" + - $ref: '#/components/schemas/Revocation' + - $ref: '#/components/schemas/Suspension' Str: required: - - value + - value type: object properties: value: @@ -5027,7 +4910,7 @@ components: type: object UpdateEntityNameRequest: required: - - name + - name type: object properties: name: @@ -5038,7 +4921,7 @@ components: maxLength: 128 UpdateEntityWalletIdRequest: required: - - walletId + - walletId type: object properties: walletId: @@ -5052,33 +4935,33 @@ components: actions: type: array items: - $ref: "#/components/schemas/UpdateManagedDIDRequestAction" + $ref: '#/components/schemas/UpdateManagedDIDRequestAction' UpdateManagedDIDRequestAction: required: - - actionType + - actionType type: object properties: actionType: - $ref: "#/components/schemas/ActionType" + $ref: '#/components/schemas/ActionType' addKey: - $ref: "#/components/schemas/ManagedDIDKeyTemplate" + $ref: '#/components/schemas/ManagedDIDKeyTemplate' removeKey: - $ref: "#/components/schemas/RemoveEntryById" + $ref: '#/components/schemas/RemoveEntryById' addService: - $ref: "#/components/schemas/Service" + $ref: '#/components/schemas/Service' removeService: - $ref: "#/components/schemas/RemoveEntryById" + $ref: '#/components/schemas/RemoveEntryById' updateService: - $ref: "#/components/schemas/UpdateManagedDIDServiceAction" + $ref: '#/components/schemas/UpdateManagedDIDServiceAction' patchContext: - $ref: "#/components/schemas/PatchContextAction" + $ref: '#/components/schemas/PatchContextAction' description: |- A list of actions to perform on DID document. The field `addKey`, `removeKey`, `addService`, `removeService`, `updateService`, `patchContext` must corresponds to the `actionType` specified. For example, `addKey` must be present when `actionType` is `ADD_KEY`. UpdateManagedDIDServiceAction: required: - - id + - id type: object properties: id: @@ -5089,21 +4972,104 @@ components: description: The type of the service example: LinkedDomains oneOf: - - type: array - items: - type: string - - type: string + - type: array + items: + type: string + - type: string serviceEndpoint: - $ref: "#/components/schemas/Json" - description: - A patch to existing Service. 'type' and 'serviceEndpoint' cannot + $ref: '#/components/schemas/Json' + description: A patch to existing Service. 'type' and 'serviceEndpoint' cannot both be empty. + VcVerification: + type: string + enum: + - AlgorithmVerification + - AudienceCheck + - ComplianceWithStandards + - ExpirationCheck + - IntegrityOfClaims + - IssuerIdentification + - NotBeforeCheck + - RevocationCheck + - SchemaCheck + - SemanticCheckOfClaims + - SignatureVerification + - SubjectVerification + VcVerificationParameter: + oneOf: + - $ref: '#/components/schemas/DateTimeParameter' + - $ref: '#/components/schemas/DidParameter' + VcVerificationRequest: + required: + - credential + type: object + properties: + credential: + type: string + description: Encoded Verifiable Credential to verify + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + verifications: + type: array + items: + $ref: '#/components/schemas/ParameterizableVcVerification' + description: The list of Verifications to verify. All verifications run + if Verifications left empty + example: + - ParameterizableVcVerification(SignatureVerification,None) + - ParameterizableVcVerification(IssuerIdentification,Some(DidParameter(did:prism:issuer))) + - ParameterizableVcVerification(ExpirationCheck,Some(DateTimeParameter(2022-03-10T12:00Z))) + - ParameterizableVcVerification(NotBeforeCheck,Some(DateTimeParameter(2022-03-10T12:00Z))) + - ParameterizableVcVerification(AudienceCheck,Some(DidParameter(did:prism:holder))) + - ParameterizableVcVerification(SubjectVerification,None) + - ParameterizableVcVerification(IntegrityOfClaims,None) + - ParameterizableVcVerification(ComplianceWithStandards,None) + - ParameterizableVcVerification(RevocationCheck,None) + - ParameterizableVcVerification(AlgorithmVerification,None) + - ParameterizableVcVerification(SchemaCheck,None) + - ParameterizableVcVerification(SemanticCheckOfClaims,None) + VcVerificationResponse: + required: + - credential + type: object + properties: + credential: + type: string + description: Encoded Verifiable Credential to verify + example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c + result: + type: array + items: + $ref: '#/components/schemas/VcVerificationResult' + description: The list executed Verifications + example: + - VcVerificationResult(SignatureVerification,true) + - VcVerificationResult(IssuerIdentification,true) + - VcVerificationResult(ExpirationCheck,true) + - VcVerificationResult(NotBeforeCheck,true) + - VcVerificationResult(AudienceCheck,true) + - VcVerificationResult(SubjectVerification,true) + - VcVerificationResult(IntegrityOfClaims,true) + - VcVerificationResult(ComplianceWithStandards,true) + - VcVerificationResult(RevocationCheck,true) + - VcVerificationResult(AlgorithmVerification,true) + - VcVerificationResult(SchemaCheck,true) + - VcVerificationResult(SemanticCheckOfClaims,true) + VcVerificationResult: + required: + - verification + - success + type: object + properties: + verification: + $ref: '#/components/schemas/VcVerification' + success: + type: boolean VerificationMethod: required: - - id - - type - - controller - - publicKeyJwk + - id + - type + - controller + - publicKeyJwk type: object properties: id: @@ -5119,11 +5085,11 @@ components: description: The DID that controls the verification method. example: did:prism:4a5b5cf0a513e83b598bbea25cd6196746747f361a73ef77068268bc9bd732ff publicKeyJwk: - $ref: "#/components/schemas/PublicKeyJwk" + $ref: '#/components/schemas/PublicKeyJwk' description: A cryptographic public key expressed in the DID document. https://www.w3.org/TR/did-core/#verification-methods VerificationPolicyConstraint: required: - - schemaId + - schemaId type: object properties: schemaId: @@ -5137,189 +5103,169 @@ components: type: string description: A list of DIDs of the trusted issuers. example: - - did:example:123456789abcdefghi + - did:example:123456789abcdefghi VerificationPolicyInput: required: - - name - - description + - name + - description type: object properties: id: type: string - description: - A unique identifier to address the verification policy instance. + description: A unique identifier to address the verification policy instance. UUID is generated by the backend. format: uuid example: 0527aea1-d131-3948-a34d-03af39aba8b5 name: type: string - description: - A human-readable name for the verification policy. The `name` + description: A human-readable name for the verification policy. The `name` cannot be empty. example: Trusted Issuers Verification Policy minLength: 1 description: type: string description: A human-readable description of the verification policy. - example: - Verification policy that checks if the credential was issued by + example: Verification policy that checks if the credential was issued by a trusted issuer. constraints: type: array items: - $ref: "#/components/schemas/VerificationPolicyConstraint" - description: - The object that describes the constraints of the verification + $ref: '#/components/schemas/VerificationPolicyConstraint' + description: The object that describes the constraints of the verification policy. Each constraint is a tuple of the `schemaId` and a set of DIDs of the trusted issuers. example: - - schemaId: https://example.com/driving-license-1.0 - trustedIssuers: - - did:example:123456789abcdefghi + - schemaId: https://example.com/driving-license-1.0 + trustedIssuers: + - did:example:123456789abcdefghi VerificationPolicyResponse: required: - - self - - kind - - id - - nonce - - name - - description - - createdAt - - updatedAt + - self + - kind + - id + - nonce + - name + - description + - createdAt + - updatedAt type: object properties: self: type: string - description: - The URL that uniquely identifies the resource being returned + description: The URL that uniquely identifies the resource being returned in the response. example: /prism-agent/verification/policies/0527aea1-d131-3948-a34d-03af39aba8b4 kind: type: string - description: - A string that identifies the type of resource being returned + description: A string that identifies the type of resource being returned in the response. example: VerificationPolicy id: type: string - description: - A unique identifier to address the verification policy instance. + description: A unique identifier to address the verification policy instance. UUID is generated by the backend. format: uuid example: 0527aea1-d131-3948-a34d-03af39aba8b5 nonce: type: integer - description: - A number that is changed every time the verification policy + description: A number that is changed every time the verification policy is updated. format: int32 example: 1234 name: type: string - description: - A human-readable name for the verification policy. The `name` + description: A human-readable name for the verification policy. The `name` cannot be empty. example: Trusted Issuers Verification Policy minLength: 1 description: type: string description: A human-readable description of the verification policy. - example: - Verification policy that checks if the credential was issued by + example: Verification policy that checks if the credential was issued by a trusted issuer. createdAt: type: string - description: - "[RFC3339](https://www.rfc-editor.org/rfc/rfc3339) date on - which the verification policy was created." + description: '[RFC3339](https://www.rfc-editor.org/rfc/rfc3339) date on + which the verification policy was created.' format: date-time example: 2022-03-10T12:00Z updatedAt: type: string - description: - "[RFC3339](https://www.rfc-editor.org/rfc/rfc3339) date on - which the verification policy was updated." + description: '[RFC3339](https://www.rfc-editor.org/rfc/rfc3339) date on + which the verification policy was updated.' format: date-time example: 2022-03-10T12:00Z constraints: type: array items: - $ref: "#/components/schemas/VerificationPolicyConstraint" - description: - The object that describes the constraints of the verification + $ref: '#/components/schemas/VerificationPolicyConstraint' + description: The object that describes the constraints of the verification policy. Each constraint is a tuple of the `schemaId` and a set of DIDs of the trusted issuers. example: - - schemaId: https://example.com/driving-license-1.0 - trustedIssuers: - - did:example:123456789abcdefghi + - schemaId: https://example.com/driving-license-1.0 + trustedIssuers: + - did:example:123456789abcdefghi VerificationPolicyResponsePage: required: - - self - - kind - - pageOf + - self + - kind + - pageOf type: object properties: self: type: string - description: - The URL that uniquely identifies the resource being returned + description: The URL that uniquely identifies the resource being returned in the response. example: /prism-agent/verification/policies?name=Trusted&offset=0&limit=10 kind: type: string - description: - A string that identifies the type of resource being returned + description: A string that identifies the type of resource being returned in the response. example: VerificationPolicyPage pageOf: type: string - description: - A string field indicating the type of resource that the contents + description: A string field indicating the type of resource that the contents field contains example: /prism-agent/verification/policies next: type: string - description: - An optional string field containing the URL of the next page + description: An optional string field containing the URL of the next page of results. If the API response does not contain any more pages, this field should be set to None. example: /prism-agent/verification/policies?skip=20&limit=10 previous: type: string - description: - An optional string field containing the URL of the previous + description: An optional string field containing the URL of the previous page of results. If the API response is the first page of results, this field should be set to None. example: /prism-agent/verification/policies?skip=0&limit=10 contents: type: array items: - $ref: "#/components/schemas/VerificationPolicyResponse" - description: - A sequence of VerificationPolicyResponse objects representing + $ref: '#/components/schemas/VerificationPolicyResponse' + description: A sequence of VerificationPolicyResponse objects representing the list of verification policies that the paginated response contains example: - - self: /prism-agent/verification/policies - kind: VerificationPolicy - id: 0527aea1-d131-3948-a34d-03af39aba8b4 - nonce: 0 - name: Trusted Issuers Verification Policy - description: - Verification policy that checks if the credential was issued - by a trusted issuer. - createdAt: "2022-03-10T12:00:00Z" - updatedAt: "2022-03-10T12:00:00Z" - constraints: - - schemaId: https://example.com/driving-license-1.0 - trustedIssuers: - - did:example:123456789abcdefghi + - self: /prism-agent/verification/policies + kind: VerificationPolicy + id: 0527aea1-d131-3948-a34d-03af39aba8b4 + nonce: 0 + name: Trusted Issuers Verification Policy + description: Verification policy that checks if the credential was issued + by a trusted issuer. + createdAt: '2022-03-10T12:00:00Z' + updatedAt: '2022-03-10T12:00:00Z' + constraints: + - schemaId: https://example.com/driving-license-1.0 + trustedIssuers: + - did:example:123456789abcdefghi WalletDetail: required: - - id - - name - - createdAt - - updatedAt + - id + - name + - createdAt + - updatedAt type: object properties: id: @@ -5335,17 +5281,17 @@ components: type: string description: The `createdAt` timestamp of the wallet. format: date-time - example: "2023-01-01T00:00:00Z" + example: '2023-01-01T00:00:00Z' updatedAt: type: string description: The `updateddAt` timestamp of the wallet. format: date-time - example: "2023-01-01T00:00:00Z" + example: '2023-01-01T00:00:00Z' WalletDetailPage: required: - - self - - kind - - pageOf + - self + - kind + - pageOf type: object properties: self: @@ -5361,13 +5307,13 @@ components: contents: type: array items: - $ref: "#/components/schemas/WalletDetail" + $ref: '#/components/schemas/WalletDetail' WebhookNotification: required: - - id - - url - - customHeaders - - createdAt + - id + - url + - customHeaders + - createdAt type: object properties: id: @@ -5380,17 +5326,17 @@ components: description: A URL of webhook for event notification example: http://example.com customHeaders: - $ref: "#/components/schemas/Map_String" + $ref: '#/components/schemas/Map_String' createdAt: type: string description: A time which the webhook notification resource was created. format: date-time - example: "1970-01-01T00:00:00Z" + example: '1970-01-01T00:00:00Z' WebhookNotificationPage: required: - - self - - kind - - pageOf + - self + - kind + - pageOf type: object properties: self: @@ -5406,31 +5352,28 @@ components: contents: type: array items: - $ref: "#/components/schemas/WebhookNotification" + $ref: '#/components/schemas/WebhookNotification' securitySchemes: apiKeyAuth: type: apiKey - description: - API Key Authentication. The header `apikey` must be set with the + description: API Key Authentication. The header `apikey` must be set with the API key. name: apikey in: header adminApiKeyAuth: type: apiKey - description: - Admin API Key Authentication. The header `x-admin-api-key` must + description: Admin API Key Authentication. The header `x-admin-api-key` must be set with the Admin API key. name: x-admin-api-key in: header jwtAuth: type: http - description: - JWT Authentication. The header `Authorization` must be set with + description: JWT Authentication. The header `Authorization` must be set with the JWT token using `Bearer` scheme name: Authorization in: header scheme: Bearer security: - - apiKeyAuth: [] - adminApiKeyAuth: [] - jwtAuth: [] +- apiKeyAuth: [] + adminApiKeyAuth: [] + jwtAuth: [] diff --git a/infrastructure/charts/agent/Chart.yaml b/infrastructure/charts/agent/Chart.yaml index 026770ca5c..4d296f9ca2 100644 --- a/infrastructure/charts/agent/Chart.yaml +++ b/infrastructure/charts/agent/Chart.yaml @@ -13,12 +13,12 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.31.0 +version: 1.32.0 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to # follow Semantic Versioning. They should reflect the version the application is using. # It is recommended to use it with quotes. -appVersion: 1.31.0 +appVersion: 1.32.0 dependencies: - name: vault version: 0.24.1 diff --git a/infrastructure/charts/index.yaml b/infrastructure/charts/index.yaml index b346b7c1fc..40a9be5c87 100644 --- a/infrastructure/charts/index.yaml +++ b/infrastructure/charts/index.yaml @@ -1,9 +1,27 @@ apiVersion: v1 entries: prism-agent: + - apiVersion: v2 + appVersion: 1.32.0 + created: "2024-04-26T13:53:00.924318867Z" + dependencies: + - name: vault + repository: https://helm.releases.hashicorp.com + version: 0.24.1 + - condition: keycloak.enabled + name: keycloak + repository: https://charts.bitnami.com/bitnami + version: 17.2.0 + description: A Helm chart for deploying prism-agent + digest: d2a8c642c0908616d49d1f1a18815b86b46446aca0c9e3b3d90ccca9bd8fc830 + name: prism-agent + type: application + urls: + - https://raw.githubusercontent.com/hyperledger/identus-cloud-agent/main/infrastructure/charts/prism-agent-1.32.0.tgz + version: 1.32.0 - apiVersion: v2 appVersion: 1.31.0 - created: "2024-03-20T18:57:40.265443237Z" + created: "2024-04-26T13:53:00.914478047Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -21,7 +39,7 @@ entries: version: 1.31.0 - apiVersion: v2 appVersion: 1.30.1 - created: "2024-03-20T18:57:40.254521753Z" + created: "2024-04-26T13:53:00.898640334Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -39,7 +57,7 @@ entries: version: 1.30.1 - apiVersion: v2 appVersion: 1.30.0 - created: "2024-03-20T18:57:40.243928266Z" + created: "2024-04-26T13:53:00.888615591Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -57,7 +75,7 @@ entries: version: 1.30.0 - apiVersion: v2 appVersion: 1.29.0 - created: "2024-03-20T18:57:40.2339365Z" + created: "2024-04-26T13:53:00.877632701Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -75,7 +93,7 @@ entries: version: 1.29.0 - apiVersion: v2 appVersion: 1.28.0 - created: "2024-03-20T18:57:40.223094151Z" + created: "2024-04-26T13:53:00.861865286Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -93,7 +111,7 @@ entries: version: 1.28.0 - apiVersion: v2 appVersion: 1.27.0 - created: "2024-03-20T18:57:40.212806243Z" + created: "2024-04-26T13:53:00.846878701Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -111,7 +129,7 @@ entries: version: 1.27.0 - apiVersion: v2 appVersion: 1.26.0 - created: "2024-03-20T18:57:40.202753019Z" + created: "2024-04-26T13:53:00.835824187Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -129,7 +147,7 @@ entries: version: 1.26.0 - apiVersion: v2 appVersion: 1.25.0 - created: "2024-03-20T18:57:40.19166764Z" + created: "2024-04-26T13:53:00.819989755Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -147,7 +165,7 @@ entries: version: 1.25.0 - apiVersion: v2 appVersion: 1.24.0 - created: "2024-03-20T18:57:40.181190039Z" + created: "2024-04-26T13:53:00.80826429Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -165,7 +183,7 @@ entries: version: 1.24.0 - apiVersion: v2 appVersion: 1.23.0 - created: "2024-03-20T18:57:40.169775233Z" + created: "2024-04-26T13:53:00.791829194Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -183,7 +201,7 @@ entries: version: 1.23.0 - apiVersion: v2 appVersion: 1.22.0 - created: "2024-03-20T18:57:40.15980116Z" + created: "2024-04-26T13:53:00.780616541Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -201,7 +219,7 @@ entries: version: 1.22.0 - apiVersion: v2 appVersion: 1.21.1 - created: "2024-03-20T18:57:40.148808367Z" + created: "2024-04-26T13:53:00.770382101Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -219,7 +237,7 @@ entries: version: 1.21.1 - apiVersion: v2 appVersion: 1.21.0 - created: "2024-03-20T18:57:40.138859211Z" + created: "2024-04-26T13:53:00.759247785Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -237,7 +255,7 @@ entries: version: 1.21.0 - apiVersion: v2 appVersion: 1.20.1 - created: "2024-03-20T18:57:40.12694057Z" + created: "2024-04-26T13:53:00.74470437Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -255,7 +273,7 @@ entries: version: 1.20.1 - apiVersion: v2 appVersion: 1.20.0 - created: "2024-03-20T18:57:40.116915211Z" + created: "2024-04-26T13:53:00.732799898Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -273,7 +291,7 @@ entries: version: 1.20.0 - apiVersion: v2 appVersion: 1.19.1 - created: "2024-03-20T18:57:40.105906962Z" + created: "2024-04-26T13:53:00.721973955Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -291,7 +309,7 @@ entries: version: 1.19.1 - apiVersion: v2 appVersion: 1.19.0 - created: "2024-03-20T18:57:40.095762398Z" + created: "2024-04-26T13:53:00.705290074Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -309,7 +327,7 @@ entries: version: 1.19.0 - apiVersion: v2 appVersion: 1.18.0 - created: "2024-03-20T18:57:40.085726944Z" + created: "2024-04-26T13:53:00.693144356Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -323,7 +341,7 @@ entries: version: 1.18.0 - apiVersion: v2 appVersion: 1.17.0 - created: "2024-03-20T18:57:40.082551551Z" + created: "2024-04-26T13:53:00.68806769Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -337,7 +355,7 @@ entries: version: 1.17.0 - apiVersion: v2 appVersion: 1.16.4 - created: "2024-03-20T18:57:40.079722433Z" + created: "2024-04-26T13:53:00.683156552Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -351,7 +369,7 @@ entries: version: 1.16.4 - apiVersion: v2 appVersion: 1.16.3 - created: "2024-03-20T18:57:40.075981995Z" + created: "2024-04-26T13:53:00.677232701Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -365,7 +383,7 @@ entries: version: 1.16.3 - apiVersion: v2 appVersion: 1.16.2 - created: "2024-03-20T18:57:40.073089218Z" + created: "2024-04-26T13:53:00.672674125Z" dependencies: - name: vault repository: https://helm.releases.hashicorp.com @@ -377,4 +395,4 @@ entries: urls: - https://raw.githubusercontent.com/hyperledger/identus-cloud-agent/main/infrastructure/charts/prism-agent-1.16.2.tgz version: 1.16.2 -generated: "2024-03-20T18:57:40.069857861Z" +generated: "2024-04-26T13:53:00.667476213Z" diff --git a/infrastructure/charts/prism-agent-1.32.0.tgz b/infrastructure/charts/prism-agent-1.32.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..740e21e9927f37e244b441f02a752efa43b1d63a GIT binary patch literal 160949 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�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 z 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
&*{=xi5BdstaD8+0_exFxXe;I#nG2phYtuv?i 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 V^T+)BzW@LL|Nk@k53K;45CELM6J!7Y literal 0 HcmV?d00001 diff --git a/infrastructure/local/.env b/infrastructure/local/.env index 1b3d510520..6a9eca469d 100644 --- a/infrastructure/local/.env +++ b/infrastructure/local/.env @@ -1,3 +1,3 @@ -AGENT_VERSION=1.31.0 +AGENT_VERSION=1.32.0 PRISM_NODE_VERSION=2.2.1 VAULT_DEV_ROOT_TOKEN_ID=root diff --git a/package-lock.json b/package-lock.json index 6e55ecaca2..db86ff2d2b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { - "name": "atala-prism-building-blocks", - "version": "1.31.0", + "name": "identus-cloud-agent", + "version": "1.32.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "atala-prism-building-blocks", - "version": "1.31.0", + "name": "identus-cloud-agent", + "version": "1.32.0", "devDependencies": { "@commitlint/cli": "^17.0.3", "@commitlint/config-conventional": "^17.0.3", diff --git a/package.json b/package.json index f30c0d05c2..9b3d1301a9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "identus-cloud-agent", - "version": "1.31.0", + "version": "1.32.0", "engines": { "node": ">=16.13.0" }, diff --git a/version.sbt b/version.sbt index 8e9b92b37e..31006ecdc3 100644 --- a/version.sbt +++ b/version.sbt @@ -1 +1 @@ -ThisBuild / version := "1.31.0-SNAPSHOT" +ThisBuild / version := "1.32.0-SNAPSHOT"