Skip to content
Documentation menuContent API

Postlip Metrics Content API

Sitelerin ve uygulamaların blogu kendi tasarımıyla çizmek için okuduğu API: yalnız YAYINDAKİ yazılar (taslak, onaydaki sürüm ya da yayından kaldırılmış yazı hiç dönmez; çalışma sürümü yalnız editörlerin verdiği önizleme belirteciyle). Kimlik: organizasyonun panelden oluşturduğu API anahtarı, kapsam content:read (yalnız bu kapsamlı anahtar uygulamanın «içerik anahtarı»dır), Authorization: Bearer mk_… — yalnız sunucu tarafında. Önbellek: ETag / Last-Modified, If-None-Match / If-Modified-Since ile 304; değişiklikler imzalı yayın webhook'uyla (content.post.published|updated|unpublished, Metrics-Signature) duyurulur, site önbelleğini uzun tutup webhook'ta yeniler. İçerik HTML değil blok belgesidir; html alanı Postlip Metrics'in kaçışlayarak çizdiği güvenli HTML'dir. Hata gövdesi { "error": { "code", "message", "traceId" } }, message isteğin dilinde (Accept-Language: tr, en).

Version 1.0.0OpenAPI 3.1.1Download the OpenAPI document

This page is generated at build time from docs/api/openapi/content.json in the repository.

The descriptions in this reference come from the OpenAPI document generated from the code and are written in Turkish for now; endpoints, fields and types are language-neutral.

Servers

URLDescription
https://api.metrics.exampleContent API

Authentication

NameMethodDescription
apiKeyBearer token (mk_…)Organizasyonun API anahtarı (mk_ + 40 karakter), kapsam content:read.

İçerik (blog)

8 endpoints

Yazılar (blok içerik, SEO, kapak, kategori, etiket, yazarlar), iş akışı (onaya gönderme, onay, dört göz, zamanlama, yayın, yayından kaldırma, arşiv), sürümler ve farkları, zaman çizelgesi, yorumlar, süreli önizleme bağlantıları, yasaklı ifadeler, ayarlar; siteler için İçerik API’si (yalnız yayındaki yazılar) ve yayın webhook’ları.

GET/v1/content/apps/{appId}/assets/{assetId}

Görselin dosyası

Yayındaki bir yazının (ya da yazarının) gösterdiği görselin baytları — görselleri kendi sunucusunda tutan siteler için; kütüphanenin geri kalanı bu anahtarla okunamaz. Sürüm: original (metadata temizlenmiş), jpg, medium (1080 px WebP), thumb (320 px WebP).

Management API anahtarı gerekir (Authorization: Bearer mk_…); işlem anahtarın organizasyonunda ve uygulama kapsamında tek bir RLS işleminde çalışır.

Gerekli kapsam: content:read.

Authentication
apiKey
Required scope
content:read

Parameters

NameInTypeDescription
appIdrequiredpathstringUygulamanın kimliği.

Format: uuid

assetIdrequiredpathstringDosyanın kimliği.

Format: uuid

variantquerystring

Values: original, jpg, medium, thumb · Default: original

Responses

  • 200

    Görsel dosyası.

    Response headers

    • Content-Dispositionstring

      attachment; filename="…"

  • 400

    İstek doğrulanamadı (VALIDATION_FAILED). error.fields her hatalı alan için isteğin dilinde mesajları taşır; alan yolu noktayla yazılır (properties.2.enumValues), gövdenin bütünü için _. Okunamayan JSON INVALID_REQUEST, bozuk imleç CURSOR_INVALID döner.

    application/jsonErrorResponse

  • 401

    Kimlik yok ya da geçersiz: panelde oturum çerezi (SESSION_REQUIRED, ikinci adım bekleyen oturumda TWO_FACTOR_REQUIRED), Management API'de Authorization: Bearer mk_… (API_KEY_INVALID: yok, bilinmiyor, iptal edilmiş ya da süresi dolmuş). Giriş uçlarında hatalı bilgiler de 401 döner (INVALID_CREDENTIALS, TOTP_CODE_INVALID).

    application/jsonErrorResponse

  • 403

    Yetki yok: rol gereken izni vermiyor (PERMISSION_REQUIRED, error.details.permissions), API anahtarının kapsamı eksik (API_KEY_SCOPE_MISSING, error.details.scopes) ya da organizasyon askıda (ORGANIZATION_SUSPENDED).

    application/jsonErrorResponse

  • 404

    Kayıt bulunamadı ya da çağıranın kapsamında değil; ikisi bilerek ayırt edilmez (ör. APP_NOT_FOUND, EVENT_DEFINITION_NOT_FOUND). Biçimi geçersiz kimlikler de 404 döner.

    application/jsonErrorResponse

  • 500

    Beklenmeyen hata (INTERNAL_ERROR). Destek talebinde error.traceId iletilir.

    application/jsonErrorResponse

GET/v1/content/apps/{appId}/authors

Yazarlar

Etkin ya da yayında yazısı olan yazarlar, profilleriyle. Önbellek: ETag (gövdenin özeti) ve Last-Modified (uygulamanın sunulan içeriğinin son değişikliği; imzalı görsel bağlantıları saatte bir yenilendiği için en eski bu saatin başı); If-None-Match ya da If-Modified-Since eşleşirse 304, gövdesiz. Cache-Control: private, max-age=60, Vary: Authorization.

Management API anahtarı gerekir (Authorization: Bearer mk_…); işlem anahtarın organizasyonunda ve uygulama kapsamında tek bir RLS işleminde çalışır.

Gerekli kapsam: content:read.

Authentication
apiKey
Required scope
content:read

Parameters

NameInTypeDescription
appIdrequiredpathstringUygulamanın kimliği.

Format: uuid

Responses

  • 200

    Başarılı.

    application/jsonContentApiAuthorList

    Example · JSON
    {
      "items": [
        {
          "slug": "string",
          "name": "string",
          "title": "string",
          "bio": "string",
          "avatar": {
            "assetId": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
            "url": "string",
            "expiresAt": "2026-11-06T14:46:00+03:00",
            "file": "string",
            "mimeType": "string",
            "width": 0,
            "height": 0,
            "alt": "string",
            "variants": {
              "medium": "string",
              "thumb": "string"
            }
          },
          "websiteUrl": "string",
          "links": [
            "string"
          ],
          "postCount": 0
        }
      ]
    }
  • 401

    Kimlik yok ya da geçersiz: panelde oturum çerezi (SESSION_REQUIRED, ikinci adım bekleyen oturumda TWO_FACTOR_REQUIRED), Management API'de Authorization: Bearer mk_… (API_KEY_INVALID: yok, bilinmiyor, iptal edilmiş ya da süresi dolmuş). Giriş uçlarında hatalı bilgiler de 401 döner (INVALID_CREDENTIALS, TOTP_CODE_INVALID).

    application/jsonErrorResponse

  • 403

    Yetki yok: rol gereken izni vermiyor (PERMISSION_REQUIRED, error.details.permissions), API anahtarının kapsamı eksik (API_KEY_SCOPE_MISSING, error.details.scopes) ya da organizasyon askıda (ORGANIZATION_SUSPENDED).

    application/jsonErrorResponse

  • 404

    Kayıt bulunamadı ya da çağıranın kapsamında değil; ikisi bilerek ayırt edilmez (ör. APP_NOT_FOUND, EVENT_DEFINITION_NOT_FOUND). Biçimi geçersiz kimlikler de 404 döner.

    application/jsonErrorResponse

  • 500

    Beklenmeyen hata (INTERNAL_ERROR). Destek talebinde error.traceId iletilir.

    application/jsonErrorResponse

GET/v1/content/apps/{appId}/categories

Kategoriler

Yayındaki yazı sayılarıyla. Önbellek: ETag (gövdenin özeti) ve Last-Modified (uygulamanın sunulan içeriğinin son değişikliği; imzalı görsel bağlantıları saatte bir yenilendiği için en eski bu saatin başı); If-None-Match ya da If-Modified-Since eşleşirse 304, gövdesiz. Cache-Control: private, max-age=60, Vary: Authorization.

Management API anahtarı gerekir (Authorization: Bearer mk_…); işlem anahtarın organizasyonunda ve uygulama kapsamında tek bir RLS işleminde çalışır.

Gerekli kapsam: content:read.

Authentication
apiKey
Required scope
content:read

Parameters

NameInTypeDescription
appIdrequiredpathstringUygulamanın kimliği.

Format: uuid

Responses

  • 200

    Başarılı.

    application/jsonContentApiCategoryList

    Example · JSON
    {
      "items": [
        {
          "slug": "string",
          "name": "string",
          "description": "string",
          "position": 0,
          "postCount": 0
        }
      ]
    }
  • 401

    Kimlik yok ya da geçersiz: panelde oturum çerezi (SESSION_REQUIRED, ikinci adım bekleyen oturumda TWO_FACTOR_REQUIRED), Management API'de Authorization: Bearer mk_… (API_KEY_INVALID: yok, bilinmiyor, iptal edilmiş ya da süresi dolmuş). Giriş uçlarında hatalı bilgiler de 401 döner (INVALID_CREDENTIALS, TOTP_CODE_INVALID).

    application/jsonErrorResponse

  • 403

    Yetki yok: rol gereken izni vermiyor (PERMISSION_REQUIRED, error.details.permissions), API anahtarının kapsamı eksik (API_KEY_SCOPE_MISSING, error.details.scopes) ya da organizasyon askıda (ORGANIZATION_SUSPENDED).

    application/jsonErrorResponse

  • 404

    Kayıt bulunamadı ya da çağıranın kapsamında değil; ikisi bilerek ayırt edilmez (ör. APP_NOT_FOUND, EVENT_DEFINITION_NOT_FOUND). Biçimi geçersiz kimlikler de 404 döner.

    application/jsonErrorResponse

  • 500

    Beklenmeyen hata (INTERNAL_ERROR). Destek talebinde error.traceId iletilir.

    application/jsonErrorResponse

GET/v1/content/apps/{appId}/posts

Yayındaki yazılar

Yalnız YAYINDAKİ yazılar: taslak, onaydaki sürüm ya da yayından kaldırılmış yazı bu uçlardan hiç dönmez (yalnız önizleme belirteciyle). Filtreler: dil, kategori (adres), etiket, yazar (adres), yayın yeri (web site, app uygulama içi akış), arama, updatedSince (artımlı eşitleme); sıralama ilk yayın ya da son güncelleme; imleç sayfalama (en çok 100). Önbellek: ETag (gövdenin özeti) ve Last-Modified (uygulamanın sunulan içeriğinin son değişikliği; imzalı görsel bağlantıları saatte bir yenilendiği için en eski bu saatin başı); If-None-Match ya da If-Modified-Since eşleşirse 304, gövdesiz. Cache-Control: private, max-age=60, Vary: Authorization.

Management API anahtarı gerekir (Authorization: Bearer mk_…); işlem anahtarın organizasyonunda ve uygulama kapsamında tek bir RLS işleminde çalışır.

Gerekli kapsam: content:read.

Authentication
apiKey
Required scope
content:read

Parameters

NameInTypeDescription
appIdrequiredpathstringUygulamanın kimliği.

Format: uuid

cursorquerystring

Pattern: ^[A-Za-z0-9_-]{1,512}$

limitqueryinteger

1–100 · Default: 20

localequerystring

Pattern: ^[a-z]{2}(?:-[A-Z]{2})?$ · 2–5 characters

categoryquerystring

Pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$ · 1–120 characters

tagquerystring

1–50 characters

authorquerystring

Pattern: ^[a-z0-9]+(?:-[a-z0-9]+)*$ · 1–120 characters

feedquerystring

Values: web, app

searchquerystring

1–200 characters

updatedSincequerystring

Format: date-time

sortquerystring

Values: published, updated · Default: published

Responses

  • 200

    Başarılı.

    application/jsonContentApiPostPage

    Example · JSON
    {
      "items": [
        {
          "id": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
          "slug": "string",
          "locale": "string",
          "title": "string",
          "excerpt": "string",
          "url": "string",
          "category": {
            "slug": "string",
            "name": "string"
          },
          "tags": [
            "string"
          ],
          "authors": [
            {
              "slug": "string",
              "name": "string"
            }
          ],
          "cover": {
            "assetId": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
            "url": "string",
            "expiresAt": "2026-11-06T14:46:00+03:00",
            "file": "string",
            "mimeType": "string",
            "width": 0,
            "height": 0,
            "alt": "string",
            "variants": {
              "medium": "string",
              "thumb": "string"
            }
          },
          "feeds": [
            "web"
          ],
          "readingMinutes": 0,
          "publishedAt": "2026-11-06T14:46:00+03:00",
          "updatedAt": "2026-11-06T14:46:00+03:00",
          "revision": 0
        }
      ],
      "nextCursor": "string"
    }
  • 400

    İstek doğrulanamadı (VALIDATION_FAILED). error.fields her hatalı alan için isteğin dilinde mesajları taşır; alan yolu noktayla yazılır (properties.2.enumValues), gövdenin bütünü için _. Okunamayan JSON INVALID_REQUEST, bozuk imleç CURSOR_INVALID döner.

    application/jsonErrorResponse

  • 401

    Kimlik yok ya da geçersiz: panelde oturum çerezi (SESSION_REQUIRED, ikinci adım bekleyen oturumda TWO_FACTOR_REQUIRED), Management API'de Authorization: Bearer mk_… (API_KEY_INVALID: yok, bilinmiyor, iptal edilmiş ya da süresi dolmuş). Giriş uçlarında hatalı bilgiler de 401 döner (INVALID_CREDENTIALS, TOTP_CODE_INVALID).

    application/jsonErrorResponse

  • 403

    Yetki yok: rol gereken izni vermiyor (PERMISSION_REQUIRED, error.details.permissions), API anahtarının kapsamı eksik (API_KEY_SCOPE_MISSING, error.details.scopes) ya da organizasyon askıda (ORGANIZATION_SUSPENDED).

    application/jsonErrorResponse

  • 404

    Kayıt bulunamadı ya da çağıranın kapsamında değil; ikisi bilerek ayırt edilmez (ör. APP_NOT_FOUND, EVENT_DEFINITION_NOT_FOUND). Biçimi geçersiz kimlikler de 404 döner.

    application/jsonErrorResponse

  • 500

    Beklenmeyen hata (INTERNAL_ERROR). Destek talebinde error.traceId iletilir.

    application/jsonErrorResponse

GET/v1/content/apps/{appId}/posts/{slug}

Yazı (adresiyle)

Yazının belgesi: blok içerik, Postlip Metrics'in kaçışlayarak çizdiği HTML (sabit etiket seti; betik, stil, satır içi HTML yok), düz metin, içindekiler, okuma süresi, yazarlar ve profilleri, SEO (başlık, açıklama, kanonik adres, noindex, OG görseli), schema.org JSON-LD (structuredData ve <script> için kaçışlanmış jsonLd), çeviriler, eski adresler, görseller (süreli imzalı bağlantı + anahtarla okunan kalıcı file adresi). Eski bir adres { kind: "redirect" } döner (API 301 vermez: istemci sessizce izleyip eski adresi tutmasın — site kendi 301'ini verir); yayından kaldırılmış yazının adresi 410 CONTENT_POST_GONE, bilinmeyen 404. Önbellek: ETag (gövdenin özeti) ve Last-Modified (uygulamanın sunulan içeriğinin son değişikliği; imzalı görsel bağlantıları saatte bir yenilendiği için en eski bu saatin başı); If-None-Match ya da If-Modified-Since eşleşirse 304, gövdesiz. Cache-Control: private, max-age=60, Vary: Authorization.

Management API anahtarı gerekir (Authorization: Bearer mk_…); işlem anahtarın organizasyonunda ve uygulama kapsamında tek bir RLS işleminde çalışır.

Gerekli kapsam: content:read.

Authentication
apiKey
Required scope
content:read

Parameters

NameInTypeDescription
appIdrequiredpathstringUygulamanın kimliği.

Format: uuid

slugrequiredpathstringYazının adresi (slug); eski bir adres yenisine yönlendirme döner.

Responses

  • 200

    Başarılı.

    application/jsonContentApiPostResolution

    Example · JSON
    {
      "kind": "post",
      "post": {
        "id": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
        "slug": "string",
        "locale": "string",
        "title": "string",
        "excerpt": "string",
        "url": "string",
        "category": {
          "slug": "string",
          "name": "string"
        },
        "tags": [
          "string"
        ],
        "authors": [
          {
            "slug": "string",
            "name": "string",
            "title": "string",
            "bio": "string",
            "avatar": {
              "assetId": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
              "url": "string",
              "expiresAt": "2026-11-06T14:46:00+03:00",
              "file": "string",
              "mimeType": "string",
              "width": 0,
              "height": 0,
              "alt": "string",
              "variants": {
                "medium": "string",
                "thumb": "string"
              }
            },
            "websiteUrl": "string",
            "links": []
          }
        ],
        "cover": {
          "assetId": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
          "url": "string",
          "expiresAt": "2026-11-06T14:46:00+03:00",
          "file": "string",
          "mimeType": "string",
          "width": 0,
          "height": 0,
          "alt": "string",
          "variants": {
            "medium": "string",
            "thumb": "string"
          }
        },
        "feeds": [
          "web"
        ],
        "readingMinutes": 0,
        "publishedAt": "2026-11-06T14:46:00+03:00",
        "updatedAt": "2026-11-06T14:46:00+03:00",
        "revision": 0,
        "body": {
          "version": 1,
          "blocks": [
            {}
          ]
        },
        "html": "string",
        "text": "string",
        "toc": [
          {
            "id": "string",
            "level": 0,
            "text": "string"
          }
        ],
        "wordCount": 0,
        "seo": {
          "title": "string",
          "description": "string",
          "canonicalUrl": "string",
          "noindex": true,
          "ogImage": {
            "assetId": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
            "url": "string",
            "expiresAt": "2026-11-06T14:46:00+03:00",
            "file": "string",
            "mimeType": "string",
            "width": 0,
            "height": 0,
            "alt": "string",
            "variants": {
              "medium": "string",
              "thumb": "string"
            }
          }
        },
        "structuredData": [
          {}
        ],
        "jsonLd": "string",
        "translations": [
          {
            "locale": "string",
            "slug": "string",
            "url": "string"
          }
        ],
        "previousSlugs": [
          "string"
        ],
        "preview": true
      }
    }
  • 401

    Kimlik yok ya da geçersiz: panelde oturum çerezi (SESSION_REQUIRED, ikinci adım bekleyen oturumda TWO_FACTOR_REQUIRED), Management API'de Authorization: Bearer mk_… (API_KEY_INVALID: yok, bilinmiyor, iptal edilmiş ya da süresi dolmuş). Giriş uçlarında hatalı bilgiler de 401 döner (INVALID_CREDENTIALS, TOTP_CODE_INVALID).

    application/jsonErrorResponse

  • 403

    Yetki yok: rol gereken izni vermiyor (PERMISSION_REQUIRED, error.details.permissions), API anahtarının kapsamı eksik (API_KEY_SCOPE_MISSING, error.details.scopes) ya da organizasyon askıda (ORGANIZATION_SUSPENDED).

    application/jsonErrorResponse

  • 404

    Kayıt bulunamadı ya da çağıranın kapsamında değil; ikisi bilerek ayırt edilmez (ör. APP_NOT_FOUND, EVENT_DEFINITION_NOT_FOUND). Biçimi geçersiz kimlikler de 404 döner.

    application/jsonErrorResponse

  • 410

    E-postayla gelen bağlantı geçersiz, kullanılmış ya da süresi dolmuş (LINK_INVALID, INVITATION_INVALID).

    application/jsonErrorResponse

  • 500

    Beklenmeyen hata (INTERNAL_ERROR). Destek talebinde error.traceId iletilir.

    application/jsonErrorResponse

GET/v1/content/apps/{appId}/preview/{token}

Önizleme (belirteçle)

Editörlerin verdiği önizleme belirteciyle çalışma sürümünün belgesi (preview: true, seo.noindex: true): sitenin kendi tasarımıyla önizleme sayfası için. Belirteç anahtarın uygulamasına ait olmalı. Cache-Control: no-store.

Management API anahtarı gerekir (Authorization: Bearer mk_…); işlem anahtarın organizasyonunda ve uygulama kapsamında tek bir RLS işleminde çalışır.

Gerekli kapsam: content:read.

Authentication
apiKey
Required scope
content:read

Parameters

NameInTypeDescription
appIdrequiredpathstringUygulamanın kimliği.

Format: uuid

tokenrequiredpathstringBelirteç (paylaşım bağlantısı rs_…, ileti takip bağlantısı o1.… / c1.… / u1.…, sağlayıcı webhook adresi, yazı önizlemesi cp_…; uca göre); içinde kiracı kimliği yok.

Responses

  • 200

    Başarılı.

    application/jsonContentApiPost

    Example · JSON
    {
      "id": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
      "slug": "string",
      "locale": "string",
      "title": "string",
      "excerpt": "string",
      "url": "string",
      "category": {
        "slug": "string",
        "name": "string"
      },
      "tags": [
        "string"
      ],
      "authors": [
        {
          "slug": "string",
          "name": "string",
          "title": "string",
          "bio": "string",
          "avatar": {
            "assetId": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
            "url": "string",
            "expiresAt": "2026-11-06T14:46:00+03:00",
            "file": "string",
            "mimeType": "string",
            "width": 0,
            "height": 0,
            "alt": "string",
            "variants": {
              "medium": "string",
              "thumb": "string"
            }
          },
          "websiteUrl": "string",
          "links": [
            "string"
          ]
        }
      ],
      "cover": {
        "assetId": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
        "url": "string",
        "expiresAt": "2026-11-06T14:46:00+03:00",
        "file": "string",
        "mimeType": "string",
        "width": 0,
        "height": 0,
        "alt": "string",
        "variants": {
          "medium": "string",
          "thumb": "string"
        }
      },
      "feeds": [
        "web"
      ],
      "readingMinutes": 0,
      "publishedAt": "2026-11-06T14:46:00+03:00",
      "updatedAt": "2026-11-06T14:46:00+03:00",
      "revision": 0,
      "body": {
        "version": 1,
        "blocks": [
          {}
        ]
      },
      "html": "string",
      "text": "string",
      "toc": [
        {
          "id": "string",
          "level": 0,
          "text": "string"
        }
      ],
      "wordCount": 0,
      "seo": {
        "title": "string",
        "description": "string",
        "canonicalUrl": "string",
        "noindex": true,
        "ogImage": {
          "assetId": "01a1b249-9ed2-77e8-af53-0c99529e68cb",
          "url": "string",
          "expiresAt": "2026-11-06T14:46:00+03:00",
          "file": "string",
          "mimeType": "string",
          "width": 0,
          "height": 0,
          "alt": "string",
          "variants": {
            "medium": "string",
            "thumb": "string"
          }
        }
      },
      "structuredData": [
        {}
      ],
      "jsonLd": "string",
      "translations": [
        {
          "locale": "string",
          "slug": "string",
          "url": "string"
        }
      ],
      "previousSlugs": [
        "string"
      ],
      "preview": true
    }
  • 401

    Kimlik yok ya da geçersiz: panelde oturum çerezi (SESSION_REQUIRED, ikinci adım bekleyen oturumda TWO_FACTOR_REQUIRED), Management API'de Authorization: Bearer mk_… (API_KEY_INVALID: yok, bilinmiyor, iptal edilmiş ya da süresi dolmuş). Giriş uçlarında hatalı bilgiler de 401 döner (INVALID_CREDENTIALS, TOTP_CODE_INVALID).

    application/jsonErrorResponse

  • 403

    Yetki yok: rol gereken izni vermiyor (PERMISSION_REQUIRED, error.details.permissions), API anahtarının kapsamı eksik (API_KEY_SCOPE_MISSING, error.details.scopes) ya da organizasyon askıda (ORGANIZATION_SUSPENDED).

    application/jsonErrorResponse

  • 404

    Kayıt bulunamadı ya da çağıranın kapsamında değil; ikisi bilerek ayırt edilmez (ör. APP_NOT_FOUND, EVENT_DEFINITION_NOT_FOUND). Biçimi geçersiz kimlikler de 404 döner.

    application/jsonErrorResponse

  • 410

    E-postayla gelen bağlantı geçersiz, kullanılmış ya da süresi dolmuş (LINK_INVALID, INVITATION_INVALID).

    application/jsonErrorResponse

  • 500

    Beklenmeyen hata (INTERNAL_ERROR). Destek talebinde error.traceId iletilir.

    application/jsonErrorResponse

GET/v1/content/apps/{appId}/sitemap

Site haritası

Yayındaki, noindex olmayan yazıların adresi, son güncellemesi ve çevirileri (hreflang); imleç sayfalama (en çok 5 000). Önbellek: ETag (gövdenin özeti) ve Last-Modified (uygulamanın sunulan içeriğinin son değişikliği; imzalı görsel bağlantıları saatte bir yenilendiği için en eski bu saatin başı); If-None-Match ya da If-Modified-Since eşleşirse 304, gövdesiz. Cache-Control: private, max-age=60, Vary: Authorization.

Management API anahtarı gerekir (Authorization: Bearer mk_…); işlem anahtarın organizasyonunda ve uygulama kapsamında tek bir RLS işleminde çalışır.

Gerekli kapsam: content:read.

Authentication
apiKey
Required scope
content:read

Parameters

NameInTypeDescription
appIdrequiredpathstringUygulamanın kimliği.

Format: uuid

cursorquerystring

Pattern: ^[A-Za-z0-9_-]{1,512}$

limitqueryinteger

1–5000 · Default: 1000

localequerystring

Pattern: ^[a-z]{2}(?:-[A-Z]{2})?$ · 2–5 characters

feedquerystring

Values: web, app

Responses

  • 200

    Başarılı.

    application/jsonContentApiSitemap

    Example · JSON
    {
      "items": [
        {
          "slug": "string",
          "locale": "string",
          "url": "string",
          "updatedAt": "2026-11-06T14:46:00+03:00",
          "alternates": [
            {
              "locale": "string",
              "url": "string"
            }
          ]
        }
      ],
      "nextCursor": "string"
    }
  • 400

    İstek doğrulanamadı (VALIDATION_FAILED). error.fields her hatalı alan için isteğin dilinde mesajları taşır; alan yolu noktayla yazılır (properties.2.enumValues), gövdenin bütünü için _. Okunamayan JSON INVALID_REQUEST, bozuk imleç CURSOR_INVALID döner.

    application/jsonErrorResponse

  • 401

    Kimlik yok ya da geçersiz: panelde oturum çerezi (SESSION_REQUIRED, ikinci adım bekleyen oturumda TWO_FACTOR_REQUIRED), Management API'de Authorization: Bearer mk_… (API_KEY_INVALID: yok, bilinmiyor, iptal edilmiş ya da süresi dolmuş). Giriş uçlarında hatalı bilgiler de 401 döner (INVALID_CREDENTIALS, TOTP_CODE_INVALID).

    application/jsonErrorResponse

  • 403

    Yetki yok: rol gereken izni vermiyor (PERMISSION_REQUIRED, error.details.permissions), API anahtarının kapsamı eksik (API_KEY_SCOPE_MISSING, error.details.scopes) ya da organizasyon askıda (ORGANIZATION_SUSPENDED).

    application/jsonErrorResponse

  • 404

    Kayıt bulunamadı ya da çağıranın kapsamında değil; ikisi bilerek ayırt edilmez (ör. APP_NOT_FOUND, EVENT_DEFINITION_NOT_FOUND). Biçimi geçersiz kimlikler de 404 döner.

    application/jsonErrorResponse

  • 500

    Beklenmeyen hata (INTERNAL_ERROR). Destek talebinde error.traceId iletilir.

    application/jsonErrorResponse

GET/v1/content/apps/{appId}/tags

Etiketler

Yayındaki yazılardaki etiketler, sayılarıyla. Önbellek: ETag (gövdenin özeti) ve Last-Modified (uygulamanın sunulan içeriğinin son değişikliği; imzalı görsel bağlantıları saatte bir yenilendiği için en eski bu saatin başı); If-None-Match ya da If-Modified-Since eşleşirse 304, gövdesiz. Cache-Control: private, max-age=60, Vary: Authorization.

Management API anahtarı gerekir (Authorization: Bearer mk_…); işlem anahtarın organizasyonunda ve uygulama kapsamında tek bir RLS işleminde çalışır.

Gerekli kapsam: content:read.

Authentication
apiKey
Required scope
content:read

Parameters

NameInTypeDescription
appIdrequiredpathstringUygulamanın kimliği.

Format: uuid

Responses

  • 200

    Başarılı.

    application/jsonContentApiTagList

    Example · JSON
    {
      "items": [
        {
          "tag": "string",
          "postCount": 0
        }
      ]
    }
  • 401

    Kimlik yok ya da geçersiz: panelde oturum çerezi (SESSION_REQUIRED, ikinci adım bekleyen oturumda TWO_FACTOR_REQUIRED), Management API'de Authorization: Bearer mk_… (API_KEY_INVALID: yok, bilinmiyor, iptal edilmiş ya da süresi dolmuş). Giriş uçlarında hatalı bilgiler de 401 döner (INVALID_CREDENTIALS, TOTP_CODE_INVALID).

    application/jsonErrorResponse

  • 403

    Yetki yok: rol gereken izni vermiyor (PERMISSION_REQUIRED, error.details.permissions), API anahtarının kapsamı eksik (API_KEY_SCOPE_MISSING, error.details.scopes) ya da organizasyon askıda (ORGANIZATION_SUSPENDED).

    application/jsonErrorResponse

  • 404

    Kayıt bulunamadı ya da çağıranın kapsamında değil; ikisi bilerek ayırt edilmez (ör. APP_NOT_FOUND, EVENT_DEFINITION_NOT_FOUND). Biçimi geçersiz kimlikler de 404 döner.

    application/jsonErrorResponse

  • 500

    Beklenmeyen hata (INTERNAL_ERROR). Destek talebinde error.traceId iletilir.

    application/jsonErrorResponse

Schemas

Schemas that requests and responses refer to by name.

ContentApiAuthorobject

ContentApiAuthor
FieldTypeDescription
slugrequiredstring
namerequiredstring
titlerequiredstring

may be null

biorequiredstring

may be null

avatarrequiredContentApiImage

may be null

websiteUrlrequiredstring

may be null

linksrequiredstring[]

ContentApiAuthorListobject

ContentApiAuthorList
FieldTypeDescription
itemsrequiredobject[]
items[].slugrequiredstring
items[].namerequiredstring
items[].titlerequiredstring

may be null

items[].biorequiredstring

may be null

items[].avatarrequiredContentApiImage

may be null

items[].websiteUrlrequiredstring

may be null

items[].linksrequiredstring[]
items[].postCountrequiredinteger

ContentApiCategoryListobject

ContentApiCategoryList
FieldTypeDescription
itemsrequiredobject[]
items[].slugrequiredstring
items[].namerequiredstring
items[].descriptionrequiredstring

may be null

items[].positionrequiredinteger
items[].postCountrequiredinteger

ContentApiCategoryRefobject

ContentApiCategoryRef
FieldTypeDescription
slugrequiredstring
namerequiredstring

ContentApiImageobject

ContentApiImage
FieldTypeDescription
assetIdrequiredId

Format: uuid

urlrequiredstring
expiresAtrequiredTimestamp

Format: date-time

filerequiredstring
mimeTyperequiredstring
widthrequiredinteger

may be null

heightrequiredinteger

may be null

altrequiredstring

may be null

variantsrequiredobject
variants.mediumrequiredstring

may be null

variants.thumbrequiredstring

may be null

ContentApiPostobject

ContentApiPost
FieldTypeDescription
idrequiredId

Format: uuid

slugrequiredstring
localerequiredstring
titlerequiredstring
excerptrequiredstring

may be null

urlrequiredstring

may be null

categoryrequiredContentApiCategoryRef

may be null

tagsrequiredstring[]
authorsrequiredContentApiAuthor[]
coverrequiredContentApiImage

may be null

feedsrequiredstring[]
readingMinutesrequiredinteger
publishedAtrequiredTimestamp

Format: date-time

updatedAtrequiredTimestamp

Format: date-time

revisionrequiredinteger
bodyrequiredContentBodyResponse
htmlrequiredstring
textrequiredstring
tocrequiredobject[]
toc[].idrequiredstring
toc[].levelrequiredinteger
toc[].textrequiredstring
wordCountrequiredinteger
seorequiredobject
seo.titlerequiredstring
seo.descriptionrequiredstring

may be null

seo.canonicalUrlrequiredstring

may be null

seo.noindexrequiredboolean
seo.ogImagerequiredContentApiImage

may be null

structuredDatarequiredobject[]
jsonLdrequiredstring
translationsrequiredobject[]
translations[].localerequiredstring
translations[].slugrequiredstring
translations[].urlrequiredstring

may be null

previousSlugsrequiredstring[]
previewrequiredboolean

ContentApiPostPageobject

ContentApiPostPage
FieldTypeDescription
itemsrequiredContentApiPostSummary[]
nextCursorrequiredstring

may be null

ContentApiPostResolutionobject

ContentApiPostSummaryobject

ContentApiPostSummary
FieldTypeDescription
idrequiredId

Format: uuid

slugrequiredstring
localerequiredstring
titlerequiredstring
excerptrequiredstring

may be null

urlrequiredstring

may be null

categoryrequiredContentApiCategoryRef

may be null

tagsrequiredstring[]
authorsrequiredobject[]
authors[].slugrequiredstring
authors[].namerequiredstring
coverrequiredContentApiImage

may be null

feedsrequiredstring[]
readingMinutesrequiredinteger
publishedAtrequiredTimestamp

Format: date-time

updatedAtrequiredTimestamp

Format: date-time

revisionrequiredinteger

ContentApiSitemapobject

ContentApiSitemap
FieldTypeDescription
itemsrequiredobject[]
items[].slugrequiredstring
items[].localerequiredstring
items[].urlrequiredstring

may be null

items[].updatedAtrequiredTimestamp

Format: date-time

items[].alternatesrequiredobject[]
items[].alternates[].localerequiredstring
items[].alternates[].urlrequiredstring

may be null

nextCursorrequiredstring

may be null

ContentApiTagListobject

ContentApiTagList
FieldTypeDescription
itemsrequiredobject[]
items[].tagrequiredstring
items[].postCountrequiredinteger

ContentBodyResponseobject

ContentBodyResponse
FieldTypeDescription
versionrequirednumber

Constant: 1

blocksrequiredobject[]

ErrorResponseobject

ErrorResponse
FieldTypeDescription
errorrequiredobject
error.coderequiredstring
error.messagerequiredstring
error.fieldsobject

Free-form keys

error.detailsobject

Free-form keys

error.retryAfterSecondsinteger
error.traceIdrequiredstring

Idstring

Timestampstring