---
title: "Save a link"
method: POST
path: "/api/v1/links/saved"
tags: ["Saved links"]
---

# Save a link

`POST /api/v1/links/saved`

## Request

- Base URL: `https://spoofy.social`
- URL: `https://spoofy.social/api/v1/links/saved`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `better-auth.session_token`

Remember a link — or count one more use of a link you have (a hidden one comes back). Send `links` instead to save several at once (up to 50), merged with what you have: uses add up, the later last use and any name or pin are kept. Every order you place adds its link by itself; Spoofy’s own accounts are never saved.

## Request body

- object
  - `url` string
  - `label` string, nullable: Your name for it (up to 60 characters).
  - `pinned` boolean
  - `links` object[]
    - `url` string, required
    - `label` string, nullable
    - `pinned` boolean
    - `lastUsedAt` string, date-time
    - `useCount` integer

## Response `200`

Used once more (or, with `links`, all of them).

- object
  - `link` SavedLink: A link you pasted or ordered for, remembered once per page: the same profile shared with a tracking tail, "www." or another case is one link.
    - `id` string
    - `url` string: The link, tidied (tracking parameters and the trailing slash dropped, a handle in lower case): orders for it go here.
    - `platform` string: x, telegram, youtube, … or web.
    - `kind` string: What it points to: profile, post, video, channel, group, token, site, track, stream or server.
    - `label` string: Your name for it, else what it is ("@yourname", "Post").
    - `customLabel` string, nullable: Your own name for it; null when you never gave one.
    - `pinned` boolean: Shown before the others.
    - `hidden` boolean: Taken off the list (using the link again brings it back).
    - `useCount` integer
    - `lastUsedAt` string, date-time
    - `createdAt` string, date-time
  - `links` SavedLink[]
    - `id` string
    - `url` string: The link, tidied (tracking parameters and the trailing slash dropped, a handle in lower case): orders for it go here.
    - `platform` string: x, telegram, youtube, … or web.
    - `kind` string: What it points to: profile, post, video, channel, group, token, site, track, stream or server.
    - `label` string: Your name for it, else what it is ("@yourname", "Post").
    - `customLabel` string, nullable: Your own name for it; null when you never gave one.
    - `pinned` boolean: Shown before the others.
    - `hidden` boolean: Taken off the list (using the link again brings it back).
    - `useCount` integer
    - `lastUsedAt` string, date-time
    - `createdAt` string, date-time

## Other responses

- `201`: Saved (new).
- `400`: Not a link.
- `401`: No valid API key or session.
- `403`: A read-only key — or one of Spoofy’s own accounts (`own_brand_link`).
- `413`: The request body is too big (uploads up to 4 MB, everything else up to 64 KB).
- `429`: Slow down: too many requests in a short time. Wait `Retry-After` seconds and carry on.

---

[API](https://skmtc.dev/spoofy/apis/spoofy-api.md) · [All operations](https://skmtc.dev/spoofy/apis/spoofy-api/llms.txt) · [OpenAPI document](https://skmtc.dev/spoofy/apis/spoofy-api/revisions/0619b5c8adae?raw)
