プライバシーポリシー

最終更新日: 2026-08-31 / 発効日: 2026-08-13

Aifuda(合札)は、メールに届いた予約情報を、必要な瞬間に取り出せるようにする iOS アプリです。

このアプリの設計方針は一言で言えば「メール本文を Aifuda のサーバへ送らない」ことです。以下はその具体的な内訳です。


1. 要約

開発者自身が保持する個人情報のデータベースありません
分析 / 広告 / トラッキング SDK広告・トラッキング SDK は無し(サブスク用に RevenueCat のみ)
広告表示しません
ユーザー登録・アカウント作成必要ありません(Apple ID による App Store 課金は除く)
メール本文の送信先Aifuda のサーバには送りません。端末内で読み取ります。Outlook とサンプルでは、予約として認識したメールの本文を端末内に残し、アプリの中で見返せます(2-6)。Gmail の本文は残しません。予約と認識できなかったメールはその場で破棄します
開発者のサーバが受け取るものApple Wallet パスの manifest.json(ファイル名とハッシュ値の辞書)/端末確認と Live Activity 用の値(3-5)。「Wallet リンク」で他の人に渡したときだけ、パスのファイルそのものを最長 48 時間預かります(3-4)。「Aifuda のリンク」での共有はサーバを通りません(3-4a)
サブスクリプションAifuda Pro は Apple / RevenueCat 経由。購入履歴は App Store のプライバシー表示どおり申告します

2. 端末の中だけに保存されるもの

2-1. 予約情報(iOS の SwiftData / アプリ専用領域)

メールから取り出した構造化済みの予約情報を保存します。Outlook とサンプルでは、予約として認識したメールの本文も、その予約に紐づけて端末内に保存します(下記 2-6)。Gmail から届いたメールの本文は保存しません。

保存する項目:

保存しない項目 — ここでいう「保存しない」は構造化フィールドとしては保存しないという意味です。以下の値がメール本文にそのまま書かれている場合、Outlook とサンプルではその本文自体が予約として認識できれば下記 2-6 のとおり端末内に残ります。Gmail では本文を残さないので、本文の一部としても残りません:

会員 ID・IC カード番号・氏名・連絡先は、Outlook とサンプルでは予約として認識したメールの本文にそのまま書かれていれば、本文の一部として端末内に残ります(下記 2-6)。Gmail では本文を残さないので、これらも本文としては残りません。

これらは iPhone のアプリ専用領域に保存され、iOS のデータ保護(端末の暗号化)の対象です。開発者はアクセスできません。

2-2. アクセストークン(iOS キーチェーン)

Gmail / Outlook と連携した場合、アクセストークンとリフレッシュトークンを iOS のキーチェーンにのみ保存します。設定ファイル・ログ・サーバのいずれにも書き出しません。

あわせて、接続したアカウントのメールアドレスを同じキーチェーンに保存します。用途は連携画面に「どのアカウントに接続しているか」を表示することだけで、端末外には送信しません(開発者のサーバにもログにも渡しません)。連携を解除すると削除します。

2-3. アプリの設定(iOS の UserDefaults)

秘密でない設定値のみを保存します。OAuth クライアント ID、Wallet 署名サーバの URL、Pass Type ID、Team ID など。署名サーバの認証トークンだけは例外的にキーチェーンに保存します。

2-4. ウィジェット用のスナップショット(App Group 共有領域)

ホーム画面 / ロック画面のウィジェットと Live Activity に表示するため、表示に必要な最小項目だけを JSON ファイルとして端末内の共有領域に書き出します。

含まれるもの: 列車名、発駅・着駅、発時刻・着時刻、先頭 1 名分の座席、人数

含まれないもの: お預かり番号、金額、会員 ID ハッシュ(ロック画面に出る面には機微な情報を載せない方針のため)

2-5. 自己紹介カード(ユーザーが入力したもの)

Aifuda には、名刺のように渡せる自己紹介カードを作る機能があります。ここだけは、メール由来ではなくユーザーが入力した情報を保存します。

保存する項目: 表示名、ユーザーが追加した項目(タイトルと内容。個数と文言はユーザーが設定します)、カードに設定した画像(帯とアイコン)、および QR に「連絡先」を選んだ場合のメールアドレスと電話番号。

2-6. 元のメールの本文

Outlook とサンプルでは、予約として認識できたメールについてその本文を端末内に保存し、予約の詳細画面から見返せるようにしています。いまの予約情報と一致する値(時刻・号車・座席・予約番号・駅名など)には、本文中で黄色の印が付くことがあります。表記の揺れなどで一致しない場合は印が付きません。

Gmail から届いたメールの本文は保存しません。予約や荷物として読み取った構造化情報だけが残ります。以前のビルドで残っていた Gmail 由来の本文は、同期のたびに消します。


3. 端末から外に出る通信

アプリが通信する先は以下がすべてです。

通信先何のために何を送るか
Google(accounts.google.com / oauth2.googleapis.com / gmail.googleapis.com) Gmail 連携(ユーザーが有効にした場合のみ) 認可リクエストと、from:expy.jp 等の送信元の検索条件および subject:予約確認 等の件名の検索条件(下記 3-1)。取得したメールは端末上で処理し、Aifuda がメール本文を開発者のサーバその他のサービスへ送信することはありません(iOS バックアップについては上記 2-6)
Microsoft(login.microsoftonline.com / graph.microsoft.com) Outlook 連携(ユーザーが有効にした場合のみ) 同上
Apple(App Store / StoreKit) Aifuda Pro の購入・復元・領収書検証 Apple の課金フローに必要な情報(決済は Apple が処理)
RevenueCat 購読状態(entitlement)の確認と不正防止 匿名のアプリユーザー ID、購入トークン / 領収書に相当する情報。メール本文や予約内容は送りません
Aifuda の署名サーバ Apple Wallet パスの署名(ユーザーが機能を使った場合のみ) manifest.json のバイト列だけ(下記 3-2)
Aifuda の共有サーバ(署名サーバと同じホスト) 「Wallet リンク」で共有したときだけ(共有シートで選んだ場合のみ) 組み上がった .pkpass そのもの(相手が Wallet に追加するファイル。下記 3-4)。最長 48 時間で自動削除
Aifuda のサーバ(端末確認 / Live Activity) 署名・共有の要求が本物の端末からであることの確認(App Attest)と、Live Activity の自動開始(Aifuda Pro) 端末ごとの鍵 ID と公開鍵、APNs のプッシュトークン、開始予定時刻と鍵付きハッシュにした予約の識別子(下記 3-5)。駅名・座席・確認番号は送りません
DuckDuckGo(html.duckduckgo.com) 画像からの取り込みで、オンデバイスモデルが空港コードや便名などを短い事実確認をする場合のみ モデルが生成した短い検索クエリだけ(下記 3-3)。画像・OCR 全文・氏名・座席は送らない
Amazon の画像配信(m.media-amazon.com) 荷物の商品サムネイル画像の取得 注文メールに記載された画像 URL への取得リクエストを送ります。画像の取得に伴い、通信元の IP アドレスなどの通常の通信情報も送信されます。注文番号・追跡番号・氏名・住所を追加して送ることはありません。商品画像の取得は設定でオフにできます

分析ビーコン・広告ネットワーク・クラッシュレポート SDK は組み込んでいません。第三者 SDK は RevenueCat(Purchases)のみです。

3-0. Aifuda Pro(サブスクリプション)について

3-1. メール本文について

Gmail API / Microsoft Graph へのリクエストは端末から直接行います。開発者のサーバは経由しません。取得したメール本文を Aifuda のサーバへ送ることはありません。Outlook とサンプルでは、予約として読み取れたメールの本文を端末内のデータベースに保存し、アプリの中で見返せるようにします(上記 2-6)。Gmail の本文は保存しません。予約と認識できなかったメールは、その場で破棄します。

アプリは次の2種類の検索条件を使います。(1) 対応している予約サービスの送信元による条件と、(2) 送信元を限定しない subject:予約確認 のような件名による条件です。件名の条件で取得する候補メールの通数には、1回の同期ごとに上限があります。これらの条件に一致したメールは端末へ取得し、端末上で予約かどうかを判定します。

件名の条件で対応していない送信元から取得したメールを保存するのは、本文に Aifuda が対応する schema.org 形式の予約用構造化データが含まれ、予約として認識できた場合だけです。予約と認識できなかったメールは、本文も件名も判定後すぐに破棄し、保存しません。

Aifuda Pro の設定(既定はオフ)を明示的にオンにした場合に限り、こうしたメールの本文をオンデバイスモデルも読みます。この場合は schema.org の構造化データが無いメールでも、モデルが予約と読み取れたものは保存します。モデルが読んだ予約には「端末で読取」の印が付き、アプリ内で元のメールと見比べられます。

3-2. Apple Wallet パスの署名について

Apple Wallet のパス(.pkpass)には、Apple が発行した証明書による署名が必要です。この署名鍵をアプリに同梱することは Apple の規約上も安全上も許されないため、署名だけを開発者のサーバに依頼します。

このときサーバに送るのは manifest.json だけです。これは「ファイル名 → そのファイルの SHA-1 ハッシュ値」の辞書で、予約の内容(駅名・座席・時刻・お預かり番号)は含まれません。パス本体(pass.json)も画像も、署名のときには送りません。

ここで説明しているのは自分の Wallet にパスを入れるときの話です。パスを他の人に渡す「Wallet リンク」を作ったときだけは、パスのファイルそのものをサーバに預けます — 下記 3-4 を必ずお読みください。

サーバは受け取った manifest.json の中身をログに記録しません。記録するのはバイト数・ファイル数・エラー理由コードだけです。署名を返した後、リクエストの内容は保持しません。

正確を期すための注記: SHA-1 ハッシュは「送っていない」ことの説明であって、暗号学的な秘匿の保証ではありません。パスのテンプレートと候補値を知っている者が総当たりを行えば、元の値を推測できる可能性は理論上あります。私たちは「予約の内容をサーバに送らない」と述べているのであって、「サーバから復元不可能である」とは述べていません。

3-3. 画像からの取り込みでの事実確認検索について

画像からの取り込みでは、画像の OCR と構造化は端末内のオンデバイス言語モデルで行います。画像そのものと OCR 全文は端末から出しません。

モデルが空港コードや便名などを解釈するために、短い検索クエリだけを DuckDuckGo へ送ることがあります(例: NGS airport Japan)。氏名・座席・確認番号・OCR 全文はクエリに含めないよう指示・長さ制限しています。この経路は画像からの取り込みに限り、メール本文のオンデバイス抽出には使いません(Gmail Limited Use との整合)。検索クエリの取り扱いは DuckDuckGo のプライバシーポリシーに従います。

3-4. 「Wallet リンク」で他の人にパスを渡すときについて

予約を共有するとき、共有シートで 「Wallet リンク」を選んだ場合だけ、アプリは組み上がった .pkpass ファイルを Aifuda のサーバに預け、相手がそこから開ける短い URL を作ります。これは「相手の iPhone の Wallet に、予約の控えを追加してもらう」ための唯一の方法です(Wallet はファイルを URL から取得するため)。

したがって、この操作をしたときに限り、パスの中身がサーバに置かれます。中身には共有相手に見せるための情報 — 区間や施設名・日時・列車名や便名・座席・予約番号・住所・電話番号など、券面と裏面に出る値 — が含まれます。共有シートで「テキスト」だけを選んだ場合、この経路は発生しません。

3-4a. 「Aifuda のリンク」で他の人に予約そのものを渡すときについて

共有シートには「Wallet リンク」とは別に 「Aifuda のリンク」 があります。こちらを選ぶと、相手が Aifuda を入れていれば自分の fuda として取り込めるリンクができます。

このリンクは開発者のサーバを 1 度も通りません。 予約の要約そのものが、リンクの # から後ろ(フラグメント)に圧縮して入っています。フラグメントはウェブの仕組み上サーバへ送られない部分なので、開発者はこのリンクが作られたことも、渡されたことも知りません。上記 3-4 の「最長 48 時間サーバに預かる」は 「Wallet リンク」だけの話です。

3-5. 端末確認(App Attest)と Live Activity の自動開始について

署名と共有のサーバは、要求が本物の iPhone 上の本物の Aifuda から来ていることを Apple の App Attest で確認します。これは第三者にサーバを踏み台にされないための措置です。このときサーバは、端末ごとの鍵の ID・その公開鍵・署名回数のカウンタ・最後に使われた日時を保存します。氏名・メールアドレス・Apple ID とは結び付けませんが、同じ端末を継続して区別するため、App Store の表示では Device ID を「端末に紐付く」ものとして申告します。接続元 IP アドレスは不正利用を防ぐレート制限にも使います。

Live Activity の自動開始(Aifuda Pro)を使うと、サーバは加えて、APNs のプッシュトークンと、「いつ Live Activity を出すか」の予定表を保持します。予定表に入るのは発火時刻と、端末内の秘密で鍵付きハッシュにした予約の識別子だけで、駅名・座席・列車名・確認番号は含まれません(Apple の APNs を通るペイロードにも入りません)。予定は発火したら即座に削除されます。この機能を使わない場合、予定表は空のまま送られ、サーバ側の記録も消えます。


4. Google ユーザーデータの取り扱い(Limited Use)

Gmail 連携は現在配信中のビルドでは利用できません。 Google 側の OAuth 審査(restricted scope verification)が完了するまでの間、意図的に無効化しています。この章は Gmail を有効化する時点で適用される取り扱いを説明したものです。

Gmail 連携を使う場合、Aifuda は https://www.googleapis.com/auth/gmail.readonly(読み取り専用)スコープのみを要求します。メールの送信・変更・削除は行いません。

Aifuda が Google API から受け取った情報の利用および他のアプリへの転送は、Google API Services User Data Policy(Limited Use 要件を含む)に準拠する方針です。

具体的には、Aifuda は Google ユーザーデータについて次を行わない方針です:

Gmail から取得したメール本文は端末内でのみ扱い、開発者のサーバには一切送信しません。本文は保存せず、取り出された予約情報と荷物の情報だけが端末内に残ります。以前のビルドで残っていた Gmail 由来の本文は、同期のたびに消します。

連携の取り消し: アプリ内の「連携」画面から「連携を解除」を選ぶと、端末に保存されたトークン・接続アドレス・そのアカウント由来の保存本文を削除します(予約情報は残ります)。Google アカウントのセキュリティ設定からだけアクセス権を取り消した場合、端末内に保存されたトークンや本文は自動では消えません。確実に消すにはアプリ内の「連携を解除」も行ってください。


5. Microsoft Graph(Outlook)の取り扱い

Outlook 連携を使う場合、Aifuda は Mail.Read(読み取り専用)、User.Read、offline_access、openid のスコープのみを要求します。User.Read は接続したアカウントのメールアドレスを1回だけ読み、連携画面の表示に使うためのものです(上記 2-2)。メールの送信・変更・削除は行いません。

Microsoft Graph へのリクエストは端末から直接行い、メール本文を Aifuda のサーバへ送ることはありません。予約として認識したメールの本文は、上記 2-6 のとおり端末内に残します(Gmail とはここが違います)。取得したデータを広告に利用すること、第三者に提供すること、モデルの学習に使うことはありません。

連携の取り消し: アプリ内の「連携」画面から解除できます。この操作は端末に保存されたトークン・接続アドレス・そのアカウント由来の保存本文を削除します(予約情報は残ります)。Microsoft アカウントのアプリとサービス(職場・学校アカウントの場合は My Apps)からだけ権限を取り消した場合、端末内に保存されたトークンや本文は自動では消えません。確実に消すにはアプリ内の「連携を解除」も行ってください。


6. 位置情報・写真・連絡先・カレンダー

現在地は取得しません。 端末の位置を読む仕組み(CLLocationManager)を使っておらず、位置情報の権限も要求しません。連絡先とカレンダーにも触れません。

ただし地図を描くために、予約に書かれた場所を Apple の地図サービスへ送ります。 送るのは次の 2 つの場面だけです。

いずれも送り先は Apple で、開発者のサーバは経由しません。送るのは予約に書かれた場所だけで、現在地は含まれません。Apple 側での取り扱いは Apple のプライバシーポリシーによります。

写真ライブラリへのアクセス権も要求しません。 スクリーンショットからの取り込みと、Wallet パスの券面に使う写真は、iOS の写真ピッカーで選んだ 1 枚だけがアプリに渡る仕組みです(アプリはライブラリを見られません)。選んだ写真は端末内だけで処理され、券面用に切り取った画像は端末内にのみ保存されます(iCloud バックアップからは除外)。サーバには送りません — Wallet パスの署名でサーバへ送るのは manifest.json(ファイル名とチェックサムの辞書)だけで、画像そのものは 1 バイトも出ません。他の人に渡す共有リンクにも、この写真は含めていません。

カメラは、「写真を撮る」を選んだときだけ使います。 紙のチケットやほかの端末の画面をその場で撮って読み取るための導線で、許可を求めるのはそのボタンを選んだ瞬間です(断ってもアプリの他の機能は変わりません)。撮った写真の扱いはピッカーで選んだ写真とまったく同じで、読み取りは端末内で行い、写真そのものはサーバへ送りません。カメラを裏で開くことも、動画や音声を録ることもありません。

自己紹介カードの画像だけは扱いが逆です。 カードは渡すために作るものなので、設定した画像はパスの中に入り、Wallet からカードを共有すると相手にも渡ります(上記 2-5)。この受け渡しも Wallet が直接行うもので、開発者のサーバは経由しません。

7. トラッキングと広告

トラッキングは行いません。 広告識別子(IDFA)を取得せず、App Tracking Transparency の許可も求めません。広告は表示しません。他社のトラッキング SDK は組み込んでいません。

8. 子どもの個人情報

Aifuda は子どもを対象としたアプリではありません。開発者がメール本文を受け取ることはなく、子どもの個人情報を意図的に開発者側へ収集することもありません。

9. データの削除

消したいもの方法
保存された予約情報予約ごとの削除、設定の「すべての予約を削除」、またはアプリの削除
保存された元メールの本文その予約を削除すると一緒に消えます。連携を解除すると、そのアカウントから取り込んだぶんがすべて消えます。1予約あたり16通を超えた分は、古いものから自動的に消えます
アクセストークンアプリ内「連携」画面の「連携を解除」。またはアプリ削除
Google / Microsoft 側のアクセス権上記 4 章・5 章のリンクから取り消し(端末内のトークンやコピーは別。上記 2 行の操作が必要です)
開発者が保持しているデータ恒久的な予約データベースはありません。「Wallet リンク」の .pkpass は48時間で削除します。端末確認・Live Activity・不正利用防止の値は機能とセキュリティに必要な間保持します(3-5、11章)

Aifuda はユーザー登録を必要としないため、削除すべきアカウントも存在しません。

10. 第三者への提供

個人情報を広告・販売目的で第三者に提供することはありません。提供するのは、ユーザーが明示的に選んだ共有(「Wallet リンク」/「Aifuda のリンク」。後者はサーバを通らず、渡す相手をユーザー自身が選びます)と、上記 3 章に記載した処理先への送信だけです。法令に基づく開示請求があった場合、開発者が開示できるのは 3-4・3-5 に記載したデータに限られます。

11. データの保存場所と期間

予約情報はすべてユーザーの iPhone 内にあります。開発者側に恒久的な予約のデータベースはありません。予約情報は、個別削除・「すべての予約を削除」・アプリの削除のいずれかまで端末内に保存されます。元メールの本文はこれに加えて、1予約あたり16通の上限を超えたときと、アカウントの連携を解除したときにも削除されます。

開発者のサーバ(Cloudflare)に置かれるものは次のとおりです。恒久的な予約データベースはありません。

12. ポリシーの変更

内容を変更する場合は、このページの「最終更新日」を更新します。重要な変更がある場合はアプリの更新情報でもお知らせします。

13. お問い合わせ

Privacy Policy

Last updated: 2026-08-31 / Effective: 2026-08-13

Aifuda is an iOS app that surfaces reservations buried in your mailbox at the moment you need them.

The design principle in one sentence: mail bodies are not sent to Aifuda’s servers. The details follow.


1. Summary

Personal data database kept by the developerNone
Analytics / advertising / tracking SDKsNo ads or tracking SDKs (RevenueCat only, for subscriptions)
AdvertisingNone
Sign-up or account creationNot required (except Apple ID for App Store purchases)
Where mail bodies are sentNot to Aifuda’s servers. They are read on device. Outlook and the sample keep the body of a recognized reservation on the device so you can read it again in the app (2-6). Gmail bodies are not kept. Mail that is not recognized as a reservation is discarded on the spot
What the developer's server receivesThe manifest.json of an Apple Wallet pass (a dictionary of file names and hashes) and the values needed for the device check and Live Activities (3-5). Only when you hand a pass to someone else as a “Wallet link” is the pass file itself held, for at most 48 hours (3-4). An Aifuda link shares its payload directly and does not use the server (3-4a)
SubscriptionsAifuda Pro via Apple / RevenueCat. Purchase history is disclosed in the App Store privacy label

2. What is stored on your device only

2-1. Reservations (SwiftData, app-private container)

The structured reservation extracted from the mail is stored. Outlook and the sample also keep the body of the mail it came from, linked to that reservation (see 2-6). Bodies from Gmail are not stored.

Stored fields:

Not stored — "not stored" here means not extracted into a structured field. If a value below appears verbatim in the mail body, Outlook and the sample keep that body per 2-6 whenever the mail is recognized as a reservation. Gmail does not keep the body, so those values do not remain as part of a stored email either:

If a membership ID, IC card number, name, or contact detail appears verbatim in an Outlook or sample email that was recognized as a reservation, it remains in the stored body as part of that email (see 2-6). Gmail does not keep the body, so those values do not remain that way.

This data lives in the app's private container and is covered by iOS Data Protection. The developer cannot access it.

2-2. Access tokens (iOS Keychain)

If you connect Gmail or Outlook, the access and refresh tokens are stored only in the iOS Keychain. They are never written to preferences, logs, or any server.

The email address of the account you connect is stored in the same Keychain. It is used only to show which account is connected on the Accounts screen, it is not sent to Aifuda’s servers or written to logs, and it is deleted when you disconnect.

2-3. App settings (UserDefaults)

Only non-secret values: OAuth client IDs, the Wallet signing server URL, Pass Type ID, and Team ID. The signing server's auth token is the one exception and is stored in the Keychain.

2-4. Widget snapshot (App Group container)

To render the home screen / lock screen widget and the Live Activity, the app writes a JSON file containing only what is displayed: train name, departure and arrival stations, departure and arrival times, the first seat, and the seat count.

It deliberately excludes the confirmation number, fare amounts, and the membership ID hash, because that data would otherwise appear on the lock screen.

2-5. Your intro card (what you type in yourself)

Aifuda lets you build an intro card you can hand over like a business card. This is the one place where the app stores information you typed, rather than anything read from mail.

Stored: display name, the fields you arranged (a title and its content — how many, and what they are called, is up to you), the images you set on the card (the band and the icon), and — only if you set the QR code to “contact” — an email address and a phone number.

2-6. The original mail

For Outlook and the sample, when mail is recognized as a reservation, the body is stored on your device and can be read again from the reservation’s detail screen. Values in the body that match the current reservation may be highlighted in yellow; wording differences can keep a value from being highlighted.

Bodies from Gmail are not stored. Only the structured reservation or package Aifuda read remains. Any Gmail body left by an earlier build is deleted on each sync.


3. Network traffic that leaves your device

These are the only destinations the app contacts:

DestinationPurposeWhat is sent
Google (accounts.google.com, oauth2.googleapis.com, gmail.googleapis.com) Gmail integration, only if you enable it Authorization requests, sender filters such as from:expy.jp, and subject filters such as subject:reservation (see 3-1). Retrieved messages are processed on device, and Aifuda does not transmit their bodies to the developer's servers or any other service (see 2-6 regarding iOS backups)
Microsoft (login.microsoftonline.com, graph.microsoft.com) Outlook integration, only if you enable it Same as above
Apple (App Store / StoreKit) Purchase, restore, and receipt validation for Aifuda Pro What Apple’s billing flow requires (Apple processes payment)
RevenueCat Entitlement checks and fraud prevention Anonymous app user ID and purchase / receipt material. Mail bodies and reservation contents are never sent
Aifuda signing server Signing an Apple Wallet pass, only if you use that feature Only the bytes of manifest.json (see 3-2)
Aifuda share server (same host as the signing server) Only when you share a reservation and pick “Wallet link” The assembled .pkpass itself — the file the other person adds to Wallet (see 3-4). Deleted automatically within 48 hours
Aifuda server (device check / Live Activity) Verifying that a signing or sharing request comes from a genuine device (App Attest), and starting Live Activities automatically (Aifuda Pro) A per-device key ID and public key, an APNs push token, a start time, and a keyed hash of the reservation identifier (see 3-5). Station names, seats, and confirmation numbers are never sent
DuckDuckGo (html.duckduckgo.com) During image import only, when the on-device model needs a short factual lookup (airport codes, flight numbers, etc.) Only a short search query generated by the model (see 3-3). The image, full OCR text, passenger names, and seats are not sent
Amazon image CDN (m.media-amazon.com) Downloading product thumbnails for parcels A request to the image URL in the order email, along with standard network information such as your IP address. The app does not add order numbers, tracking numbers, names, or addresses to the request. You can turn off product image downloads in Settings

There are no analytics beacons, ad networks, or crash-reporting SDKs. The only third-party SDK is RevenueCat (Purchases).

3-0. Aifuda Pro (subscriptions)

3-1. Mail bodies

Requests to the Gmail API and Microsoft Graph are made directly from your device. They do not pass through the developer's servers. Retrieved mail bodies are not sent to Aifuda’s servers. Outlook and the sample store the body of a recognized reservation in the on-device database so you can read it again in the app (see 2-6). Gmail bodies are not stored. Mail that is not recognized as a reservation is discarded on the spot.

The app uses two types of search filters: (1) sender filters for the reservation services Aifuda supports, and (2) subject filters such as subject:reservation, applied whatever the sender. The number of candidate messages retrieved through subject filters is limited per sync. Messages matching either filter are retrieved to your device and evaluated there.

A message retrieved from an unsupported sender through a subject filter is saved only when its body contains reservation structured data in a schema.org format Aifuda supports and Aifuda recognizes it as a reservation. Once Aifuda determines that a message is not a reservation, its body and subject are discarded immediately and never stored.

Only if you explicitly turn on the Aifuda Pro setting (off by default) does the on-device model also read the bodies of these messages; in that case a message without schema.org data can still be saved when the model reads a reservation out of it. A reservation read by the model is marked “On-device” so you can compare it with the original mail inside the app.

3-2. Apple Wallet pass signing

An Apple Wallet pass (.pkpass) must be signed with a certificate issued by Apple. Bundling that signing key inside the app is prohibited by Apple's terms and unsafe in any case, so the signing step alone is delegated to the developer's server.

Only manifest.json is sent. It is a dictionary mapping file names to SHA-1 hashes; it contains none of the reservation's content (stations, seats, times, confirmation number). The pass body (pass.json) and the images are not sent for signing.

This describes adding a pass to your own Wallet. There is one case where the pass file itself does leave the device: when you create a “Wallet link” to hand the pass to someone else. Please read 3-4 below.

The server does not log the contents of manifest.json. It logs only byte counts, file counts, and error reason codes, and it retains nothing after returning the signature.

A precise note: the SHA-1 hashes explain what is not sent; they are not a cryptographic guarantee of secrecy. Someone who knows the pass template and the candidate values could in principle recover them by brute force. Our claim is that reservation content is not sent to the server — not that it would be unrecoverable from what is sent.

3-3. Factual web lookup during image import

For image import, OCR and structuring run with the on-device language model. The image itself and the full OCR text never leave the device.

When the model needs help interpreting an airport code or flight number, it may send only a short search query to DuckDuckGo (for example NGS airport Japan). Prompts and length limits keep passenger names, seats, confirmation numbers, and full OCR out of the query. This path is used only for image import, not for on-device extraction of mail bodies (to stay aligned with Google Limited Use). DuckDuckGo handles the query under its Privacy Policy.

3-4. Handing a pass to someone else with a “Wallet link”

When you share a reservation and pick “Wallet link” in the share sheet — and only then — the app uploads the assembled .pkpass file to Aifuda's server and creates a short URL the other person can open. This is the only way to put a copy of your reservation into someone else's Wallet, because Wallet fetches the file from a URL.

So this action, and only this action, places the contents of the pass on the server. Those contents are what you intend the other person to see: route or venue, date and time, train or flight number, seat, reservation number, address, and phone number — the values printed on the front and back of the pass. Sharing as plain text does not use this path.

3-4a. Handing a reservation to another Aifuda user with an “Aifuda link”

The share sheet also offers an “Aifuda link”. If the recipient has Aifuda, they can import the reservation as their own fuda.

This link never passes through the developer’s server. A compressed reservation summary is carried after the # in the link. That fragment is not sent to a web server, so the developer does not know that the link was created or shared. The 48-hour server retention in 3-4 applies only to a Wallet link.

3-5. Device check (App Attest) and automatic Live Activities

The signing and sharing server verifies with Apple's App Attest that a request comes from a genuine copy of Aifuda on a genuine iPhone, so that the server cannot be abused by third parties. To do that it stores a per-device key ID, its public key, a signature counter, and timestamps. They are not tied to your name, e-mail address, or Apple ID, but they do persistently distinguish the same device; this is why Device ID is declared as linked in the App Store privacy label. The source IP address is also used for anti-abuse rate limits.

If you use automatic Live Activities (Aifuda Pro), the server additionally keeps an APNs push token and a schedule of when to start a Live Activity. The schedule holds only the fire time and a keyed hash of the reservation identifier computed with a secret held on your device; station names, seats, train numbers, and confirmation numbers are not included (and never appear in the payload that passes through Apple's APNs either). Each entry is deleted as soon as it fires. If you do not use the feature, an empty schedule is sent and the server-side record is cleared.


4. Google user data (Limited Use)

The Gmail integration is not available in the currently shipping build. It is intentionally disabled while Google's OAuth review (restricted scope verification) is in progress. This section describes the handling that will apply once it is enabled.

When you use the Gmail integration, Aifuda requests only the https://www.googleapis.com/auth/gmail.readonly scope. It never sends, modifies, or deletes mail.

Aifuda's use and transfer to any other app of information received from Google APIs is intended to adhere to the Google API Services User Data Policy, including the Limited Use requirements.

Specifically, Aifuda's intent is not to:

Mail bodies retrieved from Gmail are handled entirely on device and are never transmitted to the developer's servers. The body is not stored; only the extracted reservation or package remains on the device. Any Gmail body left by an earlier build is deleted on each sync.

Revoking access: choosing "Disconnect" on the Accounts screen in the app deletes the stored token, the connected address, and the bodies stored for that account (reservations remain). If you revoke access only from your Google Account permissions page, the locally stored token and bodies are not deleted automatically — use "Disconnect" in the app as well to remove them.


5. Microsoft Graph (Outlook)

When you use the Outlook integration, Aifuda requests only Mail.Read, User.Read, offline_access, and openid. User.Read is used once, to read the address of the account you connected so the Accounts screen can show it (see 2-2). It never sends, modifies, or deletes mail.

Requests to Microsoft Graph go directly from your device. Mail bodies are not sent to Aifuda’s servers. The body of an email from which a reservation was extracted is kept on the device as described in 2-6 (this is the difference from Gmail). The data is never used for advertising, transferred to third parties, or used to train models.

Revoking access: choosing "Disconnect" on the Accounts screen in the app deletes the stored token, the connected address, and the bodies stored for that account (reservations remain). If you revoke access only from Microsoft account apps and services (or My Apps for work or school accounts), the locally stored token and bodies are not deleted automatically — use "Disconnect" in the app as well to remove them.


6. Location, photos, contacts, calendar

Your location is never read. The app does not use the framework that reads the device’s position (CLLocationManager) and never prompts for location permission. Contacts are not touched either.

Your calendar is read only after you ask for it. Two places do it, and both request calendar permission at that moment: the “Import from calendar” screen, where you pick the events, and the “Auto-import events with a place” setting, which is off by default and explained in full before it can be turned on. With that setting on, Aifuda looks at events from yesterday through the next six months while the app is open or coming back to the foreground, and imports only those that have a place, a title, and a start time — never all-day events, invitations you declined, birthdays, or subscribed calendars such as holidays. It never reads your calendar in the background. Only the fields shown on a fuda are stored (title, place, times); event notes and attendees are not. Deleting a fuda keeps that event from being imported again.

Drawing a map does send the places written in your reservation to Apple, in exactly two situations:

Both go to Apple, not to the developer’s server. What is sent is the place written in the reservation — never where you are now. Apple’s own handling is covered by the Apple Privacy Policy.

The app never asks for photo library access either. Importing a screenshot, and choosing the picture for a Wallet pass, both go through the iOS photo picker: only the single image you pick is handed to the app, which cannot see the rest of your library. That image is processed entirely on the device, and the cropped version is stored only on the device (and excluded from iCloud backup). It is never uploaded — signing a Wallet pass sends only manifest.json, a dictionary of file names and checksums; not one byte of the image leaves the phone. Share links you send to other people do not carry the picture either.

The camera is used only when you tap “Take a photo” and open it. Aifuda asks for permission at that moment, so you can read reservation details straight off a paper ticket or another device’s screen. Declining changes nothing else — importing an image you pick still works. The captured photo is not added to your photo library, and it is handled exactly like an image you pick: text recognition and reservation extraction run on the device, and the photo itself is never uploaded. Aifuda does not open the camera in the background, and does not record video or audio.

Images on an intro card are the one exception, by design. A card is made to be handed over, so the images you set are embedded in the pass and travel with it when you share the card from Wallet (§2-5). That hand-off is Wallet’s own; it does not pass through the developer’s server.

7. Tracking and advertising

No tracking. The app does not read the advertising identifier (IDFA), does not present an App Tracking Transparency prompt, and shows no ads. No third-party tracking SDKs are embedded.

8. Children's privacy

Aifuda is not directed at children. Mail bodies are never transmitted to the developer, and the developer does not knowingly collect children's personal data.

9. Deleting your data

WhatHow
Stored reservationsDelete a reservation, use “Delete all reservations” in Settings, or delete the app
Stored original mail bodiesDeleting a reservation deletes them with it. Disconnecting an account deletes every body taken from that account. Anything beyond the 16-per-reservation cap is dropped automatically, oldest first
Access tokens"Disconnect" on the Accounts screen, or delete the app
Google / Microsoft access grantsUse the revocation links in sections 4 and 5 (this is separate from the local token and copies — use the two rows above for those)
Data held by the developerThere is no permanent reservation database. A .pkpass shared as a Wallet link is deleted within 48 hours. Values for device checks, Live Activities, and abuse prevention are kept while required for those functions and security (3-5, section 11)

Aifuda requires no sign-up, so there is no account to delete.

10. Sharing with third parties

Personal data is never sold or shared for advertising purposes. What is shared is limited to what you explicitly choose to share (a "Wallet link") and the destinations described in section 3. In response to a lawful request, the developer can only disclose the data described in 3-4 and 3-5.

11. Storage location and retention

Your reservations live on your iPhone. There is no permanent reservation database on the developer's side. Reservations are kept until you delete them individually, use "Delete all reservations," or delete the app. Original mail bodies are also deleted when the 16-per-reservation cap is reached or when you disconnect the account.

The developer’s server (Cloudflare) holds the following. There is no permanent reservation database:

12. Changes to this policy

If this policy changes, the "Last updated" date above is revised. Significant changes are also noted in the app's release notes.

13. Contact