---
title: "Get OTP verification session"
method: GET
path: "/verify/{session_id}"
tags: ["Phone Verification (OTP)"]
---

# Get OTP verification session

`GET /verify/{session_id}`

## Request

- Base URL: `https://api.envoisms.ma/v1`
- URL: `https://api.envoisms.ma/v1/verify/{session_id}`
- Auth: HTTP bearer

## Path parameters

- `session_id` string, required

## Response `200`

OTP session

- object
  - `id` string
  - `to` string
  - `channel` 'sms' | 'whatsapp' | 'telegram' | 'voice' | 'rcs'
  - `app_id` string, nullable
  - `status` 'pending' | 'verified' | 'failed' | 'expired'
  - `expires_at` string, date-time
  - `verified_at` string, date-time, nullable
  - `created_at` string, date-time
  - `attempts_used` integer
  - `attempts_remaining` integer
  - `resend_available_in_seconds` integer: 0 when a resend is accepted right now
  - `can_resend_now` boolean
  - `deliveries` object[]: One entry per delivery attempt, oldest first, with the outcome the network reported. This is the authoritative answer to "did my user receive the code?" — a delivered entry means the handset acknowledged it.
    - `channel` 'sms' | 'whatsapp'
    - `kind` 'send' | 'resend'
    - `status` 'submitted' | 'sent' | 'delivered' | 'read' | 'failed' | 'simulated': simulated means a sandbox key: nothing left the platform
    - `simulated` boolean
    - `submitted_at` string, date-time
    - `delivered_at` string, date-time, nullable
    - `read_at` string, date-time, nullable
    - `failed_at` string, date-time, nullable
    - `error_code` string, nullable
    - `error_message` string, nullable

## Other responses

- `404`: Session not found

---

[API](https://skmtc.dev/envoisms/apis/envoisms-ma-api.md) · [All operations](https://skmtc.dev/envoisms/apis/envoisms-ma-api/llms.txt) · [OpenAPI document](https://skmtc.dev/envoisms/apis/envoisms-ma-api/revisions/662db074bd86?raw)
