domains

Buy a domain with Orgo credits

Changed on

Body: { domain, registrant, expected_price_cents? }. domain is a name and an extension from the search (orgo.agency). Send expected_price_cents, the search’s price_cents: if the price changed since, nothing is bought and the answer is 409 PRICE_CHANGED with the new price (without it, the current price is charged). The price comes out of the buyer’s Orgo credits (402 INSUFFICIENT_CREDITS, with price_cents and available_cents, when they fall short).

The domain is registered for the extension’s shortest term (min_years: 1 for most, 2 for some, like .ai), with WHOIS privacy and the transfer lock on, and its DNS on Orgo DNS (GET .../dns). It renews by itself from the payer’s Orgo credits, auto_renew on, until auto-renew is turned off (PATCH .../domains/{domainId}); expires_at says when the term ends. The registrant is the domain’s legal owner: the registry emails them to confirm within 15 days, or suspends the domain.

201 with the domain, active. 200 when this workspace already owns it. When the registry’s answer is lost the answer is 502 REGISTRATION_UNKNOWN and the domain stays pending with its credits held: GET /api/projects/{id}/domains finds out and charges or gives them back. A session or an account-wide key with write access: a workspace-scoped key gets 403 ACCOUNT_KEY_REQUIRED, since buying spends money. 10 purchases a day per account, refused ones included (asking again for a domain this workspace owns does not count).

post/api/projects/{id}/domains

Request

  • Base URL
    https://www.orgo.ai
  • Auth
    HTTP bearer

Path parameters

idstring uuid required

Workspace id.

Request body

domainstring required
expected_price_centsinteger

price_cents from the search. A different price now is 409 PRICE_CHANGED.

Example request

{
  "domain": "orgo.agency",
  "registrant": {
    "phone": "+1.4155550123",
    "country": "US"
  }
}

Response

This workspace already owns it.

idstring uuid required
domainstring required
status'pending' | 'active' required

pending: the registry has not confirmed it yet; its price is held from the credits until it does.

expires_atstring date-time nullable required

When the term ends, as the registry has it. With auto_renew on it renews before then.

created_atstring date-time required
auto_renewboolean required

Orgo renews it in its last 14 days from the payer’s Orgo credits. On when bought, off when adopted.

renewal_centsinteger nullable required

What the next renewal costs, for renewal_years years. null while there is no price.

renewal_yearsinteger required

The years one renewal adds: 1 for most extensions, 2 for a few (like .ai).

renewal_paid_by'you' | 'member' | 'null' nullable required

Whose Orgo credits pay the renewal: yours, or another member’s (whoever turned auto-renew on last, else the buyer). null with auto-renew off.

renewal_state'off' | 'scheduled' | 'renewing' | 'retrying' | 'expired' required

off: auto-renew is off and it expires at expires_at. scheduled: the price is taken 14 days before expires_at, and it renews then (only where renewals_enabled). renewing: the renewal is with the registry (it can take up to a day to confirm). retrying: the last try failed (renewal_error) and Orgo tries again every day until expiry. expired: expires_at has passed.

renewal_error'insufficient_credits' | 'no_payer' | 'registry_refused' | 'null' nullable required

Why the last try failed, while retrying: the payer’s credits fall short, the payer can no longer pay (turn auto-renew on, PATCH true, to pay yourself), or the registry refused it.

Example response

{
  "id": "5c1e2d3f-4a5b-4c6d-8e7f-9a0b1c2d3e4f",
  "domain": "orgo.agency",
  "status": "active",
  "expires_at": "2027-10-21T18:00:00.000Z",
  "created_at": "2026-10-21T18:00:00.000Z",
  "auto_renew": true,
  "renewal_cents": 2099,
  "renewal_years": 1,
  "renewal_paid_by": "you",
  "renewal_state": "scheduled",
  "renewal_error": null,
  "pointed": [
    {
      "domain": "app.orgo.agency",
      "computer_id": "6f1c2a7e-3b9d-4c1a-9e2f-0a1b2c3d4e5f",
      "computer_name": "web-1",
      "status": "active"
    }
  ]
}

Changes

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the optional property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status

    • info

      added the required property to the response with the status