All metadata URIs stored on-chain (metadataUri, versionMetadataHash) must point to Arweave-hosted JSON conforming to this schema.
Project Metadata
On-chain field: InkdRegistryV2.projectMetadataUri
Format: ar://<txid> or https://arweave.net/<txid>
{
"$schema": "https://inkdprotocol.com/schemas/project-metadata/v1.json",
"name": "my-project",
"description": "A short description (max 1024 chars)",
"version": "1.0.0",
"license": "MIT",
"homepage": "https://example.com",
"repository": "https://github.com/owner/repo",
"tags": ["ai", "agent", "base"],
"readme": "ar://<arweave-txid>",
"logo": "ar://<arweave-txid>",
"links": {
"docs": "https://docs.example.com",
"twitter": "https://twitter.com/example",
"discord": "https://discord.gg/example"
},
"createdAt": "2026-03-07T00:00:00Z",
"updatedAt": "2026-03-07T00:00:00Z"
}Required Fields
| Field | Type | Max Length | Description |
|---|---|---|---|
name | string | 64 | Project name — must match on-chain name (lowercase) |
description | string | 1024 | Short description |
version | string | 32 | Current version tag (semver recommended) |
license | string | 64 | SPDX identifier (e.g. MIT, Apache-2.0) |
Optional Fields
| Field | Type | Description |
|---|---|---|
homepage | URL | Project website |
repository | URL | Source code repository |
tags | string[] | Max 10 tags, each max 32 chars |
readme | ar:// | Full README on Arweave |
logo | ar:// | Square PNG/SVG, recommended 256×256 |
links | object | Map of external links |
Version Metadata
On-chain field: InkdRegistryV2.versionMetaHash
Format: ar://<txid>
{
"$schema": "https://inkdprotocol.com/schemas/version-metadata/v1.json",
"projectId": 6,
"versionIndex": 0,
"versionTag": "v1.0.0",
"changelog": "Initial release",
"arweaveHash": "ar://<txid>",
"pushedBy": "0x210bDf52ad7afE3Ea7C67323eDcCD699598983C0",
"pushedAt": "2026-03-07T00:00:00Z",
"agentWallet": "0xAgentWalletAddress",
"dependencies": [
{ "name": "other-project", "projectId": 1, "versionTag": "v0.9.0" }
],
"runtime": {
"type": "nodejs",
"version": ">=18"
}
}Required Fields
| Field | Type | Description |
|---|---|---|
projectId | number | On-chain project ID |
versionIndex | number | On-chain version index (0-based) |
versionTag | string | Version tag (e.g. v1.0.0) |
arweaveHash | ar:// | Arweave URI of the code payload |
Optional Fields
| Field | Type | Description |
|---|---|---|
changelog | string | What changed in this version |
agentWallet | address | Actual agent wallet identity (not the server wallet) |
dependencies | array | Other Inkd projects this depends on |
runtime | object | Execution environment requirements |
Access Manifest
On-chain field: InkdRegistryV2.projectAccessManifest
Format: ar://<txid>
Used to grant multi-wallet access to credentials stored in AgentVault.
{
"$schema": "https://inkdprotocol.com/schemas/access-manifest/v1.json",
"projectId": 6,
"vaultEntries": [
{
"walletAddress": "0xAgentWallet1",
"encryptedKeyRef": "ar://<txid>",
"grantedAt": "2026-03-07T00:00:00Z",
"grantedBy": "0xOwnerWallet"
}
],
"updatedAt": "2026-03-07T00:00:00Z"
}URI Format
All Arweave references use the ar:// prefix:
ar://<43-char-base64url-txid>Example: ar://baME8wjzVjRfx7SfhaMHp8vgSwOqLpHJUZl1m9bHKPY
The Inkd API resolves these via https://arweave.net/<txid>.
Validation
The Inkd API validates metadataUri content on upload (POST /v1/upload).
Invalid schemas return 400 Bad Request with field-level errors.
JSON Schema definitions are published at:
https://inkdprotocol.com/schemas/project-metadata/v1.jsonhttps://inkdprotocol.com/schemas/version-metadata/v1.jsonhttps://inkdprotocol.com/schemas/access-manifest/v1.json
