This article covers the paradigms we follow when designing Solar Network APIs, helping you better interact with our APIs for secondary development.
Minimization
Our APIs aim to be minimalistic. Unlike some major platforms, where the response includes not only data but also a bunch of status codes, messages, and request IDs, we keep such information in the HTTP headers. The HTTP response body contains only the raw data, with no extra information (for paginated endpoints, an additional field for total count will be included).
CRUD Operations
Our APIs generally follow RESTful design patterns. If you're unfamiliar with RESTful principles, here’s how we practice it:
Request Methods
GET
for fetching dataPOST
for creating or performing some operationsPUT
for updating (though in RESTful principles it's also defined for creation, we don’t use it that way)PATCH
for updating (rarely used)DELETE
for removing data
Path Mapping
If you use POST
to create data at an endpoint, using GET
on the same endpoint will typically list the data.
Appending /<id>
to the path will fetch a specific data entry. Switching the request method to PUT
updates the entry, and using DELETE
removes it.
If additional actions are needed, append paths after /<id>
, usually for operations handled via POST
.
Here’s an example of path mapping for posts:
Note: :id
is a path parameter.
GET /posts
- Retrieves a list of posts (paginated)GET /posts/:id
- Retrieves a specific postGET /posts/:id/replies
- Retrieves replies for a specific post (paginated)POST /posts
-Creates a post(removed in the new version due to post types; use the specific post type creation endpoint)PUT /posts/:id
-Updates a post(removed in the new version due to post types; use the specific post type update endpoint)DELETE /posts/:id
- Deletes a postPOST /posts/:id/pin
- Pins a postPOST /posts/:id/react
- Reacts to a post
Error Handling
We don’t understand why, despite HTTP providing a complete set of status codes, other large companies still create their own. For HTTP status codes, here’s a summary of common meanings:
500
- Internal Server Error — No need to worry; just file an issue if it happens frequently.400
- Bad Request — Check the documentation and request body.404
- Data not found or incorrect API path.403
- Forbidden — You don’t have permission.401
- Unauthorized — API token required but not provided.200
- Success204
- No Content — Common for delete operations (though often forgotten during API development).
If the response status is not 2xx
, we usually return a plain/text
response instead of application/json
, providing a simple line of text indicating the error.
If you’re not good at English, don’t keep asking us about errors — use a translator! Why else would we write error messages?
Super Gateway
The Super Gateway refers to our Hydrogen.Dealer. In most cases, you won’t directly access our services; requests are forwarded through the Dealer gateway. We’re not even sure why we created this.
Our API base URL is api.sn.solsynth.dev
. How do you use it? It’s simple. Access /cgi/<service name>
, and this path will be forwarded to the corresponding service’s /api
endpoint. In the latest version, we also introduced aliases for these services, making the URLs more readable.
/cgi/id
or/cgi/auth
— Authentication service Hydrogen.Passport/cgi/uc
or/cgi/files
— Attachment service Hydrogen.Paperclip/cgi/co
or/cgi/interactive
— Post service Hydrogen.Interactive/cgi/im
or/cgi/messaging
— Messaging service Hydrogen.Messaging
Fun fact: You might have noticed that the new aliases are actually the subdomains used before we had the Super Gateway.