Skip to main content
POST
/
v0
/
agreements
/
validate-template
cURL
curl --request POST \
  --url https://test-api.shodai.network/v0/agreements/validate-template \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "metadata": {
    "templateId": "did:template:service-retainer-v0-1",
    "name": "Service Retainer"
  },
  "variables": {
    "serviceProviderRepresentative": {
      "type": "address",
      "subtype": "participant",
      "validation": {
        "required": true
      }
    },
    "clientRepresentative": {
      "type": "address",
      "subtype": "participant",
      "validation": {
        "required": true
      }
    },
    "retainerTitle": {
      "type": "string",
      "validation": {
        "required": true
      }
    }
  },
  "content": {
    "type": "md",
    "data": "# ${variables.retainerTitle}\n\nService agreement between provider and client."
  },
  "execution": {
    "initialize": {
      "initialState": "AWAITING_PAYMENT",
      "data": {}
    },
    "states": {
      "AWAITING_PAYMENT": {
        "description": "Waiting for initial payment proof."
      },
      "WORK_IN_PROGRESS": {
        "description": "Provider is performing the service."
      }
    },
    "inputs": {
      "submitInitialPaymentProof": {
        "issuer": {
          "type": "participant",
          "variable": "clientRepresentative"
        },
        "schema": {
          "paymentReference": {
            "type": "string",
            "validation": {
              "required": true
            }
          }
        }
      }
    },
    "transitions": [
      {
        "from": "AWAITING_PAYMENT",
        "to": "WORK_IN_PROGRESS",
        "conditions": [
          {
            "input": "submitInitialPaymentProof"
          }
        ]
      }
    ]
  }
}
'
{
  "data": {
    "templateId": "did:template:service-retainer-v0-1",
    "participantVariableKeys": [
      "serviceProviderRepresentative",
      "clientRepresentative"
    ],
    "inputIds": [
      "submitInitialPaymentProof"
    ],
    "stateIds": [
      "AWAITING_PAYMENT",
      "WORK_IN_PROGRESS"
    ],
    "warnings": []
  },
  "meta": {
    "apiVersion": "v0",
    "requestId": "req_123"
  }
}
This endpoint checks authored agreement JSON only. It does not validate deployment values, participant wallet mappings, signer, or permit data. Generated API examples document request and response shape; complete deployable agreement JSON lives in /examples/simple and /examples/complex.

Authorizations

X-API-Key
string
header
default:YOUR_API_KEY
required

Canonical API-key credential. Send X-API-Key: cns_pk_..., or Authorization: Bearer cns_pk_... only as an API-key compatibility alias. OAuth and JWT bearer tokens are not supported.

Body

application/json

Authored agreement JSON to validate before deployment preflight.

Response

Agreement structure validation summary.

data
object
required
Example:
{
  "templateId": "did:template:service-retainer-v0-1",
  "participantVariableKeys": [
    "serviceProviderRepresentative",
    "clientRepresentative"
  ],
  "inputIds": ["submitInitialPaymentProof"],
  "stateIds": ["AWAITING_PAYMENT", "WORK_IN_PROGRESS"],
  "warnings": []
}
meta
object
required