nextui.dev
Home
Docs
Saved
Pricing
Components37
  • Forms & inputs7
  • Cards13
  • Buttons, badges & avatars8
  • Feedback & display6
  • Effects3
Agents17
  • Chat inputNew
  • Task checklistNew
  • ReasoningNew
  • Tool callNew
  • Tool approvalNew
  • SourcesNew
  • Agent timelineNew
  • Artifact panelNew
  • Streaming messageNew
  • Conversation shellNew
  • Voice agentNew
  • Voice orbNew
  • Thinking ring
  • Thinking waveNew
  • Thinking sparkle
  • Thinking bot
  • Prompt deckNew
Blocks20
  • Agent chatNew
  • Pill heroNew
  • Grid hero
  • Moodboard generatorNew
  • Waitlist heroNew
  • Intro bannerNew
  • Creative home heroNew
  • Chat heroNew
  • App shelfNew
  • Usage card
  • Design resultsNew
  • Pricing tiers
  • Dashboard home
  • The shiftNew
  • Launch perksNew
  • Testimonials
  • Quote
  • Team
  • Leads tableNew
  • Sign in
Pages10
  • ASCII workspace$49
  • CRM overviewNew
  • Marketing dashboardNew
  • Developer portfolio$49
  • Particle landing$49
  • Particle story$49
  • Statement converter$49
  • AI photo studio$49
  • Group card launch$49
  • Month-end storyNew
Themes9
  • Default
  • Ember
  • Ocean
  • Forest
  • Grape
  • Rose
  • Amber
  • Clay
  • Brutal
Upgrade
nextui.dev

nextui components, blocks and themes you install with one command.

Product

  • Components
  • Blocks
  • Themes
  • Pricing

Resources

  • Docs
  • Roadmap
  • GitHub

Legal

  • License
  • Privacy
  • Terms
  • Refunds

nextUI

[ 200 OK ] · nextUI

© 2026 NEXTUI • All rights reserved.

Upgrade
ComponentsForms & inputsOTP input
Copy promptCopy prompt

Customize

Number of digit boxes

6

Show a dash between the two halves

Shown under the boxes once the code is complete

Text before the resend link

Text of the resend link

JSX · copied with Copy prompt

<OneTimeCodeInput />

OTP input

Six-digit OTP input with paste, backspace and arrow-key support.

Installation

Set your access key from API keys as NEXTUI_TOKEN in .env.local and add the @nextui namespace below to components.json once. Then every item installs by name. Each install counts as a copy on a free account.

$pnpm dlx shadcn@latest add @nextui/otp-input
1{
2 "registries": {
3 "@nextui": {
4 "url": "https://nextui.dev/r/{name}.json",
5 "headers": { "Authorization": "Bearer ${NEXTUI_TOKEN}" }
6 }
7 }
8}

Usage

1"use client";
2
3import { OneTimeCodeInput } from "@/components/nextui/otp-input";
4
5export function VerifyPhone() {
6 return (
7 <OneTimeCodeInput
8 length={4}
9 separator={false}
10 label="Enter the code we texted you"
11 completeText="Checking your code…"
12 onComplete={(code) => fetch("/api/verify", { method: "POST", body: JSON.stringify({ code }) })}
13 onResend={() => fetch("/api/resend", { method: "POST" })}
14 />
15 );
16}

API reference

Edit props live in the preview above, or see all 12 props
PropTypeDefaultDescription
lengthnumber6Number of digit boxes
labelReactNode"Enter the 6-digit code"Label above the boxes; follows length by default
separatorbooleantrueShow a dash between the two halves
valuestring–Controlled code
defaultValuestring""Starting code when uncontrolled
onChange(code: string) => void–Called whenever a digit changes
onComplete(code: string) => void–Called once every box is filled
onResend() => void–The Resend code link was clicked
completeTextReactNode"Verifying…"Shown under the boxes once the code is complete
resendPromptReactNode"Didn’t get it? "Text before the resend link
resendLabelReactNode"Resend code"Text of the resend link
classNamestring–Extra classes on the wrapper

Related

All components

Labeled input

Subscribe input

Settings list

Sign in to see the code

Preview it freely. A free account copies code and prompts a few times a day.

Sign in