Transpose key by interval calculator
Transpose C Am F G up a perfect fifth and you get G Em C D: enter a key or a progression, choose an interval by name or in semitones, and read the new key and every new chord. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Source
- C Am F G
- Interval
- P5
- Interval name
- perfect fifth
- Semitones
- 7
- Direction
- up
- Prefer
- auto
Songwriters, arrangers, choir directors, and session players constantly need the same chart in a new key without rewriting every chord by hand. This transpose key by interval calculator accepts a single key root (C major, Am, Bb) or a full chord progression, applies a named musical interval such as a perfect fifth or major third—or an integer semitone offset—and returns the new key root plus quality names for every chord. Slash bass notes move with the same interval, quality suffixes stay intact, and spelling can prefer sharps, flats, or an automatic enharmonic choice.
What key and progression transposition means
Transposing a key means moving every pitch class of a tonal center by a fixed interval so the song sits higher or lower while preserving relative harmony. When the source is a single root such as C or Bb, the calculator reports the new key root after the chosen interval—perfect fifth up from C is G, major second down from Bb is Ab when flats are preferred.
When the source is a progression written as chord symbols, each token is parsed into a root letter with optional sharp or flat, a quality suffix (m, 7, maj7, sus4, dim, and free-form text after the root), and an optional slash bass. Only the root and bass pitch classes advance by the interval modulo twelve; the quality string is copied unchanged so Am7 stays a minor-seventh quality on the new root.
Named intervals follow standard music theory: m2 and M2 for seconds, m3 and M3 for thirds, P4 and P5 for perfect fourth and fifth, A4 or tritone or d5 for six semitones, m6 through M7 for sixths and sevenths, and P8 for the octave. Integer semitones are accepted when you already know the half-step distance from a capo chart or MIDI offset. Direction defaults to up for named intervals; pass direction down or a negative integer to descend.
Input contract, spelling, and error behaviour
Source may be a string key or progression (spaces, commas, or pipes as separators) or an array of chord strings, up to sixty-four tokens. Examples: C major, Am, C Am F G, Bbmaj7 Em7 Am7 D7, C/E F G. Interval accepts short codes (P5, M3, m2, TT), full English names (perfect fifth, major third, tritone), optional up or down prefixes, or an integer from negative forty-eight to forty-eight.
Auto keeps flat spellings when the source used flats or the shift is downward; otherwise it prefers sharps. Optional direction forces up or down independently of the interval label. Non-integer numeric intervals such as one point five also fail, because pitch-class transposition is defined in whole semitones.
Round-trip checks are easy: transpose up by an interval and down by the same name to recover the original progression when enharmonic preference is held constant.
Who transposes by interval, and when
Worship teams and cover bands keep one master chart and generate singer-friendly keys before rehearsal instead of retyping every bar. Music teachers assign interval-transposition drills and mark answers against a deterministic oracle that never confuses a minor third with a major third. MIDI and DAW utilities convert a named interval the producer typed in plain language into a semitone offset and a preview progression before applying a pitch-shift plugin.
What you can do with it
Setlist and chart re-keying
Paste a progression, choose perfect fourth or fifth for vocal range, and export the new roots and qualities into the band chart.
App and DAW helpers
Convert a user-typed interval name into semitones and a preview progression before applying pitch shift or MIDI transpose.
FAQ
How do I transpose a key by a perfect fifth?
Send source as the key or progression (for example C Am F G) and interval as P5 or perfect fifth.
Can I transpose a full chord progression at once?
Yes. Pass multiple chords in source separated by spaces, commas, or pipes, or pass an array of symbols. Each token is transposed by the same interval and listed in items.
What interval names are accepted?
Short codes such as m2, M2, m3, M3, P4, TT, P5, m6, M6, m7, M7, P8; full names like major third or perfect fifth; or integer semitones from -48 to 48.
How are sharps and flats chosen?
Set prefer to sharps or flats to force spelling. Auto keeps flats when the source used flats or the shift is down; otherwise it prefers sharps.
Is a slash chord like C/E transposed too?
Yes. The bass note after the slash moves by the same interval as the root, and the chord quality is copied unchanged, so a minor seventh chord stays a minor seventh on its new root.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/hobby/music-transpose-key \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"source":"C Am F G","interval":"P5"}'const res = await fetch("https://api.kit.forhosting.com/hobby/music-transpose-key", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"source": "C Am F G",
"interval": "P5"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/music-transpose-key",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"source": "C Am F G",
"interval": "P5"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/music-transpose-key", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"source":"C Am F G","interval":"P5"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"source":"C Am F G","interval":"P5"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/music-transpose-key", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"source": "C Am F G",
"interval": "P5"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.music_transpose_key",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
What key and progression transposition means
The response lists every item with input root, quality name, new root, new quality, and the full transposed symbol, plus a joined transposed_progression string ready to paste into a chart.
Input contract, spelling, and error behaviour
POST JSON with required source and interval. Optional prefer controls enharmonic spelling: sharps, flats, or auto. Missing source or interval, empty tokens, unrecognized roots, and unknown interval names fail with invalid_input and are not billed. On success the body includes source, interval label, interval_name, signed semitones, direction, prefer, count, source_key_root, new_key_root, items array with root and quality fields, transposed_progression, and method pitch_class_mod12_interval.
Where a key-by-interval transpose API earns its keep
Chord-chart websites and mobile setlist apps need a small parse endpoint that returns structured new_root and new_quality fields for rendering, not only a single opaque string. Unlike a single-note transpose tool that only takes a raw semitone count, this calculator is built for the search intent transpose key by interval: multi-chord progressions, named intervals, and explicit root and quality names in the response so UI code can label columns without re-parsing symbols.
Integration use cases
Classroom interval drills
Ask students to transpose C Am F G by a major second or minor third and auto-grade against the structured new_root fields.
Technical questions
What does the transpose key by interval calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.