Skip to main content

Python Namecheap API wrapper for simple domain name registration and management.

NOTE: you will need API key from Namecheap to use this module (see below).

Overview

This is work in progress. Official API docs: https://www.namecheap.com/support/api

For now I’m trying not to use anything outside the standard library. Most methods are more or less well-documented, so don’t be shy to use help(). Type hints (PEP 484) are available for every method. Method names are NOT in 100% match with those from Namecheap, but they are more pythonic and/or hopefully make more sense.

Features

  • domain registration/renewal

  • domain availability check

  • DNS updates

  • WHOIS information updates

  • get your domain’s information

  • get a list of your Namecheap domains

  • set/remove registrar lock

… and more.

Namecheap API

Namecheap offers two API endpoints: sandbox (for development & testing) and production (for real world). You can sign up for a free sandbox account at https://www.sandbox.namecheap.com/ and activate API access at https://ap.www.sandbox.namecheap.com/Profile/Tools/ApiAccess

Make sure to add your public IP address in Whitelisted IPs section.

Keep in mind that sandbox domains are not ‘real’, i.e. they exist only in Namecheap sandbox (not on the actual Web). With that you may be able to see google.com as available for registration. At the same time, you will need to make sure to register your ‘virtual’ domains if you want to test domain-specific options, such as renewal, DNS updates, etc.

Installation

$ pip install namecheapapi

Example usage

# Initialize API
>>> from namecheapapi import DomainAPI
>>> api = DomainAPI(
...    api_user='api_user',
...    api_key='api_key,
...    username='username',  # usually the same as api_user
...    client_ip='your IP address',
...    sandbox=True,  # recommended for testing
...    coupon='coupon'  # optional
...)
>>>

# Check availability of google.com
>>> api.check('google.com')
{'google.com': False}

# Check multiple domains at once
>>> api.check(['asdfghjhgfdsa.com', 'google.com'])
{'google.com': False, 'asdfghjhgfdsa.com': True}

# Register a domain
>>> address = {
...    'FirstName': 'Peter',
...    'LastName': 'Griffin',
...    'Address1': '31 Spooner St.',
...    'City': 'Quahog',
...    'StateProvince': 'RI',
...    'PostalCode': '00093',
...    'Country': 'US',
...    'Phone': '+1.123456789',
...    'EmailAddress': 'peter@griffin.tv'
...}
>>> api.register('asdfghjhgfdsa.com', address=address)
{'NonRealTimeDomain': False, 'TransactionID': 1216215, 'WhoisGuardEnabled': False, 'Domain': 'asdfghjhgfdsa.com', 'OrderID': 823656, 'Success': True, 'ChargedAmount': 10.87, 'ID': 117154}

# Custom query (a raw XML response is returned)
>>> q = api.raw_query(command='namecheap.domains.transfer.getList', query={})
>>> print(q)
<?xml version="1.0" encoding="utf-8"?>
<ApiResponse Status="OK" xmlns="http://api.namecheap.com/xml.response">
  <Errors />
  <Warnings />
  <RequestedCommand>namecheap.domains.transfer.getlist</RequestedCommand>
  <CommandResponse Type="namecheap.domains.transfer.getList">
    <TransferGetListResult />
    <Paging>
      <TotalItems>0</TotalItems>
      <CurrentPage>1</CurrentPage>
      <PageSize>20</PageSize>
    </Paging>
  </CommandResponse>
  <Server>PHX01SBAPI01</Server>
  <GMTTimeDifference>--4:00</GMTTimeDifference>
  <ExecutionTime>0.01</ExecutionTime>
</ApiResponse>

Implemented methods

  • domains.register (namecheap.domains.create)

  • domains.check (namecheap.domains.check)

  • domains.get_info (namecheap.domains.getInfo)

  • domains.get_list (namecheap.domains.getList)

  • domains.get_tld_list (namecheap.domains.getTldList)

  • domains.renew (namecheap.domains.renew)

  • domains.reactivate (namecheap.domains.reactivate)

  • domains.get_lock (namecheap.domains.getRegistrarLock)

  • domains.set_lock (namecheap.domains.setRegistrarLock)

  • domains.get_nameservers (namecheap.domains.dns.getList)

  • domains.set_nameservers (namecheap.domains.dns.setCustom, namecheap.domains.dns.setDefault)

  • domains.get_contacts (namecheap.domains.getContacts)

  • domains.set_contacts (namecheap.domains.setContacts)

Next up

  • domains.create_nameserver (namecheap.domains.ns.create)

  • domains.delete_nameserver (namecheap.domains.ns.delete)

  • domains.update_nameserver (namecheap.domains.ns.update)

  • domains.get_nameserver_info (namecheap.domains.ns.getInfo)

  • domains.get_host_records (namecheap.domains.dns.getHosts)

  • domains.set_host_records (namecheap.domains.dns.setHosts)

Testing

(does have one dependency)

  1. Install nosetests (pip install nose)

  2. Create config.py in namecheapapi/tests/ directory, fill it in:

  • API_KEY = ‘string’ – API key that you got from Namecheap

  • API_USER = ‘string’ – your Namecheap username

  • USERNAME = ‘string’ – in most cases it would be your Namecheap username

  • CLIENT_IP = ‘string’ – your public IP address (MUST be whitelisted in your Namecheap account)

  • SANDBOX = True (recommended!)

  • COUPON = ‘string’ – coupon code if you have any, ‘’ otherwise

  • DOMAIN = ‘string’ – a domain name you ALREADY HAVE in your Namecheap account

  1. Run nosetests /path/to/namecheapapi/dir

Changelog

0.2.1

  • minor bugfixes

0.2

  • documentation update

  • domains.get_contacts/set_contacts methods added

0.1.1

  • First published working version.

Author

Alex Sanchez.

Metadata

Release files for namecheapapi 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for namecheapapi 0.2.1
File Size Uploaded Provenance
namecheapapi-0.2.1.tar.gz 10.7 kB Without provenance Details

Release files / namecheapapi-0.2.1.tar.gz

Download URL namecheapapi-0.2.1.tar.gz
Size 10.7 kB
Tags Source
SHA-256 checksum
How to use checksums
127eebbc0dea87e9d317cf2fa62a4beba0be64c067ae08e3607284f5ae156482
BLAKE2b-256 checksum
How to use checksums
b0924d57578cf5747e42ce2a66da56746a9aa5dd1c2f7a48314418ee840a7b59
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for namecheapapi 0.2.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page