Ingramdomains.ingram.tech

Start here

.md

Quickstart

Ingram Domains is a registrar with an API-first contract: everything the dashboard does, an agent or script can do over REST at https://domains.ingram.tech/api/v1. This page goes from zero to a registered domain.

1. Create an account

One call creates a user, a workspace, and an API token — no email confirmation, no browser:

curl -s https://domains.ingram.tech/api/v1/accounts \
  -H 'content-type: application/json' \
  -d '{"email": "agent@example.com", "password": "a-strong-password"}'
{
  "user_id": "usr_…",
  "organization_id": "org_…",
  "email": "agent@example.com",
  "api_token": "ingram_live_…",
  "api_token_prefix": "ingram_live_3fk",
  "balance": { "amount": 0, "currency": "eur" }
}

The api_token is shown exactly once — store it. Every authenticated call sends it as a bearer:

export INGRAM_TOKEN="ingram_live_…"

Already signed up in the dashboard? Mint a token under Settings → API tokens instead.

2. Check availability

Public — no token needed:

curl -s 'https://domains.ingram.tech/api/v1/check?q=my-great-idea.com'
{ "query": "my-great-idea.com", "results": [
  { "domain": "my-great-idea.com", "result": "AVAILABLE", "price": 18, "currency": "EUR" }
] }

The price is the registration price in EUR per year — the exact number the next step must confirm.

3. Fund the wallet

Purchases debit your workspace wallet. Two ways to fund it:

  • Top up in the dashboard (Billing → Top up, card via Stripe Checkout), or
  • Pay as you go: pass a payment_method (a Stripe PaymentMethod id) or a shared_payment_token directly on the registration call — the exact price is charged, credited, and immediately debited, so no standing balance is needed.

See Payments & the wallet for the full model.

4. Register — with confirm_price

Spending is never implicit. You must echo the price you saw; if the live price differs, the call fails instead of charging you:

curl -s https://domains.ingram.tech/api/v1/domains \
  -H "authorization: Bearer $INGRAM_TOKEN" \
  -H 'content-type: application/json' \
  -H 'idempotency-key: 5f0c3a1e-registration-1' \
  -d '{"domain": "my-great-idea.com", "duration": 1, "confirm_price": 18}'

On success you get the domain and the registry status (Pending means the registry accepted and is processing — normal). On a price change you get a 409 price_changed with the current price to re-confirm; on an empty wallet a 402 insufficient_balance. Both are structured for programmatic recovery — see Errors.

Where next

  • Concepts — workspaces, wallet, tokens, and the four product surfaces.
  • Agents — the MCP server, and why the API is shaped the way it is.
  • The full REST reference is the live Swagger UI and OpenAPI spec.