> For the complete documentation index, see [llms.txt](https://docs.toolkit.equs.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.toolkit.equs.ai/standards/issuance/flow-3/trigger-by-user-for-any-wallet-email-tx_code-delivery/method-2-api-+-embed-ui.md).

# Method 2: API + Embed UI

Embed UI for the wallet picker and QR code, with tx\_code delivery still yours

The same call as [Method 1](/standards/issuance/flow-3/trigger-by-user-for-any-wallet-email-tx_code-delivery/method-1-api.md), made from your back end, with the wallet picker and the QR code pre-built. What Embed UI cannot give you on this flow is code delivery - that stays yours, because handing it to the platform would mean handing over a contact detail.

{% hint style="warning" %}
**Work in progress.** The Issuance API for this flow is still being built.
{% endhint %}

**Before you start** you need an [Issuer and VC Schema](/standards/issuance/configuration-issuer-and-vc-schema.md), an [Attribute Provider](/standards/issuance/configuration-attribute-provider.md) endpoint, and Embed UI installed - see [Embedded UI](/standards/embedded-ui/overview.md).

### Who calls what

**Your platform credentials never reach the browser.** Creating the Offer goes through **your back end**, which returns to the browser only what it needs.

On this flow that is the *only* platform call in the journey. The `tx_code` never touches the platform's delivery endpoint, because you send it yourself, out of band.

```mermaid
flowchart LR
    E["Embed UI<br/>in your page"] --> B["Your back end"] --> P["Platform<br/>Integration API"]
    B -.->|"you send the tx_code<br/>email, SMS, in-app"| U["Holder"]
    style E fill:#e6f4ea,stroke:#34a853
    style B fill:#e8f0fe,stroke:#4285f4
    style P fill:#fff4e5,stroke:#f9ab00
```

### How it differs from Flow 1

On [Flow 1's equivalent journey](/standards/issuance/flow-1/trigger-by-user-for-any-wallet-email-tx_code-delivery/method-2-api-+-embed-ui.md), Embed UI asks the Holder for an address and the platform emails the code. Here, neither happens:

* Turn the address question **off** with `contactInfoOptions: { allowContactInput: false }`. There is nothing for the platform to do with an address.
* Send the `txCode` from the Offer response through your own channel, before or as the Holder reaches the code-entry screen.

There is no `deliverTxCode` here either - it exists to drive the platform's delivery endpoint, which this flow doesn't use. A resend is your own channel sending the same code again.

```javascript
import { issueVC } from '@equs-ai/dtk-embedded-ui'

issueVC({
  getCredentialOfferUri,   // creates a claimless Offer; you send its txCode yourself
  userInfo: { id, email },
  externalWallet: { name: 'Any wallet', supported: true },
  manualTxCode: true,
  contactInfoOptions: { allowContactInput: false },
  onLoading,
})
```

`manualTxCode: true` keeps the code-entry screen in the journey even for an EQUS Wallet Holder, which is what you want when the code came from you.

### Canceling an issuance in flight

If the Holder navigates away mid-flow, `cleanUpIssueVC()` cancels the issuance: it removes Embed UI's message listeners and closes its iframe. `cleanUpEmbeddedUi` calls it for you - see [Embedded UI](/standards/embedded-ui/overview.md).

### Track the result

See [Issuance Results](/standards/issuance/issuance-results.md).


---

# 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 by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.toolkit.equs.ai/standards/issuance/flow-3/trigger-by-user-for-any-wallet-email-tx_code-delivery/method-2-api-+-embed-ui.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
