# //SCHEMA > //SCHEMA is a multitenant DDEX ingestion and music catalog. Labels deliver ERN XML and media over SFTP (in either order); //SCHEMA stores releases, resources, parties and credits per catalog and exposes them through a GraphQL API authenticated with scoped API keys. The GraphQL endpoint is https://api.schema.fm/graphql. Every page below is Markdown. For exact field shapes, read https://docs.schema.fm/schema.graphql — every type and field carries its documentation. An agent with MCP support can instead connect to //SCHEMA's MCP server, which serves these docs and the catalog as tools: https://docs.schema.fm/guides/ai-agents.md ## Tutorials - [Quickstart](https://docs.schema.fm/tutorials/quickstart.md): Get an API key, make your first request, and read a release with its tracks and credits — in about ten minutes. - [Publish a release](https://docs.schema.fm/tutorials/publish-a-release.md): Build a single from nothing through the API — draft it, credit the artist, name the label, upload the audio and the cover, and publish it into your catalog. ## How-to guides - [Authenticate requests](https://docs.schema.fm/guides/authentication.md): Send an API key with every request, keep it on the server, and choose the smallest set of scopes that works. - [Paginate and search](https://docs.schema.fm/guides/pagination-and-search.md): Walk an entire catalog page by page, search by title, artist or label, and load tracks for many releases in one request. - [Work with localized metadata](https://docs.schema.fm/guides/localized-metadata.md): Pick the right title or artist name for a language, script or territory, and read territory-specific credits and copyright notices. - [Stream media](https://docs.schema.fm/guides/streaming-media.md): Pick an encoding, mint a short-lived signed URL for it, and pull it into your pipeline — or play a preview in a browser. - [Size cover art](https://docs.schema.fm/guides/artwork-sizes.md): Define the sizes your apps draw covers at, then fetch any cover at one of them by name. - [Upload media](https://docs.schema.fm/guides/uploading-media.md): Hash a file, get a presigned upload URL, PUT the bytes directly to storage and attach them to a resource — with complete Node.js code. - [Deliver DDEX through the API](https://docs.schema.fm/guides/delivering-ddex.md): Deliver an ERN message and its media files over HTTPS instead of SFTP — in any order — and track the delivery until it goes live. - [Deliver DDEX over SFTP](https://docs.schema.fm/guides/delivering-ddex-over-sftp.md): Upload an ERN message and its media to your organization's own SFTP endpoint — one directory per delivery, picked up as soon as each file is closed. - [Manage API keys](https://docs.schema.fm/guides/managing-api-keys.md): Mint keys with the right scopes, list them, rotate them without downtime, and revoke one that has leaked. - [Manage members](https://docs.schema.fm/guides/managing-members.md): Add people to your organization, change their roles, reset passwords, and remove access. - [Manage SFTP delivery accounts](https://docs.schema.fm/guides/sftp-delivery-accounts.md): Issue SFTP logins to the labels and distributors who deliver to you, authorize their SSH keys, rotate keys, and revoke access. - [Receive webhooks](https://docs.schema.fm/guides/receiving-webhooks.md): Create an endpoint, verify every delivery's signature, handle retries and duplicates, and rotate the secret without downtime. - [Use //SCHEMA from an AI agent](https://docs.schema.fm/guides/ai-agents.md): Connect Claude Code or another MCP client to your catalog, choose a key for it, and point coding agents at documentation they can read. ## Reference - [API overview](https://docs.schema.fm/reference/index.md): The //SCHEMA GraphQL endpoint — how to send requests, how responses are shaped, and the limits that apply. - [Authentication and scopes](https://docs.schema.fm/reference/authentication.md): API keys, sessions, the six scopes, and which operation requires which. - [Errors](https://docs.schema.fm/reference/errors.md): How errors are returned, what partial responses look like, and the errors you are most likely to meet. - [Wire values](https://docs.schema.fm/reference/wire-values.md): Every value a string-typed enumeration can take — release states, resource states, message statuses, delivery outcomes, roles and scopes. - [Webhook events](https://docs.schema.fm/reference/webhook-events.md): Every event a webhook endpoint can receive, the envelope it arrives in, and the headers it is signed with. - [Schema (SDL)](https://docs.schema.fm/reference/schema.md): The complete //SCHEMA GraphQL schema in SDL, for code generation and offline validation. - [GraphQL schema](https://docs.schema.fm/schema.graphql): the SDL, every type and field documented ## Learn - [Catalogs and tenancy](https://docs.schema.fm/explanation/catalogs-and-tenancy.md): Why every credential is bound to one catalog, why no operation takes a catalog id, and why your data is never mixed with anyone else's. - [Release lifecycle](https://docs.schema.fm/explanation/release-lifecycle.md): The four release states — draft, pending, active, withdrawn — how a release moves between them, and which queries see it in each. - [Out-of-order delivery](https://docs.schema.fm/explanation/out-of-order-delivery.md): Why the message and its media can arrive in any order, how //SCHEMA matches them up, and why a resource can exist before its file. - [How webhooks are delivered](https://docs.schema.fm/explanation/webhook-delivery.md): Why an event is always readable by the time it arrives, why it may arrive twice or out of order, why payloads are thin, and what happens when your receiver is down. - [Content-addressed media](https://docs.schema.fm/explanation/content-addressed-media.md): Why files are identified by their SHA-256, why uploads declare a hash first, and why a file //SCHEMA has seen before uploads instantly. - [Territories and languages](https://docs.schema.fm/explanation/territories-and-languages.md): Why //SCHEMA keeps every variant of a title or credit, why "no territory" is not the same as "Worldwide", and how territory filters resolve. - [DDEX vocabularies](https://docs.schema.fm/explanation/ddex-vocabularies.md): What DDEX allowed-value sets are, why //SCHEMA accepts values outside them, and how to offer the right values in your own UI. ## Optional - [Everything in one file](https://docs.schema.fm/llms-full.txt)