# Google Wallet API

Google Wallet API আপনাকে প্রোগ্রাম্যাটিকভাবে [Google Wallet পাস](/bn/product/messaging-channels/google-wallet-passes/) তৈরি, আপডেট, তালিকাভুক্ত এবং পরিচালনা করতে দেয়। এটি কন্ট্রোল প্যানেলের [পাস বিল্ডার](/bn/product/messaging-channels/google-wallet-passes/pass-builder/) দ্বারা সম্পাদিত একই অপারেশন সমর্থন করে।

এটি লয়ালটি কার্ড, অফার, গিফট কার্ড, ইভেন্ট টিকিট, ফ্লাইট বোর্ডিং পাস, ট্রানজিট টিকিট এবং জেনেরিক পাস ইস্যু করতে এবং আপনার ব্যবহারকারীদের ডিভাইসে ইতিমধ্যে সংরক্ষিত পাসগুলিতে লাইভ আপডেট পুশ করতে ব্যবহার করুন।

<Aside type="note" title="পূর্বশর্ত: Google Wallet কনফিগারেশন">
আপনি একটি অ্যাপ্লিকেশনের জন্য পাস তৈরি করার আগে, Pushwoosh কন্ট্রোল প্যানেলে সেই অ্যাপ্লিকেশনের জন্য একটি Google Wallet **Issuer ID** এবং **service account key** কনফিগার করা আবশ্যক। সেগুলি ছাড়া, `create` এবং `update` অনুরোধ ব্যর্থ হবে। দেখুন [Android-এর জন্য Google Wallet পাস কনফিগারেশন](/bn/developer/first-steps/connect-messaging-services/android-configuration/android-google-wallet-configuration/)।
</Aside>


## বেস URL

```
https://apple-passkit.svc-nue.pushwoosh.com
```

সমস্ত এন্ডপয়েন্ট HTTPS এর মাধ্যমে পরিবেশন করা হয়। অনুরোধ এবং প্রতিক্রিয়া `application/json` ব্যবহার করে, যদি না অন্যভাবে উল্লেখ করা হয়।

## অথেন্টিকেশন

প্রতিটি অনুরোধে আপনার [Pushwoosh API অ্যাক্সেস টোকেন](/bn/developer/api-reference/api-access-token/) সহ একটি `Authorization` হেডার অন্তর্ভুক্ত করতে হবে:

```
Authorization: Token <api-token>
```

যে অ্যাকাউন্টের টোকেনটি আছে, সেই অ্যাকাউন্টেরই `applicationCode` দ্বারা উল্লেখিত অ্যাপ্লিকেশনটির মালিক হতে হবে। অন্য অ্যাকাউন্টের অ্যাপ্লিকেশনের জন্য একটি অনুরোধ `403 Forbidden` রিটার্ন করবে।

## কনভেনশন

*   **ফিল্ডের নামকরণ:** JSON ফিল্ড `lowerCamelCase` ব্যবহার করে (উদাহরণস্বরূপ, `serialNumber`, `hexBackgroundColor`, `logoUrl`)।
*   **অপূরিত ফিল্ড:** প্রতিক্রিয়াগুলি খালি বা শূন্য-মানের হলেও সমস্ত ফিল্ড অন্তর্ভুক্ত করে।
*   **পরিচয়:** একটি পাস তৈরি করার সময় `serialNumber` সর্বদা সার্ভার দ্বারা নির্ধারিত হয়। তৈরি করার সময় আপনি যে কোনও মান পাঠান তা উপেক্ষা করা হয়। সম্পূর্ণ Google Wallet অবজেক্ট আইডি হল `{issuerId}.{serialNumber}`।
*   **ছবি:** `logoUrl` এবং `heroImageUrl` হল পাবলিক HTTPS URL যা Google ছবিগুলি নিয়ে আসে—আপলোড করা ফাইল নয়।
*   **পাসের স্টাইল:** একটি পাসে ঠিক একটি স্টাইল অবজেক্ট (`generic`, `offer`, `loyalty`, `eventTicket`, `giftCard`, `flight`, বা `transit`) সেট করতে হবে। তৈরির পরে স্টাইল পরিবর্তন করা যাবে না।

### ত্রুটির প্রতিক্রিয়া

| HTTP স্ট্যাটাস | অর্থ |
| :---- | :---- |
| `400 Bad Request` | অবৈধ আর্গুমেন্ট—একটি প্রয়োজনীয় ফিল্ড অনুপস্থিত বা ভুল ফর্ম্যাটে আছে। |
| `401 Unauthorized` | `Authorization` হেডার অনুপস্থিত বা অবৈধ। |
| `403 Forbidden` | অ্যাপ্লিকেশনটি কলারের অ্যাকাউন্টের অন্তর্গত নয়। |
| `404 Not Found` | পাস, টেমপ্লেট, বা অ্যাপ্লিকেশন পাওয়া যায়নি। |
| `503 Service Unavailable` | পরিষেবাটি তার ক্ষমতার শীর্ষে আছে বা সাময়িকভাবে অনুপলব্ধ। |

## এন্ডপয়েন্ট

| পদ্ধতি | পাথ | বর্ণনা |
| :---- | :---- | :---- |
| `POST` | `/api/google/pass/validate` | একটি পাস কনফিগারেশন যাচাই করুন |
| `POST` | `/api/google/pass/create` | একটি নতুন পাস অবজেক্ট তৈরি করুন এবং একটি সেভ লিঙ্ক পান |
| `POST` | `/api/google/pass/update/{serialNumber}` | একটি বিদ্যমান পাস আপডেট করুন; Google পরিবর্তনটি সরবরাহ করে |
| `GET` | `/api/google/pass/{applicationCode}/{serialNumber}/save-link` | একটি "Add to Google Wallet" সেভ লিঙ্ক পান |
| `GET` | `/api/google/pass/{applicationCode}/{serialNumber}` | একটি একক পাস পান |
| `GET` | `/api/google/passes` | একটি অ্যাপ্লিকেশনের জন্য সমস্ত পাসের তালিকা করুন |
| `POST` | `/api/google/pass/{applicationCode}/{serialNumber}/state` | একটি পাস সক্রিয় বা অবৈধ করুন |
| `DELETE` | `/api/google/pass/{applicationCode}/{serialNumber}` | একটি পাস মুছুন |
| `GET` | `/api/google/config` | অ্যাপ্লিকেশনটির Google Wallet কনফিগারেশন পান |
| `GET` | `/api/google/templates` | উপলব্ধ পাস টেমপ্লেটগুলির তালিকা করুন |
| `GET` | `/api/google/templates/{filename}` | একটি একক টেমপ্লেট পান |

## একটি পাস তৈরি করুন

Google Wallet-এ পাস ক্লাস এবং অবজেক্ট তৈরি করে, তারপর সার্ভার-নির্ধারিত সিরিয়াল নম্বর, সম্পূর্ণ অবজেক্ট আইডি, এবং একটি "Add to Google Wallet" সেভ লিঙ্ক রিটার্ন করে।

`POST` `/api/google/pass/create`

### অনুরোধের বডি

| প্যারামিটার | টাইপ | প্রয়োজনীয় | বর্ণনা |
| :---- | :---- | :---- | :---- |
| `pass` | object | হ্যাঁ | পাস বর্ণনা করে এমন [পাস অবজেক্ট](#pass-object)। ঠিক একটি স্টাইল সেট করতে হবে। |
| `userId` | string | হ্যাঁ | যে [Pushwoosh User ID](/bn/developer/api-reference/api-identifiers/#user-id)-তে পাসটি ইস্যু করা হয়েছে। |
| `applicationCode` | string | হ্যাঁ | [Pushwoosh অ্যাপ্লিকেশন কোড](/bn/developer/api-reference/api-identifiers/#application-code)। |

##### অনুরোধের উদাহরণ

```json
{
  "applicationCode": "XXXXX-XXXXX",
  "userId": "user-123",
  "pass": {
    "hexBackgroundColor": "#3c414c",
    "logoUrl": "https://cdn.acme.com/logo.png",
    "loyalty": {
      "programName": "Acme Rewards",
      "accountName": "Jane Doe",
      "accountId": "1234567890",
      "pointsLabel": "Points",
      "pointsBalance": "1200",
      "rewardsTier": "Gold"
    },
    "barcode": {
      "format": "QR_CODE",
      "value": "1234567890"
    }
  }
}
```

### প্রতিক্রিয়া

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `serialNumber` | string | তৈরি করা পাসের সার্ভার-নির্ধারিত অনন্য পরিচয়। |
| `objectId` | string | সম্পূর্ণ Google Wallet অবজেক্ট আইডি: `{issuerId}.{serialNumber}`। |
| `saveLink` | string | "Add to Google Wallet" লিঙ্ক: `https://pay.google.com/gp/v/save/{jwt}`। |
| `message` | string | ফলাফলের বার্তা। |

##### প্রতিক্রিয়ার উদাহরণ

```json
{
  "serialNumber": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "objectId": "XXXXXXXXXXXXXXX.XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX",
  "saveLink": "https://pay.google.com/gp/v/save/{jwt}",
  "message": "Pass created successfully"
}
```

## একটি পাস যাচাই করুন

একটি পাস কনফিগারেশন তৈরি না করেই Google-এর প্রয়োজনীয়তার বিরুদ্ধে পরীক্ষা করে। create কল করার আগে এটি কার্যকর।

`POST` `/api/google/pass/validate`

### অনুরোধের বডি

| প্যারামিটার | টাইপ | প্রয়োজনীয় | বর্ণনা |
| :---- | :---- | :---- | :---- |
| `pass` | object | হ্যাঁ | যাচাই করার জন্য [পাস অবজেক্ট](#pass-object)। |

### প্রতিক্রিয়া

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `valid` | boolean | পাসটি যাচাইকরণে উত্তীর্ণ হয়েছে কিনা। |
| `errors` | array of strings | ব্লকিং সমস্যা যা অবশ্যই সমাধান করতে হবে। |
| `warnings` | array of strings | নন-ব্লকিং পরামর্শ। |

## একটি পাস আপডেট করুন

নতুন বিষয়বস্তু দিয়ে পাস অবজেক্টটি প্যাচ করে। Google তারপর পাসটি সেভ করা প্রতিটি ডিভাইসে আপডেট করা সংস্করণটি সরবরাহ করে। ঐচ্ছিকভাবে আপডেটের সাথে একটি Android নোটিফিকেশন পাঠায়।

`POST` `/api/google/pass/update/{serialNumber}`

### পাথ প্যারামিটার

| প্যারামিটার | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `serialNumber` | string | পাসটি তৈরি করার সময় যে সিরিয়াল নম্বরটি রিটার্ন করা হয়েছিল। |

### অনুরোধের বডি

| প্যারামিটার | টাইপ | প্রয়োজনীয় | বর্ণনা |
| :---- | :---- | :---- | :---- |
| `updates` | object | হ্যাঁ | নতুন বিষয়বস্তু সহ [পাস অবজেক্ট](#pass-object)। স্টাইল পরিবর্তন করা যাবে না। |
| `applicationCode` | string | হ্যাঁ | [Pushwoosh অ্যাপ্লিকেশন কোড](/bn/developer/api-reference/api-identifiers/#application-code)। |
| `notifyMessage` | string | না | যখন খালি নয়, তখন পাসটি সেভ করা প্রত্যেকের কাছে এই টেক্সট সহ একটি Android নোটিফিকেশন পুশ করুন। খালি মানে একটি সাইলেন্ট আপডেট। |
| `notifyOnUpdate` | boolean | না | একটি ফিল্ড-আপডেট নোটিফিকেশনের জন্য অনুরোধ করুন। শুধুমাত্র `loyalty`, `eventTicket`, এবং `flight` পাসগুলি আসলে নোটিফাই করে; অন্যান্য স্টাইলগুলি ফ্ল্যাগটি গ্রহণ করে কিন্তু কখনও একটি পাঠায় না। নোটিফিকেশনগুলি শুধুমাত্র একটি প্রাসঙ্গিক শুরুর সময়ের ৩ ঘন্টার মধ্যে ফায়ার হয়, এবং Google প্রতি ২৪ ঘন্টায় প্রতি পাসে ৩টি নোটিফিকেশনের মধ্যে সীমাবদ্ধ রাখে। |

<Aside type="note" title="আপডেটে নোটিফাই করার দুটি উপায়">
`notifyMessage` পাসটি সেভ করা প্রত্যেকের কাছে একটি কাস্টম Android নোটিফিকেশন পাঠায় এবং যেকোনো পাস স্টাইলের জন্য কাজ করে। `notifyOnUpdate` Google-কে তার নিজস্ব ফিল্ড-আপডেট নোটিফিকেশন পাঠাতে বলে, যা শুধুমাত্র `loyalty`, `eventTicket`, এবং `flight` পাসের জন্য ফায়ার হয়।
</Aside>

### প্রতিক্রিয়া

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `success` | boolean | আপডেট সফল হয়েছে কিনা। |
| `message` | string | ফলাফলের বার্তা। |

## একটি সেভ লিঙ্ক পান

ইতিমধ্যে তৈরি করা একটি পাসের জন্য একটি "Add to Google Wallet" সেভ লিঙ্ক রিটার্ন করে। পাস অবজেক্টটি অবশ্যই ইতিমধ্যে বিদ্যমান থাকতে হবে ([একটি পাস তৈরি করুন](#create-a-pass) এর মাধ্যমে তৈরি)।

`GET` `/api/google/pass/{applicationCode}/{serialNumber}/save-link`

### প্রতিক্রিয়া

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `saveLink` | string | `https://pay.google.com/gp/v/save/{jwt}`। |

<Aside type="tip" title="লিঙ্কটি শেয়ার করুন বা এটি একটি QR কোড হিসাবে রেন্ডার করুন">
`saveLink` একটি "Add to Google Wallet" বাটনের পিছনে রাখুন, অথবা যেকোনো QR লাইব্রেরি দিয়ে এটি একটি QR কোড হিসাবে রেন্ডার করুন। যখন একজন ব্যবহারকারী এটি খোলে, Google তাদের পাসটি সেভ করার জন্য অনুরোধ করে এবং আপডেটের জন্য তাদের ডিভাইস নিবন্ধন করে।
</Aside>

## একটি পাস পান

একটি একক সংরক্ষিত পাস রিটার্ন করে, যার মধ্যে তার সম্পূর্ণ পাস অবজেক্ট অন্তর্ভুক্ত থাকে।

`GET` `/api/google/pass/{applicationCode}/{serialNumber}`

### প্রতিক্রিয়া

`{ "pass": { ... } }` রিটার্ন করে, একটি একক [পাস রেকর্ড অবজেক্ট](#pass-record-object)।

## পাসের তালিকা করুন

একটি অ্যাপ্লিকেশনের জন্য সংরক্ষিত পাসগুলির একটি পেজিনেটেড, সাজানো তালিকা রিটার্ন করে।

`GET` `/api/google/passes?applicationCode=XXXXX-XXXXX&page=0&perPage=20`

### কোয়েরি প্যারামিটার

| প্যারামিটার | টাইপ | প্রয়োজনীয় | বর্ণনা |
| :---- | :---- | :---- | :---- |
| `applicationCode` | string | হ্যাঁ | [Pushwoosh অ্যাপ্লিকেশন কোড](/bn/developer/api-reference/api-identifiers/#application-code)। |
| `orderBy` | string | না | সাজানোর ফিল্ড: `UPDATED` (ডিফল্ট) বা `CREATED`। |
| `orderDirection` | string | না | সাজানোর দিক: `DESC` (ডিফল্ট, নতুনতম প্রথমে) বা `ASC`। |
| `page` | integer | না | শূন্য-ভিত্তিক পেজ ইনডেক্স। ডিফল্ট `0`। |
| `perPage` | integer | না | পেজের আকার। `0` বা বাদ দিলে সার্ভার ডিফল্ট ব্যবহার করে। |

### প্রতিক্রিয়া

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `passes` | array of objects | [পাস রেকর্ড অবজেক্ট](#pass-record-object)-এর বর্তমান পেজ। |
| `page` | integer | রিটার্ন করা পেজ ইনডেক্স। |
| `perPage` | integer | এই প্রতিক্রিয়ার জন্য ব্যবহৃত পেজের আকার। |
| `total` | integer | সমস্ত পেজ জুড়ে অ্যাপ্লিকেশনটির জন্য মোট পাসের সংখ্যা। |

## পাসের স্টেট সেট করুন

একটি পাস সক্রিয় বা অবৈধ করে। একটি অবৈধ (নিষ্ক্রিয়) পাস ব্যবহারকারীর Google Wallet-এর **Expired passes** বিভাগে চলে যায়; রেকর্ডটি রাখা হয় যাতে এটি পুনরায় সক্রিয় করা যায়।

`POST` `/api/google/pass/{applicationCode}/{serialNumber}/state`

### অনুরোধের বডি

| প্যারামিটার | টাইপ | প্রয়োজনীয় | বর্ণনা |
| :---- | :---- | :---- | :---- |
| `active` | boolean | হ্যাঁ | `true` পাসটিকে `ACTIVE` সেট করে; `false` এটিকে অবৈধ করে (`INACTIVE`)। |

### প্রতিক্রিয়া

সফল হলে একটি খালি অবজেক্ট `{}` রিটার্ন করে।

## একটি পাস মুছুন

Google-এ পাসটি অবৈধ করে এবং Pushwoosh-এ তার সংরক্ষিত রেকর্ডটি সরিয়ে দেয়।

`DELETE` `/api/google/pass/{applicationCode}/{serialNumber}`

<Aside type="caution" title="একটি সংরক্ষিত পাস জোর করে সরানো যাবে না">
Google একজন ব্যবহারকারীর ডিভাইসে ইতিমধ্যে সংরক্ষিত একটি পাস সরানোর অনুমতি দেয় না। Delete পাসটিকে অবৈধ করে (এটি **Expired passes**-এ চলে যায়) এবং Pushwoosh রেকর্ডটি ফেলে দেয়।
</Aside>

### প্রতিক্রিয়া

সফল হলে একটি খালি অবজেক্ট `{}` রিটার্ন করে।

## কনফিগারেশন পান

একটি অ্যাপ্লিকেশনের জন্য Google Wallet কনফিগারেশন স্টেট রিটার্ন করে।

`GET` `/api/google/config?applicationCode=XXXXX-XXXXX`

### প্রতিক্রিয়া

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `hasServiceAccount` | boolean | একটি সার্ভিস অ্যাকাউন্ট কী কনফিগার করা আছে কিনা। |
| `issuerId` | string | কনফিগার করা [Google Pay & Wallet Console Issuer ID](/bn/developer/first-steps/connect-messaging-services/android-configuration/android-google-wallet-configuration/#create-the-issuer-account)। |
| `serviceAccountEmail` | string | কনফিগার করা [সার্ভিস অ্যাকাউন্ট](/bn/developer/first-steps/connect-messaging-services/android-configuration/android-google-wallet-configuration/#create-the-service-account-key)-এর `client_email`। |

## টেমপ্লেট

উপলব্ধ উদাহরণ পাস টেমপ্লেটগুলির তালিকা করুন, অথবা একটিকে একটি [পাস অবজেক্ট](#pass-object) হিসাবে আনুন যা আপনি একটি সূচনা বিন্দু হিসাবে ব্যবহার করতে পারেন।

`GET` `/api/google/templates` — `{ "templates": [ { "filename", "name", "description", "style" } ] }` রিটার্ন করে।

`GET` `/api/google/templates/{filename}` — `{ "template": { ...pass object... } }` রিটার্ন করে।

## অবজেক্ট রেফারেন্স

### পাস অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `serialNumber` | string | তৈরির সময় সার্ভার দ্বারা নির্ধারিত; পাসটি সনাক্ত করে। |
| `generic` / `offer` / `loyalty` / `eventTicket` / `giftCard` / `flight` / `transit` | object | পাসের স্টাইল। **ঠিক একটি** সেট করতে হবে। নীচের স্টাইল অবজেক্টগুলি দেখুন। |
| `hexBackgroundColor` | string | কার্ডের পটভূমির রঙ, `#rrggbb`। |
| `logoUrl` | string | লোগো ছবির পাবলিক HTTPS URL। লয়ালটি এবং ট্রানজিটের জন্য প্রয়োজনীয়। |
| `heroImageUrl` | string | একটি প্রশস্ত ব্যানার ছবির পাবলিক HTTPS URL। |
| `barcode` | object | পাসে দেখানো [বারকোড](#barcode-object)। |
| `textModules` | array | বিস্তারিত ভিউতে দেখানো [টেক্সট মডিউল](#text-module-object)। |
| `links` | array | বিস্তারিত ভিউতে দেখানো [লিঙ্ক মডিউল](#link-module-object)। |
| `expirationTime` | string | ISO 8601 সময় যখন Google স্বয়ংক্রিয়ভাবে পাসটি মেয়াদোত্তীর্ণ করে। খালি মানে কোনো মেয়াদ নেই। |
| `appLink` | object | [অ্যাপ লিঙ্ক](#app-link-object): পাসের সামনে একটি CTA বাটন। |
| `locations` | array | [অবস্থান](#location-object) যা একটি জিওফেন্সড নোটিফিকেশন ট্রিগার করে (সর্বোচ্চ ১০টি)। |
| `holdersPolicy` | string | কে পাসটি সেভ করতে পারে: `ONE_USER_ALL_DEVICES` (ডিফল্ট), `ONE_USER_ONE_DEVICE`, বা `MULTIPLE_HOLDERS`। |

### জেনেরিক অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `cardTitle` | string | প্রয়োজনীয়। কার্ডের শীর্ষে ইস্যুকারী/প্রোগ্রামের নাম। |
| `header` | string | প্রয়োজনীয়। কার্ডের প্রধান শিরোনাম। |
| `subheader` | string | দ্বিতীয় শিরোনাম। |
| `cardFields` | array | সামনে পিন করা ৬টি পর্যন্ত [টেক্সট মডিউল](#text-module-object) (৩টি সারি পর্যন্ত, প্রতি সারিতে ২টি)। |

### অফার অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `title` | string | প্রয়োজনীয়। উদাহরণস্বরূপ, `সবকিছুতে ২০% ছাড়`। |
| `provider` | string | প্রয়োজনীয়। বণিকের নাম। |
| `details` | string | অফারের বিবরণ। |
| `finePrint` | string | শর্তাবলী। |
| `redemptionChannel` | string | `ONLINE`, `INSTORE`, `BOTH` (ডিফল্ট), বা `TEMPORARY_PRICE_REDUCTION`। |
| `issuerName` | string | Google-এর "issued by" সারফেসে দেখানো হয়; ডিফল্ট `provider`। |

### লয়ালটি অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `programName` | string | প্রয়োজনীয়। পাসে `logoUrl` প্রয়োজন। |
| `accountName` | string | কার্ডে দেখানো সদস্যের নাম। |
| `accountId` | string | কার্ডে দেখানো সদস্যের আইডি। |
| `pointsLabel` | string | উদাহরণস্বরূপ, `পয়েন্ট`। শুধুমাত্র একটি ব্যালেন্সের সাথে দেখানো হয়। |
| `pointsBalance` | string | পয়েন্ট ব্যালেন্স। |
| `rewardsTier` | string | উদাহরণস্বরূপ, `গোল্ড`। |
| `rewardsTierLabel` | string | টায়ারের পাশের লেবেল; ডিফল্ট `টায়ার`। |
| `issuerName` | string | ডিফল্ট `programName`। |

### ইভেন্ট টিকিট অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `eventName` | string | প্রয়োজনীয়। |
| `venueName` / `venueAddress` | string | ভেন্যুর বিবরণ। |
| `startDateTime` / `endDateTime` | string | অফসেট সহ ISO 8601 (উদাহরণস্বরূপ, `2026-07-01T19:30:00+02:00`)। |
| `ticketHolderName` / `ticketNumber` / `ticketType` | string | ধারক এবং টিকিটের বিবরণ। |
| `section` / `row` / `seat` / `gate` | string | বসার বিবরণ। |
| `issuerName` | string | ডিফল্ট `eventName`। |

### গিফট কার্ড অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `merchantName` | string | প্রয়োজনীয়। |
| `cardNumber` | string | প্রয়োজনীয়। |
| `pin` | string | কার্ডের পিন। |
| `balance` | string | দশমিক পরিমাণ, উদাহরণস্বরূপ `25.00`। `balanceCurrency` প্রয়োজন। |
| `balanceCurrency` | string | ISO 4217 মুদ্রা কোড, উদাহরণস্বরূপ `USD`। |
| `issuerName` | string | ডিফল্ট `merchantName`। |

### ফ্লাইট অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `carrierIataCode` | string | প্রয়োজনীয়। ২-অক্ষরের IATA কোড, উদাহরণস্বরূপ `LX`। |
| `airlineName` | string | এয়ারলাইনের প্রদর্শনের নাম। |
| `flightNumber` | string | প্রয়োজনীয়। শুধুমাত্র সংখ্যা, উদাহরণস্বরূপ `113`। |
| `originAirportCode` / `destinationAirportCode` | string | প্রয়োজনীয়। ৩-অক্ষরের IATA কোড। |
| `originTerminal` / `originGate` / `destinationTerminal` | string | টার্মিনাল এবং গেটের বিবরণ। |
| `departureDateTime` | string | প্রয়োজনীয়। মূল বিমানবন্দরের **স্থানীয়** সময়, অফসেট **ছাড়া** ISO 8601 (উদাহরণস্বরূপ, `2026-09-01T06:30:00`)। |
| `boardingTime` / `arrivalDateTime` | string | একই স্থানীয় ফর্ম্যাট। `arrivalDateTime` হল গন্তব্যের স্থানীয় সময়। |
| `passengerName` | string | প্রয়োজনীয়। |
| `confirmationCode` / `seatNumber` / `seatClass` / `boardingGroup` | string | যাত্রীর বিবরণ। |
| `issuerName` | string | ডিফল্ট `airlineName`, তারপর ক্যারিয়ার কোড। |

### ট্রানজিট অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `transitType` | string | প্রয়োজনীয়। `BUS`, `RAIL`, `TRAM`, `FERRY`, বা `OTHER`। |
| `transitOperatorName` | string | প্রয়োজনীয়। পাসে `logoUrl` প্রয়োজন। |
| `passengerName` | string | প্রয়োজনীয়। |
| `ticketNumber` | string | টিকিটের নম্বর। |
| `tripType` | string | `ONE_WAY` (ডিফল্ট) বা `ROUND_TRIP`। |
| `legs` | array | ভ্রমণের ক্রমে এক বা একাধিক [ট্রানজিট লেগ](#transit-leg-object)। |
| `issuerName` | string | ডিফল্ট `transitOperatorName`। |

### ট্রানজিট লেগ অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `originName` / `destinationName` | string | প্রয়োজনীয়। |
| `departureDateTime` / `arrivalDateTime` | string | ISO 8601; অফসেট ঐচ্ছিক (বাদ দিলে স্থানীয় সময়)। |
| `platform` / `coach` / `seat` | string | বোর্ডিং বিবরণ। |
| `fareName` | string | উদাহরণস্বরূপ, `Anytime Single`। |

### বারকোড অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `format` | string | `QR_CODE`, `PDF_417`, `AZTEC`, `CODE_128`, `EAN_13`, এবং অন্যান্য Google Wallet বারকোড টাইপ। |
| `value` | string | বারকোডে এনকোড করা ডেটা। |
| `altText` | string | বারকোডের নীচে দেখানো টেক্সট। |

### টেক্সট মডিউল অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `id` | string | মডিউলের শনাক্তকারী। |
| `header` | string | মডিউলের শিরোনাম। |
| `body` | string | মডিউলের টেক্সট। |

### লিঙ্ক মডিউল অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `uri` | string | বাহ্যিক লিঙ্ক URL। |
| `description` | string | বিস্তারিত ভিউতে দেখানো লিঙ্ক লেবেল। |

### অ্যাপ লিঙ্ক অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `uri` | string | ওয়েব URL বা ডিপ-লিঙ্ক টার্গেট URI। |
| `androidPackageName` | string | ঐচ্ছিক। সেট করা হলে, Android অ্যাপটি খোলে। |
| `description` | string | টার্গেট URI-এর অভ্যন্তরীণ বর্ণনা (দৃশ্যমান বাটন লেবেল নয়); ডিফল্ট URI। |

### অবস্থান অবজেক্ট

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `latitude` | number | `-90.0` থেকে `+90.0`। |
| `longitude` | number | `-180.0` থেকে `+180.0`। |

### পাস রেকর্ড অবজেক্ট

তালিকা/গেট এন্ডপয়েন্ট দ্বারা রিটার্ন করা হয়।

| ফিল্ড | টাইপ | বর্ণনা |
| :---- | :---- | :---- |
| `serialNumber` | string | পাসের সিরিয়াল নম্বর। |
| `objectId` | string | সম্পূর্ণ Google Wallet অবজেক্ট আইডি `{issuerId}.{serialNumber}`। |
| `cardTitle` | string | পাসের জন্য প্রদর্শনের শিরোনাম/হেডার। |
| `header` | string | দ্বিতীয় প্রদর্শনের শিরোনাম। |
| `userId` | string | যে [Pushwoosh User ID](/bn/developer/api-reference/api-identifiers/#user-id)-তে পাসটি ইস্যু করা হয়েছিল। |
| `createdAt` / `updatedAt` | string | তৈরি এবং শেষ-আপডেটের টাইমস্ট্যাম্প। |
| `state` | string | `ACTIVE` বা `INACTIVE`। |
| `style` | string | `generic`, `offer`, `loyalty`, `eventTicket`, `giftCard`, `flight`, বা `transit`। |
| `pass` | object | সম্পাদনার জন্য সম্পূর্ণ [পাস অবজেক্ট](#pass-object)। |