···175175Blento.notifyNavigate(`/${session.did}/event/r/${rkey}`);
176176```
177177178178+### `Blento.promptLogin(): void`
179179+180180+Ask the parent to show its login modal. Fire-and-forget — there is no
181181+returned Promise. To detect when the user has signed in, subscribe to
182182+`session` events:
183183+184184+```js
185185+if (!Blento.getSession()) {
186186+ const off = Blento.on('session', (s) => {
187187+ if (s) {
188188+ off();
189189+ doTheThing();
190190+ }
191191+ });
192192+ Blento.promptLogin();
193193+}
194194+```
195195+196196+Calling `promptLogin()` while the user is already signed in is a no-op from
197197+the iframe's perspective; the parent may still display the modal.
198198+178199## Errors
179200180201All write rejections are `BlentoError` instances with a stable `.code`:
···213234{ v: 0, id, type: 'deleteRecord', payload: { collection, rkey } }
214235{ v: 0, id, type: 'applyWrites', payload: { writes, validate? } }
215236{ v: 0, id, type: 'uploadBlob', payload: { bytes: number[], mimeType } }
216216-{ v: 0, type: 'blento:resize', heightPx } // unsolicited
217217-{ v: 0, type: 'blento:navigate', url } // unsolicited
237237+{ v: 0, type: 'blento:resize', heightPx } // unsolicited
238238+{ v: 0, type: 'blento:navigate', url } // unsolicited
239239+{ v: 0, type: 'blento:promptLogin' } // unsolicited
218240```
219241220242`id` is any unique string you generate — the parent echoes it on the response.