Registry entry
Tanzania Application for Registration of Motor Vehicle (Form MV10)
The Tanzania Revenue Authority's (TRA) standard application form, printed reference "MV10", for registering a motor vehicle in Tanzania's Central Motor Vehicle Registration System (CMVRS). TRA administers motor vehicle registration under the Road Traffic Act alongside its taxation mandate. The form captures the reason for the application (importation, taken-on, locally-manufactured, re-imported, re-constructed, recovered-stolen, or other), the particulars of the vehicle's owner and, when different, its titleholder, the vehicle's own identifying and technical particulars, and supporting-documentation reference numbers (customs clearance, SARPCCO clearance, insurance, prior/foreign registration). The form's own reference legends for Vehicle Category, Colour, and Number Plates are modeled as closed enumerations keyed to the numeric/coded values the source itself prints. Two categories of the source form are deliberately out of scope, each an administrative/back-office element rather than applicant-supplied data: the "For official use only" block (Personal Plate Number, Registration No, Vehicle Control No, Date, Office Code, Officer Code, and Official stamp & signature — a post-processing registration record TRA staff complete once the application is approved, not something the applicant supplies when filing), and the wet-ink "Owner's Signature"/"Titleholder's Signature" fields themselves, excluded per this registry's standing convention on physical signatures (their adjoining declaration dates are modeled as ownerDeclarationDate/titleholderDeclarationDate). GovSchema is an independent, non-profit standards body and is not affiliated with, endorsed by, or operated by the Government of the United Republic of Tanzania or the Tanzania Revenue Authority.
Registry entry
tz/tra/vehicle-registration
Authoritative source MV10, "Application for Registration of Motorvehicle", Tanzania Revenue Authority
Machine access
- Schema document
registry/tz/tra/vehicle-registration/1.0.0/schema.jsonapplication/schema+json- Verification record
registry/tz/tra/vehicle-registration/1.0.0/VERIFICATION.mdtext/markdown- Registry catalog
registry/index.jsonone record per schema id
Field reference
58 fields, read from the published schema.json, with names, types, requiredness, and validation as the document states them. The live government form remains the authoritative source.
Fields
-
applicationReasonenum requiredThe reason for this registration application. Judgment call: the source form carries no printed asterisk on this checkbox group, but the application cannot be meaningfully processed without it.
enum: 7 values -
ownerCategoryenum requiredCategory of the vehicle's owner. The source form states: 'Owner's identity number and Owner Category must be stated, if not the application will be rejected.'
enum: 14 values -
ownerTinNumberstring optionalThe owner's Taxpayer Identification Number, when used as the Owner Identification Number. Per the source's own required-if-not-rejected note (see ownerCategory), at least one of ownerTinNumber/ownerOtherIdNumber is expected to be present; this 'at least one of two optional fields' rule is disclosed here rather than encoded, since v0.3's field model has no such cross-field primitive.
length: 0–30classification: sensitive-pii -
ownerOtherIdNumberstring optionalAn alternative Owner Identification Number, when the owner is not identified by TIN Number.
length: 0–30classification: sensitive-pii -
ownerDeclarationDatedate requiredDate the owner signs the declaration that all particulars furnished are true and correct. The adjoining 'Owner's Signature' is excluded per this registry's standing convention on physical signatures.
-
titleholderCategoryenum optionalCategory of the vehicle's titleholder, only applicable when the titleholder is different from the owner. A Titleholder is someone who has sold/donated a vehicle under a contractual arrangement with the owner (e.g. a bank, employer, or car dealer financing the vehicle).
enum: 14 values -
titleholderTinNumberstring optionalTIN Number
length: 0–30classification: sensitive-pii -
titleholderOtherIdNumberstring optionalOther Number
length: 0–30classification: sensitive-pii -
titleholderNamestring optionalTitleholder's Name
length: 0–150classification: pii -
titleholderAgeinteger optionalAge
range: 0–130classification: pii -
titleholderDeclarationDatedate optionalDate the titleholder signs the declaration that all particulars furnished are true and correct, only applicable when a titleholder distinct from the owner is being declared. The adjoining 'Titleholder's Signature' is excluded per this registry's standing convention on physical signatures.
-
classNumberstring optionalCarries no accompanying legend or further label anywhere on the source; modeled as free text.
length: 0–30 -
yearOfMakeinteger requiredYear of Make
range: 1900–2100 -
vehicleMakestring requiredMake
length: 0–100 -
vehicleModelstring requiredModel
length: 0–100 -
modelNumberstring optionalModel No
length: 0–50 -
vehicleCategoryenum requiredVehicle Category legend: 1 Motorcycle (less than 3 wheels); 2 Motor Tricycle; 3 Light Passenger Vehicle (GVM 3,500 kg or less); 4 Heavy Passenger Vehicle (GVM >3,500 kg); 5 Light Load Vehicle (GVM 3,500 kg or less); 6 Heavy load Vehicle (GVM >3,500 kg not to draw); 7 Trailer; 8 Agriculture Tractor; 9 Agriculture Trailer; 10 Mining / Road Construction Equipment; 11 Other.
enum: 11 values -
bodyTypestring optionalBody Type
length: 0–100 -
locallyManufacturedboolean optionalThe printed checkbox trio carries an unexplained leading checkbox before the Yes/No pair, with no separate label or blank of its own; this field models only the Yes/No answer, disclosed as an interpretive judgment call. Distinct from, but overlapping in substance with, Application Reason's own 'Locally manufactured' enum option — both are printed on the source and both are modeled here as an observed redundancy in the source form itself.
-
vehicleConfigurationenum requiredJudgment call: no printed asterisk, but every vehicle being registered structurally falls into exactly one of these four configurations.
enum: self_propelled | trailer | semitrailer | other -
engineNumberstring optionalEngine No
length: 0–50 -
engineCubicCapacitynumber optionalNote 1 on the source reads: 'State all, if available, at least one must be indicated' over this field, Engine KW Capacity, and Engine HP Capacity. This 'at least one of three optional fields' rule is disclosed here rather than encoded, since v0.3's field model has no such cross-field primitive.
range: 0–∞ -
engineKwCapacitynumber optionalSee Note 1, quoted on engineCubicCapacity.
range: 0–∞ -
engineHpCapacitynumber optionalSee Note 1, quoted on engineCubicCapacity.
range: 0–∞ -
transmissionTypeenum optionalTransmission
enum: manual | automatic | other -
fuelTypeenum optionalFuel Type
enum: petrol | diesel | electricity | other -
tareWeightnumber optionalThe vehicle's unladen/tare weight. Unit not printed on the source; kilograms is TRA's and the region's standard convention (matching engine capacity conventions on this same form) rather than an asserted printed unit.
range: 0–∞ -
grossWeightnumber optionalThe vehicle's gross weight (GVM, referenced by the Vehicle Category legend). Unit not printed on the source; modeled as kilograms per the legend's own 'GVM ... kg' phrasing.
range: 0–∞ -
numberOfAxlesinteger optionalNote 2 on the source reads: 'For Heavy Duty Vehicles and Semi-trailers only. State all axle distances, starting from the front axle.' over this field and axleDistance. Not encoded as visibleWhen since 'Heavy Duty Vehicles' does not map onto a single unambiguous vehicleCategory/vehicleConfiguration value the source itself names; disclosed here instead.
range: 1–∞ -
axleDistancestring optionalSee Note 2, quoted on numberOfAxles. Note 2 calls for 'all axle distances, starting from the front axle' into what is structurally a single blank on the source; modeled as free text (not a number) since v0.3 has no repeating-value field type for multiple per-axle distances.
length: 0–100 -
vehicleColorCodeenum requiredColour legend: 1 White; 2 Blue; 3 Yellow; 4 Red; 5 Green; 6 Black; 7 Brown; 8 Grey; 9 Pink; 10 Multicolour.
enum: 10 values -
vehicleColorOtherstring optionalSupplementary free-text colour description, alongside the closed vehicleColorCode legend, for a shade the numbered legend does not capture precisely.
length: 0–50 -
seatingCapacityinteger optionalSeating Capacity
range: 0–∞ -
vehicleClassPurposeenum optionalClass/purpose
enum: private | tax | other | commercial | emergency | donor_funded_project -
roadWorthinessCertificateNumberstring optionalRoad worthiness Certificate No.
length: 0–50 -
roadWorthinessDatedate optionalRoad worthiness Date
-
firstRegistrationOrPurchaseDatedate optionalFirst Registration / Purchase Date
-
registrationBookNumberstring optionalRegistration Book No
length: 0–50 -
customsClearanceCertificateNumberstring optionalCustoms Clearance Certificate No.
length: 0–50 -
customsClearanceCertificateDatedate optionalCustoms Clearance Certificate Date
-
importedFromstring optionalImported from
length: 0–100 -
customsDutyExemptedboolean optionalCustoms Duty Exempted
-
customsClearanceReceiptNumberstring optionalCustoms Clearance Receipt No
length: 0–50 -
sarpccoClearanceCertificateDatedate optionalSARPCCO Clearance Certificate Date
-
sarpccoClearanceCertificateNumberstring optionalSARPCCO Clearance Certificate No
length: 0–50 -
foreignRegistrationNumberstring optionalForeign Registration No.
length: 0–50 -
currentRegistrationNumberstring optionalCurrent Registration No.
length: 0–50 -
insuranceCompanyNamestring optionalInsurance Company Name
length: 0–150 -
insuranceNumberstring optionalInsurance Number
length: 0–50 -
insuranceTypestring optionalInsurance Type
length: 0–50 -
insuranceStartDatedate optionalInsurance Start Date
-
insuranceExpiryDatedate optionalInsurance Expiry Date
-
numberPlateTypeenum optionalNumber plates (see below)
enum: ordinary | personal | special -
specialRegistrationPlatePrefixenum optionalIf a Special Registration Plate
enum: su | sm | rac | tcd | other -
personalPlateNumberOrNamestring optionalThe source notes: 'A Personal Registration Plate must not be obscene, vulgar or offensive and the use of it must, if company or product name, be acknowledged in writing by the owner of the company or product.'
length: 0–50 -
numberPlateSizeenum optionalNumber plate size
enum: 52x11 | 28x20 | 24x13_mc | 34x18 -
numberPlateQualityenum optionalPrinted once per number-plate-size row ('and quality: 1☐ 2☐'), with no legend anywhere distinguishing what grades '1' and '2' mean. Modeled as a single field since only one plate size (and therefore one quality tick) applies per application; the unresolved meaning of the two grades is disclosed rather than guessed.
enum: 1 | 2 -
numberPlateDeliveryAddressstring optionalState the TRA Regional Office or other delivery address for the number plates.
length: 0–200
Verification record
This file is the source-review record for this document version, per the manual-source-review-v1 practice.
Current claim
status:draftverification.method:manual-source-review-v1verification.lastVerifiedAt:2026-07-15
Why this schema and why now (GOV-3214)
GOV-3214 is a child issue of the GOV-3212 "GovSchema Standard Research" cycle (2026-07-15), scouted after that cycle found Tanzania at 3 of 6 verticals (Business Formation/GOV-3113, Taxes/GOV-3101, National ID & Civic Documents/GOV-3152), with DMV, Visa, and Passport left as open unscreened backlog. A related weaker candidate — TRA's Driver's License Guide, a marketing walkthrough for the login-gated IDRAS online portal — was screened by the scouting note and confirmed a soft dead end for a standalone driving-license schema. TRA's own Form MV10 (vehicle registration) was the viable path for this vertical instead. This document opens Tanzania's DMV vertical (4th of 6).
Source
- URL:
https://www.tra.go.tz/images/uploads/forms/APPLICATION_FOR_REGISTRATION_MOTOR_VEHICLE.pdf - Retrieved: 2026-07-15, HTTP 200,
content-type: application/pdf, 1,111,676 bytes, fetched directly withcurlfrom the officialtra.go.tzdomain — no login/CAPTCHA/WAF gate encountered. - sha256:
45c9fe1cee298c16d91c0aa0c38294373e375f2017d9d923b3a8d5bb62fe3ee4 - 2 pages. Each page's raw MediaBox is landscape A4 (841.92×595.2pt) with a 90-degree
/Rotateentry, so the document renders and prints as portrait A4 — confirmed viapdfjs-dist'spage.view/page.getViewport(). - TRA already anchors Tanzania's Taxes (
tz/tra/itx201-01-e-individual-income-tax-return) and Business Formation entries; TRA also administers motor vehicle registration under the Road Traffic Act, alongside its taxation mandate.
Extraction method — genuine scanned/raster PDF, no text layer
pdfjs-dist@3.11.174'sgetTextContent()returned zero text items on both pages.page.getAnnotations()returned zero widgets on both pages — confirmed not an AcroForm either.- Both pages were rendered with
pdfjs-dist+node-canvasat 3x scale (1785×2525px per page), then cropped at higher effective resolution section-by-section (owner/titleholder blocks, the class/purpose row, the number-plate legend, the vehicle-category/colour legend, the official-use block) to resolve every field label and legend value. The full-page renders and every crop referenced below are the actual basis for the field list — the same profile asmd/asp/vehicle-registration(GOV-3157): a genuine text-extraction gap (zero recoverable text), not a vector-drawn grid pdfjs-dist's text layer merely missed. - Both page renders carry faint mirrored bleed-through text from the opposite side of the physical sheet (visible in the initial page-1 render as backwards page-2 paragraph text). Confirmed as scan bleed-through, not genuine page-1 content, by a targeted high-resolution crop of the affected whitespace on page 1 (see the "no dedicated Owner's Name field" finding below) — the crop shows only the mirrored page-2 notes text, no forward-reading page-1 content underneath it.
Field-by-field derivation and judgment calls
- No printed required/optional convention anywhere. This form carries no asterisks, bold markers, or other explicit required/optional convention. Requiredness below is a disclosed judgment call based on which data this registration transaction structurally cannot proceed without:
applicationReason,ownerCategory(the source's own page-2 note states the application "will be rejected" if Owner Category and identity number are not stated),ownerDeclarationDate, and the vehicle's coreyearOfMake/vehicleMake/vehicleModel/vehicleCategory/vehicleColorCode/vehicleConfiguration. Vehicle technical specifications (weights, axle counts, engine capacities, transmission, class/purpose, road-worthiness/insurance/customs reference numbers) are modeled optional. - No dedicated "Owner's Name" field. The Particulars of Owner block has no name blank anywhere — only Owner Category, an Owner Identification Number table (TIN Number / Other Number), and the declaration/date/ signature. This contrasts with the Particulars of Titleholder block, which does have an explicit "Titleholder's Name" / "Age" line. The "USE BLOCK LETTERS" instruction beneath the Owner Identification Number table sits over genuinely blank whitespace, confirmed by a targeted high-resolution crop, with no printed line before the declaration box. Page 2's own explanatory note ("In most cases the ID number will be identified against the TIN system or other similarly reference data tables") explains why: TRA resolves the owner's identity from the tabulated TIN/Other Number rather than a free-text name field. This is a genuine, disclosed source finding — no
ownerNamefield is fabricated to fill the apparent gap. ownerTinNumber/ownerOtherIdNumberandtitleholderTinNumber/titleholderOtherIdNumberboth optional. The source's own required-if-not-rejected note structurally implies at least one of the owner pair must be present, but v0.3's field model has no "at least one of two optional fields" cross-field primitive — disclosed in each field'sdescriptionrather than encoded.classNumber("Class No"). The very first blank in the Motorvehicle Particulars table, carrying no accompanying legend or further label anywhere on either page. Modeled as free text rather than asserting an unverified meaning.vehicleCategory/vehicleColorCodelegends. Each is a single blank on the Motorvehicle Particulars table ("(See below)") referencing a closed legend table printed lower on page 2 (11 vehicle categories, 10 colours). Modeled asenumfields keyed to the legend's own printed numeric codes, with every legend value transcribed verbatim into the fielddescription(v0.3 has no labelled-enum-option member, GSP-0003).vehicleColorOther("Other Colour"). A supplementary free-text box alongside the closed 10-value colour legend, for a shade the legend does not capture precisely; modeled as a separate optional field rather than folded intovehicleColorCode.locallyManufactured. The printed checkbox trio ("☐ Locally Manufactured ☐Yes ☐No") carries an unexplained leading checkbox before the Yes/No pair, with no separate label or blank of its own. Modeled as a single boolean capturing only the Yes/No answer; the leading checkbox is disclosed as unmodeled rather than guessed at. This field is a distinct data point from Application Reason's own "Locally manufactured" enum option on page 1 — both are printed on the source and both are modeled, disclosed here as an observed redundancy in the source form itself, not a modeling error.- Note 1 ("State all, if available, at least one must be indicated"), printed over Engine Cubic Capacity (1) / Engine KW Capacity (1) / Engine HP Capacity (1). An "at least one of three optional fields" rule with no cross-field primitive to express it in v0.3 — disclosed on each of the three fields'
descriptionrather than encoded. - Note 2 ("For Heavy Duty Vehicles and Semi-trailers only. State all axle distances, starting from the front axle."), printed over Number of Axles (2) / Axle Distance (Centimeter) (2). Not encoded as
visibleWhensince "Heavy Duty Vehicles" does not map onto a single unambiguousvehicleCategory/vehicleConfigurationvalue the source itself names — disclosed on both fields'descriptioninstead.axleDistanceis modeled as free text (not a number) since the note calls for "all axle distances" into what is structurally a single blank, and v0.3 has no repeating-value field type (GSP-0009 remains deferred). numberPlateQuality("and quality: 1☐ 2☐"), repeated once per number-plate-size row with no legend anywhere distinguishing grades 1/2. Modeled as a single enum field since only one plate size (and therefore one quality tick) applies per application; the unresolved meaning of the two grades is disclosed in the field'sdescriptionrather than guessed.visibleWhen/requiredWhenconditions attached only where the source's own printed label explicitly and unambiguously scopes a field, e.g. "(For Take-on vehicle only)" →registrationBookNumber, "(For imported vehicles only)" →foreignRegistrationNumber, the italic "Insurance Information for Take-on vehicles only" header → the five insurance fields, and "Not mandatory for Take-on registration" →numberPlateDeliveryAddress'srequiredWhen. The Supporting Documentation column's customs/SARPCCO reference-number fields (customsClearanceCertificateNumber,sarpccoClearanceCertificateNumber, etc.) carry no such explicit per-field scoping label on page 2 itself — only the separate page-1 attachment-requirement bullets reference Application Reason, which are modeled viadocuments[].requiredWheninstead — so these page-2 reference-number fields are left as plain optional fields rather than an inferredvisibleWhenthis registry cannot attribute to explicit source text.documents[](6 entries).ownerDeclaration/titleholderDeclarationmodel the two "I declare that all the particulars furnished by me in this form are true and correct" attestation boxes verbatim (categoryattestation, statement text quoted exactly); the wet-ink "Owner's Signature"/"Titleholder's Signature" lines themselves are excluded per this registry's standing convention on physical signatures, with their adjoining dates modeled asownerDeclarationDate/titleholderDeclarationDatefields. The remaining four entries model the page-1 "Please attach to this application" bullets, each gated byrequiredWhenonapplicationReasonwhere the bullet's own condition maps onto that field's enum values (registrationCardAndInsuranceCertificate→ Take on;customsClearanceCertificate→ Importation or Other).policeInspectionReport's bullet also reads "or if vehicle older than three years" andsarpccoCertificate's bullet also reads "and if vehicle imported from a SADC member country" — neither clause is encoded inrequiredWhen(no age-from-yearOfMakecomputation in the Condition grammar, and no SADC-membership-of-importedFromfield on this form) and each is disclosed instead in the document entry's ownhandlingmember.- Official-use-only block excluded. "For official use only" — Personal Plate Number (7-box grid), Registration No (7-box grid), Vehicle Control No, Date, Office Code, Officer Code, and Official stamp & signature — a post-processing registration record TRA staff complete once the application is approved, not applicant-supplied data. Consistent with this registry's established convention of excluding staff/office-only blocks (e.g.
md/asp/vehicle-registration's excluded inspector- verification lines).
Conformance
An ephemeral, from-scratch conformance checker (deriving required/ requiredWhen/visibleWhen/pattern/date-format/enum/range rules directly from this schema's own fields[]/documents[], discarded after use, not committed) ran the following fixtures in conformance/tz/tra/vehicle-registration/1.0.0/:
valid-first-time-importation-dar-es-salaam.json(a newly imported self-propelled pickup,applicationReason: importation, with the customs/SARPCCO/foreign-registration fields and documents an importation triggers) — 0 errors.valid-taken-on-with-titleholder-and-insurance.json(a company-owned heavy load vehicle taken on from a financial-institution titleholder,applicationReason: taken_on, exercising the titleholder block, registration-book/current-registration/insurance fields, and the Take-on-triggered documents) — 0 errors.mutation-control-missing-required-field-application-reason.json(dropsapplicationReason) — exactly 1 error.mutation-control-missing-required-field-owner-category.json(dropsownerCategory) — exactly 1 error.mutation-control-missing-required-field-vehicle-category.json(dropsvehicleCategory) — exactly 1 error.mutation-control-invalid-enum-vehicle-category.json(setsvehicleCategoryto"12", outside the 1–11 legend) — exactly 1 error.mutation-control-invalid-range-year-of-make.json(setsyearOfMaketo1850, below theminimum: 1900bound) — exactly 1 error.mutation-control-invalid-date-format-owner-declaration-date.json(setsownerDeclarationDateto15/07/2026, not ISOYYYY-MM-DD) — exactly 1 error.mutation-control-missing-required-document-owner-declaration.json(drops theownerDeclarationattestation) — exactly 1 error.mutation-control-missing-conditionally-required-documents-taken-on.json(starts from the Take-on fixture and dropspoliceInspectionReport, exercisingdocuments[].requiredWhen) — exactly 1 error.
Structural validation
node tools/validate.mjsandnode tools/validate-ajv.mjs(ajv 2020-12 againstspec/v0.3) both pass on the full registry after adding this document: 488/488 (up from 487/487).node tools/verify-sources.mjs registry/tz/tra/vehicle-registration/1.0.0— 1 directory, 3 URLs checked. The source PDF URL itself returned a transientUND_ERR_RES_CONTENT_LENGTH_MISMATCHwarning (tolerated by the tool; the same 1.1MB file was independently confirmed HTTP 200 with a matching sha256 viacurlmoments earlier in this session). The barehttps://www.tra.go.tzhost is already allowlisted (GOV-3159) for a documented Node-fetch()-vs-server header-folding incompatibility this registry's othertra.go.tzentries already carry; this cycle did not need to add a new allowlist entry.npm run build-indexre-run intools/govschema-client/to regenerateregistry-index.jsonwith this document included (488 entries).
Maturity
structural-reference: the source form's own printed field labels and legend values are fully transcribed from the genuine, currently-served official PDF via a high-resolution raster render (no text layer existed to extract), but no live filing through a TRA online channel was attempted. GovSchema is an independent, non-profit standards body and is not affiliated with, endorsed by, or operated by the Government of the United Republic of Tanzania or the Tanzania Revenue Authority.
View the raw record (VERIFICATION.md)
Version history
-
1.0.0draftlatestthis pagehas verification recordschema.json
Independent and non-affiliated
GovSchema is an independent, open-source project. This reference is not produced, reviewed, or endorsed by Tanzania Revenue Authority or any government. The authoritative source is always the live government form and its official instructions.