CRITICAL: Before starting, MUST first use the Read tool to read
../openydt-shared/SKILL.md(authentication / profile / signature / status codes / rate limiting / security rules). Do not execute any commands without reading the shared foundation.
When to use this skill
Use this skill when the user's request falls under monthly pass / VIP / membership monthly package / special vehicles (visitor, blacklist) / vehicle identity business, typically such as:
- "Activate monthly pass / renew / refund / cancel monthly pass for a certain license plate"
- "Create a monthly pass type / modify monthly pass type / query monthly pass type details"
- "Query the monthly pass records of a certain license plate / monthly passes about to expire / number of monthly passes sold"
- "Check whether a vehicle is VIP / check the owner", "freeze / unfreeze monthly pass"
- "Add special vehicle types for visitor VIP group / blacklist VIP group"
Intent routing:
- Only doingquery(read) → directly use the corresponding
get-*command, no need for--yes。 - Involvingcreate / modify / activate / renew / refund / cancel / freeze(write) → the command must add
--yes(see the annotation for each item below). - Management of "list members" for visitors/blacklist is not in this domain: for visitors use
openydt visitor, for blacklist useopenydt blacklist, for redlist useopenydt redlist(see [[openydt-list]]); but the "special vehicle type ID" they reference is created by this domain'sadd-special-car-typeand queried viaget-special-car-type-list. - Real-time temporary parking fee calculationis not in this domain, please use [[openydt-billing]] (
openydt trade get-park-fee)。
Available commands
Command format:openydt ticket <use>. The table below lists only the included commands in the catalog (29 in total).
| Chinese name | Command | Read/Write | Key parameters |
|---|---|---|---|
| Add online monthly pass type | openydt ticket add-online-month-ticket-type |
Write (--yes) |
parkCodes*, ticketName*, price*, timePeriod(startTime/endTime), channelList |
| Modify online monthly pass type | openydt ticket month-ticket-config-edit |
Write (--yes) |
monthTicketConfigId*, ticketName*, parkCodeList*, price* |
| Query online monthly pass type details | openydt ticket get-month-ticket-config-detail |
Read | monthTicketConfigId* |
| Query online monthly pass type details list | openydt ticket get-month-ticket-config-detail-list |
Read | parkCodeList*, monthTicketConfigId, ticketStatus |
| View number of monthly passes purchased | openydt ticket get-month-ticket-sell-num |
Read | monthId* |
| Monthly pass type quota deduction | openydt ticket deduct-month-ticket-config |
Write (--yes) |
monthTicketConfigId*, thirdpartyBillCode*, thirdpartyIdentify*, parkCodes*, carNo*, num*, startTime*, endTime* |
| Activate online monthly pass | openydt ticket add-online-month-ticket |
Write (--yes) |
monthTicketConfigId*, parkCodes*, carNo*, billCode*, userName*, userPhone*, originPrice*, favorPrice*, payOrigin*, payMode*, timePeriodList*, thirdpartyIdentify(required for reservation activation) |
| Renew online monthly pass | openydt ticket renew-online-vip-ticket |
Write (--yes) |
billCode*, monthTicketId*, originPrice*, favorPrice*, payOrigin*, payMode*, renewBy*, renewTime*, timePeriodList* |
| Cancel online monthly pass | openydt ticket cancel-online-vip-ticket |
Write (--yes) |
parkCode*, billCode*, refundPrice*, payOrigin*, payMode* |
| Cancel online monthly pass by monthly pass type | openydt ticket cancel-online-month-ticket-by-month-ticket-type |
Write (--yes) |
monthTicketConfigId*, parkCode* |
| Modify online monthly pass order information | openydt ticket edit-online-vip-ticket |
Write (--yes) |
monthTicketId*, carNo*, userName*, userPhone*, remark1~remark3, editBy*, editTime* |
| Query online monthly pass | openydt ticket get-online-vip-ticket |
Read | monthTicketId* |
| Query online monthly ticket records | openydt ticket get-online-month-ticket-list |
Read | parkCodeList*, pageNum*, pageSize* |
| Query online monthly tickets by license plate | openydt ticket get-online-month-ticket-by-car-card |
Read | carCode* |
| Query online monthly ticket payment information | openydt ticket get-online-month-ticket-payment |
Read | parkCode*, operateTimeFrom*, operateTimeTo*, pageNum*, pageSize* |
| View monthly ticket reservation details by license plate | openydt ticket get-month-ticket-bill-detail |
Read | thirdBillCode* |
| Query monthly tickets about to expire | openydt ticket get-will-expire-month-ticket-bill |
Read | validFrom, validTo, pageNum, pageSize |
| Query monthly ticket account transaction records | openydt ticket get-month-ticket-account-transation-record |
Read | monthTicketBillId*, transationTimeStart*, transationTimeEnd*, pageNum*, pageSize* |
| Query monthly ticket account deduction records | openydt ticket get-month-ticket-account-use-record |
Read | monthTicketBillId*, pageNum*, pageSize* |
| Apply for monthly ticket freeze | openydt ticket apply-month-ticket-freeze |
Write(--yes) |
monthTicketBillId*, frozenStartTime*, frozenEndTime*, reason* |
| Monthly ticket freeze | openydt ticket freeze-month-ticket |
Write(--yes) |
monthTicketBillId*, frozenStartTime*, frozenEndTime* |
| Monthly ticket unfreeze | openydt ticket un-freeze-month-ticket |
Write(--yes) |
monthTicketBillId* |
| Add special vehicle type | openydt ticket add-special-car-type |
Write(--yes) |
parkCode*, specialCarTypeName*, vipGroupType*(1 visitor/2 blacklist) |
| Get special vehicle type list | openydt ticket get-special-car-type-list |
Read | parkCodeList*, vipGroupType*(1 visitor/2 blacklist) |
| Query vehicle owner and VIP | openydt ticket get-car-owner-and-vip-type |
Read | parkCode*, carNo* |
| Get vehicle identity | openydt ticket get-vip-by-car-no |
Read | carCode*, enterTime*, leaveTime*, parkCode*, parkingCode* |
| Get VIP information by license plate and time | openydt ticket get-vip-by-car-no-and-time |
Read | carCode*, enterTime*, parkCode* |
| Get parking lot agreement | openydt ticket get-park-agreement |
Read | parkCodeList* |
| Sync electronic coupon QR code scan (parking lot agreement) | openydt ticket park-agreement-save |
Write(--yes) |
parkCode*, agreementTitle*, agreementContent* |
*indicates required. Write operations are all intercepted byf.ConfirmWrite, and when executingmustcarry--yes, otherwise it will be rejected. Parameters are based onopenydt ticket <cmd> --help; if there is any discrepancy, refer to --help.
Business process
Monthly ticket closed loop (create type → activate → renew/refund → query)
Be sure to usefields in the response of preceding commands as input parameters for subsequent commands, do not fabricate IDs out of thin air.
- Create monthly ticket type —
openydt ticket add-online-month-ticket-type --yes(see the example below for body). Takedata.monthTicketConfigIdfrom the response as the "Monthly Ticket Type ID". - Activate online monthly ticket —
openydt ticket add-online-month-ticket --yes, usemonthTicketConfigIdfrom the previous step to fill in--month-ticket-config-id(or the body'smonthTicketConfigId). Takedata.monthTicketId(monthly ticket order id) from the response for renewal / refund / modification. - Renewal / refund:
- Renewal —
openydt ticket renew-online-vip-ticket --yes, usemonthTicketIdfrom step 2 to fill in--month-ticket-id, and provide the newtimePeriodList。 - Refund (cancel) —
openydt ticket cancel-online-vip-ticket --yes, usemonthTicketId+parkCode+refundPrice; or batch cancel by typeopenydt ticket cancel-online-month-ticket-by-month-ticket-type --yes(usemonthTicketConfigId)。
- Renewal —
- Query:
- Query by type/parking lot list —
openydt ticket get-online-month-ticket-list。 - Query by license plate —
openydt ticket get-online-month-ticket-by-car-card(usecarCode)。 - Query single order —
openydt ticket get-online-vip-ticket(usemonthTicketId)。
- Query by type/parking lot list —
💰 Amount (
originPrice/favorPrice/refundPrice/price) unit isyuan; for activation/renewal/deduction, thebillCode/thirdpartyBillCode/thirdpartyIdentifyis an idempotency key——reuse the first value on retry, never generate a new one; upon receiving907 账单已同步= idempotency hit, already activated the first time, switch to queryingget-online-vip-ticketto confirm, do not send again. See [[openydt-shared]]'sreferences/write-idempotency.mdandreferences/result-reading-sop.md。
Monthly ticket freeze / unfreeze
- Freeze requiresMonthly ticket order id: first use
get-online-month-ticket-by-car-cardorget-online-month-ticket-listto findmonthTicketBillId(monthly ticket order id)。 - Freeze —
openydt ticket apply-month-ticket-freeze --yesoropenydt ticket freeze-month-ticket --yes(passmonthTicketBillId+frozenStartTime+frozenEndTime)。 - Unfreeze —
openydt ticket un-freeze-month-ticket --yes(passmonthTicketBillId)。
Special vehicle type (reused for visitors / blacklist)
- Use
openydt ticket add-special-car-type --yesto create a special vehicle type,vipGroupType=1for the visitor VIP group,vipGroupType=2for the blacklist VIP group. - Get from the responsespecial vehicle type ID(you can also use
openydt ticket get-special-car-type-list --vip-group-type 1and pass--body '{"parkCodeList":["1ZS7H5PQH9"]}'to query the list and get the ID; parkCodeList and vipGroupType are both required). - This "special vehicle type ID" is reused by
openydt visitor(visitor) andopenydt blacklist(blacklist) as an input parameter when adding list members, realizing the closed loop of "the type is created in the ticket domain, and list members are managed in their respective domains".
Ticket sub-features not yet first-classed (use openydt api as a fallback)
The following ticket domain APIs are callable in the catalog but have not been made into first-class commands, with no dedicated openydt ticket subcommand; when needed, use the generic fallback openydt api <cmd>(write operations must --yes, and it is recommended to first --dry-run preview), copy the body from catalog/catalog.json 's sampleBody, see [[openydt-api-explorer]] for details:
- Monthly ticket reservation/queueing:
bookOrCancelReservation(write),checkMonthTicketAppointment、getMonthTicketAppointmentByCarCode/getMonthTicketAppointmentDetail/getMonthTicketAppointmentLineUp。⚠️
getMonthTicketAppointmentPark(query the lots where monthly ticket reservations can be activated) belongs to the park domain, please useopenydt api getMonthTicketAppointmentParkto call, see [[openydt-park]]. - Monthly ticket authorized visitor:
addMonthTicketAuthorizeVisitor(write),allowBuyMonthlyTicket(write),cancelMonthTicketAuthorizeVisitorByCarNo/cancelMonthTicketAuthorizeVisitorById(write),getMonthTicketAuthorizeVisitor/getMonthTicketAuthorizeVisitorHis。 - Monthly ticket credential rules:
monthTicketCertifiRuleSave(write),saveOrUpdateMonthTicketCretifi(write),delMonthTicketCertifiRule(write),getMonthTicketCertifiRuleList/getMonthTicketCertificateInfoList/getCertificateByInfo。 - Offline monthly card (the whole set is not yet first-classed):
getMonthCard/pauseMonthCard(write) /recoverMonthCard(write) /refundMonthCard(write) /renewMonthCard(write) — query/pause/resume/refund/renew for offline monthly cards all useopenydt api <cmd>to call, see the catalog for the body. - VIP type extension:
addCusVipType(write) /editCusVipType(write) /getVipType/addVipTicket(write) /setVipChargeRule(write) /querySupportMonthTicketParkList— custom VIP types and billing rules also useapias a fallback.
Example
The example parkCode/time are documented test values (test environment only; copying the catalog's historical sampleBody will hit an invalid lot/expired validity period). For write operations, it is recommended to first use
--dry-runto preview the signed request, and after confirmation then--yes; ID-type parameters (monthTicketConfigId, etc.) must be taken from the previous step's response, do not copy the example values.
- Add online monthly ticket type (write, requires
--yes) — after success, get the type ID from the responsedata.monthTicketConfigId:
# 先 dry-run 预览
openydt ticket add-online-month-ticket-type --dry-run --body '{
"parkCodes": "1ZS7H5PQH9",
"ticketName": "测试月票类型01",
"price": 10,
"timePeriod": { "startTime": "2026-06-01 00:00:00", "endTime": "2026-06-30 23:59:59" }
}'
# 确认后实发
openydt ticket add-online-month-ticket-type --yes --body '{
"parkCodes": "1ZS7H5PQH9",
"ticketName": "测试月票类型01",
"price": 10,
"timePeriod": { "startTime": "2026-06-01 00:00:00", "endTime": "2026-06-30 23:59:59" }
}'
- Use the previous step's
monthTicketConfigIdto activate the online monthly ticket (write, requires--yes):
# 先 dry-run 预览
openydt ticket add-online-month-ticket --dry-run --body '{
"carNo": "粤EJW962",
"billCode": "<全局唯一订单号,如 your-app-20260601-0001>",
"parkCodes": "1ZS7H5PQH9,PTD2YBBZ",
"originPrice": 10,
"favorPrice": 5,
"payMode": 4,
"payModeRemark": "微信支付",
"payOrigin": 7,
"payOriginRemark": "智慧停车",
"userName": "王五",
"userPhone": "18000000000",
"thirdpartyIdentify": "<第三方唯一标识,预约开通必填>",
"monthTicketConfigId": "<取自上一步响应的 data.monthTicketConfigId>",
"timePeriodList": [
{ "startTime": "2026-06-01 00:00:00", "endTime": "2026-06-30 23:59:59" }
]
}'
# 确认后实发(--yes)
openydt ticket add-online-month-ticket --yes --body '{
"carNo": "粤EJW962",
"billCode": "<全局唯一订单号,如 your-app-20260601-0001>",
"parkCodes": "1ZS7H5PQH9,PTD2YBBZ",
"originPrice": 10,
"favorPrice": 5,
"payMode": 4,
"payModeRemark": "微信支付",
"payOrigin": 7,
"payOriginRemark": "智慧停车",
"userName": "王五",
"userPhone": "18000000000",
"thirdpartyIdentify": "<第三方唯一标识,预约开通必填>",
"monthTicketConfigId": "<取自上一步响应的 data.monthTicketConfigId>",
"timePeriodList": [
{ "startTime": "2026-06-01 00:00:00", "endTime": "2026-06-30 23:59:59" }
]
}'
- Query the online monthly ticket by license plate (read, no need for
--yes):
openydt ticket get-online-month-ticket-by-car-card --body '{
"carCode": "粤EJW962",
"buyMethod": 2,
"ticketType": 1,
"validStatus": 0,
"startTime": "20260601000000",
"endTime": "20261231235959",
"pageNum": 1,
"pageSize": 10
}'