Skip to main content
Effective date: 2026-05-26. Use this guide when upgrading an integration that deploys agreements, signs EIP-712 permits, submits agreement inputs, or filters agreement lists with @shodai-network/agreements-api-client@0.3.0.

What changed

Agreements can now be deployed to more than one supported EVM chain in the same hosted API environment. Deployment, signing, and input submission code must carry the selected chainId consistently instead of assuming a single environment chain. Supported hosted deployment chains:

Upgrade checklist

  1. Upgrade to @shodai-network/agreements-api-client@0.3.0.
  2. Confirm your lockfile resolves @shodai-network/agreements-protocol-evm@0.1.4 or newer.
  3. Choose a supported chainId before deployment preflight.
  4. Include the same chainId in client.validateDeployment(...), EIP-712 deploy signing, and deploy-with-permit requests.
  5. Create the publicClient and walletClient for the selected chain before signing.
  6. For input signing, read the deployed agreement record and pass agreementRecord.chainId to submitAgreementInputWithPermit(...) or signAgreementInputPermit(...).
  7. Add chainId filters to agreement list views when your UI or job should operate on one chain at a time.
  8. Update error handling for unsupported chains and RPC/client chain mismatches.

Deployment code changes

Before this migration, integrations often treated the API environment as the chain selection:
After the migration, select a supported chainId and carry it through the whole deployment flow:
publicClient.getChainId() must match the selected chainId. If it does not, the SDK rejects before requesting a signature.

Input signing changes

The 0.3.0 TypeScript client makes chainId required for input signing helpers. Use the chain stored on the deployed agreement record, not a hardcoded environment default. Before 0.3.0:
In 0.3.0:
The raw HTTP input request body does not include chainId. The API uses the stored agreement record after lookup. chainId is required by the SDK signing helpers so the EIP-712 domain is built for the deployed agreement’s chain and the RPC client can be checked before signing.

Raw HTTP changes

Deployment preflight and deploy-with-permit requests should include chainId:
For raw EIP-712 signing, use the same chainId in the typed-data domain and use the factory address registered for that chain. For input signing, read GET /v0/agreements/{id} first and use the returned chainId and address.

Agreement list filtering

Agreement lists can now be filtered by chain:
Raw HTTP:
If you omit the filter, list responses can include agreements from every chain visible to the API key.

Protocol registry changes

The protocol SDK registry now includes five deployments. Use registry helpers instead of hardcoding factory addresses:
This matters even when two networks share the same factory address. The EIP-712 domain still needs the correct chainId.

Common upgrade failures