# Exploera Customer API 1.3.0 — Postman

## ภาษาไทย

ไฟล์นี้แปลงจาก OpenAPI ของ Customer API ที่ออกจริง ไม่มีการเพิ่ม endpoint หรือสิทธิ์ใหม่ รวม 162 operations โดยแยกตามอำนาจที่ใช้:

| กลุ่ม | จำนวน |
| --- | ---: |
| Published delivery | 97 |
| Legacy native commands — ใช้สิทธิ์ native user/ธุรกิจเดิม | 37 |
| Member / app public entry | 10 |
| Native app actor / participant | 9 |
| Native forms / surveys / receipts | 4 |
| Confidential server token exchange | 1 |
| Server machine records — read:records / write:records | 4 |

ทั้งหมดอยู่ใน public customer contract; ไม่มี `/admin/` หรือ staff Swagger ปะปน อย่าสื่อว่าเป็น machine API 162 รายการ รายการ legacy `operator.*` ยังคงต้องมี native business/operator authority ตามสัญญา การมีรายการใน Collection ไม่ได้มอบสิทธิ์นั้น

1. Import `exploera-customer-api-1.3.0.postman_collection.json` และ `exploera-customer-api.blank.postman_environment.json` ใน Postman ค่าทั้ง 145 ตัวใน Environment เป็นค่าว่าง ไม่มี URL เป้าหมาย, brand ID, customer ID หรือ credential จริง
2. ตั้ง `apiBaseUrl` และ resource ID จากโครงการที่คุณมีสิทธิ์ ใช้ Local ที่แยกข้อมูลจริงสำหรับการลองเขียนข้อมูล และรักษาขอบเขต PRD ของคุณตามเดิม
3. เลือก Environment แล้วเปิดคำขอที่ต้องการ Query ที่เป็น optional ปิดไว้ ให้เปิดและกรอกเฉพาะที่ต้องใช้ ดู schema/enum ในคำอธิบายและ `openapi.json`
4. ตั้งค่าลับใน Postman Local Vault และอ้างด้วย variable ตามวิธีของ Postman ห้ามอัปโหลด secret, JWT หรือ Environment ที่กรอกแล้วขึ้น cloud/ลิงก์สาธารณะ ปิด Authorization, token response และ Console ก่อนถ่ายภาพ
5. ส่งทีละคำขอด้วยตนเอง **ห้าม Run ทั้ง Collection** คำขอที่ไม่ใช่ GET/HEAD/OPTIONS มีชื่อ `MANUAL —` และอาจมีผลต่อข้อมูล/session/ธุรกรรมหรือการส่งข้อความ ไม่มีสคริปต์เรียก API, ต่อคำขอ, บันทึก token หรือรันอัตโนมัติในไฟล์นี้
6. Body เป็น schema template ไม่ใช่ payload ที่ผ่านการทำรายการแล้ว กรอก required fields, UUID และ nested fields ให้ตรงกับข้อมูล/สัญญาจริงก่อน Send ไม่มีตัวอย่าง response สำเร็จที่สร้างขึ้นแทนผลจริง

### Server integration

- Confidential client secret อยู่บน server ของคุณเท่านั้น การแลก token ใช้ `clientId` / `clientSecret` และ project ที่ถูกต้อง ไม่รับ `expiresIn` หรือ TTL ที่แต่งขึ้นใน body ใช้ช่วงอายุที่ตั้งจริงกับ client และ `expiresIn` / `expiresAt` ที่ server ส่งกลับ
- Client มี scope และ resource ที่ออกจริง `read:records` สำหรับ schema/read และ `write:records` สำหรับ create/update ของ Collection UUID ที่ระบุเท่านั้น สิทธิ์ผู้สร้าง client, entitlement, tenant/project และการ revoke ยังถูกตรวจ ไม่ใช้ staff/Member token แทน
- เริ่มจาก `headlessCollectionMachineSchema` รับ `schemaRevision` และ field UUID จริง จากนั้น `headlessCollectionMachineCreate` ด้วย record UUID ที่กำหนดไว้ล่วงหน้า; UUID ซ้ำเป็น conflict ไม่ใช่ receipt ให้ replay
- อ่านด้วย `headlessCollectionMachineRead` และอัปเดตด้วย `headlessCollectionMachineUpdate` พร้อม `expectedRevision` ปัจจุบัน ตัวเลข `schemaRevision` / `expectedRevision` ต้องเป็น JSON number
- กรอก `data.shared` / `data.locales` ตาม schema จริง `{}` เป็นเพียงจุดเริ่มกรอก ไม่รับประกันว่าจะผ่าน required fields ไม่มีการเผยแพร่โดยอัตโนมัติ และเส้นทางนี้ไม่ใช่ participant-owned record API
- ห้ามเพิ่ม Origin/app/actor headers ใน machine requests สิทธิ์ published-read, legacy commands และ Member session เป็นคนละขอบเขตกัน

ตัวอย่างการทดสอบภาพประกอบให้ใช้ Local TEST อ่าน schema/record ที่ไม่มี PII ด้วย client `read:records` อย่างเดียว ข้อมูล fixture/credential สำหรับผู้จัดทำภาพให้แยกเก็บแบบส่วนตัว ไม่รวมในชุดดาวน์โหลดสาธารณะ การนำเข้าและภาพ Postman จริงต้องตรวจจากแอป ไม่ใช่ภาพจำลองจาก JSON

## English

This collection is derived from the genuine issued Customer API OpenAPI 1.3.0. It includes exactly 162 customer-consumer operations: 97 published reads, 37 legacy native-user commands, 10 Member/app public-entry operations, 9 native actor/participant operations, 4 native forms/surveys/receipts, 1 confidential token exchange and 4 server machine-record operations. These are distinct authority families, not 162 machine APIs. No admin or noncustomer route was present in the source public contract.

Import the collection and blank environment. Configure only your authorized origin/resource IDs and exact native security requirements. Every environment value is blank. Optional query parameters are disabled initially. Request-body templates require actual resource schema and required fields; empty nested objects and placeholder variables are not validated successful payloads. No fake successful response examples are included.

Use Local Vault for secrets; never sync/upload populated credentials, finite JWTs or private demo environments. Send individual requests manually. **Do not run the entire collection.** Non-GET/HEAD/OPTIONS operations are marked MANUAL and can affect data, sessions, messages or business transactions. No pre-request/test scripts, request chaining or automatic token persistence is included.

Confidential token exchange belongs on a private server. Its body does not accept an invented TTL; use the existing client's configured lifetime and actual response `expiresIn`/`expiresAt`. The four machine operations require explicit exact-Collection `read:records`/`write:records`, current owner rights and entitlement. Read schema revision first; create with one predetermined record UUID; duplicate create is a conflict, not idempotent replay. Update requires current native CAS `expectedRevision`. Payload numeric revisions must be JSON numbers. Draft writes do not publish, and participant-owned records remain outside this boundary. No browser Origin/app/actor headers belong on machine requests.

Member/app sessions, guest proofs, legacy native commands and operator business authority remain separate. Each request preserves the actual source security alternatives, native identity and idempotency metadata. Inclusion does not grant access or certify every operation has been executed.

For genuine Postman screenshots, use the separate authorized existing isolated Local TEST read-only fixture, redact opaque IDs where needed, and keep auth/token tabs and console out of frame. The JSON schema/coverage checks do not establish actual Postman import or live request success; those are separate acceptance steps.

## Provenance / ที่มา

- Source: `3d4da5d96c1cadff45ce29ac4a1e7c01b8aef89e`
- Contract: `1.3.0`, 162 operations
- Exact unchanged public OpenAPI file SHA256: `92d4c3cf016aefe1e135b39ae0d929e715d2c3a0a52c517de124190fb7d7ad88`
- Canonical contract digest: `cc4b9af2f0873aa6e8ccc5de8e863f871286edccb8f186010827858c0a9bb7bc`
- `operation-coverage.json` accounts for every operation once, its source operation hash, native auth family, module, method/path and Postman item ID.
- Artifact conversion only: no backend build, SDK reissue, new entitlement or production API mutation.
- Postman Collection 2.1 schema: https://schema.getpostman.com/json/collection/v2.1.0/collection.json
- Official local secrets guidance: https://learning.postman.com/docs/use/postman-vault/postman-vault-key
