Welcome to the source code of my personal website, fontseca.dev. This site is a dedicated portal where I share my work, experience, ideas, interests, and thoughts. The project represents the culmination of four years of strong desired to have a place of my own, and one year of devoted work to make it possible. The initial design was just a single info page about myself, but it eventually turned into a more complete and complex platform.
One of my favorite sections in the site is the archive. Before starting the web, I faced a dilemma: use an existing platform like Hugo, or create a blog manager myself from scratch. After some thinking, I chose to build my own blog manager—what I decided to call the archive. Here, I address subjects I find interesting and worth sharing. As other sections of the site, the archive is fully managed through an RPC-like API that powers the content, and constitutes one of the core parts of my website, alongside my playground. In this archive, I discuss certain topics that interest me.
As a back-end engineer, I encountered a problem most of us have suffered when we want to have a website to present our work. When we work on APIs, we often want to showcase some of our labor. We could talk about it in a detailed article, but most of the time we want to play around with the product. That is why I created the second cornerstone of my website—what I call the playground; which is, by the way, open source and available for integration into other projects.
- Table of Contents
- The Archive
- The Playground
- API Reference
- Errors
- Me
- Experience
- Projects
me.projects.listme.projects.getme.projects.archived.listme.projects.createme.projects.setme.projects.archiveme.projects.unarchiveme.projects.finishme.projects.unfinishme.projects.removeme.projects.set_playground_urlme.projects.set_first_image_urlme.projects.set_second_image_urlme.projects.set_github_urlme.projects.set_collection_urlme.projects.technologies.addme.projects.technologies.remove
- Project Technology Tags
- Archive Article Drafts
- Archive Articles
- Archive Article Patches
- Archive Tags
- Archive Topics
A screenshot of the fontseca.dev's archive in its final development phase.
The archive is a blog managed entirely through an API, featuring various entities like:
- topics,
- tags,
- article drafts,
- published articles,
- and article patches.
Topics represent the main themes I write about, offering an organized way to group content by themes. On the other hand, tags are keywords or labels to help categorize and locate articles related to similar discussions.
Articles are finalized pieces of writing on a particular topic, with one or more tags that are inherent to the discussion of the articles and enhance their discoverability. Each article begins as an **article draft, or just draft **, which is a rough and initial version of the article that outlines its main facts and points. Drafts are improved by making revisions, and can be shared for feedback until they are ready for publishing as complete articles.
A screenshot of one article in the fontseca.dev's archive.
Once published, articles may need to be improved or amended; this is done through article patches, or just patches, which are temporary entities pointing to the original article, where updates and enhancements are stored. Patches allow continuous improvement without taking the article offline and can also be shared to get feedback. When the patch is coherent and complete, it can be merged into the article, making the changes live.
Each article can have only one active patch, both referenced by the same unique identifier. However, the patch is a completely different object that can be handled separately and privately. Since both entities share the same identifier, it becomes easy to access any patch that an article currently has.
Following is the workflow diagram of the articles lifecycle; as you can see, articles start as drafts, then they become real and published articles, once in that state, they can undergo updates or improvements through patches.
The workflow diagram the articles in the fontseca.dev's archive undergo.
A screenshot of the initial version of the fontseca.dev's playground running with a collection exported from Postman.
Challenging in the beginning, this is the section that I find the most attractive on my website, not only because of its UI but also because of its functionality. Before I started this module, I didn't know how to integrate it into my website because I wanted this project to be separate and work as a plug-in to my website. I had two essential ideas: making it run in a different process using some sort of socket-based communication, or making it part of the same codebase as my website. However, the solution was simpler and intuitive.
A brainstorming on how to implement the fontseca.dev's playground.
The playground is a web-based HTTP client to test APIs I've worked on or any other third-party public API. The very basic idea of creating this section was to have a dedicated space to showcase my work as a back-end engineer, since most of the time we find ourselves working far from the unwary visitor, making it hard sometimes to actually show what we do. Another strong reason I had to build it was to experience the challenges the project presented.
For more details about the playground and its nuances, refer its source repository.
My website is, at its core, fundamentally an API; however, I didn't choose to implement a ubiquitous REST API, but rather a more specialized RPC-like collection of methods that provides me more flexibility in action. In essence, it is similar to APIs like Slack's.
The API supports only two HTTP methods: GET and POST. The arguments to these actions are passed in two forms:
- for GET methods, as query string,
- and for POST methods, as
application/x-www-form-urlencodedarguments in the request body.
So for POST requests, the Content-Type header must always be present with the application/x-www-form-urlencoded
value.
All methods are named in snake_case and organized by namespace.
​The following is the set of methods the fontseca.dev API supports.
GET /me.get
POST /me.set
POST /me.set_photo
POST /me.set_resume
POST /me.set_hireable
GET /me.experience.list
GET /me.experience.hidden.list
GET /me.experience.get
POST /me.experience.create
POST /me.experience.set
POST /me.experience.hide
POST /me.experience.show
POST /me.experience.quit
POST /me.experience.remove
GET /me.projects.list
GET /me.projects.get
GET /me.projects.archived.list
POST /me.projects.create
POST /me.projects.set
POST /me.projects.archive
POST /me.projects.unarchive
POST /me.projects.finish
POST /me.projects.unfinish
POST /me.projects.remove
POST /me.projects.set_playground_url
POST /me.projects.set_first_image_url
POST /me.projects.set_second_image_url
POST /me.projects.set_github_url
POST /me.projects.set_collection_url
POST /me.projects.technologies.add
POST /me.projects.technologies.remove
GET /technologies.list
POST /technologies.create
POST /technologies.set
POST /technologies.remove
POST /archive.drafts.start
POST /archive.drafts.publish
GET /archive.drafts.list
GET /archive.drafts.get
POST /archive.drafts.share
POST /archive.drafts.revise
POST /archive.drafts.discard
POST /archive.drafts.tags.add
POST /archive.drafts.tags.remove
GET /archive.articles.list
GET /archive.articles.hidden.list
GET /archive.articles.get
POST /archive.articles.amend
POST /archive.articles.set_slug
POST /archive.articles.set_summary
POST /archive.articles.set_cover
POST /archive.articles.hide
POST /archive.articles.show
POST /archive.articles.remove
POST /archive.articles.pin
POST /archive.articles.unpin
POST /archive.articles.tags.add
POST /archive.articles.tags.remove
GET /archive.articles.patches.list
POST /archive.articles.patches.revise
POST /archive.articles.patches.share
POST /archive.articles.patches.discard
POST /archive.articles.patches.release
POST /archive.tags.create
GET /archive.tags.list
POST /archive.tags.set
POST /archive.tags.remove
POST /archive.topics.create
GET /archive.topics.list
POST /archive.topics.set
POST /archive.topics.remove
The fontseca.dev API implements error handling using the * RFC 7807 Problem Details for HTTP APIs* standard. When an error occurs, the API responds with a structured JSON object that includes details about the problem. This standardized format improves interoperability and provides clients with consistent error messages, making it easier to troubleshoot and respond to issues programmatically.
The standard application/problem+json media type is used for error responses, which provides the following fields:
type: A URI reference that identifies the problem type.title: A short, human-readable summary of the problem.status: The HTTP status code that is applicable to this problem.detail: A human-readable explanation specific to this occurrence of the problem.instance: A URI reference that identifies the specific occurrence of the problem (if applicable).
Indicates a server-side error. This error does not provide detailed information about what happened in the server to the client. Only a contact email for support is provided.
This error occurs when a required argument is missing in the request body of a method.
This error occurs when a value provided in the request is in an incorrect format (e.g., invalid URL or improperly formatted boolean).
This error indicates that the requested resource could not be found in the database.
This error occurs when an input value is too high, too low, or otherwise falls outside the permitted limits, which may be numeric, or based on other boundaries. In other words, the provided value for a method argument is outside the acceptable range defined for it.
This error occurs when one or more fields in the request do not meet the expected validation rules. The response will typically include specific information on each field that failed validation to help identify the issue.
This error occurs when the provided value to a method argument already exists in the database and must be then unique.
This error occurs when an action cannot be repeated because it has already been completed for the target resource. For example, attempting to publish an article draft that is already published.
This error occurs when the requested action cannot proceed because one or more required preconditions have not been met, or a prior step is missing. This typically means that a specific state or prerequisite action is needed before the current action can be performed.
This group of endpoints manages the user profile information.
Object
{
"username": "fontseca.dev",
"first_name": "Jeremy",
"last_name": "Fonseca",
"summary": "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
"job_title": "Software Engineer",
"email": "[email protected]",
"photo_url": "about:blank",
"resume_url": "about:blank",
"coding_since": 2018,
"company": "Gotlim",
"location": "unknown",
"hireable": true,
"github_url": "https://github.com/fontseca",
"linkedin_url": "https://www.linkedin.com/in/fontseca",
"youtube_url": "https://www.youtube.com/@fontseca_dev",
"twitter_url": "about:blank",
"instagram_url": "about:blank",
"created_at": "2024-07-02T23:08:05.306051Z",
"updated_at": "2024-10-01T20:11:23.320304Z"
}Methods
GET /me.get
POST /me.set
POST /me.set_photo
POST /me.set_resume
POST /me.set_hireable
GET /me.getRetrieves the current user's profile information.
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
POST /me.setUpdates the user's profile information. Only the fields provided in the request body will be updated. Fields not included in the request remain unchanged.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
summary |
string |
No | Body | A brief description of the user's profile. |
job_title |
string |
No | Body | The user's current job title. |
email |
string |
No | Body | The user's email address. |
company |
string |
No | Body | The user's company. |
location |
string |
No | Body | The user's physical location. |
github_url |
string |
No | Body | URL of the user's GitHub profile. |
linkedin_url |
string |
No | Body | URL of the user's LinkedIn profile. |
youtube_url |
string |
No | Body | URL of the user's YouTube channel. |
twitter_url |
string |
No | Body | URL of the user's Twitter profile. |
instagram_url |
string |
No | Body | URL of the user's Instagram profile. |
Errors
| Type | Reason |
|---|---|
unparseable_value |
One or more provided URLs are invalid, or the email format is incorrect. |
internal |
A server-side error occurred. |
POST /me.set_photoUpdates the user's profile photo by providing a new URL to the resource.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
photo_url |
string |
Yes | Body | The URL of the new profile photo. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The photo_url argument was not provided. |
internal |
A server-side error occurred. |
POST /me.set_resumeUpdates the URL of the user's résumé PDF file.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
resume_url |
string |
Yes | Body | URL pointing to the location of the résumé file. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The resume_url argument was not provided. |
internal |
A server-side error occurred. |
POST /me.set_hireableUpdates whether the user is currently hireable.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
hireable |
bool |
Yes | Body | Indicates if the user is open to work right now. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The hireable argument was not provided. |
unparseable_value |
The hireable argument contains an invalid boolean value. |
internal |
A server-side error occurred. |
This set of endpoints manages the user's professional experience entries, allowing for the addition, updating, hiding, and removal of experiences within the user's profile.
Object
{
"uuid": "bb4ef809-28ce-42b2-aa08-fd06af14e5e8",
"starts": "2019-01-01T00:00:00Z",
"ends": null,
"job_title": "Future Security Liaison",
"company": "Glover Group",
"company_homepage": null,
"country": "Canada",
"summary": "Condimentum id venenatis a condimentum vitae sapien pellentesque habitant morbi.",
"active": false,
"hidden": false,
"created_at": "2024-07-02T23:10:18.274465Z",
"updated_at": "2024-10-01T20:40:06.182398Z"
}Methods
GET /me.experience.list
GET /me.experience.hidden.list
GET /me.experience.get
POST /me.experience.create
POST /me.experience.set
POST /me.experience.hide
POST /me.experience.show
POST /me.experience.quit
POST /me.experience.remove
GET /me.experience.listRetrieves all experience entries for the user.
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
me.experience.hidden.list
GET /me.experience.hidden.listRetrieves all experience entries that are marked as hidden from the public view. Newly created entries are hidden by default.
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
GET /me.experience.getRetrieves the details of a specific experience entry.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
experience_uuid |
uuid |
Yes | Query | The UUID of the experience to retrieve. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified experience entry was not found. |
unparseable_value |
The provided experience_uuid format is invalid. |
internal |
A server-side error occurred. |
POST /me.experience.createCreates a new experience entry for the user. This newly created entry is hidden by default. Use me.experience.show to make it publicly available.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
starts |
date |
Yes | Body | The start date in the format YYYY-MM-DD. |
ends |
date |
No | Body | The end date in the format YYYY-MM-DD. |
job_title |
string |
Yes | Body | The title held in this position. |
company |
string |
Yes | Body | The name of the employing company. |
company_homepage |
string |
Yes | Body | The URL of the company's homepage. |
country |
string |
Yes | Body | The country where this position is based. |
summary |
string |
Yes | Body | A brief description of the role and responsibilities. |
Errors
| Type | Reason |
|---|---|
unmet_validation |
One or more fields do not meet validation requirements. |
unparseable_value |
Invalid URL format for company_homepage. |
internal |
A server-side error occurred. |
POST /me.experience.setUpdates an existing experience entry. Only fields provided in the request body will be modified.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
experience_uuid |
uuid |
Yes | Body | The UUID of the experience to update. |
starts |
date |
No | Body | The start date in the format YYYY-MM-DD. |
ends |
date |
No | Body | The end date in the format YYYY-MM-DD. |
job_title |
string |
No | Body | The title held in this position. |
company |
string |
No | Body | The name of the employing company. |
company_homepage |
string |
No | Body | The URL of the company's homepage. |
country |
string |
No | Body | The country where this position is based. |
summary |
string |
No | Body | A brief description of the role and responsibilities. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified experience entry was not found. |
unmet_validation |
One or more fields do not meet validation requirements. |
unparseable_value |
Invalid URL format for company_homepage. |
internal |
A server-side error occurred. |
POST /me.experience.hideMarks an experience entry as hidden, making it private.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
experience_uuid |
uuid |
Yes | Body | The UUID of the experience entry to hide. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified experience entry was not found. |
unparseable_value |
The argument experience_uuid is either not present (empty) or has an invalid format. |
internal |
A server-side error occurred. |
POST /me.experience.showMarks a hidden experience entry as visible, making it public.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
experience_uuid |
uuid |
Yes | Body | The UUID of the experience entry to show. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified experience entry was not found. |
unparseable_value |
The argument experience_uuid is either not present (empty) or has an invalid format. |
internal |
A server-side error occurred. |
POST /me.experience.quitMarks the experience entry as no longer active, setting the ends field to the current date.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
experience_uuid |
uuid |
Yes | Body | The UUID of the experience entry to quit. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified experience entry was not found. |
unparseable_value |
The argument experience_uuid is either not present (empty) or has an invalid format. |
internal |
A server-side error occurred. |
POST /me.experience.removePermanently deletes an experience entry from the user's profile.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
experience_uuid |
uuid |
Yes | Body | The UUID of the experience entry to remove. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified experience entry was not found. |
unparseable_value |
The argument experience_uuid is either not present (empty) or has an invalid format. |
internal |
A server-side error occurred. |
These endpoints manage the user's projects, whether personal or done on behalf of a company or third-party clients.
Object
{
"uuid": "ecda6002-e2d8-40bb-9ba7-5a7bf21f8872",
"name": "Awesome Granite Gloves",
"slug": "awesome-granite-gloves",
"homepage": "http://delaney.com",
"company": "Baker and Sons",
"company_homepage": "http://elliot.biz",
"starts": "2024-01-15T00:00:00Z",
"ends": "2024-10-08T00:00:00Z",
"language": "Go",
"summary": "Sequi repellat eligendi aut quis qui id eligendi autem incidunt.",
"read_time": 1,
"content": "Eaque reprehenderit rerum consequuntur aut recusandae ipsa.",
"first_image_url": "https://picsum.photos/200/300",
"second_image_url": "https://picsum.photos/200/300",
"github_url": "about:blank",
"collection_url": "about:blank",
"playground_url": "about:blank",
"playable": false,
"archived": false,
"finished": false,
"technology_tags": [
"gRPC",
"AWS",
"htmx"
],
"created_at": "2024-10-19T02:28:26.30186Z",
"updated_at": "2024-11-01T02:03:43.455466Z"
}Methods
GET /me.projects.list
GET /me.projects.get
GET /me.projects.archived.list
POST /me.projects.create
POST /me.projects.set
POST /me.projects.archive
POST /me.projects.unarchive
POST /me.projects.finish
POST /me.projects.unfinish
POST /me.projects.remove
POST /me.projects.set_playground_url
POST /me.projects.set_first_image_url
POST /me.projects.set_second_image_url
POST /me.projects.set_github_url
POST /me.projects.set_collection_url
POST /me.projects.technologies.add
POST /me.projects.technologies.remove
GET /me.projects.listRetrieves the list of all user's projects.
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
GET /me.projects.getRetrieves details of a specific project by its UUID.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Query | The UUID of the project. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
unparseable_value |
The argument project_uuid is either not present (empty) or has an invalid format. |
internal |
A server-side error occurred. |
GET /me.projects.archived.listLists all projects marked as archived.
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
POST /me.projects.createCreates a new project entry.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
name |
string |
Yes | Body | The name of the project. |
homepage |
string |
No | Body | The project homepage URL. |
company |
string |
No | Body | The name of the company (if any). |
company_homepage |
string |
No | Body | The URL of the company homepage. |
starts |
date |
No | Body | Start date in YYYY-MM-DD format. |
ends |
date |
No | Body | End date in YYYY-MM-DD format. |
language |
string |
No | Body | The programming language used. |
summary |
string |
No | Body | A brief project description. |
content |
string |
No | Body | Detailed project content or overview. |
first_image_url |
string |
No | Body | The primary image of the project. |
second_image_url |
string |
No | Body | The secondary image of the project. |
github_url |
string |
No | Body | The URL of the project in GitHub. |
collection_url |
string |
No | Body | A URL to download the JSON collection exported from Postman. (If set, the project will be playable.) |
Errors
| Type | Reason |
|---|---|
unmet_validation |
Required fields are missing or invalid. |
internal |
A server-side error occurred. |
POST /me.projects.setUpdates details of an existing project.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project to update. |
name |
string |
No | Body | The name of the project. |
homepage |
string |
No | Body | The project homepage URL. |
company |
string |
No | Body | The name of the company (if any). |
company_homepage |
string |
No | Body | The URL of the company homepage. |
starts |
date |
No | Body | Start date in YYYY-MM-DD format. |
ends |
date |
No | Body | End date in YYYY-MM-DD format. |
language |
string |
No | Body | The programming language used. |
summary |
string |
No | Body | A brief project description. |
content |
string |
No | Body | Detailed project content or overview. |
first_image_url |
string |
No | Body | The primary image of the project. |
second_image_url |
string |
No | Body | The secondary image of the project. |
github_url |
string |
No | Body | The URL of the project in GitHub. |
collection_url |
string |
No | Body | A URL to download the JSON collection exported from Postman. (If set, the project will be playable.) |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
The project_uuid argument was not provided in the request. |
unmet_validation |
Required fields are missing or invalid. |
internal |
A server-side error occurred. |
POST /me.projects.archiveMarks a project as archived.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
The project_uuid argument was not provided in the request. |
unparseable_value |
The argument project_uuid is either not present (empty) or has an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.unarchiveUnarchives a previously archived project.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
The project_uuid argument was not provided in the request. |
unparseable_value |
The argument project_uuid is either not present (empty) or has an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.finishMarks a project as finished.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
The project_uuid argument was not provided in the request. |
unparseable_value |
The argument project_uuid is either not present (empty) or has an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.unfinishMarks a project as unfinished.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
The project_uuid argument was not provided in the request. |
unparseable_value |
The argument project_uuid is either not present (empty) or has an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.removePermanently deletes a project.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
The project_uuid argument was not provided in the request. |
unparseable_value |
The argument project_uuid is either not present (empty) or has an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.set_playground_urlIf the project is technically an HTTP/1.1 API, sets the URL to the Postman collection in the Playground.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
url |
string |
Yes | Body | The URL of the Postman collection in the Playground. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
Either the argument project_uuid or url was not provided in the request. |
unparseable_value |
Any of the arguments have an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.set_first_image_urlSets the primary image of the project.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
url |
string |
Yes | Body | The URL of the image. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
Either the argument project_uuid or url was not provided in the request. |
unparseable_value |
Any of the arguments have an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.set_second_image_urlSets the secondary image of the project.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
url |
string |
Yes | Body | The URL of the image. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
Either the argument project_uuid or url was not provided in the request. |
unparseable_value |
Any of the arguments have an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.set_github_urlSets the URL of the GitHub repository for the project.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
url |
string |
Yes | Body | The URL of the repository. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
Either the argument project_uuid or url was not provided in the request. |
unparseable_value |
Any of the arguments have an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.set_collection_urlThe URL to the exported Postman collection.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
url |
string |
Yes | Body | The URL of the Postman collection. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project was not found. |
missing_argument |
Either the argument project_uuid or url was not provided in the request. |
unparseable_value |
Any of the arguments have an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.technologies.addAdds a technology tag to the specified project. (See Project Technology Tags.)
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
technology_id |
uuid |
Yes | Body | The UUID of the technology tag. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project or tag was not found. |
missing_argument |
Either the argument project_uuid or technology_id was not provided in the request. |
duplicate_key |
The tag that was provided is already added to the project. |
unparseable_value |
Any of the arguments have an invalid format. |
internal |
A server-side error occurred. |
POST /me.projects.technologies.removeRemoves a technology tag from the specified project. (See Project Technology Tags.)
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
project_uuid |
uuid |
Yes | Body | The UUID of the project. |
technology_id |
uuid |
Yes | Body | The UUID of the technology tag. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified project or tag was not found. |
missing_argument |
Either the argument project_uuid or technology_id was not provided in the request. |
unparseable_value |
Any of the arguments have an invalid format. |
internal |
A server-side error occurred. |
These endpoints manage the technology tags that can be associated with the user's projects. Originally, these tags were intended to represent languages or tools, but now they have evolved to represent other kinds of concepts, such as tools, social skills, frameworks, and related matters.
Object
{
"uuid": "b5c12413-5f93-4dc3-93d6-892e52bce2b7",
"name": "SQL",
"created_at": "2024-10-01T21:44:45.660805Z",
"updated_at": "2024-10-01T21:44:45.660805Z"
}Methods
GET /technologies.list
POST /technologies.create
POST /technologies.set
POST /technologies.remove
GET /technologies.listRetrieves a list of all available technology tags.
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
POST /technologies.createCreates a new technology tag.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
name |
string |
Yes | Body | The name of the technology tag. |
Errors
| Type | Reason |
|---|---|
unmet_validation |
The technology tag name is missing or invalid. |
duplicate_key |
The technology tag name is already registered. |
internal |
A server-side error occurred. |
POST /technologies.setUpdates the name of an existing technology tag.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
id |
uuid |
Yes | Body | The UUID of the technology tag. |
name |
string |
Yes | Body | The name of the tag. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified technology tag was not found. |
missing_argument |
The id argument was not provided in the request. |
unmet_validation |
The technology tag name is missing or invalid. |
duplicate_key |
The technology tag name is already registered. |
internal |
A server-side error occurred. |
POST /technologies.removeRemoves a technology tag.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
id |
uuid |
Yes | Body | The UUID of the technology tag. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified technology tag was not found. |
missing_argument |
The id argument was not provided in the request. |
internal |
A server-side error occurred. |
The following endpoints help to manage article drafts in the archive. An article draft, or simply draft, is an early version of an article that has not yet been finalized or published. A draft serves as a space to outline the main ideas, facts, or arguments of a subject. It can be revised and refined before being shared for feedback, helping to improve clarity and appeal. Once the draft meets the desired standards for completeness and engagement, it can be published.
Object
{
"uuid": "5ed25d57-219d-4617-b709-36cc358bfaee",
"title": "At autem impedit dolor maxime quae beatae adipisci.",
"slug": "at-autem-impedit-dolor-maxime-quae-beatae-adipisci",
"author": "fontseca.dev",
"read_time": 1,
"is_draft": true,
"is_pinned": false,
"published_at": null,
"modified_at": null,
"drafted_at": "2024-07-11T16:43:49.80269Z",
"updated_at": "2024-07-11T16:43:49.80269Z",
"topic": {
"id": "thinking",
"name": "Thinking",
"created_at": "2024-07-09T20:28:18.564315Z",
"updated_at": "2024-07-09T20:28:18.564315Z"
},
"tags": null,
"content": "Molestias ut sapiente nihil error iure ea necessitatibus maxime aliquam."
}Methods
POST /archive.drafts.start
POST /archive.drafts.publish
GET /archive.drafts.list
GET /archive.drafts.get
POST /archive.drafts.share
POST /archive.drafts.revise
POST /archive.drafts.discard
POST /archive.drafts.tags.add
POST /archive.drafts.tags.remove
POST /archive.drafts.startInitiates the creation of a new article draft and returns its UUID. Only the title is required to start a draft; other fields can be added or modified in subsequent revisions. A unique slug is automatically generated based from the title, and it will get automatically updated if the title ever changes.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
title |
string |
Yes | Body | The name of the article draft. |
content |
string |
No | Body | Initial content of the article draft. |
Errors
| Type | Reason |
|---|---|
unmet_validation |
The technology tag name is missing or invalid. |
duplicate_key |
The technology tag name is already registered. |
internal |
A server-side error occurred. |
POST /archive.drafts.publishPublishes an article draft, making it publicly available. If it is called on a draft that's already published, the request will have no effect. Before a draft can be published, it must be associated with a topic within the archive to ensure it is properly categorized. (See archive topics)
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
draft_uuid |
uuid |
Yes | Body | The UUID of the article draft. |
Errors
| Type | Reason |
|---|---|
action_already_completed |
The draft is already published and does not need further action. |
action_refused |
The draft cannot be published because it lacks a required topic association. |
missing_argument |
The draft_uuid argument was not provided in the request. |
unparseable_value |
The argument draft_uuid is either not present (empty) or has an invalid format. |
not_found |
The specified article draft was not found. |
internal |
A server-side error occurred. |
GET /archive.drafts.listRetrieves a list of ongoing article drafts. If a search query is provided, the method will filter results to include
only drafts with titles that contain any of the keywords in the search string. The response supports pagination, with
page and rpp (records per page) parameters for fine control.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
search |
string |
No | Query | A string to filter results by keywords in draft titles. If empty or omitted, lists all drafts. |
page |
int |
No | Query | The page number to request. Defaults to 1 if omitted. |
rpp |
int |
No | Query | The number of drafts per page. Defaults to 20 if not provided. |
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
GET /archive.drafts.getRetrieves one article draft by its UUID.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
draft_uuid |
uuid |
Yes | Query | The UUID of the article draft. |
Errors
| Type | Reason |
|---|---|
unparseable_value |
The argument draft_uuid is either not present (empty) or has an invalid format. |
not_found |
The specified article draft was not found. |
internal |
A server-side error occurred. |
POST /archive.drafts.shareGenerates a temporary, shareable link to an article draft, allowing those with the link to view the draft's progress and provide feedback. The link does not make the draft publicly accessible; only users with the exact link can access the draft. The link expires after a specified duration, which is implementation-dependent and might be included in the response. If this endpoint is called again before the previous link expires, it will return the same link.
The generated link has the format
/archive/sharing/{hash}
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
draft_uuid |
uuid |
Yes | Body | The UUID of the article draft. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The draft_uuid argument was not provided in the request. |
unparseable_value |
The argument draft_uuid is either empty or has an invalid format. |
not_found |
The specified article draft was not found. |
internal |
A server-side error occurred. |
POST /archive.drafts.revisePermits updating or enhancing an article draft by adding corrections or new information. It is also used to associate
the draft with a specific topic for better organization. When a new title is provided, the slug will automatically be
updated to reflect the title change. Additionally, if content is revised, the read_time will be recalculated.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
draft_uuid |
uuid |
Yes | Body | The UUID of the article draft. |
topic_id |
uuid |
No | Body | The UUID of the topic of the topic to associate. |
title |
string |
No | Body | The new or revised title of the article draft. |
content |
string |
No | Body | The new or revised content of the article draft. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The draft_uuid argument was not provided in the request. |
unparseable_value |
The argument draft_uuid is either empty or has an invalid format. |
not_found |
The specified article draft or topic was not found. |
internal |
A server-side error occurred. |
POST /archive.drafts.discardPermanently deletes an article draft.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
draft_uuid |
uuid |
Yes | Body | The UUID of the article draft. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The draft_uuid argument was not provided in the request. |
unparseable_value |
The argument draft_uuid is either empty or has an invalid format. |
not_found |
The specified article draft was not found. |
internal |
A server-side error occurred. |
POST /archive.drafts.tags.addAssociates a tag with the specified article draft. If the draft already has the specified tag, an error will be returned indicating a duplicate association.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
draft_uuid |
uuid |
Yes | Body | The UUID of the article draft. |
tag_id |
string |
Yes | Body | The ID of the tag. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The draft_uuid or tag_id argument was not provided in the request. |
unparseable_value |
The argument draft_uuid is either empty or has an invalid format. |
duplicate_key |
The specified tag is already associated with the article draft. |
not_found |
The specified article draft or tag was not found. |
internal |
A server-side error occurred. |
POST /archive.drafts.tags.removeDetaches a tag from the specified article draft.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
draft_uuid |
uuid |
Yes | Body | The UUID of the article draft. |
tag_id |
string |
Yes | Body | The ID of the tag. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The draft_uuid or tag_id argument was not provided in the request. |
unparseable_value |
The argument draft_uuid is either empty or has an invalid format. |
not_found |
The specified article draft or tag was not found. |
internal |
A server-side error occurred. |
An article in the website's archive is a public piece of writing focused on a particular topic. Each article is carefully organized and tagged with relevant keywords, allowing readers to easily locate articles by subject. Tags are an integral part of an article's metadata, providing quick insights into its contents and connections with related articles.
Articles might undergo continual improvement to maintain accuracy, relevance, and quality. When changes are needed, an article patch is created internally to keep track of updates and enhancements while keeping the main article accessible to readers. The patch process ensures a seamless user experience, allowing real-time improvements without disrupting the article's availability.
Object
{
"uuid": "d63a34ea-65bd-421c-a1a9-5dd7790d8e3c",
"title": "Tongue porchetta flank cupim frankfurter.",
"slug": "how-to-change-an-article-s-slug",
"author": "fontseca.dev",
"views": 67,
"read_time": 1,
"is_draft": false,
"is_pinned": true,
"published_at": "2022-03-22T11:26:37Z",
"modified_at": "2024-07-10T22:34:44.894895Z",
"drafted_at": "2024-07-10T21:27:07.504738Z",
"updated_at": "2024-07-10T22:34:44.894895Z",
"topic": {
"id": "computer-programming",
"name": "Computer Programming",
"created_at": "2024-07-09T20:28:18.564315Z",
"updated_at": "2024-07-09T20:28:18.564315Z"
},
"tags": [
{
"id": "git",
"name": "Git",
"created_at": "2024-07-09T20:29:30.909971Z",
"updated_at": "2024-07-09T20:30:50.747377Z"
},
{
"id": "go",
"name": "Go",
"created_at": "2024-07-09T20:29:56.933028Z",
"updated_at": "2024-07-09T20:29:56.933028Z"
}
],
"content": "Rerum perferendis illo optio quaerat excepturi repudiandae labore..."
}Methods
GET /archive.articles.list
GET /archive.articles.hidden.list
GET /archive.articles.get
POST /archive.articles.amend
POST /archive.articles.set_slug
POST /archive.articles.set_summary
POST /archive.articles.set_cover
POST /archive.articles.hide
POST /archive.articles.show
POST /archive.articles.remove
POST /archive.articles.pin
POST /archive.articles.unpin
POST /archive.articles.tags.add
POST /archive.articles.tags.remove
GET /archive.articles.listRetrieves a list of published articles. If a search query is provided, the method will filter results to include only
articles with titles that contain any of the keywords in the search string. The response supports pagination, with
page and rpp (records per page) parameters for fine control.
Note: Pinned articles are always listed first.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
search |
string |
No | Query | A string to filter results by keywords in article titles. If empty or omitted, lists all articles. |
page |
int |
No | Query | The page number to request. Defaults to 1 if omitted. |
rpp |
int |
No | Query | The number of articles per page. Defaults to 20 if not provided. |
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
GET /archive.articles.getRetrieves one article by its UUID.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Query | The UUID of the article. |
Errors
| Type | Reason |
|---|---|
unparseable_value |
The argument article_uuid is either not present (empty) or has an invalid format. |
not_found |
The specified article was not found. |
internal |
A server-side error occurred. |
archive.articles.hidden.list
GET /archive.articles.hidden.listRetrieves a list of hidden articles. If a search query is provided, the method will filter results to include only
articles with titles that contain any of the keywords in the search string. The response supports pagination, with
page and rpp (records per page) parameters for fine control.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
search |
string |
No | Query | A string to filter results by keywords in article titles. If empty or omitted, lists all articles. |
page |
int |
No | Query | The page number to request. Defaults to 1 if omitted. |
rpp |
int |
No | Query | The number of articles per page. Defaults to 20 if not provided. |
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
POST /archive.articles.amendInitiates the revision process for an article, allowing you to update its content without affecting the live version. When this method is called, the article remains publicly accessible in its current state while a separate patch record is created for tracking any revisions. This setup enables you to make changes incrementally until the updated content is ready for publication. To view ongoing amendments, list the article patches.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
not_found |
The specified article or tag was not found. |
action_refused |
The article is already being amended. |
internal |
A server-side error occurred. |
POST /archive.articles.set_slugChanges the slug of a published article.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
slug |
string |
Yes | Body | The new slug of the article. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid or slug argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
not_found |
The specified article or tag was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.set_summaryChanges the summary of a published article.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
summary |
string |
Yes | Body | The new summary of the article. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid or summary argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
not_found |
The specified article or tag was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.set_coverSets the cover URL and caption cover image of an article.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
url |
string |
No | Body | The URL of the cover image. |
caption |
string |
No | Body | The (optional) caption for the article's cover image. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
not_found |
The specified article or tag was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.hideHides a publicly available article. Hidden articles can be listed with the method /archive.articles.hidden.list.
Note: Using
/archive.articles.geton a hidden article returns anot_founderror.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
not_found |
The specified article or tag was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.showShows a hidden article, making it public again.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
not_found |
The specified article or tag was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.removePermanently deletes an article.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
not_found |
The specified article or tag was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.pinMakes an article appear to the top of any listing, ensuring higher visibility for highlighting key content. If an article is already pinned, no additional action is taken, ensuring that duplicates do not occur.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
not_found |
The specified article or tag was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.unpinRemoves the pin from an article, returning it to its default position within the archive listing order.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
not_found |
The specified article or tag was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.tags.addAssociates a tag with the specified article. If the article already has the specified tag, an error will be returned indicating a duplicate association.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
tag_id |
string |
Yes | Body | The ID of the tag. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid or tag_id argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
duplicate_key |
The specified tag is already associated with the article. |
not_found |
The specified article or tag was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.tags.removeDetaches a tag from the specified article.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
article_uuid |
uuid |
Yes | Body | The UUID of the article. |
tag_id |
string |
Yes | Body | The ID of the tag. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The article_uuid or tag_id argument was not provided in the request. |
unparseable_value |
The argument article_uuid is either empty or has an invalid format. |
not_found |
The specified article or tag was not found. |
internal |
A server-side error occurred. |
An article patch, or simply patch, is a temporary internal entity used to manage updates, corrections, or improvements to an article while keeping the original article available to the public. A patch is created each time one article requires amendment, allowing changes to be prepared, revised, and finalized without disrupting the live content.
Each patch directly references its corresponding article, using the article's UUID, to maintain continuity and provide a clear connection to the content it improves. Because only one patch can exist per article at a time, accessing the patch through the article's UUID allows for seamless retrieval of any ongoing updates.
Patches can also be shared for feedback before the final release. Once a patch is complete and coherent, it is merged into the original article.
Object
{
"article_uuid": "090b38a9-fb88-4604-8c99-117a79b97026",
"title": "Quia distinctio? Eum odit, quod ratione vel!",
"slug": "quia-distinctio-eum-odit-quod-ratione-vel",
"topic_id": "writing",
"content": "Voluptates odit omnis quisquam odit ipsa aperiam..."
}Methods
GET /archive.articles.patches.list
POST /archive.articles.patches.revise
POST /archive.articles.patches.share
POST /archive.articles.patches.discard
POST /archive.articles.patches.release
GET /archive.articles.patches.listRetrieves the list of ongoing articles patches.
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
POST /archive.articles.patches.revisePermits updating or enhancing an article patch by adding corrections or new information. It can also be used to
associate the patch with a specific. When a new title is provided, the slug will automatically be updated to reflect
the title change. Additionally, if content is revised, the read_time will be recalculated.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
patch_uuid |
uuid |
Yes | Body | The UUID of the article patch. |
topic_id |
uuid |
No | Body | The UUID of the topic of the topic to associate. |
title |
string |
No | Body | The new or revised title of the article patch. |
content |
string |
No | Body | The new or revised content of the article patch. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The patch_uuid argument was not provided in the request. |
unparseable_value |
The argument patch_uuid is either empty or has an invalid format. |
not_found |
The specified article patch or topic was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.patches.shareGenerates a temporary, shareable link to an article patch, allowing those with the link to view the patch's progress and provide feedback. The link does not make the patch publicly accessible or released; only users with the exact link can access the patch. The link expires after a specified duration, which is implementation-dependent and might be included in the response. If this endpoint is called again before the previous link expires, it will return the same link.
The generated link has the format
/archive/sharing/{hash}
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
patch_uuid |
uuid |
Yes | Body | The UUID of the article patch. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The patch_uuid argument was not provided in the request. |
unparseable_value |
The argument patch_uuid is either empty or has an invalid format. |
not_found |
The specified article patch was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.patches.discardPermanently deletes an article patch, leaving the original article intact.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
patch_uuid |
uuid |
Yes | Body | The UUID of the article patch. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The patch_uuid argument was not provided in the request. |
unparseable_value |
The argument patch_uuid is either empty or has an invalid format. |
not_found |
The specified article patch was not found. |
internal |
A server-side error occurred. |
POST /archive.articles.patches.releaseMerges the changes from an article patch into the original article, making the updates permanent and visible in the main article. After the patch is released, it is destroyed and no longer accessible.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
patch_uuid |
uuid |
Yes | Body | The UUID of the article patch. |
Errors
| Type | Reason |
|---|---|
missing_argument |
The patch_uuid argument was not provided in the request. |
unparseable_value |
The argument patch_uuid is either empty or has an invalid format. |
not_found |
The specified article patch was not found. |
internal |
A server-side error occurred. |
Tags are metadata objects used to categorize articles, making it easier to organize and search content based on relevant matters.
Object
{
"id": "git",
"name": "Git",
"created_at": "2024-07-09T20:29:30.909971Z",
"updated_at": "2024-07-09T20:30:50.747377Z"
}Methods
POST /archive.tags.create
GET /archive.tags.list
POST /archive.tags.set
POST /archive.tags.remove
POST /archive.tags.createCreates a new tag.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
name |
string |
Yes | Body | The name of the tag. |
Errors
| Type | Reason |
|---|---|
unmet_validation |
The tag name is missing or invalid. |
duplicate_key |
The tag name is already registered. |
internal |
A server-side error occurred. |
GET /archive.tags.listRetrieves a list of all available tags in the archive.
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
POST /archive.tags.setUpdates the name of an existing tag if it is not being used by an article already.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
tag_id |
string |
Yes | Body | The ID of the tag. |
name |
string |
Yes | Body | The name of the tag. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified tag was not found. |
missing_argument |
The id argument was not provided in the request. |
unmet_validation |
The tag name is missing or invalid. |
action_refused |
The tag cannot be updated since the ID is in use by one or more articles. |
internal |
A server-side error occurred. |
POST /archive.tags.removeRemoves a tag.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
tag_id |
string |
Yes | Body | The ID of the tag. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified tag was not found. |
missing_argument |
The id argument was not provided in the request. |
internal |
A server-side error occurred. |
These endpoints help to manage topics in the archive. A topic is broad subjects that categorize the discussions in an article, helping to organize content by different themes.
Object
{
"id": "philosophy",
"name": "Philosophy",
"created_at": "2024-07-09T20:28:44.679679Z",
"updated_at": "2024-07-09T20:28:44.679679Z"
}Methods
POST /archive.topics.create
GET /archive.topics.list
POST /archive.topics.set
POST /archive.topics.remove
POST /archive.topics.createCreates a new topic.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
name |
string |
Yes | Body | The name of the topic. |
Errors
| Type | Reason |
|---|---|
unmet_validation |
The topic name is missing or invalid. |
duplicate_key |
The topic is already registered. |
internal |
A server-side error occurred. |
GET /archive.topics.listRetrieves a list of all topics available in the archive.
Errors
| Type | Reason |
|---|---|
internal |
A server-side error occurred. |
POST /archive.topics.setUpdates the name of an existing topic if it is not being used by an article already.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
topic_id |
string |
Yes | Body | The ID of the topic. |
name |
string |
Yes | Body | The name of the topic. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified topic was not found. |
missing_argument |
The id argument was not provided in the request. |
unmet_validation |
The topic name is missing or invalid. |
action_refused |
The topic cannot be updated since the ID is in use by one or more articles. |
internal |
A server-side error occurred. |
POST /archive.topics.removeRemoves a topic.
Arguments
| Name | Type | Required | Where | Description |
|---|---|---|---|---|
topic_id |
string |
Yes | Body | The ID of the topic. |
Errors
| Type | Reason |
|---|---|
not_found |
The specified topic was not found. |
missing_argument |
The id argument was not provided in the request. |
internal |
A server-side error occurred. |