Welcome to ANKASecure
Crypto Agility Orchestration Platform — one Key ID, one API call, any algorithm.
ANKASecure© — Crypto Agility Orchestration Platform
Transforming cryptographic change from disruptive engineering projects into controlled, policy-driven operations.
How It Works
Most platforms force your application to specify a cryptographic algorithm directly. ANKASecure© inverts that model.
Your application references a kid (Key ID). The platform resolves the algorithm, key material version, hybrid configuration and policy constraints dynamically at runtime.
App references `kid`
→ Platform maps: kid → algorithm + material version + execution engine
→ Policy enforces: hybrid requirements, jurisdiction rules, lifecycle state
→ Result: cryptographic operation executed — algorithm invisible to caller
When your organization needs to migrate from AES-256 to a composite ML-KEM + AES hybrid, you update a policy — not your application code. The algorithmUsed field on every crypto response tells you what was actually selected, so audit and telemetry stay accurate.
The 5 APIs at a glance
The platform exposes five modular API groups, each documented in its own reference section on this portal:
| # | API | Endpoints | What it does | Who calls it |
|---|---|---|---|---|
| 1 | Auth | 10 | OAuth 2.0 token issuance (RFC 6749) + account lifecycle | Every client, once per session (10 h) |
| 2 | Core Cryptography | 29 | Encrypt / decrypt / sign / verify / re-encrypt — JSON and streaming | Application runtime |
| 3 | Admin | 322 | Tenants, keys, policies, licensing, integrations, exchanges | Admin dashboards, provisioning, orchestration |
| 4 | PQC Handshake | 2 | Post-Quantum key exchange initialization | PQC-aware clients |
| 5 | Audit | 59 | Immutable event log — tenant and platform level | Compliance and SIEM integrations |
Total surface: 422 endpoints, all sharing a single Bearer JWT.
Authentication
All API calls require a Bearer JWT in the Authorization header. Tokens are issued by the Auth API following OAuth 2.0 (RFC 6749) — the token endpoint accepts application/x-www-form-urlencoded bodies (not JSON) with these grant types:
client_credentials— for workloads / apps (server-to-server)password— for human admins logging inrefresh_token— for renewing an existing sessionurn:ietf:params:oauth:grant-type:token-exchange(RFC 8693) — for delegation / impersonation
Get a token — workload example
curl -s -X POST https://staging.ankatech.co/api/v3/auth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "client_id=550e8400-e29b-41d4-a716-446655440000" \
--data-urlencode "client_secret=••••••••••••••••••••••••••••••••"Response:
{
"access_token": "eyJ...",
"token_type": "Bearer",
"expires_in": 36000
}Use the token on every request
Authorization: Bearer eyJ...
Two audiences, two roles for your token — pick the right grant for each concern:
| Grant | Token audience | Endpoints authorised |
|---|---|---|
password (HUMAN) | ankasecure-admin | /api/v3/admin/* — provision, rotate, revoke |
client_credentials (APP) | ankasecure-core | /api/v3/crypto/*, /pqc/*, /audit/* — runtime |
A password token cannot call the crypto endpoints, and a client_credentials token cannot call the admin endpoints — the platform separates the provisioning plane from the runtime plane. Real integrations typically hold both: an admin identity that provisions keys, and one or more application identities that encrypt / decrypt with them.
Tokens are scoped to a tenant and carry a role's permissions. They are not transferable across environments or tenants.
Trying an endpoint from this portal? Click Try It on any operation, paste the
access_tokenvalue in the auth prompt (ReadMe adds theBearerprefix automatically), and the server default is already set tostaging.ankatech.co.
Deep dive on grants, refresh, revocation, introspection, and error semantics: Authentication.
Permissions model
Permissions are role-based, not scope-parameter based. The token inherits whatever the identity's role grants — you cannot ask for extra permissions at token time.
There are 82 distinct permission strings in the current role catalogue. A few common ones:
| Permission | Grants |
|---|---|
admin.keys.read | List keys, read metadata (no cryptographic material) |
admin.keys.rotate | Advance a key to a new material version |
admin.keys.revoke | Revoke a key (blocks all future ops) |
admin.keys.suspend | Temporarily suspend a key |
admin.keys.archive | Move a revoked key to archived state |
admin.policy.effective.read | Read the effective policy resolved for a tenant |
admin.humanuser | Full CRUD on human users of a tenant |
admin.platform.* | Platform-wide operations (multi-tenant) |
Runtime cryptographic operations (/api/v3/crypto/encrypt, /decrypt, /sign, /verify) are granted by roles specific to your deployment — ask your admin for the role name that applies.
The full catalogue is exposed via GET /api/v3/admin/platform/scopes.
Quick Start (60 seconds)
Prereqs: a client_id + client_secret (UUIDs), a provisioned kid, all from your admin.
1. Authenticate
TOKEN=$(curl -s -X POST https://staging.ankatech.co/api/v3/auth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
--data-urlencode "grant_type=client_credentials" \
--data-urlencode "client_id=<UUID>" \
--data-urlencode "client_secret=<secret>" \
| jq -r .access_token)2. Encrypt (payload in Base64)
DATA_B64=$(printf '%s' 'sensitive data' | base64 -w0)
curl -s -X POST https://staging.ankatech.co/api/v3/crypto/encrypt \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{ \"kid\": \"<your-kid>\", \"data\": \"$DATA_B64\" }" | tee /tmp/enc.jsonResponse has jweToken (object), keyRequested, materialVersion, algorithmUsed.
3. Decrypt (pass the whole jweToken back)
jweToken back)JWE=$(jq -c .jweToken /tmp/enc.json)
curl -s -X POST https://staging.ankatech.co/api/v3/crypto/decrypt \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{ \"jweToken\": $JWE }" | jqResponse has decryptedData (Base64 — decode to verify).
The algorithm is resolved by the tenant's cryptographic policy. Your application never hardcodes it. Full walk-through in Quickstart.
Key types and algorithms
At create-key time (admin operation), you specify a kty (key type) and an algorithm. The tenant policy validates the combination and decides which material version to activate.
Common kty values:
kty | Family | Typical algorithm values |
|---|---|---|
oct | Symmetric octet key | A256GCM, A128GCM, HS256 |
RSA | Classical asymmetric | RSA-OAEP-512, PS256, RS512 |
EC | Classical elliptic curve | ES256, ES384, ES512 |
OKP | Edwards curves | Ed25519, Ed448 |
ML-KEM | Post-Quantum KEM (FIPS 203, formerly Kyber) | ML-KEM-512, ML-KEM-768, ML-KEM-1024 |
ML-DSA | Post-Quantum Signatures (FIPS 204, formerly Dilithium) | ML-DSA-44, ML-DSA-65, ML-DSA-87 |
FALCON | Post-Quantum Signatures (Falcon) | Falcon-512, Falcon-1024 |
SLH-DSA | Post-Quantum Signatures (SPHINCS+, FIPS 205) | SLH-DSA-SHA2-* |
COMPOSITE_KEM_COMBINE | Hybrid KEM (classical + PQC) — for encryption | X25519+ML-KEM-768 |
COMPOSITE_SIGNATURE | Hybrid Signature (classical + PQC) — for signing | Ed25519+ML-DSA-65 |
purpose at create-key time is one of ENCRYPT_DECRYPT or SIGN_VERIFY — optional if the algorithm's keyOps disambiguates it, required otherwise.
Discover the full algorithm catalogue via GET /api/v3/algorithms — the endpoint returns every valid kty + algorithm combination the platform supports today.
Multi-Tenant Isolation
Every API call is automatically scoped to the tenant embedded in the JWT.
- Runtime endpoints (
/api/v3/crypto/*) take notenantId— it is derived from the token. - Admin endpoints (
/api/v3/admin/tenants/{tenantId}/…) take the targettenantIdin the URL path; the platform enforces that your admin token has permission for that specific tenant. - A client from Tenant A cannot read, use, or discover keys from Tenant B.
- Keys, policies, and audit logs are fully isolated per tenant.
- This isolation is architectural — it cannot be bypassed through any API parameter.
Audit Trail
Every state-changing operation — key create / rotate / revoke, policy change, encrypt / decrypt at the caller's option — emits an immutable audit event. The Audit API exposes 59 endpoints across 7 tags:
- Tenant Audit — queries for your tenant's audit trail
- Tenant Audit — Cryptographic Control Plane — key-lifecycle events specifically
- Meta-Audit — who queried the audit logs (audit of audit)
- Correlation Audit — trace a single transaction across tenants and services
- Audit Vocabulary — enumerate valid filter values
- Audit Integrity — verify the per-tenant hash chain (at-rest tamper detection)
- Platform Audit — cross-tenant analytics (platform admins only)
Post-Quantum Cryptography (PQC)
ANKASecure ships NIST-standardised PQC algorithms as first-class citizens:
- KEM:
ML-KEM-512 / 768 / 1024(FIPS 203, formerly Kyber) - Signatures:
ML-DSA-44 / 65 / 87(FIPS 204, formerly Dilithium),Falcon,SLH-DSA(FIPS 205) - Composite Hybrid: classical + PQC combined in a single JWE / JWS for zero-risk migration —
COMPOSITE_KEM_COMBINE(encryption) andCOMPOSITE_SIGNATURE(signing) with pairs likeX25519+ML-KEM-768orEd25519+ML-DSA-65.
Two dedicated endpoints support PQC handshake negotiation for clients that need dynamic algorithm discovery — see PQC Handshake on the API Reference.
Error Responses
Non-auth endpoints follow RFC 7807 — Content-Type: application/problem+json:
{
"type": "https://api.ankatech.co/problems/key-not-found",
"title": "Key Not Found",
"status": 404,
"detail": "Key 'my-key' does not exist for this tenant.",
"instance": "/api/v3/crypto/encrypt"
}Auth endpoints follow the OAuth 2.0 error format ({ "error": "invalid_grant", "error_description": "..." }) — see Authentication → Common errors.
Common HTTP codes:
| Status | Meaning |
|---|---|
400 | Invalid request — field validation, wrong Content-Type on /auth/token |
401 | Missing, expired, or invalid Bearer JWT |
403 | The role lacks the required permission for this operation |
404 | Key or resource not found in this tenant |
409 | Conflict — e.g., kid already exists |
412 | Key lifecycle state prevents this operation (revoked / suspended / archived) |
429 | Rate limit — Retry-After header included |
Environments
| Environment | Base URL | Notes |
|---|---|---|
| Staging | https://staging.ankatech.co | Public demo, safe to test |
| Production | Contact your account manager | Per-tenant dedicated deploy |
| On-prem | Your infrastructure | Deploy from AWS Marketplace AMI or Helm chart |
Tokens issued in one environment are not valid in another. client_id / client_secret are environment-specific.
The Try It panel on every reference page defaults to staging.ankatech.co — you can switch to a Custom server for on-prem.
Full details: Environments & Credentials.
SDK & CLI
Java SDK (Maven Central — publish in progress)
<dependency>
<groupId>co.ankatech</groupId>
<artifactId>ankasecure-sdk-core</artifactId>
<version>3.0.0</version>
</dependency>Publishing to Maven Central under co.ankatech is in progress — until it lands, binaries are available on request.
CLI
An ankasecure CLI wraps the same endpoints for scripting — auth, crypto ops, key admin, streaming re-encryption. Consult your admin for the current binary and documentation.
What to Read Next
| Goal | Section |
|---|---|
| First encrypt in 5 minutes | Quickstart |
| Bearer, permissions, revocation | Authentication |
| Staging vs Production | Environments & Credentials |
| Full request/response schemas per endpoint | API Reference → Auth / Core / Admin / PQC / Audit |
| Get a Bearer token | POST /api/v3/auth/token |
| Encrypt / decrypt a payload | /crypto/encrypt · /crypto/decrypt |
| Sign / verify a payload | /crypto/sign · /crypto/verify |
Discover valid kty + algorithm | /algorithms |
| Create a key (admin) | /admin/tenants/{id}/keys |
| Streaming re-encryption for large files | /crypto/reencrypt/stream |
| Step-by-step recipes | Recipes (work in progress — rebuild landing 2026-09) |
ANKASecure© | Crypto Agility Orchestration Platform | ANKATech Solutions INC
Updated 10 days ago