Developers

Evidence your application
can reason about

A public, read-only interface for exact identity, retained evidence and explicit uncertainty. Preserve the scope of each result before using it in an integration decision.

01 / Overview

One interface. Explicit boundaries

GET requests return JSON. No account or wallet is required for these public records. API version: jujing-asset-infrastructure-api/1. These endpoints read retained evidence; they do not initiate arbitrary provider lookups or transactions.

Production base URL
https://jujingwhale.xyz/api/v1
Actual schema discovery response
GET /api/v1/schemas · complete response
{
  "limitation": "Retained-record integrity and scoped provenance only; no legal, eligibility, reserve, safety or investment conclusion.",
  "limits": {
    "maxResponseBytes": 2097152
  },
  "schemaVersion": "jujing-asset-infrastructure-api/1",
  "schemas": {
    "api": "jujing-asset-infrastructure-api/1",
    "evidenceIngestion": "jujing-offline-asset-ingestion/1",
    "exposureFeed": "jujing-offline-exposure-feed/1",
    "lifecycleCalendar": "jujing-offline-lifecycle-calendar/1",
    "receipt": "jujing-public-receipt/1",
    "registry": "jujing-tokenized-asset-registry/1"
  }
}

02 / Identifier model

Network-aware, exact identifiers

Solana is the currently supported verification network for public Passports and exact-mint lifecycle examples. Its identifiers are case-sensitive complete mints on mainnet-beta. The canonical directory also retains Base (eip155:8453) and Robinhood Chain (eip155:4663) representations; these are separate exact records, not a claim of live monitoring on those networks.

Use chain + network + exactIdentifier for a representation. The canonical underlying ID is a separate company/security reference. EVM identifiers accept a complete 0x-prefixed 40-hex-character address and are canonicalized to lowercase. Identifiers and routing are designed to support additional networks. Unknown networks fail explicitly.

Actual admitted Solana identifier
Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh

03 / Admission

Presence is a scoped statement

PRESENT means present in the existing reviewed canonical registry. Directory inclusion is not a legal, safety, reserve or investment approval. OURA’s ADMITTED_IDENTITY_ONLY Passport is separate; its overall evidence is INCOMPLETE. OURAx remains NOT_ADMITTED and cannot be looked up as an admitted representation.

04 / Endpoint reference

Public GET endpoints

Paths below are relative to /api/v1. Substitute an admitted exact identifier; never a ticker. A supported route does not mean its underlying fact has been established.

GET
/schemas

Schema and version discovery.

GET
/assets

Canonical underlying and admitted representation index.

GET
/assets/<exact-underlying-id>

Exact canonical underlying lookup, such as jujing:underlying:000001.

GET
/representations/<chain>/<exact-id>

One exact representation, with scoped fields and original qualifications.

GET
/representations/<chain>/<exact-id>/evidence

Retained public evidence metadata and original provenance.

GET
/representations/<chain>/<exact-id>/evidence/<sha256>

Evidence selected by an existing lowercase 64-character SHA-256 digest, without a 0x prefix.

GET
/representations/<chain>/<exact-id>/lifecycle

Representation-specific registry lifecycle; NOT_ESTABLISHED remains explicit.

GET
/representations/<chain>/<exact-id>/exposure

Scoped exposure projection; production observations are currently absent.

GET
/representations/<chain>/<exact-id>/receipts

Published receipt and verification URLs, or explicit NOT_ESTABLISHED.

GET
/lifecycle/solana/prestocks

Retained documented PreStocks lifecycle events.

GET
/lifecycle/solana/prestocks/Pre9atBqkocK1QngFy7Q7zvyQictEFpXdLi6bZ2qnYy

Exact OURA identity-only lifecycle projection.

GET
/lifecycle/candidates/ourax

Separate public NOT_ADMITTED candidate; never an admitted representation.

GET
/reports/xstocks

Historical xStocks report index and integrity receipt inventory; not the admitted registry.

GET
/reports/xstocks/NVDAx

Exact NVDAx historical report; publisher and Solana observations remain separate.

GET
/reports/xstocks/FLWSx

Exact FLWSx historical report; missing reserve and independent oracle availability stay unresolved.

The xStocks reports use jujing-xstocks-public-report/1 and a fixed historical assessment. Only canonical NVDAx and FLWSx report identifiers are supported. Queries, encoded identifiers and chain substitution fail closed. Original report and receipt bundles are embedded unchanged; report receipts cover the reviewed record, not the API wrapper. See the report methodology or contact@jujingwhale.xyz.

Corporate Action Guard / live read-only endpoints

Changes bound to the exact token

The paths below are complete paths, not relative to the endpoint reference. Both expose the historical working demonstration. They do not acquire current evidence or deliver webhooks.

GET

/api/v1/guard/events

List the single retained historical Guard event.

Status
Historical demonstration; historical: true, liveMonitoring: false.
Serialization / caching
Deterministic canonical sorted-key JSON with a trailing LF; application/json; charset=utf-8; Cache-Control: no-store.
Versions
Response: jujing-guard-api/1. Event: jujing-guard-event/1. Receipt: jujing-guard-receipt/1.
Exact representation
solana / mainnet-beta · Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh. Product-level publisher claims and retained mint observations remain separately attributed.
Receipt scope
SHA-256 of UTF-8 canonical sorted-key JSON plus LF, excluding the receipt field. Deterministic integrity reference only; not admission, signature or authenticity proof. The excerpt below omits fields; use the complete event to reproduce the digest.
Delivery / unresolved facts
PREVIEW_ONLY; no webhook was delivered. Announcement, record and payment timestamps remain NOT_ESTABLISHED. Suggested actions are operational guidance, not proof of external execution. Admission remains NOT_ADMITTED.
Actual list response · selected fields
Historical response excerpt · not the full digest input
{
  "schemaVersion": "jujing-guard-api/1",
  "historical": true,
  "liveMonitoring": false,
  "events": [
    {
      "schemaVersion": "jujing-guard-event/1",
      "eventId": "guard-xstocks-solana-nvdax-41ed2bba-fff2-4296-8f98-9ed2224d2f9e-v2",
      "eventType": "DIVIDEND_MULTIPLIER_CHANGE",
      "historical": true,
      "representation": {
        "binding": "EXACT_PUBLISHER_DEPLOYMENT_AND_RETAINED_MINT_OBSERVATION",
        "chain": "solana",
        "mint": "Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh",
        "network": "mainnet-beta",
        "publisherCorporateActionDeploymentScope": "NOT_ESTABLISHED",
        "tokenProgram": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
      },
      "timestamps": {
        "effective": {
          "meaning": "Publisher corporate-action effective time",
          "precision": "MILLISECOND_ENCODING; EFFECTIVE_PRECISION_NOT_ESTABLISHED",
          "sourceDigest": "c30905024f6d7ef3de7c25e7f79d078fe383286642ec0b2ffa43b78188d4f919",
          "state": "PUBLISHER_CLAIM",
          "value": "2026-09-10T00:30:00.000Z"
        },
        "announcement": {
          "reason": "RECORD_CREATION_IS_NOT_ANNOUNCEMENT",
          "state": "NOT_ESTABLISHED",
          "value": null
        },
        "record": {
          "reason": "RECORD_DATE_NOT_SUPPLIED",
          "state": "NOT_ESTABLISHED",
          "value": null
        },
        "payment": {
          "reason": "PAYMENT_TIMESTAMP_AND_PAYMENT_NOT_ESTABLISHED",
          "state": "NOT_ESTABLISHED",
          "value": null
        }
      },
      "webhookDelivery": "PREVIEW_ONLY",
      "receipt": {
        "captureDigest": "10606d2dc05c34b49776d58b0f941fa8d02f23e24f37465e1005debfd7b1f04c",
        "digestScope": "SHA-256 of UTF-8 canonical sorted-key JSON plus LF, excluding the receipt field.",
        "eventDigest": "6e2bb03d96725c8704ac323ab8c6cba810f841f7e983cebd162eccd73c71ae09",
        "journalHead": "120a81d6390f57f96fb58b4900947d5adb93e87d4049c95144d3d791c63ff740",
        "meaning": "Deterministic integrity reference only; not admission, signature or authenticity proof.",
        "reference": "sha256:6e2bb03d96725c8704ac323ab8c6cba810f841f7e983cebd162eccd73c71ae09",
        "reviewedReportDigest": "f1acbb8722728ae0eef811682b2a4ac985ec84820ef84d3ed66a722033567c00",
        "schemaVersion": "jujing-guard-receipt/1"
      }
    }
  ]
}

GET

/api/v1/guard/events/guard-xstocks-solana-nvdax-41ed2bba-fff2-4296-8f98-9ed2224d2f9e-v2

Retrieve the exact historical event and deterministic receipt.

Status
Historical demonstration; historical: true, liveMonitoring: false.
Serialization / caching
Deterministic canonical sorted-key JSON with a trailing LF; application/json; charset=utf-8; Cache-Control: no-store.
Versions
Response: jujing-guard-api/1. Event: jujing-guard-event/1. Receipt: jujing-guard-receipt/1.
Exact representation
solana / mainnet-beta · Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh. Product-level publisher claims and retained mint observations remain separately attributed.
Receipt scope
SHA-256 of UTF-8 canonical sorted-key JSON plus LF, excluding the receipt field. Deterministic integrity reference only; not admission, signature or authenticity proof. The excerpt below omits fields; use the complete event to reproduce the digest.
Delivery / unresolved facts
PREVIEW_ONLY; no webhook was delivered. Announcement, record and payment timestamps remain NOT_ESTABLISHED. Suggested actions are operational guidance, not proof of external execution. Admission remains NOT_ADMITTED.
Actual detail response · selected fields
Historical response excerpt · not the full digest input
{
  "schemaVersion": "jujing-guard-api/1",
  "historical": true,
  "liveMonitoring": false,
  "event": {
    "schemaVersion": "jujing-guard-event/1",
    "eventId": "guard-xstocks-solana-nvdax-41ed2bba-fff2-4296-8f98-9ed2224d2f9e-v2",
    "eventType": "DIVIDEND_MULTIPLIER_CHANGE",
    "historical": true,
    "representation": {
      "binding": "EXACT_PUBLISHER_DEPLOYMENT_AND_RETAINED_MINT_OBSERVATION",
      "chain": "solana",
      "mint": "Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh",
      "network": "mainnet-beta",
      "publisherCorporateActionDeploymentScope": "NOT_ESTABLISHED",
      "tokenProgram": "TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb"
    },
    "timestamps": {
      "effective": {
        "meaning": "Publisher corporate-action effective time",
        "precision": "MILLISECOND_ENCODING; EFFECTIVE_PRECISION_NOT_ESTABLISHED",
        "sourceDigest": "c30905024f6d7ef3de7c25e7f79d078fe383286642ec0b2ffa43b78188d4f919",
        "state": "PUBLISHER_CLAIM",
        "value": "2026-09-10T00:30:00.000Z"
      },
      "announcement": {
        "reason": "RECORD_CREATION_IS_NOT_ANNOUNCEMENT",
        "state": "NOT_ESTABLISHED",
        "value": null
      },
      "record": {
        "reason": "RECORD_DATE_NOT_SUPPLIED",
        "state": "NOT_ESTABLISHED",
        "value": null
      },
      "payment": {
        "reason": "PAYMENT_TIMESTAMP_AND_PAYMENT_NOT_ESTABLISHED",
        "state": "NOT_ESTABLISHED",
        "value": null
      }
    },
    "webhookDelivery": "PREVIEW_ONLY",
    "receipt": {
      "captureDigest": "10606d2dc05c34b49776d58b0f941fa8d02f23e24f37465e1005debfd7b1f04c",
      "digestScope": "SHA-256 of UTF-8 canonical sorted-key JSON plus LF, excluding the receipt field.",
      "eventDigest": "6e2bb03d96725c8704ac323ab8c6cba810f841f7e983cebd162eccd73c71ae09",
      "journalHead": "120a81d6390f57f96fb58b4900947d5adb93e87d4049c95144d3d791c63ff740",
      "meaning": "Deterministic integrity reference only; not admission, signature or authenticity proof.",
      "reference": "sha256:6e2bb03d96725c8704ac323ab8c6cba810f841f7e983cebd162eccd73c71ae09",
      "reviewedReportDigest": "f1acbb8722728ae0eef811682b2a4ac985ec84820ef84d3ed66a722033567c00",
      "schemaVersion": "jujing-guard-receipt/1"
    }
  }
}

05 / Result and evidence semantics

Do not collapse distinct states

Every transport response has schemaVersion. Successful records also identify their model version. Read each field’s state, scope, provenance, source references and qualifications; one established field does not establish the whole instrument.

Evidence versions reuse the existing retained SHA-256 digest. A digest identifies content; it does not certify that content’s claims. NOT_ESTABLISHED, UNKNOWN_REPRESENTATION, INCOMPLETE and STALE describe different boundaries. Exposure IDENTITY_MISMATCH returns a fail-closed 503.

Actual production exposure response · no invented zero
Exact representation /exposure · complete response
{
  "exposure": {
    "agreements": [],
    "attempts": [],
    "authorityChanges": [],
    "availabilityByStream": [],
    "boundaryDisagreements": [],
    "conclusion": {
      "activeBoundaryDisagreementIds": [],
      "activeConflictIds": [],
      "authorityChangeIds": [],
      "availability": "NOT_ATTEMPTED",
      "conclusionId": "7768f8ee89271c742157fcb30fc1fc9dc7a075a242ac2519480ca716c3c641a4",
      "contributingAttemptIds": [],
      "contributingObservationIds": [],
      "coverage": "NOT_ESTABLISHED",
      "evaluatedAt": null,
      "freshness": "NOT_EVALUATED",
      "journalHead": null,
      "kind": "EXPOSURE_CONCLUSION",
      "limitation": "No cross-unit aggregation, net exposure, USD conversion, provider authority, or missing-to-zero inference.",
      "maxAgeMs": null,
      "observationType": null,
      "representationId": "jujing:representation:solana:Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh",
      "rulesVersion": "jujing-exposure-rules/1",
      "schemaVersion": "jujing-offline-exposure-feed/1",
      "status": "NOT_ESTABLISHED",
      "subject": null,
      "validation": "VALID"
    },
    "conflicts": [],
    "freshnessByObservation": {},
    "journalHead": null,
    "latestValidObservations": [],
    "observations": [],
    "representationId": "jujing:representation:solana:Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh",
    "schemaVersion": "jujing-offline-exposure-feed/1"
  },
  "limitation": "Retained-record integrity and scoped provenance only; no legal, eligibility, reserve, safety or investment conclusion.",
  "modelSchemaVersion": "jujing-offline-exposure-feed/1",
  "schemaVersion": "jujing-asset-infrastructure-api/1"
}

06 / Freshness

Matching is not current

Keep publisher time, observation time, retrieval time and timestamp meaning separate. A source may not publish an as-of time. A day-precision announcement does not supply a timezone or precise ordering.

The exposure endpoint accepts paired evaluatedAt (exact UTC ISO format with milliseconds) and maxAgeMs (a nonnegative safe integer). Supplying just one fails. The exposure API is live and returns time-bound observations where reliable evidence is available. Production currently has no admitted exposure observations: status NOT_ESTABLISHED, availability NOT_ATTEMPTED, freshness NOT_EVALUATED. Query parameters cannot manufacture an observation.

07 / Receipt verification

Integrity has a narrow meaning

Use a representation’s /receipts response to obtain its receiptUrl and verificationUrl. The public verifier accepts a bounded JSON POST at /api/verification/receipts/verify. It distinguishes matching retained content from tampered content. Matching and freshness are separate: results can include KNOWN_MATCH, TAMPERED and STALE_EVIDENCE.

Receipt integrity does not prove underlying reserves, legal rights, authorship, eligibility or current liquidity.

Download a published receipt and verify it
curl --fail --silent --show-error 'https://jujingwhale.xyz/api/verification/receipts/published/Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh' -o receipt.json
curl --fail --silent --show-error -X POST 'https://jujingwhale.xyz/api/verification/receipts/verify' \
  -H 'Content-Type: application/json' --data-binary @receipt.json
Open public receipt verifier →

08 / Working examples

Start with an admitted exact mint

Read actual retained evidence
curl --fail --silent --show-error 'https://jujingwhale.xyz/api/v1/representations/solana/Xsc9qvGR1efVDFGLrVsmkzv3qi45LTBjeUKSPmx9qEh/evidence'

Examples above are rendered from the same retained API handlers as production, with complete response fields. Expand the JSON examples to inspect their precise shapes.

09 / Error behavior

No inferred substitute

400
Malformed identifier, unsupported schema or invalid request/query/freshness. Example code: INVALID_IDENTIFIER.
404
Unknown exact representation, unsupported network path or missing evidence digest. Codes include UNKNOWN_REPRESENTATION, NOT_FOUND, UNKNOWN_EVIDENCE_VERSION.
405
Method not allowed. Infrastructure records accept GET only.
503
Unavailable evidence, unsafe public projection or identity mismatch; no internal error detail is disclosed.
Unknown exact mint · complete 404 response
{
  "code": "UNKNOWN_REPRESENTATION",
  "schemaVersion": "jujing-asset-infrastructure-api/1",
  "state": "NOT_ESTABLISHED"
}

Responses use application/json; charset=utf-8, Cache-Control: no-store and X-Content-Type-Options: nosniff. Transport output is bounded to 2 MiB. Unknown query keys fail; the optional schema value must equal the supported API schema.

10 / Integration guidance

Use evidence as an input

  1. Resolve a complete identifier on its declared network. Reject unknown or malformed records.
  2. Check the schema and model version. Preserve provenance, timestamps, digest and field qualifications.
  3. Evaluate the particular rights, controls, freshness and required actions your application needs.
  4. Treat unavailable, stale, mismatched and unresolved states explicitly. Never turn missing exposure into zero.
  5. Keep your own acceptance policy separate from JUJING’s scoped evidence. Do not infer eligibility or legal approval from directory presence.