Developers

HumMatch Partner API

The HumMatch Partner API exposes the same vocal-range matching logic that powers hummatch.me: normalize a singer’s range or hum profile, score how well a specific catalog song fits it, and find shared-range song candidates for a small group. It is stateless — every call is a real-time computation over data you send us plus a read-only catalog lookup, nothing is stored on our side beyond the API key itself.

Rate limits

Sandbox keys: 30 requests/minute by default.

Need a live key or a higher limit? Contact HumMatch and mention API access.

1. Get a sandbox key

No signup form, no approval wait — POST /api/v1/sandbox-key issues a key instantly. The full key is only ever shown in this one response, so save it right away.

curl -X POST https://hummatch.me/api/v1/sandbox-key \
  -H "Content-Type: application/json" \
  -d '{"email":"you@example.com","name":"Your Company"}'

Response:

{
  "apiKey": "hm_sandbox_3f9a1c2b7d8e4f5061a2b3c4d5e6f708",
  "keyPrefix": "hm_sandbox_3",
  "mode": "sandbox",
  "rateLimitPerMinute": 30
}

Every call below sends that key back as the X-API-Key header.

2. Normalize a vocal profile

POST /api/v1/vocal-profile turns a range (note names or MIDI numbers) into a normalized profile you can reuse in the next two calls.

curl -X POST https://hummatch.me/api/v1/vocal-profile \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $API_KEY" \
  -d '{"rangeLow":"D3","rangeHigh":"C5"}'

3. Score a specific song against that profile

GET /api/v1/songs/{slug}/fittakes a real catalog slug and a URL-encoded profile, and returns a real match score plus the same “why it fits” explanation HumMatch shows on the site. This example uses a real slug from the live catalog, love-is-a-game-adele.

curl -G https://hummatch.me/api/v1/songs/love-is-a-game-adele/fit \
  -H "X-API-Key: $API_KEY" \
  --data-urlencode 'profile={"rangeLow":"D3","rangeHigh":"C5"}'

4. Find shared-range songs for a group

POST /api/v1/group-fittakes 2+ profiles and returns the group’s shared vocal range plus ranked candidate songs — the same logic behind HumMatch’s SquadMatch feature, run entirely in-memory against the profiles you send. No group is created on our side.

curl -X POST https://hummatch.me/api/v1/group-fit \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $API_KEY" \
  -d '{"profiles":[{"id":"singer-1","rangeLow":"C3","rangeHigh":"E4"},{"id":"singer-2","rangeLow":"A3","rangeHigh":"G5"}]}'

Full API reference

All four endpoints, request/response schemas, and more examples are documented as an OpenAPI 3.0 spec at /openapi.yaml. Import it directly into Postman, Insomnia, or any OpenAPI-aware client.