{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/dvla-gov-uk/json-schema/dvla-gov-uk-driving-licence-renewal-request-schema.json",
  "title": "DrivingLicenceRenewalRequest",
  "description": "request",
  "x-generated": "2026-11-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/dvla-gov-uk-driving-licence-renewal-openapi.yml#/components/schemas/DrivingLicenceRenewalRequest",
  "type": "object",
  "additionalProperties": false,
  "properties": {
    "handler": {
      "$ref": "#/$defs/Handler"
    },
    "drivingLicenceNumber": {
      "description": "A UK driving licence number",
      "type": "string",
      "maxLength": 16,
      "minLength": 16,
      "pattern": "^[A-Z9]{5}\\d{6}[A-Z9]{2}[A-HJ-NPR-X2-9]{1}[A-Z]{2}$"
    },
    "transactionType": {
      "description": "A field denoting the transaction type \n TYRR for a renewal reminder \n TYRPC for a photocard renewal",
      "type": "string",
      "enum": [
        "TYRR",
        "TYRPC"
      ]
    },
    "applicationReferenceNumber": {
      "description": "The application reference number as detailed in the barcode part of a D798 form",
      "type": "string",
      "maxLength": 29
    },
    "feePaid": {
      "description": "The total amount taken from the customer at the counter for this transaction in pence",
      "type": "integer",
      "minimum": 0,
      "maximum": 999999
    },
    "investigationRequired": {
      "type": "boolean",
      "description": "When the indicator is set to Y, the clerk has decided that the DVLA should investigate the application"
    },
    "dateOfBirth": {
      "type": "string",
      "format": "date",
      "description": "The customer's date of birth"
    },
    "daytimePhone": {
      "type": "string",
      "minLength": 1,
      "maxLength": 30,
      "description": "A daytime UK contact number"
    },
    "photo": {
      "$ref": "#/$defs/Photo"
    },
    "signatureImage": {
      "description": "Driver signature contentMediaType: \"image/png\", \"contentEncoding\": \"base64\"",
      "type": "string"
    },
    "updateAddress": {
      "$ref": "#/$defs/UpdateAddress"
    },
    "licenceStatus": {
      "$ref": "#/$defs/LicenceStatus"
    },
    "twoDBarcode": {
      "description": "159 character representation of the contents of the Reminder barcode",
      "type": "string",
      "maxLength": 159
    },
    "organDonor": {
      "$ref": "#/$defs/OrganDonor"
    },
    "photoCardFront": {
      "description": "Photocard front - only required for Photocard (non Reminder) applications. contentMediaType: \"image/jpeg\", \"contentEncoding\": \"base64\"",
      "type": "string"
    },
    "photoCardBack": {
      "description": "Photocard back - only required for Photocard (non Reminder) applications. contentMediaType: \"image/jpeg\", \"contentEncoding\": \"base64\"",
      "type": "string"
    }
  },
  "required": [
    "handler",
    "transactionType",
    "photo",
    "feePaid",
    "signatureImage"
  ],
  "$defs": {
    "BfpoAddress": {
      "description": "British Forces Post Office address, where BFPO Number is mandatory from the current list of operational BFPO numbers, and postcode is optional",
      "properties": {
        "line1": {
          "title": "Line 1",
          "description": "Free text, expected to be UNIT or REGIMENT.",
          "type": "string",
          "minLength": 1,
          "maxLength": 45
        },
        "line2": {
          "title": "Line 2",
          "description": "Free text, expected to be OPERATION.",
          "type": "string",
          "minLength": 1,
          "maxLength": 45
        },
        "line3": {
          "title": "Line 3",
          "description": "Free text, expected to be BARRACKS or CAMP or RAF STATION or NAVAL SHIP (if applicable).",
          "type": "string",
          "minLength": 1,
          "maxLength": 45
        },
        "line4": {
          "title": "Line 4",
          "description": "Free text",
          "type": "string",
          "minLength": 1,
          "maxLength": 45
        },
        "bfpoNumber": {
          "title": "BFPO Number",
          "type": "integer",
          "minimum": 1,
          "maximum": 9999
        },
        "postcode": {
          "type": "string",
          "minLength": 1,
          "maxLength": 8
        }
      },
      "required": [
        "line1",
        "bfpoNumber"
      ]
    },
    "DPS": {
      "description": "Royal Mail Delivery Point Suffix where matched to a PAF address. Uniquely identifies each address (Delivery Point) within a single postcode",
      "type": "string",
      "maxLength": 2
    },
    "Handler": {
      "description": "Request meta data",
      "type": "object",
      "properties": {
        "originatorId": {
          "description": "Identifies the intermediary organisation supporting the application",
          "type": "string",
          "maxLength": 256
        },
        "transactionId": {
          "$ref": "#/$defs/TransactionID"
        },
        "userId": {
          "description": "This is the identifier for the Post Office clerk who carried out the enrolment in the branch",
          "type": "string",
          "maxLength": 256
        },
        "branchId": {
          "description": "Optionally identifies the branch at which the application took place",
          "type": "string",
          "maxLength": 256
        },
        "terminalId": {
          "description": "This is the terminal ID workstation that was used during enrolment",
          "type": "string",
          "maxLength": 256
        },
        "localDateTime": {
          "description": "The branch date and time stamp when the transaction commenced",
          "type": "string",
          "format": "date-time"
        }
      },
      "required": [
        "transactionId"
      ]
    },
    "Language": {
      "type": "string",
      "description": "Specifies address language ISO code, CY for Welsh, EN for English",
      "enum": [
        "EN",
        "CY"
      ]
    },
    "LicenceStatus": {
      "description": "Licence Data",
      "type": "object",
      "properties": {
        "photocardSurrendered": {
          "description": "Whether the photo card part of the licence has been surrendered to a third party",
          "type": "boolean"
        },
        "photocardIssueNumber": {
          "description": "The licence photo card issue number",
          "type": "string",
          "minLength": 1,
          "maxLength": 2
        },
        "lostMarker": {
          "description": "A flag denoting whether the licence has been lost or not",
          "type": "boolean"
        },
        "stolenMarker": {
          "description": "A flag denoting whether the licence has been stolen or not",
          "type": "boolean"
        },
        "defacedMarker": {
          "description": "A flag denoting whether the licence has been defaced or not",
          "type": "boolean"
        },
        "destroyedMarker": {
          "description": "A flag denoting whether the licence has been destroyed or not",
          "type": "boolean"
        }
      }
    },
    "OrganDonor": {
      "description": "Organ Donor",
      "type": "object",
      "properties": {
        "anyOrgans": {
          "description": "Any Organs",
          "type": "boolean"
        },
        "kidneys": {
          "description": "Kidneys",
          "type": "boolean"
        },
        "liver": {
          "description": "Liver",
          "type": "boolean"
        },
        "heart": {
          "description": "Heart",
          "type": "boolean"
        },
        "cornea": {
          "description": "Cornea",
          "type": "boolean"
        },
        "pancreas": {
          "description": "Pancreas",
          "type": "boolean"
        },
        "lungs": {
          "description": "lungs",
          "type": "boolean"
        }
      }
    },
    "Photo": {
      "description": "Photo image and qualify checks",
      "type": "object",
      "properties": {
        "photographImage": {
          "description": "Driver photograph contentMediaType: \"image/jpeg\", \"contentEncoding\": \"base64\"",
          "type": "string"
        },
        "photoOverride": {
          "type": "boolean",
          "description": "When the indicator is set to Y, the clerk has indicated a concern with photo compliance"
        },
        "icaoCompliant": {
          "description": "Flag to indicate whether or not the facial image is ICAO compliant",
          "type": "boolean"
        },
        "eyesOpen": {
          "description": "Flag to indicate whether eyes are open",
          "type": "boolean"
        },
        "exposure": {
          "description": "Flag to indicate whether exposure levels are correct",
          "type": "boolean"
        },
        "frontalView": {
          "description": "Flag to indicate whether the image is a frontal view",
          "type": "boolean"
        },
        "greyscaleDensity": {
          "description": "Flag to indicate whether the greyscale density is correct",
          "type": "boolean"
        },
        "uniformLighting": {
          "description": "Flag to indicate whether lighting is uniform across face image",
          "type": "boolean"
        },
        "headWidth": {
          "description": "Flag to indicate whether head width is within acceptable range",
          "type": "boolean"
        },
        "headLength": {
          "description": "Flag to indicate whether head length is within acceptable range",
          "type": "boolean"
        },
        "widthHeightRatio": {
          "description": "Flag to indicate whether face width to height ratio is correct",
          "type": "boolean"
        },
        "resolution": {
          "description": "Flag to indicate whether image resolution is acceptable",
          "type": "boolean"
        },
        "verticalPosition": {
          "description": "Flag to indicate whether vertical image position is acceptable",
          "type": "boolean"
        },
        "horizontallyCentered": {
          "description": "Flag to indicate whether image is horizontally centered",
          "type": "boolean"
        }
      },
      "required": [
        "photographImage"
      ]
    },
    "StructuredAddress": {
      "description": "Address containing Royal Mail PAF fields for a single address including DPS, which if provided allows for postal cost savings alongside Mailsort information added upon print.\nNote that at least one of the following fields must be provided with a non-empty value in order to provide a useful address to print for delivery to a recipient:\npoBoxNumber, organisationName, departmentName, subBuildingName,  buildingName, buildingNumber, dependentThoroughfareName,  thoroughfareName, doubleDependentLocality, dependentLocality\n",
      "properties": {
        "poBoxNumber": {
          "type": "string",
          "description": "PO Box number. When the Post Office (PO) Box number field is populated, it is typically prefixed with 'PO BOX ' upon output. Note that the PO Box details can occasionally consist of a combination of numbers and letters e.g. HK860. PO Box Numbers are only allocated to Large Users",
          "maxLength": 6
        },
        "organisationName": {
          "type": "string",
          "description": "Name of the organisation registered at this address",
          "maxLength": 60
        },
        "departmentName": {
          "type": "string",
          "description": "Used to supplement Organisation Name to identify a department within the organisation",
          "maxLength": 30
        },
        "subBuildingName": {
          "type": "string",
          "description": "When a premise is split into individual units such as flats, apartments or business units. Cannot be present without either building_name or building_number",
          "maxLength": 30
        },
        "buildingName": {
          "type": "string",
          "description": "Name of residential or commercial premise",
          "maxLength": 50
        },
        "buildingNumber": {
          "type": "string",
          "description": "Number to identify premise on a thoroughfare or dependant thoroughfare. Limited to 4 numbers within PAF - see PAF programmers guide for locating non-numerical building numbers",
          "maxLength": 4
        },
        "dependentThoroughfareName": {
          "type": "string",
          "description": "Used to supplement thoroughfare. When a thoroughfare name is used twice in the same Post Town, the dependant thoroughfare is added to uniquely identify a delivery point",
          "maxLength": 80
        },
        "thoroughfareName": {
          "type": "string",
          "description": "A main road or passageway. When the locality information does not identify the location of an address there will be thoroughfare information available. Includes thoroughfare name (60) and type descriptor (20) combined, where common descriptors such as road, avenue, court are provided separately in PAF which can help with abbreviation",
          "maxLength": 80
        },
        "doubleDependentLocality": {
          "type": "string",
          "description": "Used to distinguish between similar or same thoroughfares within a dependent locality, e.g. small villages",
          "maxLength": 35
        },
        "dependentLocality": {
          "type": "string",
          "description": "Dependent locality areas may define an area within a post town",
          "maxLength": 35
        },
        "postTown": {
          "type": "string",
          "description": "A Post Town is mandatory for delivery of mail to a Delivery Point. This is not necessarily the nearest town geographically, but a routing instruction to the Royal Mail delivery office sorting mail for that Delivery Point",
          "maxLength": 30
        },
        "postcode": {
          "type": "string",
          "description": "Postcode including space. PAF postcodes are max length 7 without space, but for consistency and ease of use storage, transmission and display formats should include it",
          "maxLength": 8
        },
        "country": {
          "type": "string",
          "description": "Optionally specific address country, e.g 'Wales'",
          "maxLength": 64
        },
        "language": {
          "$ref": "#/$defs/Language"
        },
        "dps": {
          "$ref": "#/$defs/DPS"
        },
        "uprn": {
          "type": "string",
          "description": "Unique Property Reference Number. Ordnance Survey unique alphanumeric identifier for every spatial address in Great Britain",
          "maxLength": 12
        },
        "udprn": {
          "type": "string",
          "description": "Unique Delivery Point Reference Number. An eight digit unique numeric code for delivery points on the PAF File as allocated by Royal Mail",
          "maxLength": 8
        }
      },
      "required": [
        "uprn",
        "postTown",
        "postcode",
        "language"
      ]
    },
    "TransactionID": {
      "description": "Value used to uniquely identify a transaction within the client system, and to identify a request/response pair",
      "type": "string",
      "minLength": 1,
      "maxLength": 36
    },
    "UnstructuredAddress": {
      "description": "Address manually entered by a user",
      "properties": {
        "line1": {
          "type": "string",
          "minLength": 1,
          "maxLength": 45
        },
        "line2": {
          "type": "string",
          "minLength": 0,
          "maxLength": 45
        },
        "line3": {
          "type": "string",
          "minLength": 0,
          "maxLength": 45
        },
        "line4": {
          "type": "string",
          "minLength": 0,
          "maxLength": 45
        },
        "postTown": {
          "type": "string",
          "minLength": 0,
          "maxLength": 45
        },
        "postcode": {
          "type": "string",
          "minLength": 1,
          "maxLength": 8
        },
        "language": {
          "$ref": "#/$defs/Language"
        },
        "dps": {
          "$ref": "#/$defs/DPS"
        },
        "pafIndicator": {
          "type": "boolean",
          "description": "Used by clients unable to supply a StructuredAddress or UnstructuredAddress with DPS. When the indicator is set to true, this indicates this is a valid address retrieved from Royal Mail Postcode Address File (PAF)"
        }
      },
      "required": [
        "line1",
        "postcode",
        "language"
      ]
    },
    "UpdateAddress": {
      "description": "If supplied, at least one and only one of a Structured PAF, Unstructured Address lines or BFPO address must be provided - oneOf notation avoided due to not being ubiquitously supported. This is the address to be used for external dispatch. This will be converted into a standard printable address format for output in the address window. For bulk mail handling, the majority (90% at the time of writing) of dispatch addresses need to match valid Royal Mail address with corresponding DPS and mailsort code information.",
      "properties": {
        "structuredAddress": {
          "$ref": "#/$defs/StructuredAddress"
        },
        "unstructuredAddress": {
          "$ref": "#/$defs/UnstructuredAddress"
        },
        "bfpoAddress": {
          "$ref": "#/$defs/BfpoAddress"
        }
      }
    }
  }
}