Skip to main content
POST
Verifies a South African driving license against the NATIS / Department of Transport register. Didit exposes this service through POST /v3/database-validation/ so you can verify the submitted data against the authoritative source and receive normalized match results.

Coverage

  • Coverage: —
  • Country: South Africa
  • Service ID: zaf_drivers_license
  • Data domain: Identity
  • Category: DriverLicence

Inputs

  • Required inputs: national_id, last_name, initials, licence_number
  • Optional inputs: first_name, date_of_birth, vendor_data
  • Consent: Not required
  • Workflow availability: Available in workflow with field mapping
  • Coverage: —
  • Price: $0.70 per successful query
In a workflow, initials and licence_number are not printed on an identity document, so no step produces them on their own. Collect them from a Questionnaire answer, a Document AI extraction field, or a value you send when you create the session, and map each one on the Database Validation step. Until they are mapped the workflow editor shows this service disabled and names the missing input; at run time a missing input means the check is skipped before any query, so you are never billed for a database that could not be asked.

Body parameters

string
default:"ZAF"
required
ISO 3166-1 alpha-3 country code for this database service.Example: ZAF
string
default:"zaf_drivers_license"
required
Array containing this service ID. Pinning the service keeps the request scoped to this exact database.Example: zaf_drivers_license
string
default:"SAMPLE-NID-12345"
required
National identity number for this service.Example: SAMPLE-NID-12345
string
default:"Doe"
required
Family name to validate.Example: Doe
string
default:"JD"
required
initials value required by this database service.Example: JD
string
default:"LIC123456"
required
licence_number value required by this database service.Example: LIC123456
string
default:"John"
Given name to validate.Example: John
string
default:"1990-01-01"
Date of birth in YYYY-MM-DD format.Example: 1990-01-01
string
default:"user-1234"
Your stable user reference for this person, such as your internal user ID. Didit uses it to link standalone checks to the same end user and reduce duplicate-detection noise.Example: user-1234

Input rules & validation notes

  • Send the fields listed above exactly as captured from the user or document.
  • Didit validates required fields before calling the database. Requests rejected before source lookup are not charged.

How to call it

Returned data

The exact fields surfaced in source_data depend on what the registry returns. The generated example for zaf_drivers_license currently documents this normalized shape:
  • date_of_birth
  • first_name
  • identification_number
  • last_name

Pricing & SLAs

South Africa - Driving License Verification queries are billed only when Didit receives a conclusive result from the validation source.
  • Per-call price: $0.70 USD.
  • Billing: per successful query. You are not charged when the registry is unreachable, when required fields are missing, or when the request is rejected before reaching the source.
  • Latency: typical p95 < 2 s.
  • Availability: 99.9% per quarter on Didit’s side; downstream source availability varies by country and dataset.

What a MATCH confirms

This is a record match against the driving-licence register, not a licence-standing check. You send a South African ID number and a licence number (plus surname and initials as cross-checks); the register is asked whether it holds that licence for that person, and validation reports how each submitted field compared with the record. A MATCH therefore means this licence number belongs to this person on the register. It does not assert that the licence is currently valid to drive on. source_data carries the record the register returned:
  • identification_number - the licence number held on the record.
  • first_name, last_name - the forenames and surname on the record.
  • vehicle_codes - the vehicle codes (licence classes) the record carries, e.g. EB, C1.
  • expiration_date - the expiry date of the licence card on the record.
What is not returned. There is no suspension, cancellation, withdrawal, endorsement or demerit-point field: the register does not answer those through this service, so a MATCH must never be worded to your users as “the licence is valid and in good standing”. expiration_date is the one standing-adjacent fact you get - compare it with the session date to decide whether the licence has expired, and treat that as a rule of your own rather than as part of the match outcome. If you need to state this in terms and conditions, word it as: Didit confirms the licence details against the national register and returns the licence’s classes and expiry date - not that Didit confirms the holder is licensed to drive today.

Continue reading