Last Updated: 3/8/2026
API Reference
Overview
LinkAce provides a comprehensive REST API that allows programmatic access to all core functionality. The API uses token-based authentication and returns JSON responses.
Authentication
All API requests require authentication via API tokens.
Generating API Tokens
- Log in to your LinkAce instance
- Navigate to Settings → API Tokens
- Click Create New Token
- Provide a descriptive name
- Copy the generated token (shown only once)
Using API Tokens
Include the token in the Authorization header:
Authorization: Bearer YOUR_API_TOKENBase URL
https://your-linkace-instance.com/api/v1Rate Limiting
- Default: 60 requests per minute per token
- Configurable via environment settings
- Rate limit headers included in responses:
X-RateLimit-LimitX-RateLimit-RemainingX-RateLimit-Reset
Endpoints
Links
GET /links
Retrieve a paginated list of links.
Query Parameters:
page(integer): Page number (default: 1)per_page(integer): Items per page (default: 25, max: 100)order_by(string): Sort field (created_at, title, url)order_dir(string): Sort direction (asc, desc)query(string): Search querytags(array): Filter by tag IDslists(array): Filter by list IDsis_private(boolean): Filter by privacy status
Example Request:
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://your-instance.com/api/v1/links?per_page=50&order_by=created_at&order_dir=desc"Example Response:
{
"data": [
{
"id": 1,
"url": "https://example.com",
"title": "Example Website",
"description": "An example website",
"is_private": false,
"created_at": "2024-01-15T10:30:00Z",
"updated_at": "2024-01-15T10:30:00Z",
"tags": [...],
"lists": [...]
}
],
"meta": {
"current_page": 1,
"per_page": 50,
"total": 150
}
}GET /links/{id}
Retrieve a specific link by ID.
Example Request:
curl -H "Authorization: Bearer YOUR_TOKEN" \
"https://your-instance.com/api/v1/links/1"POST /links
Create a new link.
Request Body:
{
"url": "https://example.com",
"title": "Example Website",
"description": "Optional description",
"is_private": false,
"tags": [1, 2, 3],
"lists": [1],
"check_disabled": false
}Required Fields:
url(string): Valid URL
Optional Fields:
title(string): Auto-generated if omitteddescription(string): Auto-generated if omittedis_private(boolean): Default from user settingstags(array): Tag IDs to associatelists(array): List IDs to associatecheck_disabled(boolean): Disable link checking
PATCH /links/{id}
Update an existing link.
Request Body:
{
"title": "Updated Title",
"description": "Updated description",
"is_private": true
}DELETE /links/{id}
Delete a link (moves to trash if enabled).
Tags
GET /tags
Retrieve all tags.
Query Parameters:
page(integer): Page numberper_page(integer): Items per pageorder_by(string): Sort field (name, created_at)order_dir(string): Sort direction
GET /tags/{id}
Retrieve a specific tag.
POST /tags
Create a new tag.
Request Body:
{
"name": "Technology",
"is_private": false
}PATCH /tags/{id}
Update a tag.
DELETE /tags/{id}
Delete a tag.
Lists
GET /lists
Retrieve all lists.
GET /lists/{id}
Retrieve a specific list with its links.
POST /lists
Create a new list.
Request Body:
{
"name": "Reading List",
"description": "Articles to read",
"is_private": false
}PATCH /lists/{id}
Update a list.
DELETE /lists/{id}
Delete a list.
Search
GET /search
Advanced search across links.
Query Parameters:
query(string): Search termssearch_title(boolean): Search in titlessearch_description(boolean): Search in descriptionstags(array): Filter by tagslists(array): Filter by listsis_private(boolean): Filter by privacyorder_by(string): Sort fieldorder_dir(string): Sort direction
Import/Export
POST /import
Import bookmarks from HTML file.
Request:
- Content-Type:
multipart/form-data - Field:
file(HTML bookmark file)
GET /export
Export all links as HTML.
Query Parameters:
format(string): Export format (html)
Error Handling
Error Response Format
{
"message": "Error description",
"errors": {
"field_name": [
"Validation error message"
]
}
}HTTP Status Codes
200 OK: Successful request201 Created: Resource created successfully204 No Content: Successful deletion400 Bad Request: Invalid request data401 Unauthorized: Missing or invalid API token403 Forbidden: Insufficient permissions404 Not Found: Resource not found422 Unprocessable Entity: Validation errors429 Too Many Requests: Rate limit exceeded500 Internal Server Error: Server error
Pagination
All list endpoints support pagination.
Response Structure:
{
"data": [...],
"meta": {
"current_page": 1,
"per_page": 25,
"total": 100,
"last_page": 4
},
"links": {
"first": "https://...",
"last": "https://...",
"prev": null,
"next": "https://..."
}
}Zapier Integration
LinkAce is available on Zapier with pre-built triggers and actions:
Triggers:
- New Link Created
- Link Updated
- Tag Created
Actions:
- Create Link
- Update Link
- Create Tag
- Add Link to List
Best Practices
- Store tokens securely: Never commit tokens to version control
- Use pagination: Limit response sizes for better performance
- Handle rate limits: Implement exponential backoff
- Validate input: Check data before sending requests
- Monitor usage: Track API calls and errors