| checkin_id | string | No | Check-in identifier. Takes precedence over booking_id. |
| webcheckin_id | string | No | Compatibility alias for checkin_id. |
| booking_id | integer | string | No | Booking identifier; usable without uploads. Uploads require checkin_id or webcheckin_id. |
| type | enum: passengers | pnr | No | Update type. Can be omitted when top-level passengers is supplied. |
| operation | enum: update | No | Only update is supported; defaults to update. |
| passengers | array | No | Complete passenger array. Updates replace the entire stored array; retain all authoritative passenger and document data. |
| passengers[].first_name | string | Yes | First name. |
| passengers[].last_name | string | Yes | Last name. |
| passengers[].email | string | null | No | Contact email. At least one valid passenger email is needed for readiness; malformed or absent email does not structurally reject subscribe. |
| passengers[].country_code | string | null | No | Phone country prefix, for example +91. |
| passengers[].phone | string | null | No | Phone number. |
| passengers[].date_of_birth | string | null | No | Date of birth; use YYYY-MM-DD. |
| passengers[].nationality | string | null | No | Nationality country code, for example IN. |
| passengers[].country_of_residence | string | null | No | Residence country code. |
| passengers[].passport | object | null | No | International readiness needs number, date_of_issue, expiry_date, place_of_issue and passport or passenger nationality for every passenger. |
| passengers[].passport.number | string | null | No | Passport number. |
| passengers[].passport.date_of_issue | string | null | No | Issue date; use YYYY-MM-DD. |
| passengers[].passport.expiry_date | string | null | No | Expiry date; use YYYY-MM-DD. |
| passengers[].passport.place_of_issue | string | null | No | Place of issue. |
| passengers[].passport.nationality | string | null | No | Nationality country code; passenger nationality is a readiness fallback. |
| passengers[].passport.document_url | string | null | No | Existing passport document URL. |
| passengers[].passport.file_field | string | No | Exact arbitrary multipart file-part name to bind this scan. A scan does not replace passport metadata. |
| passengers[].documents | array | null | No | Supporting documents. |
| passengers[].documents[].type | enum: VISA | IQAMA | PR_CARD | GREEN_CARD | Yes | Supporting document type. |
| passengers[].documents[].document_number | string | null | No | Document number. |
| passengers[].documents[].issuing_country | string | null | No | Issuing country code. |
| passengers[].documents[].expiry_date | string | null | No | Expiry date; use YYYY-MM-DD. |
| passengers[].documents[].document_url | string | null | No | Existing document URL. |
| passengers[].documents[].file_field | string | No | Exact arbitrary multipart file-part name for this document. |
| passengers[].seat_preference | object | null | No | Passenger seat preferences. |
| passengers[].seat_preference.row_preference | enum: front | middle | rear | null | No | Preferred cabin row. |
| passengers[].seat_preference.column_preference | enum: window | middle | aisle | null | No | Preferred seat column. |
| payload | object | No | payload value. |
| payload.passengers | array | No | Complete passenger array. Updates replace the entire stored array; retain all authoritative passenger and document data. |
| payload.passengers[].first_name | string | Yes | First name. |
| payload.passengers[].last_name | string | Yes | Last name. |
| payload.passengers[].email | string | null | No | Contact email. At least one valid passenger email is needed for readiness; malformed or absent email does not structurally reject subscribe. |
| payload.passengers[].country_code | string | null | No | Phone country prefix, for example +91. |
| payload.passengers[].phone | string | null | No | Phone number. |
| payload.passengers[].date_of_birth | string | null | No | Date of birth; use YYYY-MM-DD. |
| payload.passengers[].nationality | string | null | No | Nationality country code, for example IN. |
| payload.passengers[].country_of_residence | string | null | No | Residence country code. |
| payload.passengers[].passport | object | null | No | International readiness needs number, date_of_issue, expiry_date, place_of_issue and passport or passenger nationality for every passenger. |
| payload.passengers[].passport.number | string | null | No | Passport number. |
| payload.passengers[].passport.date_of_issue | string | null | No | Issue date; use YYYY-MM-DD. |
| payload.passengers[].passport.expiry_date | string | null | No | Expiry date; use YYYY-MM-DD. |
| payload.passengers[].passport.place_of_issue | string | null | No | Place of issue. |
| payload.passengers[].passport.nationality | string | null | No | Nationality country code; passenger nationality is a readiness fallback. |
| payload.passengers[].passport.document_url | string | null | No | Existing passport document URL. |
| payload.passengers[].passport.file_field | string | No | Exact arbitrary multipart file-part name to bind this scan. A scan does not replace passport metadata. |
| payload.passengers[].documents | array | null | No | Supporting documents. |
| payload.passengers[].documents[].type | enum: VISA | IQAMA | PR_CARD | GREEN_CARD | Yes | Supporting document type. |
| payload.passengers[].documents[].document_number | string | null | No | Document number. |
| payload.passengers[].documents[].issuing_country | string | null | No | Issuing country code. |
| payload.passengers[].documents[].expiry_date | string | null | No | Expiry date; use YYYY-MM-DD. |
| payload.passengers[].documents[].document_url | string | null | No | Existing document URL. |
| payload.passengers[].documents[].file_field | string | No | Exact arbitrary multipart file-part name for this document. |
| payload.passengers[].seat_preference | object | null | No | Passenger seat preferences. |
| payload.passengers[].seat_preference.row_preference | enum: front | middle | rear | null | No | Preferred cabin row. |
| payload.passengers[].seat_preference.column_preference | enum: window | middle | aisle | null | No | Preferred seat column. |
| payload.pnr | string | No | New nonempty PNR; required for type pnr. Top-level pnr is not read. |