Aller au contenu

Journal des modifications

Ce qui a changé dans l’API

Chaque modification de l’API et de cette documentation, de la plus récente à la plus ancienne. Les partenaires en accès anticipé sont aussi prévenus à l’avance des changements incompatibles.

Les entrées du journal sont publiées en anglais uniquement.

  1. Modifié

    Sandbox replaced by the /test folder and the validate endpoint

    The sandbox is retired. Testing now runs against production, with a path that creates nothing:

    • SFTP. Every DDEX inbox is one login with exactly two folders. /test/<batch>/ reads and fully checks a batch (XML, the HILLS rules, the audio, artwork and video files, UPCs and ISRCs against the catalog) and writes the report next to it, /test/<batch>.report.txt and .report.json; nothing is created. /production/<batch>/ imports it. A single /test/<file>.xml or .zip is tested the same way, and any other file in /test is a connection test.
    • API. POST /ddex/validate is the test path: an .xml or a .zip, every check a delivery gets, the verdict, and no release, recording, artist, code or delivery created. Scope ddex:validate (ddex:write works too). POST /ddex and direct uploads deliver.
    • Keys. There is one kind of key, hm_live_…. Test keys (hm_test_…) are refused with 401 test_keys_retired and show as Retired under Settings → API; making one answers 400 test_keys_retired. The environment field in answers stays, always production.
    • Removed. POST /sandbox/releases/{id}/simulate, the sandbox and sandbox_expires_at fields on releases and deliveries, and the not_in_sandbox and sandbox_only errors. The sandbox reference page redirects to Test folder.
    • Reports. Every test, from SFTP, the API or the dashboard, is listed on the DDEX page in the dashboard under Test reports and kept 90 days.

    Outbound delivery has no test stores: a release is delivered to real stores only after approval.

  2. Obsolète

    The API moves to api.hillsmusic.com, the MCP server to mcp.hillsmusic.com

    The API and the MCP server have their own addresses:

    New Old (until April 30, 2027)
    API https://api.hillsmusic.com/v1 https://app.hillsmusic.com/api/v1
    MCP server https://mcp.hillsmusic.com https://app.hillsmusic.com/mcp

    API. Only the base URL changes: the same paths after /v1, the same keys, scopes, rate limits and answers. Replace https://app.hillsmusic.com/api/v1 with https://api.hillsmusic.com/v1 in your integration. URLs inside answers (such as status_url of a DDEX delivery) follow the host you called. The new host also answers CORS preflights (any origin, never cookies); keys still belong on your server, never in a web page.

    MCP server. Add https://mcp.hillsmusic.com to your AI assistant and approve the connection once, on the HILLS web app as before. It is its own OAuth authorization server (https://mcp.hillsmusic.com/.well-known/oauth-authorization-server); apps connected through the old address keep working there until the date above, and their access tokens are accepted on both addresses. The tool list is published at https://mcp.hillsmusic.com/manifest.json.

    Until April 30, 2027 the old addresses answer exactly as before, with a Deprecation header, Sunset: Fri, 30 Apr 2027 00:00:00 GMT and a Link to this entry (rel="deprecation") on every answer, so your integration can log where it still uses them. After that date they stop answering.

    A white-label portal’s own domain keeps /api/v1 as it is.

  3. Obsolète

    The old status words are removed on April 30, 2027

    What is left of the old status words is deprecated and will be removed on April 30, 2027:

    • status on releases in GET /releases and GET /releases/{id}: the old word (pending, approved, distributed, rejected, archived).
    • stores[key].state on each store in GET /releases/{id}: the old per-store word (pending, queued, sent, accepted, rejected, live, takedown).
    • status and previous_status in simulate answers of the sandbox: the old words. (The sandbox and its simulate endpoint were retired on October 12, 2026; see that entry.)
    • The old status= filter words of GET /releases: pending, rejected and distributed, accepted as aliases until then.

    Until then nothing changes: everything above keeps working. Answers that include these fields, or answer a request that uses an old filter word, carry a Deprecation header, a Sunset: Fri, 30 Apr 2027 00:00:00 GMT header and a Link to this entry (rel="deprecation"), so your integration can log where it still reads them.

    How to migrate

    Old Read instead
    status: pending release_status: in_review
    status: approved release_status: approved with delivery_state not live or partially_live
    status: distributed release_status: approved with delivery_state live or partially_live
    status: rejected release_status: changes_requested
    status: archived release_status: archived or taken_down
    stores[key].state stores[key].status (and phase)
    ?status=pending ?status=in_review
    ?status=rejected ?status=changes_requested
    ?status=distributed ?status=approved, then keep releases whose delivery_state is live or partially_live

    Every value of the new fields is listed under Statuses.

  4. Documentation

    API docs move to developer.hillsmusic.com

    The API documentation has its own site at developer.hillsmusic.com. Every page keeps its path without the old /docs prefix, and links to hillsmusic.com/docs/ redirect here. The Markdown copies of each page, llms.txt and llms-full.txt moved with it.

Prêt à vous intégrer ?

Demandez l’accès à l’API : nous vous répondons sous 1–3 business days.