Skip to main content
POST
/
v0
/
agreements
/
validate
cURL
curl --request POST \
  --url https://test-api.shodai.network/v0/agreements/validate \
  --header 'Content-Type: application/json' \
  --header 'X-API-Key: <api-key>' \
  --data '
{
  "agreement": {
    "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"
            }
          ]
        }
      ]
    }
  }
}
'
{
  "templateId": "did:template:service-retainer-v0-1",
  "participantVariableKeys": [
    "serviceProviderRepresentative",
    "clientRepresentative"
  ],
  "participants": [
    {
      "variableKey": "serviceProviderRepresentative",
      "walletAddress": "0x1111111111111111111111111111111111111111"
    },
    {
      "variableKey": "clientRepresentative",
      "walletAddress": "0x2222222222222222222222222222222222222222",
      "email": "client@example.com"
    }
  ],
  "observers": [
    "legal@example.com"
  ],
  "variables": {
    "serviceProviderRepresentative": "0x1111111111111111111111111111111111111111",
    "clientRepresentative": "0x2222222222222222222222222222222222222222",
    "retainerTitle": "Advisory Retainer"
  },
  "contributors": [
    "0x1111111111111111111111111111111111111111",
    "0x2222222222222222222222222222222222222222"
  ],
  "warnings": []
}

Documentation Index

Fetch the complete documentation index at: https://docs.shodai.network/llms.txt

Use this file to discover all available pages before exploring further.

This endpoint validates the assembled deployment context before any EIP-712 permit is signed. In SDK integrations, prefer client.validateDeployment(...) before deployAgreementWithPermit(...). 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

API key. Send this value in the X-API-Key request header.

Body

application/json

Deployment preflight request for authored agreement JSON and its deployment context.

agreement
object
required

Authored agreement JSON to preflight before deployment.

initValues
object

Deployment values for variables required when the agreement is created.

participants
object[]

Participant wallet mappings for participant address variables.

observers
string<email>[]

Optional observer email addresses to associate with the agreement record.

Response

Deployment preflight summary.

templateId
string | null
required

Agreement metadata templateId or id value, when present.

participantVariableKeys
string[]
required

Participant address variable keys found in the agreement JSON.

participants
object[]
required

Normalized participant wallet mappings.

observers
string<email>[]
required

Normalized observer email addresses.

variables
object
required

Deployment values after participant wallet mappings are applied.

contributors
string[]
required

Wallet addresses that may contribute to agreement visibility or activity.

warnings
string[]
required

Warnings to review before deployment.