Eén API-key, klaar om te integreren.
Geef een agent (n8n, GPT, Claude, je eigen script) een API-key en deze pagina, en hij weet alles wat hij nodig heeft om links aan te maken, op te halen, bij te werken of te verwijderen.
Snelstart
Drie dingen heb je nodig:
- Een account in Link Manager (Google-login).
- Een API-key die je in de app aanmaakt onder de tab "API Toegang".
- Deze basis-URL:
https://linkfinderpro.com/api/v1
Daarna ben je in één commando aan de slag:
curl -H "Authorization: Bearer JOUW_KEY" \
https://linkfinderpro.com/api/v1/links
Een API-key aanmaken
- Log in op Link Manager.
- Klik in de bovenbalk op API Toegang.
- Geef je key een herkenbare naam (bijvoorbeeld
n8n-agent) en klik op Nieuwe API-key aanmaken. - Kopieer de key meteen — hij wordt maar één keer volledig getoond. Daarna zie je alleen nog de prefix.
- Bewaar de key veilig. Verloren? Trek hem in en maak een nieuwe aan.
Een key heeft het formaat lmp_ gevolgd door 48
willekeurige hex-tekens. Hij wordt versleuteld (SHA-256)
opgeslagen in de database — wij kunnen hem zelf niet meer
terughalen.
Authenticatie
Stuur de key bij elk verzoek mee in een header. Twee varianten worden geaccepteerd:
# Variant 1 — Bearer token (aanbevolen) Authorization: Bearer lmp_xxxxxxxxxxxxxxxxxxxxxxxx # Variant 2 — X-API-Key header X-API-Key: lmp_xxxxxxxxxxxxxxxxxxxxxxxx
Een verzoek zonder geldige key krijgt 401 Unauthorized
terug. Bij elk geslaagd verzoek wordt het tijdstip van laatst
gebruik bijgewerkt, zodat je in de app kunt zien welke keys
actief zijn.
Basis-URL
Alle endpoints zitten onder dezelfde basis. Voor jouw omgeving is dat:
https://linkfinderpro.com/api/v1
In productie (Apache met de meegeleverde .htaccess)
werken de schone paden zoals /api/v1/links en
/api/v1/links/42 direct.
Op een omgeving zónder URL-rewrites (bijvoorbeeld de PHP
ingebouwde server) zijn dezelfde endpoints altijd bereikbaar
via hun bestandspad: /api/v1/links.php,
/api/v1/link.php?id=42 en
/api/v1/categories.php. Beide stijlen retourneren
exact dezelfde data.
Endpoints overzicht
| Methode | Pad | Beschrijving |
|---|---|---|
| GET | /api/v1/links | Alle links van de gebruiker ophalen |
| POST | /api/v1/links | Nieuwe link aanmaken |
| GET | /api/v1/links/{id} | Eén link opvragen |
| PUT | /api/v1/links/{id} | Link bijwerken |
| DELETE | /api/v1/links/{id} | Link verwijderen |
| GET | /api/v1/categories | Alle categorieën van de gebruiker |
| POST | /api/v1/categories | Nieuwe categorie aanmaken |
Alle links ophalen
GET /api/v1/links
Geeft alle links terug die bij jouw account horen.
Voorbeeld
curl -H "Authorization: Bearer JOUW_KEY" \
https://linkfinderpro.com/api/v1/links
Probeer het uit
De key blijft alleen in deze browser staan (localStorage). Wij sturen hem niet naar onze server, behalve als header bij dit verzoek.
Response (200 OK)
{
"data": [
{
"link_id": 42,
"name": "Replit",
"url": "https://replit.com",
"search_term": "replit",
"category_id": 3,
"category_name": "Tools",
"category_color": "#3498db",
"notes": "Online IDE",
"view_count": 7,
"created_at": "2026-04-15 09:12:00",
"updated_at": "2026-04-18 11:30:21"
}
],
"count": 1
}
Nieuwe link aanmaken
POST /api/v1/links
Maakt een nieuwe link aan onder jouw account.
Request body (JSON)
| Veld | Type | Verplicht | Beschrijving |
|---|---|---|---|
name | string | ja | Naam van de link |
url | string | ja | De volledige URL |
search_term | string | ja | Zelfgekozen trefwoord om de link snel terug te vinden |
category_id | int | nee | ID van een bestaande categorie |
notes | string | nee | Vrije notitie |
Voorbeeld
curl -X POST https://linkfinderpro.com/api/v1/links \ -H "Authorization: Bearer JOUW_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Voorbeeld Link", "url": "https://voorbeeld.com", "search_term": "voorbeeld", "category_id": 1, "notes": "Optionele notitie" }'
Probeer het uit
Heb je een read-key, dan krijg je een 403. Gebruik een write- of full-key.
Response (201 Created)
{
"message": "Link aangemaakt",
"link_id": 123
}
Eén link opvragen
GET /api/v1/links/{id}
Haalt één specifieke link op aan de hand van zijn
link_id. Werkt ook via het bestandspad
/api/v1/link.php?id={id} als URL-rewrites niet
beschikbaar zijn.
Voorbeeld
curl -H "Authorization: Bearer JOUW_KEY" \
https://linkfinderpro.com/api/v1/links/42
Probeer het uit
Response (200 OK)
{
"link_id": 42,
"name": "Replit",
"url": "https://replit.com",
"search_term": "replit",
"category_id": 3,
"notes": "Online IDE",
"created_at": "2026-04-15 09:12:00"
}
Link bijwerken
PUT /api/v1/links/{id}
Werkt een bestaande link bij. name, url en search_term blijven verplicht; categorie en notities zijn optioneel.
Voorbeeld
curl -X PUT https://linkfinderpro.com/api/v1/links/42 \ -H "Authorization: Bearer JOUW_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Replit (nieuwe naam)", "url": "https://replit.com", "search_term": "replit ide", "category_id": 3 }'
Probeer het uit
PUT vereist een full-key.
Response
// 200 OK bij gewijzigd { "message": "Link bijgewerkt", "link_id": 42 } // 200 OK bij identieke payload { "message": "Geen wijzigingen", "link_id": 42 }
Link verwijderen
DELETE /api/v1/links/{id}
Verwijdert de link permanent.
Voorbeeld
curl -X DELETE https://linkfinderpro.com/api/v1/links/42 \
-H "Authorization: Bearer JOUW_KEY"
Probeer het uit
Let op: dit verwijdert de link permanent. Vereist een full-key.
Response (200 OK)
{
"message": "Link verwijderd",
"link_id": 42
}
Categorieën ophalen
GET /api/v1/categories
Lijst met alle categorieën van de gebruiker. Handig om de juiste category_id te vinden bij het aanmaken van een link.
Voorbeeld
curl -H "Authorization: Bearer JOUW_KEY" \
https://linkfinderpro.com/api/v1/categories
Probeer het uit
Response (200 OK)
{
"data": [
{
"category_id": 3,
"name": "Tools",
"description": "Handige online tools",
"color": "#3498db",
"created_at": "2026-03-01 10:00:00",
"updated_at": "2026-03-12 14:22:00"
}
],
"count": 1
}
Datamodel
De API werkt met twee resources:
Link
link_id— uniek nummer (door server toegekend)name— vrij te kiezen naamurl— volledige URL inclusiefhttps://search_term— eigen trefwoord, vrij te kiezencategory_id— verwijzing naar een categorie ofnullnotes— vrij notitieveld ofnullview_count— alleen-lezen, aantal keer geopendcreated_at,updated_at— tijdstempels
Category
category_id— uniek nummername— naam van de categoriedescription— vrije beschrijving ofnullcolor— hex-kleur (bijv.#3498db)
Foutafhandeling
Alle responses zijn JSON. Bij een fout krijg je een object met
error (code) en message (Nederlandse uitleg):
{
"error": "missing_parameters",
"message": "name, url en search_term zijn verplicht."
}
| Status | Betekenis |
|---|---|
200 OK | Verzoek geslaagd |
201 Created | Nieuwe link succesvol aangemaakt |
400 Bad Request | Ontbrekend of ongeldig veld in de body |
401 Unauthorized | API-key ontbreekt, ongeldig of ingetrokken |
404 Not Found | Link bestaat niet (of niet van jou) |
405 Method Not Allowed | Verkeerde HTTP-methode op dit endpoint |
429 Too Many Requests | Verzoeklimiet bereikt — zie sectie hieronder |
500 / 503 | Onverwachte fout aan de serverkant |
Verzoeklimiet (rate limiting)
Om misbruik en overbelasting te voorkomen geldt een limiet van standaard
60 verzoeken per minuut per API-key. Wordt de limiet overschreden,
dan krijg je een 429 Too Many Requests met JSON-body en drie informatieve headers:
| Header | Betekenis |
|---|---|
Retry-After | Aantal seconden tot je weer mag. |
X-RateLimit-Limit | Maximaal aantal verzoeken per minuut. |
X-RateLimit-Remaining | Aantal verzoeken dat nog over is in dit venster. |
Voorbeeld response:
HTTP/1.1 429 Too Many Requests
Retry-After: 42
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
Content-Type: application/json
{
"error": "rate_limited",
"message": "Te veel verzoeken. Probeer het over enkele seconden opnieuw.",
"limit_per_minute": 60,
"retry_after_seconds": 42
}
Tip: bouw in je client een korte pauze in op basis van Retry-After en
hervat daarna automatisch. De limiet wordt per API-key bijgehouden, dus losse keys
interfereren niet met elkaar.
Paginatie en filters
GET /api/v1/links ondersteunt vier optionele query-parameters waarmee je gericht en
efficiënt links kunt ophalen. Zonder parameters blijft het gedrag backwards-compatible:
je krijgt dan alle links in één response (geen LIMIT) — handig voor exports en
bestaande integraties.
| Parameter | Default | Toelichting |
|---|---|---|
page | 1 | Pagina-nummer (1 of hoger). Activeert paginatie. |
limit | 50 | Items per pagina, maximaal 200. Activeert paginatie. |
search | — | Zoekt case-insensitive in naam, URL en search_term. |
category_id | — | Filter op één categorie. |
De response bevat naast data en count ook een pagination-object:
GET /api/v1/links?page=2&limit=20&search=replit
{
"data": [ /* ... 20 links ... */ ],
"count": 20,
"pagination": {
"page": 2,
"limit": 20,
"total": 137,
"total_pages": 7
}
}
Ongeldige waarden (negatief, te hoog of geen geheel getal) geven een
400 Bad Request met een Nederlandse foutmelding.
Webhooks — realtime events ontvangen
Stel in de app onder het tabblad Webhooks een doel-URL in. Bij elk geselecteerd event sturen we een POST naar die URL met onderstaande JSON-body. Geen polling nodig.
| Event | Wanneer? |
|---|---|
link.created | Een nieuwe link is opgeslagen (UI of API). |
link.updated | Een bestaande link is gewijzigd. |
link.deleted | Een link is verwijderd. |
webhook.test | Vanuit de "Test"-knop in de UI. |
Voorbeeld payload:
POST <jouw-url>
Content-Type: application/json
X-LinkManager-Event: link.created
X-LinkManager-Signature: sha256=<hex digest>
{
"event": "link.created",
"delivered_at": "2026-04-20T12:34:56+00:00",
"data": {
"link_id": 42,
"name": "Voorbeeld",
"url": "https://voorbeeld.com",
"search_term": "voorbeeld",
"category_id": 1,
"category_name": "Werk",
"category_color": "#3498db",
"notes": null,
"created_at": "...",
"updated_at": "..."
}
}
Signature verifiëren
Bereken HMAC-SHA256 over de ruwe request-body met je webhook-secret als sleutel
en vergelijk met de header X-LinkManager-Signature (formaat sha256=<hex>).
# Node.js
const crypto = require('crypto');
const expected = 'sha256=' + crypto
.createHmac('sha256', SECRET)
.update(rawBody)
.digest('hex');
if (expected !== req.headers['x-linkmanager-signature']) {
return res.status(401).end();
}
Time-out per webhook is 5 seconden. Bij een non-2xx of fout wordt
failure_count opgehoogd; er zijn geen automatische retries in deze
versie. Inkomende webhooks of beheer via de REST API zijn nog niet beschikbaar.
OpenAPI spec — importeer in je tool
De volledige API is beschreven in een OpenAPI 3.0 bestand. Daarmee kun je in seconden een client genereren of de API in tools als Postman, Insomnia, Swagger UI of een GPT Action laden.
Spec-URL voor jouw omgeving:
https://linkfinderpro.com/openapi.json
Werkt het pad /openapi.json niet (bijvoorbeeld zonder
URL-rewrites)? Gebruik dan rechtstreeks
https://linkfinderpro.com/openapi.php.
| Tool | Hoe importeren |
|---|---|
| Postman | File → Import → Link → plak de spec-URL. |
| Insomnia | Create → Import From → URL → plak de spec-URL. |
| Swagger UI / Redoc | Open https://editor.swagger.io, kies File → Import URL en plak de spec-URL. |
| GPT Actions (custom GPT) | In de GPT-builder → Actions → Import from URL → plak de spec-URL. Voeg vervolgens een API Key auth toe (header Authorization, prefix Bearer). |
| n8n / code | Genereer een client met openapi-generator of openapi-typescript op basis van de spec-URL. |
# Spec ophalen vanaf je terminal
curl https://linkfinderpro.com/openapi.json
Voor AI-agents
Kant-en-klare context-prompt
Plak onderstaande beschrijving in de systeem-prompt van je
agent. Vervang alleen JOUW_KEY door de échte
API-key.
Je hebt toegang tot de Link Manager REST API.
Basis-URL: https://linkfinderpro.com/api/v1
Authenticatie: stuur bij elk verzoek de header
Authorization: Bearer JOUW_KEY
Endpoints (clean URL via Apache .htaccess):
GET /links — alle links ophalen
POST /links — nieuwe link (body: name, url, search_term, category_id?, notes?)
GET /links/{id} — één link
PUT /links/{id} — link bijwerken (zelfde body als POST)
DELETE /links/{id} — link verwijderen
GET /categories — alle categorieën
Fallback zonder rewrites — gebruik dan deze paden:
/links.php, /link.php?id={id}, /categories.php
Alle requests en responses zijn JSON. Verplichte velden voor een link
zijn name, url en search_term. Bij fouten krijg je een JSON met
"error" en "message". Statuscode 401 betekent dat de key ongeldig is,
403 dat je rol deze actie niet toestaat.
Volledige machine-leesbare beschrijving (OpenAPI 3.0):
https://linkfinderpro.com/openapi.jsonImporteer deze URL als GPT Action of in Postman/Insomnia.