# Shortener

An [[API Key|YiffyAPI/APIKey]] <span style="color: red;">is</span> required for this service. See [[Shared Responses|YiffyAPI/Shared Responses]] for common error responses.

## Shorten A URL
> <code><span style="color: rgb(0, 136, 71);">POST</span></code> `https://yiff.rocks/create`

::: none
# Query Parameters
| Name     | Type    | Description                                                                |
| -------- | ------- | -------------------------------------------------------------------------- |
| editable | Boolean | If the shortened url should be editable (you will get a code to edit with) |
:::

::: none
# Body Parameters
| Name                                                   | Type   | Description                                                                               |
| ------------------------------------------------------ | ------ | ----------------------------------------------------------------------------------------- |
| code                                                   | String | The code to use, random if not specified.                                                 |
| credit                                                 | String | The name to credit, defaults to the discord name of the user associated with the api key. |
| url <span style="color: red" title="required">*</span> | String | The URL to shorten                                                                        |
:::

::: success
# 200 OK: Success
```json
{
  "success": true,
  "data": {
    "code": "ac611fcb338457fc4b3b83ad7072d632",
    "createdAt": "2026-01-16T13:45:04.851-06:00",
    "modifiedAt": "2026-01-16T13:45:04.851-06:00",
    "url": "https://static.femboy.fan/posts/ac/61/ac611fcb338457fc4b3b83ad7072d632.png",
    "pos": 37509,
    "credit": "YiffyAPI",
    "fullURL": "https://yiff.rocks/ac611fcb338457fc4b3b83ad7072d632"
  }
}
```
:::

::: danger
# 409 Conflict: Code In Use
```json
{
  "success": false,
  "code": 1072,
  "message": "Code has already been taken",
  "errors": {}
}
```
:::

::: danger
# 422 Unprocessable Entity: Code Too Long
```json
{
  "success": false,
  "code": 1070,
  "message": "Code is too long",
  "errors": {}
}
```
:::

::: danger
# 422 Unprocessable Entity: Invalid Code
```json
{
  "success": false,
  "code": 1071,
  "message": "Code is invalid",
  "errors": {}
}
```
:::

::: danger
# 422 Unprocessable Entity: Invalid URL
```json
{
  "success": false,
  "code": 1073,
  "message": "Url is invalid",
  "errors": {}
}
```
:::

::: danger
# 422 Unprocessable Entity: URL Too Long
```json
{
  "success": false,
  "code": 1081,
  "message": "Url is too long",
  "errors": {}
}
```
:::

::: danger
# 422 Unprocessable Entity: Credit Too Long
```json
{
  "success": false,
  "code": 1074,
  "message": "Creator name is too long",
  "errors": {}
}
```
:::

<hr>

## Get A Short URL (Redirect)
> <code><span style="color: rgb(52, 141, 248);">GET</span></code> `https://yiff.rocks/{code}`

::: none
# Path Parameters
| Name                                                    | Type   | Description                       |
| ------------------------------------------------------- | ------ | --------------------------------- |
| code <span style="color: red" title="required">*</span> | String | The code of the short url to get. |
:::

::: success
# 302 Found: Redirect
```
// Redirected to url
```
:::

::: danger
# 404 Not Found: Not Found
```
Unknown short url code.
```
:::

<hr>

## Get A Short URL (Preview)
> <code><span style="color: rgb(52, 141, 248);">GET</span></code> `https://yiff.rocks/{code}+`

::: none
# Path Parameters
| Name                                                    | Type   | Description                       |
| ------------------------------------------------------- | ------ | --------------------------------- |
| code <span style="color: red" title="required">*</span> | String | The code of the short url to get. |
:::

::: success
# 200 OK: Success
```
// HTML page
```
:::

::: danger
# 404 Not Found: Not Found
```
Unknown short url code.
```
:::

<hr>

## Get A Short URL (JSON)
> <code><span style="color: rgb(52, 141, 248);">GET</span></code> `https://yiff.rocks/{code}.json`

::: none
# Path Parameters
| Name                                                    | Type   | Description                       |
| ------------------------------------------------------- | ------ | --------------------------------- |
| code <span style="color: red" title="required">*</span> | String | The code of the short url to get. |
:::

::: success
# 200 OK: Success
```json
{
  "success": true,
  "data": {
    "code": "ac611fcb338457fc4b3b83ad7072d632",
    "createdAt": "2026-01-16T13:45:04.851-06:00",
    "modifiedAt": "2026-01-16T13:45:04.851-06:00",
    "url": "https://static.femboy.fan/posts/ac/61/ac611fcb338457fc4b3b83ad7072d632.png",
    "pos": 37509,
    "credit": "YiffyAPI",
    "fullURL": "https://yiff.rocks/ac611fcb338457fc4b3b83ad7072d632"
  }
}
```
:::

::: danger
# 404 Not Found: Not Found
```json
{
  "success": false,
  "code": 1075,
  "error": "A short url with that code was not found."
}
```
:::

<hr>

## Delete A Short URL
> <code><span style="color: rgb(211, 61, 61);">DELETE</span></code> `https://yiff.rocks/{code}.json`

::: none
# Request Body
| Name                                                              | Type   | Description                                                  |
| ----------------------------------------------------------------- | ------ | ------------------------------------------------------------ |
| managementCode <span style="color: red" title="required">*</span> | String | The management code you received when creating the shorturl. |
:::

::: success
# 204 No Content: Success
```
// No Content
```
:::

::: danger
# 401 Unauthorized: Management Code Required
```json
{
  "success": false,
  "code": 1076,
  "message": "A management code is required."
}
```
:::

::: danger
# 401 Unauthorized: Management Code Mismatch
```json
{
  "success": false,
  "code": 1078,
  "message": "That management code does not match this short url."
}
```
:::

::: danger
# 403 Forbidden: No Management Code
```json
{
  "success": false,
  "code": 1077,
  "message": "That short url cannot be edited by you."
}
```
:::

::: danger
# 404 Not Found: Not Found
```json
{
  "success": false,
  "code": 1075,
  "message": "A short url with that code was not found."
}
```
:::

<hr>

## Modify A Short URL
> <code><span style="color: rgb(115, 92, 255);">PATCH</span></code> `https://yiff.rocks/{code}.json`

::: none
# Request Body
| Name                                                              | Type   | Description                                                                               |
| ----------------------------------------------------------------- | ------ | ----------------------------------------------------------------------------------------- |
| managementCode <span style="color: red" title="required">*</span> | String | The management code you received when creating the shorturl.                              |
| credit                                                            | String | The name to credit, defaults to the discord name of the user associated with the api key. |
| url                                                               | String | The URL to shorten                                                                        |
:::

::: success
# 204 No Content: Success
```
// No Content
```
:::

::: danger
# 400 Bad Request: No Changes
```json
{
  "success": false,
  "code": 1080,
  "message": "No changes were detected."
}
```
:::

::: danger
# 401 Unauthorized: Management Code Required
```json
{
  "success": false,
  "code": 1076,
  "message": "A management code is required."
}
```
:::

::: danger
# 401 Unauthorized: Management Code Mismatch
```json
{
  "success": false,
  "code": 1078,
  "message": "That management code does not match this short url."
}
```
:::

::: danger
# 403 Forbidden: No Management Code
```json
{
  "success": false,
  "code": 1077,
  "message": "That short url cannot be edited by you."
}
```
:::

::: danger
# 404 Not Found: Not Found
```json
{
  "success": false,
  "code": 1075,
  "message": "A short url with that code was not found."
}
```
:::

::: danger
# 422 Unprocessable Entity: Invalid URL
```json
{
  "success": false,
  "code": 1073,
  "message": "Url is invalid",
  "errors": {}
}
```
:::

::: danger
# 422 Unprocessable Entity: URL Too Long
```json
{
  "success": false,
  "code": 1081,
  "message": "Url is too long",
  "errors": {}
}
```
:::

::: danger
# 422 Unprocessable Entity: Credit Too Long
```json
{
  "success": false,
  "code": 1074,
  "message": "Creator name is too long",
  "errors": {}
}
```
:::
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9