The DNA_Kits table is the unified, cross-service registry of DNA test kits known to the DNAGedcom Client. Each row represents one test kit at one testing company. It is the single place every gather looks up a kit, regardless of which service the kit belongs to.
This table supersedes the older per-service kit tables (such as Ancestry_Kit and FTDNA_Kit). Those tables are retained for backward compatibility, but new code registers and resolves kits through DNA_Kits. Every service’s parser — A*, FTDNA, GEDmatch, MyHeritage, and 23andMe — writes its kits here through a single shared insert routine.
(company, guid), so each company/kit pair appears only once. Re-running a gather upgrades the existing row in place rather than creating duplicates.| Column | Type | Description |
|---|---|---|
| Id | int (PK) | Auto-incrementing primary key. Used as the internal kit reference in joins from other tables. |
| company | string | The testing company the kit belongs to (for example A*, FTDNA, Gedmatch, MyHeritage, 23andMe). |
| guid | string | The service’s unique identifier for the kit. Part of the unique key with company. |
| name | string | Display name of the kit (the tester’s name as shown by the service). |
| id2 | string | Secondary service identifier for the kit (usage varies by company; for some services this is the account/username the kit is tied to). |
| id3 | string | Tertiary service identifier for the kit (usage varies by company; used in joins to encrypted-kit match tables for some services). |
| created_date | string | When the kit row was first recorded. |
| role | string | The viewer’s relationship to the kit. For A*, populated from the /dnaSubnav/tests endpoint with one of Subject, Admin, Editor, or Guest. Other services may populate this in the future; null means unknown. |
All services register kits through a single shared insert routine. When a kit is first seen it is inserted; when seen again the existing row is updated in place. Updates are non-destructive: name, id2, id3, and role are only overwritten when the caller supplies a new value, so a later pass that lacks (for example) the role will not blank out a value an earlier pass already stored.
For A*, the role value is captured from the DNA subnav test list (/dnaSubnav/tests), which lists every kit the signed-in account can view along with its role.
DNA_Kits supersedes.