openapi: 3.1.0
info:
title: neoprism-node
description: ""
license:
name: ""
version: 0.13.0
servers:
- url: http://localhost:8080
description: Local
- url: https://neoprism.patlo.dev
description: Public - mainnet
- url: https://neoprism-preprod.patlo.dev
description: Public - preprod
paths:
/api/_system/health:
get:
tags:
- System API
summary: Health check
operationId: health
responses:
"200":
description: Healthy
content:
text/plain:
schema:
type: string
example: Ok
/api/_system/metadata:
get:
tags:
- System API
summary: Get app metadata
operationId: app_meta
responses:
"200":
description: Healthy
content:
application/json:
schema:
$ref: '#/components/schemas/AppMeta'
"500":
description: An unexpected error occurred while retrieving app metadata
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
/api/dids/{did}:
get:
tags:
- Indexer API
summary: Resolve DID
description: |-
This endpoint is fully compliant with the W3C DID Resolution specification. It returns a DID Resolution Result object, including metadata and the resolved DID Document, following the standard resolution process.
Optional resolution options may be provided as query parameters, but are not yet supported in this implementation.
operationId: did_resolver
parameters:
- name: did
in: path
description: The Decentralized Identifier (DID) to resolve.
required: true
schema:
type: string
example: did:example:123456789abcdefghi
responses:
"200":
description: Successfully resolved the DID.
content:
application/json:
schema:
$ref: '#/components/schemas/DidDocument'
application/did:
schema:
$ref: '#/components/schemas/DidDocument'
application/did-resolution:
schema:
$ref: '#/components/schemas/ResolutionResult'
"400":
description: The provided DID is invalid.
content:
application/did-resolution:
schema:
$ref: '#/components/schemas/ResolutionResult'
"404":
description: The DID does not exist or not found.
content:
application/did-resolution:
schema:
$ref: '#/components/schemas/ResolutionResult'
"406":
description: The requested representation is not supported.
content:
application/did-resolution:
schema:
$ref: '#/components/schemas/ResolutionResult'
"410":
description: The DID has been deactivated.
content:
application/did-resolution:
schema:
$ref: '#/components/schemas/ResolutionResult'
"500":
description: An unexpected error occurred during resolution.
content:
application/did-resolution:
schema:
$ref: '#/components/schemas/ResolutionResult'
"501":
description: A functionality is not implemented.
content:
application/did-resolution:
schema:
$ref: '#/components/schemas/ResolutionResult'
/api/dids/{did}/protobuf:
get:
tags:
- Indexer API
summary: Get DIDData protobuf
description: The returned data is a protobuf message compatible with the legacy prism-node implementation. The object is encoded in hexadecimal format. This endpoint is useful for testing and verifying compatibility with existing operations already anchored on the blockchain.
operationId: did_data
parameters:
- name: did
in: path
description: The Decentralized Identifier (DID) for which to retrieve the DIDData protobuf message.
required: true
schema:
$ref: '#/components/schemas/Did'
responses:
"200":
description: Successfully retrieved the DIDData protobuf message, encoded as a hexadecimal string.
content:
text/plain:
schema:
type: string
"400":
description: The provided DID is invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"404":
description: The DID does not exist in the index.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"500":
description: An unexpected error occurred while retrieving DIDData.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"501":
description: A functionality is not implemented.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
/api/indexer-stats:
get:
tags:
- Indexer API
summary: Get indexer statistics
operationId: indexer_stats
responses:
"200":
description: Successfully retrieved indexer statistics, including the latest processed slot and block numbers.
content:
application/json:
schema:
$ref: '#/components/schemas/IndexerStats'
"500":
description: An unexpected error occurred while retrieving indexer statistics.
content:
application/json: {}
"501":
description: Indexer service is not available.
content:
application/json: {}
/api/operations/{operation_id}:
get:
tags:
- Indexer API
summary: Get operation details
operationId: operation_details
parameters:
- name: operation_id
in: path
description: Operation hash (64-character hex string)
required: true
schema:
$ref: '#/components/schemas/OperationId'
responses:
"200":
description: Successfully retrieved operation details
content:
application/json:
schema:
$ref: '#/components/schemas/OperationDetails'
"400":
description: The provided operation ID is invalid
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"404":
description: The operation does not exist
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"500":
description: An unexpected error occurred
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
/api/submissions/objects:
post:
tags:
- Submitter API
summary: Submit a PRISM object
description: Submits a PRISM object containing signed operations to the blockchain. Accepts a hex-encoded PrismObject protobuf message containing a PrismBlock with SignedPrismOperation messages and returns the transaction ID along with the computed operation IDs for tracking.
operationId: submit_object
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ObjectSubmissionRequest'
required: true
responses:
"200":
description: Object submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/SubmissionResponse'
"400":
description: Malformed request or invalid object
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"500":
description: An unexpected error occurred during submission
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
/api/submissions/signed-operations:
post:
tags:
- Submitter API
summary: Submit signed operations
description: Submits one or more signed PRISM operations to the blockchain. Accepts an array of hex-encoded SignedPrismOperation protobuf messages and returns the transaction ID along with the computed operation IDs for tracking.
operationId: submit_signed_operations
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/SignedOperationSubmissionRequest'
required: true
responses:
"200":
description: Operations submitted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/SubmissionResponse'
"400":
description: Malformed request or invalid operations
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"500":
description: An unexpected error occurred during submission
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
/api/transactions/{tx_id}:
get:
tags:
- Indexer API
summary: Get transaction details
operationId: transaction_details
parameters:
- name: tx_id
in: path
description: Cardano transaction hash (64-character hex string)
required: true
schema:
$ref: '#/components/schemas/TxId'
responses:
"200":
description: Successfully retrieved transaction details
content:
application/json:
schema:
$ref: '#/components/schemas/TransactionDetails'
"400":
description: The provided transaction ID is invalid
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"404":
description: The transaction does not exist or contains no PRISM operations
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"500":
description: An unexpected error occurred
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
/api/vdr-data/{entry_hash}:
get:
tags:
- Indexer API
summary: Resolve VDR entry
description: Returns the raw blob data for a VDR entry, using PrismDidService::resolve_vdr. The response is application/octet-stream.
operationId: resolve_vdr_blob
parameters:
- name: entry_hash
in: path
description: The hex-encoded entry hash to resolve.
required: true
schema:
type: string
responses:
"200":
description: Successfully resolved the VDR entry. Returns the blob data.
content:
application/octet-stream: {}
"404":
description: The VDR entry was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"500":
description: An unexpected error occurred during VDR resolution.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
/api/vdr-data/{entry_hash}/metadata:
get:
tags:
- Indexer API
summary: Get VDR entry metadata
description: Returns metadata for a VDR entry including the latest event hash and status. This is used by VDR clients to obtain the previous event hash required for update and delete operations.
operationId: vdr_entry_metadata
parameters:
- name: entry_hash
in: path
description: The hex-encoded entry hash.
required: true
schema:
type: string
responses:
"200":
description: Successfully retrieved VDR entry metadata.
content:
application/json:
schema:
$ref: '#/components/schemas/VdrEntryMetadataResponse'
"400":
description: The provided entry hash is invalid.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"404":
description: The VDR entry was not found.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
"500":
description: An unexpected error occurred.
content:
application/json:
schema:
$ref: '#/components/schemas/ApiErrorResponseBody'
components:
schemas:
ApiErrorResponseBody:
type: object
required:
- message
properties:
message:
type: string
AppMeta:
type: object
required:
- version
- mode
properties:
mode:
$ref: '#/components/schemas/AppMetaRunMode'
version:
type: string
AppMetaRunMode:
type: string
enum:
- Indexer
- Submitter
- Standalone
Base64UrlStrNoPad:
type: string
description: |-
# Example
```
use identus_apollo::base64::Base64UrlStrNoPad;
let b = b"hello world";
let b64 = Base64UrlStrNoPad::from(b);
assert!(b64.to_string() == "aGVsbG8gd29ybGQ");
```
BlockNo:
type: integer
format: int64
example: 42
minimum: 0
Did:
type: string
example: did:example:123456789abcdefghi
DidDocument:
type: object
required:
- '@context'
- id
- verificationMethod
properties:
'@context':
type: array
items:
type: string
alsoKnownAs:
type:
- array
- "null"
items:
$ref: '#/components/schemas/Uri'
assertionMethod:
type:
- array
- "null"
items:
$ref: '#/components/schemas/VerificationMethodOrRef'
authentication:
type:
- array
- "null"
items:
$ref: '#/components/schemas/VerificationMethodOrRef'
capabilityDelegation:
type:
- array
- "null"
items:
$ref: '#/components/schemas/VerificationMethodOrRef'
capabilityInvocation:
type:
- array
- "null"
items:
$ref: '#/components/schemas/VerificationMethodOrRef'
id:
$ref: '#/components/schemas/Did'
keyAgreement:
type:
- array
- "null"
items:
$ref: '#/components/schemas/VerificationMethodOrRef'
service:
type:
- array
- "null"
items:
$ref: '#/components/schemas/Service'
verificationMethod:
type: array
items:
$ref: '#/components/schemas/VerificationMethod'
DidDocumentMetadata:
type: object
properties:
canonicalId:
oneOf:
- type: "null"
- $ref: '#/components/schemas/Did'
created:
type:
- string
- "null"
format: date-time
deactivated:
type:
- boolean
- "null"
updated:
type:
- string
- "null"
format: date-time
versionId:
type:
- string
- "null"
DidResolutionError:
type: object
required:
- type
properties:
detail:
type:
- string
- "null"
title:
type:
- string
- "null"
type:
$ref: '#/components/schemas/DidResolutionErrorCode'
DidResolutionErrorCode:
type: string
enum:
- https://www.w3.org/ns/did#INVALID_DID
- https://www.w3.org/ns/did#INVALID_DID_DOCUMENT
- https://www.w3.org/ns/did#NOT_FOUND
- https://www.w3.org/ns/did#REPRESENTATION_NOT_SUPPORTED
- https://www.w3.org/ns/did#INVALID_DID_URL
- https://www.w3.org/ns/did#METHOD_NOT_SUPPORTED
- https://www.w3.org/ns/did#INVALID_OPTIONS
- https://www.w3.org/ns/did#INTERNAL_ERROR
- https://w3id.org/security#INVALID_PUBLIC_KEY
- https://w3id.org/security#INVALID_PUBLIC_KEY_LENGTH
- https://w3id.org/security#INVALID_PUBLIC_KEY_TYPE
- https://w3id.org/security#UNSUPPORTED_PUBLIC_KEY_TYPE
- https://w3id.org/security#INVALID_VERIFICATION_METHOD_URL
- https://w3id.org/security#INVALID_CONTROLLED_IDENTIFIER_DOCUMENT_ID
- https://w3id.org/security#INVALID_CONTROLLED_IDENTIFIER_DOCUMENT
- https://w3id.org/security#INVALID_VERIFICATION_METHOD
- https://w3id.org/security#INVALID_RELATIONSHIP_FOR_VERIFICATION_METHOD
DidResolutionMetadata:
type: object
properties:
contentType:
type:
- string
- "null"
error:
oneOf:
- type: "null"
- $ref: '#/components/schemas/DidResolutionError'
IndexerStats:
type: object
properties:
last_prism_block_number:
oneOf:
- type: "null"
- $ref: '#/components/schemas/BlockNo'
last_prism_slot_number:
oneOf:
- type: "null"
- $ref: '#/components/schemas/SlotNo'
Jwk:
type: object
required:
- kty
- crv
properties:
crv:
type: string
kty:
type: string
x:
oneOf:
- type: "null"
- $ref: '#/components/schemas/Base64UrlStrNoPad'
"y":
oneOf:
- type: "null"
- $ref: '#/components/schemas/Base64UrlStrNoPad'
ObjectSubmissionRequest:
type: object
required:
- object
properties:
object:
$ref: '#/components/schemas/PrismObjectHexStr'
OperationDetails:
type: object
required:
- operation_id
- tx_id
- signed_operation_data
- slot_number
- block_number
- block_timestamp
- absn
- osn
- did
properties:
absn:
type: integer
format: int32
minimum: 0
block_number:
$ref: '#/components/schemas/BlockNo'
block_timestamp:
type: string
format: date-time
did:
$ref: '#/components/schemas/Did'
operation_id:
$ref: '#/components/schemas/OperationId'
osn:
type: integer
format: int32
minimum: 0
signed_operation_data:
$ref: '#/components/schemas/SignedPrismOperationHexStr'
slot_number:
$ref: '#/components/schemas/SlotNo'
tx_id:
$ref: '#/components/schemas/TxId'
OperationId:
type: string
example: a1b2c3d4e5f6789012345678901234567890123456789012345678901234abcd
OperationSummary:
type: object
required:
- osn
- signed_operation_data
- operation_id
- did
properties:
did:
$ref: '#/components/schemas/Did'
operation_id:
$ref: '#/components/schemas/OperationId'
osn:
type: integer
format: int32
minimum: 0
signed_operation_data:
$ref: '#/components/schemas/SignedPrismOperationHexStr'
PrismObjectHexStr:
type: string
description: 'A hexadecimal string representing a PrismObject protobuf message (see: https://github.com/hyperledger-identus/neoprism/blob/main/lib/did-prism/proto/prism.proto). The bytes are hex-encoded after protobuf serialization.'
example: 22d60112d3010a086d61737465722d3012463044022036393f3602cc2c17552cf72a6af1d12dc45cdf549707e76491b06d0becbd2ece02203ff703fabf4db876059aaf1ffb7803e40f5c707695ad215fd562b2f418aaded11a7f0a7d0a7b123c0a086d61737465722d3010014a2e0a09736563703235366b31122103b20404f350d87eec98982131c176acfea520f26f8901fe08b619a56a0dd9e417123b0a0769737375652d3010024a2e0a09736563703235366b311221037ee52f2a266aa874dc83feb8fcb15ab96282f67132bc7821c08ac524955114f1
ResolutionResult:
type: object
required:
- didResolutionMetadata
- didDocumentMetadata
properties:
didDocument:
oneOf:
- type: "null"
- $ref: '#/components/schemas/DidDocument'
didDocumentMetadata:
$ref: '#/components/schemas/DidDocumentMetadata'
didResolutionMetadata:
$ref: '#/components/schemas/DidResolutionMetadata'
Service:
type: object
required:
- id
- type
- serviceEndpoint
properties:
id:
type: string
serviceEndpoint:
$ref: '#/components/schemas/ServiceEndpoint'
type:
$ref: '#/components/schemas/ServiceType'
ServiceEndpoint:
oneOf:
- $ref: '#/components/schemas/StringOrMap'
- type: array
items:
$ref: '#/components/schemas/StringOrMap'
ServiceType:
oneOf:
- type: string
- type: array
items:
type: string
SignedOperationSubmissionRequest:
type: object
required:
- signed_operations
properties:
signed_operations:
type: array
items:
$ref: '#/components/schemas/SignedPrismOperationHexStr'
SignedPrismOperationHexStr:
type: string
description: 'A hexadecimal string representing a SignedPrismOperation protobuf message (see: https://github.com/hyperledger-identus/neoprism/blob/main/lib/did-prism/proto/prism.proto). The bytes are hex-encoded after protobuf serialization.'
example: 0a086d61737465722d30124630440220442eec28ec60464acd8df155e73f88a1c7faf4549975582ff0601449525aba31022019257250071818066b377b83a8b1765df1b7dc21d9bccfc7d5da036801d3ba0e1a420a400a3e123c0a086d61737465722d3010014a2e0a09736563703235366b3112210398e61c14328a6a844eec6dc084b825ae8525f10204e9244aaf61260bd221a457
SlotNo:
type: integer
format: int64
example: 8086
minimum: 0
StringOrMap:
oneOf:
- type: string
- type: object
additionalProperties: {}
propertyNames:
type: string
SubmissionResponse:
type: object
required:
- tx_id
- operation_ids
properties:
operation_ids:
type: array
items:
$ref: '#/components/schemas/OperationId'
tx_id:
$ref: '#/components/schemas/TxId'
TransactionDetails:
type: object
required:
- tx_id
- operation_count
- slot_number
- block_number
- block_timestamp
- absn
- operations
properties:
absn:
type: integer
format: int32
minimum: 0
block_number:
$ref: '#/components/schemas/BlockNo'
block_timestamp:
type: string
format: date-time
operation_count:
type: integer
format: int32
minimum: 0
operations:
type: array
items:
$ref: '#/components/schemas/OperationSummary'
slot_number:
$ref: '#/components/schemas/SlotNo'
tx_id:
$ref: '#/components/schemas/TxId'
TxId:
type: string
example: 5ab0cf7e4c7cd4b63ba84a4fe299409be12ba85607cb6d1a149e80bc2eac070d
Uri:
type: string
example: http://example.com
VdrEntryMetadataResponse:
type: object
required:
- entry_hash
- latest_event_hash
- status
properties:
entry_hash:
type: string
latest_event_hash:
type: string
status:
type: string
VerificationMethod:
type: object
required:
- id
- type
- controller
properties:
controller:
type: string
id:
type: string
publicKeyJwk:
oneOf:
- type: "null"
- $ref: '#/components/schemas/Jwk'
type:
type: string
VerificationMethodOrRef:
oneOf:
- $ref: '#/components/schemas/VerificationMethod'
- type: string