Spaceship MCP আপনার AI assistant-কে (যেমন Claude) আপনার Spaceship অ্যাকাউন্টের সঙ্গে সংযুক্ত করে। এর মাধ্যমে assistant ডোমেইন পরীক্ষা ও নিবন্ধন করতে পারে, আপনার ব্রাউজারে ডোমেইন কেনার জন্য পেমেন্ট লিংক পেতে পারে, ডোমেইন কনট্যাক্ট পরিচালনা করতে পারে, এবং আপনার পক্ষ থেকে DNS রেকর্ড পড়তে বা সম্পাদনা করতে পারে — আপনি শুধু সাধারণ ভাষায় বলবেন, আর assistant সঠিক টুলগুলো কল করবে।
আপনার একটি Spaceship অ্যাকাউন্ট প্রয়োজন। Spaceship MCP পাওয়া যায় https://mcp.spaceship.com/mcp-এ।
আপনি কীভাবে সংযোগ করবেন তা আপনার AI assistant-এর উপর নির্ভর করে:
Claude (web and desktop) — Settings খুলুন, Connectors বেছে নিন, একটি custom connector যোগ করুন, এবং এটিকে https://mcp.spaceship.com/mcp-এ নির্দেশ করুন। Anthropic-এর Claude বর্তমানে সেই client যেটির সঙ্গে Spaceship MCP কাজ করে বলে আমরা যাচাই করেছি।
অন্যান্য MCP client — একটি remote MCP server যোগ করুন এবং এটিকে https://mcp.spaceship.com/mcp-এ নির্দেশ করুন। অন্যান্য client কাজ করতে পারে, তবে আমরা এখনো সেগুলো যাচাই করিনি।
আপনি সংযুক্ত হলে, আপনাকে Spaceship-এ sign in করতে এবং assistant-কে আপনার account-এ access দিতে বলা হবে। assistant কোন কোন tool ব্যবহার করতে পারবে তা নির্ভর করে আপনি যে access অনুমোদন করেন তার ওপর — যদি access না দেওয়ায় কোনো tool প্রত্যাখ্যাত হয়, পুনরায় সংযুক্ত করুন এবং তার প্রয়োজনীয় access অনুমোদন করুন।
Spaceship MCP এবং এর মাধ্যমে আপনি যা কিছু কিনবেন, তার ক্ষেত্রে প্রযোজ্য চুক্তি ও নীতিমালা:
টুল: contacts_save
এটি যা করে: কনট্যাক্টের বিস্তারিত সংরক্ষণ করে এবং একটি contact ID দেয়
টুল: contacts_get
এটি যা করে: ID দিয়ে সংরক্ষিত একটি কনট্যাক্ট পড়ে
টুল: contacts_list
এটি যা করে: একটি খুঁজে পেতে এবং পুনরায় ব্যবহার করতে সব সংরক্ষিত কনট্যাক্ট তালিকাভুক্ত করে
টুল: domains_list
এটি যা করে: আপনার ডোমেইনগুলোর তালিকা দেখায়, অথবা একটি ডোমেইন খুঁজে দেখে
টুল: domains_check_availability
এটি যা করে: ডোমেইনগুলো নিবন্ধনের জন্য উপলভ্য কি না তা পরীক্ষা করে
টুল: domain_register
এটি কী করে: একটি ডোমেইন নিবন্ধন (কেনা) করে — অর্থ ব্যয় হয়
টুল: domain_purchase_link
এটি কী করে: Spaceship-এর পেমেন্ট পেজে ডোমেইন কেনার জন্য পেমেন্ট লিংক আনে — এই কল দ্বারা কিছুই চার্জ হয় না
টুল: domain_set_contacts
এটি কী করে: আপনার মালিকানাধীন একটি ডোমেইনে কনট্যাক্ট বরাদ্দ করে
টুল: domain_set_nameservers
এটি কী করে: একটি ডোমেইনকে বেসিক বা কাস্টম নেমসার্ভারে পরিবর্তন করে
টুল: dns_records_get
এটি কী করে: একটি ডোমেইনের DNS রেকর্ড পড়ে
টুল: dns_records_save
এটি কী করে: DNS রেকর্ড যোগ করে বা তাদের TTL আপডেট করে
টুল: dns_records_delete
এটি যা করে: DNS রেকর্ড মুছুন
টুল: async_operation_get
এটি যা করে: দীর্ঘসময় চলা একটি অপারেশনের অবস্থা পরীক্ষা করুন
যেখানেই একটি contact প্রয়োজন হয় (domain_register, domain_purchase_link, domain_set_contacts), প্রতিটি role একটি contactId string নেয় — কখনোই inline contact details নয়। প্রথমে contacts_save দিয়ে contact সংরক্ষণ করুন (যা তার contactId ফেরত দেয়), তারপর যেখানে contact গ্রহণ করা হয় সেখানে সেই id দিন। কোনো inline auto-save নেই; একটি role পূর্ণ contact object নিতে পারে না। আপনি contactId পুনরায় ব্যবহার করতে পারেন — contacts_list result থেকে পাওয়া বা domains_list result-এ দেখা।
একটি contactId হলো 27–32টি alphanumeric character-এর একটি string। যেখানে contact গ্রহণ করা হয় সেখানে শুধু এটি আবার পাঠিয়ে দিন।
বেশ কয়েকটি টুল একসঙ্গে ব্যবহারের জন্য তৈরি: একটির output পরেরটির input হয়ে যায়।
contacts_save — registrant, admin, tech, এবং billing contact সংরক্ষণ করুন (যদি তাদের id আগে থেকে আপনার কাছে না থাকে) এবং প্রতিটির জন্য ফেরত পাওয়া contactId রেখে দিন। নিবন্ধনের আগে contact-গুলো বিদ্যমান থাকতে হবে।
domains_check_availability — আপনি যে নাম(গুলো) চান তা পরীক্ষা করুন। শুধু তখনই এগিয়ে যান যখন resultavailable হয়। প্রতিটি available নামের সঙ্গে এটি নিবন্ধনের USD price থাকে (standard এবং premium উভয়ই), অথবা নির্ধারণ করা না গেলে priceUnavailableReason, সঙ্গে minRegisterPeriodInYears এবং maxRegisterPeriodInYears — TLD যে মেয়াদ অনুমোদন করে। মনে রাখবেন, priceprice.pricedYears বছরের খরচ কভার করে, যা TLD-এর অনুমোদিত সর্বনিম্ন মেয়াদ এবং সবসময় 1 নাও হতে পারে।
domain_register (preview) — confirmationToken unset রেখে call করুন, যাতে status: confirmation_required, একটি নতুন confirmationToken, এবং যে price চার্জ করা হবে তা পাওয়া যায়। কিছুই বিল করা হয় না। paymentMethodId বাদ দিন যাতে টুলটি account-এর default payment method প্রস্তাব করতে পারে (অথবা ব্যবহারযোগ্য default না থাকলে funds) — তখন response-এ paymentMethods-ও থাকবে যাতে অন্যটি বেছে নেওয়া যায়; নির্দিষ্ট কোনো id-কে paymentMethodId হিসেবে দিন যাতে তার বদলে সেই method-এ charge হয়। টুলের response text একটি পূর্ণ confirmation — term, price breakdown, auto-renew, WHOIS privacy, payment source, এবং registrant/admin/tech/billing contacts — এটি ব্যবহারকারীকে হুবহু দেখান। years-কে ধাপ 2-এর minRegisterPeriodInYears এবং maxRegisterPeriodInYears-এর মধ্যে বেছে নিন — সীমার বাইরে মান সরাসরি প্রত্যাখ্যাত হয়। প্রতিটি contact role ধাপ 1-এ সংরক্ষিত contactId হিসেবে দিন।
domain_register (accept/decline) — ব্যবহারকারী সম্মত হওয়ার পর, ঠিক একই argument-এর সঙ্গে সেই confirmationToken এবং confirmationResponse: "accept" দিয়ে আবার call করুন। এতে নির্ধারিত payment method-এ charge হয় এবং এটি অপরিবর্তনীয়। এটি সঙ্গে সঙ্গে status: pending এবং একটি operationId ফেরত দেয় — নিবন্ধনটি background-এ সম্পন্ন হয়। বাতিল করতে চাইলে, একই confirmationToken এবং confirmationResponse: "decline" দিয়ে আবার call করুন — কিছুই বিল করা হয় না। token অল্প সময় পর মেয়াদোত্তীর্ণ হয় এবং এটি যে exact arguments, price, এবং payment method-এর জন্য ইস্যু করা হয়েছিল তার সঙ্গে বাঁধা থাকে; এটি অনুপস্থিত, মেয়াদোত্তীর্ণ, বা আর মেলে না হলে, callটি error-এর বদলে একেবারে নতুন confirmation ফেরত দেয় — কখনোই charge নয়। যদি যেকোনো call-এ price নির্ধারণ করা না যায়, টুলটি status: price_unavailable ফেরত দেয় এবং কিছুই charge হয় না। যদি কোনো payment method ব্যবহার করা না যায়, এটি account-এর সংরক্ষিত method-সহ status: payment_unavailable ফেরত দেয় এবং কিছুই charge হয় না।
async_operation_get — অগ্রগতি পরীক্ষা করতে ধাপ 4-এর operationId দিন। statussuccess বা failed না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।
contacts_save ──▶ domains_check_availability ──▶ domain_register ──▶ domain_register ──▶ async_operation_get(contactId ids) (available? + price + (token unset: (token + (pending →min/maxRegisterPeriod) confirmation, accept: operationId, success/failed)confirmationToken, pending)no charge)
যখন আপনি payment link চান, যখন chat-এ সরাসরি কেনা ব্যর্থ হয়েছে, অথবা যখন chat purchase ব্যবহার করতে পারে না এমন payment method দিয়ে পরিশোধ করতে চান, তখন domain_register-এর বদলে এটি ব্যবহার করুন।
domains_check_availability — আপনি যে নাম(গুলো) চান তা পরীক্ষা করুন। শুধু তখনই এগিয়ে যান যখন resultavailable হয়, এবং বৈধ years বেছে নিতে minRegisterPeriodInYears/maxRegisterPeriodInYears পড়ুন।
domain_purchase_link — ডোমেইনগুলোকে items হিসেবে এবং সেগুলোর জন্য ব্যবহৃত contact-গুলোকে contacts হিসেবে দিন — contacts_list থেকে contact ID, অথবা আগে contacts_save দিয়ে নতুন তথ্য সংরক্ষণ করুন — উপরের স্তরে shared years এবং autoRenew সহ, এবং যেখানে ভিন্ন সেখানে per-domain override দিন। এই call কোনো charge করে না। এটি সর্বোচ্চ 10টি ডোমেইনের প্রতিটি group-এর জন্য একটি link ফেরত দেয়, প্রতিটির জন্য একটি estimated price-সহ; আপনি প্রতিটি link খুলে Spaceship-এর payment page-এ পরিশোধ করেন, যেখানে আপনি payment method বেছে নেন (আপনার account funds থাকলে সেগুলো আগে থেকেই নির্বাচিত থাকে)। এভাবে WHOIS privacy সেট করা যায় না।
domains_list — আপনি পরিশোধ করার পর, ডোমেইনটি নিবন্ধিত হয়েছে কি না নিশ্চিত করতে এর জন্য call করুন। link-কে কেনার প্রমাণ হিসেবে বিবেচনা করবেন না।
যে কেনাকাটা ইতিমধ্যেই সম্পন্ন হয়ে থাকতে পারে, তার জন্য দ্বিতীয় link চাইবেন না। যদি কোনো domain_register প্রচেষ্টায় charge হয়ে থাকতে পারে, অথবা আপনি আগের কোনো link অনুসরণ করে থাকেন, তাহলে আগে domains_list call করুন এবং সত্যিই নিবন্ধিত নয় এমন ডোমেইনের জন্যই শুধু নতুন link চান। link-এর মেয়াদ শেষ হয় না এবং পুনরায় ব্যবহার করা যায়, তাই এগুলো অন্য কারও সঙ্গে শেয়ার করবেন না।
domains_check_availability ──▶ domain_purchase_link ──▶ (domains_list to confirm)(available? + price + (links, up to 10 domains after you've paidmin/maxRegisterPeriod) each; no charge fromthis call)
domain_set_contacts — contactId দ্বারা ডোমেইনে contact assign করুন (প্রয়োজনে আগে contacts_save দিয়ে সেগুলো সংরক্ষণ করুন)। এটি সঙ্গে সঙ্গে সম্পন্ন হয় এবং একটি verificationStatus ফেরত দেয়: verification মানে registrant-কে পরিবর্তনটি পুরোপুরি কার্যকর হওয়ার আগে তাদের email address নিশ্চিত করতে হবে (তাদের কাছে একটি email পাঠানো হয়), success মানে এটি ইতিমধ্যেই নিশ্চিত, এবং null মানে ওই ডোমেইনের জন্য কোনো confirmation প্রয়োজন নেই।
domains_list — ডোমেইনটি খুঁজুন এবং এর বর্তমান nameservers ({ provider, hosts }) দেখুন।
domain_set_nameservers — এটিকে Spaceship-এর default nameserver-এ বদলাতে provider: "basic" ব্যবহার করুন (কোনো hosts নয়), অথবা provider: "custom" এবং 2–12টি hosts-এর তালিকা দিয়ে আপনার নিজেরটিতে নির্দেশ করুন। এটি ফলস্বরূপ { provider, hosts } ফেরত দেয়, এবং পরবর্তী domains_list-এ পরিবর্তনটি প্রতিফলিত হয়। একটি ডোমেইন ইতিমধ্যেই যে অবস্থায় আছে, সেই অবস্থাই আবার প্রয়োগ করলে no-op-এর বদলে validation error ফেরত আসে — এটিকে প্রত্যাশিত হিসেবে বিবেচনা করুন, পুনরায় চেষ্টা ব্যর্থ হয়েছে বলে নয়।
domains_list — আপনি যে ডোমেইনটি পরিচালনা করতে চান তা খুঁজুন (অথবা নাম জানা থাকলে সরাসরি সেটি দিন)।
dns_records_get — ডোমেইনের বর্তমান রেকর্ডগুলো পড়ুন।
dns_records_save বা dns_records_delete — রেকর্ড যোগ, আপডেট, বা অপসারণ করুন। dns_records_get দ্বারা ফেরত আসা রেকর্ডগুলোর shape save এবং delete tool যে shape গ্রহণ করে তারই মতো (delete শুধু ttl বাদ দেয়), তাই assistant পড়ে, সমন্বয় করে, আবার লিখে দিতে পারে। TXT রেকর্ড ছাড়া matching case-insensitive, আর TXT রেকর্ড case-sensitive।
domains_list — sorting সহ আপনার সব ডোমেইনের মধ্যে page করুন, অথবা নাম দিয়ে একটি একক ডোমেইন আনুন। প্রতিটি ডোমেইনে এর expiration date, auto-renew setting, status, nameservers, privacy protection, এবং assigned contact ID অন্তর্ভুক্ত থাকে।
contacts_list — duplicate তৈরি করার বদলে বিদ্যমান একটি contact খুঁজে পেতে এবং পুনরায় ব্যবহার করতে (তার contact ID দ্বারা) আপনার account-এ সংরক্ষিত সব contact-এর মধ্যে page করুন।
contacts_get — কোনো ডোমেইনে বা contacts_list result-এ দেখা যেকোনো contact ID-এর পেছনের বিবরণ দেখুন।
প্রতিটি tool তার result structured JSON হিসেবে ফেরত দেয়। দীর্ঘসময় চলা operation (বর্তমানে শুধু domain_register) async_operation_get দিয়ে poll করার জন্য একটি operation reference ফেরত দেয়; অন্য সব tool সঙ্গে সঙ্গে সম্পন্ন হয়।
Contacts হলো ডোমেইন নিবন্ধনের সঙ্গে যুক্ত ব্যক্তি বা প্রতিষ্ঠান (registrant, admin, tech, billing)। একটি contact-কে সর্বত্র তার contact ID দ্বারা রেফারেন্স করা হয় — একটি opaque string।
contacts_save — Contact সংরক্ষণ করুনContact-এর বিবরণ সংরক্ষণ করে এবং তৈরি হওয়া contact ID ফেরত দেয়। কিছু field-এর validation (যেমন stateProvince এবং postalCode) নির্বাচিত country-এর ওপর নির্ভর করে।
প্যারামিটার: firstName
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: String, 1–64 অক্ষর। hyphen এবং apostrophe থাকতে পারে।
প্যারামিটার: lastName
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: String, 1–64 অক্ষর। hyphen এবং apostrophe থাকতে পারে।
প্যারামিটার: email
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: বৈধ email address, সর্বোচ্চ 254 অক্ষর।
প্যারামিটার: address1
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: Address line 1। String, 1–128 অক্ষর।
প্যারামিটার: city
প্রয়োজনীয়: হ্যাঁ
ধরন & সীমাবদ্ধতা: স্ট্রিং, ১–৬৪ অক্ষর।
প্যারামিটার: country
প্রয়োজনীয়: হ্যাঁ
ধরন & সীমাবদ্ধতা: দুই-অক্ষরের দেশের কোড (ISO 3166-1 alpha-2), যেমন US।
প্যারামিটার: phone
প্রয়োজনীয়: হ্যাঁ
ধরন & সীমাবদ্ধতা: আন্তর্জাতিক ফরম্যাট +CountryCode.Number, যেমন +1.2025551234। সর্বোচ্চ ৩২ অক্ষর।
প্যারামিটার: organization
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: প্রতিষ্ঠান/কোম্পানির নাম। 1–128 অক্ষর।
প্যারামিটার: address2
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: ঠিকানার লাইন 2। 1–128 অক্ষর।
প্যারামিটার: stateProvince
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: রাজ্য/প্রদেশের নাম, 1–64 অক্ষর। দেশের ওপর নির্ভর করে এটি প্রয়োজন হতে পারে।
প্যারামিটার: postalCode
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: 1–16 অক্ষর। দেশের ওপর নির্ভর করে এটি প্রয়োজন হতে পারে।
প্যারামিটার: phoneExt
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: ফোন এক্সটেনশন, 1–16 অক্ষর।
প্যারামিটার: fax
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: ফ্যাক্স নম্বর, একই +CountryCode.Number ফরম্যাট, সর্বোচ্চ 32 অক্ষর।
প্যারামিটার: faxExt
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: ফ্যাক্স এক্সটেনশন, 1–16 অক্ষর।
প্যারামিটার: taxNumber
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: ট্যাক্স নম্বর, 1–32 অক্ষর।
রিটার্ন
{ "contactId": "..." }
contactId (27–32 অ্যালফানিউমেরিক অক্ষর) হলো যা আপনি domain_register, domain_purchase_link, domain_set_contacts, এবং contacts_get-এ পাঠান।
contacts_get — কনট্যাক্ট নিনএর contact ID দিয়ে সংরক্ষিত একটি কনট্যাক্টের বিস্তারিত পড়ে। Contact ID আসে contacts_save, contacts_list, অথবা contacts ফিল্ড থেকে, যা domains_list ফলাফলে থাকে।
প্যারামিটার: contactId
প্রয়োজনীয়: হ্যাঁ
ধরন & সীমাবদ্ধতা: Contact ID, 27–32 অ্যালফানিউমেরিক অক্ষর।
রিটার্ন — { contact } এতে রয়েছে:
ফিল্ড: firstName, lastName, email, address1, city, country, phone, postalCode
ধরন: স্ট্রিং
ফিল্ড: organization, address2, stateProvince, phoneExt, fax, faxExt, taxNumber
ধরন: স্ট্রিং বা null
contacts_list — কনট্যাক্ট তালিকাআপনার অ্যাকাউন্টে সংরক্ষিত সব কনট্যাক্টের তালিকা দেখায়, যাতে আপনি ডুপ্লিকেট তৈরি করা বা আপনার ডোমেইনগুলো ঘেঁটে দেখার বদলে বিদ্যমান একটি কনট্যাক্ট (তার contact ID দিয়ে) খুঁজে নিয়ে পুনরায় ব্যবহার করতে পারেন। তালিকাটি পেজিনেটেড এবং sortable, এবং domains_list-এর সঙ্গে সামঞ্জস্যপূর্ণ।
প্যারামিটার: take
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: প্রতি পৃষ্ঠায় আইটেম, 1–100। ডিফল্ট 10।
প্যারামিটার: skip
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: এড়িয়ে যাওয়ার আইটেম, 0 বা তার বেশি। ডিফল্ট 0।
প্যারামিটার: orderBy
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: সর্বোচ্চ 8টি sort key: name, email, organization; descending-এর জন্য আগে - দিন (যেমন -name)।
রিটার্ন — { items, total } যেখানে total হলো অ্যাকাউন্টের অনন্য কনট্যাক্টের সংখ্যা (contact ID অনুযায়ী deduplicated, page size নয়), এবং প্রতিটি item-এ follow-up call ছাড়াই কনট্যাক্টগুলো আলাদা করে চেনার মতো যথেষ্ট তথ্য থাকে। যদি একই contact ID-এর জন্য অ্যাকাউন্টে duplicate entry থাকে, সেগুলো একটিতে মিলিয়ে দেওয়া হয়, তাই total raw server-side row-এর বদলে distinct contact গণনা করে:
ফিল্ড: contactId
ধরন: স্ট্রিং (27–32 অ্যালফানিউমেরিক)। contacts_get, domain_register, domain_purchase_link, অথবা domain_set_contacts-এ পাঠান।
ফিল্ড: name
ধরন: স্ট্রিং — কনট্যাক্টের নাম।
ফিল্ড: email
ধরন: স্ট্রিং বা null যখন কনট্যাক্টের কোনো email রেকর্ডে নেই।
ফিল্ড: organization
ধরন: স্ট্রিং বা null যখন কনট্যাক্টের কোনো organization রেকর্ডে নেই।
{"items": [{ "contactId": "1anq5bsl9haBy21rOV9aeDWrARBsV", "name": "Ada Lovelace", "email": "ada@example.com", "organization": "Analytical Engines" }],"total": 1}
ডোমেইন নামের ইনপুট (domain/domainName) Unicode (IDN) বা ASCII (A-label) গ্রহণ করে — যেকোনো ক্ষেত্রেই, টুলটি ব্যবহারের আগে নামটিকে স্বয়ংক্রিয়ভাবে punycode-এ normalize করে। domains_check_availability এবং domain_register-এর জন্য অতিরিক্তভাবে এমন একটি TLD দরকার যা Spaceship নিবন্ধনের জন্য সমর্থন করে: যে ডোমেইনের TLD সমর্থিত নয়, সেটিকে পরীক্ষা করা বা চার্জ করার বদলে unavailable হিসেবে ধরা হয়। অন্য ডোমেইন টুলগুলো (domains_list, domain_set_contacts, domain_set_nameservers) এবং DNS টুলগুলো শুধু নাম normalize করে এবং TLD support-এর ভিত্তিতে কখনো reject করে না।
domains_list — ডোমেইন তালিকাআপনার ডোমেইনগুলোর একটি paginated তালিকা আনে। এর বদলে নাম দিয়ে একটি একক ডোমেইন আনতে domain পাঠান (তখন pagination এবং ordering উপেক্ষা করা হয়, এবং যদি সেগুলো দেওয়া হয়ে থাকে তবে ফলে একটি note থাকবে যা তা জানায়)।
প্যারামিটার: domain
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: একটি একক ডোমেইন আনার জন্য সম্পূর্ণ যোগ্যতাসম্পন্ন ডোমেইন নাম। Unicode (IDN) বা ASCII (A-label) গ্রহণ করে — স্বয়ংক্রিয়ভাবে punycode-এ normalize হয়।
প্যারামিটার: take
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: প্রতি পৃষ্ঠায় আইটেম, 1–100। ডিফল্ট 10।
প্যারামিটার: skip
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: এড়িয়ে যাওয়ার আইটেম, 0 বা তার বেশি। ডিফল্ট 0।
প্যারামিটার: orderBy
প্রয়োজনীয়: না
ধরন & সীমাবদ্ধতা: সর্বোচ্চ 8টি sort key: name, unicodeName, registrationDate, expirationDate; descending-এর জন্য আগে - দিন (যেমন -expirationDate)।
রিটার্ন — { items, total } যেখানে প্রতিটি item একটি ডোমেইনকে বর্ণনা করে:
ফিল্ড: name / unicodeName
অর্থ: ASCII এবং Unicode রূপে ডোমেইন নাম।
ফিল্ড: isPremium
অর্থ: ডোমেইনটি premium নাম কি না।
ফিল্ড: autoRenew
অর্থ: auto-renew সক্রিয় আছে কি না।
ফিল্ড: registrationDate / expirationDate
অর্থ: নিবন্ধন এবং মেয়াদোত্তীর্ণ হওয়ার timestamp।
ফিল্ড: lifecycleStatus
অর্থ: creating, registered, grace1, grace2, অথবা redemption।
ফিল্ড: verificationStatus
অর্থ: verification, success, failed, অথবা null যখন প্রযোজ্য নয়।
ফিল্ড: eppStatuses
অর্থ: রেজিস্ট্রি status code (যেমন transfer lock)।
ফিল্ড: suspensions
অর্থ: সক্রিয় suspension, প্রতিটিতে একটি reasonCode থাকে।
ফিল্ড: privacyProtection
অর্থ: { level: "public" | "high", contactForm: boolean }।
ফিল্ড: nameservers
অর্থ: { provider: "basic" | "custom", hosts: [...] }।
ফিল্ড: contacts
অর্থ: Contact ID: registrant, সঙ্গে admin/tech/billing (হতে পারে null) এবং attributes (extended-attribute contact ID-এর একটি তালিকা, অথবা null)। contacts_get দিয়ে পড়া যায়।
Spaceship MCP উপরের প্রতিটি ফিল্ড পূরণ করে — এর মধ্যে রয়েছে contacts, eppStatuses, suspensions, verificationStatus, nameservers, একটি বাস্তব autoRenew, এবং যেখানে ডোমেইনের একটি আছে সেখানে একটি স্বতন্ত্র unicodeName — বহু-item তালিকা এবং একক-ডোমেইন fetch উভয়ের জন্য।
domains_check_availability — ডোমেইন প্রাপ্যতা পরীক্ষাএক বা একাধিক ডোমেইন নাম নিবন্ধনের জন্য উপলভ্য কি না তা পরীক্ষা করে। একটি নামের জন্য single-domain endpoint এবং একাধিকের জন্য bulk endpoint ব্যবহার করে। যে ডোমেইনের TLD নিবন্ধনের জন্য সমর্থিত নয়, সেটিকে availability check-এ মোটেই পাঠানো হয় না — সেটি সঙ্গে সঙ্গে tldNotSupported হিসেবে ফেরত আসে।
প্যারামিটার: domains
প্রয়োজনীয়: হ্যাঁ
ধরন & সীমাবদ্ধতা: 1–20টি সম্পূর্ণ যোগ্যতাসম্পন্ন ডোমেইন নাম। প্রতিটি Unicode (IDN) বা ASCII (A-label) গ্রহণ করে — স্বয়ংক্রিয়ভাবে punycode-এ normalize হয়।
রিটার্ন — { results }, অনুরোধ করা প্রতিটি নামের জন্য একটি entry:
ফিল্ড: domain
অর্থ: পরীক্ষা করা নাম।
ফিল্ড: result
অর্থ: available, taken, invalidDomainName, tldNotSupported, অথবা unexpectedError।
ফিল্ড: premiumPricing
অর্থ: premium নামের জন্য: { operation, price, currency }-এর তালিকা, যেখানে operation হলো register, transfer, renew, অথবা restore। সাধারণ নামের জন্য খালি থাকে।
ফিল্ড: price
অর্থ: available নামগুলোর জন্য (standard এবং premium): TLD যে সর্বনিম্ন মেয়াদ অনুমোদন করে সেই মেয়াদের জন্য ডোমেইন নিবন্ধনের USD মূল্য — { amount, currency: "USD", pricedYears?, pricePerYear?, icannFee?, isPremium }। amount হলো পুরো মেয়াদের জন্য পরিশোধযোগ্য মোট; pricedYears জানায় এটি কত বছরের জন্য প্রযোজ্য। কোনো pre-discount বা "was" price দেওয়া হয় না। icannFee হলো ICANN fee (USD), যা ইতিমধ্যেই অন্তর্ভুক্ত আছে amount-এ, breakdown ব্যাখ্যা করার জন্য এটি আলাদাভাবে ফেরত দেওয়া হয়; এটি শুধু তখনই দেখা যায় যখন TLD-তে fee থাকে।
ফিল্ড: pricePerYear
অর্থ: price-এর ভিতরে: amount কে pricedYears দিয়ে ভাগ করা, যাতে তুলনার জন্য সবসময় একটি বার্ষিক মান পাওয়া যায়। যখন pricedYears 1 হয়, এটি প্রকৃত এক বছরের মূল্য; এর বেশি হলে এটি মেয়াদের প্রতি বছরের গড়, এমন কোনো মেয়াদ নয় যা আপনি কিনতে পারবেন।
ফিল্ড: minRegisterPeriodInYears / maxRegisterPeriodInYears
অর্থ: available নামগুলোর জন্য: সেই TLD বাস্তবে যে সর্বনিম্ন ও সর্বোচ্চ নিবন্ধন মেয়াদ অনুমোদন করে, দুটি সাধারণ সংখ্যা হিসেবে। years-এর জন্য বৈধ মান বেছে নিতে এগুলো ব্যবহার করুন domain_register-এ। অনুমোদিত মেয়াদ নির্ধারণ করা না গেলে দুটিই বাদ থাকে।
ফিল্ড: priceUnavailableReason
অর্থ: price-এর বদলে উপস্থিত থাকে যখন available নামের জন্য মূল্য নির্ধারণ করা যায়নি। চেক নিজে তবুও সফল হয়।
শুধু available নামগুলোরই মূল্য দেওয়া হয়; taken/invalid ফলাফলে price বা priceUnavailableReason কোনোটিই থাকে না।
বেশিরভাগ TLD এক বছর অনুমোদন করে, কিন্তু কিছু করে না।.ai, উদাহরণস্বরূপ, ন্যূনতম দুই বছর। সেসব ক্ষেত্রে, price.amount হলো ন্যূনতম মেয়াদের মোট মূল্য — এমন এক বছরের মূল্য নয় যার ওপর আপনি কাজ করতে পারেন — এবং price.pricedYears তা জানায়:
{"domain": "example.ai","result": "available","premiumPricing": [],"price": { "amount": 159.96, "currency": "USD", "pricedYears": 2, "pricePerYear": 79.98, "isPremium": false },"minRegisterPeriodInYears": 2,"maxRegisterPeriodInYears": 10}
pricePerYear এখানে উপস্থিত — 159.96-কে যে দুই বছর এটি কভার করে তা দিয়ে ভাগ করলে হয় 79.98। এটি মোট মূল্যকে মেয়াদ দিয়ে ভাগ করা, এমন মূল্য নয় যা আপনি এক বছরের জন্য পরিশোধ করতে পারবেন (এক বছরের .ai নিবন্ধন কেনা যায় না)। সবসময় amount-কে pricedYears-এর সঙ্গে দেখান ("2 বছরের জন্য $159.96"), কখনোই শুধু amount নয়। সাধারণ TLD-এর জন্য, pricedYears হলো 1 এবং pricePerYear সমান amount।
domain_register — ডোমেইন নিবন্ধনএকটি ডোমেইন নিবন্ধন (কেনা) করে। এটি একটি payment method-এ চার্জ করে — আপনার ডিফল্ট সংরক্ষিত method, account funds, অথবা আপনার বেছে নেওয়া একটি — এবং এটি অপরিবর্তনীয়। প্রস্তাবিত ক্রম: domains_check_availability → domain_register। যে ডোমেইনের TLD নিবন্ধনের জন্য সমর্থিত নয়, সেটি availability check, pricing, বা charge-এর আগেই সঙ্গে সঙ্গে reject করা হয়।
years অবশ্যই TLD-এর নিজস্ব অনুমোদিত মেয়াদের মধ্যে থাকতে হবে। নিচের 1–10 সীমা সব TLD জুড়ে বাইরের সীমা; প্রতিটি TLD-এর সীমা এর চেয়ে সংকীর্ণ। .ai 2–10 অনুমোদন করে, .co এবং .io 1–5 অনুমোদন করে, .sg 1–2, .fr ঠিক 1। এই সীমার বাইরে কোনো years হলে তা অনুমোদিত সীমা উল্লেখ করে validation error সহ reject করা হয় — availability check, pricing বা charge-এর আগেই — এবং মানটি আপনার জন্য নীরবে সমন্বয় করা হয় না:
.ai domains cannot be registered for 1 year: this TLD allows 2–10 years. Call domains_check_availability for this domain to see its allowed registration period.
প্রথমে minRegisterPeriodInYears/maxRegisterPeriodInYears পড়ুন domains_check_availability থেকে এবং এর মধ্যে একটি years বেছে নিন। একই চেকটি নিশ্চিতকরণ (confirmationResponse: "accept") call-এ আবার চালানো হয়, তাই confirm করে এটি কখনোই bypass করা যায় না।
চার্জের আগে দুই-ধাপের নিশ্চিতকরণ। প্রথমে confirmationToken unset রেখে call করুন: টুলটি নতুন করে ডোমেইনের মূল্য নির্ধারণ করে, payment method resolve করে, একটি পূর্ণ confirmation তৈরি করে — মেয়াদ, price breakdown (যার মধ্যে যেকোনো ICANN fee এবং ডোমেইনটি premium কি না অন্তর্ভুক্ত), auto-renew, WHOIS privacy, payment source, এবং registrant/admin/tech/billing contactসমূহ (registrant-এর সঙ্গে অভিন্ন contact-কে "same as registrant" হিসেবে দেখানো হয়) — এবং status: "confirmation_required" ফেরত দেয় সেই price এবং একটি নতুন confirmationToken-সহ। এই call-এ কিছুই নিবন্ধিত বা বিল করা হয় না। পূর্ণ confirmation-টাই টুলের response text; এটি ব্যবহারকারীকে হুবহু দেখান। তারা সম্মত হলে, ঠিক একই arguments-এর সঙ্গে এই confirmationToken এবং confirmationResponse: "accept" যোগ করে আবার call করুন ক্রয় জমা দিতে, অথবা confirmationResponse: "decline" দিয়ে বাতিল করুন — decline-এ কিছুই বিল করা হয় না। tokenটি এই নির্দিষ্ট arguments, quoted price, এবং resolved payment method-এর সঙ্গে বাঁধা থাকে, এবং অল্প সময় পরে মেয়াদোত্তীর্ণ হয়: confirming call-এ token অনুপস্থিত, মেয়াদোত্তীর্ণ, বিকৃত, বা আর না-মেলা হলে, শুধু একটি একেবারে নতুন confirmation নতুন token-সহ ফেরত আসে — কখনো error নয়, কখনো charge নয়। যদি যেকোনো call-এ মূল্য নির্ধারণ করা না যায়, টুলটি token-এর বদলে status: "price_unavailable" ফেরত দেয় এবং কখনো charge করে না; পরে আবার চেষ্টা করুন। একটি confirmed call সঙ্গে সঙ্গে status: "pending" এবং একটি operationId ফেরত দেয় — নিবন্ধনটি background-এ সম্পন্ন হয়; এটি async_operation_get দিয়ে পরীক্ষা করুন।
একটি payment method বেছে নেওয়া। অ্যাকাউন্টের ডিফল্ট সংরক্ষিত payment method-এ চার্জ করতে, অথবা ব্যবহারযোগ্য ডিফল্ট না থাকলে account funds ব্যবহার করতে paymentMethodId বাদ দিন — confirmation-এ resolved source-এর নাম paymentSource এবং তার response text-এ দেখানো হয়। এটি বাদ দিলে, response-এ paymentMethods-ও থাকে: অ্যাকাউন্টের সংরক্ষিত methodগুলো, প্রতিটির একটি id এবং প্রদর্শনযোগ্য label-সহ (যেমন "Card ···2584" বা "Account funds (USD 17.29)"), যাতে গ্রাহক অন্যটি বেছে নিতে পারেন — তখন সেই id-টি পরের call-এ paymentMethodId হিসেবে ফেরত পাঠান সেটিতে চার্জ করার জন্য। একটি মেয়াদোত্তীর্ণ method, বা এমন method যা এই ক্রয়ের জন্য চার্জ করা যায় না (যেমন unattended charge-এর জন্য ব্যবহারযোগ্য নয় বলে চিহ্নিত), কারণ উল্লেখ করে validation error সহ reject করা হয় — কোনো token তৈরি হয় না এবং কিছুই charge করা হয় না। যদি কোনো payment method-ই ব্যবহার করা না যায় — কোনো সংরক্ষিত method ব্যবহারযোগ্য নয় এবং account funds মূল্য কভার করে না, অথবা সংরক্ষিত methodগুলো পড়া যায়নি — টুলটি status: "payment_unavailable" ফেরত দেয় কারণ এবং অ্যাকাউন্টের সংরক্ষিত methodগুলোসহ, এবং কখনো charge করে না; গ্রাহককে অন্য method বেছে নিতে, একটি যোগ করতে, বা funds যোগ করতে হবে।
প্যারামিটার: domain
প্রয়োজনীয়: হ্যাঁ
ধরন & সীমাবদ্ধতা: নিবন্ধনের জন্য সম্পূর্ণ যোগ্যতাসম্পন্ন ডোমেইন নাম, যেমন example.com। Unicode (IDN) বা ASCII (A-label) গ্রহণ করে — স্বয়ংক্রিয়ভাবে punycode-এ normalize হয়।
প্যারামিটার: years
প্রয়োজনীয়: হ্যাঁ
ধরন ও সীমাবদ্ধতা: বছরে নিবন্ধন সময়কাল। 1–10 হলো বাইরের সীমা; গৃহীত পরিসর হলো TLD-এর নিজস্ব — দেখুন minRegisterPeriodInYears/maxRegisterPeriodInYears থেকে domains_check_availability। সীমার বাইরে থাকা মান প্রত্যাখ্যাত হয়, সমন্বয় করা হয় না।
প্যারামিটার: autoRenew
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: বুলিয়ান। যখন true, তখন ডোমেইনটির মেয়াদ শেষ হলে অ্যাকাউন্টের ডিফল্ট পেমেন্ট পদ্ধতি ব্যবহার করে এটি স্বয়ংক্রিয়ভাবে নবায়ন হয়।
প্যারামিটার: privacy.level
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: high পাবলিক WHOIS থেকে নিবন্ধনকারীর যোগাযোগের বিবরণ লুকায়; public সেগুলো প্রকাশ করে।
প্যারামিটার: privacy.userConsent
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: বুলিয়ান। নির্বাচিত গোপনীয়তা সেটিংয়ে আপনি সম্মত আছেন তা নিশ্চিত করতে হবে।
প্যারামিটার: contacts.registrant
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: contactId স্ট্রিং (27–32 অক্ষরসংখ্যাসূচক), contacts_save থেকে।
প্যারামিটার: contacts.admin
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: contactId স্ট্রিং (27–32 অক্ষরসংখ্যাসূচক), contacts_save থেকে।
প্যারামিটার: contacts.tech
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: contactId স্ট্রিং (27–32 অক্ষরসংখ্যাসূচক), contacts_save থেকে।
প্যারামিটার: contacts.billing
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: contactId স্ট্রিং (27–32 অক্ষরসংখ্যাসূচক), contacts_save থেকে।
প্যারামিটার: contacts.attributes
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: বর্ধিত-অ্যাট্রিবিউট কনট্যাক্ট আইডির অ্যারে (সর্বোচ্চ 5টি); শুধুমাত্র নির্দিষ্ট কিছু TLD-এর জন্য প্রয়োজন, অন্যথায় বাদ দিন বা null দিন।
প্যারামিটার: paymentMethodId
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: চার্জ করার জন্য সংরক্ষিত পেমেন্ট পদ্ধতির আইডি, আগের কলের paymentMethods তালিকা থেকে নেওয়া। অ্যাকাউন্টের ডিফল্ট পেমেন্ট পদ্ধতি গ্রহণ করতে এটি বাদ দিন (অথবা ব্যবহারযোগ্য ডিফল্ট না থাকলে ফান্ডস)।
প্যারামিটার: confirmationToken
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: স্ট্রিং, সর্বোচ্চ 4096 অক্ষর। এই নির্দিষ্ট আর্গুমেন্টগুলোর জন্য আগের domain_register কল থেকে ফেরত আসা সার্ভার-ইস্যুকৃত টোকেন। নতুন নিবন্ধন প্রচেষ্টার প্রথম কলে এটি বাদ দিন। অল্প সময় পরে মেয়াদ শেষ হয় এবং যেসব নির্দিষ্ট আর্গুমেন্ট, মূল্য ও পেমেন্ট পদ্ধতির জন্য এটি ইস্যু করা হয়েছিল তার সঙ্গে আবদ্ধ থাকে — এটিকে অপরিবর্তিত অবস্থায়, confirmationResponse-এর সঙ্গে আবার পাঠান, যাতে এর ওপর কার্যকর করা যায়।
প্যারামিটার: confirmationResponse
আবশ্যক: শর্তসাপেক্ষ
ধরন ও সীমাবদ্ধতা: "accept" অথবা "decline"। কেবল বৈধ confirmationToken-এর সঙ্গে অর্থবহ। "accept" সেই নিশ্চিতকরণে দেখানো (বিলকৃত) নিবন্ধন জমা দেয়; "decline" চার্জ ছাড়াই এটি বাতিল করে। প্রথম কলে এটি বাদ দিন।
রিটার্ন — প্রথম কলের পরে (কিছুই চার্জ হয়নি), যখন গ্রাহকের একটি ব্যবহারযোগ্য ডিফল্ট আছে এবং তাকে বেছে নিতে হয় না:
{"domain": "example.com","years": 1,"status": "confirmation_required","price": {"amount": 9.08,"currency": "USD","pricedYears": 1,"pricePerYear": 9.08,"icannFee": 0.2,"isPremium": false},"confirmationToken": "<opaque confirmation token>","paymentSource": "Card ···2584","note": "Nothing has been charged yet. Show the confirmation to the user and, once they agree, call domain_register again with this confirmationToken and confirmationResponse=\"accept\" to complete the purchase, or confirmationResponse=\"decline\" to cancel."}
রিটার্ন — paymentMethodId বাদ দিয়ে প্রথম কলের পরে, অতিরিক্তভাবে অ্যাকাউন্টের সংরক্ষিত পদ্ধতিগুলো বহন করে যাতে গ্রাহক ভিন্ন একটি বেছে নিতে পারেন:
{"domain": "example.com","years": 1,"status": "confirmation_required","price": {"amount": 9.08,"currency": "USD","pricedYears": 1,"pricePerYear": 9.08,"icannFee": 0.2,"isPremium": false},"confirmationToken": "<opaque confirmation token>","paymentSource": "Account funds (USD 17.29)","paymentMethods": [{ "id": "pm_9f2c1a7e", "type": "Funds", "order": 1, "label": "Account funds (USD 17.29)" },{ "id": "pm_4b6e2d90", "type": "CreditCard", "order": 2, "label": "MasterCard ···2584" }],"note": "Nothing has been charged yet. Show the confirmation to the user and, once they agree, call domain_register again with this confirmationToken and confirmationResponse=\"accept\" to complete the purchase, or confirmationResponse=\"decline\" to cancel."}
এই JSON-এর পাশাপাশি, টুলের প্রতিক্রিয়ার text হলো ব্যবহারকারীকে দেখানোর জন্য পূর্ণ নিশ্চিতকরণ — এটি উপরের ডোমেইন, মেয়াদ ও মূল্য পুনরায় উল্লেখ করে, সঙ্গে Auto-renew: on/off, WHOIS privacy: on/off, Payment source: <resolved method label>-এর লাইন, এবং নিবন্ধনকারী/অ্যাডমিন/টেক/বিলিং প্রতিটি কনট্যাক্টের জন্য (নাম, ইমেইল, দেশ — নিবন্ধনকারীর সঙ্গে মিলে গেলে কনট্যাক্টে "same as registrant" পড়বে), এরপর পরবর্তী কলের নির্দেশনা। বহু-বছরের মেয়াদের জন্য, price.amount হলো পুরো মেয়াদের মোট এবং price.pricePerYear হলো সেই মোটকে মেয়াদ দিয়ে ভাগ করলে যা হয় — যেমন years: 5 এ .com ফেরত দেয় { "amount": 48.52, "pricedYears": 5, "pricePerYear": 9.70 }, এবং example.ai এর সঙ্গে years: 2 ফেরত দেয় { "amount": 159.96, "pricedYears": 2, "pricePerYear": 79.98 }।
একটি paymentMethods এন্ট্রি কখনও কার্ড নম্বর, কার্ডধারীর নাম, বা label-এর বাইরে কোনো বিলিং/ইস্যুকারী বিবরণ বহন করে না — isExpired/offSessionForbidden (যখন true) একটি পদ্ধতিকে বর্তমানে ব্যবহারযোগ্য নয় বলে চিহ্নিত করে, এবং availableBalance/balanceCurrency কেবল Funds এন্ট্রির জন্য উপস্থিত থাকে।
রিটার্ন — confirmationResponse: "accept"-এর পরে (নিবন্ধন জমা দেওয়া হয়েছে):
{"domain": "example.com","years": 1,"status": "pending","operationId": "...","price": {"amount": 9.08,"currency": "USD","pricedYears": 1,"pricePerYear": 9.08,"icannFee": 0.2,"isPremium": false},"note": "Registration of example.com submitted. Ask again, or call async_operation_get with this operationId, to check status."}
রিটার্ন — confirmationResponse: "decline"-এর পরে (কিছুই চার্জ হয়নি):
{"domain": "example.com","years": 1,"status": "cancelled","price": { "amount": 9.08, "currency": "USD", "pricedYears": 1, "pricePerYear": 9.08, "icannFee": 0.2, "isPremium": false },"note": "Registration of example.com was not submitted because the purchase was not confirmed."}
রিটার্ন — যদি মূল্য নির্ধারণ করা না যায়, যেকোনো কলে:
{"domain": "example.com","years": 1,"status": "price_unavailable","priceUnavailableReason": "Price is currently unavailable for this domain.","note": "Registration of example.com could not be priced right now, so nothing was confirmed or charged. Try again shortly."}
রিটার্ন — যদি কোনো পেমেন্ট পদ্ধতি ব্যবহার করা না যায়, যেকোনো কলে:
{"domain": "example.com","years": 1,"status": "payment_unavailable","price": {"amount": 9.08,"currency": "USD","pricedYears": 1,"pricePerYear": 9.08,"icannFee": 0.2,"isPremium": false},"paymentMethods": [{ "id": "pm_4b6e2d90", "type": "CreditCard", "order": 2, "label": "MasterCard ···2584", "isExpired": true }],"note": "example.com was not registered and nothing was charged. None of the saved payment methods can be charged for this purchase and the account funds cannot be used. Add a payment method or add funds to the account, then try again."}
status হতে পারে:
স্ট্যাটাস: confirmation_required
অর্থ: প্রিভিউ — কিছুই চার্জ হয়নি। প্রতিক্রিয়ার টেক্সট ব্যবহারকারীকে দেখান, তারপর এই confirmationToken এবং confirmationResponse দিয়ে আবার কল করুন। জমা দেওয়া confirmationToken অনুপস্থিত, মেয়াদোত্তীর্ণ, বিকৃত, বা আর বর্তমান আর্গুমেন্ট/মূল্য/পেমেন্ট পদ্ধতির সঙ্গে মেলে না — এমন হলে কখনও ত্রুটি নয়, বরং একটি নতুন টোকেনসহ এটিও ফেরত আসে।
স্ট্যাটাস: cancelled
অর্থ: ক্রয়টি প্রত্যাখ্যাত হয়েছে (confirmationResponse: "decline"), তাই কিছুই জমা দেওয়া হয়নি।
স্ট্যাটাস: pending
অর্থ: জমা দেওয়া হয়েছে; রেজিস্ট্রি ব্যাকগ্রাউন্ডে কাজ শেষ করছে। async_operation_get-এ operationId দিয়ে পোল করুন।
স্ট্যাটাস: price_unavailable
অর্থ: মূল্য নির্ধারণ করা যায়নি, তাই কোনো টোকেন ইস্যু করা হয়নি এবং কিছুই বিল করা হয়নি। পরে আবার চেষ্টা করুন।
স্ট্যাটাস: payment_unavailable
অর্থ: এই ক্রয়ের জন্য কোনো ব্যবহারযোগ্য পেমেন্ট পদ্ধতি নেই — কোনো সংরক্ষিত পদ্ধতিতে চার্জ করা যায় না এবং অ্যাকাউন্ট ফান্ডস মূল্য কভার করে না (অথবা সংরক্ষিত পদ্ধতিগুলো পড়া যায়নি)। কোনো টোকেন ইস্যু করা হয়নি এবং কিছুই বিল করা হয়নি। যখন গ্রাহক এ বিষয়ে পদক্ষেপ নিতে পারেন, তখন note-এ প্রকৃত কারণটি বলা থাকে — মূল্যের তুলনায় ফান্ডস ব্যালান্স, এমন ফান্ডস কারেন্সি যা দিয়ে মূল্য পরিশোধ করা যায় না, বা এমন ওয়ালেট যেখানে চার্জযোগ্য কিছু নেই — এবং কেবল সংরক্ষিত পদ্ধতিগুলো পড়া না গেলে এটি সাধারণ থাকে; paymentMethods-এ অ্যাকাউন্টের সংরক্ষিত পদ্ধতিগুলো তালিকাভুক্ত থাকে যাতে গ্রাহক বেছে নিতে, একটি পদ্ধতি যোগ করতে, বা ফান্ডস যোগ করতে পারেন।
operationId একটি সমতল স্ট্রিং — এটিকে async_operation_get-এ পাঠান, যা জানায় নিবন্ধনটি শেষ পর্যন্ত সফল হয়েছে নাকি ব্যর্থ। price যা confirmation_required-এ দেখানো হয়, ঠিক সেটিই confirmationResponse: "accept"-এ চার্জ করা হবে — price.amount হলো পুরো মেয়াদের মোট এবং price.pricedYears মেয়াদটি জানায়, তাই সবসময় দুটিকে একসঙ্গে দেখান। যখন TLD-তে ICANN ফি থাকে, price.amount-এ তা আগেই অন্তর্ভুক্ত থাকে এবং price.icannFee ফি-এর পরিমাণ জানায় যাতে তা ব্যাখ্যা করা যায়।
domain_purchase_link — ডোমেইন ক্রয় লিংক নিনএক বা একাধিক Spaceship পেমেন্ট লিংক প্রস্তুত করে যাতে আপনি চ্যাটের বদলে আপনার ব্রাউজারে Spaceship-এর নিজস্ব পেমেন্ট পেজে ডোমেইন কিনতে পারেন। এই কল দ্বারা কিছুই নিবন্ধিত বা চার্জ হয় না — আপনি পেজে পর্যালোচনা ও পেমেন্ট করেন, সেটিই নিশ্চিতকরণ ধাপ। যখন আপনি পেমেন্ট লিংক চান, যখন চ্যাটে সরাসরি কেনা ব্যর্থ হয়েছে, বা যখন এমন কোনো পেমেন্ট পদ্ধতিতে পরিশোধ করতে চান যা চ্যাট ক্রয় ব্যবহার করতে পারে না, তখন এটি ব্যবহার করুন। যদি কোনো ক্রয় প্রচেষ্টা ইতিমধ্যে সম্পন্ন হয়ে থাকতে পারে, আগে domains_list পরীক্ষা করুন এবং কেবল সত্যিই নিবন্ধিত নয় এমন ডোমেইনের জন্য লিংক চান, নইলে আপনি দুবার অর্থ পরিশোধের ঝুঁকিতে পড়বেন। এর জন্য domains:billing অ্যাক্সেস প্রয়োজন।
শীর্ষ স্তরে দেওয়া সেটিংস (years, autoRenew, contacts) প্রতিটি আইটেমে প্রযোজ্য। কোনো আইটেম যদি নিজের years, autoRenew বা contacts সেট করে, তবে তা কেবল সেই ডোমেইনের জন্য এগুলোকে ওভাররাইড করে, এবং যা বাদ দেয় তা উত্তরাধিকারসূত্রে পায় (একটি আইটেমের contacts শীর্ষ-স্তরের contacts-কে সম্পূর্ণভাবে প্রতিস্থাপন করে)। শীর্ষ-স্তরের contacts আবশ্যক: কনট্যাক্টগুলো লিংকের সঙ্গে যায় এবং আপনি এটি খুললে সেগুলো ইতিমধ্যেই ডোমেইনের কনট্যাক্ট হিসেবে পূরণ করা থাকে। প্রতিটি ডোমেইন কেবল একবার তালিকাভুক্ত করা যেতে পারে, এবং এখানে কোনো payment, currency বা WHOIS privacy ইনপুট নেই — পেমেন্ট পেজে WHOIS privacy প্ল্যাটফর্মের ডিফল্ট অবস্থায় থাকে।
প্যারামিটার: items
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: 1–20টি আইটেমের অ্যারে, প্রতিটি একবার করে তালিকাভুক্ত।
প্যারামিটার: items[].domain
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: কেনার জন্য সম্পূর্ণ যোগ্যতাসম্পন্ন ডোমেইন নাম, যেমন example.com। Unicode (IDN) বা ASCII (A-label) গ্রহণ করে — স্বয়ংক্রিয়ভাবে punycode-এ স্বাভাবিকীকৃত হয়।
প্যারামিটার: items[].years
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: পূর্ণসংখ্যা 1–10; এই ডোমেইনের জন্য শীর্ষ-স্তরের years-কে ওভাররাইড করে।
প্যারামিটার: items[].autoRenew
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: বুলিয়ান; এই ডোমেইনের জন্য শীর্ষ-স্তরের autoRenew-কে ওভাররাইড করে।
প্যারামিটার: items[].contacts
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: শুধু এই ডোমেইনের জন্য কনট্যাক্ট, contactId স্ট্রিং হিসেবে (registrant, admin, tech, billing, ঐচ্ছিক attributes); শীর্ষ-স্তরের contacts-কে সম্পূর্ণভাবে প্রতিস্থাপন করে।
প্যারামিটার: years
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: পূর্ণসংখ্যা 1–10, যা প্রতিটি সেই আইটেমে প্রযোজ্য যেটি নিজেরটি সেট করে না। এটি অবশ্যই TLD যে মেয়াদ অনুমোদন করে তার মধ্যে পড়তে হবে (minRegisterPeriodInYears/maxRegisterPeriodInYears থেকে domains_check_availability); সীমার বাইরে থাকা মান অনুমোদিত পরিসরের নামসহ ত্রুটিতে প্রত্যাখ্যাত হয়, সমন্বয় করা হয় না। যখন এটি বা আইটেম কোনোটিই সেট করা না থাকে, তখন TLD-এর সবচেয়ে ছোট মেয়াদ ব্যবহার করা হয়।
প্যারামিটার: autoRenew
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: বুলিয়ান, যা প্রতিটি সেই আইটেমে প্রযোজ্য যেটি নিজেরটি সেট করে না। ডিফল্ট হলো true।
প্যারামিটার: contacts
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: কনট্যাক্টগুলো contactId স্ট্রিং হিসেবে, যা প্রতিটি সেই আইটেমে প্রযোজ্য যেটি নিজেরটি সেট করে না: registrant (আবশ্যক), admin, tech এবং billing (প্রতিটির ডিফল্ট registrant), এবং ঐচ্ছিক attributes (সর্বোচ্চ 5টি extended-attribute contact ID-এর তালিকা, যা শুধুমাত্র নির্দিষ্ট কিছু TLD-এর জন্য প্রয়োজন)। আইডিগুলো contacts_list থেকে নিন, অথবা আগে contacts_save দিয়ে বিবরণ সংরক্ষণ করুন।
প্রতি কলে লিংক। একটি একক লিংকে সর্বোচ্চ 10টি ডোমেইন রাখা যায়, তাই দীর্ঘ তালিকা অনুরোধের ক্রমে একাধিক লিংক ফেরত দেয় — উদাহরণস্বরূপ 15টি ডোমেইন হলে 10 এবং 5-এর দুটি লিংক তৈরি হয়। links[].domains বলে দেয় প্রতিটি লিংক কোন ডোমেইনগুলো কভার করে।
মূল্য। প্রতিটি ডোমেইনে একটি আনুমানিকprice থাকে (চূড়ান্ত মূল্য পেমেন্ট পেজে দেখানো হয়) অথবা priceUnavailableReason থাকে যখন তা নির্ধারণ করা যায় না। আনুমানিক মূল্য না থাকলেও কখনও লিংক ইস্যু হওয়া বন্ধ হয় না।
পেমেন্ট। পেমেন্ট পদ্ধতি পেজে বেছে নেওয়া হয়। অ্যাকাউন্টে ফান্ডস থাকলে সেগুলো আগে থেকেই নির্বাচিত থাকে।
লিংকগুলো পুনর্ব্যবহারযোগ্য। একটি লিংকের মেয়াদ শেষ হয় না এবং এটি একাধিকবার খোলা যায়, তাই এটি অন্য কারও সঙ্গে শেয়ার করবেন না।
রিটার্ন
{"status": "links_ready","links": [{"url": "https://example.spaceship.com/pay/abc123","domains": [{"domain": "example.com","years": 1,"autoRenew": true,"price": { "amount": 9.08, "currency": "USD", "pricedYears": 1, "pricePerYear": 9.08, "icannFee": 0.2, "isPremium": false }},{"domain": "example.ai","years": 2,"autoRenew": false,"priceUnavailableReason": "Price is currently unavailable for this domain."}]}],"failed": [],"note": "Nothing has been charged. ..."}
status: links_ready
অর্থ: প্রতিটি ডোমেইন একটি লিংক দ্বারা কভার করা হয়েছে।
status: partial
অর্থ: কিছু ডোমেইন কভার করা হয়েছে; বাকিগুলো failed-এ তালিকাভুক্ত, প্রতিটির সঙ্গে একটি reason থাকে (যেমন উপলভ্য নয়, অসমর্থিত এক্সটেনশন, অনুমোদিত নয় এমন মেয়াদ, কনট্যাক্ট সমস্যা, বা এমন একটি লিংক যা তৈরি করা যায়নি)।
status: no_links
অর্থ: কোনো লিংক প্রস্তুত করা যায়নি। ফলাফলটি ত্রুটি হিসেবে চিহ্নিত হয়, failed কেন তা বলে, এবং কিছুই চার্জ হয়নি।
গ্রাহক অর্থ পরিশোধ করেছেন বলে জানানোর পরে, ডোমেইনটির জন্য domains_list কল করে নিশ্চিত করুন যে এটি নিবন্ধিত হয়েছে — শুধু লিংককেই ক্রয়ের প্রমাণ হিসেবে গণ্য করবেন না।
domain_set_contacts — ডোমেইন কনট্যাক্ট সেট করুনআপনার মালিকানাধীন একটি ডোমেইনে বরাদ্দ করা কনট্যাক্টগুলো পরিবর্তন করে। সঙ্গে সঙ্গে সম্পন্ন হয় (পোল করার জন্য কোনো অপারেশন নেই)।
প্যারামিটার: domainName
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: সম্পূর্ণ যোগ্যতাসম্পন্ন ডোমেইন নাম। Unicode (IDN) বা ASCII (A-label) গ্রহণ করে — স্বয়ংক্রিয়ভাবে punycode-এ স্বাভাবিকীকৃত হয়।
প্যারামিটার: registrant
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: contactId স্ট্রিং (27–32 অক্ষরসংখ্যাসূচক), contacts_save থেকে।
প্যারামিটার: admin
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: contactId স্ট্রিং (27–32 অক্ষরসংখ্যাসূচক) অথবা null।
প্যারামিটার: tech
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: contactId স্ট্রিং (27–32 অক্ষরসংখ্যাসূচক) অথবা null।
প্যারামিটার: billing
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: contactId স্ট্রিং (27–32 অক্ষরসংখ্যাসূচক) অথবা null।
প্যারামিটার: attributes
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: বর্ধিত-অ্যাট্রিবিউট কনট্যাক্ট আইডির অ্যারে (সর্বোচ্চ 5টি); শুধুমাত্র নির্দিষ্ট কিছু TLD-এর জন্য প্রয়োজন, অন্যথায় বাদ দিন বা null দিন।
রিটার্ন
{ "verificationStatus": "verification" }
ফেরত আসা verificationStatus ICANN RAA ইমেইল যাচাইকরণকে প্রতিফলিত করে: verification — নিবন্ধনকারীকে তাদের ইমেইল ঠিকানা নিশ্চিত করতে হবে (একটি নিশ্চিতকরণ ইমেইল পাঠানো হয়); success — ইতিমধ্যেই নিশ্চিত; null — এই ডোমেইনের ক্ষেত্রে RAA যাচাইকরণ প্রযোজ্য নয়।
domain_set_nameservers — ডোমেইন নেমসার্ভার সেট করুনএকটি ডোমেইনের রেজিস্ট্রার-স্তরের নেমসার্ভার পরিবর্তন করে। সঙ্গে সঙ্গে সম্পন্ন হয় (পোল করার জন্য কোনো অপারেশন নেই)। পরিবর্তনটি পরে domains_list দ্বারা প্রতিফলিত হয়।
প্যারামিটার: domainName
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: সম্পূর্ণ যোগ্যতাসম্পন্ন ডোমেইন নাম। Unicode (IDN) বা ASCII (A-label) গ্রহণ করে — স্বয়ংক্রিয়ভাবে punycode-এ স্বাভাবিকীকৃত হয়।
প্যারামিটার: provider
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: basic (Spaceship-এর ডিফল্ট নেমসার্ভার) অথবা custom (আপনার নিজস্ব হোস্ট)।
প্যারামিটার: hosts
আবশ্যক: শর্তসাপেক্ষ
ধরন ও সীমাবদ্ধতা: যখন provider হলো custom, তখন আবশ্যক: 2–12টি নেমসার্ভার হোস্টনেম (প্রতিটি একটি বৈধ FQDN, 4–255 অক্ষর)। যখন provider হলো basic, তখন এটি অবশ্যই বাদ দিতে হবে।
রিটার্ন
{ "provider": "custom", "hosts": ["ns1.example.com", "ns2.example.com"] }
একটি ডোমেইন ইতিমধ্যেই যে অবস্থায় আছে, সেই অবস্থাই আবার প্রয়োগ করলে (যেমন, এটি ইতিমধ্যেই basic হলে আবার basic সেট করা) no-op success-এর বদলে একটি validation error ফেরত দেয় — এটিকে প্রত্যাশিত ফলাফল হিসেবে বিবেচনা করুন, পুনরায় চেষ্টা ব্যর্থ হয়েছে বলে নয়।
এই টুলগুলো যে domainName গ্রহণ করে, তা Unicode (IDN) বা ASCII (A-label) সমর্থন করে এবং স্বয়ংক্রিয়ভাবে punycode-এ normalize করা হয়; এখানে TLD সমর্থন প্রয়োগ করা হয় না।
dns_records_get — DNS রেকর্ড পানএকটি ডোমেইনের DNS resource record-এর paginated তালিকা নিয়ে আসে।
প্যারামিটার: domainName
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: যে ডোমেইনের রেকর্ড আনা হবে।
প্যারামিটার: take
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: প্রতি পৃষ্ঠায় আইটেম, 1–500। ডিফল্ট 100।
প্যারামিটার: skip
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: এড়িয়ে যাওয়ার আইটেম, 0 বা তার বেশি। ডিফল্ট 0।
প্যারামিটার: orderBy
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: সর্বোচ্চ 8টি sort key: type, -type, name, -name।
রিটার্ন করে — { items, total }। প্রতিটি item হলো Record shapes-এ বর্ণিত একটি record, সঙ্গে একটি ঐচ্ছিক group field থাকে যা recordটি কোথা থেকে এসেছে তা নির্দেশ করে (custom — আপনার তৈরি, product — একটি Spaceship product দ্বারা পরিচালিত, personalNs — ব্যক্তিগত nameserver)।
dns_records_save — DNS রেকর্ড সংরক্ষণ করুনকাস্টম DNS রেকর্ড যোগ করে বা বিদ্যমানগুলোর TTL আপডেট করে। TXT রেকর্ড ছাড়া রেকর্ডগুলো case-insensitively মেলানো হয় (TXT case-sensitive)।
প্যারামিটার: domainName
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: যে ডোমেইনের রেকর্ড আপডেট করা হবে।
প্যারামিটার: records
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: 1–500টি রেকর্ড — Record shapes দেখুন। প্রতিটিতে একটি ঐচ্ছিক ttl থাকতে পারে।
প্যারামিটার: force
আবশ্যক: না
ধরন ও সীমাবদ্ধতা: Boolean। conflict-resolution check এড়িয়ে zone update জোরপূর্বক করে।
রিটার্ন করে — { "saved": <number> }, জমা দেওয়া রেকর্ডের সংখ্যা। সফল response মানে সব রেকর্ড গ্রহণ করা হয়েছে; কোনো একটি রেকর্ড ব্যর্থ হলে পুরো call error ফেরত দেয়।
dns_records_delete — DNS রেকর্ড মুছুনকাস্টম DNS রেকর্ড মুছে দেয়। মুছে ফেলা পূর্বাবস্থায় ফেরানো যায় না। TXT রেকর্ড ছাড়া রেকর্ডগুলো case-insensitively মেলানো হয় (TXT case-sensitive)।
প্যারামিটার: domainName
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: যে ডোমেইনের রেকর্ড মুছে ফেলা হবে।
প্যারামিটার: records
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: 1–500টি রেকর্ড যা বিদ্যমান রেকর্ড শনাক্ত করে — save-এর মতো একই shape, তবে ttl ছাড়া।
রিটার্ন করে — { "deleted": <number> }, জমা দেওয়া রেকর্ডের সংখ্যা। কোনো রেকর্ড মেলানো না গেলে পুরো call ব্যর্থ হয় এবং কিছুই মুছে ফেলা হয় না।
প্রতিটি রেকর্ডে থাকে:
type — নিচে সমর্থিত 13টি type-এর একটি।
name — রেকর্ডের নাম, ডোমেইন বাদ দিয়ে: ডোমেইন নিজেই (apex) বোঝাতে @ এবং wildcard-এর জন্য * ব্যবহার করুন।
ttl (শুধু save, ঐচ্ছিক) — cache time সেকেন্ডে, 60–3600।
Type-নির্দিষ্ট field:
Type: A
Fields: address — IPv4 address।
Type: AAAA
Fields: address — IPv6 address।
Type: CNAME
Fields: cname — canonical domain name (সর্বোচ্চ 253 অক্ষর)।
Type: ALIAS
Fields: aliasName — canonical domain name; apex-এর জন্য CNAME-এর মতো আচরণ, যেখানে CNAME অনুমোদিত নয়।
Type: NS
Fields: nameserver — nameserver-এর নাম।
Type: PTR
Fields: pointer — প্রদত্ত IP address-এর জন্য domain name।
Type: TXT
Fields: value — text value (case-sensitively মেলানো হয়)।
Type: MX
Fields: exchange — mail server; preference — priority (0–65535, কম মান অগ্রাধিকার পায়)।
Type: CAA
Fields: flag — 0 বা 128 (critical bit); tag — issue, issuewild, বা iodef; value — ঐচ্ছিক parameter-সহ CA identifier।
Type: SRV
Fields: service (যেমন _sip); protocol (যেমন _tcp); priority এবং weight (0–65535); port (1–65535); target — server domain name।
Type: TLSA
Fields: usage, selector, matching (প্রতিটি 0–255); port — * বা _<1–65535>; protocol (যেমন _tcp); associationData — certificate hash বা data।
Type: HTTPS
Fields: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN বা .; ঐচ্ছিক port (* বা _<1–65535>), scheme (_https হতে হবে যখন port সেট থাকে), svcParams।
Type: SVCB
Fields: svcPriority (0–65535; 0 = AliasMode); targetName — FQDN বা .; ঐচ্ছিক port, scheme (যেমন _tcp), svcParams।
async_operation_get — Async Operation Status পানঅন্য একটি টুল দ্বারা শুরু করা দীর্ঘসময় চলা অপারেশন পরীক্ষা করে (বর্তমানে domain_register)। এটি operationId-এ সেই টুল ফেরত দেওয়া operationId সেট করে কল করুন, এবং statussuccess বা failed না হওয়া পর্যন্ত পুনরাবৃত্তি করুন।
প্যারামিটার: operationId
আবশ্যক: হ্যাঁ
ধরন ও সীমাবদ্ধতা: Alphanumeric string, সর্বোচ্চ 36 অক্ষর, অপারেশন শুরু করা টুল থেকে ফেরত আসে।
রিটার্ন করে
Field: operationId
অর্থ: যে অপারেশনটি poll করা হয়েছে।
Field: status
অর্থ: pending, success, বা failed।
Field: type
অর্থ: অপারেশনের ধরন, অথবা null।
Field: details
অর্থ: অপারেশন সম্পর্কে অতিরিক্ত বিবরণ, অথবা null।
Field: createdAt / modifiedAt
অর্থ: অপারেশনটি কখন তৈরি হয়েছে / সর্বশেষ আপডেট হয়েছে (modifiedAtnull হতে পারে)।
কোনো call ব্যর্থ হলে, টুলটি একটি code এবং মানুষ-পাঠযোগ্য detail-সহ error ফেরত দেয় যা কী ভুল হয়েছে তা ব্যাখ্যা করে — যেমন invalid input (ভুল গঠনের domain name বা contact ID), অস্তিত্বহীন domain বা contact, অথবা বর্তমান অবস্থার সঙ্গে conflict। যদি assistant-কে access না দেওয়ায় কোনো tool প্রত্যাখ্যাত হয়, তাহলে Spaceship MCP পুনরায় সংযুক্ত করুন এবং এটি যে access চায় তা অনুমোদন করুন।