Register your own domain for branded short URLs. You can register distinct domains (e.g., mycompany.com) or specific subdomains (e.g., go.mycompany.com).
DNS Configuration Required : After adding a branded domain, you must configure DNS records to point to Jmpy.me servers. See the verification instructions in the response.
Why use branded domains?
Full brand control : Your company domain on every link
Trust : Users see your domain, increasing click-through rates
Custom alias scoping : Same alias can exist on different branded domains
Branded Subdomains : You can explicitly register branded subdomains like go.mycompany.com just like you would a root domain.
Professional appearance : Enterprise-grade link management
Body Parameters
The domain name to register. Requirements :
3-255 characters
Valid domain format
Cannot use jmpy.me or subdomains of it
You must own or control this domain
Examples : mycompany.com, go.mycompany.com, links.mysite.org
Optional display name for the domain. Constraints : 1-100 characters
Optional description for the domain. Constraints : Max 500 characters
Whether this is a dedicated root domain (requires additional DNS setup).
Response
Unique identifier for the branded domain (UUID).
The registered domain name.
Whether the domain is verified via DNS.
DNS verification details including:
cname_target: The CNAME record target
txt_record: The TXT verification record
instructions: Step-by-step verification guide
ISO 8601 timestamp of creation.
Request Examples
cURL
Node.js
TypeScript
Python
PHP
Go
Java
curl -X POST "https://jmpy.me/api/v1/domains/branded" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"domain": "go.mycompany.com",
"name": "MyCompany Short Links",
"description": "Official company link shortener"
}'
const fetch = require ( 'node-fetch' );
const response = await fetch ( 'https://jmpy.me/api/v1/domains/branded' , {
method: 'POST' ,
headers: {
'Authorization' : 'Bearer YOUR_API_KEY' ,
'Content-Type' : 'application/json'
},
body: JSON . stringify ({
domain: 'go.mycompany.com' ,
name: 'MyCompany Short Links' ,
description: 'Official company link shortener'
})
});
const data = await response . json ();
console . log ( 'DNS Setup Required:' , data . data . verification );
import axios from 'axios' ;
const response = await axios . post (
'https://jmpy.me/api/v1/domains/branded' ,
{
domain: 'go.mycompany.com' ,
name: 'MyCompany Short Links' ,
description: 'Official company link shortener'
},
{ headers: { 'Authorization' : 'Bearer YOUR_API_KEY' } }
);
console . log ( 'DNS Setup Required:' , response . data . data . verification );
import requests
url = "https://jmpy.me/api/v1/domains/branded"
headers = { "Authorization" : "Bearer YOUR_API_KEY" }
data = {
"domain" : "go.mycompany.com" ,
"name" : "MyCompany Short Links" ,
"description" : "Official company link shortener"
}
response = requests.post(url, headers = headers, json = data)
result = response.json()
print ( f "Setup CNAME to: { result[ 'data' ][ 'verification' ][ 'cname_target' ] } " )
<? php
$client = new GuzzleHttp\ Client ();
$response = $client -> request ( 'POST' , 'https://jmpy.me/api/v1/domains/branded' , [
'headers' => [
'Authorization' => 'Bearer YOUR_API_KEY' ,
'Content-Type' => 'application/json'
],
'json' => [
'domain' => 'go.mycompany.com' ,
'name' => 'MyCompany Short Links' ,
'description' => 'Official company link shortener'
]
]);
?>
package main
import (
" bytes "
" encoding/json "
" net/http "
)
func main () {
url := "https://jmpy.me/api/v1/domains/branded"
data := map [ string ] string {
"domain" : "go.mycompany.com" ,
"name" : "MyCompany Short Links" ,
"description" : "Official company link shortener" ,
}
jsonData , _ := json . Marshal ( data )
req , _ := http . NewRequest ( "POST" , url , bytes . NewBuffer ( jsonData ))
req . Header . Add ( "Authorization" , "Bearer YOUR_API_KEY" )
req . Header . Add ( "Content-Type" , "application/json" )
http . DefaultClient . Do ( req )
}
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.URI;
import java.net.http.HttpResponse;
String jsonInfo = """
{
"domain": "go.mycompany.com",
"name": "MyCompany Short Links",
"description": "Official company link shortener"
}""" ;
HttpClient client = HttpClient . newHttpClient ();
HttpRequest request = HttpRequest . newBuilder ()
. uri ( URI . create ( "https://jmpy.me/api/v1/domains/branded" ))
. header ( "Authorization" , "Bearer YOUR_API_KEY" )
. header ( "Content-Type" , "application/json" )
. POST ( HttpRequest . BodyPublishers . ofString (jsonInfo))
. build ();
client . send (request, HttpResponse . BodyHandlers . ofString ());
Response Examples
201 Created
409 Domain Exists
400 Invalid Domain
403 Plan Limit
403 Feature Disabled
{
"success" : true ,
"data" : {
"id" : "990e8400-e29b-41d4-a716-446655440000" ,
"domain" : "go.mycompany.com" ,
"name" : "MyCompany Short Links" ,
"is_verified" : false ,
"verification" : {
"cname_target" : "redirect.jmpy.me" ,
"txt_record" : "jmpy-verify=abc123xyz789" ,
"instructions" : [
"1. Go to your DNS provider" ,
"2. Add a CNAME record: go.mycompany.com → redirect.jmpy.me" ,
"3. Add a TXT record: _jmpy.go.mycompany.com → jmpy-verify=abc123xyz789" ,
"4. Wait for DNS propagation (up to 48 hours)" ,
"5. Use the verify endpoint to complete setup"
]
},
"url_count" : 0 ,
"created_at" : "2024-01-15T10:30:00.000Z"
}
}
{
"success" : false ,
"error" : {
"code" : "DOMAIN_EXISTS" ,
"message" : "This domain is already registered"
}
}
{
"success" : false ,
"error" : {
"code" : "INVALID_INPUT" ,
"message" : "Cannot use jmpy.me domain as branded domain"
}
}
{
"success" : false ,
"error" : "You have reached the maximum number of branded domains for your plan" ,
"code" : "PLAN_LIMIT_EXCEEDED" ,
"status" : 403
}
{
"success" : false ,
"error" : "Branded domains is not available on your \" Business \" plan" ,
"code" : "FEATURE_DISABLED" ,
"status" : 403 ,
"details" : {
"feature" : "Branded domains" ,
"planName" : "Business" ,
"upgradeUrl" : "/pricing"
}
}
DNS Setup Guide
Add CNAME Record
Point your subdomain to Jmpy.me: Type Name Value CNAME go redirect.jmpy.me
For root domains, use an ALIAS or ANAME record if your DNS provider supports it.
Add TXT Verification Record
Prove domain ownership: Type Name Value TXT _jmpy.go jmpy-verify=abc123xyz789
The exact value is provided in the API response.
Wait for DNS Propagation
DNS changes can take up to 48 hours to propagate globally.
You can check propagation at whatsmydns.net .
Verify Domain Complete domain verification after DNS setup
List Domains View all your registered domains
Create Short URL Create links on your branded domain
Delete Domain Remove a registered domain