Skip to main content

Credential Type Codes

Every credential carries an identification.credentialType — the machine code that says what kind of thing it is. This page is the full catalogue of codes the API understands.

The codes are also what compliance runs on: a screening package requirement is satisfied by matching this exact string, and the Compliance Overview groups its rows by it. Sending the right code is the difference between a credential that counts and one that merely sits on a profile.

Where this list comes from

The table below is generated from the platform's credential catalogue — the same source that backs List supported credential types and the canonicalization applied on every write. It cannot drift from the running system.

Fetch the live list any time:

curl -sS "$OHO_BASE/credentials/types" -H "Authorization: Bearer $OHO_TOKEN"
{
"data": [
{
"code": "WWCC_NSW",
"label": "Working With Children Check (NSW)",
"category": "SCREENING"
},
{
"code": "NDIS_SCREENING",
"label": "NDIS Worker Screening",
"category": "SCREENING"
},
{
"code": "AHPRA_G",
"label": "AHPRA Registration (General)",
"category": "LICENSE"
}
],
"meta": { "page": 1, "pageSize": 42, "total": 42, "requestId": "..." }
}

Categories​

Every code belongs to one of four categories, which is also the category you send alongside it on Create credential and the filter List supported credential types accepts:

SCREENING · GOVERNMENT_ID · LICENSE · CERTIFICATION

# Just the screening checks
curl -sS "$OHO_BASE/credentials/types?category=SCREENING" \
-H "Authorization: Bearer $OHO_TOKEN"

Codes are matched loosely, then stored strictly​

You don't have to send the code exactly as it appears below. Before a credential is stored, Oho folds what you sent — trims it, collapses every run of non-alphanumeric characters to a single underscore, and upper-cases the result — then looks it up against every code, name and alias in the catalogue.

So ahpra, AHPRA and AHPRA_G all store as AHPRA_G, and Driver's Licence, drivers licence and DRIVERS_LICENCE all store as DRIVERS_LICENSE. What you sent is kept as the credential's displayName when you didn't set one yourself, so nothing is lost.

An unrecognised code is accepted, not rejected

This is the failure worth designing against. A code that isn't in the catalogue does not return a 400 — it is normalised to UPPER_SNAKE_CASE and stored as-is.

The credential is created and looks fine on the worker's profile. But because requirements match on the exact stored string, it satisfies nothing, and it mints its own row in the Compliance Overview next to the real one. A typo surfaces as a quiet compliance gap weeks later, not as an error at the call site.

Send a code from this page, or check yours against List supported credential types before you go live.

Your own credential types​

Types your organisation defines itself carry a CUSTOM_ prefix. Those are passed through untouched — never folded, never matched against the catalogue — so a custom code can't collide with a built-in one. See Custom Credentials.

The catalogue​

Each row shows the code to send, the name Oho displays for it, and the other spellings that fold to it. Aliases are a compatibility convenience for existing integrations — send the code, not an alias, in anything you write from scratch.

Screening checks​

category=SCREENING

CodeNameAlso accepted
WWCC_NSWWorking With Children Check (NSW)nswwwc
WWCC_VICWorking With Children Check (VIC)vicwwc
WWCC_QLDBlue Card (QLD)qldblue, BLUE_CARD, BLUE_CARD_QLD, Queensland Blue Card
WWCC_WAWorking With Children Check (WA)wawwc
WWCC_SAWorking With Children Check (SA)sawwc
WWVP_TASWorking With Vulnerable People Registration (TAS)taswwvp, taswwc, WWCC_TAS, WWVP
WWCC_NTOchre Card (NT)ntwwc, OCHRE_CARD
WWCC_ACTWorking With Vulnerable People Check (ACT)actwwc
WWCCWorking With Children Check (generic)—
NDIS_SCREENINGNDIS Worker ScreeningNDWS, NDIS
POLICE_CHECKPolice CheckNPC, National Police Check
NZ_POLICE_CHECKPolice Check (NZ)nzpolice, NZPC, NZ Police Check, New Zealand Police Check, NZ Police Vetting
VEVOPassportpassport_vevo, Passport (VEVO-checked)
PASSPORT_NO_VEVOPassport (Not VEVO-checked)—
IMMI_CARDImmiCardimmicard

Government ID​

category=GOVERNMENT_ID

CodeNameAlso accepted
PASSPORTPassport
Retired — still accepted on write and still resolves for existing credentials, but no longer offered when authoring new requirements.
—
DRIVERS_LICENSEDriver's Licence (generic)driverslicense, Driver Licence, Driver's Licence, Drivers Licence, DRIVERS_LICENCE
DRIVERS_LICENSE_NSWDriver's Licence (NSW)—
DRIVERS_LICENSE_VICDriver's Licence (VIC)—
DRIVERS_LICENSE_QLDDriver's Licence (QLD)—
DRIVERS_LICENSE_WADriver's Licence (WA)—
DRIVERS_LICENSE_SADriver's Licence (SA)—
DRIVERS_LICENSE_TASDriver's Licence (TAS)—
DRIVERS_LICENSE_NTDriver's Licence (NT)—
DRIVERS_LICENSE_ACTDriver's Licence (ACT)—
BIRTH_CERTIFICATEAustralian Birth Certificate—
CITIZENSHIP_CERTIFICATEAustralian Citizenship Certificate—

Licences (regulated professions)​

category=LICENSE

CodeNameAlso accepted
AHPRA_GAHPRA Registration (General)ahpra, AHPRA
AHPRA_PAHPRA Registration (Provisional)—
AHPRA_LAHPRA Registration (Limited)—
TEACHERTeacher Registration (generic)—
TEACHER_NSWTeacher Registration (NSW)nswtrb, NESA
TEACHER_VICTeacher Registration (VIC)victrb, VITVIC, VIT
TEACHER_QLDTeacher Registration (QLD)qldtrb, QCT
TEACHER_WATeacher Registration (WA)watrb
TEACHER_SATeacher Registration (SA)satrb
TEACHER_TASTeacher Registration (TAS)tastrb
TEACHER_NTTeacher Registration (NT)nttrb

Certifications​

category=CERTIFICATION

CodeNameAlso accepted
FIRST_AIDFirst Aid CertificateFirst_Aid, First Aid
CPRCPR Certificate—
USIUnique Student Identifier—
USI_TRANSCRIPTUSI Transcriptusi_transcript, Transcript
QUALIFICATIONQualification / Certification—

42 selectable codes, plus 1 retained for compatibility.

Retired codes

List supported credential types omits retired codes by default, because it feeds the pickers that author new requirements. Pass includeRetired=true to see them. They are still accepted on write and still resolve for the credentials already stored under them — a retired code is retired from authoring, not from the platform.

Coming from a spreadsheet import​

A bulk import uses a different, shorter vocabulary from the API — ndws rather than NDIS_SCREENING, wwcc plus a State column rather than WWCC_NSW, ahpra rather than AHPRA_G. Nothing reconciles the two for you, so an integration written from the import guide will target codes the API does not use.

This is what each spreadsheet code ends up stored as, and therefore what to send to the API to mean the same thing.

Spreadsheet codeStored as
driverslicenseDRIVERS_LICENSE
driverslicense_nswDRIVERS_LICENSE_NSW
driverslicense_vicDRIVERS_LICENSE_VIC
driverslicense_qldDRIVERS_LICENSE_QLD
driverslicense_waDRIVERS_LICENSE_WA
driverslicense_saDRIVERS_LICENSE_SA
driverslicense_tasDRIVERS_LICENSE_TAS
driverslicense_ntDRIVERS_LICENSE_NT
driverslicense_actDRIVERS_LICENSE_ACT
firstaidFIRST_AID
cprCPR
ahpraAHPRA_G
vevoVEVO
passportPASSPORT
ndwsNDIS_SCREENING

The three that depend on the State column​

Spreadsheet codeNSWVICQLDWASATASNTACTblank
wwccWWCC_NSWWWCC_VICWWCC_QLDWWCC_WAWWCC_SAWWVP_TASWWCC_NTWWCC_ACTWWCC
wwvpWWVP_NSW ⚠️WWVP_VIC ⚠️WWVP_QLD ⚠️WWVP_WA ⚠️WWVP_SA ⚠️WWVP_TASWWVP_NT ⚠️WWVP_ACT ⚠️WWVP_TAS
teacherTEACHER_NSWTEACHER_VICTEACHER_QLDTEACHER_WATEACHER_SATEACHER_TASTEACHER_NTTEACHER_ACT ⚠️TEACHER

⚠️ means the import produces a code that is not in the catalogue. It is still stored — nothing errors — but it matches no requirement. Use the neighbouring column instead.

npc is not in that table, because it isn't a credential

A spreadsheet row with Credential Type npc and State AUS (or blank) doesn't create a credential at all — it loads a police check you already hold as a completed historic check, which is a different entity with its own endpoints. The credential that appears on the worker's profile is written by Oho, under POLICE_CHECK.

So there's nothing to map: send npc in a spreadsheet, and read the result through Bans, Exemptions & Police Checks. npc with any other State is not a recognised credential type and the row is skipped.

Where to go next​