---
title: "Initiate Marketplace verification"
method: POST
path: "/verification/marketplace"
tags: ["verification"]
---

# Initiate Marketplace verification

`POST /verification/marketplace`

Create a verification that will use the Marketplace verification system

## Request body

- NewMarketplaceVerificationRequest — The program ID, tracking ID, and subject to track for a marketplace verification
  - `programId` string, required — The program ID to use for the verification
  - `trackingId` string, required — An program-scope unique ID specified by the consumer
  - `subject` MarketplaceSubject, required — A marketplace user to be verified
    - `deviceFingerprintHash` string — The device fingerprint collected for the person being verified
    - `email` string, required — The email address of the person being verified
    - `ipAddress` string, ipv4 — The end-user's public IP address. This only needs to be provided in situations where the HTTP requests do not come directly from the end-user.
    - `ipAddressExtended` string, ipv4,ipv6 — The end-user's public IP address. This only needs to be provided in situations where the HTTP requests do not come directly from the end-user.
    - `externalUserId` string — An identifier stored with the verification for external reference
    - `captchaToken` string — The captcha token collected for the person being verified
    - `phoneNumber` string — The phone number used for SMS messages
    - `locale` string — The locale chosen by the user
    - `metadata` PersonalInfoMetadata — A collection of custom metadata to be stored with the verification
    - `birthDate` string, date — The date of birth of the person being verified (format YYYY-MM-DD). Date must be greater than `1900-01-01`.
    - `country` string, nullable — The ISO 3166-1 alpha-2 country code of the person being verified. In a response, the value can be `null` if the verification has no country.
    - `firstName` string — The first name of the person being verified
    - `lastName` string — The last name of the person being verified
    - `trackingId` string — A program-scope unique ID specified by the consumer

## Response `200`

A response including the unique verification token that can be used to verify the user

- NewMarketplaceVerificationResponse — A representation of a new verification that provides the segment being verified and the URL to submit data to
  - `verificationId` string, required — The unique identifier for the ongoing verification
  - `currentStep` 'collectStudentPersonalInfo' | 'collectActiveMilitaryPersonalInfo' | 'collectInactiveMilitaryPersonalInfo' | 'collectTeacherPersonalInfo' | 'collectSeniorPersonalInfo' | 'collectAgePersonalInfo' | 'collectFirstResponderPersonalInfo' | 'collectMedicalProfessionalPersonalInfo' | 'collectEmployeePersonalInfo' | 'collectMemberPersonalInfo' | 'collectLicensedProfessionalPersonalInfo' | 'collectMoverPersonalInfo' | 'collectLowIncomePersonalInfo' | 'collectDriverLicensePersonalInfo' | 'collectGeneralIdentityPersonalInfo' | 'collectHybridIdentityPersonalInfo' | 'collectPersonalInfo' | 'collectMilitaryStatus' | 'collectMarketplaceToken' | 'collectSocialSecurityNumber' | 'collectIdentifier' | 'completeAuthentication' | 'docUpload' | 'sso' | 'success' | 'error' | 'pending' | 'emailLoop' | 'idCheckLoop' | 'smsLoop' | 'thirdPartyLoop' | 'consolation' | 'override', required — The step that the verification is at. Each step tells you what to do next. One value is deprecated: `collectHybridIdentityPersonalInfo`. The API can still return it, so your client must accept it. The endpoint that submits this step is not part of the public API. Do not build a new integration on it.
  - `submissionUrl` string, required — The url to use for submitting person data
  - `errorIds` ErrorId[] — The list of errors that occurred, if any
  - `segment` 'student' | 'teacher' | 'military' | 'senior' | 'age' | 'firstResponder' | 'medical' | 'employment' | 'marketplace' | 'member' | 'licensedProfessional' | 'recentMover' | 'other' | 'lowIncome' | 'identity', nullable — The market segment for the verification. The value can be `null` if the server did not determine the segment. For example, the server sends an error before a verification exists.
  - `subSegment` 'activeDuty' | 'veteran' | 'retiree' | 'reservist' | 'militaryFamily' | 'goldStarFamily' | 'police' | 'fireFighter' | 'searchAndRescue' | 'emt' | 'employee' | 'homeBuyer' | 'otherMover' | 'facultyHighSchool' | 'facultyUniversity' | 'facultyPostSecondary' | 'facultyK12' | 'fullAndPartTimeUniversity' | 'collegeBound' | 'highSchool' | 'graduate' | 'postSecondary' | 'nurse' | 'doctor' | 'otherHealthWorker' | 'dentist' | 'pharmacist' | 'generalContractor' | 'snapBenefits' | 'otherGovernmentAssistance' | 'communityEligibilityProvision' | 'architect' | 'interiorDesigner' | 'librarian' | 'childCareWorker' | 'veterinarian' | 'licensedRealEstateAgent' | 'licensedCosmetologist' | 'generalIdentity' | 'driverLicense' | 'hybridIdentity' | 'k12' | 'nutritionProfessional', nullable — The subsegment being verified. May be `null` when the verification has no applicable subsegment.
  - `locale` string — The locale chosen by the user
  - `country` string, nullable — The ISO 3166-1 alpha-2 country code of the person being verified. In a response, the value can be `null` if the verification has no country.
  - `created` integer
  - `updated` integer

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Program not active, due to future start date or a past end date.
- `404` — Program not found
- `429` — Too many requests. A `429` can mean one of two things — inspect the response body's `errorIds` before retrying: - A transient rate limit applied at the platform edge. If a `Retry-After` header is present, wait that many seconds (using exponential backoff) and retry. - A program/consumer limit such as `verificationLimitExceeded`, `reverificationDailyLimitExceeded`, or `docReviewLimitExceeded` — the consumer has exhausted an allowance defined by the program's limiting policy. This is a permanent rejection (`currentStep: error`, no `Retry-After`); do not retry.
- `500` — Internal server error.
- `503` — Service temporarily unavailable. The request can be safely retried after the interval given in the `Retry-After` header.

---

[API](https://skmtc.dev/sheerid/apis/sheerid-api.md) · [All operations](https://skmtc.dev/sheerid/apis/sheerid-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/sheerid/sheerid-api/revisions/dc7f4e84f543/schema)
