Troubleshooting

Why is my content not showing up?

Updated 90 views

You published something and the API returns an empty list, or a page 404s. These are the causes, roughly in order of how often they are the culprit.

1. It is still a draft

The most common cause by far. Only published entries are returned by the API. Drafts exist solely in the dashboard.

Open the entry and confirm it says published, not draft. If you created it over MCP, note that entries are created as drafts unless status: "published" was passed explicitly.

2. Your cache is serving the old response

The second most common cause, and the most confusing — because the content is published and the API is returning it.

If you use time-based revalidation, the change appears when the window expires. Check by calling the API directly, bypassing your app entirely:

Bash
curl -H "Kookee-API-Key: YOUR_API_KEY" \
  "https://api.kookee.dev/v1/blog/posts?limit=5"

Content in that response but not in your app means the problem is your cache, not Kookee. See Caching strategies for Kookee content.

3. A locale filter is excluding it

TypeScript
await kookee.blog.list({ locale: 'de', fallback: false });

With fallback: false, entries without a German translation are omitted entirely. Drop the flag (it defaults to true) or write the translation.

The reverse also confuses people: with fallback on, you may be looking at default-locale content and assuming a translation exists. Check post.locale on the result.

A regional tag needs no special handling: de-AT reads your de content, so there is no need to strip the region before you call the API.

4. Wrong project

API keys are scoped to a single project. A key from a different project returns that project's content — successfully, and with none of yours in it.

If a listing looks like someone else's content, or is empty in a project you know has entries, check on Connect → API keys that the key belongs to the project you are editing.

5. The category slug does not match

TypeScript
await kookee.help.list({ category: 'getting-started' });

This takes a category slug, not its name or ID. An unrecognized slug returns an empty list rather than an error.

Confirm the real slug:

TypeScript
const categories = await kookee.help.categories();
console.log(categories.map((c) => c.slug));

Watch for slugs that drifted from a rename — renaming a category does not change its slug, so "Tutorials" may still be guides.

6. Visibility is not public

Entries have a visibility setting. Anything other than public is excluded from public listings and the portal by design. Check the entry's visibility if it is published but still not appearing.

7. Pagination is hiding it

limit defaults to 10. If you expected 30 articles and see 10, that is why:

TypeScript
const response = await kookee.help.list({ limit: 100 });
response.total; // how many actually exist

total is the number to check — when it is higher than data.length, you are looking at one page of several.

8. contentHtml is missing on list items

Not an empty-list problem, but the same feeling. List responses omit the body to stay small:

TypeScript
const { data } = await kookee.blog.list();
data[0].contentHtml; // undefined — by design

const post = await kookee.blog.getBySlug(data[0].slug);
post.contentHtml;    // present

Index pages use list(). Detail pages use getBySlug().

Still stuck?

Isolate the layer. Run the curl from step 2 — it removes your framework, your cache and the SDK from the picture.

  • Content in the curl response — the issue is in your application.

  • Empty curl response — the issue is content status, locale or the project the key belongs to.

  • A 401 — see Authentication and permission errors.

If none of the above explains it, email admin@kookee.dev with your project slug, the failing call and its parameters, and the output of that curl. Never include your API key. See Contacting support for what makes a report quick to answer.

Was this article helpful?