The standard envelope
Every resource includes these fields:Two flavors of identifier
Most BlooBank resources expose two identifiers, and choosing the right one for your use case matters.id
Server-assigned. Opaque (
wal_2NhVqRtYbHmRdZ4vG6qAeL). Immutable. Use as your database key.name
Caller-supplied during creation. Human-readable (
production-main). Use in URLs and human-facing flows.id or name in path parameters for most endpoints — e.g., GET /wallets/{wallet} works with both wal_… and production-main. Internally, the API resolves the name to the id before processing.
Naming rules
name follows RFC 1035 DNS label rules:
Versioning fields
Different resources expose different*Version fields — walVersion for wallets, ordVersion for payment orders. The pattern is the same:
- Starts at
1on creation. - Increments by
1on every mutation of the resource’s tracked content. - Useful when reasoning about historical snapshots from event streams.
*Version is for tracking content changes, not concurrency control. For optimistic concurrency, use etag with the If-Match header (when the feature lands).The selfName convention
selfName is the canonical relative name of the resource — the path you would use to reference it inside the API.
Examples:
Compare with the full URL:
selfName is what you would log or persist when you need a portable, base-URL-agnostic reference.
Timestamps
All timestamps are ISO 8601 in UTC with millisecond precision:Z is required. The API never returns timestamps in local time. See Date & time for client-side parsing notes.
etag — reserved
Every resource carries an etag — a hex-encoded SHA-256 fingerprint of the resource content. Today it is informational only. In a future release, it will support optimistic concurrency control via the If-Match request header:
etag will fail fast with a clear error rather than overwriting a concurrent modification.
Next
Amounts & currency
How money is represented across the API.
Date & time
UTC, ISO 8601, and request-signing clock skew.