> ## Documentation Index
> Fetch the complete documentation index at: https://veriqa.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 0.7 — hop mode, channels in any language and four new built-in channels

> What Veriqa 0.7 brings: hop mode for the QR code, a channel in any language over HTTP, Instagram, Messenger, WeChat and Viber, claim completion, channel restriction policies and sign-in with a code.

Veriqa 0.7.0 was published on October 31, 2026, and follows [0.6.1](https://veriqa.app/docs/releases/0.6.md#061): it is the
first package since then, so you upgrade from 0.6.1 straight to 0.7.0. The changes are described by
development stage, 0.6.2 to 0.6.11; no packages were released under those numbers. The latest update
is [0.7.1](#071).

## What's in 0.7.0

| Stage | Dates (2026) | What was added |
| - | - | - |
| [0.6.2](https://veriqa.app/docs/releases/0.6.2.md) | September 26–28 | Hop mode |
| [0.6.3](https://veriqa.app/docs/releases/0.6.3.md) | September 28–29 | A channel in any language over HTTP, WhatsApp through Twilio |
| [0.6.4](https://veriqa.app/docs/releases/0.6.4.md) | September 29–30 | Claims completion and the phone number |
| [0.6.5](https://veriqa.app/docs/releases/0.6.5.md) | September 30 – October 1 | Confirmation binding, your own sign-in page texts |
| [0.6.6](https://veriqa.app/docs/releases/0.6.6.md) | October 4–7 | A cancel button, channel policies, one-tap email over IMAP |
| [0.6.7](https://veriqa.app/docs/releases/0.6.7.md) | October 8–9 | Instagram, markup in page texts, a path prefix |
| [0.6.8](https://veriqa.app/docs/releases/0.6.8.md) | October 10–11 | Messenger, WeChat and Viber |
| [0.6.9](https://veriqa.app/docs/releases/0.6.9.md) | October 12–16 | Sign-in with a code, Redis and RabbitMQ in the server image |
| [0.6.10](https://veriqa.app/docs/releases/0.6.10.md) | October 18–22 | Sign-in and confirmation as one process, a color for a channel's button |
| [0.6.11](https://veriqa.app/docs/releases/0.6.11.md) | October 23–26 | Sign-in with a provider account, a code from the email, buttons in chats |

## What 0.7.0 itself adds

Changes from October 27 to 30, 2026.

### Security

* **The sign-in question advises declining a request the user did not make.** The shipped text ends
  with this paragraph: `If it was not you, decline the request.` You can replace it along with the
  rest of the text — see [Veriqa:MessageTemplates](https://veriqa.app/docs/reference/configuration.md#veriqamessagetemplates).
  The wording of a server-to-server confirmation is yours, so add the paragraph there yourself.
* In the server image with the shipped settings, the bot token and the hop link token no longer reach
  exported spans and logs. For a host of your own, see [Observability](https://veriqa.app/docs/guides/observability.md) and
  [Security and data handling](https://veriqa.app/docs/guides/data-handling.md).
* `TransactionCompletedEvent` on the RabbitMQ bus has no `Subject`, and `prompt=none` gets
  `login_required`. Both are covered in the upgrade section below.

### Channels

* **A repeated delivery of an incoming event** is dropped if it arrives at the same instance within
  500 ms.
  [`Veriqa:Channels:InboundDeduplication:Window`](https://veriqa.app/docs/reference/configuration#inbounddeduplication--repeated-deliveries-of-an-incoming-event)
  sets the window.
* The name of any channel except Email is translated and overridden with the `<name> | channel` string.
* The channel hint on the sign-in page is a message kind, `hop-channel-hint`.
* The wording of a receipt follows `ChannelCapabilities.RendersEmoji` alone; the core no longer keeps
  a list of channels.

### The sign-in page

A button with a long channel name no longer runs off a phone screen, and the buttons of the claims
completion form stack in a column on a narrow screen.

### Documentation

A new page, [Messaging apps, email and account services](https://veriqa.app/docs/messengers-and-accounts.md). The
[1C-Bitrix](https://veriqa.app/docs/integrations/bitrix.md) page now leads with the Veriqa module from the Marketplace.

## What to check when you upgrade from 0.6.1

### Storage

* **New EF Core migrations** for the transaction store and the audit trail — apply them when you
  upgrade; see [Storage](https://veriqa.app/docs/guides/storage.md).
* **A store of your own stops compiling:** `ITransactionStore` has seven new members with no default
  implementation; see [Upgrading a store of your own](https://veriqa.app/docs/guides/storage.md#upgrading-a-store-of-your-own).
* **A prompt message store of your own stops compiling too:** `IChannelPromptMessageStore` has three
  new members with no default implementation: `FindAsync`, `TakeForChannelAsync` and
  `SetPhoneRequestMessageAsync`.

### Users and sign-ins

* **The `sub` of WhatsApp users changes.** It was `whatsapp:+number` and is now `whatsapp:{BSUID}`,
  the ID Meta assigns per business portfolio. The number is no longer the identity: it stays in
  `phone_number` while WhatsApp sends it, and `preferred_username` carries the WhatsApp username. There
  is no migration: existing WhatsApp users get a new `sub` in your application.
* **Parallel sign-ins of one user:** when a user starts a new sign-in and reaches the channel with the
  same account, that account's unfinished sign-ins to the same application close. If your scenario
  keeps two sign-ins open at once, check it.
* **`prompt=none` gets `login_required`.** Veriqa keeps no sign-in session, so such a request no
  longer opens the sign-in page: the error comes back to your `redirect_uri`. If your client renews
  tokens silently in a hidden iframe, switch it to a refresh token (the `offline_access` scope) —
  see [OIDC and OAuth 2.0 support](https://veriqa.app/docs/reference/oidc-capabilities.md).
* **Email with `LoginConfirmation.Mode = OnWebPage`:** the sign-in email no longer completes the
  sign-in; it only links the mailbox, and the sign-in page decides. "No" there gives
  `declined_by_user`.

### Channels and events

* **A custom C# adapter stops compiling:** `GetDeepLinkAsync` now takes a `DeepLinkRequest` instead of
  the transaction ID. The core calls it every time a channel is shown and every time a hop link opens,
  so keep it idempotent and free of side effects — see
  [`GetDeepLinkAsync`](https://veriqa.app/docs/guides/custom-channel-adapter#getdeeplinkasync--where-the-button-and-the-qr-code-lead).
* **`ReportOutcomeAsync` also receives `awaiting_claims`,** which is not a final state. Check
  `TransactionOutcomeNotice.IsTerminal` before you show an outcome.
* **An adapter registered as `telegram`, `whatsapp` or `max`** with `RendersEmoji` unset now gets the
  plain receipt. Set `RendersEmoji = true` to keep the emoji.
* **Public types in `Veriqa.Core.ChannelAdapter.Pipeline` have changed.** If your code calls them
  directly, update the calls: for example, `ChannelWebhookPipeline.ProcessInboundResultAsync` is now
  `ChannelInboundProcessor.ProcessAsync`.
* **Phone numbers are accepted in E.164 only.** A custom or HTTP adapter that reports a number in
  another form no longer passes it on. The rule is the public `E164PhoneNumber` in
  `Veriqa.Core.Contracts`.
* **`TransactionCompletedEvent` on the RabbitMQ bus has no `Subject`.** The field carried the
  user's `sub` in the clear — by default `{channel_type}:{channel_user_id}`. A subscriber can no
  longer identify the user from the bus message: `Context.MaskedChannelUserId` hides all but the
  last two characters and is not a key. If you need `sub`, read it in an `ITransactionEventHandler`
  in your host, which still receives `Subject`. See
  [Storage](https://veriqa.app/docs/guides/storage.md#publishing-transaction-events).
* **The default MAX Bot API address** is now `https://platform-api2.max.ru`. If your outbound traffic
  goes through an allowlist, add it — see [MAX](https://veriqa.app/docs/guides/channels.md#max).
* **The new phrase in the sign-in question.** Your own `confirmation-prompt` wording does not pick up
  `If it was not you, decline the request.` automatically: add it if you want it. Move a translation in
  a locale file to the new keys, which carry this phrase and the `{requested_at}` slot.

### The sign-in page

* **`ShowQrCode` defaults to `DesktopOnly`** instead of `Always`: a phone shows channel buttons
  instead of a QR code. To keep the old look, set `"ShowQrCode": "Always"`.
* **The Cancel button appears on every sign-in page.** If you built your own through `CustomJsPath`,
  remove it — or turn the built-in one off.
* **`Title`, `Instruction` and a channel hint already set as plain text may look different:** these
  texts are now read as HTML. `Terms &amp; Conditions` now shows "Terms & Conditions", and a bare `<`
  or `>` fails the check — the value is shown as written and a warning goes to the log. Review your
  values for `&`, `<` and `>`.
* Some built-in texts are reworded — if you override them, check them against
  [Configuration & customization](https://veriqa.app/docs/guides/customization.md).

### Sign-in page wording

Your own wording for a built-in text in the table below, set in a locale file, no longer applies,
because the previous keys are gone. Move it to the new key:

| Where | Previous key | New key |
| - | - | - |
| Expired sign-in | `Session expired` | `This sign-in request has expired` |
| Channel button | `Open in Telegram`, `Open in WhatsApp`, `Open in MAX` | `Sign in with {0}` and `Confirm in {0}`, or the whole phrase, such as `Confirm in WhatsApp` |
| Email link button | `Sign in via Email` | `Sign in with Email` and `Confirm with Email` |
| Email mail-client button | `Open Email Client` | `Send confirmation email` |
| One channel, or a channel tab | `Scan the QR code or tap the channel button` · `Tap the channel button to sign in` | `Scan the QR code or tap the button to sign in with {0}` · `Scan the QR code to sign in with {0}` · `Tap the button to sign in with {0}` |
| Several channels on screen at once | `Choose a channel and scan the QR code or tap the button` · `Choose a channel and tap the button` | `Choose a channel, then scan its QR code or tap its button to sign in` · `Choose a channel, then scan its QR code to sign in` · `Choose a channel and tap its button to sign in` |
| One QR code for several channels | `Scan the QR code or tap the channel button` | `Scan the QR code or tap a channel button to sign in` · `Scan the QR code to sign in` · `Tap a channel button to sign in` |
| The "Any channel" tab | `Scan the QR code or tap the channel button` | `Scan the QR code or tap your messaging app's button to sign in` |

A confirmation has the same keys with `to confirm in {0}` in place of `to sign in with {0}` and
`to confirm` in place of `to sign in`. A replacement for a single-channel text must carry the `{0}`
slot, where the page puts the channel's icon and name. The full table of variants is in
[The instruction follows both settings](https://veriqa.app/docs/guides/customization.md#the-instruction-follows-both-settings).

## 0.7.1

Veriqa 0.7.1 was published on November 2, 2026. It changes how the pre-filled message reads in a
confirmation and adds client apps to the quickstart repositories.

### The pre-filled message of a confirmation

The message or email the user sends themselves no longer talks about signing in when the transaction
is a confirmation. A message now says, for example, `Send this message to continue.`, and an email has the subject
`Confirm in {app}: {token}`, or `Confirm: {token}` without an application name. The one-tap email no
longer names Veriqa in its subject or text; the application is named in the subject only.

`IChannelMessageTemplates.ResolveAsync`, the `post-login-*` messages and the Email messages now also
read `ByType` and `ByAction`, so a wording you set for a type or an action reaches them too.

### Samples

The quickstart repositories have client apps in Python, Node.js, Go and PHP next to ASP.NET Core; each
one uses a stock OpenID Connect library. See [Sign-in on a website via a messaging app](https://veriqa.app/docs/samples/sign-in.md).

### Docker image

The Docker image of this version runs on `linux/amd64` and `linux/arm64`. Images of earlier versions
are `linux/amd64` only.

### Public repository

The `docs/` folder of the public repository is now `gallery-and-docs/`. The README of a package
published up to 0.7.0 still points to the old path, so its images and the gallery link no longer open
on the nuget.org page of that version.

### What to check when you upgrade from 0.7.0

* **Your own `deeplink-prefill` wording.** In `Veriqa:MessageTemplates`, a wording at the bare kind or
  for one channel now applies to sign-ins only. Word it for confirmations as well, at
  `ByType:confirmation:BySurface:in-channel:ByChannel:{channel}`. A channel of your own whose template
  carries `{code}` needs this address: without it, a confirmation gets the shipped text, which has no
  code — see [`Veriqa:MessageTemplates`](https://veriqa.app/docs/reference/configuration#veriqamessagetemplates).
* **Your own locale files.** The key of the one-tap email intro is now `This mail confirms sign-in. Do
  not change the subject or the body of the mail.`, and a confirmation has new keys of its own — see
  [The prefilled message text](https://veriqa.app/docs/guides/channels.md#the-prefilled-message-text). Without a translation, they resolve to their English text.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.