kemono2/schema/public/api.yaml
2025-04-11 00:58:59 +02:00

3330 lines
104 KiB
YAML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

openapi: 3.1.0
info:
title: Kemono API
version: 1.3.0
contact:
email: contact@kemono.party
servers:
- url: https://kemono.su/api
- url: https://coomer.su/api
tags:
- name: Posts
description: Version one
- name: Creators
- name: Comments
- name: Post Flagging
description: Flag post for re-import
- name: Discord
- name: Favorites
- name: File Search
- name: Misc
paths:
/v2/file/{file_hash}:
get:
description: Overview of the file.
parameters:
- name: file_hash
in: path
description: Hash of the file.
required: true
schema:
$ref: "#/components/schemas/hash-sha256"
responses:
'200':
description: Successfully retrieved file details.
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/response-body-success"
- type: object
properties:
data:
$ref: "#/components/schemas/archive-info"
'400':
description: There are errors in parameters.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'404':
description: File does not exist.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
patch:
description: Add password to a file if needed
parameters:
- name: file_hash
in: path
description: Hash of the file.
required: true
schema:
$ref: "#/components/schemas/hash-sha256"
requestBody:
required: true
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/request-body-with-data"
- type: object
properties:
data:
type: object
required:
- password
additionalPropeties: false
properties:
password:
type: string
minLength: 1
responses:
'200':
description: Successfully added a correct password.
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/response-body-success"
- type: object
properties:
data:
description: Hash of the file which got updated.
$ref: "#/components/schemas/hash-sha256"
'400':
description: There are errors in parameters or the body.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
/v2/account/flags/post:
put:
description: Flag the post for reimport.
security:
- cookieAuth: [ ]
requestBody:
required: true
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/request-body-with-data"
- type: object
properties:
data:
type: object
required:
- service
- profile_id
- post_id
additionalPropeties: false
properties:
service:
type: string
profile_id:
type: string
post_id:
type: string
responses:
'201':
description: Successfully flagged the post.
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/response-body-success"
- type: object
properties:
data:
type: object
description: Data of flagged post.
required:
- service
- profile_id
- post_id
properties:
service:
type: string
profile_id:
type: string
post_id:
type: string
'400':
description: Request body has errors.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'404':
description: Post doesn't exist.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'409':
description: Post is already flagged.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
/v2/account/administrator/accounts:
get:
description: Get account count.
security:
- cookieAuth: [ ]
parameters:
- name: name
in: query
description: Filter by name
schema:
type: string
- name: role
in: query
description: Filter by role
schema:
type: string
responses:
'200':
description: Successfully counted accounts.
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/response-body-success"
- type: object
properties:
data:
$ref: "#/components/schemas/non-negative-integer"
'401':
description: User not logged in.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'404':
description: User is not administrator.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
/v2/account/administrator/accounts/{page}:
get:
description: Get accounts at page.
security:
- cookieAuth: [ ]
parameters:
- $ref: "#/components/parameters/path-page"
- name: name
in: query
description: Filter by name
schema:
type: string
- name: role
in: query
description: Filter by role
schema:
type: string
responses:
'200':
description: Successfully gotten accounts at page.
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/response-body-success"
- type: object
properties:
data:
type: array
items:
$ref: "#/components/schemas/account"
'400':
description: There are errors in parameters.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'401':
description: User not logged in.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'404':
description: User is not administrator.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
/v2/account/administrator/account/{account_id}:
get:
description: Overview of target account.
security:
- cookieAuth: [ ]
parameters:
- name: account_id
in: path
description: ID of the account.
required: true
schema:
$ref: "#/components/schemas/positive-integer"
responses:
'200':
description: Successfully retrieved target account details.
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/response-body-success"
- type: object
properties:
data:
$ref: "#/components/schemas/account"
'400':
description: There are errors in parameters.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'401':
description: User not logged in.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'404':
description: User is not administrator or account doesn't exist.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
patch:
description: Change target account details.
security:
- cookieAuth: [ ]
parameters:
- name: account_id
in: path
description: ID of the account.
required: true
schema:
$ref: "#/components/schemas/positive-integer"
requestBody:
required: true
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/request-body-with-data"
- type: object
properties:
data:
type: object
required:
- role
additionalPropeties: false
properties:
role:
type: string
responses:
'200':
description: Successfully changed target account details.
content:
application/json:
schema:
allOf:
- $ref: "#/components/schemas/response-body-success"
- type: object
properties:
data:
description: ID of account which got updated.
$ref: "#/components/schemas/positive-integer"
'400':
description: There are errors in parameters or in the body.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'401':
description: Admin account is not logged in.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'404':
description: Admin account is not administrator or target account doesn't exist.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
'409':
description: Failed to update target account due to a conflict.
content:
application/json:
schema:
$ref: "#/components/schemas/response-body-error"
/v1/creators.txt:
get:
tags:
- Posts
summary: List All Creators
description: List all creators with details. I blame DDG for .txt.
responses:
'200':
description: List of all creators
content:
application/json:
schema:
type: array
items:
type: object
properties:
favorited:
type: integer
description: The number of times this creator has been favorited
id:
type: string
description: The ID of the creator
indexed:
type: number
description: Timestamp when the creator was indexed, Unix time as integer
name:
type: string
description: The name of the creator
service:
type: string
description: The service for the creator
updated:
type: number
description: Timestamp when the creator was last updated, Unix time as integer
example:
- favorited: 1
id: '21101760'
indexed: 1672534800
name: RAIGYO
service: fanbox
updated: 1672534800
/v1/posts:
get:
tags:
- Posts
summary: List recent posts
description: List of recently imported posts
parameters:
- name: q
in: query
description: Search query
schema:
type: string
minLength: 3
- name: o
in: query
description: Result offset, stepping of 50 is enforced
schema:
type: integer
- name: tag
in: query
description: A list of tags to filter by
schema:
type: array
items:
type: string
responses:
'200':
description: List of recently added posts
content:
application/json:
schema:
type: object
properties:
count:
type: integer
true_count:
type: integer
posts:
type: array
items:
type: object
properties:
id:
type: string
user:
type: string
service:
type: string
title:
type: string
content:
type: string
embed:
type: object
shared_file:
type: boolean
added:
type: string
format: date-time
published:
type: string
format: date-time
edited:
type: string
format: date-time
file:
type: object
properties:
name:
type: string
path:
type: string
attachments:
type: array
items:
type: object
properties:
name:
type: string
path:
type: string
example:
- id: '1836570'
user: '6570768'
service: fanbox
title: 今日はFANBOXを始まりました
content: <p>みなさんこんにちは、影おじです。</p><p>先週のように、FANBOXを始まりに決定しました</p><p>そしてFANBOXの更新内容について、アンケートのみなさん</p><p>ありがとうございました!</p><p><br/></p><p>では更新内容の詳しいことはこちらです↓</p><p>毎回の絵、元も差分がありませんの場合、ボナスとして差分イラストを支援者の皆様にプレゼント。</p><p>もとも差分があれば、ボナスとしてヌード差分イラストを支援者の皆様にプレゼント。</p><p><br/></p><p>これから、仕事以外の時間、できる限り勤勉な更新したいと思います!</p><p>どうぞよろしくお願いいたします!</p>
embed: { }
shared_file: false
added: '2021-03-30T18:00:05.973913'
published: '2021-01-24T17:54:38'
edited: '2021-01-24T18:46:15'
file:
name: a99d9674-5490-400e-acca-4bed99590699.jpg
path: /5c/98/5c984d1f62f0990a0891d8fa359aecdff6ac1e26ac165ba7bb7f31cc99e7a674.jpg
attachments: [ ]
- id: '1836649'
user: '6570768'
service: fanbox
title: 忍ちゃん 脇コキ差分
content: ''
embed: { }
shared_file: false
added: '2021-03-30T17:59:57.815397'
published: '2021-01-24T18:23:12'
edited: '2023-01-04T14:45:19'
file:
name: 4c5615f9-be74-4fa7-b88d-168fd37a2824.jpg
path: /d0/3c/d03c893927521536646619f5fb33426aa4b82dc12869865d6d666932755d9acd.jpg
attachments:
- name: 9cc982e4-1d94-4a1a-ac62-3dddd29f881c.png
path: /d7/4d/d74d1727f2c3fcf7a7cc2d244d677d93b4cc562a56904765e4e708523b34fb4c.png
- name: ab0e17d7-52e5-42c2-925b-5cfdb451df0c.png
path: /1b/67/1b677a8c0525e386bf2b2f013e36e29e4033feb2308798e4e5e3780da6c0e815.png
/v1/posts/random:
get:
description: Get a random post
responses:
'200':
description: A random post.
content:
application/json:
schema:
type: object
properties:
service:
type: string
artist_id:
type: string
post_id:
type: string
'404':
description: Not random psot found.
content:
application/json:
schema:
$ref: "#/components/schemas/error"
/v1/posts/popular:
get:
description: Get popular posts
parameters:
- name: date
in: query
description: Base date of the list
required: true
schema:
type: string
- name: period
in: query
description: Period scale of the list
required: true
schema:
enum:
- recent
- day
- week
- month
- $ref: "#/components/parameters/query-o"
responses:
'200':
description: A list of popular posts.
content:
application/json:
schema:
type: object
properties:
info:
type: object
properties:
date:
type: string
min_date:
type: string
max_date:
type: string
navigation_dates:
type: object
propertyNames:
enum:
- recent
- day
- week
- month
additionalProperties:
type: array
prefixItems:
- type: string
- type: string
- type: string
range_desc:
type: string
scale:
enum:
- recent
- day
- week
- month
props:
type: object
properties:
currentPage:
const: popular_posts
today:
type: string
earliest_date_for_popular:
type: string
limit:
type: integer
count:
type: integer
results:
type: array
items:
$ref: "#/components/schemas/post-with-fav-count"
base:
type: object
additionalProperties:
type: string
result_previews:
type: array
items:
anyOf:
- type: object
properties:
type:
const: thumbnail
server:
type: string
name:
type: string
path:
type: string
- type: object
properties:
type:
const: embed
url:
type: string
subject:
type: string
description:
type: string
result_attachments:
type: array
items:
type: object
properties:
server:
type: string
name:
type: string
path:
type: string
result_is_image:
type: array
items:
type: boolean
/v1/posts/tags:
get:
description: Get tags
responses:
'200':
description: A list of post tags.
content:
application/json:
schema:
type: object
properties:
props:
type: object
properties:
currentpage:
const: "tags"
tags:
type: array
items:
$ref: "#/components/schemas/tag"
/v1/{service}/post/{post_id}:
get:
description: Get a post by ID
parameters:
- $ref: "#/components/parameters/path-service"
- $ref: "#/components/parameters/path-post-id"
responses:
'200':
description: Post data.
content:
application/json:
schema:
type: object
properties:
service:
type: string
artist_id:
type: string
post_id:
type: string
'404':
description: No post found
content:
application/json:
schema:
$ref: "#/components/schemas/error"
/v1/{service}/user/{creator_id}/profile:
get:
summary: Get a creator
tags:
- Creators
parameters:
- name: service
in: path
description: The service where the creator is located
required: true
schema:
type: string
- name: creator_id
in: path
description: The ID of the creator
required: true
schema:
type: string
responses:
'200':
description: Creator details retrieved successfully
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: The ID of the creator
public_id:
type:
- string
- null
description: The public ID of the creator
service:
type: string
description: The service where the creator is located
name:
type: string
description: The creator's display name
indexed:
type: string
format: date-time
description: The time the creator was last indexed
updated:
type: string
format: date-time
description: The time the creator was last updated
'404':
description: The creator could not be found
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: The error message
enum: ["Creator not found."]
/v1/{service}/user/{creator_id}:
get:
summary: Get a list of creator posts
tags:
- Posts
parameters:
- name: service
in: path
description: The service where the post is located
required: true
schema:
type: string
- name: creator_id
in: path
description: The ID of the creator
required: true
schema:
type: string
- name: q
in: query
description: Search query
schema:
type: string
minLength: 3
- name: o
in: query
description: Result offset, stepping of 50 is enforced
schema:
type: integer
responses:
'200':
description: Post details retrieved successfully
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: string
user:
type: string
service:
type: string
title:
type: string
content:
type: string
embed:
type: object
shared_file:
type: boolean
added:
type: string
format: date-time
published:
type: string
format: date-time
edited:
type: string
format: date-time
file:
type: object
properties:
name:
type: string
path:
type: string
attachments:
type: array
items:
type: object
properties:
name:
type: string
path:
type: string
example:
- id: '1836570'
user: '6570768'
service: fanbox
title: 今日はFANBOXを始まりました
content: <p>みなさんこんにちは、影おじです。</p><p>先週のように、FANBOXを始まりに決定しました</p><p>そしてFANBOXの更新内容について、アンケートのみなさん</p><p>ありがとうございました!</p><p><br/></p><p>では更新内容の詳しいことはこちらです↓</p><p>毎回の絵、元も差分がありませんの場合、ボナスとして差分イラストを支援者の皆様にプレゼント。</p><p>もとも差分があれば、ボナスとしてヌード差分イラストを支援者の皆様にプレゼント。</p><p><br/></p><p>これから、仕事以外の時間、できる限り勤勉な更新したいと思います!</p><p>どうぞよろしくお願いいたします!</p>
embed: { }
shared_file: false
added: '2021-03-30T18:00:05.973913'
published: '2021-01-24T17:54:38'
edited: '2021-01-24T18:46:15'
file:
name: a99d9674-5490-400e-acca-4bed99590699.jpg
path: /5c/98/5c984d1f62f0990a0891d8fa359aecdff6ac1e26ac165ba7bb7f31cc99e7a674.jpg
attachments: [ ]
- id: '1836649'
user: '6570768'
service: fanbox
title: 忍ちゃん 脇コキ差分
content: ''
embed: { }
shared_file: false
added: '2021-03-30T17:59:57.815397'
published: '2021-01-24T18:23:12'
edited: '2023-01-04T14:45:19'
file:
name: 4c5615f9-be74-4fa7-b88d-168fd37a2824.jpg
path: /d0/3c/d03c893927521536646619f5fb33426aa4b82dc12869865d6d666932755d9acd.jpg
attachments:
- name: 9cc982e4-1d94-4a1a-ac62-3dddd29f881c.png
path: /d7/4d/d74d1727f2c3fcf7a7cc2d244d677d93b4cc562a56904765e4e708523b34fb4c.png
- name: ab0e17d7-52e5-42c2-925b-5cfdb451df0c.png
path: /1b/67/1b677a8c0525e386bf2b2f013e36e29e4033feb2308798e4e5e3780da6c0e815.png
'400':
description: Offset provided which is not a multiple of 50
'404':
description: The creator could not be found
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: The error message
enum: ["Creator not found."]
/v1/{service}/user/{creator_id}/announcements:
get:
summary: Get creator announcements
tags:
- Posts
parameters:
- name: service
in: path
required: true
description: The service name
schema:
type: string
- name: creator_id
in: path
required: true
description: The creator's ID
schema:
type: string
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
type: object
properties:
service:
type: string
user_id:
type: string
hash:
type: string
description: sha256
content:
type: string
added:
type: string
format: date-time
description: isoformat UTC
example:
- service: patreon
user_id: '8693043'
hash: 820b7397c7f75efb13c4a8aa5d4aacfbb200749f3e1cec16e9f2951d158be8c2
content: Hey guys, thank you so much for your support, that means a lot to me!
added: '2023-01-31T05:16:15.462035'
'404':
description: Artist not found
/v1/{service}/user/{creator_id}/fancards:
get:
summary: Get fancards by creator, fanbox only
tags:
- Posts
parameters:
- name: service
in: path
required: true
description: The service name, has to be "fanbox"
schema:
type: string
- name: creator_id
in: path
required: true
description: The creator's ID
schema:
type: string
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: integer
user_id:
type: string
file_id:
type: integer
hash:
type: string
mtime:
type: string
format: date-time
ctime:
type: string
format: date-time
mime:
type: string
ext:
type: string
added:
type: string
format: date-time
size:
type: integer
ihash:
type: string
path:
type: string
server:
type: string
example:
- id: 108058645
user_id: '3316400'
file_id: 108058645
hash: 727bf3f0d774a98c80cf6c76c3fb0e049522b88eb7f02c8d3fc59bae20439fcf
mtime: '2023-05-23T15:09:43.941195'
ctime: '2023-05-23T15:09:43.941195'
mime: image/jpeg
ext: .jpg
added: '2023-05-23T15:09:43.960578'
size: 339710
ihash: null
- id: 103286760
user_id: '3316400'
file_id: 103286760
hash: 8b0d0f1be38efab9306b32c7b14b74ddd92a2513026c859a280fe737980a467d
mtime: '2023-04-26T14:16:53.205183'
ctime: '2023-04-26T14:16:53.205183'
mime: image/jpeg
ext: .jpg
added: '2023-04-26T14:16:53.289143'
size: 339764
ihash: null
'404':
description: Artist not found
/v1/{service}/user/{creator_id}/links:
get:
summary: Get a creator's linked accounts
tags:
- Creators
parameters:
- name: service
in: path
description: The service where the creator is located
required: true
schema:
type: string
- name: creator_id
in: path
description: The ID of the creator
required: true
schema:
type: string
responses:
'200':
description: Linked accounts retrieved successfully
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: string
description: The ID of the creator
public_id:
type:
- string
- null
description: The public ID of the creator
service:
type: string
description: The service where the creator is located
name:
type: string
description: The creator's display name
indexed:
type: string
format: date-time
description: The time the creator was last indexed
updated:
type: string
format: date-time
description: The time the creator was last updated
'404':
description: The creator could not be found
content:
application/json:
schema:
type: object
properties:
error:
type: string
description: The error message
enum: ["Creator not found."]
delete:
description: Remove artist from linked accounts. Requires admin privilegies.
parameters:
- $ref: "#/components/parameters/path-service"
- $ref: "#/components/parameters/path-creator-id"
responses:
'204':
description: Artist's link was successfuly removed.
content:
plain/text:
schema:
const: ""
'404':
description: Insufficient privilegies.
content:
plain/text:
schema:
const: ""
/v1/{service}/user/{creator_id}/links/new:
get:
description: Add links to the artist
parameters:
- $ref: "#/components/parameters/path-service"
- $ref: "#/components/parameters/path-creator-id"
responses:
'200':
description: The data for the new link.
content:
application/json:
schema:
type: object
properties:
props:
type: object
properties:
id:
type: string
service:
type: string
artist:
$ref: "#/components/schemas/artist"
share_count:
$ref: "#/components/schemas/non-negative-integer"
dm_count:
$ref: "#/components/schemas/non-negative-integer"
has_links:
enum:
- ✔️
- "0"
display_data:
type: object
properties:
service:
type: string
href:
type: string
base:
type: object
properties:
service:
type: string
artist_id:
type: string
post:
description: Add links to the artist
parameters:
- $ref: "#/components/parameters/path-service"
- $ref: "#/components/parameters/path-creator-id"
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- service
- artist_id
properties:
service:
type: string
artist_id:
type: string
reason:
type: string
maxLength: 140
responses:
'200':
description: The link request added to moderation queue.
content:
application/json:
schema:
type: object
properties:
message:
type: string
props:
type: object
properties:
id:
type: string
service:
type: string
artist:
$ref: "#/components/schemas/artist"
share_count:
$ref: "#/components/schemas/non-negative-integer"
has_links:
enum:
- ✔️
- "0"
display_data:
type: object
properties:
service:
type: string
href:
type: string
'400':
description: Failed to added the new link due to input errors.
content:
application/json:
schema:
type: object
properties:
error:
type: text
/v1/{service}/user/{creator_id}/tags:
get:
description: Tags of profile
tags:
- Creators
parameters:
- $ref: "#/components/parameters/path-service"
- $ref: "#/components/parameters/path-creator-id"
responses:
'200':
description: Found the tags for the profile
content:
application/json:
schema:
type: object
properties:
props:
display_data:
type: object
properties:
service: string
href: string
artist:
$ref: "#/components/schemas/artist"
service:
type: string
id:
type: string
share_count:
type: integer
dm_count:
type: integer
has_links:
# gr8 API design
enum:
- ✔️
- "0"
tags:
type: array
items:
$ref: "#/components/schemas/tag"
service:
type: string
artist:
$ref: "#/components/schemas/artist"
/v1/{service}/user/{creator_id}/shares:
get:
description: Shares of the artist
parameters:
- $ref: "#/components/parameters/path-service"
- $ref: "#/components/parameters/path-creator-id"
- $ref: "#/components/parameters/query-o"
responses:
'200':
description: Found the shares for the artist
content:
application/json:
schema:
type: object
properties:
results:
type: array
items:
$ref: "#/components/schemas/share"
props:
display_data:
type: object
properties:
service:
type: string
href:
type: string
service:
type: string
artist:
$ref: "#/components/schemas/artist"
id:
type: string
dm_count:
type: integer
share_count:
type: integer
has_links:
enum:
- ✔️
- "0"
base:
type: object
properties:
service:
type: string
artist_id:
type: string
/v1/{service}/user/{creator_id}/dms:
get:
description: Direct messages of profile
parameters:
- $ref: "#/components/parameters/path-service"
- $ref: "#/components/parameters/path-creator-id"
responses:
'200':
description: Found direct messages for the profile
content:
application/json:
schema:
type: object
properties:
props:
id:
type: string
service:
type: string
artist:
$ref: "#/components/schemas/artist"
display_data:
type: object
properties:
service:
type: string
href:
type: string
share_count:
type: integer
dm_count:
type: integer
dms:
type: array
items:
$ref: "#/components/schemas/approved-dm"
has_links:
enum:
- ✔️
- "0"
/v1/{service}/user/{creator_id}/posts-legacy:
get:
description: A duct-tape endpoint which also returns count for pagination component.
parameters:
- name: service
in: path
required: true
description: The service name
schema:
type: string
- name: creator_id
in: path
required: true
description: The profiles's ID
schema:
type: string
- name: tag
in: query
description: A list of post tags
schema:
type: array
responses:
'200':
description: Found posts of the profile
content:
application/json:
schema:
type: object
properties:
props:
type: object
properties:
currentPage:
const: posts
id:
type: string
service:
type: string
name:
type: string
count:
type: integer
limit:
type: integer
artist:
$ref: "#/components/schemas/artist"
display_data:
type: object
properties:
service:
type: string
href:
type: string
dm_count:
type: integer
share_count:
type: integer
has_links:
type: string
base:
type: object
results:
type: array
items:
$ref: "#/components/schemas/post"
result_previews:
type: array
items:
type: object
result_attachments:
type: array
items:
type: object
result_is_image:
type: array
items:
type: boolean
disable_service_icons:
const: true
/v1/{service}/user/{creator_id}/post/{post_id}:
get:
summary: Get a specific post
tags:
- Posts
parameters:
- name: service
in: path
required: true
description: The service name
schema:
type: string
- name: creator_id
in: path
required: true
description: The creator's ID
schema:
type: string
- name: post_id
in: path
required: true
description: The post ID
schema:
type: string
responses:
'200':
description: Successful response
content:
application/json:
schema:
type: object
properties:
post:
type: object
properties:
id:
type: string
user:
type: string
service:
type: string
title:
type: string
content:
type: string
embed:
type: object
shared_file:
type: boolean
added:
type: string
format: date-time
published:
type: string
format: date-time
edited:
type: string
format: date-time
file:
type: object
properties:
name:
type: string
path:
type: string
attachments:
type: array
items:
type: object
properties:
name:
type: string
path:
type: string
next:
type: string
prev:
type: string
attachments:
type: array
previews:
type: array
videos:
type: array
props:
type: object
properties:
service:
type: string
flagged:
type: integer
revisions:
type: array
items:
$ref: "#/components/schemas/post-revision"
example:
post:
id: '1836570'
user: '6570768'
service: fanbox
title: 今日はFANBOXを始まりました
content: <p>みなさんこんにちは、影おじです。</p><p>先週のように、FANBOXを始まりに決定しました</p><p>そしてFANBOXの更新内容について、アンケートのみなさん</p><p>ありがとうございました!</p><p><br/></p><p>では更新内容の詳しいことはこちらです↓</p><p>毎回の絵、元も差分がありませんの場合、ボナスとして差分イラストを支援者の皆様にプレゼント。</p><p>もとも差分があれば、ボナスとしてヌード差分イラストを支援者の皆様にプレゼント。</p><p><br/></p><p>これから、仕事以外の時間、できる限り勤勉な更新したいと思います!</p><p>どうぞよろしくお願いいたします!</p>
embed: { }
shared_file: false
added: '2021-03-30T18:00:05.973913'
published: '2021-01-24T17:54:38'
edited: '2021-01-24T18:46:15'
file:
name: a99d9674-5490-400e-acca-4bed99590699.jpg
path: /5c/98/5c984d1f62f0990a0891d8fa359aecdff6ac1e26ac165ba7bb7f31cc99e7a674.jpg
attachments: [ ]
next: null
prev: '1836649'
'404':
description: Post not found
/v1/{service}/user/{creator_id}/post/{post_id}/revision/{revision_id}:
get:
description: Get revision of a post
parameters:
- $ref: "#/components/parameters/path-service"
- $ref: "#/components/parameters/path-creator-id"
- $ref: "#/components/parameters/path-post-id"
- name: revision_id
in: path
description: ID of the revision
required: true
schema:
type: string
responses:
'200':
description: A revision of the post.
content:
application/json:
schema:
type: object
properties:
props:
type: object
properties:
currentPage:
const: revisions
service:
type: string
artist:
$ref: "#/components/schemas/artist"
flagged:
$ref: "#/components/schemas/non-negative-integer"
revisions:
type: array
items:
$ref: "#/components/schemas/post-revision"
post:
$ref: "#/components/schemas/post-revision"
comments:
type: array
items:
$ref: "#/components/schemas/comment"
result_previews:
type: array
result_attachments:
type: array
videos:
type: array
archives_enabled:
type: boolean
'404':
description: Failed to find the revision of the post.
content:
application/json:
schema:
$ref: "#/components/schemas/error"
/v1/discord/channel/{channel_id}:
get:
tags:
- Discord
summary: Get Discord channel posts by offset
parameters:
- name: channel_id
in: path
description: ID of the Discord channel
required: true
schema:
type: string
- name: o
in: query
description: Result offset, stepping of 150 is enforced
schema:
type: integer
responses:
'200':
description: Discord channel found
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: string
author:
type: object
properties:
id:
type: string
avatar:
type: string
username:
type: string
public_flags:
type: integer
discriminator:
type: string
server:
type: string
channel:
type: string
content:
type: string
added:
type: string
format: date-time
published:
type: string
format: date-time
edited:
type: string
format: date-time
embeds:
type: array
items: { }
mentions:
type: array
items: { }
attachments:
type: array
items:
type: object
properties:
name:
type: string
path:
type: string
example:
- id: '942909658610413578'
author:
id: '421590382300889088'
avatar: 0956f3dc18eba7da9daedc4e50fb96d0
username: Merry
public_flags: 0
discriminator: '7849'
server: '455285536341491714'
channel: '455287420959850496'
content: '@everyone Happy Valentines Day! 💜✨'
added: '2022-02-15T01:26:12.708959'
published: '2022-02-14T22:26:21.027000'
edited: null
embeds: [ ]
mentions: [ ]
attachments: [ ]
- id: '942909571947712594'
author:
id: '421590382300889088'
avatar: 0956f3dc18eba7da9daedc4e50fb96d0
username: Merry
public_flags: 0
discriminator: '7849'
server: '455285536341491714'
channel: '455287420959850496'
content: ''
added: '2022-02-15T01:26:13.006228'
published: '2022-02-14T22:26:00.365000'
edited: null
embeds: [ ]
mentions: [ ]
attachments:
- name: sofa_03.png
path: /3b/4e/3b4ed5aabdd85b26fbbc3ee9b0e5649df69167efe26b5abc24cc2a1159f446d4.png
'404':
description: Discord channel not found
/v1/discord/channel/lookup/{discord_server}:
get:
tags:
- Discord
summary: Lookup Discord channels
parameters:
- name: discord_server
in: path
description: Discord Server ID
required: true
schema:
type: string
responses:
'200':
description: Discord channels found
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: string
name:
type: string
example:
- id: '455285536341491716'
name: news
- id: '455287420959850496'
name: nyarla-lewds
'404':
description: Discord server not found
/v1/authentication/register:
post:
description: Register an account
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
username:
type: string
password:
type: string
confirm_password:
type: string
favorites_json:
type: string
responses:
'200':
description: Successfully registered.
content:
application/json:
schema:
const: true
'400':
description: Failed to register due to user errors.
content:
application/json:
schema:
$ref: "#/components/schemas/error"
/v1/authentication/login:
post:
description: Sign in to account
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
username:
type: string
password:
type: string
responses:
'200':
description: Succefully logged in.
content:
application/json:
schema:
$ref: "#/components/schemas/account"
'400':
description: Failed to log in due to user errors.
content:
application/json:
schema:
$ref: "#/components/schemas/error"
'409':
description: Already logged in.
content:
application/json:
schema:
$ref: "#/components/schemas/error"
/v1/authentication/logout:
post:
description: Logout from account
responses:
'200':
description: Succefuuly logged out from account.
content:
application/json:
schema:
const: true
/v1/account:
get:
description: Get account data
security:
- cookieAuth: [ ]
responses:
'200':
description: Account data.
content:
application/json:
schema:
type: object
properties:
props:
type: object
properties:
currentPage:
const: account
title:
const: Your account page
account:
$ref: "#/components/schemas/account"
notifications_count:
$ref: "#/components/schemas/non-negative-integer"
/v1/account/change_password:
post:
description: Change account password
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- current-password
- new-password
- new-password-confirmation
properties:
current-password:
type: string
new-password:
type: string
new-password-confirmation:
type: string
responses:
'200':
description: Successfully changed account password.
content:
application/json:
schema:
const: true
/v1/account/notifications:
get:
description: Get account notifications
security:
- cookieAuth: [ ]
responses:
'200':
description: A list of account notifications.
content:
application/json:
schema:
type: object
properties:
currentPage:
const: account
notifications:
type: array
items:
$ref: "#/components/schemas/notification"
/v1/account/keys:
get:
description: Get account autoimport keys
security:
- cookieAuth: [ ]
responses:
'200':
description: A list of account keys.
content:
application/json:
schema:
type: object
properties:
props:
type: object
properties:
currentPage:
const: account
title:
const: Your service keys
service_keys:
type: array
items:
$ref: "#/components/schemas/service-key"
import_ids:
type: array
items:
type: object
properties:
key_id:
type: string
import_id:
type: string
post:
security:
- cookieAuth: [ ]
description: Revoke account autoimport keys
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
revoke:
type: array
items:
$ref: "#/components/schemas/positive-integer"
responses:
'200':
description: Account import keys revoked.
content:
application/json:
schema:
type: object
properties:
props:
type: object
properties:
currentPage:
const: account
redirect:
const: /account/keys
message:
const: "Success!"
/v1/account/favorites:
get:
tags:
- Favorites
security:
- cookieAuth: [ ]
summary: List Account Favorites
description: List account favorites (posts or creators) for the authenticated user (cookie session)
parameters:
- name: type
in: query
description: Type of favorites to list (post or creator (artist) )
schema:
type: string
enum:
- post
- artist
responses:
'200':
description: List of account favorites
content:
application/json:
schema:
type: array
items:
type: object
properties:
faved_seq:
type: integer
description: The sequence number of the favorite
id:
type: string
description: The ID of the favorite (post or creator)
indexed:
type: string
description: Timestamp when the creator was indexed isoformat
last_imported:
type: string
description: Timestamp when the creator was last imported
name:
type: string
description: The name of the creator
service:
type: string
description: The service where the creator is located
updated:
type: string
description: Timestamp when the creator was last updated
'401':
$ref: '#/components/schemas/401'
/v1/account/posts/upload:
get:
description: Upload posts.
security:
- cookieAuth: [ ]
responses:
'200':
description: Upload posts maybe???
content:
application/json:
schema:
type: object
properties:
currentPage:
const: posts
/v1/account/review_dms:
get:
description: Get DMs for review.
security:
- cookieAuth: [ ]
parameters:
- name: status
in: query
description: Status of the DM.
schema:
enum:
- ignored
- pending
responses:
'200':
description: A list of unapproved DMs.
content:
application/json:
schema:
type: object
properties:
currentPage:
const: import
account_id:
$ref: "#/components/schemas/positive-integer"
dms:
type: array
items:
$ref: "#/components/schemas/unapproved-dm"
status:
enum:
- ignored
- pending
post:
description: Approve DMs.
security:
- cookieAuth: [ ]
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
approved_hashes:
type: array
items:
type: string
delete_ignored:
type: boolean
responses:
'200':
description: Approved DMs.
content:
application/json:
schema:
const: true
/v1/account/moderator/tasks/creator_links:
get:
security:
- cookieAuth: [ ]
description: Get a list of pending artist link requests
responses:
'200':
description: A list of pending artist link requests.
content:
application/json:
schema:
type: array
items:
$ref: "#/components/schemas/unapproved-link"
/v1/account/moderator/creator_link_requests/{request_id}/approve:
post:
security:
- cookieAuth: [ ]
description: Approve a new artist link.
responses:
'200':
description: Successfully approved a new artist link.
content:
application/json:
schema:
type: object
properties:
response:
const: approved
/v1/account/moderator/creator_link_requests/{request_id}/reject:
post:
security:
- cookieAuth: [ ]
description: Reject a new artist link.
responses:
'200':
description: Successfully rejected a new artist link.
content:
application/json:
schema:
type: object
properties:
response:
const: rejected
/v1/favorites/post/{service}/{creator_id}/{post_id}:
post:
tags:
- Favorites
security:
- cookieAuth: [ ]
summary: Add Favorite Post
description: Add a post to the user's favorite posts
parameters:
- name: service
in: path
description: Service of the post
required: true
schema:
type: string
- name: creator_id
in: path
description: The ID of the creator
required: true
schema:
type: string
- name: post_id
in: path
description: The ID of the post
required: true
schema:
type: string
responses:
'200':
description: Favorite post added successfully
content: { }
'302':
description: Redirect to login if not authenticated
content: { }
'401':
$ref: '#/components/schemas/401'
delete:
tags:
- Favorites
security:
- cookieAuth: [ ]
summary: Remove Favorite Post
description: Remove a post from the user's favorite posts
parameters:
- name: service
in: path
description: The service where the post is located
required: true
schema:
type: string
- name: creator_id
in: path
description: The ID of the creator
required: true
schema:
type: string
- name: post_id
in: path
description: The ID of the post
required: true
schema:
type: string
responses:
'200':
description: Unfavorite post removed successfully
content: { }
'302':
description: Redirect to login if not authenticated
content: { }
'401':
$ref: '#/components/schemas/401'
/v1/favorites/creator/{service}/{creator_id}:
post:
tags:
- Favorites
security:
- cookieAuth: [ ]
summary: Add Favorite creator
description: Add an creator to the user's favorite creators
parameters:
- name: service
in: path
description: The service where the creator is located
required: true
schema:
type: string
- name: creator_id
in: path
description: The ID of the creator
required: true
schema:
type: string
responses:
'200':
description: Favorite creator added successfully
content: { }
'302':
description: Redirect to login if not authenticated
content: { }
'401':
$ref: '#/components/schemas/401'
delete:
tags:
- Favorites
security:
- cookieAuth: [ ]
summary: Remove Favorite Creator
description: Remove an creator from the user's favorite creators
parameters:
- name: service
in: path
description: The service where the creator is located
required: true
schema:
type: string
- name: creator_id
in: path
description: The ID of the creator
required: true
schema:
type: string
responses:
'200':
description: Favorite creator removed successfully
content: { }
'302':
description: Redirect to login if not authenticated
content: { }
'401':
$ref: '#/components/schemas/401'
/v1/search_hash/{file_hash}:
get:
tags:
- File Search
summary: Lookup file by hash
parameters:
- name: file_hash
in: path
required: true
description: SHA-2 / SHA-256
schema:
type: string
format: hex
minLength: 64
maxLength: 64
responses:
'200':
description: File found
content:
application/json:
schema:
type: object
properties:
id:
type: integer
hash:
type: string
mtime:
type: string
format: date-time
ctime:
type: string
format: date-time
mime:
type: string
ext:
type: string
added:
type: string
format: date-time
size:
type: integer
ihash:
type: string
posts:
type: array
items:
type: object
properties:
file_id:
type: integer
id:
type: string
user:
type: string
service:
type: string
title:
type: string
substring:
type: string
published:
type: string
format: date-time
file:
type: object
properties:
name:
type: string
path:
type: string
attachments:
type: array
items:
type: object
properties:
name:
type: string
path:
type: string
discord_posts:
type: array
items:
type: object
properties:
file_id:
type: integer
id:
type: string
server:
type: string
channel:
type: string
substring:
type: string
published:
type: string
format: date-time
embeds:
type: array
items: { }
mentions:
type: array
items: { }
attachments:
type: array
items:
type: object
properties:
name:
type: string
path:
type: string
example:
id: 40694581
hash: b926020cf035af45a1351e0a7e2c983ebcc93b4c751998321a6593a98277cdeb
mtime: '2021-12-04T07:16:09.385539'
ctime: '2021-12-04T07:16:09.385539'
mime: image/png
ext: .png
added: '2021-12-04T07:16:09.443016'
size: 10869921
ihash: null
posts:
- file_id: 108400151
id: '5956097'
user: '21101760'
service: fanbox
title: Loli Bae
substring: |-
Thank you for your continued support!
いつも支援ありがとうご
published: '2023-05-14T00:00:00'
file:
name: 8f183dac-470d-4587-9657-23efe8890a7b.jpg
path: /e5/1f/e51fc831dfdac7a21cc650ad46af59340e35e2a051aed8c1e65633592f4dc11c.jpg
attachments:
- name: b644eb9c-cffa-400e-9bd6-40cccb2331ba.png
path: /5e/b3/5eb3197668ac23bd7c473d3c750334eb206b060c610e4ac5fa1a9370fd1314d9.png
- name: 17f295ba-a9f2-4034-aafc-bf74904ec144.png
path: /88/ad/88ad2ba77c89e4d7a9dbe1f9531ba3e3077a82aee2b61efa29fda122ebe1b516.png
discord_posts:
- file_id: 40694581
id: '769704201495904286'
server: '455285536341491714'
channel: '769703874356445216'
substring: ''
published: '2020-10-24T23:29:42.049'
embeds: [ ]
mentions: [ ]
attachments:
- name: 3.png
path: /b9/26/b926020cf035af45a1351e0a7e2c983ebcc93b4c751998321a6593a98277cdeb.png
'404':
description: File not found
/v1/{service}/user/{creator_id}/post/{post}/flag:
post:
tags:
- Post Flagging
summary: Flag a post
parameters:
- name: service
in: path
required: true
schema:
type: string
- name: creator_id
in: path
required: true
schema:
type: string
- name: post
in: path
required: true
schema:
type: string
responses:
'201':
description: Flagged successfully
content:
application/json:
schema:
const: true
'409':
description: Already flagged
content:
application/json:
schema:
const: true
get:
tags:
- Post Flagging
summary: Check if a Post is flagged
description: Check if a Post is flagged
parameters:
- name: service
in: path
description: The service where the post is located
required: true
schema:
type: string
- name: creator_id
in: path
description: The creator of the post
required: true
schema:
type: string
- name: post
in: path
description: The ID of the post to flag
required: true
schema:
type: string
responses:
'200':
description: The post is flagged
content: { }
'404':
description: The post has no flag
content: { }
/v1/{service}/user/{creator_id}/post/{post_id}/revisions:
get:
tags:
- Posts
summary: List a Post's Revisions
description: List revisions of a specific post by service, creator_id, and post_id
parameters:
- name: service
in: path
description: The service where the post is located
required: true
schema:
type: string
- name: creator_id
in: path
description: The ID of the creator
required: true
schema:
type: string
- name: post_id
in: path
description: The ID of the post
required: true
schema:
type: string
responses:
'200':
description: List of post revisions
content:
application/json:
schema:
type: array
items:
type: object
properties:
revision_id:
type: integer
id:
type: string
user:
type: string
service:
type: string
title:
type: string
content:
type: string
embed:
type: object
shared_file:
type: boolean
added:
type: string
format: date-time
published:
type: string
format: date-time
edited:
type: string
format: date-time
file:
type: object
properties:
name:
type: string
path:
type: string
attachments:
type: array
items:
type: object
properties:
name:
type: string
path:
type: string
example:
- revision_id: 8059287
id: '1836570'
user: '6570768'
service: fanbox
title: 今日はFANBOXを始まりました
content: <p>みなさんこんにちは、影おじです。</p><p>先週のように、FANBOXを始まりに決定しました</p><p>そしてFANBOXの更新内容について、アンケートのみなさん</p><p>ありがとうございました!</p><p><br/></p><p>では更新内容の詳しいことはこちらです↓</p><p>毎回の絵、元も差分がありませんの場合、ボナスとして差分イラストを支援者の皆様にプレゼント。</p><p>もとも差分があれば、ボナスとしてヌード差分イラストを支援者の皆様にプレゼント。</p><p><br/></p><p>これから、仕事以外の時間、できる限り勤勉な更新したいと思います!</p><p>どうぞよろしくお願いいたします!</p>
embed: { }
shared_file: false
added: '2023-09-19T13:19:57.416086'
published: '2021-01-24T17:54:38'
edited: '2021-01-24T18:46:15'
file:
name: 8c2be0fd-a130-4afb-9314-80f2501d94f7.jpg
path: /5c/98/5c984d1f62f0990a0891d8fa359aecdff6ac1e26ac165ba7bb7f31cc99e7a674.jpg
attachments:
- name: attachment1.jpg
path: /attachments/attachment1.jpg
- name: attachment2.jpg
path: /attachments/attachment2.jpg
- revision_id: 6770513
id: '1836570'
user: '6570768'
service: fanbox
title: 今日はFANBOXを始まりました
content: <p>みなさんこんにちは、影おじです。</p><p>先週のように、FANBOXを始まりに決定しました</p><p>そしてFANBOXの更新内容について、アンケートのみなさん</p><p>ありがとうございました!</p><p><br/></p><p>では更新内容の詳しいことはこちらです↓</p><p>毎回の絵、元も差分がありませんの場合、ボナスとして差分イラストを支援者の皆様にプレゼント。</p><p>もとも差分があれば、ボナスとしてヌード差分イラストを支援者の皆様にプレゼント。</p><p><br/></p><p>これから、仕事以外の時間、できる限り勤勉な更新したいと思います!</p><p>どうぞよろしくお願いいたします!</p>
embed: { }
shared_file: false
added: '2023-07-28T23:51:25.477291'
published: '2021-01-24T17:54:38'
edited: '2021-01-24T18:46:15'
file:
name: 0d133e49-a2d4-4733-9044-dd57e25b1fce.jpg
path: /5c/98/5c984d1f62f0990a0891d8fa359aecdff6ac1e26ac165ba7bb7f31cc99e7a674.jpg
attachments:
- name: attachment3.jpg
path: /attachments/attachment3.jpg
- name: attachment4.jpg
path: /attachments/attachment4.jpg
'404':
description: Post not found
/v1/{service}/user/{creator_id}/post/{post_id}/comments:
get:
tags:
- Comments
summary: List a post's comments
description: List comments for a specific post by service, creator_id, and post_id.
parameters:
- name: service
in: path
description: The post's service.
required: true
schema:
type: string
- name: creator_id
in: path
description: The service ID of the post's creator.
required: true
schema:
type: string
- name: post_id
in: path
description: The service ID of the post.
required: true
schema:
type: string
responses:
'200':
description: List of post comments.
content:
application/json:
schema:
type: array
items:
type: object
properties:
id:
type: string
parent_id:
type: string
- string
- null
commenter:
type: string
content:
type: string
published:
type: string
format: date-time
revisions:
type: array
items:
type: object
properties:
id:
type: integer
content:
type: string
added:
type: string
format: date-time
example:
- id: "121508687"
parent_id: null
commenter: "84534108"
content: "YOU DREW MORE YAYYYY"
published: "2023-11-05T20:17:47.635000"
revisions:
- id: 1
content: "YOU DREW MORE YAYYYY2222222"
added: "2023-11-14T03:09:12.275975"
'404':
description: No comments found.
/v1/artists/random:
get:
description: Get a random artist
responses:
'200':
description: A random artist.
content:
application/json:
schema:
type: object
properties:
service:
type: string
artist_id:
type: string
'404':
description: No random artst exists.
content:
application/json:
schema:
$ref: "#/components/schemas/error"
/v1/shares:
get:
description: Get a list of shares
parameters:
- name: o
in: query
description: List's offset
schema:
$ref: "#/components/schemas/non-negative-integer"
responses:
'200':
description: A list of shares.
content:
application/json:
schema:
type: object
properties:
props:
type: object
properties:
currentPage:
const: shares
count:
$ref: "#/components/schemas/non-negative-integer"
shares:
type: array
items:
$ref: "#/components/schemas/share"
limit:
$ref: "#/components/schemas/non-negative-integer"
base:
type: object
/v1/share/{share_id}:
get:
description: Get details of the share.
parameters:
- name: share_id
in: path
description: ID of the share.
required: true
schema:
type: string
responses:
'200':
description: Details of the share.
content:
application/json:
schema:
type: object
properties:
share_files:
type: array
share:
$ref: "#/components/schemas/share"
base:
type: object
/v1/dms:
get:
description: Get a list of DMs.
parameters:
- name: o
in: query
description: List's offset
schema:
$ref: "#/components/schemas/non-negative-integer"
- name: q
in: query
description: Search query
schema:
type: string
responses:
'200':
description: A list of DMs.
content:
application/json:
schema:
type: object
properties:
props:
type: object
properties:
currentPage:
const: artists
count:
$ref: "#/components/schemas/non-negative-integer"
limit:
$ref: "#/components/schemas/non-negative-integer"
dms:
type: array
items:
$ref: "#/components/schemas/approved-dm"
base:
type: object
properties:
q:
type: string
/v1/has_pending_dms:
get:
description: Check if there are pending DMs.
responses:
'200':
description: There are pending DMs.
content:
application/json:
schema:
type: boolean
/v1/app_version:
get:
tags:
- Misc
summary: Git Commit Hash
description: Show current App commit hash
responses:
'200':
description: Commit Hash
content:
text/plain:
schema:
type: string
format: hex
minLength: 40
maxLength: 40
examples:
- 3b9cd5fab1d35316436968fe85c90ff2de0cdca0
/v1/importer/submit:
post:
description: Create a site import
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
session_key:
type: string
auto_import:
type: string
save_session_key:
type: string
save_dms:
type: string
channel_ids:
type: string
x-bc:
type: string
auth_id:
type: string
user_agent:
type: string
responses:
'200':
description: Succesfully added new import
content:
application/json:
schema:
type: object
properties:
import_id:
type: string
/v1/importer/logs/{import_id}:
get:
responses:
'200':
description: Get import logs
content:
application/json:
schema:
type: array
components:
parameters:
path-service:
name: service
in: path
description: The service where the creator is located
required: true
schema:
type: string
path-creator-id:
name: creator_id
in: path
description: ID of the creator
required: true
schema:
type: string
path-post-id:
name: post_id
in: path
description: ID of the post
required: true
schema:
type: string
path-page:
name: page
in: path
description: Page of the collection.
required: true
schema:
$ref: "#/components/schemas/positive-integer"
query-q:
name: q
in: query
description: Search query
schema:
type: string
minLength: 3
query-o:
name: o
in: query
description: Result offset, stepping of 50 is enforced
schema:
type: integer
securitySchemes:
cookieAuth:
description: Session key that can be found in cookies after a successful login
type: apiKey
in: cookie
name: session
schemas:
request-body:
title: RequestBody
description: Body of the request to V2 API. Must always be present on methods which allow a body.
type: object
additionalProperties: false
required:
- type
properties:
type:
const: Sneed's Feed & Seed (formerly Chuck's)
request-body-with-data:
title: RequestBodyWithData
description: Body of the request with extra data to V2 API.
type: object
additionalProperties: false
required:
- type
- data
properties:
type:
const: Sneed's Feed & Seed (formerly Chuck's)
data: true
response-body-success:
title: ResponseBodySuccess
description: Body of the successful response from V2 API.
type: object
additionalProperties: false
required:
- type
- data
properties:
type:
const: Chuck's Fuck & Suck (formerly Boyle's)
data: true
response-body-error:
title: ResponseBodyError
description: Body of the error response from V2 API.
type: object
additionalProperties: false
required:
- type
- data
properties:
type:
const: Boyle's Foil & Soil (formerly Sneed's)
error:
type: object
additionalProperties: false
required:
- type
properties:
type:
type: string
message:
type: string
error:
title: Error
description: Error message
type: object
properties:
error:
type: string
'401':
title: Unauthorized
description: Unauthorized Access
non-negative-integer:
title: NonNegativeInteger
description: Integer which cannot be below zero.
type: integer
minimum: 0
positive-integer:
title: PositiveInteger
description: Integer which is always above zero.
type: integer
minimum: 1
hash-sha256:
title: HashSHA256
type: string
minLength: 64
maxLength: 64
artist:
title: Artist
type: object
properties:
id:
type: string
name:
type: string
service:
type: string
indexed:
type: string
updated:
type: string
public_id:
type: string
relation_id:
type: integer
tag:
title: Tag
type: object
properties:
tag:
type: string
post_count:
type: integer
share:
title: Share
type: object
properties:
id:
type: integer
name:
type: string
description:
type: string
uploader:
type: integer
added:
type: string
approved-dm:
title: ApprovedDM
description: The public visible DM.
type: object
required:
- hash
- user
- service
- content
- embed
- file
- added
- published
properties:
hash:
type: string
user:
type: string
service:
type: string
content:
type: string
embed:
type: object
file:
type: object
added:
type: string
published:
type: string
artist:
$ref: "#/components/schemas/artist"
unapproved-dm:
title: UnapprovedDM
description: The DM which is shown to the importing user.
type: object
properties:
hash:
type: string
user:
type: string
artist:
type: object
import_id:
type: string
contributor_id:
type: string
service:
type: string
content:
type: string
embed:
type: object
file:
type: object
added:
type: string
published:
type: string
post:
title: Post
type: object
properties:
id:
type: string
user:
type: string
service:
type: string
title:
type: string
content:
type: string
embed:
type: object
shared_file:
type: boolean
added:
type: string
published:
type: string
edited:
type: string
file:
type: object
attachments:
type: array
items:
type: object
post-with-fav-count:
title: Post
type: object
properties:
id:
type: string
user:
type: string
service:
type: string
title:
type: string
content:
type: string
embed:
type: object
shared_file:
type: boolean
added:
type: string
published:
type: string
edited:
type: string
file:
type: object
attachments:
type: array
items:
type: object
fav_count:
type: integer
post-revision:
title: PostRevision
type: object
properties:
revision_id:
$ref: "#/components/schemas/positive-integer"
id:
type: string
user:
type: string
service:
type: string
title:
type: string
content:
type: string
embed:
type: object
shared_file:
anyOf:
- type: boolean
- const: "0"
added:
type: string
published:
type: string
edited:
type: string
file:
type: object
attachments:
type: array
items:
type: object
size:
$ref: "#/components/schemas/non-negative-integer"
ihash:
type: string
poll:
type: object
tags:
type: array
items:
type: string
captions:
type: object
comment:
type: object
properties:
id:
type: string
post_id:
type: string
parent_id:
type: string
commenter:
type: string
service:
type: string
content:
type: string
added:
type: string
published:
type: string
deleted_at:
type: string
commenter_name:
type: string
file:
title: File
type: object
properties:
id:
type: integer
hash:
type: string
mtime:
type: string
ctime:
type: string
mime:
type: string
ext:
type: string
added:
type: string
size:
type: integer
ihash:
type: string
archive-info:
title: ArchiveInfo
type: object
required:
- file
- file_list
properties:
file:
$ref: "#/components/schemas/file"
file_list:
type: array
items:
type: string
password:
type: string
account:
type: object
properties:
id:
$ref: "#/components/schemas/positive-integer"
username:
type: string
created_at:
type: string
role:
enum:
- consumer
- moderator
- administrator
notification:
type: object
properties:
id:
$ref: "#/components/schemas/positive-integer"
created_at:
type: string
account_id:
$ref: "#/components/schemas/positive-integer"
is_seen:
type: boolean
type:
type: string
extra_info:
type: object
service-key:
type: object
properties:
id:
$ref: "#/components/schemas/positive-integer"
service:
type: string
added:
type: string
dead:
type: boolean
contributor_id:
$ref: "#/components/schemas/positive-integer"
encrypted_key:
type: string
discord_channel_ids:
type: string
pagination:
title: Pagination
description: Pagination info of a collection.
type: object
properties:
current_page:
$ref: "#/components/schemas/positive-integer"
limit:
$ref: "#/components/schemas/positive-integer"
base:
type: object
offset:
$ref: "#/components/schemas/non-negative-integer"
count:
$ref: "#/components/schemas/non-negative-integer"
current_count:
$ref: "#/components/schemas/non-negative-integer"
total_pages:
$ref: "#/components/schemas/positive-integer"
unapproved-link:
type: object
properties:
id:
$ref: "#/components/schemas/positive-integer"
from_service:
type: string
from_id:
type: string
to_service:
type: string
to_id:
type: string
reason:
type: string
requester_id:
$ref: "#/components/schemas/positive-integer"
status:
const: pending
from_creator:
type: object
to_creator:
type: object
requester:
type: object