UniLink API: Blog Articles Endpoint (Read and Write Blog Content)

By UniLink May 02, 2026 9 min read
UniLink API: Blog Articles Endpoint (Read and Write Blog Content)


UniLink API: Blog Articles Endpoint (Read and Write Blog Content)

The /blog-articles endpoint lets you list, create, update, and archive blog content programmatically — enabling headless CMS workflows and cross-platform content sync.

  • Base path is https://unilink.us/api/v1/blog-articles — supports GET (list + single), POST (create), PUT (update), and DELETE (archive).
  • Key request and response fields include slug, title, content, lang, published_at, and category.
  • Use this endpoint for headless CMS integrations, multi-language content pipelines, and external editor workflows.

The UniLink blog articles endpoint exposes full CRUD access to your blog content over the REST API. Whether you want to publish articles programmatically from an external writing tool, sync content from a third-party CMS, or pull published posts into a custom front-end, the /blog-articles endpoint provides a clean JSON interface to all your blog data. The same write operations available in the dashboard are available here — including draft creation, scheduling via published_at, and multi-language support through the lang field.

What the Blog Articles Endpoint Does

The /blog-articles endpoint exposes five operations. GET /blog-articles returns a paginated list of all blog articles belonging to the authenticated account. You can filter by lang, category, and published (boolean) using query parameters. GET /blog-articles/{slug} returns the full content and metadata of a single article by its URL slug. POST /blog-articles creates a new article — set published_at to a future timestamp to schedule publication or leave it null to save as a draft. PUT /blog-articles/{slug} updates an existing article's fields — only fields you include in the body are changed, all others remain as-is. DELETE /blog-articles/{slug} archives the article, removing it from the public blog while retaining it in your dashboard drafts.

The core fields for a blog article are slug (the URL-safe identifier, unique per account and language), title (plain text, the article headline), content (HTML string, the article body), lang (two-letter ISO 639-1 language code, defaults to en), published_at (ISO 8601 UTC timestamp or null for drafts), and category (string slug matching one of your configured blog categories). Additional metadata fields returned in responses include id, created_at, updated_at, author, excerpt, featured_image_url, and meta_description.

Creating articles via the API produces the same result as creating them in the dashboard — they follow the same SEO slug rules, appear in the same blog sitemap, and render through the same templates. This makes the API suitable for headless publishing workflows where content is authored in a specialized editor (Notion, Google Docs, a custom CMS) and published to UniLink programmatically, keeping the public URL structure and rendering consistent with manually created articles.

How to Get Started

  1. Generate an API key with write scope from Settings → API in the dashboard — read scope is sufficient for GET requests, but write scope is required for POST, PUT, and DELETE.
  2. List your existing articles to understand the data structure: GET https://unilink.us/api/v1/blog-articles?limit=5. Inspect the response fields before writing any create or update logic.
  3. Create a test article via POST with published_at: null to create it as a draft. Verify it appears in the dashboard under Blog → Drafts before attempting to publish via the API.
  4. Fetch the draft by slug: GET https://unilink.us/api/v1/blog-articles/{slug}. Confirm all fields are populated as expected and the content HTML renders correctly in the dashboard preview.
  5. Publish by sending a PUT request with published_at set to the current UTC timestamp or a future time. Verify the article appears on the public blog.

How to Use the Blog Articles Endpoint

  1. List with filtering: Retrieve published English articles in a specific category: GET /blog-articles?lang=en&category=guides&published=true&limit=100. Combine with cursor pagination to export all matching articles.
  2. Create a new article: POST to /blog-articles with a JSON body containing at minimum slug, title, and content. Include lang, category, meta_description, and featured_image_url for full SEO metadata.
  3. Update specific fields: PUT to /blog-articles/{slug} with only the fields you want to change. To update just the title: {"title": "New Title"}. Omit all other fields — they will not be modified.
  4. Publish a draft: PUT to /blog-articles/{slug} with {"published_at": "2025-05-06T09:00:00Z"}. Use a future timestamp to schedule publication, or the current time to publish immediately.
  5. Archive an article: DELETE to /blog-articles/{slug}. The article is moved to drafts and unpublished — it is not permanently deleted and can be restored from the dashboard within 30 days.

Key Settings

SettingWhat It DoesRecommended
slugURL identifier — must be unique per account + lang combinationUse kebab-case, keep under 60 characters, include target keyword
langTwo-letter language code (en, ua, es, etc.)Always set explicitly — do not rely on the default for multi-language pipelines
published_atNull for drafts; ISO 8601 timestamp to publish or scheduleSet to future time for scheduled publishing; set to current time to publish immediately
contentHTML string — the full article bodySanitize HTML before sending to prevent XSS — UniLink accepts standard HTML tags
meta_descriptionSEO meta description shown in search resultsKeep under 160 characters; always set for published articles
Tip: For multi-language content pipelines, use the same base slug across languages and differentiate them with the lang field — for example, slug: "link-in-bio-guide", lang: "en" and slug: "link-in-bio-guide", lang: "ua". UniLink treats slug + lang as the unique identifier, so both can coexist and are served at their respective language URLs.

Get the Most Out Of the Blog Articles Endpoint

Build a content pipeline that treats UniLink as the publishing target rather than the authoring environment. Write articles in a tool your team prefers — Notion, Google Docs, or a custom Markdown editor — then use the API to convert the content to HTML and POST it to UniLink on a schedule. This workflow combines the ergonomics of specialized writing tools with the SEO benefits of UniLink's publishing infrastructure and URL structure.

Use the published_at field for content calendars. Instead of manually publishing articles at the right time, your pipeline can POST all articles as drafts at once, each with a published_at timestamp set to its scheduled publication date. UniLink handles the publication automatically at the right time. Your team's CMS dashboard shows the full pipeline at a glance without anyone needing to be online at the exact publication moment.

For content sync workflows that mirror a primary CMS to UniLink, use the updated_at field in list responses to detect changed articles. On each sync run, fetch all articles and compare updated_at timestamps against your last sync time. Only PUT articles where the source CMS has a newer updated_at — this keeps the sync incremental and fast even when you have hundreds of published articles.

The DELETE operation archives rather than permanently deletes. This is intentional and safe — it means you can unpublish an article via the API without risk of permanent data loss. If you need to permanently delete, use the dashboard. For programmatic content lifecycle management, archiving via the API and restoring from the dashboard provides a useful two-step confirmation for irreversible actions.

Troubleshooting

ProblemCauseFix
409 Conflict on article creationAn article with the same slug + lang combination already existsUse PUT to update the existing article, or choose a different slug for the new one
Article created but not appearing on public blogpublished_at is null — article is a draftSend a PUT request with published_at set to the current UTC time to publish it
HTML content rendering incorrectlyContent contains unsupported HTML tags or unescaped special charactersUse a sanitizer to ensure content contains only standard HTML; escape ampersands and angle brackets in text nodes
PUT request unexpectedly clears fieldsSending only some fields and expecting others to be preserved — works correctly; check if your client is accidentally sending null valuesLog the exact request body being sent; ensure optional fields you want to keep are omitted from the payload entirely rather than sent as null
  • Full CRUD access enables complete headless CMS workflows with UniLink as the publishing layer
  • Scheduled publishing via published_at supports content calendar automation without manual intervention
  • Multi-language support via slug + lang combination enables international content pipelines
  • DELETE archives rather than permanently deletes — safe for programmatic content lifecycle management
  • content field is raw HTML — Markdown or rich text must be converted before sending
  • Write scope required — read-only API keys cannot create or update articles
  • No batch create endpoint — articles must be created one at a time for large imports
Can I create blog articles as drafts via the API?

Yes. Set published_at to null in your POST request and the article is saved as a draft. It appears in the dashboard under Blog → Drafts and is not publicly visible until you PUT it with a published_at timestamp.

How do I schedule an article to publish in the future?

Set published_at to a future ISO 8601 UTC timestamp when creating or updating the article. UniLink will publish it automatically at that time. For example: "published_at": "2025-06-01T08:00:00Z".

Does DELETE permanently remove an article?

No. DELETE archives the article — it is unpublished and moved to drafts but not permanently deleted. You can restore it from the dashboard within 30 days. Permanent deletion is only available through the dashboard.

What HTML tags are allowed in the content field?

UniLink accepts standard HTML including headings, paragraphs, lists, tables, links, images, bold, italic, and semantic elements. Script tags and inline event handlers are stripped for security. Check the API reference for the full allowed-tag list.

Can I fetch articles filtered by publication date range?

Yes. Use the published_after and published_before query parameters on GET /blog-articles — both accept ISO 8601 timestamps. For example: ?published_after=2025-01-01T00:00:00Z&published_before=2025-03-31T23:59:59Z.

  • The blog articles endpoint is at https://unilink.us/api/v1/blog-articles and supports GET, POST, PUT, and DELETE.
  • Key fields are slug, title, content (HTML), lang, published_at, and category.
  • Set published_at to null for drafts, to a past/current time to publish, or a future time to schedule.
  • Slug + lang is the unique identifier — use it to support multi-language versions of the same article.
  • DELETE archives articles rather than permanently deleting them — safe for programmatic content pipelines.

Ready to automate your content publishing? Generate your API key at app.unilink.us under Settings → API and start building your content pipeline today.

Create Your Free Link-in-Bio Page

Join thousands of creators using UniLink. 40+ blocks, analytics, e-commerce, and AI tools — all free.

Get Started Free