Discover/BMI API
live

BMI APIrepertoire.bmi.com

Search BMI's Songview database for writers/composers and retrieve their full catalog: BMI Work IDs, co-writers, performers, IPI numbers, and affiliations.

This API takes change requests — .
Endpoint health
verified 22h ago
search_writers
get_catalog
2/2 passing latest checkself-healing
Endpoints
2
Updated
22h ago

What is the BMI API?

The BMI Repertoire API exposes 2 endpoints that cover BMI's public Songview catalog, letting you search for any registered writer or composer by name and pull their complete catalog of musical works. The search_writers endpoint returns IPI numbers, PRO affiliations, and the opaque identifiers you need to call get_catalog, which returns paginated work records including BMI Work IDs, co-writers, performers, and reconciliation status for catalogs of any size.

Try it
Writer or composer name to search for (e.g. 'Ed Sheeran', 'Taylor Swift').
Page number of search results.
Which catalog scope to search in.
api.parse.bot/scraper/fc797f45-3476-4cf2-ac70-2392382c3a89/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/fc797f45-3476-4cf2-ac70-2392382c3a89/search_writers?name=Ed+Sheeran&page=1&search_type=all' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace repertoire-bmi-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""Walkthrough: BMI Songview SDK — bounded, re-runnable; every call capped."""
from parse_apis.BMI_Songview_API import BmiSongview, SearchType, ParseError

client = BmiSongview()

# Search for writers by name — limit caps total items fetched.
for writer in client.writers.search(name="Ed Sheeran", search_type=SearchType.ALL, limit=3):
    print(writer.writer_name, writer.affiliation, writer.ipi_number)

# Drill-down: take ONE writer with .first(), then walk their works.
writer = client.writers.search(name="Ed Sheeran", limit=1).first()
if writer:
    for work in writer.works.list(search_text="Ed Sheeran", limit=3):
        print(work.title, work.bmi_work_id, work.iswc)
        for pub in work.publishers:
            print("  Publisher:", pub.name, pub.affiliation, pub.ipi_number)
        for wd in work.writer_details:
            print("  Writer:", wd.name, wd.affiliation, wd.ipi_number)

# Typed errors: wrap the fallible call, catch the specific class.
try:
    for w in client.writers.search(name="Taylor Swift", limit=2):
        print(w.writer_name, w.ipi_number)
except ParseError as e:
    print(f"error: {e}")

print("exercised: writers.search / works.list")
All endpoints · 2 totalmissing one? ·

Search for writers/composers by name in the BMI Songview database. Returns matching writers with their IPI numbers, affiliations, and opaque identifiers needed to fetch their full catalog via get_catalog.

Input
ParamTypeDescription
namerequiredstringWriter or composer name to search for (e.g. 'Ed Sheeran', 'Taylor Swift').
pageintegerPage number of search results.
search_typestringWhich catalog scope to search in.
Response
{
  "type": "object",
  "fields": {
    "page": "current page number",
    "total": "total number of matching writers",
    "writers": "array of matching writer records"
  },
  "sample": {
    "data": {
      "page": 1,
      "total": 2,
      "writers": [
        {
          "cae": "YO0HedHMatLb45JzS23DVw%3d%3d",
          "writer_id": "Ak4jiB8Q6zj%2bHuOb%2fYcyrg%3d%3d",
          "ipi_number": null,
          "affiliation": "NS",
          "part_id_sub": "YO0HedHMatLb45JzS23DVw%3d%3d",
          "writer_name": "SHEERAN ED",
          "title_sample": "TICKET IN THE RAIN"
        },
        {
          "cae": "a5SF%2bFhc4aql1sWCF7Ttng%3d%3d",
          "writer_id": "AtDsYllmwKEqNriQVP074w%3d%3d",
          "ipi_number": "583552527",
          "affiliation": "PRS",
          "part_id_sub": "YO0HedHMatLb45JzS23DVw%3d%3d",
          "writer_name": "SHEERAN ED",
          "title_sample": "THURSDAY FEAT H E R"
        }
      ]
    },
    "status": "success"
  }
}

About the BMI API

Searching for Writers

The search_writers endpoint accepts a name string (required) and returns a paginated list of matching writer records. Each record includes the writer's IPI number, their performing rights organization affiliation, and three opaque identifiers — writer_id, cae, and part_id_sub — that are required inputs for get_catalog. The total field tells you how many writers matched, which is useful when a common name returns multiple results across affiliated and unaffiliated catalogs.

Retrieving a Writer's Catalog

Once you have the identifiers from search_writers, pass writer_id, cae, and part_id_sub to get_catalog. The page_size parameter accepts exactly three values — 20, 50, or 100 — and total_pages lets you iterate through the full catalog programmatically. Each work record in the works array carries a BMI Work ID, the work title, reconciliation status, any co-writers credited, and associated performers. The response header also surfaces ipi_number, affiliation, and writer_name for confirmation that you're looking at the right catalog.

Coverage and Identifiers

The catalog reflects BMI's public Songview database, which covers works registered with BMI. The IPI number returned by both endpoints is the internationally recognized Interested Party Information number used across PROs worldwide. Co-writer records within each work allow you to trace collaborative relationships. The search_type parameter on both endpoints scopes which portion of the catalog is queried, and search_text on get_catalog lets you pass the original query string through for context when building multi-step lookup flows.

Reliability & maintenanceVerified

The BMI API is a managed, monitored endpoint for repertoire.bmi.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when repertoire.bmi.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official repertoire.bmi.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
22h ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Verify BMI Work IDs and IPI numbers for music licensing due diligence
  • Map co-writing relationships for a given composer using the co-writers field in get_catalog
  • Cross-reference a writer's PRO affiliation when clearing rights across multiple organizations
  • Build a songwriter discography page using paginated get_catalog results and total_works
  • Identify all performers associated with a specific writer's catalog
  • Check reconciliation status of works to flag unmatched or disputed registrations
  • Resolve writer name variants to canonical entries via IPI number from search_writers
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does BMI offer an official public developer API for Songview?+
BMI does not publish an official developer API for the Songview repertoire database. Access to the catalog is available through the public search interface at repertoire.bmi.com.
What does get_catalog return for each musical work?+
Each record in the works array includes the work title, BMI Work ID, reconciliation status, a list of co-writers, and associated performers. The response envelope also returns total_works, total_pages, ipi_number, affiliation, and writer_name for the writer whose catalog you requested.
Does the API return royalty payment data or performance history?+
No. The API covers catalog registration data: work titles, BMI Work IDs, co-writers, performers, IPI numbers, and affiliations. Royalty payments and performance history are not part of BMI's public Songview interface. You can fork this API on Parse and revise it to add any endpoints that surface additional public data from the source.
Are ASCAP or SESAC works included in the results?+
The database covers works registered with BMI. Works registered exclusively with ASCAP, SESAC, or other PROs are not returned. When a writer has dual or split affiliations, the affiliation field reflects what BMI's Songview reports for that IPI. You can fork this API on Parse and revise it to add endpoints targeting other PRO catalogs.
What happens when a writer name matches multiple entries in search_writers?+
The total field in the search response tells you how many records matched, and results are paginated using the page parameter. Each record carries a distinct writer_id, cae, and ipi_number, so you can disambiguate between writers who share a name before calling get_catalog.
Page content last updated . Spec covers 2 endpoints from repertoire.bmi.com.
Related APIs in MusicSee all →
musicbrainz.org API
Search MusicBrainz for artists and recordings, then fetch detailed metadata for artists, recordings, releases, and release groups, including credits, tags/genres, and track listings.
spotify.com API
Search millions of songs and artists in Spotify's catalog, then dive deep into any artist's complete discography, top tracks, fan statistics, and similar artists they're connected to. Perfect for discovering new music, researching artist backgrounds, or building personalized music recommendations.
lyrics.com API
Search and retrieve song lyrics, artist biographies, and album information across multiple genres and artists. Browse music content by artist, letter, or genre, and discover new or random songs to explore.
allmusic.com API
Search for music, browse artist biographies and discographies, and retrieve detailed album and song information all in one place. Discover new releases and access comprehensive metadata about artists and tracks.
metal-archives.com API
Search and explore music data including bands, albums, songs, and lyrics, with the ability to discover artist recommendations, view band members and discographies, and look up record label information. Get detailed information about musicians, their releases, and recommendations based on your musical interests.
guitarpro.com API
Search and retrieve guitar tabs, artist profiles, and detailed song metadata from Guitar Pro and mySongBook to find music you want to play. Get pricing information and browse the latest tabs to discover new songs across your favorite artists.
concertarchives.org API
Search for performers and their concert history to discover performance details, repertoire, and event information from Concert Archives. Find specific concerts, view performer profiles, and explore what artists have performed and when.
artsy.net API
Browse and search across 300,000+ artists to discover detailed profiles with biographies, nationalities, career insights, and artwork counts. Find artists alphabetically or by name to explore their complete creative background and body of work.