> For the complete documentation index, see [llms.txt](https://docs.podplay.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.podplay.app/api/signup-phone-verifications.md).

# Signup Phone Verifications

## Send or verify a phone verification code

> \
> &#x20;     Two-step phone verification for signup.\
> &#x20;     \- \*\*Send code\*\*: provide \`phoneNumber\` (and optionally \`recaptchaToken\`, \`language\`). Provider (Firebase or Twilio) is determined by tenant configuration.\
> &#x20;     \- \*\*Verify code\*\*: provide \`sessionId\` and \`verificationCode\` from the previous step. Mobile clients using the Firebase SDK directly can provide \`verificationId\` + \`phoneNumber\` + \`verificationCode\` instead of a \`sessionId\`.\
> &#x20;  &#x20;

```json
{"openapi":"3.0.0","info":{"title":"PodPlay Inc API","version":"2.0"},"tags":[{"name":"Signup Phone Verifications"}],"servers":[{"url":"/apis/v2","description":"Current Server"}],"paths":{"/signup/phone-verifications":{"post":{"operationId":"SignupPhoneVerificationsController_phoneVerification","summary":"Send or verify a phone verification code","description":"\n      Two-step phone verification for signup.\n      - **Send code**: provide `phoneNumber` (and optionally `recaptchaToken`, `language`). Provider (Firebase or Twilio) is determined by tenant configuration.\n      - **Verify code**: provide `sessionId` and `verificationCode` from the previous step. Mobile clients using the Firebase SDK directly can provide `verificationId` + `phoneNumber` + `verificationCode` instead of a `sessionId`.\n    ","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupPhoneVerificationDto"}}}},"responses":{"201":{"description":"Returns the verification session","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SignupPhoneVerificationSessionDto"}}}},"422":{"description":"Validation error (invalid phone, denied number, reCAPTCHA error, invalid/expired session, invalid code, max attempts exceeded, etc.)"},"429":{"description":"Too many requests"}},"tags":["Signup Phone Verifications"]}}},"components":{"schemas":{"SignupPhoneVerificationDto":{"type":"object","properties":{"phoneNumber":{"type":"string","description":"Phone number in E.164 format (e.g., +12025551234)"},"recaptchaToken":{"type":"string","description":"reCAPTCHA token from Firebase. Required when the tenant is configured to use Firebase phone verification."},"language":{"type":"string","description":"Preferred language for SMS message"},"verificationId":{"type":"string","description":"Firebase verification ID from the native mobile SDK. Used only for the verify step — mobile clients that use Firebase SDK directly provide this instead of a sessionId.","writeOnly":true},"sessionId":{"type":"string","description":"Session ID returned from the initial request. Required when submitting a verification code."},"verificationCode":{"type":"string","description":"6-digit verification code. When present, the endpoint verifies the code instead of sending a new one."}}},"SignupPhoneVerificationSessionDto":{"type":"object","properties":{"sessionId":{"type":"string","description":"Session ID for tracking verification","readOnly":true},"phonePreview":{"type":"string","description":"Phone number preview (last 4 digits)","readOnly":true},"status":{"type":"string","description":"Session status","enum":["pending","verified","consumed"],"readOnly":true},"expiresAt":{"format":"date-time","type":"string","description":"Session expiration timestamp","readOnly":true},"remainingAttempts":{"type":"number","description":"Remaining verification attempts","readOnly":true},"errors":{"readOnly":true,"type":"array","items":{"$ref":"#/components/schemas/ValidationErrorDto"}}},"required":["sessionId","phonePreview","status","expiresAt","remainingAttempts"]},"ValidationErrorDto":{"type":"object","properties":{"code":{"type":"string","readOnly":true},"message":{"type":"string","readOnly":true},"details":{"type":"object","readOnly":true,"nullable":true}},"required":["code","message","details"]}}}}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.podplay.app/api/signup-phone-verifications.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
