API reference
Bring link management into your own workflows. Explore endpoints, review parameters, and use request and response examples to build your integration.
Complete operation reference
The OpenAPI specification includes tags, UTM templates, custom-domain management and provisioning, folder permissions, per-link analytics, and public help in addition to the examples below.
| Method | Endpoint | Scope |
|---|---|---|
| GET | /links | links:read |
| POST | /links | links:write |
| GET | /links/{id} | links:read |
| PUT | /links/{id} | links:write |
| DELETE | /links/{id} | links:write |
| GET | /pages | pages:read |
| POST | /pages | pages:write |
| GET | /pages/{id} | pages:read |
| PUT | /pages/{id} | pages:write |
| DELETE | /pages/{id} | pages:write |
| POST | /pages/{id}/links | pages:write |
| PUT | /pages/{id}/links/{linkId} | pages:write |
| DELETE | /pages/{id}/links/{linkId} | pages:write |
| POST | /pages/{id}/plugins | pages:write |
| PUT | /pages/{id}/plugins/{pluginId} | pages:write |
| DELETE | /pages/{id}/plugins/{pluginId} | pages:write |
| POST | /pages/{id}/reorder | pages:write |
| GET | /analytics | analytics:read |
| GET | /qrcodes | qrcodes:read |
| POST | /qrcodes | qrcodes:write |
| GET | /qrcodes/{id} | qrcodes:read |
| PUT | /qrcodes/{id} | qrcodes:write |
| DELETE | /qrcodes/{id} | qrcodes:write |
| GET | /folders | folders:read |
| POST | /folders | folders:write |
| GET | /tags | tags:read |
| POST | /tags | tags:write |
| PUT | /tags/{id} | tags:write |
| DELETE | /tags/{id} | tags:write |
| GET | /utm-templates | utm:read |
| POST | /utm-templates | utm:write |
| PUT | /utm-templates/{id} | utm:write |
| DELETE | /utm-templates/{id} | utm:write |
| PUT | /folders/{id} | folders:write |
| DELETE | /folders/{id} | folders:write |
| GET | /folders/{id}/permissions | folders:read |
| GET | /folders/{id}/permissions/me | folders:read |
| PUT | /folders/{id}/permissions/{userId} | folders:write |
| GET | /domains | domains:read |
| POST | /domains | domains:write |
| GET | /domains/{id} | domains:read |
| PUT | /domains/{id} | domains:write |
| DELETE | /domains/{id} | domains:write |
| POST | /domains/{id}/verify | domains:write |
| POST | /domains/{id}/retry-ssl | domains:write |
| GET | /links/{id}/clicks | links:read |
| GET | /links/{id}/analytics | links:read |
| POST | /links/fetch-meta | links:write |
| GET | /analytics/options | analytics:read |
| GET | /help/search | Public documentation |
| GET | /help/{slug} | Public documentation |
Introduction
The Goose.re REST API organizes endpoints by resource, including links, bio pages, QR codes, and folders. Send request bodies as JSON with Content-Type: application/json, and use the JSON responses and HTTP status codes to handle results. Form-encoded bodies are also supported for POST requests; use JSON for PUT requests. Each endpoint below lists its parameters and example data; an asterisk marks a required parameter. Response examples show representative fields; additional fields may be returned. The OpenAPI specification lists further optional fields.
Base URL
https://goose.re/api/v1
Authentication
Team owners and admins can create and manage API keys in Team Settings → API Keys. Copy the full key when it is created; it is shown only once. Keys use the prefix goose_ followed by 48 hexadecimal characters.
Set GOOSE_API_KEY to your full key, then include it in the Authorization header as a bearer token on each request. The key selects its workspace; X-Team-Id does not switch the workspace for an API key. Grant the required read or write scope for each resource. Write scopes do not include read access. Revoked, expired, or IP-restricted keys fail authentication.
Example request
curl https://goose.re/api/v1/links \
-H "Authorization: Bearer ${GOOSE_API_KEY}"
Responses & errors
Successful responses contain success: true, message, and data. Deletions and reordering return data: null. Link lists use data.links and data.total; QR code lists use data.qrcodes and data.total. Page and folder lists return arrays in data.
Use limit (default 50, maximum 100) and offset (default 0) for link and QR code lists. Page and folder lists are not paginated. Database timestamps generally use YYYY-MM-DD HH:MM:SS, without a timezone offset; do not assume ISO 8601 or a trailing Z.
Errors contain success: false and message, with an optional errors object mapping field names to arrays of messages. HTTP 200 indicates success; 201 indicates creation; 400 indicates invalid input; 401 indicates failed authentication; 403 indicates missing scope or permissions; 404 indicates a missing resource; and 422 indicates validation or business-rule failure.
If a request receives HTTP 429, back off before retrying and honor any retry or rate-limit headers provided. No fixed requests-per-minute quota is specified here.
Links
/api/v1/links
Create a short link for a destination URL. Optionally choose a recognizable slug, use a custom domain, and assign the link to a folder.
Required API key scope: links:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| url * | body | string | The full URL visitors should reach when they open the short link. |
| custom_slug | body | string | Optional short code: 3–20 letters, numbers, underscores, or hyphens, starting with a letter or number. Must be unique within the selected domain. Omit to generate a code. |
| domain_id | body | string (UUID) | The ID of the custom domain to use. |
| folder_id | body | string (UUID) | The ID of the folder for the short link. |
| title | body | string | An internal label that helps you identify the link in your dashboard. |
| redirect_type | body | string |
screen, instant, or password. Password redirects also require password. Default:
screen |
| password | body | string | Required when redirect_type is password. |
/api/v1/links
Retrieve short links in the authenticated team workspace. Use pagination to work through results and search to find specific links.
Required API key scope: links:read
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| limit | query | integer |
Number of results to return, from 1 to 100. Default:
50 |
| offset | query | integer |
The number of results to skip before returning this page. Default:
0 |
| search | query | string | A search term to filter links by title, slug, or destination URL. |
| is_active | query | integer | Filter by active state: 0 or 1. |
| folder_id | query | string (UUID) | Filter by folder ID; an empty string applies no folder filter. |
| sort_by | query | string |
created_at, short_url, or total_clicks. Default:
created_at |
| sort_order | query | string |
asc or desc. Default:
desc |
/api/v1/links/{id}
Retrieve the destination, public URL, and configuration of a specific short link by its ID.
Required API key scope: links:read
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The unique identifier of the link. |
/api/v1/links/{id}
Change the destination or title of an existing short link. Include the properties you want to update.
Required API key scope: links:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The unique identifier of the link to update. |
| destination_url | body | string | The new destination URL. |
| title | body | string | The updated link title. |
| is_active | body | integer | 1 to enable the link, 0 to archive it. |
| folder_id | body | string (UUID) or null | Move the link to a folder, or use null to remove it from its folder. |
/api/v1/links/{id}
Permanently remove a short link. The short URL will no longer direct visitors to its destination.
Required API key scope: links:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The unique identifier of the link to delete. |
Bio pages
/api/v1/pages
Retrieve bio pages in the authenticated team workspace. Filter by folder and choose a sort order to organize the results.
Required API key scope: pages:read
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| folder_id | query | string (UUID) | Filter by folder ID. Pass an empty string to return pages without a folder. |
| sort_by | query | string | Sort field: `created_at`, `title`, `slug`, or `total_clicks`. |
| sort_order | query | string | Sort direction: `asc` or `desc`. |
/api/v1/pages
Create a bio page in your team workspace with a public URL, page title, and optional brand styling.
Required API key scope: pages:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| slug * | body | string | The unique slug for the public page URL. |
| title * | body | string | The title displayed at the top of the bio page. |
| description | body | string | A brief description or subtitle for the bio page. |
| theme | body | string | Theme ID: default, executive, editorial, onyx, sunset, glassmorphism, terminal, or forest. Unknown values fall back to default. |
| theme_accent_1 | body | string (Hex Color) | The primary brand color as a hexadecimal string, such as `#ff0055`. |
| theme_accent_2 | body | string (Hex Color) | The secondary brand or accent color as a hexadecimal string. |
| domain_id | body | string (UUID) | The ID of the custom domain configuration. |
| folder_id | body | string (UUID) | The ID of the folder for the bio page. |
/api/v1/pages/{id}
Retrieve a bio page and its layout, including link buttons and the configuration of its active widgets.
Required API key scope: pages:read
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The unique ID of the bio page. |
/api/v1/pages/{id}
Update the content and appearance of a bio page, including its title, description, theme, images, and custom CSS.
Required API key scope: pages:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The unique ID of the bio page to update. |
| slug | body | string | The new URL slug. |
| title | body | string | The updated page title. |
| description | body | string | The subtitle text for the bio page. |
| profile_image | body | string (URL) | The URL of the profile image. |
| background_image | body | string (URL) | The URL of the background image. |
| favicon | body | string (URL) | The URL of the custom favicon. |
| theme | body | string | The active preset theme. |
| theme_accent_1 | body | string (Hex) | The primary brand color for the theme. |
| theme_accent_2 | body | string (Hex) | The secondary brand color for the theme. |
| custom_css | body | string | Custom CSS overrides added to the bio page template. |
| folder_id | body | string (UUID) or null | Folder ID, or null to remove the folder. |
| domain_id | body | string (UUID) or null | Custom domain ID, or null to remove the custom domain. |
/api/v1/pages/{id}
Permanently remove a bio page, including its link buttons and widgets. Its public page will no longer be available.
Required API key scope: pages:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The unique ID of the bio page to delete. |
/api/v1/pages/{id}/links
Add a link button to a bio page with a label and destination URL. Optionally customize its icon, colors, animation, and position.
Required API key scope: pages:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The ID of the bio page. |
| label * | body | string | The text displayed on the link button. |
| url * | body | string (URL) | The destination URL for the link button. |
| icon | body | string | The Font Awesome icon class. |
| color | body | string (Hex) or null | Use #RRGGBB, or null/empty string to clear the override. Invalid formats return HTTP 400. |
| bg_color | body | string (Hex) or null | Use #RRGGBB, or null/empty string to clear the override. Invalid formats return HTTP 400. |
| animation | body | string | The entrance or loop animation, such as `bounce` or `none`. |
| sort_order | body | integer | The position of the link in the page layout. |
/api/v1/pages/{id}/links/{linkId}
Update an existing bio page link button, including its label, destination, icon, and appearance.
Required API key scope: pages:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The ID of the bio page. |
| linkId * | path | string (Path Parameter) | The ID of the link element. |
| label | body | string | The updated button label. |
| url | body | string (URL) | The updated destination URL. |
| icon | body | string | The Font Awesome icon name. |
| color | body | string (Hex) or null | Use #RRGGBB, or null/empty string to clear the override. Invalid formats return HTTP 400. |
| bg_color | body | string (Hex) or null | Use #RRGGBB, or null/empty string to clear the override. Invalid formats return HTTP 400. |
| animation | body | string | The hover or attention animation. |
| sort_order | body | integer | Position in the page layout. |
/api/v1/pages/{id}/links/{linkId}
Remove a specific link button from a bio page while keeping the rest of the page in place.
Required API key scope: pages:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The ID of the bio page. |
| linkId * | path | string (Path Parameter) | The ID of the link to delete. |
/api/v1/pages/{id}/plugins
Add a content widget to a bio page. Choose a supported widget type and supply its configuration; the widget uses the page theme.
Required API key scope: pages:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The ID of the bio page. |
| type * | body | string | One of `spotlight`, `socials`, `text_block`, `youtube`, `gallery`, `countdown`, or `faq`. |
| config | body | object | Configuration object for the widget type. On update this replaces the previous configuration; omitted configuration is retained. Invalid configurations return HTTP 422. |
| sort_order | body | integer | The position of the widget in the page layout. |
/api/v1/pages/{id}/plugins/{pluginId}
Replace the configuration of an existing bio page widget and optionally update its position in the layout.
Required API key scope: pages:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The ID of the bio page. |
| pluginId * | path | string (Path Parameter) | The ID of the widget to update. |
| config | body | object | Configuration object for the widget type. On update this replaces the previous configuration; omitted configuration is retained. Invalid configurations return HTTP 422. |
| sort_order | body | integer | The position of the widget in the page layout. |
/api/v1/pages/{id}/plugins/{pluginId}
Remove a specific widget from a bio page while keeping its other content in place.
Required API key scope: pages:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The ID of the bio page. |
| pluginId * | path | string (Path Parameter) | The ID of the widget to delete. |
/api/v1/pages/{id}/reorder
Set the display order of link buttons and widgets in one request by supplying their IDs, types, and positions.
Required API key scope: pages:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The ID of the bio page. |
| items | body | array of objects |
The page items to reorder. Each item must include `id` (UUID), `type` (`link` or `plugin`), and `sort_order` (integer). Default:
[] |
Analytics
/api/v1/analytics
Retrieve aggregated click analytics for the authenticated team workspace to review traffic trends and audience breakdowns.
Required API key scope: analytics:read
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| period | query | string |
24h, 7d, 30d, 90d, or all. The 24h period groups by hour; other periods group by day. Default:
30d |
| link_id | query | string (UUID) | Filter clicks for one short link. |
| folder_id | query | string (UUID) | Filter by folder. |
| tag_id | query | string (UUID) | Filter links by tag. |
| builder | query | string (JSON array) | URL-encoded JSON array of filters with field, operator (is or is_not), and values. Fields: link, page, folder, language, subnet, device, browser, os, tag. |
QR codes
/api/v1/qrcodes
Retrieve QR codes in the authenticated team workspace. Use search, folder filters, sorting, and pagination to find the codes you need.
Required API key scope: qrcodes:read
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| search | query | string | Filter QR codes by name, short code, or destination URL. |
| folder_id | query | string (UUID) | Filter by folder ID; an empty string applies no folder filter. |
| sort_by | query | string | Sort field: created_at, name, or total_clicks. The legacy short_url value also sorts by name. |
| sort_order | query | string | Sort direction: `asc` or `desc`. |
| limit | query | integer |
Number of results to return, from 1 to 100. Default:
50 |
| offset | query | integer |
The number of results to skip before returning this page. Default:
0 |
/api/v1/qrcodes
Create a QR code. Supply at least one of link_id or url; link_id takes precedence. A URL creates a short link automatically. The folder is inherited from the linked short link when available, or defaults to a QR Codes folder for automatically created links.
Required API key scope: qrcodes:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| name * | body | string | A descriptive name to identify the QR code in your workspace. |
| design_config * | body | object / JSON string | QR Code Styling options stored as an object or JSON string, such as dotsOptions and backgroundOptions. Rendering the QR image is handled by the client. |
| url | body | string | The destination URL. If provided when link_id is empty, a new short link is created automatically. |
| link_id | body | string (UUID) | The ID of an existing short link to connect to the QR code. |
| folder_id | body | string (UUID) | The ID of the folder for the QR code. |
/api/v1/qrcodes/{id}
Retrieve the design settings, connected short link, and folder details of a specific QR code by its ID.
Required API key scope: qrcodes:read
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The unique identifier of the QR code. |
/api/v1/qrcodes/{id}
Update an existing QR code by changing its name, design settings, connected short link, or folder.
Required API key scope: qrcodes:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The unique identifier of the QR code to update. |
| name | body | string | The updated name of the QR code. |
| design_config | body | object / JSON string | QR Code Styling options stored as an object or JSON string, such as dotsOptions and backgroundOptions. Rendering the QR image is handled by the client. |
| link_id | body | string (UUID) | The ID of the short link to connect to the QR code. |
| folder_id | body | string (UUID) | The ID of the folder for the QR code. |
/api/v1/qrcodes/{id}
Permanently delete the QR code record. Its associated short link remains available.
Required API key scope: qrcodes:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| id * | path | string (Path Parameter) | The unique identifier of the QR code to delete. |
Folders
/api/v1/folders
Retrieve the folders in the authenticated team workspace to look up the groups used to organize campaign content.
Required API key scope: folders:read
This endpoint does not require a request body or query parameters.
/api/v1/folders
Create a folder in the authenticated team workspace. The key creator must be a team owner or admin.
Required API key scope: folders:write
Parameters
| Parameter | Location | Type | Description |
|---|---|---|---|
| name * | body | string | Folder name, 1–50 characters. |
| color | body | string |
Folder color. Default:
#3B82F6 |
| icon | body | string |
Font Awesome icon class. Default:
fa-folder |