Event Catalog
The Business Wallet emits a small, deliberately focused set of domain events to integration channels. Every event:
- Is wrapped in a CloudEvents 1.0 envelope.
- Has a
typeending in.v<major>— backwards-compatible additions reuse the same major version, breaking changes mint a new one. - Has a public JSON Schema at
${WALLET_BASE_URL}/api/public/schemas/integration/<slug>/v1.json(no authentication required) which is also pinned in the envelope'sdataschemaattribute.
Catalog at a glance
| Event type | Trigger | subject pattern |
|---|---|---|
com.credenco.businesswallet.wallet.created.v1 | A Business Wallet is created. | wallets/{walletExternalKey} |
com.credenco.businesswallet.identifier.created.v1 | A wallet identifier (DID, X509, or JWK) is created. | wallets/{walletExternalKey}/identifiers/{identifierExternalKey} |
All event types follow the naming convention com.credenco.businesswallet.<aggregate>.<verb>.v<major>. The trailing .v<major> segment is the major version. Backward-compatible additions (new optional fields) ship as the same .v1 type; breaking changes ship as a new type (.v2) so existing consumers keep working.
JSON Schemas are served at ${WALLET_BASE_URL}/api/public/schemas/integration/<slug>/v1.json (no authentication required) and are pinned per-event via the dataschema envelope attribute.
com.credenco.businesswallet.wallet.created.v1
Trigger. Fired exactly once when a Business Wallet is created — either via the UI, the public API, or onboarding. The event is published atomically with the wallet itself, so consumers will never observe a wallet that the wallet itself does not yet know about.
Subject. wallets/{walletExternalKey}
Data fields.
| Field | Type | Description |
|---|---|---|
walletExternalKey | string (UUID) | Stable external identifier of the wallet. Match this against your own records. |
displayName | string | Human-readable name shown in the wallet UI. |
email | string | null | Primary contact email, if provided during creation. |
website | string | null | Primary website URL, if provided. |
phoneNumber | string | null | Primary phone number, if provided. |
address | object | null | Postal address with street, postalCode, city, country. Any inner field may be null. |
createdAt | string (RFC 3339) | UTC timestamp of wallet creation. |
createdBy | string | Subject (sub) of the principal that created the wallet — a human user ID or an OAuth2 client ID. |
Sample envelope (binary CloudEvents over HTTP).
POST /webhooks/credenco HTTP/1.1
Host: receiver.example.com
Content-Type: application/json
ce-specversion: 1.0
ce-type: com.credenco.businesswallet.wallet.created.v1
ce-source: /credenco/wallets
ce-id: 9c7d6b1f-1d17-4c2c-8a5d-2e0f6b1a4f10
ce-time: 2026-05-01T09:42:17.812Z
ce-subject: wallets/3f2504e0-4f89-41d3-9a0c-0305e82c3301
ce-dataschema: https://wallet.acc.credenco.com/api/public/schemas/integration/wallet-created/v1.json
ce-datacontenttype: application/json
ce-walletexternalkey: 3f2504e0-4f89-41d3-9a0c-0305e82c3301
ce-correlationid: 5b1e2dca-6c3a-4b9b-9f0d-7c12da3a1b88
X-Credenco-Signature: t=1746094937,v1=2c1f8e30…
{
"walletExternalKey": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"displayName": "Acme Healthcare B.V.",
"email": "ops@acme-healthcare.example",
"website": "https://acme-healthcare.example",
"phoneNumber": "+31 20 555 0100",
"address": {
"street": "Tolnasingel 3",
"postalCode": "2411 PV",
"city": "Bodegraven",
"country": "NL"
},
"createdAt": "2026-05-01T09:42:17.812Z",
"createdBy": "auth0|admin@acme-healthcare.example"
}
JSON Schema. https://wallet.acc.credenco.com/api/public/schemas/integration/wallet-created/v1.json
com.credenco.businesswallet.identifier.created.v1
Trigger. Fired exactly once when a wallet identifier (DID, X509 certificate, or JWK) is created. Like wallet.created.v1, the event is published atomically with the underlying change so it is never lost.
Subject. wallets/{walletExternalKey}/identifiers/{identifierExternalKey}
Data fields.
| Field | Type | Description |
|---|---|---|
walletExternalKey | string (UUID) | External identifier of the owning wallet. |
identifierExternalKey | string (UUID) | Stable external identifier of the identifier itself. |
identifierType | enum | One of DID, X509, JWK. |
identifier | string | The actual identifier value — a DID URI, an X509 subject, or a JWK thumbprint. |
displayName | string | Human-readable label set by the operator. |
didType | string | null | Populated only when identifierType = DID (e.g. did:web, did:key, did:ebsi). null for X509 and JWK. |
didEnvironment | string | null | Populated only when identifierType = DID and the DID method has environments (e.g. pilot, production for did:ebsi). null otherwise. |
createdAt | string (RFC 3339) | UTC timestamp of identifier creation. |
createdBy | string | Subject of the principal that created the identifier. |
Sample envelope (binary CloudEvents over HTTP).
POST /webhooks/credenco HTTP/1.1
Host: receiver.example.com
Content-Type: application/json
ce-specversion: 1.0
ce-type: com.credenco.businesswallet.identifier.created.v1
ce-source: /credenco/wallets
ce-id: 7e2b1a86-9c1e-4d2e-b6a4-1f8db4a90f22
ce-time: 2026-05-01T09:43:02.401Z
ce-subject: wallets/3f2504e0-4f89-41d3-9a0c-0305e82c3301/identifiers/c4a4e34b-1d6d-4b9a-9e6f-3a7d6f8b1e02
ce-dataschema: https://wallet.acc.credenco.com/api/public/schemas/integration/identifier-created/v1.json
ce-datacontenttype: application/json
ce-walletexternalkey: 3f2504e0-4f89-41d3-9a0c-0305e82c3301
ce-correlationid: 5b1e2dca-6c3a-4b9b-9f0d-7c12da3a1b88
X-Credenco-Signature: t=1746094982,v1=8d4a91c2…
{
"walletExternalKey": "3f2504e0-4f89-41d3-9a0c-0305e82c3301",
"identifierExternalKey": "c4a4e34b-1d6d-4b9a-9e6f-3a7d6f8b1e02",
"identifierType": "DID",
"identifier": "did:web:acme-healthcare.example",
"displayName": "Primary issuer DID",
"didType": "did:web",
"didEnvironment": null,
"createdAt": "2026-05-01T09:43:02.401Z",
"createdBy": "auth0|admin@acme-healthcare.example"
}
JSON Schema. https://wallet.acc.credenco.com/api/public/schemas/integration/identifier-created/v1.json
Versioning
The trailing .v1 segment in every event type is the major version. We follow these rules:
- Adding a new optional field to the
datapayload is backward compatible and ships as the samev1type. Build your receivers so that unknown fields are ignored. - Removing a field, renaming a field, or changing a field's type is breaking and ships as a new major version (
v2). The oldv1type is kept emitting in parallel for at least one major release cycle so you have time to migrate. - New event types are added freely; existing receivers are never auto-subscribed to them.
Pin the schema you tested against in your receiver code by storing the dataschema attribute alongside any persisted event.