Skip to content

Wire Types

INK uses two distinct identifier formats for message types. Implementations MUST distinguish between them.

Convention

PurposeFormatExample
AT Protocol Lexicon IDcamelCase, includes ink segmentnetwork.tulpa.ink.auditQuery
Wire type fieldsnake_case, omits ink segmentnetwork.tulpa.audit_query

The lexicon ID follows AT Protocol conventions (camelCase NSID with hierarchical namespacing). The wire type is the value in the "type" field of every INK message — it is what implementations match on when routing messages.

Implementations MUST key off the wire type field, not the lexicon ID.

Complete Mapping

Wire Type (type field)Lexicon IDDescription
network.tulpa.intentnetwork.tulpa.ink.intentIntent message
network.tulpa.challengenetwork.tulpa.ink.challengeContext challenge
network.tulpa.rejectionnetwork.tulpa.ink.rejectionRejection response
network.tulpa.resolutionnetwork.tulpa.ink.resolutionResolution outcome
network.tulpa.encryptednetwork.tulpa.ink.encryptedECIES encrypted envelope
network.tulpa.receiptnetwork.tulpa.ink.receiptDelivery receipt
network.tulpa.audit_querynetwork.tulpa.ink.auditQueryAudit exchange request
network.tulpa.audit_responsenetwork.tulpa.ink.auditResponseAudit exchange response
network.tulpa.audit_submitnetwork.tulpa.ink.auditSubmitThird-party audit submission
network.tulpa.audit_inclusionnetwork.tulpa.ink.auditInclusionAudit inclusion receipt

Why Two Formats

For single-word types, the distinction is invisible: network.tulpa.intent maps to network.tulpa.ink.intent.

For multi-word types, it matters: network.tulpa.audit_query (wire) vs. network.tulpa.ink.auditQuery (lexicon).

The wire format uses snake_case for consistency with the JSON body convention. The lexicon format uses camelCase to match AT Protocol’s NSID registry convention.