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.