{"openapi":"3.1.0","info":{"title":"Atlasemoji API","version":"0.4.0","summary":"Manifest-first geospatial storytelling and sharing API","description":"Atlasemoji is a manifest-first geospatial storytelling and sharing platform.\n\nGeoJSON is the canonical interchange format.\nManifest objects are the canonical publishing object.\n\nUse this API to:\n- fetch canonical manifest JSON\n- fetch GeoJSON output\n- fetch ArcGIS-compatible export output\n- fetch Mapbox-compatible export output\n- normalize ArcGIS and Mapbox imports into Atlasemoji workspace assets\n- connect reusable partner credentials for workspaces\n- render live share surfaces\n- generate iframe embed code\n- generate static share images"},"servers":[{"url":"http://localhost:3000"}],"tags":[{"name":"Manifests","description":"Canonical publishing objects for stories, routes, polygons, and imported geodata."},{"name":"Embeds","description":"Share surfaces including iframe HTML, responsive embeds, and static images."},{"name":"Partners","description":"ArcGIS and Mapbox import/export normalization surfaces and saved connections."}],"components":{"parameters":{"ManifestId":{"name":"manifestId","in":"path","required":true,"schema":{"type":"string"}},"Partner":{"name":"partner","in":"path","required":true,"schema":{"type":"string","enum":["arcgis","mapbox"]}},"Lang":{"name":"lang","in":"query","required":false,"schema":{"type":"string","example":"en"}},"Width":{"name":"width","in":"query","required":false,"schema":{"type":"integer","minimum":320,"maximum":2400,"default":1200}},"Height":{"name":"height","in":"query","required":false,"schema":{"type":"integer","minimum":240,"maximum":2000,"default":720}},"Mode":{"name":"mode","in":"query","required":false,"schema":{"type":"string","enum":["story","map"],"default":"story"}},"Panel":{"name":"panel","in":"query","required":false,"schema":{"oneOf":[{"type":"string","enum":["1","0"]},{"type":"boolean"}],"default":true}},"Title":{"name":"title","in":"query","required":false,"schema":{"oneOf":[{"type":"string","enum":["1","0"]},{"type":"boolean"}],"default":true}},"Controls":{"name":"controls","in":"query","required":false,"schema":{"oneOf":[{"type":"string","enum":["1","0"]},{"type":"boolean"}],"default":true}},"Items":{"name":"items","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":12}},"Pretty":{"name":"pretty","in":"query","required":false,"schema":{"oneOf":[{"type":"string","enum":["1"]},{"type":"boolean"}]}},"IncludeNarrative":{"name":"includeNarrative","in":"query","required":false,"schema":{"oneOf":[{"type":"string","enum":["1"]},{"type":"boolean"}]}},"Format":{"name":"format","in":"query","required":false,"schema":{"type":"string","enum":["geojson"]}},"PartnerExport":{"name":"partner","in":"query","required":false,"schema":{"type":"string","enum":["arcgis","mapbox"]}}},"schemas":{"EmbedShareResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"manifestId":{"type":"string"},"title":{"type":"string"},"kind":{"type":"string"},"lang":{"type":"string"},"embedUrl":{"type":"string","format":"uri"},"iframeHtml":{"type":"string"},"responsiveIframeHtml":{"type":"string"},"iframe":{"type":"object","properties":{"src":{"type":"string"},"width":{"type":"integer"},"height":{"type":"integer"},"loading":{"type":"string"},"allowfullscreen":{"type":"boolean"},"referrerpolicy":{"type":"string"},"style":{"type":"string"},"title":{"type":"string"}}}}},"PartnerImportRequest":{"type":"object","required":["workspaceId","ownerUid","layerId","payload"],"properties":{"workspaceId":{"type":"string"},"ownerUid":{"type":"string"},"layerId":{"type":"string"},"importBatchId":{"type":"string"},"payload":{"type":"object","additionalProperties":true}}},"PartnerImportResponse":{"type":"object","properties":{"ok":{"type":"boolean"},"layerPatch":{"type":"object","additionalProperties":true},"assets":{"type":"array","items":{"type":"object","additionalProperties":true}},"sourceMeta":{"type":"object","additionalProperties":true},"partnerExtensions":{"type":"object","additionalProperties":true}}},"PartnerConnectRequest":{"type":"object","required":["workspaceId","authType"],"properties":{"workspaceId":{"type":"string"},"label":{"type":"string"},"authType":{"type":"string","enum":["apiKey","token","oauth2","basic","none"]},"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"apiKey":{"type":"string"},"baseUrl":{"type":"string"},"scopes":{"type":"array","items":{"type":"string"}},"expiresAt":{"type":"string"},"metadata":{"type":"object","additionalProperties":true}}},"PartnerTestRequest":{"type":"object","required":["credentialId"],"properties":{"credentialId":{"type":"string"}}}}},"paths":{"/api/manifests/{manifestId}":{"get":{"tags":["Manifests","Partners"],"summary":"Get manifest JSON or export shape","parameters":[{"$ref":"#/components/parameters/ManifestId"},{"$ref":"#/components/parameters/Lang"},{"$ref":"#/components/parameters/Format"},{"$ref":"#/components/parameters/PartnerExport"},{"$ref":"#/components/parameters/Pretty"},{"$ref":"#/components/parameters/IncludeNarrative"}],"responses":{"200":{"description":"Manifest JSON, GeoJSON, or partner-shaped export"}}}},"/embed/{manifestId}":{"get":{"tags":["Embeds"],"summary":"Rendered embed surface","parameters":[{"$ref":"#/components/parameters/ManifestId"},{"$ref":"#/components/parameters/Lang"},{"$ref":"#/components/parameters/Mode"},{"$ref":"#/components/parameters/Panel"},{"$ref":"#/components/parameters/Title"},{"$ref":"#/components/parameters/Controls"},{"$ref":"#/components/parameters/Items"},{"$ref":"#/components/parameters/Width"},{"$ref":"#/components/parameters/Height"}],"responses":{"200":{"description":"HTML surface"}}}},"/api/embed/{manifestId}/share":{"get":{"tags":["Embeds"],"summary":"Generate iframe embed code","parameters":[{"$ref":"#/components/parameters/ManifestId"},{"$ref":"#/components/parameters/Lang"},{"$ref":"#/components/parameters/Mode"},{"$ref":"#/components/parameters/Panel"},{"$ref":"#/components/parameters/Title"},{"$ref":"#/components/parameters/Controls"},{"$ref":"#/components/parameters/Items"},{"$ref":"#/components/parameters/Width"},{"$ref":"#/components/parameters/Height"}],"responses":{"200":{"description":"Embed HTML payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedShareResponse"}}}}}}},"/api/embed/{manifestId}/static":{"get":{"tags":["Embeds"],"summary":"Static share image","parameters":[{"$ref":"#/components/parameters/ManifestId"},{"$ref":"#/components/parameters/Lang"},{"$ref":"#/components/parameters/Width"},{"$ref":"#/components/parameters/Height"}],"responses":{"200":{"description":"Image response"}}}},"/api/import/arcgis/feature-layer":{"post":{"tags":["Partners"],"summary":"Normalize ArcGIS Feature Layer payload","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerImportRequest"}}}},"responses":{"200":{"description":"Normalized ArcGIS import payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerImportResponse"}}}}}}},"/api/import/mapbox/dataset":{"post":{"tags":["Partners"],"summary":"Normalize Mapbox Dataset payload","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerImportRequest"}}}},"responses":{"200":{"description":"Normalized Mapbox import payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerImportResponse"}}}}}}},"/api/partners/{partner}/connect":{"post":{"tags":["Partners"],"summary":"Connect a reusable partner credential","parameters":[{"$ref":"#/components/parameters/Partner"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerConnectRequest"}}}},"responses":{"200":{"description":"Credential stored and tested"}}}},"/api/partners/{partner}/test":{"post":{"tags":["Partners"],"summary":"Test an existing partner credential","parameters":[{"$ref":"#/components/parameters/Partner"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerTestRequest"}}}},"responses":{"200":{"description":"Credential test result"}}}},"/api/partners/{partner}/disconnect":{"post":{"tags":["Partners"],"summary":"Disconnect and delete a saved partner credential","parameters":[{"$ref":"#/components/parameters/Partner"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PartnerTestRequest"}}}},"responses":{"200":{"description":"Credential deleted"}}}}}}