PDF/A Conformance Validation

The PDF/A validation API allows you to validate the conformance of a PDF file. It returns a report with the level of conformance of the PDF/A file and the errors encountered during validation.

It’s available on the POST /validate_pdfa endpoint.

Request Format

The /api/validate_pdfa endpoint is a multipart/form-data request in which you can supply the PDF in two ways:

  • Upload a file as a part of the multipart request.

  • Provide the URL of a PDF file.

To access password-protected documents, include the pspdfkit-pdf-password header with the value equal to the password of the document. The two ways to supply a PDF are described in detail below.

Uploading a File

Send a multipart/form-data POST request and the PDF file that you want to validate to the /api/validate_pdfa endpoint. The name of the attached file should be file. The request looks like this:

Request

$ curl http://localhost:5000/api/validate_pdfa \
  -X 'POST' \
  -H "Authorization: Token token=secret" \
  -F file=@example.pdf

Providing a URL of a File

Send a multipart/form-data POST request with the URL of the file that you want to validate to the /validate_pdfa endpoint. The value of the url file part should be the remote URL of the PDF file. The request looks like this:

Request

$ curl http://localhost:5000/api/validate_pdfa \
  -X 'POST' \
  -H "Authorization: Token token=secret" \
  -F url='https://www.remote-file-url.com/example.pdf'

Response Format

The response of the validate PDF/A request is a JSON object with details of conformance and a validation report. Here are two examples:

Successful validation

{
	"IsValid": true,
	"Conformance": "PDF/A-2b",
	"ValidationLog": {
		"ValidationReport": {
			"ValidationProfile": {
				"@Conformance": "PDF/A",
				"@Part": "2",
				"@Level": "B"
			},
			"ValidationResult": {
				"@IsCompliant": "True",
				"@Statement": "PDF file is compliant with validation profile requirements."
			},
			"Details": { "FailedChecks": { "@Count": "0" } }
		}
	}
}

Failed validation

{
	"Conformance": "None",
	"IsValid": false,
	"ValidationLog": {
		"ValidationReport": {
			"Details": {
				"FailedChecks": {
					"@Count": "1",
					"Check": [
						{
							"@ID": "MissingXMPMetadata",
							"@OccurenceCount": "1",
							"Occurence": {
								"@Context": "Document",
								"@ObjReference": "None",
								"@Statement": "Document XMP metadata is missing."
							}
						},
						{
							"@ID": "MissingMarkInfoDictionary",
							"@OccurenceCount": "1",
							"Occurence": {
								"@Context": "Document",
								"@ObjReference": "None",
								"@Statement": "MarkInfo dictionary is missing."
							}
						},
						{
							"@ID": "MissingStructTreeRootDictionary",
							"@OccurenceCount": "1",
							"Occurence": {
								"@Context": "Document",
								"@ObjReference": "None",
								"@Statement": "StructTreeRoot dictionary not found."
							}
						}
					]
				}
			},
			"ValidationProfile": {
				"@Conformance": "PDF/A",
				"@Level": "A",
				"@Part": "1"
			},
			"ValidationResult": {
				"@IsCompliant": "False",
				"@Statement": "PDF file is not compliant with validation profile requirements."
			}
		}
	}
}