Validation errors

When submitting API calls to the bronID API, you might encounter validation errors. The error response should contain enough information for you to understand what the issue is and to be able to correct it.

Some examples if invalid requests are:

  • missing a required field
  • using an invalid field value

Sample validation errors

Using an invalid value

The sample below is using an invalid ABN.

Request body

{
	"userId": "test-user",
	"country": "AUS",
	"type": "partnership",
	"subType": "generalPartnership",
	"name": "info partnership",
	"industry": "Test Industry",
	"website": "https://test.com",
	"inputRisk": "unknown",
	"identifiers": {
		"abn": "123456789__"
	},
	"addresses": {
		"registeredAddress": "123 Main St, Australia",
		"principalPlaceOfBusiness": "123 Main St, Australia",
		"other": "123 Main St, Australia"
	}
}

The API response includes the cause of the issue, explaining the the ABN must be exactly 11 digits.

API response

{
	"timestamp": "2026-01-07T23:47:55.773Z",
	"serviceUid": "5qA5Hq0n1JQTY2TASItxYXSRyND3",
	"trace": "uEGS5rX4YvhWAA0nRgrKa",
	"path": "/v5/forms",
	"statusCode": 422,
	"message": "Validation error",
	"status": "error",
	"data": null,
	"help": null,
	"error": {
		"type": "validation_error",
		"details": [
			{
				"message": "ABN must be exactly 11 digits.",
				"code": "invalid_format",
				"path": ["identifiers", "abn"]
			}
		]
	}
}

Missing a required value

This sample illustrates a missing required field. There is a typo in the key website.

Request body

{
	"userId": "test-user",
	"country": "AUS",
	"type": "trust",
	"subType": "discretionaryTrust",
	"name": "Info Discretionary Trust",
	"industry": "Test Industry",
	"website_": "https://test.com",
	"inputRisk": "unknown",
	"identifiers": {
		"abn": "12345678901"
	},
	"addresses": {
		"registeredAddress": "123 Main St, Australia",
		"principalPlaceOfBusiness": "123 Main St, Australia",
		"other": "123 Main St, Australia"
	},
	"documents": [
		{
			"kind": "trustDeed",
			"source": "url",
			"data": "https://external-storage.com/the-file.pdf?Signature=123123",
			"fileName": "my-file-name.pdf",
			"mimeType": "application/pdf",
			"description": "File stored on an external platform."
		}
	],
	"stakeholders": [
		{
			"roles": ["trustee"],
			"country": "AUS",
			"type": "company",
			"name": "Trustee Pty Ltd",
			"identifiers": {
				"acn": "123456789"
			},
			"addresses": {}
		}
	]
}

The API response includes the cause of the issue, explaining that the field website is missing i.e. undefined.

API response

{
	"timestamp": "2026-01-07T23:56:06.024Z",
	"serviceUid": "5qA5Hq0n1JQTY2TASItxYXSRyND3",
	"trace": "PTBHOb-FZXQuQOqd6cVfL",
	"path": "/v5/verifications",
	"statusCode": 422,
	"message": "Validation error",
	"help": null,
	"status": "error",
	"data": null,
	"error": {
		"type": "validation_error",
		"details": [
			{
				"message": "Invalid input: expected string, received undefined",
				"code": "invalid_type",
				"path": ["website"]
			}
		]
	}
}

Missing a required document

This sample illustrates an API call that is missing a required document. The trustDeed is a required document when submitting a trust.

Request body

{
	"userId": "test-user",
	"country": "AUS",
	"type": "trust",
	"subType": "discretionaryTrust",
	"name": "Info trust name",
	"industry": "Test Industry",
	"website": "https://test.com",
	"inputRisk": "unknown",
	"identifiers": {
		"abn": "12345678901"
	},
	"addresses": {
		"registeredAddress": "123 Main St, Australia",
		"principalPlaceOfBusiness": "123 Main St, Australia",
		"other": "123 Main St, Australia"
	},
	"documents": [],
	"stakeholders": [
		{
			"roles": ["trustee"],
			"type": "company",
			"country": "AUS",
			"name": "Trustee Pty Ltd",
			"identifiers": {
				"acn": "123456789"
			},
			"addresses": {}
		}
	]
}

The API response includes the cause of the issue, explaining that there are documents which are required, but have not been included in the request.

API response

{
	"timestamp": "2026-01-11T00:50:04.761Z",
	"serviceUid": "3Fis7CWEHsVcGEJTYqKcW5dCF393",
	"trace": "ZtgVE_q_9GE7UFFDhomkj",
	"path": "/v5/verifications",
	"statusCode": 422,
	"message": "Validation error",
	"help": null,
	"status": "error",
	"data": null,
	"error": {
		"type": "validation_error",
		"details": [
			{
				"message": "All required document types must have at least one document with file upload",
				"code": "custom",
				"path": ["documents"]
			}
		]
	}
}

Empty required value

This sample illustrates an empty required field. The value of the key website is an empty string i.e. “”.

Request body

{
	"userId": "test-user",
	"country": "AUS",
	"type": "trust",
	"subType": "discretionaryTrust",
	"name": "info Discretionary Trust",
	"industry": "Test Industry",
	"website": "",
	"inputRisk": "unknown",
	"identifiers": {
		"abn": "12345678901"
	},
	"addresses": {
		"registeredAddress": "123 Main St, Australia",
		"principalPlaceOfBusiness": "123 Main St, Australia",
		"other": "123 Main St, Australia"
	},
	"documents": [
		{
			"kind": "trustDeed",
			"source": "url",
			"data": "https://external-storage.com/the-file.pdf?Signature=123123",
			"fileName": "my-file-name.pdf",
			"mimeType": "application/pdf",
			"description": "File stored on an external platform."
		}
	],
	"stakeholders": [
		{
			"roles": ["trustee"],
			"type": "company",
			"country": "AUS",
			"name": "Trustee Pty Ltd",
			"identifiers": {
				"acn": "123456789"
			},
			"addresses": {}
		}
	]
}

The API response includes the cause of the issue, explaining that the field website is required.

API response

{
	"timestamp": "2026-01-08T00:03:08.103Z",
	"serviceUid": "5qA5Hq0n1JQTY2TASItxYXSRyND3",
	"trace": "YhN8s4WvGLWFYY1nILkmG",
	"path": "/v5/verifications",
	"statusCode": 422,
	"message": "Validation error",
	"help": null,
	"status": "error",
	"data": null,
	"error": {
		"type": "validation_error",
		"details": [
			{
				"message": "Website is required.",
				"code": "too_small",
				"path": ["website"]
			}
		]
	}
}

Value too long

The sample illustrates providing a value that is longer than the maximum allowed characters.

Request body

{
	"userId": "test-user",
	"country": "AUS",
	"type": "trust",
	"subType": "discretionaryTrust",
	"name": "A name that is too long for the validation to accept it",
	"industry": "Test Industry",
	"website": "https://test.com",
	"inputRisk": "unknown",
	"identifiers": {
		"abn": "12345678901"
	},
	"addresses": {
		"registeredAddress": "123 Main St, Australia",
		"principalPlaceOfBusiness": "123 Main St, Australia",
		"other": "123 Main St, Australia"
	},
	"documents": [
		{
			"kind": "trustDeed",
			"source": "url",
			"data": "https://external-storage.com/the-file.pdf?Signature=123123",
			"fileName": "my-file-name.pdf",
			"mimeType": "application/pdf",
			"description": "File stored on an external platform."
		}
	],
	"stakeholders": [
		{
			"roles": ["trustee"],
			"type": "company",
			"country": "AUS",
			"name": "Trustee Pty Ltd",
			"identifiers": {
				"acn": "123456789"
			},
			"addresses": {}
		}
	]
}

The error response explains that the field is longer than the validation allows.

API response

{
	"timestamp": "2026-01-08T00:09:43.463Z",
	"serviceUid": "5qA5Hq0n1JQTY2TASItxYXSRyND3",
	"trace": "B89FVqhQLZhPsc4l7UAqE",
	"path": "/v5/verifications",
	"statusCode": 422,
	"message": "Validation error",
	"help": null,
	"status": "error",
	"data": null,
	"error": {
		"type": "validation_error",
		"details": [
			{
				"message": "Name must be less than 200 characters.",
				"code": "too_big",
				"path": ["name"]
			}
		]
	}
}

Error types

Whenever a request is unsuccessful, the bronID API will return an error response with an error type and message. You can use this information to understand better what has gone wrong and how to fix it. Most of the error messages are pretty helpful and actionable.

  • Name
    validation_error
    Description

    This means that the request is invalid.

  • Name
    too_many_attempts
    Description

    Returned with HTTP status 474 when a rejected individual (subType: data) verification is resubmitted after its attempt cap has been exhausted (submissionStatus: "locked"). The submitted data is not re-verified. See retrying a rejected individual verification.

  • Name
    submission_conflict
    Description

    Returned with HTTP status 475 when a rejected individual (subType: data) verification is resubmitted while another resubmission of the same verification is still in flight. The conflicting submission is not stored and no new verification attempt is started — wait for the in-flight attempt's outcome (via the webhook or GET /v5/verifications/:trace) before retrying.

Error response

{
  "type": "validation_error",
  "message": "Validation error",
  "help": "http://v5.docs.bronid.com/kyb-api/errors"
}

Was this page helpful?