Users
Create user
https://api.firstleeward.com/v0/usersCreates a new user with the provided details. Phone number must be unique within the project, as is externalId when supplied. In CORPORATE mode, companyId is required. On corporate employee projects there is no KYC and the user is created already approved. The company must be active with card issuance enabled. The email's domain is checked against the company's validated domains when a card is created.
Authorizations
Authorizationstring · headerrequiredAPI key as Bearer token, e.g. Bearer YOUR_API_KEY
Headers
Leeward-Versionenum<string>requiredAPI version (YYYY-MM-DD). Available option: 2026-09-18
Body
application/json
externalIdstringYour own identifier for this user (1-255 characters). Must be unique among your active users; a deleted user releases its value for reuse. Use it to look the user up later via the externalId filter on List users.
emailstring<email>requiredUser email address (max 50 characters)
phoneNumberstringrequiredPhone number in E.164 format (e.g., +14155552671)
firstNamestringUser first name (1-100 characters). Required on corporate employee projects, where cards are issued to a company's employees without KYC. Optional on other projects - if omitted, it is filled from the verified KYC identity when the application is approved.
lastNamestringUser last name (1-100 characters). Required on corporate employee projects. Optional on other projects - if omitted, it is filled from the verified KYC identity when the application is approved.
companyIdstring<uuid>Company ID (required in CORPORATE program mode)
dateOfBirthstring<date>Date of birth (YYYY-MM-DD). The employee must be at least 18 years old. Used only on corporate employee projects. Ignored on other projects, where it is filled from the verified KYC identity.
nationalitystringNationality (ISO 3166-1 alpha-2). Used only on corporate employee projects. Ignored on other projects, where it is filled from the verified KYC identity.
countrystringCountry of residence (ISO 3166-1 alpha-2). Used only on corporate employee projects. Ignored on other projects, where it is filled from the verified KYC identity.
Response
200User resource
idstring<uuid>requiredUnique user identifier
externalIdstring | nullrequiredYour own identifier for this user, as supplied at creation. Null if none was provided.
emailstring<email>requiredUser email address
phoneNumberstringrequiredPhone number in E.164 format
firstNamestring | nullrequiredUser first name. Null until provided by the client or backfilled from the verified KYC identity on approval.
lastNamestring | nullrequiredUser last name. Null until provided by the client or backfilled from the verified KYC identity on approval.
countrystring | nullrequiredISO 3166-1 alpha-2 country code
dateOfBirthstring | nullrequiredDate of birth (YYYY-MM-DD). Filled from the verified KYC identity, or as sent at creation on corporate employee projects.
nationalitystring | nullrequiredNationality (ISO 3166-1 alpha-2) as sent at creation on corporate employee projects. Null on other projects.
companyIdstring<uuid> | nullrequiredCompany ID (set in CORPORATE program mode)
applicationobjectrequiredKYC application status
Show child attributes
statusstringrequiredCurrent KYC application status
NOT_STARTEDAWAITING_DOCUMENTSIN_REVIEWAPPROVEDREJECTEDRETRY_REQUIREDrejectionReasonstring | nullrequiredHuman-readable reason for rejection. Set when status is REJECTED or RETRY_REQUIRED, null otherwise.
rejectionLabelsstring[] | nullrequiredMachine-readable reject codes from the compliance review (for example FORGERY, SELFIE_MISMATCH, EXPIRATION_DATE). Set when status is REJECTED or RETRY_REQUIRED, null otherwise. The set of codes is open-ended - handle unknown values. For your internal use only - do not display these codes to the end user.
documentsobject[] | nullrequiredSupporting documents and their per-document review state. Null for applications with no supporting documents.
Show child attributes
typestringrequiredSupporting document category
IDENTITYPROOF_OF_ADDRESSCURPstatusstringrequiredReview state of this document
PENDINGUPLOADEDRETRY_REQUIREDREJECTEDcreatedAtstringrequiredISO 8601 timestamp of creation
updatedAtstringrequiredISO 8601 timestamp of last update
400Response for status 400
Option 1 · PhoneNumberAlreadyExistsError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 2 · ExternalIdAlreadyExistsError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 3 · InvalidPhoneNumberError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 4 · InvalidEmailDomainError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 5 · CompanyIdRequiredError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 6 · CompanyIdNotAllowedError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 7 · UserCompanyNotFoundError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 8 · InvalidUserDetailsError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequiredOption 9 · CompanyNotReadyForCardIssuanceError
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired409The maximum number of users allowed for this project has been reached
errorobjectrequiredShow child attributes
codestringrequiredmessagestringrequireddetailobject | nullrequired