Skip to content

Webhook ingest

Marketplace Addon for Stratum: write arbitrary JSON onto a network over the public ingest gateway. One key is scoped to one network. This is the internet-reachable path for SIEM, ERP, adapters, and custom apps — not the token wallet API.

Marketplace Addon

Webhook ingest is the first public Marketplace Addon documented here. More adapters will appear under Marketplace Addons as they ship. Maturity: Live — see Integration Surfaces.

Requires a dashboard-minted ingest key (cd_ingest_…) with X-Api-Key. Copy the exact webhook URL from Dashboard → API Keys. Machine-readable contract: API reference → Marketplace Addons → Webhook ingest.

Partners should call the ingest URL from the dashboard, not node hostnames.

Endpoint

POST /{networkId} HTTP/1.1
Host: ingest.blockskunk.com
Content-Type: application/json
X-Api-Key: cd_ingest_<your-key>
Idempotency-Key: <optional-unique-id>
  1. Open Dashboard → Developer → API Keys.
  2. Select the deployment (network) — the page shows your webhook URL.
  3. Generate a key (shown once). Prefer ingest:ping + ingest:write.

Use the exact host from your key card when it differs from ingest.blockskunk.com.

This gateway cannot call wallet issue / transfer / redeem — use the token gateway for those.

Ping

Verify connectivity without writing to the ledger:

curl -sS -X POST "https://ingest.blockskunk.com/<networkId>" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: $STRATUM_INGEST_KEY" \
  -d '{"type":"ping"}'
{ "transactionIds": [], "summary": { "total": 0, "succeeded": 0, "failed": 0 }, "ping": true }

Write JSON

The gateway normalizes the body into one or more ledger records:

# Single record — id / type / owner are optional
curl -sS -X POST "https://ingest.blockskunk.com/<networkId>" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: $STRATUM_INGEST_KEY" \
  -H "Idempotency-Key: order-8841" \
  -d '{"type":"order","owner":"wallet-a","data":{"sku":"SKU-1","qty":2}}'

# Batch
curl -sS -X POST "https://ingest.blockskunk.com/<networkId>" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: $STRATUM_INGEST_KEY" \
  -d '{"assets":[{"type":"order","data":{"sku":"A"}},{"type":"order","data":{"sku":"B"}}]}'

# Optional: route to a named shared space on that network
curl -sS -X POST "https://ingest.blockskunk.com/<networkId>" \
  -H "Content-Type: application/json" \
  -H "X-Api-Key: $STRATUM_INGEST_KEY" \
  -d '{"type":"order","data":{"sku":"A"},"targetChannels":["ops-space"]}'
FieldBehavior
idOptional; UUID generated if omitted
typeOptional record type for queries / allowlists (default unknown)
ownerOptional string
dataOptional object; if omitted, other top-level fields become data
targetChannelsOptional list of shared-space names on that network
Bare JSONWrapped as { "value": <your JSON> }

Typical success response:

{
  "transactionIds": ["tx_…"],
  "summary": { "total": 1, "succeeded": 1, "failed": 0 },
  "eventId": "…"
}

eventId deep-links to the deployment Sync Data tab so you can confirm the write landed without re-running curl.

Guardrails

GuardrailBehavior
Permissionsingest:ping (no write) / ingest:write (seal records). Legacy keys with no permissions array are allowed everything
Type allowlistIf the key has allowedAssetTypes, other type values return 403
PII strippingpassword, ssn, social_security_number, credit_card, credit_card_number, cvv stripped from data before ledger write
IdempotencySame Idempotency-Key + same body returns the cached response
Limits~1 MiB body, ~100 records per batch (defaults)
Rate limitsPer-network and per-key; 429 includes Retry-After
MethodPOST only — other methods return 405

Signed-in detail for key format, minting, and revocation: Developer API → Authentication.

Was this page clear?