# Google Wallet API

Google Wallet API ช่วยให้คุณสามารถสร้าง อัปเดต แสดงรายการ และจัดการ [พาสของ Google Wallet](/th/product/messaging-channels/google-wallet-passes/) ผ่านโปรแกรมได้ รองรับการดำเนินการเช่นเดียวกับที่ [pass builder](/th/product/messaging-channels/google-wallet-passes/pass-builder/) ใน Control Panel ทำ

ใช้ API นี้เพื่อออกบัตรสะสมคะแนน ข้อเสนอ บัตรของขวัญ ตั๋วงานอีเวนต์ บอร์ดดิ้งพาสสำหรับเที่ยวบิน ตั๋วเดินทาง และพาสทั่วไป และเพื่อพุชการอัปเดตแบบสดไปยังพาสที่บันทึกไว้ในอุปกรณ์ของผู้ใช้ของคุณแล้ว

<Aside type="note" title="ข้อกำหนดเบื้องต้น: การกำหนดค่า Google Wallet">
ก่อนที่คุณจะสามารถสร้างพาสสำหรับแอปพลิเคชันได้ จะต้องกำหนดค่า **Issuer ID** และ **service account key** ของ Google Wallet สำหรับแอปพลิเคชันนั้นใน Pushwoosh Control Panel ก่อน หากไม่มีข้อมูลเหล่านี้ คำขอ `create` และ `update` จะล้มเหลว ดูที่ [การกำหนดค่าพาสของ Google Wallet สำหรับ Android](/th/developer/first-steps/connect-messaging-services/android-configuration/android-google-wallet-configuration/)
</Aside>


## Base URL

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

Endpoints ทั้งหมดให้บริการผ่าน HTTPS คำขอและการตอบกลับใช้ `application/json` เว้นแต่จะระบุไว้เป็นอย่างอื่น

## การยืนยันตัวตน

ทุกคำขอต้องมีเฮดเดอร์ `Authorization` พร้อมด้วย [Pushwoosh API access token](/th/developer/api-reference/api-access-token/) ของคุณ:

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

บัญชีที่เป็นเจ้าของโทเค็นจะต้องเป็นเจ้าของแอปพลิเคชันที่อ้างอิงโดย `applicationCode` คำขอสำหรับแอปพลิเคชันที่เป็นของบัญชีอื่นจะส่งคืน `403 Forbidden`

## ข้อตกลงทั่วไป

*   **การตั้งชื่อฟิลด์:** ฟิลด์ JSON ใช้ `lowerCamelCase` (ตัวอย่างเช่น `serialNumber`, `hexBackgroundColor`, `logoUrl`)
*   **ฟิลด์ที่ไม่ได้กรอกข้อมูล:** การตอบกลับจะรวมฟิลด์ทั้งหมด แม้ว่าจะว่างเปล่าหรือมีค่าเป็นศูนย์
*   **ข้อมูลระบุตัวตน:** `serialNumber` จะถูกกำหนดโดยเซิร์ฟเวอร์เสมอเมื่อมีการสร้างพาส ค่าใดๆ ที่คุณส่งเมื่อสร้างจะถูกละเว้น object id ของ Google Wallet แบบเต็มคือ `{issuerId}.{serialNumber}`
*   **รูปภาพ:** `logoUrl` และ `heroImageUrl` เป็น URL HTTPS สาธารณะของรูปภาพที่ Google จะดึงข้อมูลมา ไม่ใช่ไฟล์ที่อัปโหลด
*   **รูปแบบพาส:** ต้องตั้งค่าอ็อบเจ็กต์รูปแบบ (`generic`, `offer`, `loyalty`, `eventTicket`, `giftCard`, `flight`, หรือ `transit`) เพียงหนึ่งรูปแบบเท่านั้นบนพาส รูปแบบไม่สามารถเปลี่ยนแปลงได้หลังจากการสร้าง

### การตอบกลับข้อผิดพลาด

| สถานะ HTTP | ความหมาย |
| :---- | :---- |
| `400 Bad Request` | อาร์กิวเมนต์ไม่ถูกต้อง—ฟิลด์ที่จำเป็นขาดหายไปหรือมีรูปแบบไม่ถูกต้อง |
| `401 Unauthorized` | เฮดเดอร์ `Authorization` ขาดหายไปหรือไม่ถูกต้อง |
| `403 Forbidden` | แอปพลิเคชันไม่ได้เป็นของบัญชีของผู้เรียก |
| `404 Not Found` | ไม่พบพาส เทมเพลต หรือแอปพลิเคชัน |
| `503 Service Unavailable` | บริการมีความจุเต็มหรือใช้งานไม่ได้ชั่วคราว |

## Endpoints

| เมธอด | พาธ | คำอธิบาย |
| :---- | :---- | :---- |
| `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 จากนั้นส่งคืนหมายเลขซีเรียลที่เซิร์ฟเวอร์กำหนด, object id แบบเต็ม และลิงก์สำหรับบันทึก "Add to Google Wallet"

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

### เนื้อหาคำขอ

| พารามิเตอร์ | ประเภท | จำเป็น | คำอธิบาย |
| :---- | :---- | :---- | :---- |
| `pass` | object | ใช่ | [อ็อบเจ็กต์พาส](#pass-object) ที่อธิบายพาส ต้องตั้งค่ารูปแบบเพียงหนึ่งรูปแบบเท่านั้น |
| `userId` | string | ใช่ | [Pushwoosh User ID](/th/developer/api-reference/api-identifiers/#user-id) ที่พาสถูกออกให้ |
| `applicationCode` | string | ใช่ | [รหัสแอปพลิเคชัน Pushwoosh](/th/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 | object id ของ 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](/th/developer/api-reference/api-identifiers/#application-code) |
| `notifyMessage` | string | ไม่ | เมื่อไม่ว่างเปล่า ให้พุชการแจ้งเตือน Android พร้อมข้อความนี้ไปยังทุกคนที่บันทึกพาสไว้ ค่าว่างหมายถึงการอัปเดตแบบเงียบ |
| `notifyOnUpdate` | boolean | ไม่ | ขอการแจ้งเตือนการอัปเดตฟิลด์ เฉพาะพาส `loyalty`, `eventTicket` และ `flight` เท่านั้นที่จะแจ้งเตือนจริง รูปแบบอื่นยอมรับแฟล็กแต่ไม่เคยส่งการแจ้งเตือน การแจ้งเตือนจะทำงานเฉพาะภายใน 3 ชั่วโมงของเวลาเริ่มต้นที่เกี่ยวข้อง และ Google จำกัดไว้ที่ 3 การแจ้งเตือนต่อพาสต่อ 24 ชั่วโมง |

<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 code">
วาง `saveLink` ไว้หลังปุ่ม "Add to Google Wallet" หรือแสดงผลเป็น QR code ด้วยไลบรารี 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](/th/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 | จำนวนพาสทั้งหมดสำหรับแอปพลิเคชันในทุกหน้า |

## ตั้งค่าสถานะพาส

เปิดใช้งานหรือทำให้พาสไม่ถูกต้อง พาสที่ไม่ถูกต้อง (inactive) จะถูกย้ายไปยังส่วน **Expired passes** ของผู้ใช้ใน Google Wallet ระเบียนจะถูกเก็บไว้เพื่อให้สามารถเปิดใช้งานใหม่ได้

`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 ไม่อนุญาตให้ลบพาสที่บันทึกไว้ในอุปกรณ์ของผู้ใช้แล้ว การลบจะทำให้พาสไม่ถูกต้อง (ย้ายไปยัง **Expired passes**) และลบระเบียนของ Pushwoosh
</Aside>

### การตอบกลับ

ส่งคืนอ็อบเจ็กต์ว่าง `{}` เมื่อสำเร็จ

## รับการกำหนดค่า

ส่งคืนสถานะการกำหนดค่า Google Wallet สำหรับแอปพลิเคชัน

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

### การตอบกลับ

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `hasServiceAccount` | boolean | มีการกำหนดค่า service account key หรือไม่ |
| `issuerId` | string | [Google Pay & Wallet Console Issuer ID](/th/developer/first-steps/connect-messaging-services/android-configuration/android-google-wallet-configuration/#create-the-issuer-account) ที่กำหนดค่าไว้ |
| `serviceAccountEmail` | string | `client_email` ของ [service account](/th/developer/first-steps/connect-messaging-services/android-configuration/android-google-wallet-configuration/#create-the-service-account-key) ที่กำหนดค่าไว้ |

## เทมเพลต

แสดงรายการเทมเพลตพาสตัวอย่างที่มีอยู่ หรือดึงข้อมูลเทมเพลตเป็น [อ็อบเจ็กต์พาส](#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 | URL HTTPS สาธารณะของรูปภาพโลโก้ จำเป็นสำหรับ loyalty และ transit |
| `heroImageUrl` | string | URL HTTPS สาธารณะของรูปภาพแบนเนอร์แบบกว้าง |
| `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) ที่จะทริกเกอร์การแจ้งเตือนตามตำแหน่งทางภูมิศาสตร์ (สูงสุด 10) |
| `holdersPolicy` | string | ใครสามารถบันทึกพาสได้: `ONE_USER_ALL_DEVICES` (ค่าเริ่มต้น), `ONE_USER_ONE_DEVICE`, หรือ `MULTIPLE_HOLDERS` |

### อ็อบเจ็กต์ Generic

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `cardTitle` | string | จำเป็น ชื่อผู้ออก/โปรแกรมที่ด้านบนของบัตร |
| `header` | string | จำเป็น ชื่อหลักของบัตร |
| `subheader` | string | ชื่อรอง |
| `cardFields` | array | [โมดูลข้อความ](#text-module-object) สูงสุด 6 โมดูลที่ปักหมุดไว้ด้านหน้า (สูงสุด 3 แถว แถวละ 2) |

### อ็อบเจ็กต์ Offer

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `title` | string | จำเป็น ตัวอย่างเช่น `ลด 20% ทุกอย่าง` |
| `provider` | string | จำเป็น ชื่อร้านค้า |
| `details` | string | รายละเอียดข้อเสนอ |
| `finePrint` | string | ข้อกำหนดและเงื่อนไข |
| `redemptionChannel` | string | `ONLINE`, `INSTORE`, `BOTH` (ค่าเริ่มต้น), หรือ `TEMPORARY_PRICE_REDUCTION` |
| `issuerName` | string | แสดงบนพื้นที่ "ออกโดย" ของ Google ค่าเริ่มต้นคือ `provider` |

### อ็อบเจ็กต์ Loyalty

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `programName` | string | จำเป็น ต้องมี `logoUrl` บนพาส |
| `accountName` | string | ชื่อสมาชิกที่แสดงบนบัตร |
| `accountId` | string | ID สมาชิกที่แสดงบนบัตร |
| `pointsLabel` | string | ตัวอย่างเช่น `คะแนน` แสดงเฉพาะเมื่อมียอดคงเหลือ |
| `pointsBalance` | string | ยอดคะแนนคงเหลือ |
| `rewardsTier` | string | ตัวอย่างเช่น `Gold` |
| `rewardsTierLabel` | string | ป้ายกำกับถัดจากระดับ ค่าเริ่มต้นคือ `Tier` |
| `issuerName` | string | ค่าเริ่มต้นคือ `programName` |

### อ็อบเจ็กต์ Event ticket

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `eventName` | string | จำเป็น |
| `venueName` / `venueAddress` | string | รายละเอียดสถานที่จัดงาน |
| `startDateTime` / `endDateTime` | string | ISO 8601 พร้อม offset (ตัวอย่างเช่น `2026-07-01T19:30:00+02:00`) |
| `ticketHolderName` / `ticketNumber` / `ticketType` | string | รายละเอียดผู้ถือตั๋วและตั๋ว |
| `section` / `row` / `seat` / `gate` | string | รายละเอียดที่นั่ง |
| `issuerName` | string | ค่าเริ่มต้นคือ `eventName` |

### อ็อบเจ็กต์ Gift card

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `merchantName` | string | จำเป็น |
| `cardNumber` | string | จำเป็น |
| `pin` | string | PIN ของบัตร |
| `balance` | string | จำนวนเงินทศนิยม ตัวอย่างเช่น `25.00` ต้องมี `balanceCurrency` |
| `balanceCurrency` | string | รหัสสกุลเงิน ISO 4217 ตัวอย่างเช่น `USD` |
| `issuerName` | string | ค่าเริ่มต้นคือ `merchantName` |

### อ็อบเจ็กต์ Flight

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `carrierIataCode` | string | จำเป็น รหัส IATA 2 ตัวอักษร ตัวอย่างเช่น `LX` |
| `airlineName` | string | ชื่อที่แสดงของสายการบิน |
| `flightNumber` | string | จำเป็น เฉพาะตัวเลข ตัวอย่างเช่น `113` |
| `originAirportCode` / `destinationAirportCode` | string | จำเป็น รหัส IATA 3 ตัวอักษร |
| `originTerminal` / `originGate` / `destinationTerminal` | string | รายละเอียดเทอร์มินัลและประตู |
| `departureDateTime` | string | จำเป็น เวลา **ท้องถิ่น** ของสนามบินต้นทาง, ISO 8601 **ไม่มี** offset (ตัวอย่างเช่น `2026-09-01T06:30:00`) |
| `boardingTime` / `arrivalDateTime` | string | รูปแบบเวลาท้องถิ่นเดียวกัน `arrivalDateTime` คือเวลาท้องถิ่นของปลายทาง |
| `passengerName` | string | จำเป็น |
| `confirmationCode` / `seatNumber` / `seatClass` / `boardingGroup` | string | รายละเอียดผู้โดยสาร |
| `issuerName` | string | ค่าเริ่มต้นคือ `airlineName` จากนั้นเป็นรหัสสายการบิน |

### อ็อบเจ็กต์ Transit

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `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` |

### อ็อบเจ็กต์ Transit leg

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `originName` / `destinationName` | string | จำเป็น |
| `departureDateTime` / `arrivalDateTime` | string | ISO 8601; offset เป็นทางเลือก (เวลาท้องถิ่นเมื่อละไว้) |
| `platform` / `coach` / `seat` | string | รายละเอียดการขึ้นยานพาหนะ |
| `fareName` | string | ตัวอย่างเช่น `Anytime Single` |

### อ็อบเจ็กต์ Barcode

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `format` | string | `QR_CODE`, `PDF_417`, `AZTEC`, `CODE_128`, `EAN_13`, และประเภทบาร์โค้ดอื่นๆ ของ Google Wallet |
| `value` | string | ข้อมูลที่เข้ารหัสในบาร์โค้ด |
| `altText` | string | ข้อความที่แสดงใต้บาร์โค้ด |

### อ็อบเจ็กต์ Text module

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `id` | string | ตัวระบุของโมดูล |
| `header` | string | หัวข้อของโมดูล |
| `body` | string | ข้อความของโมดูล |

### อ็อบเจ็กต์ Link module

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `uri` | string | URL ลิงก์ภายนอก |
| `description` | string | ป้ายกำกับลิงก์ที่แสดงในมุมมองรายละเอียด |

### อ็อบเจ็กต์ App link

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `uri` | string | URL เว็บหรือ URI เป้าหมายของ deep-link |
| `androidPackageName` | string | ไม่จำเป็น เมื่อตั้งค่า จะเปิดแอป Android |
| `description` | string | คำอธิบายภายในของ URI เป้าหมาย (ไม่ใช่ป้ายกำกับปุ่มที่มองเห็นได้) ค่าเริ่มต้นคือ URI |

### อ็อบเจ็กต์ Location

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `latitude` | number | `-90.0` ถึง `+90.0` |
| `longitude` | number | `-180.0` ถึง `+180.0` |

### อ็อบเจ็กต์ Pass record

ส่งคืนโดย endpoints list/get

| ฟิลด์ | ประเภท | คำอธิบาย |
| :---- | :---- | :---- |
| `serialNumber` | string | หมายเลขซีเรียลของพาส |
| `objectId` | string | object id ของ Google Wallet แบบเต็ม `{issuerId}.{serialNumber}` |
| `cardTitle` | string | ชื่อ/หัวข้อที่แสดงสำหรับพาส |
| `header` | string | ชื่อที่แสดงรอง |
| `userId` | string | [Pushwoosh User ID](/th/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) แบบเต็ม สำหรับการแก้ไข |