{"id":46114657,"url":"https://github.com/didx-xyz/acapy-cloud","last_synced_at":"2026-03-01T23:03:05.436Z","repository":{"id":38097060,"uuid":"364282403","full_name":"didx-xyz/acapy-cloud","owner":"didx-xyz","description":"Cloud-native services and API for managing DIDs and verifiable credentials, built with FastAPI and ACA-Py","archived":false,"fork":false,"pushed_at":"2026-01-12T10:15:33.000Z","size":10211,"stargazers_count":15,"open_issues_count":17,"forks_count":16,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-01-12T18:52:42.851Z","etag":null,"topics":["aca-py","decentralised-identity","ssi","trust-over-ip","verifiable-credentials"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/didx-xyz.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-05-04T14:24:55.000Z","updated_at":"2026-01-12T10:14:00.000Z","dependencies_parsed_at":"2024-01-31T13:25:12.105Z","dependency_job_id":"913513b4-1bff-4b9b-bcf0-6f77ebcb57c2","html_url":"https://github.com/didx-xyz/acapy-cloud","commit_stats":null,"previous_names":["didx-xyz/acapy-cloud"],"tags_count":48,"template":false,"template_full_name":null,"purl":"pkg:github/didx-xyz/acapy-cloud","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didx-xyz%2Facapy-cloud","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didx-xyz%2Facapy-cloud/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didx-xyz%2Facapy-cloud/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didx-xyz%2Facapy-cloud/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/didx-xyz","download_url":"https://codeload.github.com/didx-xyz/acapy-cloud/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/didx-xyz%2Facapy-cloud/sbom","scorecard":{"id":111538,"data":{"date":"2025-08-15T10:53:16Z","repo":{"name":"github.com/didx-xyz/acapy-cloud","commit":"91ccbda142ffd7a12457d5f555b7cbd3e7bb752f"},"scorecard":{"version":"v5.2.1","commit":"ab2f6e92482462fe66246d9e32f642855a691dc1"},"score":8.6,"checks":[{"name":"Maintained","score":10,"reason":"30 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#maintained"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dependency-update-tool"}},{"name":"Security-Policy","score":9,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Warn: One or no descriptive hints of disclosure, vulnerability, and/or timelines in security policy","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#security-policy"}},{"name":"Code-Review","score":9,"reason":"Found 24/25 approved changesets -- score normalized to 9","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Warn: jobLevel 'packages' permission set to 'write': .github/workflows/cicd.yml:126","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/cicd.yml:145","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/cicd.yml:192","Info: jobLevel 'actions' permission set to 'read': .github/workflows/codacy.yml:33","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codacy.yml:31","Warn: jobLevel 'security-events' permission set to 'write': .github/workflows/codacy.yml:32","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/deploy-test-eks.yml:217","Warn: jobLevel 'checks' permission set to 'write': .github/workflows/deploy-test-eks.yml:397","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/mdbook-deploy.yml:17","Info: jobLevel 'contents' permission set to 'read': .github/workflows/scorecards.yml:29","Info: jobLevel 'actions' permission set to 'read': .github/workflows/scorecards.yml:30","Info: jobLevel 'issues' permission set to 'read': .github/workflows/scorecards.yml:32","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/scorecards.yml:33","Info: jobLevel 'checks' permission set to 'read': .github/workflows/scorecards.yml:35","Info: jobLevel 'pull-requests' permission set to 'read': .github/workflows/sonarcloud.yml:46","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/update-openapi.yml:24","Info: found token with 'none' permissions: .github/workflows/cicd.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/codacy.yml:26","Info: found token with 'none' permissions: .github/workflows/deploy-test-eks.yml:1","Info: found token with 'none' permissions: .github/workflows/docker-build.yml:1","Info: found token with 'none' permissions: .github/workflows/format.yml:1","Info: found token with 'none' permissions: .github/workflows/local-tests.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/mdbook-deploy.yml:11","Info: found token with 'none' permissions: .github/workflows/notify.yml:1","Info: topLevel permissions set to 'read-all': .github/workflows/scorecards.yml:18","Info: found token with 'none' permissions: .github/workflows/sonarcloud.yml:1","Info: found token with 'none' permissions: .github/workflows/unit.yml:1","Info: found token with 'none' permissions: .github/workflows/update-openapi.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/validate-pr.yml:8"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":2,"reason":"badge detected: InProgress","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#license"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#packaging"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#branch-protection"}},{"name":"Pinned-Dependencies","score":8,"reason":"dependency not pinned by hash detected -- score normalized to 8","details":["Warn: containerImage not pinned by hash: dockerfiles/agents/Dockerfile:4","Warn: containerImage not pinned by hash: dockerfiles/app/Dockerfile:1: pin your Docker image by updating python:3.12.11-slim to python:3.12.11-slim@sha256:d67a7b66b989ad6b6d6b10d428dcc5e0bfc3e5f88906e67d490c4d3daac57047","Warn: containerImage not pinned by hash: dockerfiles/tails/Dockerfile:1: pin your Docker image by updating python:3.12.10-slim to python:3.12.10-slim@sha256:fd95fa221297a88e1cf49c55ec1828edd7c5a428187e67b5d1805692d11588db","Warn: containerImage not pinned by hash: dockerfiles/tests/Dockerfile:1: pin your Docker image by updating python:3.12.11-slim to python:3.12.11-slim@sha256:d67a7b66b989ad6b6d6b10d428dcc5e0bfc3e5f88906e67d490c4d3daac57047","Warn: containerImage not pinned by hash: dockerfiles/trustregistry/Dockerfile:1: pin your Docker image by updating python:3.12.11-slim to python:3.12.11-slim@sha256:d67a7b66b989ad6b6d6b10d428dcc5e0bfc3e5f88906e67d490c4d3daac57047","Warn: containerImage not pinned by hash: dockerfiles/waypoint/Dockerfile:1: pin your Docker image by updating python:3.12.11-slim to python:3.12.11-slim@sha256:d67a7b66b989ad6b6d6b10d428dcc5e0bfc3e5f88906e67d490c4d3daac57047","Warn: downloadThenRun not pinned by hash: .github/workflows/local-tests.yml:125","Info:  30 out of  30 GitHub-owned GitHubAction dependencies pinned","Info:  28 out of  28 third-party GitHubAction dependencies pinned","Info:   2 out of   8 containerImage dependencies pinned","Info:   6 out of   6 pipCommand dependencies pinned","Info:   1 out of   1 goCommand dependencies pinned","Info:   0 out of   1 downloadThenRun dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#pinned-dependencies"}},{"name":"Vulnerabilities","score":8,"reason":"2 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-wj6h-64fc-37mp","Warn: Project is vulnerable to: GHSA-2c2j-9gv5-cj73"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#vulnerabilities"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#signed-releases"}},{"name":"SAST","score":8,"reason":"SAST tool is not run on all commits -- score normalized to 8","details":["Warn: 24 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#sast"}},{"name":"CI-Tests","score":10,"reason":"30 out of 30 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#ci-tests"}},{"name":"Contributors","score":10,"reason":"project has 13 contributing companies or organizations","details":["Info: found contributions from: @openmined @ieee-nitk @didx-xyz, OdysseyMomentum, OpenMined, animo, didx-xyz, dutch-trust-network, freelancer, hyperledger, jwplayer, odysseyhack, openid, stitch-money, ula-aca"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#contributors"}}]},"last_synced_at":"2025-08-15T12:21:42.313Z","repository_id":38097060,"created_at":"2025-08-15T12:21:42.314Z","updated_at":"2025-08-15T12:21:42.314Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29987656,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-01T22:42:38.399Z","status":"ssl_error","status_checked_at":"2026-03-01T22:41:51.863Z","response_time":124,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aca-py","decentralised-identity","ssi","trust-over-ip","verifiable-credentials"],"created_at":"2026-03-01T23:03:04.636Z","updated_at":"2026-03-01T23:03:05.428Z","avatar_url":"https://github.com/didx-xyz.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# acapy-cloud\n\n![Python](https://img.shields.io/badge/python-3.12-blue.svg)\n[![Toolset: Mise](https://img.shields.io/badge/toolset-Mise-orange.svg?style=flat)](https://mise.jdx.dev/)\n[![Dev Experience: Tilt](https://img.shields.io/badge/devex-Tilt-blue.svg?style=flat)](https://tilt.dev)\n[![Codacy Badge](https://app.codacy.com/project/badge/Grade/ceca5ac566f74a3a8bfb3095074117ad)](https://app.codacy.com/gh/didx-xyz/acapy-cloud/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_grade)\n[![Codacy Badge](https://app.codacy.com/project/badge/Coverage/ceca5ac566f74a3a8bfb3095074117ad)](https://app.codacy.com/gh/didx-xyz/acapy-cloud/dashboard?utm_source=gh\u0026utm_medium=referral\u0026utm_content=\u0026utm_campaign=Badge_coverage)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/didx-xyz/acapy-cloud/badge)](https://scorecard.dev/viewer/?uri=github.com/didx-xyz/acapy-cloud)\n\n🚧 This project is currently under development. If you would like to use this in\nproduction, please [contact us](mailto:info@didx.co.za) first to discuss your use case.\n\n✅ You should be able to deploy this project in a local environment using the\n[Quick Start Guide](./docs/src/Quick%20Start%20Guide.md)\n\n## Overview\n\nThis project comprises a [FastAPI](https://fastapi.tiangolo.com/) application built\naround [ACA-Py](https://github.com/openwallet-foundation/acapy),\nprimarily tailored for [Yoma](https://yoma.world)-specific use cases.\n\nThe main [app](app) provides an API interface\nthat simplifies complex self-sovereign identity (SSI) workflows. Using our\n[ACA-Py controller](https://github.com/didx-xyz/aries-cloudcontroller-python), it\nprovides a streamlined layer of abstraction for client applications (e.g., a\nmobile app) to interact within an SSI ecosystem.\n\nWhat would normally require multiple calls to ACA-Py can be condensed into a single call\nthrough this API. For example, onboarding an issuer — which involves creating a wallet,\nestablishing a connection with an endorser, generating a public DID, accepting the\nTransaction Author Agreement (TAA), publishing the DID to the ledger, and awaiting\nconfirmation — can all be achieved with a single API call. Convenient, isn't it?\n\nWe simplify several key capabilities, including:\n\n- Creating and managing wallets\n- Onboarding issuers and verifiers\n- Managing connections between parties\n- Creating schemas and credential definitions\n- Issuing verifiable credentials and handling revocations\n- Requesting and validating proofs\n\nTo enable this, the project includes essential supporting services:\n\n- A [Tails](tails) service for storing tails files on S3\n- A [Trust Registry](trustregistry) implementation for authorizing valid issuers, verifiers,\n  and approved credential schemas\n- A webhooks service ([Waypoint](waypoint)) for real-time, server-sent event\n  (SSE) notifications and updates\n\nFor detailed documentation, please refer to the [docs folder](docs/src/README.md). We recommend:\n\n- [Quick Start Guide](docs/src/Quick%20Start%20Guide.md) - Get up and running quickly\n- [Main Documentation](docs/src/README.md) - Detail on the different services, roles, authentication, and further reading\n- [Common Steps](docs/src/Common%20Steps.md) - Quick steps for creating tenants, issuing credentials, and requesting proofs\n- [Example Flows](docs/src/Example%20Flows.md) - More involved, step-by-step examples\n\n## How to Run It\n\n\u003e [!NOTE]\n\u003e For local development we now use Tilt and Kind instead of Docker Compose.\n\u003e Legacy Docker Compose files are still available, but deprecated and will be\n\u003e removed in the future.\n\nRunning the project is straightforward — it's all containerized. Simply execute\n`mise run tilt:up` from the project root. This command will spin up a Kind\ncluster, build all the necessary docker images, and start the project.\nYou can then visit [localhost:10350](http://localhost:10350) to access the Tilt\nUI.\n\nFor detailed setup instructions and requirements, see the [Quick Start Guide](docs/src/Quick%20Start%20Guide.md).\n\n## Running Tests\n\nThe tests use `pytest`. For convenience, use Mise to run them. First, ensure\nthe project is running locally by executing `mise run tilt:up`. In another shell,\nyou can now run `mise run tests` to run all tests or `mise run tests:unit` to run\nonly the unit tests.\n\n```bash\nmise run tilt:up\n```\n\nInstall the requirements:\n\n```bash\nmise run poetry:install\n```\n\nTo run the tests you need to set up some environment variables to point Pytest\nat the correct endpoints.\n\n```bash\ncp .env.example .env\nsource .env\n```\n\nThen you can run the tests:\n\n```bash\npoetry run pytest .\n```\n\nOr only the unit tests:\n\n```bash\npoetry run pytest --ignore=app/tests/e2e\n```\n\nYou can specify the log level of the pytest output by using the `--log-cli-level`\nflag.\n\n```bash\npoetry run pytest . --log-cli-level=DEBUG\n```\n\nThis will output all log messages with a log level of `DEBUG` or higher.\n\nTo run specific tests, you can specify the path to the test file and the test\nmethod. For example:\n\n```bash\npoetry run pytest \\\n  app/tests/e2e/test_verifier_oob.py::test_accept_proof_request_oob \\\n  --log-cli-level=1\n```\n\n## Running containerised tests\n\n```bash\nmise run tilt:up\n```\n\nIn another terminal:\n\n```bash\n# Run e2e tests\nhelm upgrade --install acapy-test \\\n  -f ./helm/acapy-test/conf/local/values.yaml \\\n  ./helm/acapy-test\n\n# Bootstrap regression tests\nhelm upgrade --install acapy-regression-test \\\n  -f ./helm/acapy-test/conf/local/values.yaml \\\n  -f ./helm/acapy-test/conf/local/regression.yaml \\\n  --set env.FAIL_ON_RECREATING_FIXTURES=false \\\n  ./helm/acapy-test\n\n# Run regression tests\nhelm upgrade --install acapy-regression-test \\\n  -f ./helm/acapy-test/conf/local/values.yaml \\\n  -f ./helm/acapy-test/conf/local/regression.yaml \\\n  --set env.FAIL_ON_RECREATING_FIXTURES=true \\\n  ./helm/acapy-test\n```\n\n## CI/CD\n\nPlease, refer to the [CI/CD docs](./.github/workflows/README.md) for more\ninformation.\n\n## Contributing\n\n[![Contributions](https://img.shields.io/badge/contributions-welcome-brightgreen.svg)](./CONTRIBUTING.md)\n\nWhile this project was primarily developed to meet the needs of\n[Yoma](https://yoma.world), it is an open-source project that can be used for\nother Hyperledger Aries projects as well. We welcome contributions from\neveryone. Feel free to engage in discussions, create pull requests against\nexisting tickets, or open new issues following the GitHub guidelines.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidx-xyz%2Facapy-cloud","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdidx-xyz%2Facapy-cloud","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdidx-xyz%2Facapy-cloud/lists"}