{"openapi":"3.1.0","info":{"title":"MONA Cloud API (compute; trước đây VibeCloud)","description":"MONA Cloud API (compute; trước đây VibeCloud) cho tài khoản, thanh toán, VPS LXC, database và AI agent.","version":"0.3.0"},"paths":{"/api/auth/login":{"post":{"tags":["auth"],"summary":"Login with email and password for CLI/script usage","operationId":"api_login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PasswordLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Login Api Auth Login Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/auth/login`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/auth/check-otp":{"post":{"tags":["auth"],"summary":"Non-consuming OTP precheck for the SPA's two-step register/reset flows","description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/auth/check-otp`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"api_check_otp_api_auth_check_otp_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckOtpRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Check Otp Api Auth Check Otp Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/auth/refresh":{"post":{"tags":["auth"],"summary":"Trade a valid access token for a fresh one with a new expiry","description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/auth/refresh`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"api_refresh_access_token_api_auth_refresh_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Refresh Access Token Api Auth Refresh Post"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/auth/identify":{"post":{"tags":["auth"],"summary":"Identify an email and start registration OTP if needed","operationId":"api_identify_email_api_auth_identify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Identify Email Api Auth Identify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/auth/identify`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/auth/register/verify":{"post":{"tags":["auth"],"summary":"Verify registration OTP and create account","operationId":"api_register_verify_api_auth_register_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Register Verify Api Auth Register Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/auth/register/verify`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/auth/reset/start":{"post":{"tags":["auth"],"summary":"Send password reset OTP","operationId":"api_reset_start_api_auth_reset_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Reset Start Api Auth Reset Start Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/auth/reset/start`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/auth/reset/verify":{"post":{"tags":["auth"],"summary":"Verify reset OTP and change password","operationId":"api_reset_verify_api_auth_reset_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Reset Verify Api Auth Reset Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/auth/reset/verify`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/auth/providers":{"get":{"tags":["auth"],"summary":"Which social-login providers are enabled","operationId":"api_auth_providers_api_auth_providers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Auth Providers Api Auth Providers Get"}}}}},"description":"Đọc dữ liệu tại `/api/auth/providers`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/me":{"get":{"tags":["auth"],"summary":"Get the current account","operationId":"api_me_api_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Me Api Me Get"}}}}},"description":"Đọc dữ liệu tại `/api/me`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/me/referral":{"get":{"tags":["auth"],"summary":"Get the current user's referral code, link and stats","description":"Đọc dữ liệu tại `/api/me/referral`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"api_me_referral_api_me_referral_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Me Referral Api Me Referral Get"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/me/affiliate":{"get":{"tags":["auth"],"summary":"Affiliate revenue-share summary","operationId":"api_me_affiliate_api_me_affiliate_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Me Affiliate Api Me Affiliate Get"}}}}},"description":"Đọc dữ liệu tại `/api/me/affiliate`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/me/affiliate/commissions":{"get":{"tags":["auth"],"summary":"List affiliate commissions","operationId":"api_me_affiliate_commissions_api_me_affiliate_commissions_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Me Affiliate Commissions Api Me Affiliate Commissions Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/me/affiliate/commissions`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/me/affiliate/referrals":{"get":{"tags":["auth"],"summary":"List referred accounts","operationId":"api_me_affiliate_referrals_api_me_affiliate_referrals_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Me Affiliate Referrals Api Me Affiliate Referrals Get"}}}}},"description":"Đọc dữ liệu tại `/api/me/affiliate/referrals`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/me/affiliate/settings":{"put":{"tags":["auth"],"summary":"Save affiliate payout settings","operationId":"api_me_affiliate_settings_api_me_affiliate_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AffiliateSettingsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Me Affiliate Settings Api Me Affiliate Settings Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Cập nhật dữ liệu tại `/api/me/affiliate/settings`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/me/affiliate/payouts":{"get":{"tags":["auth"],"summary":"List affiliate payouts","operationId":"api_me_affiliate_payouts_api_me_affiliate_payouts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Me Affiliate Payouts Api Me Affiliate Payouts Get"}}}}},"description":"Đọc dữ liệu tại `/api/me/affiliate/payouts`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"post":{"tags":["auth"],"summary":"Request an affiliate payout","operationId":"api_me_affiliate_request_payout_api_me_affiliate_payouts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AffiliatePayoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Me Affiliate Request Payout Api Me Affiliate Payouts Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/me/affiliate/payouts`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/me/referral/claim":{"post":{"tags":["auth"],"summary":"Claim a referral code","operationId":"api_me_referral_claim_api_me_referral_claim_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferralClaimRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Me Referral Claim Api Me Referral Claim Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/me/referral/claim`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/public/affiliate/click":{"post":{"tags":["services"],"summary":"Record a public affiliate click","operationId":"api_public_affiliate_click_api_public_affiliate_click_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AffiliateClickRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Response Api Public Affiliate Click Api Public Affiliate Click Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/public/affiliate/click`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/me/credit-grants":{"get":{"tags":["auth"],"summary":"Per-user audit trail of credit grants","operationId":"api_me_credit_grants_api_me_credit_grants_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Me Credit Grants Api Me Credit Grants Get"}}}}},"description":"Đọc dữ liệu tại `/api/me/credit-grants`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/auth/logout":{"post":{"tags":["auth"],"summary":"Revoke the current account access token","operationId":"api_logout_api_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Logout Api Auth Logout Post"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/auth/logout`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/dashboard":{"get":{"tags":["services"],"summary":"Dashboard data for a separate frontend","operationId":"api_dashboard_api_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Dashboard Api Dashboard Get"}}}}},"description":"Đọc dữ liệu tại `/api/dashboard`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/api-keys":{"get":{"tags":["services"],"summary":"List automation API tokens","operationId":"api_list_keys_api_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api List Keys Api Api Keys Get"}}}}},"description":"Đọc dữ liệu tại `/api/api-keys`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"post":{"tags":["services"],"summary":"Create an automation API token","operationId":"api_create_key_api_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/api-keys`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/api-keys/{key_id}":{"delete":{"tags":["services"],"summary":"Revoke an automation API token","operationId":"api_revoke_key_api_api_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Revoke Key Api Api Keys  Key Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/api-keys/{key_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/payments/vietqr":{"post":{"tags":["billing"],"summary":"Create a VietQR add-funds invoice","operationId":"api_create_vietqr_invoice_api_payments_vietqr_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddFundsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VietQRInvoiceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/payments/vietqr`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/payments":{"get":{"tags":["billing"],"summary":"List add-funds payments","operationId":"api_list_payments_api_payments_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api List Payments Api Payments Get"}}}}},"description":"Đọc dữ liệu tại `/api/payments`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/payments/{payment_id}":{"get":{"tags":["billing"],"summary":"Get payment details","operationId":"api_get_payment_api_payments__payment_id__get","parameters":[{"name":"payment_id","in":"path","required":true,"schema":{"type":"string","title":"Payment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Get Payment Api Payments  Payment Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/payments/{payment_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/webhooks/payments":{"post":{"tags":["billing"],"summary":"Payment success webhook","operationId":"payment_webhook_api_webhooks_payments_post","parameters":[{"name":"x-api-key","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentWebhook"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Payment Webhook Api Webhooks Payments Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/webhooks/payments`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"PaymentWebhookKey":[]}]}},"/api/prices":{"get":{"tags":["prices"],"summary":"Get public machine-readable pricing","operationId":"api_public_prices_api_prices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Public Prices Api Prices Get"}}}}},"description":"Đọc dữ liệu tại `/api/prices`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/capabilities":{"get":{"tags":["services"],"summary":"Get public capability readiness","operationId":"api_public_capabilities_api_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Public Capabilities Api Capabilities Get"}}}}},"description":"Đọc dữ liệu tại `/api/capabilities`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/packages":{"get":{"tags":["prices"],"summary":"List active public packages","operationId":"api_public_packages_api_packages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Public Packages Api Packages Get"}}}}},"description":"Đọc dữ liệu tại `/api/packages`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/plans":{"get":{"tags":["prices"],"summary":"List active monthly compute plans","operationId":"api_public_plans_api_plans_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Public Plans Api Plans Get"}}}}},"description":"Đọc dữ liệu tại `/api/plans`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/credit-codes/redeem":{"post":{"tags":["billing"],"summary":"Redeem a promotional credit code","operationId":"api_redeem_credit_code_api_credit_codes_redeem_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditCodeRedeemRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Redeem Credit Code Api Credit Codes Redeem Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/credit-codes/redeem`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/subscriptions":{"get":{"tags":["billing"],"summary":"List the current user's subscriptions","operationId":"api_list_subscriptions_api_subscriptions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api List Subscriptions Api Subscriptions Get"}}}}},"description":"Đọc dữ liệu tại `/api/subscriptions`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/services/{service_id}/subscription":{"post":{"tags":["billing"],"summary":"Create or change a service subscription","operationId":"api_change_subscription_api_services__service_id__subscription_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Change Subscription Api Services  Service Id  Subscription Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/services/{service_id}/subscription`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/invoices":{"get":{"tags":["billing"],"summary":"List the current user's monthly invoices","operationId":"api_list_invoices_api_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api List Invoices Api Invoices Get"}}}}},"description":"Đọc dữ liệu tại `/api/invoices`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/invoices/{invoice_id}.pdf":{"get":{"tags":["billing"],"summary":"Download a monthly invoice PDF","operationId":"api_invoice_pdf_api_invoices__invoice_id__pdf_get","parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/invoices/{invoice_id}.pdf`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/lxc":{"post":{"tags":["lxc"],"summary":"Create an LXC VPS","operationId":"create_lxc_api_lxc_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LxcCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/lxc`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/lxc":{"post":{"tags":["sandbox"],"summary":"Create a sandbox LXC VPS","operationId":"create_lxc_api_sandbox_lxc_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LxcCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/sandbox/lxc`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/databases":{"post":{"tags":["databases"],"summary":"Create a database instance","operationId":"create_database_api_databases_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngineNotAvailableResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/databases`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Engine nhận `mongodb`, `postgresql`, `mysql` (`mongo` là alias). Route thật trả 409 `engine_not_available` trước khi tạo job nếu template đã resolve chưa có trên node; route sandbox không kiểm tra hạ tầng.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/databases":{"post":{"tags":["sandbox"],"summary":"Create a sandbox database instance","operationId":"create_database_api_sandbox_databases_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"409":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EngineNotAvailableResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/sandbox/databases`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Engine nhận `mongodb`, `postgresql`, `mysql` (`mongo` là alias). Route thật trả 409 `engine_not_available` trước khi tạo job nếu template đã resolve chưa có trên node; route sandbox không kiểm tra hạ tầng.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/databases/{service_id}/databases":{"post":{"tags":["databases"],"summary":"Create another database on an existing DB instance","operationId":"add_database_to_instance_api_databases__service_id__databases_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DatabaseAddRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Add Database To Instance Api Databases  Service Id  Databases Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/databases/{service_id}/databases`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/databases/{service_id}/databases/{db_name}/password":{"post":{"tags":["databases"],"summary":"Regenerate the password for a database on an instance","operationId":"regenerate_database_password_api_databases__service_id__databases__db_name__password_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}},{"name":"db_name","in":"path","required":true,"schema":{"type":"string","title":"Db Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Regenerate Database Password Api Databases  Service Id  Databases  Db Name  Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/databases/{service_id}/databases/{db_name}/password`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/databases/{service_id}/databases/{db_name}":{"delete":{"tags":["databases"],"summary":"Drop a database from an instance","operationId":"delete_database_on_instance_api_databases__service_id__databases__db_name__delete","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}},{"name":"db_name","in":"path","required":true,"schema":{"type":"string","title":"Db Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete Database On Instance Api Databases  Service Id  Databases  Db Name  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/databases/{service_id}/databases/{db_name}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Check provisioning job status","operationId":"get_job_api_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/jobs/{job_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/jobs/{job_id}":{"get":{"tags":["sandbox"],"summary":"Check sandbox job status","operationId":"get_job_api_sandbox_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/sandbox/jobs/{job_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/jobs":{"get":{"tags":["jobs"],"summary":"List provisioning jobs","operationId":"list_jobs_api_jobs_get","parameters":[{"name":"include_sandbox","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Sandbox"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response List Jobs Api Jobs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/jobs`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/jobs":{"get":{"tags":["sandbox"],"summary":"List sandbox jobs","operationId":"list_jobs_api_sandbox_jobs_get","parameters":[{"name":"include_sandbox","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Sandbox"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response List Jobs Api Sandbox Jobs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/sandbox/jobs`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/jobs/{job_id}/retry":{"post":{"tags":["jobs"],"summary":"Retry a failed provisioning job","operationId":"retry_job_api_jobs__job_id__retry_post","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/jobs/{job_id}/retry`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/services":{"get":{"tags":["services"],"summary":"List services","operationId":"list_services_api_services_get","parameters":[{"name":"include_sandbox","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Sandbox"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServiceResponse"},"title":"Response List Services Api Services Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/services`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/services":{"get":{"tags":["sandbox"],"summary":"List sandbox services","operationId":"list_services_api_sandbox_services_get","parameters":[{"name":"include_sandbox","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Sandbox"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ServiceResponse"},"title":"Response List Services Api Sandbox Services Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/sandbox/services`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/services/{service_id}":{"get":{"tags":["services"],"summary":"Get service details","operationId":"get_service_api_services__service_id__get","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/services/{service_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"delete":{"tags":["services"],"summary":"Delete any Proxmox-backed service","operationId":"delete_service_api_services__service_id__delete","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete Service Api Services  Service Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/services/{service_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/services/{service_id}":{"get":{"tags":["sandbox"],"summary":"Get sandbox service details","operationId":"get_service_api_sandbox_services__service_id__get","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/sandbox/services/{service_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"delete":{"tags":["sandbox"],"summary":"Delete a sandbox service","operationId":"delete_service_api_sandbox_services__service_id__delete","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete Service Api Sandbox Services  Service Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/sandbox/services/{service_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/services/{service_id}/credentials":{"get":{"tags":["services"],"summary":"Reveal service credentials","operationId":"get_service_credentials_api_services__service_id__credentials_get","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}},{"name":"X-Confirm","in":"header","required":false,"schema":{"type":"string","default":"","title":"X-Confirm"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Service Credentials Api Services  Service Id  Credentials Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/services/{service_id}/credentials`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/services/{service_id}/console":{"get":{"tags":["services"],"summary":"Get LXC console proxy data","operationId":"service_console_api_services__service_id__console_get","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Service Console Api Services  Service Id  Console Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/services/{service_id}/console`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/services/{service_id}/console":{"get":{"tags":["sandbox"],"summary":"Get sandbox console data","operationId":"service_console_api_sandbox_services__service_id__console_get","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Service Console Api Sandbox Services  Service Id  Console Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/sandbox/services/{service_id}/console`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/services/{service_id}/stop":{"post":{"tags":["services"],"summary":"Stop any Proxmox-backed service","operationId":"stop_service_api_services__service_id__stop_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Stop Service Api Services  Service Id  Stop Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/services/{service_id}/stop`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/services/{service_id}/stop":{"post":{"tags":["sandbox"],"summary":"Stop a sandbox service","operationId":"stop_service_api_sandbox_services__service_id__stop_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Stop Service Api Sandbox Services  Service Id  Stop Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/sandbox/services/{service_id}/stop`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/services/{service_id}/start":{"post":{"tags":["services"],"summary":"Start any Proxmox-backed service","operationId":"start_service_api_services__service_id__start_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Start Service Api Services  Service Id  Start Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/services/{service_id}/start`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/services/{service_id}/start":{"post":{"tags":["sandbox"],"summary":"Start a sandbox service","operationId":"start_service_api_sandbox_services__service_id__start_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Start Service Api Sandbox Services  Service Id  Start Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/sandbox/services/{service_id}/start`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/lxc/{service_id}/stop":{"post":{"tags":["lxc"],"summary":"Stop an LXC service","operationId":"stop_lxc_api_lxc__service_id__stop_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Stop Lxc Api Lxc  Service Id  Stop Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/lxc/{service_id}/stop`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/lxc/{service_id}/stop":{"post":{"tags":["sandbox"],"summary":"Stop a sandbox LXC service","operationId":"stop_lxc_api_sandbox_lxc__service_id__stop_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Stop Lxc Api Sandbox Lxc  Service Id  Stop Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/sandbox/lxc/{service_id}/stop`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/lxc/{service_id}/start":{"post":{"tags":["lxc"],"summary":"Start an LXC service","operationId":"start_lxc_api_lxc__service_id__start_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Start Lxc Api Lxc  Service Id  Start Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/lxc/{service_id}/start`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/lxc/{service_id}/start":{"post":{"tags":["sandbox"],"summary":"Start a sandbox LXC service","operationId":"start_lxc_api_sandbox_lxc__service_id__start_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Start Lxc Api Sandbox Lxc  Service Id  Start Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/sandbox/lxc/{service_id}/start`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/lxc/{service_id}":{"delete":{"tags":["lxc"],"summary":"Delete an LXC service","operationId":"delete_lxc_api_lxc__service_id__delete","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete Lxc Api Lxc  Service Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/lxc/{service_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/lxc/{service_id}":{"delete":{"tags":["sandbox"],"summary":"Delete a sandbox LXC service","operationId":"delete_lxc_api_sandbox_lxc__service_id__delete","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete Lxc Api Sandbox Lxc  Service Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/sandbox/lxc/{service_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/lxc/{service_id}/resize":{"post":{"tags":["lxc"],"summary":"Resize an LXC (CPU/RAM/disk-grow)","operationId":"resize_lxc_api_lxc__service_id__resize_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LxcResizeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Resize Lxc Api Lxc  Service Id  Resize Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/lxc/{service_id}/resize`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/lxc/{service_id}/rebuild":{"post":{"tags":["lxc"],"summary":"Rebuild an LXC service","operationId":"rebuild_lxc_api_lxc__service_id__rebuild_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/lxc/{service_id}/rebuild`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/lxc/{service_id}/rebuild":{"post":{"tags":["sandbox"],"summary":"Rebuild a sandbox LXC service","operationId":"rebuild_lxc_api_sandbox_lxc__service_id__rebuild_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/sandbox/lxc/{service_id}/rebuild`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/services/{service_id}/rebuild":{"post":{"tags":["services"],"summary":"Rebuild an LXC service","operationId":"rebuild_service_api_services__service_id__rebuild_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/services/{service_id}/rebuild`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/sandbox/services/{service_id}/rebuild":{"post":{"tags":["sandbox"],"summary":"Rebuild a sandbox service","operationId":"rebuild_service_api_sandbox_services__service_id__rebuild_post","parameters":[{"name":"service_id","in":"path","required":true,"schema":{"type":"string","title":"Service Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/sandbox/services/{service_id}/rebuild`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/guide":{"get":{"tags":["services"],"summary":"Get the MONA Cloud guide markdown","operationId":"api_guide_api_guide_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Api Guide Api Guide Get"}}}}},"description":"Đọc dữ liệu tại `/api/guide`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/client-scripts":{"get":{"tags":["services"],"summary":"List client auth helper scripts","operationId":"api_client_scripts_api_client_scripts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Client Scripts Api Client Scripts Get"}}}}},"description":"Đọc dữ liệu tại `/api/client-scripts`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/api/quota":{"get":{"tags":["billing"],"summary":"Get the current account's service quota usage","description":"Đọc dữ liệu tại `/api/quota`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"api_get_quota_api_quota_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Get Quota Api Quota Get"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/quota-requests":{"get":{"tags":["billing"],"summary":"List my quota-increase requests","operationId":"api_list_my_quota_requests_api_quota_requests_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api List My Quota Requests Api Quota Requests Get"}}}}},"description":"Đọc dữ liệu tại `/api/quota-requests`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"post":{"tags":["billing"],"summary":"Submit a quota-increase request to admins","operationId":"api_create_quota_request_api_quota_requests_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotaRequestCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Create Quota Request Api Quota Requests Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/quota-requests`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/auth/stop-impersonation":{"post":{"tags":["auth"],"summary":"Revoke the current impersonation token and close the audit event","description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/auth/stop-impersonation`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"api_stop_impersonation_api_auth_stop_impersonation_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Api Stop Impersonation Api Auth Stop Impersonation Post"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/app-hosts":{"get":{"summary":"List the current user's app hosts and billing resources","operationId":"list_app_hosts_api_app_hosts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"object"},"type":"array","title":"Response List App Hosts Api App Hosts Get"}}}}},"tags":["apps"],"description":"Đọc dữ liệu tại `/api/app-hosts`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"post":{"summary":"Create or reuse this user's Dokploy app host","operationId":"create_app_host_api_app_hosts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppHostCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/app-hosts`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps":{"get":{"summary":"List apps; sandbox header selects only fake apps","operationId":"list_apps_api_apps_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AppResponse"},"type":"array","title":"Response List Apps Api Apps Get"}}}}},"tags":["apps"],"description":"Đọc dữ liệu tại `/api/apps`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","parameters":[{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"post":{"summary":"Tạo app từ git hoặc upload / Create an app from git or a local archive","description":"source=git (mặc định) cần repo_url và trả job; source=upload trả id app, upload_url, max_bytes, job_id và chờ upload / Git returns a deployment job; upload returns an app ID and upload instructions while its create job waits. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","operationId":"create_app_api_apps_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/JobResponse"},{"$ref":"#/components/schemas/AppUploadCreateResponse"}],"title":"Response Create App Api Apps Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"parameters":[{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps/{app_id}/upload":{"post":{"summary":"Upload code local rồi deploy / Upload local code and deploy","description":"Multipart archive zip/tar.gz ≤ APPS_UPLOAD_MAX_MB (80 MiB mặc định), build_path mặc định /; bỏ node_modules, .git, .env*, *.pem, chặn traversal/liên kết, giới hạn dữ liệu giải nén cùng mức và 10.000 entries; trả job id, sandbox từ chối file / Upload a bounded archive, sanitize paths and secrets, detect Dockerfile → dockerfile, index.html only → static, otherwise nixpacks; return a job ID; sandbox rejects uploads. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","operationId":"upload_app_api_apps__app_id__upload_post","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"413":{"description":"Archive quá lớn / Archive too large"},"422":{"description":"Archive không hợp lệ hoặc sandbox / Invalid archive or sandbox upload"},"409":{"description":"App đang bận hoặc source không phải upload / App busy or not an upload source"}},"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["archive"],"properties":{"archive":{"type":"string","format":"binary","description":"Code zip hoặc tar.gz / Source zip or tar.gz"},"build_path":{"type":"string","default":"/","description":"Thư mục build trong archive / Build directory inside archive"}}}}}},"tags":["apps"],"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps/{app_id}":{"get":{"summary":"Read app status, URL, last deployment and app host","operationId":"get_app_api_apps__app_id__get","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Đọc dữ liệu tại `/api/apps/{app_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"delete":{"summary":"Delete the application, its domains and managed DNS; keep the app host","operationId":"delete_app_api_apps__app_id__delete","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete App Api Apps  App Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/apps/{app_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps/{app_id}/auto-deploy":{"post":{"summary":"Enable or disable Git-push auto-deploy and return GitHub webhook settings","operationId":"set_auto_deploy_api_apps__app_id__auto_deploy_post","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoDeployRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoDeployResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/apps/{app_id}/auto-deploy`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"get":{"summary":"Read Git-push auto-deploy settings; X-Confirm: reveal shows the secret","operationId":"get_auto_deploy_api_apps__app_id__auto_deploy_get","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoDeployResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Đọc dữ liệu tại `/api/apps/{app_id}/auto-deploy`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps/{app_id}/webhook":{"post":{"summary":"Receive a signed GitHub push and enqueue auto-deploy","operationId":"github_webhook_api_apps__app_id__webhook_post","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Github Webhook Api Apps  App Id  Webhook Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/apps/{app_id}/webhook`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps/{app_id}/deploy":{"post":{"summary":"Deploy lại git hoặc upload gần nhất / Redeploy git or the latest upload","description":"Dokploy giữ zip để deploy lại; chưa upload trả 409 upload_required / Dokploy retains the last zip; missing uploads return 409 upload_required. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","operationId":"deploy_app_api_apps__app_id__deploy_post","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"409":{"description":"Chưa upload hoặc app đang bận / upload_required or app busy"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps/{app_id}/deployments":{"get":{"summary":"List successful app deployments and identify the current one","operationId":"app_deployments_api_apps__app_id__deployments_get","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AppDeploymentResponse"},"title":"Response App Deployments Api Apps  App Id  Deployments Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Đọc dữ liệu tại `/api/apps/{app_id}/deployments`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps/{app_id}/rollback":{"post":{"summary":"Rollback an app to a successful deployment","operationId":"rollback_app_api_apps__app_id__rollback_post","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppRollbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"404":{"description":"no_such_deployment"},"409":{"description":"app_busy or artifact_expired"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/apps/{app_id}/rollback`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps/{app_id}/env":{"put":{"summary":"Replace app environment; redeploy explicitly to apply","operationId":"update_env_api_apps__app_id__env_put","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppEnvironmentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Update Env Api Apps  App Id  Env Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Cập nhật dữ liệu tại `/api/apps/{app_id}/env`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps/{app_id}/domains":{"post":{"summary":"Add a custom domain and return CNAME instructions","operationId":"add_domain_api_apps__app_id__domains_post","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppDomainRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Add Domain Api Apps  App Id  Domains Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/apps/{app_id}/domains`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/apps/{app_id}/logs":{"get":{"summary":"Read the last 500 lines of an owned deployment log","operationId":"app_logs_api_apps__app_id__logs_get","parameters":[{"name":"app_id","in":"path","required":true,"schema":{"type":"string","title":"App Id"}},{"name":"deployment","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Deployment"}},{"name":"X-Vibecloud-Sandbox","in":"header","required":false,"schema":{"type":"string","enum":["1"]},"description":"Tạo/list sandbox 0đ; lookup ID sandbox luôn giữ sandbox."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response App Logs Api Apps  App Id  Logs Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"tags":["apps"],"description":"Đọc dữ liệu tại `/api/apps/{app_id}/logs`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới. Repo public HTTPS hoặc source=upload → job Dokploy → URL HTTPS / Deploy public git or local archives via Dokploy. Poll /api/jobs/{id} tới succeeded/failed. App host dùng billing LXC Wave A; app không tính thêm phí. POST /api/app-hosts với {} dùng 2 CPU/2 GB RAM/30 GB disk; hỗ trợ billing_mode monthly + plan_code + period. X-Vibecloud-Sandbox: 1 trên /api/apps tạo URL giả, trả estimated_app_host và charged_vnd=0. PUT env thay toàn bộ env, cần POST deploy để áp dụng. Custom domain trả CNAME và SSL pending. Xoá app giữ host; xoá /api/services/{app_host_id} để ngừng phí.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/bases":{"get":{"tags":["services"],"summary":"List Bases","operationId":"list_bases_api_bases_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"object"},"type":"array","title":"Response List Bases Api Bases Get"}}}}},"description":"Đọc dữ liệu tại `/api/bases`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"post":{"tags":["services"],"summary":"Create a dedicated Supabase OSS base host","operationId":"create_base_api_bases_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/bases`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/bases/{base_id}":{"get":{"tags":["services"],"summary":"Get Base","operationId":"get_base_api_bases__base_id__get","parameters":[{"name":"base_id","in":"path","required":true,"schema":{"type":"string","title":"Base Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Base Api Bases  Base Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/bases/{base_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"delete":{"tags":["services"],"summary":"Delete Base","operationId":"delete_base_api_bases__base_id__delete","parameters":[{"name":"base_id","in":"path","required":true,"schema":{"type":"string","title":"Base Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete Base Api Bases  Base Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/bases/{base_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/bases/{base_id}/credentials":{"get":{"tags":["services"],"summary":"Get Base Credentials","operationId":"get_base_credentials_api_bases__base_id__credentials_get","parameters":[{"name":"base_id","in":"path","required":true,"schema":{"type":"string","title":"Base Id"}},{"name":"x-confirm","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Confirm"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Base Credentials Api Bases  Base Id  Credentials Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/bases/{base_id}/credentials`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains":{"get":{"tags":["services"],"summary":"List Domains","description":"Đọc dữ liệu tại `/api/domains`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"list_domains_api_domains_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DomainResponse"},"type":"array","title":"Response List Domains Api Domains Get"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"post":{"tags":["services"],"summary":"Buy Domain","operationId":"buy_domain_api_domains_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainBuyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Buy Domain Api Domains Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/domains`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/import":{"post":{"tags":["services"],"summary":"Import Domain","operationId":"import_domain_api_domains_import_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainImportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/domains/import`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/search":{"get":{"tags":["services"],"summary":"Search Domains","operationId":"search_domains_api_domains_search_get","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":253,"title":"Q"}},{"name":"tlds","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tlds"}},{"name":"years","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"default":1,"title":"Years"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainSearchQuote"},"title":"Response Search Domains Api Domains Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/domains/search`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/tlds/groups":{"get":{"tags":["services"],"summary":"List Tld Groups","description":"Đọc dữ liệu tại `/api/domains/tlds/groups`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"list_tld_groups_api_domains_tlds_groups_get","parameters":[{"name":"include_adult","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Adult"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainTldGroup"},"title":"Response List Tld Groups Api Domains Tlds Groups Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/tlds":{"get":{"tags":["services"],"summary":"List Tlds","description":"Đọc dữ liệu tại `/api/domains/tlds`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"list_tlds_api_domains_tlds_get","parameters":[{"name":"scope","in":"query","required":false,"schema":{"enum":["popular","all"],"type":"string","default":"popular","title":"Scope"}},{"name":"include_adult","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Adult"}},{"name":"group","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"Lọc theo danh mục, lấy slug từ /tlds/groups","title":"Group"},"description":"Lọc theo danh mục, lấy slug từ /tlds/groups"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"Tìm trong tên đuôi và nhãn tiếng Việt","title":"Q"},"description":"Tìm trong tên đuôi và nhãn tiếng Việt"},{"name":"max_price_vnd","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"description":"Chỉ lấy đuôi có giá năm đầu không quá số này","title":"Max Price Vnd"},"description":"Chỉ lấy đuôi có giá năm đầu không quá số này"},{"name":"sort","in":"query","required":false,"schema":{"enum":["popular","price","tld"],"type":"string","default":"popular","title":"Sort"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainTld"},"title":"Response List Tlds Api Domains Tlds Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/tlds/suggest":{"get":{"tags":["services"],"summary":"Suggest Domains","description":"Đọc dữ liệu tại `/api/domains/tlds/suggest`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"suggest_domains_api_domains_tlds_suggest_get","parameters":[{"name":"keyword","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":63,"description":"Tên bạn muốn, hoặc một từ khoá mô tả sản phẩm","title":"Keyword"},"description":"Tên bạn muốn, hoặc một từ khoá mô tả sản phẩm"},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"description":"Slug danh mục từ /tlds/groups để ưu tiên đuôi hợp ngành","title":"Industry"},"description":"Slug danh mục từ /tlds/groups để ưu tiên đuôi hợp ngành"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"default":12,"title":"Limit"}},{"name":"max_price_vnd","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","minimum":0},{"type":"null"}],"title":"Max Price Vnd"}},{"name":"include_taken","in":"query","required":false,"schema":{"type":"boolean","description":"Giữ lại cả tên đã có người đăng ký","default":false,"title":"Include Taken"},"description":"Giữ lại cả tên đã có người đăng ký"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DomainSuggestion"},"title":"Response Suggest Domains Api Domains Tlds Suggest Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/registrant":{"get":{"tags":["services"],"summary":"Get Registrant","operationId":"get_registrant_api_domains_registrant_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Get Registrant Api Domains Registrant Get"}}}}},"description":"Đọc dữ liệu tại `/api/domains/registrant`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"put":{"tags":["services"],"summary":"Upsert Registrant","operationId":"upsert_registrant_api_domains_registrant_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRegistrant"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Upsert Registrant Api Domains Registrant Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Cập nhật dữ liệu tại `/api/domains/registrant`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/reserve":{"post":{"tags":["services"],"summary":"Reserve Domain","description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/domains/reserve`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"reserve_domain_api_domains_reserve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainReserveRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Reserve Domain Api Domains Reserve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/reserve/{reservation_id}":{"get":{"tags":["services"],"summary":"Reservation Status","description":"Đọc dữ liệu tại `/api/domains/reserve/{reservation_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"reservation_status_api_domains_reserve__reservation_id__get","parameters":[{"name":"reservation_id","in":"path","required":true,"schema":{"type":"string","title":"Reservation Id"}},{"name":"t","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Reservation Status Api Domains Reserve  Reservation Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"delete":{"tags":["services"],"summary":"Release Reservation","description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/domains/reserve/{reservation_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"release_reservation_api_domains_reserve__reservation_id__delete","parameters":[{"name":"reservation_id","in":"path","required":true,"schema":{"type":"string","title":"Reservation Id"}},{"name":"t","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":128},{"type":"null"}],"title":"T"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Release Reservation Api Domains Reserve  Reservation Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/reserve/{reservation_id}/claim":{"post":{"tags":["services"],"summary":"Claim Reservation","description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/domains/reserve/{reservation_id}/claim`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"claim_reservation_api_domains_reserve__reservation_id__claim_post","parameters":[{"name":"reservation_id","in":"path","required":true,"schema":{"type":"string","title":"Reservation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainClaimRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Claim Reservation Api Domains Reserve  Reservation Id  Claim Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/{domain_id}/verify":{"post":{"tags":["services"],"summary":"Start Verify","operationId":"start_verify_api_domains__domain_id__verify_post","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainVerifyStart"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/domains/{domain_id}/verify`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"get":{"tags":["services"],"summary":"Get Verify Status","operationId":"get_verify_status_api_domains__domain_id__verify_get","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainVerifyStatus"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/domains/{domain_id}/verify`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/{domain_id}/health":{"get":{"tags":["services"],"summary":"Domain Health","operationId":"domain_health_api_domains__domain_id__health_get","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainHealth"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/domains/{domain_id}/health`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/{domain_id}/wait":{"get":{"tags":["services"],"summary":"Wait Domain","operationId":"wait_domain_api_domains__domain_id__wait_get","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"timeout","in":"query","required":false,"schema":{"type":"integer","maximum":300,"minimum":5,"default":60,"title":"Timeout"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Wait Domain Api Domains  Domain Id  Wait Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/domains/{domain_id}/wait`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/{domain_id}/renew":{"post":{"tags":["services"],"summary":"Renew Domain","operationId":"renew_domain_api_domains__domain_id__renew_post","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRenewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Renew Domain Api Domains  Domain Id  Renew Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/domains/{domain_id}/renew`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/webhook":{"put":{"tags":["services"],"summary":"Set Webhook","operationId":"set_webhook_api_domains_webhook_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainWebhookRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Set Webhook Api Domains Webhook Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Cập nhật dữ liệu tại `/api/domains/webhook`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/{domain_id}/dns":{"get":{"tags":["services"],"summary":"List Dns","operationId":"list_dns_api_domains__domain_id__dns_get","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"},"title":"Response List Dns Api Domains  Domain Id  Dns Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/domains/{domain_id}/dns`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"post":{"tags":["services"],"summary":"Create Dns","operationId":"create_dns_api_domains__domain_id__dns_post","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainDNSRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Create Dns Api Domains  Domain Id  Dns Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/domains/{domain_id}/dns`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/{domain_id}/dns/{record_id}":{"put":{"tags":["services"],"summary":"Update Dns","operationId":"update_dns_api_domains__domain_id__dns__record_id__put","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,128}$","title":"Record Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainDNSRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Update Dns Api Domains  Domain Id  Dns  Record Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Cập nhật dữ liệu tại `/api/domains/{domain_id}/dns/{record_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"delete":{"tags":["services"],"summary":"Delete Dns","operationId":"delete_dns_api_domains__domain_id__dns__record_id__delete","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,128}$","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete Dns Api Domains  Domain Id  Dns  Record Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/domains/{domain_id}/dns/{record_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/{domain_id}/records":{"get":{"tags":["services"],"summary":"Monahost Records List","operationId":"monahost_records_list_api_domains__domain_id__records_get","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Monahost Records List Api Domains  Domain Id  Records Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Đọc dữ liệu tại `/api/domains/{domain_id}/records`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"post":{"tags":["services"],"summary":"Monahost Records Create","operationId":"monahost_records_create_api_domains__domain_id__records_post","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRecordRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Monahost Records Create Api Domains  Domain Id  Records Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/domains/{domain_id}/records`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/{domain_id}/records/{record_id}":{"put":{"tags":["services"],"summary":"Monahost Records Update","operationId":"monahost_records_update_api_domains__domain_id__records__record_id__put","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,128}$","title":"Record Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRecordRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Monahost Records Update Api Domains  Domain Id  Records  Record Id  Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Cập nhật dữ liệu tại `/api/domains/{domain_id}/records/{record_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]},"delete":{"tags":["services"],"summary":"Monahost Records Delete","operationId":"monahost_records_delete_api_domains__domain_id__records__record_id__delete","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}},{"name":"record_id","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-zA-Z0-9_-]{1,128}$","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Monahost Records Delete Api Domains  Domain Id  Records  Record Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Xóa hoặc vô hiệu hóa dữ liệu tại `/api/domains/{domain_id}/records/{record_id}`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/{domain_id}/ns":{"patch":{"tags":["services"],"summary":"Monahost Set Ns","operationId":"monahost_set_ns_api_domains__domain_id__ns_patch","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainNsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Monahost Set Ns Api Domains  Domain Id  Ns Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Cập nhật một phần dữ liệu tại `/api/domains/{domain_id}/ns`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/domains/{domain_id}/attach":{"post":{"tags":["services"],"summary":"Attach Domain","operationId":"attach_domain_api_domains__domain_id__attach_post","parameters":[{"name":"domain_id","in":"path","required":true,"schema":{"type":"string","title":"Domain Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainAttachRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Attach Domain Api Domains  Domain Id  Attach Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/domains/{domain_id}/attach`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","security":[{"BearerAuth":[]},{"ApiTokenHeader":[]}]}},"/api/auth/monaid/link/verify":{"post":{"tags":["auth"],"summary":"Monaid Link Verify","operationId":"monaid_link_verify_api_auth_monaid_link_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MonaIDLinkVerify"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Monaid Link Verify Api Auth Monaid Link Verify Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"description":"Tạo dữ liệu hoặc thực thi thao tác tại `/api/auth/monaid/link/verify`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới."}},"/health":{"get":{"tags":["services"],"summary":"Kiểm tra trạng thái API","description":"Đọc dữ liệu tại `/health`. Phản hồi dùng JSON và tuân theo schema được công bố bên dưới.","operationId":"health_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"title":"Response Health Health Get"}}}}}}}},"components":{"schemas":{"AddFundsRequest":{"properties":{"amount":{"type":"integer","maximum":500000000.0,"minimum":10000.0,"title":"Amount"}},"type":"object","required":["amount"],"title":"AddFundsRequest"},"AdminCreditGrant":{"properties":{"email":{"type":"string","maxLength":320,"minLength":3,"title":"Email"},"amount_vnd":{"type":"integer","exclusiveMinimum":0.0,"title":"Amount Vnd"}},"type":"object","required":["email","amount_vnd"],"title":"AdminCreditGrant"},"AdminPlanUpsertRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":2,"title":"Code"},"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name"},"cpu":{"type":"integer","maximum":128.0,"minimum":1.0,"title":"Cpu"},"ram_gb":{"type":"integer","maximum":1024.0,"minimum":1.0,"title":"Ram Gb"},"disk_gb":{"type":"integer","maximum":32768.0,"minimum":5.0,"title":"Disk Gb"},"price_month_vnd":{"type":"integer","minimum":0.0,"title":"Price Month Vnd"},"price_year_vnd":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Price Year Vnd"},"included_db":{"type":"integer","minimum":-1.0,"title":"Included Db","default":0},"backup_policy":{"type":"string","maxLength":120,"minLength":1,"title":"Backup Policy","default":"none"},"active":{"type":"boolean","title":"Active","default":true},"admin_only":{"type":"boolean","title":"Admin Only","default":false}},"type":"object","required":["code","name","cpu","ram_gb","disk_gb","price_month_vnd"],"title":"AdminPlanUpsertRequest"},"AdminUserAdjustRequest":{"properties":{"amount_vnd":{"type":"integer","maximum":500000000.0,"minimum":-500000000.0,"title":"Amount Vnd"},"reason":{"type":"string","maxLength":2000,"minLength":3,"title":"Reason"}},"type":"object","required":["amount_vnd","reason"],"title":"AdminUserAdjustRequest"},"AdminUserNoteRequest":{"properties":{"note":{"type":"string","maxLength":4000,"minLength":1,"title":"Note"}},"type":"object","required":["note"],"title":"AdminUserNoteRequest"},"AdminUserTagRequest":{"properties":{"tag":{"type":"string","const":"mona_customer","title":"Tag"},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["tag"],"title":"AdminUserTagRequest"},"AffiliateAdminActionRequest":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":1000},{"type":"null"}],"title":"Reason"}},"type":"object","title":"AffiliateAdminActionRequest"},"AffiliateAdminPaidRequest":{"properties":{"reference":{"type":"string","maxLength":200,"minLength":1,"title":"Reference"}},"type":"object","required":["reference"],"title":"AffiliateAdminPaidRequest"},"AffiliateClickRequest":{"properties":{"code":{"type":"string","maxLength":32,"minLength":2,"title":"Code"},"path":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Path"},"source":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Source"}},"type":"object","required":["code"],"title":"AffiliateClickRequest"},"AffiliatePayoutRequest":{"properties":{"method":{"anyOf":[{"type":"string","enum":["credit","bank"]},{"type":"null"}],"title":"Method"}},"type":"object","title":"AffiliatePayoutRequest"},"AffiliateSettingsRequest":{"properties":{"method":{"type":"string","enum":["credit","bank"],"title":"Method"},"bank_name":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Bank Name"},"bank_account":{"anyOf":[{"type":"string","maxLength":80},{"type":"null"}],"title":"Bank Account"},"bank_holder":{"anyOf":[{"type":"string","maxLength":160},{"type":"null"}],"title":"Bank Holder"},"tax_id":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Tax Id"}},"type":"object","required":["method"],"title":"AffiliateSettingsRequest"},"AffiliateTierRequest":{"properties":{"tier":{"type":"string","enum":["standard","agency","founding"],"title":"Tier"}},"type":"object","required":["tier"],"title":"AffiliateTierRequest"},"ApiKeyCreateRequest":{"properties":{"label":{"type":"string","maxLength":120,"minLength":1,"title":"Label","default":"Claude automation"}},"type":"object","title":"ApiKeyCreateRequest"},"ApiKeyCreateResponse":{"properties":{"id":{"type":"string","title":"Id"},"label":{"type":"string","title":"Label"},"token":{"type":"string","title":"Token"},"token_prefix":{"type":"string","title":"Token Prefix"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","label","token","token_prefix","created_at"],"title":"ApiKeyCreateResponse"},"AppCreateRequest":{"properties":{"source":{"type":"string","enum":["git","upload"],"title":"Source","description":"Nguồn git hoặc thư mục local / Git repository or local archive.","default":"git"},"name":{"anyOf":[{"type":"string","maxLength":63},{"type":"null"}],"title":"Name","description":"Tên app (slug hoá) làm tiền tố hostname; để trống thì lấy tên repo hoặc local-<mã> / Optional app name used as hostname prefix."},"repo_url":{"anyOf":[{"type":"string","maxLength":2048},{"type":"null"}],"title":"Repo Url","description":"Bắt buộc với source=git / Required for git sources.","examples":["https://github.com/themonagroup/monacloud-example-node"]},"branch":{"type":"string","maxLength":255,"minLength":1,"title":"Branch","default":"main"},"build_type":{"type":"string","enum":["dockerfile","nixpacks","static"],"title":"Build Type","description":"Git mặc định dockerfile; upload tự nhận diện nếu bỏ qua / Git defaults to dockerfile; uploads auto-detect when omitted.","default":"dockerfile"},"dockerfile":{"type":"string","maxLength":255,"minLength":1,"title":"Dockerfile","default":"Dockerfile"},"env":{"additionalProperties":{"type":"string"},"type":"object","title":"Env"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"app_host_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Host Id"},"port":{"type":"integer","maximum":65535.0,"minimum":1.0,"title":"Port","default":3000}},"type":"object","title":"AppCreateRequest"},"AppDeploymentResponse":{"properties":{"seq":{"type":"integer","title":"Seq"},"app_id":{"type":"string","title":"App Id"},"source_type":{"type":"string","enum":["git","upload"],"title":"Source Type"},"git_commit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Git Commit"},"upload_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upload Ref"},"dokploy_deployment_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dokploy Deployment Id"},"url":{"type":"string","title":"Url"},"status":{"type":"string","const":"done","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"current":{"type":"boolean","title":"Current","default":false},"rolled_back_from":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Rolled Back From"}},"type":"object","required":["seq","app_id","source_type","url","status","created_at"],"title":"AppDeploymentResponse"},"AppDomainRequest":{"properties":{"host":{"type":"string","title":"Host"}},"type":"object","required":["host"],"title":"AppDomainRequest"},"AppEnvironmentRequest":{"properties":{"env":{"additionalProperties":{"type":"string"},"type":"object","title":"Env"}},"type":"object","required":["env"],"title":"AppEnvironmentRequest"},"AppHostCreateRequest":{"properties":{"app_name":{"type":"string","maxLength":80,"minLength":2,"title":"App Name","default":"app-host"},"package_slug":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Package Slug"},"cpu":{"anyOf":[{"type":"integer","maximum":16.0,"minimum":1.0},{"type":"null"}],"title":"Cpu"},"ram_gb":{"anyOf":[{"type":"integer","maximum":64.0,"minimum":1.0},{"type":"null"}],"title":"Ram Gb"},"disk_gb":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":10.0},{"type":"null"}],"title":"Disk Gb"},"hostname":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Hostname"},"billing_mode":{"type":"string","enum":["hourly","monthly"],"title":"Billing Mode","default":"hourly"},"plan_code":{"anyOf":[{"type":"string","maxLength":64,"minLength":2},{"type":"null"}],"title":"Plan Code"},"period":{"type":"string","enum":["month","year"],"title":"Period","default":"month"}},"type":"object","title":"AppHostCreateRequest"},"AppResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"source":{"type":"string","enum":["git","upload"],"title":"Source","default":"git"},"repo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Repo Url"},"branch":{"type":"string","title":"Branch"},"build_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Build Type"},"detected_build":{"anyOf":[{"type":"string","enum":["dockerfile","nixpacks","static"]},{"type":"null"}],"title":"Detected Build"},"status":{"type":"string","enum":["awaiting_upload","queued","deploying","done","error","deleted"],"title":"Status"},"url":{"type":"string","title":"Url"},"application_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Id"},"app_host":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"App Host"},"last_deploy":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Last Deploy"},"domains":{"items":{"type":"object"},"type":"array","title":"Domains"},"errorMessage":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Errormessage"},"sandbox":{"type":"boolean","title":"Sandbox","default":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","name","branch","status","url"],"title":"AppResponse"},"AppRollbackRequest":{"properties":{"to_seq":{"type":"integer","minimum":1.0,"title":"To Seq"}},"type":"object","required":["to_seq"],"title":"AppRollbackRequest"},"AppUploadCreateResponse":{"properties":{"id":{"type":"string","title":"Id","description":"ID app để upload / App ID for uploading."},"upload_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upload Url"},"max_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Bytes"},"job_id":{"type":"string","title":"Job Id","description":"Job tạo app chờ upload đầu tiên / Create job waiting for the first upload."},"status":{"type":"string","enum":["awaiting_upload","done"],"title":"Status"},"url":{"type":"string","title":"Url"},"sandbox":{"type":"boolean","title":"Sandbox","default":false},"result":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Result"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note","description":"Ghi chú (sandbox không nhận file) / Note."}},"type":"object","required":["id","upload_url","max_bytes","job_id","status","url"],"title":"AppUploadCreateResponse"},"AutoDeployRequest":{"properties":{"enabled":{"type":"boolean","title":"Enabled"}},"type":"object","required":["enabled"],"title":"AutoDeployRequest"},"AutoDeployResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"webhook_url":{"type":"string","title":"Webhook Url"},"webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Secret"},"branch":{"type":"string","title":"Branch"}},"type":"object","required":["enabled","webhook_url","branch"],"title":"AutoDeployResponse"},"BaseCreateRequest":{"properties":{"app_name":{"type":"string","maxLength":40,"minLength":2,"title":"App Name","default":"base"},"package_slug":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Package Slug"},"cpu":{"anyOf":[{"type":"integer","maximum":16.0,"minimum":1.0},{"type":"null"}],"title":"Cpu"},"ram_gb":{"anyOf":[{"type":"integer","maximum":64.0,"minimum":1.0},{"type":"null"}],"title":"Ram Gb"},"disk_gb":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":10.0},{"type":"null"}],"title":"Disk Gb"},"hostname":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Hostname"},"billing_mode":{"type":"string","enum":["hourly","monthly"],"title":"Billing Mode","default":"hourly"},"plan_code":{"anyOf":[{"type":"string","maxLength":64,"minLength":2},{"type":"null"}],"title":"Plan Code"},"period":{"type":"string","enum":["month","year"],"title":"Period","default":"month"}},"type":"object","title":"BaseCreateRequest"},"CheckOtpRequest":{"properties":{"email":{"type":"string","title":"Email"},"otp":{"type":"string","maxLength":6,"minLength":6,"title":"Otp"},"purpose":{"type":"string","enum":["register","reset_password"],"title":"Purpose"}},"type":"object","required":["email","otp","purpose"],"title":"CheckOtpRequest","description":"Non-consuming OTP check (POST /api/auth/check-otp).\n\nPowers the SPA's two-step register / reset flows where the OTP is\nvalidated in step 1 so the user gets immediate feedback, and the\nreal consume happens at the final submit in step 2.\n\n`purpose` is constrained to the two OTP flows the SPA owns — pinning\nthe literal here means a typo (`\"reset\"` vs `\"reset_password\"`) is\ncaught by Pydantic, not by a silent 400 from the OTP lookup."},"CreditCodeRedeemRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":2,"title":"Code"}},"type":"object","required":["code"],"title":"CreditCodeRedeemRequest"},"CreditCodeUpsertRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":2,"title":"Code"},"amount":{"type":"integer","maximum":500000000.0,"exclusiveMinimum":0.0,"title":"Amount"},"max_uses":{"type":"integer","maximum":1000000.0,"minimum":1.0,"title":"Max Uses"},"expires":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires"},"tag":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Tag"},"active":{"type":"boolean","title":"Active","default":true}},"type":"object","required":["code","amount","max_uses"],"title":"CreditCodeUpsertRequest"},"DatabaseAddRequest":{"properties":{"app_name":{"type":"string","maxLength":80,"minLength":2,"title":"App Name"}},"type":"object","required":["app_name"],"title":"DatabaseAddRequest"},"DatabaseCreateRequest":{"properties":{"app_name":{"type":"string","maxLength":80,"minLength":2,"title":"App Name"},"engine":{"type":"string","enum":["mongodb","postgresql","mysql"],"title":"Engine","description":"Database engine. `mongo` is accepted as a compatibility alias for `mongodb`; canonical values are `mongodb`, `postgresql`, and `mysql`.","default":"mongodb"},"package_slug":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Package Slug"},"cpu":{"anyOf":[{"type":"integer","maximum":16.0,"minimum":1.0},{"type":"null"}],"title":"Cpu"},"ram_gb":{"anyOf":[{"type":"integer","maximum":64.0,"minimum":1.0},{"type":"null"}],"title":"Ram Gb"},"disk_gb":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":10.0},{"type":"null"}],"title":"Disk Gb"}},"type":"object","required":["app_name"],"title":"DatabaseCreateRequest","description":"Database create payload. Like LxcCreateRequest, callers may either\npass `package_slug` or explicit cpu/ram_gb/disk_gb (not both)."},"DomainAttachRequest":{"properties":{"app_id":{"type":"string","pattern":"^[a-fA-F0-9]{24}$","title":"App Id"}},"type":"object","required":["app_id"],"title":"DomainAttachRequest"},"DomainBuyRequest":{"properties":{"name":{"type":"string","title":"Name"},"years":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Years","default":1},"registrant_id":{"anyOf":[{"type":"string","pattern":"^[a-fA-F0-9]{24}$"},{"type":"null"}],"title":"Registrant Id"},"spelling_confirmed":{"type":"boolean","title":"Spelling Confirmed","default":false}},"type":"object","required":["name"],"title":"DomainBuyRequest"},"DomainClaimRequest":{"properties":{"claim_token":{"type":"string","maxLength":128,"minLength":16,"title":"Claim Token"},"registrant_id":{"anyOf":[{"type":"string","pattern":"^[a-fA-F0-9]{24}$"},{"type":"null"}],"title":"Registrant Id"},"marketing_consent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Marketing Consent"}},"type":"object","required":["claim_token"],"title":"DomainClaimRequest","description":"Nhận reservation về tài khoản MONA Pass đang đăng nhập (= trả tiền = đăng ký, 1 động tác)."},"DomainDNSRequest":{"properties":{"type":{"type":"string","enum":["A","CNAME","MX","TXT"],"title":"Type"},"name":{"type":"string","maxLength":253,"minLength":1,"title":"Name"},"content":{"type":"string","maxLength":65535,"minLength":1,"title":"Content"},"ttl":{"type":"integer","maximum":86400.0,"minimum":1.0,"title":"Ttl","default":120},"proxied":{"type":"boolean","title":"Proxied","default":false},"priority":{"anyOf":[{"type":"integer","maximum":65535.0,"minimum":0.0},{"type":"null"}],"title":"Priority"}},"type":"object","required":["type","name","content"],"title":"DomainDNSRequest"},"DomainHealth":{"properties":{"id":{"type":"string","title":"Id"},"domain":{"type":"string","title":"Domain"},"status":{"type":"string","title":"Status"},"expiry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiry"},"expiry_estimated":{"type":"boolean","title":"Expiry Estimated","default":false},"name_servers":{"items":{"type":"string"},"type":"array","title":"Name Servers"},"is_vn":{"type":"boolean","title":"Is Vn","default":false},"ns_ok":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ns Ok"},"ssl_ok":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Ssl Ok"},"profile_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Status"},"alerts":{"items":{"type":"string"},"type":"array","title":"Alerts"}},"type":"object","required":["id","domain","status","expiry","ns_ok","ssl_ok","profile_status","alerts"],"title":"DomainHealth"},"DomainImportRequest":{"properties":{"name":{"type":"string","title":"Name"}},"type":"object","required":["name"],"title":"DomainImportRequest"},"DomainNsRequest":{"properties":{"ns_list":{"items":{"type":"string"},"type":"array","maxItems":6,"minItems":2,"title":"Ns List"}},"type":"object","required":["ns_list"],"title":"DomainNsRequest","description":"Đổi nameserver (≥2) cho domain đăng ký tại MONA Host."},"DomainRecordRequest":{"properties":{"type":{"type":"string","enum":["A","AAAA","CNAME","MX","TXT","SRV","NS"],"title":"Type"},"name":{"type":"string","maxLength":253,"minLength":1,"title":"Name"},"data":{"type":"string","maxLength":2048,"minLength":1,"title":"Data"},"ttl":{"anyOf":[{"type":"integer","maximum":86400.0,"minimum":60.0},{"type":"null"}],"title":"Ttl"},"priority":{"anyOf":[{"type":"integer","maximum":65535.0,"minimum":0.0},{"type":"null"}],"title":"Priority"}},"type":"object","required":["type","name","data"],"title":"DomainRecordRequest","description":"Bản ghi DNS quản qua MONA Host (cho domain đăng ký tại MONA Host)."},"DomainRegistrant":{"properties":{"owner_type":{"type":"string","enum":["individual","organization"],"title":"Owner Type","default":"individual"},"fullname":{"type":"string","maxLength":200,"minLength":2,"title":"Fullname"},"email":{"type":"string","title":"Email"},"phone":{"type":"string","maxLength":20,"minLength":8,"title":"Phone"},"address":{"type":"string","maxLength":500,"minLength":5,"title":"Address"},"province":{"type":"string","maxLength":100,"title":"Province","default":""},"ward":{"type":"string","maxLength":100,"title":"Ward","default":""},"country":{"type":"string","maxLength":10,"title":"Country","default":"VN"},"cccd":{"anyOf":[{"type":"string","maxLength":12,"minLength":0},{"type":"null"}],"title":"Cccd"},"dob":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Dob"},"gender":{"anyOf":[{"type":"string","enum":["male","female",""]},{"type":"null"}],"title":"Gender"},"org_name":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Org Name"},"tax_code":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Tax Code"},"representative":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Representative"}},"type":"object","required":["fullname","email","phone","address"],"title":"DomainRegistrant"},"DomainRenewRequest":{"properties":{"billing_cycle":{"type":"integer","maximum":120.0,"minimum":1.0,"title":"Billing Cycle"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","required":["billing_cycle"],"title":"DomainRenewRequest"},"DomainReserveRequest":{"properties":{"name":{"type":"string","title":"Name"},"years":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Years","default":1},"email":{"type":"string","title":"Email"},"phone":{"type":"string","maxLength":20,"minLength":8,"title":"Phone"},"marketing_consent":{"type":"boolean","title":"Marketing Consent","default":false},"spelling_confirmed":{"type":"boolean","title":"Spelling Confirmed","default":false},"registrant":{"anyOf":[{"$ref":"#/components/schemas/DomainRegistrant"},{"type":"null"}]},"context":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Context"}},"type":"object","required":["name","email","phone"],"title":"DomainReserveRequest","description":"Giữ chỗ tên miền (spec monadomain §12) — guest hay user đều gọi được.\n\nEmail + phone bắt buộc: vừa là kênh gửi claim-link, vừa là lead rmkt (§12b).\n``registrant`` tuỳ chọn: agent đã hỏi đủ chủ thể trong phiên thì gửi luôn,\nlúc claim khỏi hỏi lại."},"DomainResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"inet_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Inet Id"},"zone_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zone Id"},"status":{"type":"string","title":"Status"},"name_servers":{"items":{"type":"string"},"type":"array","title":"Name Servers"},"expiry":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"null"}],"title":"Expiry"},"app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"App Id"},"sandbox":{"type":"boolean","title":"Sandbox","default":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"},"source":{"type":"string","enum":["import","monahost"],"title":"Source","default":"import"},"registrar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrar"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","name","status"],"title":"DomainResponse"},"DomainSearchQuote":{"properties":{"domain":{"type":"string","title":"Domain"},"tld":{"type":"string","title":"Tld"},"popular":{"type":"boolean","title":"Popular"},"available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Available"},"confidence":{"type":"string","enum":["exact","heuristic","unknown"],"title":"Confidence"},"price_vnd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Vnd"},"is_vn":{"type":"boolean","title":"Is Vn"},"needs_verification":{"type":"boolean","title":"Needs Verification"},"status":{"type":"string","enum":["ban-ngay","bao-gia-khi-mua"],"title":"Status","default":"ban-ngay"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["domain","tld","popular","available","confidence","price_vnd","is_vn","needs_verification"],"title":"DomainSearchQuote"},"DomainSuggestion":{"properties":{"domain":{"type":"string","title":"Domain"},"tld":{"type":"string","title":"Tld"},"label_vi":{"type":"string","title":"Label Vi"},"group":{"type":"string","title":"Group"},"group_label":{"type":"string","title":"Group Label"},"available":{"type":"boolean","title":"Available"},"price_vnd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Vnd"},"renew_vnd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Renew Vnd"},"needs_verification":{"type":"boolean","title":"Needs Verification"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["domain","tld","label_vi","group","group_label","available","price_vnd","renew_vnd","needs_verification","reason"],"title":"DomainSuggestion"},"DomainTld":{"properties":{"tld":{"type":"string","title":"Tld"},"label_vi":{"type":"string","title":"Label Vi"},"group":{"type":"string","title":"Group"},"group_label":{"type":"string","title":"Group Label"},"type":{"type":"string","title":"Type"},"sources":{"items":{"type":"string"},"type":"array","title":"Sources"},"price_vnd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Price Vnd"},"needs_verification":{"type":"boolean","title":"Needs Verification"},"status":{"type":"string","enum":["ban-ngay","bao-gia-khi-mua"],"title":"Status"},"adult":{"type":"boolean","title":"Adult"},"renew_vnd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Renew Vnd"},"promo_vnd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Promo Vnd"},"registrar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registrar"},"popularity":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Popularity"}},"type":"object","required":["tld","label_vi","group","group_label","type","sources","price_vnd","needs_verification","status","adult"],"title":"DomainTld"},"DomainTldGroup":{"properties":{"slug":{"type":"string","title":"Slug"},"label":{"type":"string","title":"Label"},"count":{"type":"integer","title":"Count"},"sample":{"items":{"type":"string"},"type":"array","title":"Sample"},"min_price_vnd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Price Vnd"},"max_price_vnd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Price Vnd"}},"type":"object","required":["slug","label","count","sample"],"title":"DomainTldGroup"},"DomainVerifyStart":{"properties":{"id":{"type":"string","title":"Id"},"upload_url":{"type":"string","title":"Upload Url"},"instructions":{"type":"string","title":"Instructions"}},"type":"object","required":["id","upload_url","instructions"],"title":"DomainVerifyStart"},"DomainVerifyStatus":{"properties":{"id":{"type":"string","title":"Id"},"profile_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Status"},"contract":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contract"},"status":{"type":"string","title":"Status"},"needs":{"items":{"type":"string"},"type":"array","title":"Needs","default":[]},"inet_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inet Status"},"doc_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Doc Url"}},"type":"object","required":["id","profile_status","contract","status"],"title":"DomainVerifyStatus"},"DomainWebhookRequest":{"properties":{"url":{"type":"string","maxLength":2048,"minLength":8,"title":"Url"},"secret":{"type":"string","maxLength":256,"minLength":8,"title":"Secret"}},"type":"object","required":["url","secret"],"title":"DomainWebhookRequest"},"EmailRequest":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"EmailRequest"},"EngineNotAvailableResponse":{"properties":{"code":{"type":"string","const":"engine_not_available","title":"Code","default":"engine_not_available"},"message":{"type":"string","title":"Message"},"next_step":{"type":"string","title":"Next Step"}},"type":"object","required":["message","next_step"],"title":"EngineNotAvailableResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IpRangeCreateRequest":{"properties":{"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name"},"cidr":{"type":"string","title":"Cidr","examples":["192.168.0.100/29"]},"gateway":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Gateway"},"active":{"type":"boolean","title":"Active","default":true}},"type":"object","required":["name","cidr"],"title":"IpRangeCreateRequest"},"JobResponse":{"properties":{"id":{"type":"string","title":"Id"},"status":{"type":"string","enum":["awaiting_upload","queued","pending","running","done","succeeded","failed","retrying","cancelled"],"title":"Status"},"type":{"type":"string","title":"Type"},"result":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"attempts":{"type":"integer","title":"Attempts","default":0},"max_attempts":{"type":"integer","title":"Max Attempts","default":0},"stages":{"items":{"$ref":"#/components/schemas/JobStage"},"type":"array","title":"Stages"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"sandbox":{"type":"boolean","title":"Sandbox","default":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["id","status","type"],"title":"JobResponse"},"JobStage":{"properties":{"name":{"type":"string","title":"Name"},"status":{"type":"string","enum":["running","succeeded","failed"],"title":"Status"},"started_at":{"type":"string","format":"date-time","title":"Started At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"completed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Completed At"},"duration_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Duration Seconds"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"detail":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Detail"}},"type":"object","required":["name","status","started_at","updated_at"],"title":"JobStage"},"LxcCreateRequest":{"properties":{"app_name":{"type":"string","maxLength":80,"minLength":2,"title":"App Name"},"package_slug":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Package Slug"},"cpu":{"anyOf":[{"type":"integer","maximum":16.0,"minimum":1.0},{"type":"null"}],"title":"Cpu"},"ram_gb":{"anyOf":[{"type":"integer","maximum":64.0,"minimum":1.0},{"type":"null"}],"title":"Ram Gb"},"disk_gb":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":10.0},{"type":"null"}],"title":"Disk Gb"},"hostname":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Hostname"},"billing_mode":{"type":"string","enum":["hourly","monthly"],"title":"Billing Mode","default":"hourly"},"plan_code":{"anyOf":[{"type":"string","maxLength":64,"minLength":2},{"type":"null"}],"title":"Plan Code"},"period":{"type":"string","enum":["month","year"],"title":"Period","default":"month"}},"type":"object","required":["app_name"],"title":"LxcCreateRequest","description":"LXC create payload. Callers may either:\n  • pass `package_slug` (e.g. \"standard-2\") and let the API expand it\n    into cpu/ram_gb/disk_gb from the matching active package, or\n  • pass `cpu`, `ram_gb`, and `disk_gb` directly for a custom spec.\nExactly one of those two shapes is required; mixing them is a 422."},"LxcResizeRequest":{"properties":{"cpu":{"type":"integer","maximum":16.0,"minimum":1.0,"title":"Cpu"},"ram_gb":{"type":"integer","maximum":64.0,"minimum":1.0,"title":"Ram Gb"},"disk_gb":{"type":"integer","maximum":1000.0,"minimum":10.0,"title":"Disk Gb"}},"type":"object","required":["cpu","ram_gb","disk_gb"],"title":"LxcResizeRequest","description":"Resize an existing LXC. All three fields are required and must already\npass the standard bounds; the route additionally enforces that disk_gb\nis >= the service's current disk size (no shrink) and that at least one\nvalue differs from the current spec."},"MonaIDLinkVerify":{"properties":{"link_token":{"type":"string","maxLength":500,"minLength":20,"title":"Link Token"},"otp":{"type":"string","pattern":"^\\d{6}$","title":"Otp"}},"type":"object","required":["link_token","otp"],"title":"MonaIDLinkVerify"},"PackageUpsertRequest":{"properties":{"slug":{"type":"string","maxLength":64,"minLength":2,"title":"Slug"},"name":{"type":"string","maxLength":120,"minLength":2,"title":"Name"},"cpu":{"type":"integer","maximum":128.0,"minimum":1.0,"title":"Cpu"},"ram_gb":{"type":"integer","maximum":1024.0,"minimum":1.0,"title":"Ram Gb"},"disk_gb":{"type":"integer","maximum":32768.0,"minimum":5.0,"title":"Disk Gb"},"active":{"type":"boolean","title":"Active","default":true}},"type":"object","required":["slug","name","cpu","ram_gb","disk_gb"],"title":"PackageUpsertRequest"},"PasswordLoginRequest":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","maxLength":256,"minLength":8,"title":"Password"}},"type":"object","required":["email","password"],"title":"PasswordLoginRequest"},"PaymentWebhook":{"properties":{"amount":{"type":"integer","maximum":500000000.0,"exclusiveMinimum":0.0,"title":"Amount"},"description":{"type":"string","maxLength":255,"minLength":1,"title":"Description"},"transfer_date":{"type":"integer","title":"Transfer Date"},"transaction_code":{"anyOf":[{"type":"integer"},{"type":"string"}],"title":"Transaction Code"},"account_number":{"type":"string","title":"Account Number"},"bank_name":{"type":"string","title":"Bank Name"},"type":{"type":"string","title":"Type"}},"type":"object","required":["amount","description","transfer_date","transaction_code","account_number","bank_name","type"],"title":"PaymentWebhook"},"PriceSettingsRequest":{"properties":{"cpu_hourly_vnd":{"type":"integer","minimum":0.0,"title":"Cpu Hourly Vnd"},"ram_gb_hourly_vnd":{"type":"integer","minimum":0.0,"title":"Ram Gb Hourly Vnd"},"disk_gb_hourly_vnd":{"type":"integer","minimum":0.0,"title":"Disk Gb Hourly Vnd"}},"type":"object","required":["cpu_hourly_vnd","ram_gb_hourly_vnd","disk_gb_hourly_vnd"],"title":"PriceSettingsRequest"},"QuotaRequestApprove":{"properties":{"granted_max":{"anyOf":[{"type":"integer","maximum":1000.0,"minimum":1.0},{"type":"null"}],"title":"Granted Max"}},"type":"object","title":"QuotaRequestApprove","description":"Admin approval of a pending request.\n\n`granted_max` is optional — when omitted, the admin grants exactly\nwhat the user asked for. Supplying a value lets the admin grant\n*less* than requested (\"you asked for 50, I'm comfortable with 20\").\nGranting a value SMALLER than the user's current cap is allowed\n(admins can use the same flow to bring a cap down) but the SPA\nshould surface a confirm."},"QuotaRequestCreate":{"properties":{"kind":{"type":"string","enum":["lxc","database"],"title":"Kind"},"requested_max":{"type":"integer","maximum":1000.0,"minimum":1.0,"title":"Requested Max"},"justification":{"type":"string","maxLength":2000,"minLength":10,"title":"Justification"}},"type":"object","required":["kind","requested_max","justification"],"title":"QuotaRequestCreate","description":"A customer asks for their `kind` cap to be raised to `requested_max`.\n\nThe justification is mandatory — it gives the admin enough context to\ndecide without round-tripping to the customer over email, and it shows\nup verbatim in the admin GUI."},"QuotaRequestDeny":{"properties":{"reason":{"type":"string","maxLength":2000,"minLength":3,"title":"Reason"}},"type":"object","required":["reason"],"title":"QuotaRequestDeny"},"ReferralClaimRequest":{"properties":{"code":{"type":"string","maxLength":32,"minLength":2,"title":"Code"}},"type":"object","required":["code"],"title":"ReferralClaimRequest"},"RegisterVerifyRequest":{"properties":{"email":{"type":"string","title":"Email"},"otp":{"type":"string","maxLength":6,"minLength":6,"title":"Otp"},"password":{"type":"string","maxLength":256,"minLength":10,"title":"Password"},"referral_code":{"anyOf":[{"type":"string","maxLength":32},{"type":"null"}],"title":"Referral Code"}},"type":"object","required":["email","otp","password"],"title":"RegisterVerifyRequest"},"ResetPasswordRequest":{"properties":{"email":{"type":"string","title":"Email"},"otp":{"type":"string","maxLength":6,"minLength":6,"title":"Otp"},"password":{"type":"string","maxLength":256,"minLength":10,"title":"Password"}},"type":"object","required":["email","otp","password"],"title":"ResetPasswordRequest"},"ServiceResponse":{"properties":{"id":{"type":"string","title":"Id"},"kind":{"type":"string","enum":["lxc","database"],"title":"Kind"},"status":{"type":"string","enum":["queued","provisioning","active","suspended","destroyed","failed"],"title":"Status"},"name":{"type":"string","title":"Name"},"ip_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ip Address"},"package_slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Package Slug"},"package_snapshot":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Package Snapshot"},"cpu":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Cpu"},"ram_gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ram Gb"},"disk_gb":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Disk Gb"},"hourly_rate_vnd":{"type":"integer","title":"Hourly Rate Vnd","default":0},"billing_mode":{"type":"string","enum":["hourly","monthly"],"title":"Billing Mode","default":"hourly"},"plan_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Code"},"pending_hourly_rate_vnd":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pending Hourly Rate Vnd"},"power_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Power State"},"engine":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Engine"},"proxmox":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Proxmox"},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"},"destroyed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Destroyed At"},"next_bill_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Next Bill At"},"credentials":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Credentials"},"databases":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Databases"},"sandbox":{"type":"boolean","title":"Sandbox","default":false},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["id","kind","status","name"],"title":"ServiceResponse"},"SubscriptionUpdateRequest":{"properties":{"plan_code":{"anyOf":[{"type":"string","maxLength":64,"minLength":2},{"type":"null"}],"title":"Plan Code"},"period":{"anyOf":[{"type":"string","enum":["month","year"]},{"type":"null"}],"title":"Period"},"auto_renew":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Renew"},"cancel_action":{"anyOf":[{"type":"string","enum":["hourly","stop"]},{"type":"null"}],"title":"Cancel Action"}},"type":"object","title":"SubscriptionUpdateRequest"},"UserDeleteRequest":{"properties":{"confirm_email":{"type":"string","maxLength":320,"minLength":3,"title":"Confirm Email"},"reason":{"type":"string","maxLength":2000,"minLength":3,"title":"Reason"}},"type":"object","required":["confirm_email","reason"],"title":"UserDeleteRequest","description":"Body of `POST /api/admin/users/{id}/delete` — the irreversible\n\"close the account, free the resources, scrub the PII\" action.\n\n`confirm_email` MUST match the target user's current email exactly.\nThis is the type-the-name-of-the-repo destructive-confirm pattern —\na guardrail against fat-finger clicks on the admin UI. The handler\nre-checks server-side so we're not relying on the SPA enforcing it.\n\n`reason` is mandatory and goes verbatim into the `deletion_events`\naudit row — once the user row is anonymized, this is the only\ndurable trace of WHY they were deleted."},"UserSuspendRequest":{"properties":{"reason":{"type":"string","maxLength":2000,"minLength":3,"title":"Reason"}},"type":"object","required":["reason"],"title":"UserSuspendRequest","description":"Body of `POST /api/admin/users/{id}/suspend`.\n\n`reason` is **mandatory** and surfaced verbatim in:\n  - the audit row (`suspension_events.reason`)\n  - the 403 detail the user sees when they next try to log in\n  - the SPA's admin-clients page \"suspended because: …\" pill\n\nKeep it human-readable — it's not an error code."},"UserUnsuspendRequest":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Reason"}},"type":"object","title":"UserUnsuspendRequest","description":"Body of `POST /api/admin/users/{id}/unsuspend`.\n\n`reason` is optional — sometimes an admin un-suspends because they\nrealised they suspended the wrong account, sometimes because the\ncustomer paid their overdue invoice. We just want it noted somewhere."},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VietQRInvoiceResponse":{"properties":{"payment_id":{"type":"string","title":"Payment Id"},"amount":{"type":"integer","title":"Amount"},"description":{"type":"string","title":"Description"},"qr_url":{"type":"string","title":"Qr Url"},"qr_data_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Qr Data Url"},"status":{"type":"string","title":"Status"}},"type":"object","required":["payment_id","amount","description","qr_url","status"],"title":"VietQRInvoiceResponse"}},"securitySchemes":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"MONA Cloud token","description":"Use vc_session_* for account endpoints or vc_live_* for automation endpoints."},"ApiTokenHeader":{"type":"apiKey","in":"header","name":"X-API-Token","description":"Alternative header for vc_live_* automation tokens."},"PaymentWebhookKey":{"type":"apiKey","in":"header","name":"x-api-key","description":"Shared secret for payment provider webhook delivery."}}},"servers":[{"url":"https://api.monacloud.vn"},{"url":"https://api.vibecloud.vn"}],"tags":[{"name":"auth","description":"Đăng nhập, token và tài khoản."},{"name":"lxc","description":"Tạo và quản lý VPS LXC."},{"name":"databases","description":"Tạo và quản lý database."},{"name":"apps","description":"Deploy app từ git hoặc thư mục local và quản lý app host / Deploy git or local source and manage Dokploy hosts."},{"name":"jobs","description":"Theo dõi tác vụ bất đồng bộ."},{"name":"services","description":"Dịch vụ và dữ liệu vận hành."},{"name":"prices","description":"Bảng giá và gói tài nguyên."},{"name":"billing","description":"Thanh toán, số dư và hạn mức."},{"name":"sandbox","description":"Thử API miễn phí, không tạo hạ tầng thật."}]}