Steps to manage dns records in DNSMadeEasy with REST API
Authentication Header
The following Request Headers are required by refering to the API Document
- x-dnsme-apiKey – The API Key for your account
- x-dnsme-requestDate – Standard HTTP-formatted date. This date is used to protect against falsified requests played back at a future time.
- x-dnsme-hmac – HMAC hash of value of the x-dnsme-requestDate field
Login to https://cp.dnsmadeeasy.com to get the API Key

Prepare a PowerShell Function to generate the Authentication Header
function Get-DnsMadeEasyHeader {
    
    #Replace the APIKey & SecretKey with the Value from your account
    $APIKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    $secretKey = "XXXXXXXXXXXXXXXXXXXXXXXXXXXX"
	$Date = ([DateTime](Get-Date).ToUniversalTime()).ToString("ddd, dd MMM yyyy HH:mm:ss 'GMT'")
	$HMACSHA1 = New-Object System.Security.Cryptography.HMACSHA1
	$HMACSHA1.Key = [System.Text.Encoding]::ASCII.GetBytes($secretKey)
	$HMACHash = ([System.BitConverter]::ToString($HMACSHA1.ComputeHash([Text.Encoding]::ASCII.GetBytes($Date))) -Replace "-", "").ToLower()
	$Headers = @{ 'x-dnsme-apiKey' = $APIKey
	              'x-dnsme-requestDate' = $Date
	              'x-dnsme-hmac' = $HMACHash
                  'ContentType' = "application/json"}
	Return $Headers
}List All Domains Registered
List all domains registered in our DnsMadeEasy Account
#Get All Domain Registered
$URI = "https://api.dnsmadeeasy.com/V2.0/dns/managed"
$Response = Invoke-RestMethod -Uri $URI -Headers (Get-DnsMadeEasyHeader)-Method Get 
$Response.data | Select Name, ID
Output
name                   id
----                   --
aventislab.com    xxxxxxx
aventislab.info   xxxxxxx
aventistech.com   xxxxxxx
powershell365.com xxxxxxx
yongkw.com        xxxxxxx
List All Records for Particular Domain
List all records, like A, MX, TXT and others for a particular domain, like yongkw.com
#List Records for 1 Domain
$DomainName = "YongKW.com"
$DomainID = ($Response.data | ? Name -like $DomainNAme).id 
$DNS_Records = Invoke-RestMethod -Uri https://api.dnsmadeeasy.com/V2.0/dns/managed/$DomainID/records -Headers (Get-DnsMadeEasyHeader) -Method Get
#Output of All Records 
$DNS_Records.data | Select ID,Name, Type, Value
Output
       id name  type value         
       -- ----  ---- -----         
111555619       MX   mail          
107390283       A    146.66.105.253
111643122       TXT  "1234"        
111555587 mail  A    121.121.43.51 
107870636 my    A    121.121.43.52 
108219864 uat   A    47.254.232.92 
108854884 unifi A    121.121.43.52 
Create a New Record
Create a new TXT record with value = "1234567890" in yongkw.com
#Create a New Record
$DomainName = "YongKW.com"
$DomainID = ($Response.data | ? Name -like $DomainNAme).id 
#Data Declare here need to be converted to json format later
$Body = @{
    name = ""
    type = "TXT"
    value = "1234567890"
    id = $ID
    gtdLocation = 'DEFAULT'
    ttl = 86400
}
Invoke-RestMethod -Uri https://api.dnsmadeeasy.com/V2.0/dns/managed/$DomainID/records -Headers (Get-DnsMadeEasyHeader) -Body ($Body | ConvertTo-Json) -Method Post 
#Verify the DNS record is created successfully
$DNS_Records = (Invoke-RestMethod -Uri https://api.dnsmadeeasy.com/V2.0/dns/managed/$DomainID/records -Headers (Get-DnsMadeEasyHeader) -Method Get).Data
$DNS_Records | ? Type -Like "TXT" | Select Name, Type, Value
Output
name type value 
---- ---- ----- 
     TXT  "1234"
Update DNS Record
Update TXT record with new value
$DNS_Records = (Invoke-RestMethod -Uri https://api.dnsmadeeasy.com/V2.0/dns/managed/$DomainID/records -Headers (Get-DnsMadeEasyHeader) -Method Get).Data
#Search for the DNS record need to be updated
$ID = ($DNS_Records | Where-Object {($_.type -eq "TXT")}).ID
$New_Value = "12345"
$Body = @{
    name = ""
    type = "TXT"
    value = $New_Value
    id = $ID
    gtdLocation = 'DEFAULT'
    ttl = 86400
}
#Update DNS Record
Invoke-RestMethod -Uri https://api.dnsmadeeasy.com/V2.0/dns/managed/$DomainID/records/$ID -Headers (Get-DnsMadeEasyHeader) -Body ($Body | ConvertTo-Json) -Method Put
#Verify TXT record is updated
$DNS_Records = (Invoke-RestMethod -Uri https://api.dnsmadeeasy.com/V2.0/dns/managed/$DomainID/records -Headers (Get-DnsMadeEasyHeader) -Method Get).Data
$DNS_Records | Where-Object {($_.type -eq "TXT")}
Output
name type value  
---- ---- -----  
     TXT  "12345"
Delete DNS Record
Delete the TXT record
$DNS_Records = (Invoke-RestMethod -Uri https://api.dnsmadeeasy.com/V2.0/dns/managed/$DomainID/records -Headers (Get-DnsMadeEasyHeader) -Method Get).Data
#Search for the DNS record need to be deleted 
$ID = ($DNS_Records | Where-Object {($_.type -eq "TXT") -and ($_.value -cmatch "1234")}).ID
#Delete the DNS record
Invoke-RestMethod -Uri https://api.dnsmadeeasy.com/V2.0/dns/managed/$DomainID/records/$ID -Headers (Get-DnsMadeEasyHeader) -Method Delete
