Skip to main content

fkp.my.id — Public REST API Documentation

Complete reference manual and usage guidelines for the Public REST API of this website.

3 mins read 0 comments

Public, read-only endpoints for my website, served under /api/v1/. No authentication required for anything below. This document is also served live at GET /api/v1 as text/markdown. Full machine-readable spec: /.well-known/openapi.json / /.well-known/openapi.yaml.

Base URL: https://fkp.my.id

Errors

Every error response has this shape, with an X-Request-ID header for support/debugging:

{
  "code": 404,
  "error": "404 Not Found: Requested API endpoint or resource does not exist."
}

Rate limits

60 requests/minute per IP, enforced globally. Headers: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. Over the limit returns 429 with Retry-After.

CORS

Access-Control-Allow-Origin: * on every response — safe to call from a browser on any origin.


Endpoints

Blog

Method Path Description
GET /api/v1/blog List published posts. Query: q, id, slug, page, limit (max 100), format=md.
GET /api/v1/blog/{id_or_slug} Single post by UUID or slug. Query: format=md.

Author

Method Path Description
GET /api/v1/author Combined profile (profile, cv, funding, contact, skills, socials). Query: fields, format=md.
GET /api/v1/author/contact Contact info.
GET /api/v1/author/socials Social links.
GET /api/v1/author/skills Skills grouped by category.
GET /api/v1/author/funding Funding/sponsorship links.
GET /api/v1/author/cv Structured CV (experience + education) as JSON.
GET /api/v1/cv CV as application/pdf.

Comments

Method Path Description
GET /api/v1/comments Approved comments. Query: postId (optional, omit for recent site-wide), limit (max 100).
POST /api/v1/comments Submit a comment. Body: {postId, content, authorName?, isAnonymous?, parentId?}. authorName required unless isAnonymous is true.

Every submission is AI-moderated (Llama Guard 3). is_approved: false in the response means the comment was held back, not published — GET only ever returns approved comments.

Views

Method Path Description
GET /api/v1/views View count for a post. Query: postId (required).
POST /api/v1/views Record a view. Body: {postId}. Deduplicated per IP per day — 201 if newly recorded, 200 if already counted today.
Method Path Description
GET /api/v1/search Search posts/projects. Query: q (min 2 chars), limit (max 20, default 6).

Pagination

List endpoints return data plus a pagination object (page, limit, total, totalPages, hasNextPage, hasPrevPage).

Markdown responses

Add ?format=md (or send Accept: text/markdown) to any GET above for a markdown response instead of JSON.

Was this article helpful?

Help us improve by letting us know your thoughts.

Share this article

Farhan Kurnia Pratama

Farhan Kurnia Pratama

Linux/Unix, AI, Open-Source Software, and Cybersecurity.

Security-focused Software Engineer with expertise in Linux/Unix, AI, and Open-Source Software, dedicated to building reliable, maintainable, and privacy-centric systems.

Comments (0)

Leave a comment

If checked, your name is hidden and your comment is posted as Anonymous.
2000 left

No comments yet

Be the first to share your thoughts on this article.

Farhan Kurnia Pratama

Linux/Unix, AI, Open-Source Software, and Cybersecurity.

Security-focused Software Engineer with expertise in Linux/Unix, AI, and Open-Source Software, dedicated to building reliable, maintainable, and privacy-centric systems.

© 2026 Farhan Kurnia Pratama. Privacy Sitemap RSS