Minting and Provenance
The provenance side of Seedling lives under a domain - a namespace like
kingdoms or supply_chain that you choose per URL. A series mints
supply-capped, serial-numbered artifacts, and every artifact carries an
append-only chain of lineage records where each record's hash covers
the previous one - tamper-evident custody without a blockchain.
Series
Creating a series requires a platform admin token; anyone can inspect one:
snug seedling series create --domain kingdoms --name "Sunforged Sword" \
--max-supply 500 --per-user-limit 1 --allowed-minters any_authenticated \
--serials sequential --genesis-generator gen_AyXCjwbTZspw@v1
snug seedling series get --domain kingdoms --series-id ser_FucFHewStmQP--allowed-mintersgates who may mint:admin_only(the default),any_authenticated, orservice(service identities and admins).--serialspickssequentialorrandomassignment; artifacts carryserialand a display form like"1 of 500".--opens-at/--closes-atbound the mint window; minting outside it fails with409 mint_window_closed(for a future-dated window).--genesis-generatorpins the series to a published generator version, turning mints into generated editions (below).
The series document tracks live counters: minted, retired, and
circulating (minted minus retired).
Minting
snug seedling mint --domain kingdoms --series-id ser_FucFHewStmQP \
--idempotency-key order-7841 --seed glacier-fox-9421The idempotency key is required and makes minting exactly-once: repeating
the call returns the original artifact with "replayed": true instead of
consuming supply. When supply runs out the mint fails with
409 supply_exhausted.
On a generator-pinned series a --seed is mandatory (omitting it is
400 invalid_params), and the genesis record embeds a citation -
captured live:
"citation": {
"generator_id": "gen_AyXCjwbTZspw",
"version": 1,
"seed": "glacier-fox-9421",
"params_hash": "sha256:44136fa355b3678a1146ad16f7e8649e...",
"content_hash": "sha256:b88c5e71e325e73b31ba5b7a8adc196b..."
}Minting for another principal (--for-id) requires a platform admin token
or a service-gated series; otherwise it fails with 403.
Custody records
Records come in five kinds. genesis is written only by mint/track -
appending one manually fails with 400 invalid_params. For the rest:
snug seedling records append --domain kingdoms --artifact-id art_vudpHjvMcrFD \
--kind transfer --to-id usr_bob --ref handshake:deal_1
snug seedling records append --domain kingdoms --artifact-id art_vudpHjvMcrFD \
--kind retirementtransfer,transformation, andretirementmay only be appended by the artifact's current owner, a service identity, or an admin - after a transfer, the previous owner's next attempt fails with 403 (verified with a second user token).attestationis open to any authenticated caller - third parties can vouch without holding custody.retirementseals the chain: any later append fails with409 artifact_retired, and the series'retired/circulatingcounters update.--ref service:idattaches an external reference (an escrow deal, an ERP record) to the record.
History and verification
snug seedling history --domain kingdoms --artifact-id art_vudpHjvMcrFD --verify chainThe response contains the artifact, its full record list, and - when
--verify is passed - chain_valid (chain mode re-hashes every link and
reports the first broken sequence) or additionally genesis_verified
(genesis mode re-runs the cited seed triple and compares content hashes).
Both returned true live against a four-record chain.
Ownership queries
snug seedling owned --domain kingdoms --principal usr_bob
snug seedling owned --domain kingdoms --principal usr_alice --everThe default lists current holdings; --ever includes everything the
principal ever held, so a transferred-away artifact still appears.
Derivation graph
A transformation record with --input links output to source, and
derived walks those edges (depth defaults to 3):
snug seedling records append --domain kingdoms --artifact-id art_dYRCAhZFbcHU \
--kind transformation --input art_vudpHjvMcrFD
snug seedling derived --domain kingdoms --artifact-id art_vudpHjvMcrFD --depth 3Note that --input on mint is recorded in the genesis record's inputs
but does not create graph edges - only transformation records feed the
derived traversal.
Tracking external objects
track places an object that lives in another system under custody without
minting from a series - it creates an artifact whose chain root is an
attestation-kind record carrying the external reference:
snug seedling track --domain supply_chain --service erp --external-id pallet_8841The artifact has no series or serial, but supports the full record,
history, and ownership machinery above. Tracking on behalf of another
principal (--owner-id) requires a platform admin token.
The exact request and response shapes for every endpoint are in the Seedling API reference.