1. Home
  2. Library
  3. Tool reference

Check New Zealand construction retention rules.

LiveNew Zealand1 credit

What it does

Check how the retention money rules apply to a commercial construction contract: the trust and record-keeping duties, when the money is released and what happens if the party holding it fails.

Ask your AI

Check New Zealand construction retention rules. Ask me for any detail you need first, then show the result with its source and date, and list anything a person should check.

What comes back

Which rules apply depends on when the contract was entered or renewed.

Good to know

  • Which rules apply depends on when the contract was entered or renewed.
  • A release date comes only from the contract’s own release terms; it is never assumed.
  • Commercial contracts only; a contract with a residential occupier is outside these rules. General information, not legal advice.
For developers
Tool IDnz_construction_retentions
ServerNew Zealand
Credit behaviour1 credit

Input schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "type": "object",
  "properties": {
    "contract_value": {
      "type": "number",
      "exclusiveMinimum": 0,
      "description": "Value in NZD of the contract the retention is withheld under. Required."
    },
    "retention_percentage": {
      "description": "Retention as a percentage of contract_value, above 0 and up to 100. Give this or retention_amount, not both.",
      "type": "number",
      "exclusiveMinimum": 0,
      "maximum": 100
    },
    "retention_amount": {
      "description": "Amount withheld in NZD. Give this or retention_percentage, not both.",
      "type": "number",
      "exclusiveMinimum": 0
    },
    "contract_entered_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Date the contract was entered, YYYY-MM-DD. Decides which text applies."
    },
    "renewal_status": {
      "type": "string",
      "enum": [
        "not_renewed",
        "renewed",
        "unknown"
      ],
      "description": "Whether the contract was renewed for a further term. Required. unknown returns depends_on_renewal for a contract entered before 5 October 2023."
    },
    "residential_occupier_party": {
      "description": "True if a party is a residential occupier of the premises (subpart 2A does not cover that contract). Omit if not known; a caveat is returned.",
      "type": "boolean"
    },
    "renewal_date": {
      "description": "Renewal date, YYYY-MM-DD. Required when renewal_status is renewed; omit when not_renewed.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "insolvency_event_date": {
      "description": "Date a receivership or liquidation of the party holding the retention began, YYYY-MM-DD. Give it if one has occurred.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "practical_completion_date": {
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
      "description": "Practical completion date, YYYY-MM-DD."
    },
    "defects_liability_months": {
      "type": "integer",
      "minimum": 0,
      "maximum": 120,
      "description": "Defects liability period in whole months. Use 0 when the contract has none."
    },
    "release_terms": {
      "type": "string",
      "enum": [
        "contract_dates",
        "contract_silent",
        "unknown"
      ],
      "description": "Release terms in the contract. contract_dates: give release_dates. contract_silent: the contract sets no release terms. unknown: not yet known; no release date is returned and the terms are requested."
    },
    "release_dates": {
      "description": "Required with contract_dates. Release dates and percentages that add up to 100. Use two entries for a partial release at practical completion.",
      "minItems": 1,
      "maxItems": 6,
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
          },
          "percentage": {
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 100
          },
          "description": {
            "type": "string",
            "maxLength": 200
          }
        },
        "required": [
          "date",
          "percentage"
        ],
        "additionalProperties": false
      }
    },
    "defects_notice_date": {
      "description": "Date written notice was given to use retention to remedy defects, YYYY-MM-DD. Returns the earliest use date 10 working days later.",
      "type": "string",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
    },
    "region": {
      "description": "NZ province whose anniversary day is excluded when counting working days. Used only with defects_notice_date.",
      "type": "string",
      "enum": [
        "Auckland",
        "Canterbury (South)",
        "Canterbury",
        "Chatham Islands",
        "Hawke's Bay",
        "Marlborough",
        "Nelson",
        "Otago",
        "Southland",
        "Taranaki",
        "Wellington",
        "Westland"
      ]
    }
  },
  "required": [
    "contract_value",
    "contract_entered_date",
    "renewal_status",
    "practical_completion_date",
    "defects_liability_months",
    "release_terms"
  ],
  "additionalProperties": false
}

Shared output schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "anyOf": [
    {
      "type": "object",
      "properties": {
        "summary": {
          "type": "string"
        },
        "data": {
          "type": "object",
          "propertyNames": {
            "type": "string"
          },
          "additionalProperties": {}
        },
        "executionId": {
          "type": "string",
          "format": "uuid",
          "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
        },
        "creditsCharged": {
          "type": "number",
          "minimum": 0
        },
        "usage": {
          "type": "object",
          "properties": {
            "credits_charged": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "credits_remaining": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "credits_charged"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "summary",
        "data",
        "creditsCharged"
      ],
      "additionalProperties": false
    },
    {
      "type": "object",
      "properties": {
        "error": {
          "type": "object",
          "properties": {
            "code": {
              "type": "string"
            },
            "message": {
              "type": "string"
            },
            "retryable": {
              "type": "boolean"
            }
          },
          "required": [
            "code",
            "message",
            "retryable"
          ],
          "additionalProperties": false
        },
        "usage": {
          "type": "object",
          "properties": {
            "credits_charged": {
              "type": "integer",
              "minimum": 0,
              "maximum": 9007199254740991
            },
            "credits_remaining": {
              "anyOf": [
                {
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 9007199254740991
                },
                {
                  "type": "null"
                }
              ]
            }
          },
          "required": [
            "credits_charged"
          ],
          "additionalProperties": false
        }
      },
      "required": [
        "error"
      ],
      "additionalProperties": false
    }
  ]
}

Ready to use this tool?

Connect Aroai to your AI and try a request.