Validate Contract Metadata
legal.contract_metadata_validate
Overview
You send parties, dates, status and the fields you consider required. We report missing items, duplicate parties, ISO currency mistakes and state contradictions such as TERMINATED without a termination date. We do not read a contract or verify a company. A successful call costs 1 execution credit.
Intake forms need a mechanical completeness check that does not pretend to certify a contract.
Reliability
METADATA_LIMIT_EXCEEDED — trigger: more than 64 parties or 32 owners; retryable: no; next: trim the lists.
Context footprint
Structured labels and dates only. A successful call costs 1 execution credit.
When to use it
When parties, dates and status already sit in a structured record you want linted.
When the agreement still exists only as prose or you need a view on legal sufficiency.
Powered by Squillify's own closed metadata checklist on the fields you mark required.
Scope
Non-goals
- Does not read contract prose
- Does not verify party identity
- Does not look up a company or jurisdiction
Properties
Capabilities
Cost & billing
Flat rate per invocation
File handling
How we handle your data
What this means
This skill may receive sensitive content, but it does not target sensitive data and returns only a structured non-sensitive result.
Squillify guarantees
- Runs inside Squillify
- This skill runs inside Squillify.
- Payloads are not sent to an external service by this skill.
- Squillify does not permanently store submitted payloads.
- Telemetry records metadata only, not submitted content.
- Submitted payloads are not used for training.
- Submitted payloads are not reviewed by humans.
- This skill does not target sensitive data.
- The response does not contain submitted content.
Your responsibility
Squillify does not determine whether submitted content is sensitive. Your application is responsible for deciding what data it is allowed to submit. Your application is responsible for securing the response.
Input schema
| Field | Type | Required | Description |
|---|---|---|---|
| parties | array | No | Party objects with id, name and type, 0 through 65 entries; runtime accepts at most 64. Omit it for none. |
| agreementType | string | No | Agreement-type label; omit it when absent. |
| effectiveDate | string | No | ISO effective date; omit it when absent. |
| executionDate | string | No | ISO execution date; omit it when absent. |
| terminationDate | string | No | ISO termination date; omit it when absent. |
| term | object | No | Closed term duration with count and unit; omit the whole object when the record has no term. |
| governingLaw | string | No | Governing-law label stored as supplied; omit it when absent. |
| currency | string | No | ISO-4217 alphabetic code; omit it when absent. |
| value | number | No | Numeric value as supplied; omit it when absent. |
| owners | array | No | Owner labels, 0 through 33 entries; runtime accepts at most 32. Omit it for none. |
| status | string | No | DRAFT, ACTIVE, EXPIRED, TERMINATED or SUPERSEDED; omit it when absent. |
| requiredFields | array | No | Closed field names that must be present; omit it and only internal consistency is checked. |
Output schema
| Field | Type | Required | Description |
|---|---|---|---|
| valid | boolean | Yes | True when no ERROR diagnostic was produced. |
| parties | array | Yes | Normalized parties in request order, 0 through 64 objects with id, stripped name, optional role and INDIVIDUAL or ORGANIZATION type. |
| agreementType | string | No | Echoed agreement type; omit it when absent. |
| effectiveDate | string | No | Echoed effective date; omit it when absent. |
| executionDate | string | No | Echoed execution date; omit it when absent. |
| terminationDate | string | No | Echoed termination date; omit it when absent. |
| governingLaw | string | No | Echoed governing-law label; omit it when absent. |
| currency | string | No | Echoed currency; omit it when absent. |
| status | string | No | Echoed status; omit it when absent. |
| diagnostics | array | Yes | Deterministically ordered diagnostics, 0 through 500 entries, each with code, severity, message and path; empty when nothing was flagged. |
| assumptions | array | Yes | Caller-visible mechanical assumptions for this answer, such as default weekend days or a grammar version, never a legal conclusion. |
| limitations | string | Yes | Fixed notice that only supplied parameters are applied and that validity, compliance and enforceability are not determined. |
API contract
POST /v1/executecurl -sS -X POST "$BASE/v1/execute" -H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' -d '{"skillKey":"legal.contract_metadata_validate","input":{"status":"DRAFT","parties":[{"id":"p-buyer","name":"Northwind Ltd"}]}}'import { Squillify } from "@squillify/sdk";
const sq = new Squillify({ apiKey: process.env.SQUILLIFY_API_KEY });
const { output } = await sq.execute("legal.contract_metadata_validate", {"status":"DRAFT","parties":[{"name":"Northwind Ltd","type":"ORGANIZATION","id":"p-buyer"}]});Errors
| Code | HTTP | Retryable | Description |
|---|---|---|---|
| VALIDATION_ERROR | 400 | No | The request payload failed schema validation. |
| UNAUTHORIZED | 401 | No | Missing or invalid API key. |
| SKILL_NOT_ACCESSIBLE | 403 | No | The API key is not granted access to this skill. |
| SKILL_NOT_AVAILABLE_FOR_PLAN | 403 | No | This skill is not included in your current plan. |
| PLAN_ELIGIBILITY_UNAVAILABLE | 503 | Yes | Plan eligibility could not be decided. Retry after backoff. |
| SKILL_NOT_FOUND | 404 | No | The requested skill or version does not exist. |
| TENANT_RATE_LIMITED | 429 | Yes | Request rate limit exceeded. Retry after backoff. |
| QUOTA_EXCEEDED | 429 | Yes | Plan quota exhausted. Retryable once the quota period resets. |
| EXECUTION_TIMEOUT | 504 | Yes | Execution exceeded the allowed time budget. |
| METADATA_LIMIT_EXCEEDED | 429 | No | A size, quota, rate, or time limit was exceeded. |
Other limits
| Limit | Value |
|---|---|
| Recommended inline bytes | 32 KiB |
Limitations
- Does not read contract prose
- Does not verify party identity
- Does not look up a company or jurisdiction
- Extracting metadata from a PDF
- Deciding legal sufficiency
How to call
POST /v1/execute (requires authentication)
{
"skillKey": "legal.contract_metadata_validate",
"input": {
"status": "DRAFT",
"parties": [
{
"name": "Northwind Ltd",
"type": "ORGANIZATION",
"id": "p-buyer"
}
]
}
}Examples
Draft status without an execution date stays valid
{
"status": "DRAFT",
"parties": [
{
"name": "Northwind Ltd",
"type": "ORGANIZATION",
"id": "p-buyer"
}
]
}{
"status": "DRAFT",
"valid": true,
"assumptions": [
"Required fields are only those listed in requiredFields; nothing else is inferred as mandatory.",
"governingLaw is stored as the supplied label and is not looked up against a jurisdiction table."
],
"limitations": "Calculations use only the parameters supplied in this call. No implicit legal rule is applied, and the answer does not determine validity, compliance or enforceability.",
"parties": [
{
"id": "p-buyer",
"name": "Northwind Ltd",
"type": "ORGANIZATION"
}
],
"diagnostics": []
}Terminated status without a termination date is invalid
{
"status": "TERMINATED",
"parties": [
{
"name": "Northwind Ltd",
"type": "ORGANIZATION",
"id": "p-buyer"
}
]
}{
"status": "TERMINATED",
"valid": false,
"assumptions": [
"Required fields are only those listed in requiredFields; nothing else is inferred as mandatory.",
"governingLaw is stored as the supplied label and is not looked up against a jurisdiction table."
],
"limitations": "Calculations use only the parameters supplied in this call. No implicit legal rule is applied, and the answer does not determine validity, compliance or enforceability.",
"parties": [
{
"id": "p-buyer",
"name": "Northwind Ltd",
"type": "ORGANIZATION"
}
],
"diagnostics": [
{
"code": "TERMINATED_WITHOUT_DATE",
"severity": "ERROR",
"message": "status TERMINATED has no terminationDate.",
"path": "/terminationDate"
}
]
}Recommended use cases
- Lint a matter-intake form before filing
- Catch TERMINATED without a termination date
Avoid for
- Extracting metadata from a PDF
- Deciding legal sufficiency
Related skills
Composable with
Safety & privacy
- Runs without calling any external service.
- Your payloads are never stored permanently.
- Telemetry captures metadata only — never your payload contents.
- We never train models on your payloads.
- No human reviews your payloads.