Point your mediator URL here — one line.
Any DIDComm v2 agent can mediate through the relay — CoordinateMediation 2.0, Pickup Protocol 3.0, and forward routing, all standards-track. The management API below is read/manage; docs are free, no login required to read.
Point the mediator URL at the relay.
There is no separate SDK to install for the base flow — set your agent's mediator URL and run mediate-request. The relay grants mediation, hands back a keylist, and starts forwarding.
1# any DIDComm v2 agent — point its mediator URL here:2MEDIATOR_URL=https://relay.solidus.network/didcomm
Testnet · pre-launch — framework adapters below are planned and ship with launch.
Works with the agents you already run.
Framework adapters are planned and ship with launch — they are not yet published to npm. The raw DIDComm v2 endpoint works today for any conformant agent.
1// @solidus/credo-relay-adapter — planned, ships with launch2import { Agent } from '@credo-ts/core'3import { MediationRecipientModule } from '@credo-ts/didcomm'45const agent = new Agent({6 modules: {7 mediationRecipient: new MediationRecipientModule({8 mediatorInvitationUrl: 'https://relay.solidus.network/invite',9 }),10 },11})
The management API.
Management API — read/manage; docs free, no login. Endpoints below cover mediations, keylists, queue status, and credential-gate policies, plus the on-chain resolution trace no other mediator publishes.
Mediations
/v1/mediationsList all mediations, filterable by state and credential-gate.
/v1/mediations/:idFetch a single mediation — state, gate result, keylist size, queue depth.
{"id": "med_a7f2c9","recipient_did": "did:solidus:z6MkjWn4qYdSx2vTbCpF7kMuGe5hZa9rLoDiB3yXf8EwVsQ6","state": "granted","gate": { "policy": "KYC-verified recipients", "state": "pass" },"keylist_size": 3,"queued": 812,"delivered_24h": 96,"granted_ago": "2d","protocols": ["coordinate-mediation/2.0","messagepickup/3.0"]}
/v1/mediations/:id/keylistThe recipient's routing keys and messages-routed count per key.
/v1/mediations/:id/grantOperator override — grant a pending mediation (on top of the auto gate decision).
/v1/mediations/:id/denyOperator override — deny a mediation with a reason.
/v1/mediations/:id/revokeTerminate a mediation and tear down its keylist.
/v1/mediations/:id/keylist/:keyRemove a single routing key from a mediation keylist.
Queue & messages
/v1/queue/statusQueue depth, oldest-queued age, and by-state counts.
/v1/messagesList queued/delivered envelopes (metadata only — never ciphertext), filter by state/protocol/recipient.
/v1/delivery-logOperator event feed — scoped by recipient or mediation. Metadata only.
Policies & gating
/v1/policiesList credential-gate policies — required VC type, issuer, disclosure, applies-to.
/v1/policiesCreate a credential-gate policy.
/v1/policies/:idEnable or disable a policy.
/v1/policies/testRun a credential against the gate — the SAME server-side check the live mediate-grant/delivery path uses.
/v1/policies/rate-limitSet the per-DID rate limit (per-minute + burst).
/v1/policies/retentionSet message retention (days + purge-on-ack).
Keys & webhooks
/v1/api-keysList operator API keys (never the raw value).
/v1/api-keysIssue an API key — the raw slk_ value is returned exactly once.
/v1/api-keys/:idRevoke an API key.
/v1/webhooksList webhook endpoints + last delivery status.
/v1/webhooksSubscribe a webhook endpoint to the 7 canonical events (HMAC-signed, SSRF-safe).
Routing resolution
/v1/resolutions/:diddid:solidus routing-key and endpoint resolution trace — on-chain vs. cached, block-cited. No other mediator exposes this.
{"did": "did:solidus:z6MkjWn4qYdSx2vTbCpF7kMuGe5hZa9rLoDiB3yXf8EwVsQ6","routing_key": "z6LSfj9q…QtU0S1","endpoint": "https://relay.solidus.network/didcomm","source": "on-chain","block": 4827391,"resolved_ago": "4m"}
/v1/resolutions/:did/re-resolveForce a fresh on-chain resolution, bypassing the cache.
Events you can subscribe to.
Configure a webhook endpoint and subscribe to any of these from the operator console once you have an API key.
| Event | When it fires |
|---|---|
mediation.granted | A mediate-request is granted and the recipient's keylist is created. |
mediation.denied | A mediate-request is denied — often a credential-gate block. |
message.queued | A forwarded envelope is held for a recipient who is offline. |
message.delivered | A queued message is picked up or delivered over a live connection. |
delivery.failed | A delivery attempt to a live connection fails and will retry. |
gate.blocked | A credential-gate policy rejects mediation or delivery. |
resolution.failed | An on-chain did:solidus resolution fails and the mediator falls back to a cached endpoint. |
Get an API key and point a mediator URL.
Free to start — 1 mediator DID, 1,000 messages a day, no sales call.