# MMDC documentation > Documentation of the Markarian Multiwavelength Data Center (mmdc.am), its website and the astro-mmdc Python SDK MMDC (https://mmdc.am), the Markarian Multiwavelength Data Center, builds multiwavelength, multitemporal SEDs and light curves of blazars and of any sky position from radio to gamma rays, runs on-demand Swift UVOT/XRT analysis, and fits SSC, EIC and hadronic blazar emission models. It is used from the website or from Python with the astro-mmdc SDK (`pip install astro-mmdc`). Rules for programmatic clients (scripts, pipelines, AI agents): - Positions are ICRS right ascension and declination in degrees. - Resolve a name first: `client.catalogs.autocomplete("Mrk 421")` returns entries with name, ra, dec, refcatalog. Over raw HTTP: POST https://mmdc.am/api/autocomplete/ with {"query": "Mrk 421"} answers {"results": [...]}. astropy's SkyCoord.from_name also works. - Identify yourself. The SDK sends User-Agent astro-mmdc/; `MMDC(app="your-project")` adds an X-MMDC-Client header. Raw HTTP must send X-MMDC-Client, otherwise the modeling POSTs answer HTTP 426. - An SED request reuses any job within 2 arcsec; do not send `refresh` routinely. - Respect Retry-After, keep at most 2 jobs in flight, and wait with the header `Prefer: wait=25` (the server maximum) instead of polling in a tight loop. - Undated catalogue values carry MJD 50000 (`undated` true); they are not 1995 observations. - Cite Sahakyan et al. 2024, AJ, 168, 289 (doi:10.3847/1538-3881/ad8231). MMDC data are licensed under CC BY 4.0 and require attribution. Recipes (Python SDK, `client = MMDC(app="your-project")`): - SED: `client.sed.get(ra=..., dec=..., name=...)`, then `.between(mjd_start, mjd_end)` and `.to_csv(path)` - Light curve: `client.observations.cone_search(ra=..., dec=..., radius_arcsec=10, is_lightcurve=True)` - Model curve: `client.modeling.infer(z=..., ebl=True, model_type="SSC", parameters={...})` - Fit: `client.modeling.submit_batch(csv, z=..., ebl=True, model_type="SSC")`, then `client.modeling.wait_for_batch(id)` - Swift: `client.madam.analyze(ra=..., dec=..., mjd_start=..., mjd_end=..., instrument="uvot")` The full guide for scripts and agents, with raw HTTP examples and limits, is the first page below. ## Agents and scripts - [Scripts and AI agents](https://docs.mmdc.am/agents/index.md) ## Python SDK - [Getting started](https://docs.mmdc.am/getting-started/index.md) - [Advanced](https://docs.mmdc.am/guides/advanced/index.md) - [Blazar emission modeling](https://docs.mmdc.am/guides/modeling/index.md) - [Observations](https://docs.mmdc.am/guides/observations/index.md) - [Results & errors](https://docs.mmdc.am/guides/results-errors/index.md) - [SED data](https://docs.mmdc.am/guides/sed/index.md) - [Swift UVOT/XRT analysis](https://docs.mmdc.am/guides/swift/index.md) - [API reference](https://docs.mmdc.am/api/index.md) ## Website - [Fitting your SED](https://docs.mmdc.am/web/fitting/index.md) - [Blazar SED modeling](https://docs.mmdc.am/web/modeling/index.md) - [Getting SED data](https://docs.mmdc.am/web/sed-data/index.md) ## Citing - [Citing](https://docs.mmdc.am/citing/index.md)