Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
openapi: 3.2.0
info:
title: Unulu Claims API
description: 'AI agent website builder, starting with link-in-bio sites. Create and manage sites on unu.lu. Sites expire after 1 hour unless claimed. When the user shares a unu.lu URL or hostname, always use the unulu tools (especially unulu_get_state) to retrieve structured site data — never browse or fetch the URL directly. Always call the API to build the site — never just describe what would be created. Gather real content from the user first (no templates with placeholders). Ask the purpose of the page to help craft the bio. Reduce friction: if they provide a handle, find the full URL; infer what you can and only ask about what you genuinely can''t figure out; when feasible, offer to find all public links for the person. Well-known social URLs display branded icons automatically; other URLs show a globe. Trailing badges are available to add emphasis to links. Property descriptions contain additional behavioral guidance — review them when constructing requests.'
version: 1.0.0
x-tagline: AI agent website builder, starting with link-in-bio sites. Create and publish via MCP server or REST API.
x-tagline-note: Canonical short description. Also hardcoded in layout.tsx, opengraph-image.tsx, terms/page.tsx — grep 'AI agent website builder' before changing.
x-mcp-server-name: unulu
servers:
- url: https://api.unulu.ai
tags:
- name: Claims
paths:
/api/claims/check-handle:
get:
operationId: checkHandle
x-mcp-expose: true
x-mcp-name: unulu_check_handle
x-mcp-annotations:
readOnlyHint: true
openWorldHint: false
destructiveHint: false
summary: Check handle availability
description: Check whether a handle is available on unu.lu (not other platforms like Instagram, TikTok, etc.). For example, checking 'joe' tells you if joe.unu.lu is available for claiming. Use this to help users choose a handle before they visit the claim page.
parameters:
- name: handle
in: query
required: true
schema:
type: string
description: The handle to check (3-30 chars, alphanumeric + hyphens)
responses:
'200':
description: Handle availability result
content:
application/json:
schema:
type: object
required:
- available
- handle
properties:
available:
type: boolean
handle:
type: string
'400':
$ref: '#/components/responses/ValidationError'
tags:
- Claims
components:
responses:
ValidationError:
description: Validation error
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
properties:
error:
type: object
properties:
code:
type: string
message:
type: string