Prices and validates the requested domains, ensures a registrant contact for the authenticated user, and returns a hosted Stripe Checkout URL. Call this proxied through the user's PDS (atproto-proxy: did:web:marque.at#marque_registrar) with a token holding the at.marque.partnerApi permission set: the authenticated user (the JWT iss) becomes the owner of the domains, and is the one billed on Stripe. The owning DID is taken from that authenticated session, never from input. The end user completes payment on Stripe's hosted page (where they see and confirm the exact domains and amount) and is redirected to successUrl with an order query parameter (successUrl?order=<orderId>) on success, or to cancelUrl if they abandon. Domains are not registered until payment is captured; poll at.marque.partner.getOrder with the returned orderId for provisioning status, then write the at.marque.domain and at.marque.dns records into the user's repository yourself. Only new registrations are supported here (no transfers or renewals).
Input
application/jsoncancelUrl
stringuri
Required
Where Stripe redirects if the user cancels.
items
array
Required
Domains to register in this order, 1 to 50. Every domain must currently be available (verify with checkAvailability first); if any is unavailable or on an unsupported TLD the whole call fails.
maxLength: 50 itemsminLength: 1 itemsregistrant
ref#registrant
Required
No description available.
successUrl
stringuri
Required
Where Stripe redirects after successful payment. An order parameter carrying the order id is appended.
Output
application/jsoncheckoutUrl
stringuri
Required
Hosted Stripe Checkout URL to send the user to.
currency
string
Required
ISO 4217 currency code of subtotalCents. Currently always usd.
orderId
string
Required
Opaque order id; pass to getOrder to poll status.
subtotalCents
integer
Required
Order subtotal in cents, before tax. Tax (if any) is computed by Stripe on the hosted page and added on top, so the amount the user pays may be higher.
Errors
InvalidRequest
The request is malformed: no items, too many items (max 50), or an item with an invalid domain. Unavailable
A requested domain cannot be registered: it is taken, on an unsupported TLD, or could not be verified with the registry. The message identifies the domain. InvalidRegistrant
The registrant is missing a required field (including state/province where the country requires it) or is missing an extra field a specific TLD mandates. The message names what is missing. InvalidCallback
successUrl or cancelUrl is not a valid absolute https URL. Try It
Requests are sent directly from your browser. Some servers may block requests due to CORS.
View raw schema
{
"type": "procedure",
"input": {
"schema": {
"type": "object",
"required": [
"items",
"registrant",
"successUrl",
"cancelUrl"
],
"properties": {
"items": {
"type": "array",
"items": {
"ref": "#item",
"type": "ref"
},
"maxLength": 50,
"minLength": 1,
"description": "Domains to register in this order, 1 to 50. Every domain must currently be available (verify with checkAvailability first); if any is unavailable or on an unsupported TLD the whole call fails."
},
"cancelUrl": {
"type": "string",
"format": "uri",
"description": "Where Stripe redirects if the user cancels."
},
"registrant": {
"ref": "#registrant",
"type": "ref"
},
"successUrl": {
"type": "string",
"format": "uri",
"description": "Where Stripe redirects after successful payment. An order parameter carrying the order id is appended."
}
}
},
"encoding": "application/json"
},
"errors": [
{
"name": "InvalidRequest",
"description": "The request is malformed: no items, too many items (max 50), or an item with an invalid domain."
},
{
"name": "Unavailable",
"description": "A requested domain cannot be registered: it is taken, on an unsupported TLD, or could not be verified with the registry. The message identifies the domain."
},
{
"name": "InvalidRegistrant",
"description": "The registrant is missing a required field (including state/province where the country requires it) or is missing an extra field a specific TLD mandates. The message names what is missing."
},
{
"name": "InvalidCallback",
"description": "successUrl or cancelUrl is not a valid absolute https URL."
}
],
"output": {
"schema": {
"type": "object",
"required": [
"orderId",
"checkoutUrl",
"subtotalCents",
"currency"
],
"properties": {
"orderId": {
"type": "string",
"description": "Opaque order id; pass to getOrder to poll status."
},
"currency": {
"type": "string",
"description": "ISO 4217 currency code of subtotalCents. Currently always usd."
},
"checkoutUrl": {
"type": "string",
"format": "uri",
"description": "Hosted Stripe Checkout URL to send the user to."
},
"subtotalCents": {
"type": "integer",
"description": "Order subtotal in cents, before tax. Tax (if any) is computed by Stripe on the hosted page and added on top, so the amount the user pays may be higher."
}
}
},
"encoding": "application/json"
},
"description": "Prices and validates the requested domains, ensures a registrant contact for the authenticated user, and returns a hosted Stripe Checkout URL. Call this proxied through the user's PDS (atproto-proxy: did:web:marque.at#marque_registrar) with a token holding the at.marque.partnerApi permission set: the authenticated user (the JWT iss) becomes the owner of the domains, and is the one billed on Stripe. The owning DID is taken from that authenticated session, never from input. The end user completes payment on Stripe's hosted page (where they see and confirm the exact domains and amount) and is redirected to successUrl with an order query parameter (successUrl?order=<orderId>) on success, or to cancelUrl if they abandon. Domains are not registered until payment is captured; poll at.marque.partner.getOrder with the returned orderId for provisioning status, then write the at.marque.domain and at.marque.dns records into the user's repository yourself. Only new registrations are supported here (no transfers or renewals)."
}