bmiapi
DocsPricingStatus

Quickstart

Zero to your first work record. Three steps, one call.

  1. Get your key

    Checking your session…

  2. Copy this call
    curl -X POST https://bmiapi.com/api/v1/title-search \
      -H "Authorization: Bearer bmi_YOUR_KEY" \
      -H "Content-Type: application/json" \
      -d '{"title":"HOTEL CALIFORNIA"}'

    Swap bmi_YOUR_KEY for your API key.

  3. Read the record

    A title search returns the matching work records — each with writers and their IPIs, the split table, and publisher contacts — paginated up to 100 per page. Popular titles usually return one; an unmatched title returns an empty results array.

    HOTEL CALIFORNIA

    BMI 473721ISWC T0700033161
    Writers
    DON HENLEYASCAP
    IPI 00023680534
    GLENN FREYASCAP
    IPI 00023680631
    DON FELDERBMI
    IPI 00052075893
    Splits
    ASCAP66.67%
    BMI33.33%
    Publisher contacts
    CASS COUNTY MUSICrights@casscountymusic.example
    (310) 555-0142
    RED CLOUD MUSICclearance@redcloudmusic.example
    IPI
    The writer's global interested-party number — the join key across PROs.
    Splits
    Ownership percentages; they don't always sum to 100 by design.
    Publisher contacts
    Who to email or call to clear the work.

Error codes

Product errors return { error: { code, message, requestId } }. Branch on code, not the message.

CodeHTTPWhat your script should do
VALIDATION400The request body didn't match the endpoint schema.When present, fix the field named in the issues array; otherwise correct the request JSON, then resend.
INVALID_KEY401The API key is invalid, revoked, or expired.Stop retrying — check the Authorization header or rotate the key.
QUOTA_EXCEEDED429The day's uncached-search quota is used up.Back off until retryAfterSeconds (resets 00:00 UTC), or upgrade.
RATE_LIMITED429Too many requests, or over 25 pending searches at once.Wait retryAfterSeconds and retry; keep concurrency in check.
IDEMPOTENCY_CONFLICT409An idempotency key was reused with a different body.Reuse a key only for the identical request; mint a new one otherwise.
NOT_FOUND404The endpoint path or job id doesn't exist.Check the URL — don't retry the same path.
FORBIDDEN403This key isn't permitted to do that.Don't retry — the operation isn't available to this key.
UPSTREAM_REJECTED503BMI Songview rejected the automated browser session.Retry with backoff; cached results still work. Watch /status.
TIMEOUT504BMI Songview didn't finish before the deadline.Stop polling this job — TIMEOUT is terminal. Start a new request with backoff.
SCRAPE_ERROR502The Songview lookup failed upstream.Retry with backoff; nothing was charged against your quota.

Recipes

Complete runnable scripts for the recurring jobs — landing soon.

Clear a 40-track catalogsoon

Loop a track list, write writers, splits, and contacts to a CSV.

Reconcile a quarterly statementsoon

Match each royalty line to its work by ISWC and flag mismatches.

Enrich a writer rostersoon

Resolve every writer to an IPI + affiliation, handle collisions.

Detect split gapssoon

Read warnings and shares-sum signals to catch missing splits.