{
"openapi": "3.0.1",
"info": {
"title": "Manyfold API",
"version": "0",
"description": "This document describes the REST API for this [Manyfold](https://manyfold.app) instance.\n\nWarning! This API...\n\n* ... is not complete! Functionality is limited for now, but future releases will add more capabilities.\n* ... is not yet at v1! It's subject to breaking changes at any time.\n* ... is only valid for this host! Other Manyfold instances running different software versions may expose a different set of API functionality.\n"
},
"paths": {
"/.well-known/nodeinfo": {
"get": {
"summary": "Discovery URL for NodeInfo protocol",
"tags": [
"NodeInfo"
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json; profile=\"http://nodeinfo.diaspora.software/ns/schema/2.0#\"": {
"schema": {
"type": "object",
"properties": {
"links": {
"type": "array",
"items": {
"type": "object",
"properties": {
"rel": {
"type": "string",
"example": "https://nodeinfo.diaspora.software/ns/schema/2.0"
},
"href": {
"type": "string",
"example": "/nodeinfo/2.0",
"description": "The URL to the full NodeInfo document"
}
}
}
}
},
"required": [
"links"
]
}
}
}
}
}
}
},
"/nodeinfo/2.0": {
"get": {
"summary": "Get server metadata in NodeInfo 2.0 format",
"tags": [
"NodeInfo"
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json; profile=\"http://nodeinfo.diaspora.software/ns/schema/2.0#\"": {
"schema": {
"type": "object",
"properties": {
"version": {
"type": "string",
"example": "2.0"
},
"software": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "Manyfold"
},
"version": {
"type": "string",
"example": "v0.103.0"
}
}
},
"protocols": {
"type": "array",
"items": {
"type": "string",
"example": "activitypub"
}
},
"services": {
"type": "object",
"properties": {
"inbound": {
"type": "array",
"items": {
"type": "string"
},
"example": []
},
"outbound": {
"type": "array",
"items": {
"type": "string"
},
"example": []
}
}
},
"openRegistrations": {
"type": "boolean"
},
"usage": {
"type": "object",
"properties": {
"users": {
"type": "object",
"properties": {
"total": {
"type": "integer"
},
"activeMonth": {
"type": "integer"
},
"activeHalfyear": {
"type": "integer"
}
}
}
}
},
"metadata": {
"type": "object"
}
},
"required": [
"version",
"software",
"protocols",
"openRegistrations"
]
}
}
}
}
}
}
},
"/oembed": {
"get": {
"summary": "generic oEmbed API endpoint",
"tags": [
"oEmbed"
],
"parameters": [
{
"name": "url",
"in": "query",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "maxwidth",
"in": "query",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "maxheight",
"in": "query",
"required": false,
"schema": {
"type": "integer"
}
}
],
"responses": {
"303": {
"description": "Redirect to oembed version of the provided URL"
}
}
}
},
"/collections/{id}.oembed": {
"get": {
"summary": "oEmbed response for Collections",
"tags": [
"oEmbed"
],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "maxwidth",
"in": "query",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "maxheight",
"in": "query",
"required": false,
"schema": {
"type": "integer"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json+oembed": {
"schema": {
"oneOf": [
{
"$ref": "#/components/schemas/oembed_rich"
},
{
"$ref": "#/components/schemas/oembed_photo"
},
{
"$ref": "#/components/schemas/oembed_video"
},
{
"$ref": "#/components/schemas/oembed_link"
}
],
"discriminator": {
"propertyName": "type",
"mapping": {
"rich": "#/components/schemas/oembed_rich",
"photo": "#/components/schemas/oembed_photo",
"video": "#/components/schemas/oembed_video",
"link": "#/components/schemas/oembed_link"
}
}
}
}
}
},
"404": {
"description": "Not Found or Unauthorized"
}
}
}
},
"/creators/{id}.oembed": {
"get": {
"summary": "oEmbed response for Creators",
"tags": [
"oEmbed"
],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "maxwidth",
"in": "query",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "maxheight",
"in": "query",
"required": false,
"schema": {
"type": "integer"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json+oembed": {
"schema": {
"$ref": "#/components/schemas/oembed_link"
}
}
}
},
"404": {
"description": "Not Found or Unauthorized"
}
}
}
},
"/models/{id}.oembed": {
"get": {
"summary": "oEmbed response for Models",
"tags": [
"oEmbed"
],
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"schema": {
"type": "string"
}
},
{
"name": "maxwidth",
"in": "query",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "maxheight",
"in": "query",
"required": false,
"schema": {
"type": "integer"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json+oembed": {
"schema": {
"oneOf": [
{
"$ref": "#/components/schemas/oembed_rich"
},
{
"$ref": "#/components/schemas/oembed_photo"
},
{
"$ref": "#/components/schemas/oembed_video"
},
{
"$ref": "#/components/schemas/oembed_link"
}
],
"discriminator": {
"propertyName": "type",
"mapping": {
"rich": "#/components/schemas/oembed_rich",
"photo": "#/components/schemas/oembed_photo",
"video": "#/components/schemas/oembed_video",
"link": "#/components/schemas/oembed_link"
}
}
}
}
}
},
"404": {
"description": "Not Found, or Unauthorized"
}
}
}
},
"/collections": {
"get": {
"summary": "A list of collections",
"tags": [
"Collections"
],
"parameters": [
{
"name": "page",
"in": "query",
"example": 1,
"description": "Specify which page of results to retrieve.",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "order",
"in": "query",
"enum": [
"name",
"recent",
"updated"
],
"description": "Specify order of results; either by name, creation time, or updated time:\n * `name` \n * `recent` \n * `updated` \n ",
"example": "name",
"required": false,
"schema": {
"type": "string"
}
}
],
"security": [
{
"client_credentials": [
"public",
"read"
]
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"type": "object",
"properties": {
"@context": {
"$ref": "#/components/schemas/jsonld_context"
},
"@id": {
"type": "string",
"example": "https://example.com/collections"
},
"@type": {
"type": "string",
"example": "hydra:Collection"
},
"totalItems": {
"type": "integer",
"example": 42
},
"member": {
"type": "array",
"items": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "/collections/abc123",
"description": "The URL of the collection"
},
"name": {
"type": "string",
"example": "Printer Parts",
"description": "The human name of the collection"
}
},
"required": [
"@id",
"name"
]
}
},
"view": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/collections?page=2"
},
"@type": {
"type": "string",
"example": "hydra:PartialCollectionView"
},
"first": {
"type": "string",
"example": "https://example.com/collections?page=1"
},
"prev": {
"type": "string",
"example": "https://example.com/collections?page=1"
},
"next": {
"type": "string",
"example": "https://example.com/collections?page=3"
},
"last": {
"type": "string",
"example": "https://example.com/collections?page=10"
}
},
"required": [
"@id",
"@type",
"first",
"last"
]
}
},
"required": [
"@context",
"@id",
"@type",
"totalItems",
"member",
"view"
]
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
},
"post": {
"summary": "Create a new collection",
"tags": [
"Collections"
],
"security": [
{
"client_credentials": [
"write"
]
}
],
"parameters": [],
"responses": {
"201": {
"description": "Collection created",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/collection_response"
}
}
}
},
"400": {
"description": "The request structure was incorrect"
},
"422": {
"description": "Creation failed due to invalid data"
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
},
"requestBody": {
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/collection_request"
}
}
}
}
}
},
"/collections/{id}": {
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"example": "abc123",
"schema": {
"type": "string"
}
}
],
"get": {
"summary": "Details of a single collection",
"tags": [
"Collections"
],
"security": [
{
"client_credentials": [
"public",
"read"
]
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/collection_response"
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
},
"patch": {
"summary": "Update a collection",
"tags": [
"Collections"
],
"security": [
{
"client_credentials": [
"write"
]
}
],
"parameters": [],
"responses": {
"200": {
"description": "Collection updated",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/collection_response"
}
}
}
},
"400": {
"description": "The request structure was incorrect"
},
"422": {
"description": "Creation failed due to invalid data"
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
},
"requestBody": {
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/collection_request"
}
}
}
}
},
"delete": {
"summary": "Remove a collection",
"tags": [
"Collections"
],
"security": [
{
"client_credentials": [
"delete"
]
}
],
"responses": {
"204": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"type": null
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
}
},
"/creators": {
"get": {
"summary": "A list of creators",
"tags": [
"Creators"
],
"parameters": [
{
"name": "page",
"in": "query",
"example": 1,
"description": "Specify which page of results to retrieve.",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "order",
"in": "query",
"enum": [
"name",
"recent",
"updated"
],
"description": "Specify order of results; either by name, creation time, or updated time:\n * `name` \n * `recent` \n * `updated` \n ",
"example": "name",
"required": false,
"schema": {
"type": "string"
}
}
],
"security": [
{
"client_credentials": [
"public",
"read"
]
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"type": "object",
"properties": {
"@context": {
"$ref": "#/components/schemas/jsonld_context"
},
"@id": {
"type": "string",
"example": "https://example.com/creators"
},
"@type": {
"type": "string",
"example": "hydra:Collection"
},
"totalItems": {
"type": "integer",
"example": 42
},
"member": {
"type": "array",
"items": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "/creators/abc123",
"description": "The URL of the creator"
},
"name": {
"type": "string",
"example": "Fred",
"description": "The human name of the creator"
}
},
"required": [
"@id",
"name"
]
}
},
"view": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/creators?page=2"
},
"@type": {
"type": "string",
"example": "hydra:PartialCollectionView"
},
"first": {
"type": "string",
"example": "https://example.com/creators?page=1"
},
"prev": {
"type": "string",
"example": "https://example.com/creators?page=1"
},
"next": {
"type": "string",
"example": "https://example.com/creators?page=3"
},
"last": {
"type": "string",
"example": "https://example.com/creators?page=10"
}
},
"required": [
"@id",
"@type",
"first",
"last"
]
}
},
"required": [
"@context",
"@id",
"@type",
"totalItems",
"member",
"view"
]
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
},
"post": {
"summary": "Create a creator",
"tags": [
"Creators"
],
"security": [
{
"client_credentials": [
"write"
]
}
],
"parameters": [],
"responses": {
"201": {
"description": "Creator created",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/creator_response"
}
}
}
},
"400": {
"description": "The request structure was incorrect"
},
"422": {
"description": "Creation failed due to invalid data"
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
},
"requestBody": {
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/creator_request"
}
}
}
}
}
},
"/creators/{id}": {
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"example": "abc123",
"schema": {
"type": "string"
}
}
],
"get": {
"summary": "Details of a single creator",
"tags": [
"Creators"
],
"security": [
{
"client_credentials": [
"public",
"read"
]
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/creator_response"
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
},
"patch": {
"summary": "Update a creator",
"tags": [
"Creators"
],
"security": [
{
"client_credentials": [
"write"
]
}
],
"parameters": [],
"responses": {
"200": {
"description": "Creator updated",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/creator_response"
}
}
}
},
"400": {
"description": "The request structure was incorrect"
},
"422": {
"description": "Creation failed due to invalid data"
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
},
"requestBody": {
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/creator_request"
}
}
}
}
},
"delete": {
"summary": "Remove a creator",
"tags": [
"Creators"
],
"security": [
{
"client_credentials": [
"delete"
]
}
],
"responses": {
"204": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"type": null
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
}
},
"/creators/{creator_id}/groups": {
"parameters": [
{
"name": "creator_id",
"in": "path",
"required": true,
"example": "abc123",
"schema": {
"type": "string"
}
}
],
"get": {
"summary": "A list of user groups associated with a creator",
"tags": [
"User Groups"
],
"security": [
{
"client_credentials": [
"read"
]
}
],
"parameters": [
{
"name": "page",
"in": "query",
"example": 1,
"description": "Specify which page of results to retrieve.",
"required": false,
"schema": {
"type": "integer"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"type": "object",
"properties": {
"@context": {
"$ref": "#/components/schemas/jsonld_context"
},
"@id": {
"type": "string",
"example": "https://example.com/creators"
},
"@type": {
"type": "string",
"example": "hydra:Collection"
},
"totalItems": {
"type": "integer",
"example": 3
},
"member": {
"type": "array",
"items": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "/creators/abc123/groups/1",
"description": "The URL of the user group"
},
"name": {
"type": "string",
"example": "Patrons",
"description": "The human name of the user group"
}
},
"required": [
"@id",
"name"
]
}
},
"view": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/creators?page=2"
},
"@type": {
"type": "string",
"example": "hydra:PartialCollectionView"
},
"first": {
"type": "string",
"example": "https://example.com/creators?page=1"
},
"prev": {
"type": "string",
"example": "https://example.com/creators?page=1"
},
"next": {
"type": "string",
"example": "https://example.com/creators?page=3"
},
"last": {
"type": "string",
"example": "https://example.com/creators?page=10"
}
},
"required": [
"@id",
"@type",
"first",
"last"
]
}
},
"required": [
"@context",
"@id",
"@type",
"totalItems",
"member",
"view"
]
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
},
"post": {
"summary": "Create a new user group",
"tags": [
"User Groups"
],
"security": [
{
"client_credentials": [
"write"
]
}
],
"parameters": [],
"responses": {
"201": {
"description": "Group created",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/group_response"
}
}
}
},
"400": {
"description": "The request structure was incorrect"
},
"422": {
"description": "Creation failed due to invalid data"
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
},
"requestBody": {
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/group_request"
}
}
}
}
}
},
"/creators/{creator_id}/groups/{id}": {
"parameters": [
{
"name": "creator_id",
"in": "path",
"required": true,
"example": "abc123",
"schema": {
"type": "string"
}
},
{
"name": "id",
"in": "path",
"required": true,
"example": "1",
"schema": {
"type": "string"
}
}
],
"get": {
"summary": "Get details of a single user group",
"tags": [
"User Groups"
],
"security": [
{
"client_credentials": [
"read"
]
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/group_response"
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
},
"patch": {
"summary": "Update a user group",
"tags": [
"User Groups"
],
"security": [
{
"client_credentials": [
"write"
]
}
],
"parameters": [],
"responses": {
"200": {
"description": "Group updated",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/group_response"
}
}
}
},
"400": {
"description": "The request structure was incorrect"
},
"422": {
"description": "Update failed due to invalid data"
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
},
"requestBody": {
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/group_request"
}
}
}
}
},
"delete": {
"summary": "Remove a user group",
"tags": [
"User Groups"
],
"security": [
{
"client_credentials": [
"delete"
]
}
],
"responses": {
"204": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"type": null
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
}
},
"/models/{model_id}/model_files": {
"post": {
"summary": "Add a new file to a model",
"tags": [
"Files"
],
"security": [
{
"client_credentials": [
"write"
]
}
],
"parameters": [
{
"name": "model_id",
"in": "path",
"required": true,
"example": "abc123",
"schema": {
"type": "string"
}
}
],
"responses": {
"202": {
"description": "Accepted; the files will be added to the model after processing"
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
},
"requestBody": {
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/uploaded_file_request"
}
}
}
}
}
},
"/models/{model_id}/model_files/{id}": {
"parameters": [
{
"name": "model_id",
"in": "path",
"required": true,
"example": "abc123",
"schema": {
"type": "string"
}
},
{
"name": "id",
"in": "path",
"required": true,
"example": "def456",
"schema": {
"type": "string"
}
}
],
"get": {
"summary": "Details of a single file in a model",
"tags": [
"Files"
],
"security": [
{
"client_credentials": [
"public",
"read"
]
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/model_file_response"
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
},
"patch": {
"summary": "Update file details",
"tags": [
"Files"
],
"security": [
{
"client_credentials": [
"write"
]
}
],
"parameters": [],
"responses": {
"200": {
"description": "File updated",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/model_file_response"
}
}
}
},
"400": {
"description": "The request structure was incorrect"
},
"422": {
"description": "Update failed due to invalid data"
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
},
"requestBody": {
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/model_file_request"
}
}
}
}
},
"delete": {
"summary": "Remove a single file",
"tags": [
"Files"
],
"security": [
{
"client_credentials": [
"delete"
]
}
],
"responses": {
"204": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"type": null
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
}
},
"/models": {
"get": {
"summary": "A list of models",
"tags": [
"Models"
],
"parameters": [
{
"name": "page",
"in": "query",
"example": 1,
"description": "Specify which page of results to retrieve.",
"required": false,
"schema": {
"type": "integer"
}
},
{
"name": "order",
"in": "query",
"enum": [
"name",
"recent",
"updated"
],
"description": "Specify order of results; either by name, creation time, or updated time:\n * `name` \n * `recent` \n * `updated` \n ",
"example": "name",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "creator",
"in": "query",
"description": "The ID of a creator to filter the model list",
"example": "abc123",
"required": false,
"schema": {
"type": "string"
}
},
{
"name": "collection",
"in": "query",
"description": "The ID of a collection to filter the model list",
"example": "abc123",
"required": false,
"schema": {
"type": "string"
}
}
],
"security": [
{
"client_credentials": [
"public",
"read"
]
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"type": "object",
"properties": {
"@context": {
"$ref": "#/components/schemas/jsonld_context"
},
"@id": {
"type": "string",
"example": "https://example.com/models"
},
"@type": {
"type": "string",
"example": "hydra:Collection"
},
"totalItems": {
"type": "integer",
"example": 42
},
"member": {
"type": "array",
"items": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "/models/abc123",
"description": "The URL of the model"
},
"@type": {
"type": "string",
"example": "3DModel"
},
"name": {
"type": "string",
"example": "Model",
"description": "The human name of the model"
}
},
"required": [
"@id",
"name"
]
}
},
"view": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/models?page=2"
},
"@type": {
"type": "string",
"example": "hydra:PartialCollectionView"
},
"first": {
"type": "string",
"example": "https://example.com/models?page=1"
},
"prev": {
"type": "string",
"example": "https://example.com/models?page=1"
},
"next": {
"type": "string",
"example": "https://example.com/models?page=3"
},
"last": {
"type": "string",
"example": "https://example.com/models?page=10"
}
},
"required": [
"@id",
"@type",
"first",
"last"
]
}
},
"required": [
"@context",
"@id",
"@type",
"totalItems",
"member",
"view"
]
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
},
"post": {
"summary": "Create new models from uploaded files",
"tags": [
"Models"
],
"security": [
{
"client_credentials": [
"write"
]
}
],
"parameters": [],
"responses": {
"201": {
"description": "Created; a single model was created and the files will be added into it shortly"
},
"202": {
"description": "Accepted; multiple models were created, one for each archive, and the files will be extracted into them shortly"
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
},
"requestBody": {
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/uploaded_model_request"
}
}
}
}
}
},
"/models/{id}": {
"parameters": [
{
"name": "id",
"in": "path",
"required": true,
"example": "abc123",
"schema": {
"type": "string"
}
}
],
"get": {
"summary": "Details of a single model",
"tags": [
"Models"
],
"security": [
{
"client_credentials": [
"public",
"read"
]
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/model_response"
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
},
"patch": {
"summary": "Update a model",
"tags": [
"Models"
],
"security": [
{
"client_credentials": [
"write"
]
}
],
"parameters": [],
"responses": {
"200": {
"description": "Model updated",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/model_response"
}
}
}
},
"400": {
"description": "The request structure was incorrect"
},
"422": {
"description": "Update failed due to invalid data"
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
},
"requestBody": {
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"$ref": "#/components/schemas/model_request"
}
}
}
}
},
"delete": {
"summary": "Remove an entire model",
"tags": [
"Models"
],
"security": [
{
"client_credentials": [
"delete"
]
}
],
"responses": {
"204": {
"description": "Success",
"content": {
"application/vnd.manyfold.v0+json": {
"schema": {
"type": null
}
}
}
},
"401": {
"description": "Unauthorized; the request did not provide valid authentication details"
},
"403": {
"description": "Forbidden; the provided credentials do not have permission to perform the requested action"
}
}
}
},
"/upload": {
"options": {
"summary": "Details of upload capabilities",
"tags": [
"File Uploading"
],
"description": "Manyfold uses the Tus protocol for resumable uploading; see https://tus.io/protocols/resumable-upload for full details.",
"security": [
{
"client_credentials": [
"upload"
]
}
],
"responses": {
"204": {
"description": "Upload capabilities",
"headers": {
"Tus-Resumable": {
"schema": {
"type": "string",
"example": "1.0.0",
"description": "Tus protocol version"
}
},
"Tus-Version": {
"schema": {
"type": "string",
"example": "1.0.0,0.2.2,0.2.1",
"description": "Comma separated versions of the Tus protocol supported by the server"
}
},
"Tus-Extension": {
"schema": {
"type": "string",
"example": "creation,termination,expiration,concatenation",
"description": "Comma separated list of Tus protocol extensions supported by the server"
}
},
"Tus-Max-Size": {
"schema": {
"type": "integer",
"example": 1073741824,
"description": "The maximum file size that can be uploaded to the server"
}
}
}
}
}
},
"post": {
"summary": "Create a new upload",
"tags": [
"File Uploading"
],
"description": "Manyfold uses the Tus protocol for resumable uploading; see https://tus.io/protocols/resumable-upload for full details.",
"parameters": [
{
"in": "header",
"name": "Tus-Resumable",
"description": "Tus protocol version",
"example": "1.0.0",
"required": true
},
{
"in": "header",
"name": "Upload-Length",
"description": "Total size of upload, in bytes",
"example": 0,
"required": true
},
{
"in": "header",
"name": "Upload-Metadata",
"description": "See https://tus.io/protocols/resumable-upload#upload-metadata",
"required": false
}
],
"security": [
{
"client_credentials": [
"upload"
]
}
],
"responses": {
"201": {
"description": "Upload created successfully",
"headers": {
"Location": {
"schema": {
"type": "string",
"example": "/upload/24e533e02ec3bc40c387f1a0e460e216",
"description": "URL for the newly created upload"
}
}
}
},
"403": {
"description": "Forbidden"
},
"401": {
"description": "Unauthorized"
}
}
}
},
"/upload/{id}": {
"parameters": [
{
"in": "path",
"name": "id",
"example": "24e533e02ec3bc40c387f1a0e460e216",
"required": true
},
{
"in": "header",
"name": "Tus-Resumable",
"description": "Tus protocol version",
"example": "1.0.0",
"required": true
}
],
"head": {
"summary": "Get status of upload",
"tags": [
"File Uploading"
],
"description": "Manyfold uses the Tus protocol for resumable uploading; see https://tus.io/protocols/resumable-upload for full details.",
"security": [
{
"client_credentials": [
"upload"
]
}
],
"responses": {
"204": {
"description": "Upload status",
"headers": {
"Tus-Resumable": {
"schema": {
"type": "string",
"example": "1.0.0",
"description": "Tus protocol version"
}
},
"Upload-Length": {
"schema": {
"type": "integer",
"example": 1024,
"description": "The expected total length of the file to be uploaded"
}
},
"Upload-Offset": {
"schema": {
"type": "integer",
"example": 384,
"description": "The number of bytes of the file that have been uploaded so far"
}
}
}
}
}
},
"patch": {
"summary": "Upload bytes at specified offset",
"tags": [
"File Uploading"
],
"description": "Manyfold uses the Tus protocol for resumable uploading; see https://tus.io/protocols/resumable-upload for full details.",
"parameters": [
{
"in": "header",
"name": "Upload-Offset",
"description": "File offset for bytes being sent. Must be the same as current Upload-Offset value reported by the HEAD request.",
"example": 384,
"required": true
},
{
"in": "header",
"name": "Content-Length",
"description": "The number of bytes being sent in the POST body",
"example": 128,
"required": true
}
],
"security": [
{
"client_credentials": [
"upload"
]
}
],
"responses": {
"204": {
"description": "Upload successful",
"headers": {
"Upload-Offset": {
"schema": {
"type": "integer",
"description": "The new upload offset after the uploaded bytes have been added",
"example": 512
}
}
}
}
},
"requestBody": {
"content": {
"application/offset+octet-stream": {
"schema": {
"type": "string",
"format": "byte"
}
}
},
"required": true
}
}
}
},
"servers": [
{
"url": "https://try.manyfold.app"
}
],
"components": {
"securitySchemes": {
"client_credentials": {
"type": "oauth2",
"description": "Authentication with the OAuth2 Client Credentials grant flow. You can generate client app credentials at /oauth/applications.",
"flows": {
"clientCredentials": {
"tokenUrl": "/oauth/token",
"scopes": {
"public": "read public data accessible without logging in",
"read": "read data accessible to the OAuth application's owner",
"write": "create or change data that the OAuth application's owner has appropriate permissions for",
"delete": "remove data that the OAuth application's owner has appropriate permissions for",
"upload": "upload new models and files if the OAuth application's owner has permission"
}
}
}
}
},
"schemas": {
"jsonld_context": {
"type": "array",
"items": {
"oneOf": [
{
"type": "string"
},
{
"type": "object"
}
]
}
},
"oembed_link": {
"type": "object",
"properties": {
"version": {
"type": "string",
"example": "1.0"
},
"type": {
"type": "string",
"example": "link"
},
"title": {
"type": "string",
"example": "Model Title"
},
"author_name": {
"type": "string",
"example": "Creator Name"
},
"author_url": {
"type": "string",
"example": "https://example.com/creators/bob"
},
"provider_name": {
"type": "string",
"example": "Manyfold"
},
"provider_url": {
"type": "string",
"example": "https://example.com"
},
"cache_age": {
"type": "integer",
"example": 86400
}
},
"required": [
"version",
"type"
]
},
"oembed_photo": {
"type": "object",
"properties": {
"version": {
"type": "string",
"example": "1.0"
},
"type": {
"type": "string",
"example": "photo"
},
"url": {
"type": "string",
"example": "https://example.com/models/123/model_files/456.png"
},
"width": {
"type": "integer",
"example": "256"
},
"height": {
"type": "integer",
"example": "256"
},
"title": {
"type": "string",
"example": "Model Title"
},
"author_name": {
"type": "string",
"example": "Creator Name"
},
"author_url": {
"type": "string",
"example": "https://example.com/creators/bob"
},
"provider_name": {
"type": "string",
"example": "Manyfold"
},
"provider_url": {
"type": "string",
"example": "https://example.com"
},
"cache_age": {
"type": "integer",
"example": 86400
}
},
"required": [
"version",
"type",
"url",
"width",
"height"
]
},
"oembed_video": {
"type": "object",
"properties": {
"version": {
"type": "string",
"example": "1.0"
},
"type": {
"type": "string",
"example": "video"
},
"html": {
"type": "string",
"example": ""
},
"width": {
"type": "integer",
"example": "256"
},
"height": {
"type": "integer",
"example": "256"
},
"title": {
"type": "string",
"example": "Model Title"
},
"author_name": {
"type": "string",
"example": "Creator Name"
},
"author_url": {
"type": "string",
"example": "https://example.com/creators/bob"
},
"provider_name": {
"type": "string",
"example": "Manyfold"
},
"provider_url": {
"type": "string",
"example": "https://example.com"
},
"cache_age": {
"type": "integer",
"example": 86400
}
},
"required": [
"version",
"type",
"html",
"width",
"height"
]
},
"oembed_rich": {
"type": "object",
"properties": {
"version": {
"type": "string",
"example": "1.0"
},
"type": {
"type": "string",
"example": "rich"
},
"html": {
"type": "string",
"example": ""
},
"width": {
"type": "integer",
"example": "256"
},
"height": {
"type": "integer",
"example": "256"
},
"title": {
"type": "string",
"example": "Model Title"
},
"author_name": {
"type": "string",
"example": "Creator Name"
},
"author_url": {
"type": "string",
"example": "https://example.com/creators/bob"
},
"provider_name": {
"type": "string",
"example": "Manyfold"
},
"provider_url": {
"type": "string",
"example": "https://example.com"
},
"cache_age": {
"type": "integer",
"example": 86400
}
},
"required": [
"version",
"type",
"html",
"width",
"height"
]
},
"spdxLicense": {
"type": "object",
"properties": {
"@type": {
"type": "string",
"example": "spdx:License"
},
"@id": {
"type": "string",
"example": "http://spdx.org/licenses/MIT"
},
"licenseId": {
"type": "string",
"example": "MIT"
}
},
"required": [
"@type",
"licenseId"
]
},
"link_request": {
"type": "object",
"properties": {
"url": {
"type": "string",
"example": "https://example.com"
},
"text": {
"type": "string",
"example": "anchor text"
}
},
"required": [
"url"
]
},
"collection_request": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "Interesting Things"
},
"caption": {
"type": "string",
"example": "A short description"
},
"description": {
"type": "string",
"example": "Lorem ipsum dolor sit amet..."
},
"links": {
"type": "array",
"items": {
"$ref": "#/components/schemas/link_request"
}
},
"creator": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/creators/abc123"
},
"@type": {
"type": "string",
"example": "Organization"
}
},
"required": [
"@id"
]
},
"isPartOf": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/collections/abc123"
},
"@type": {
"type": "string",
"example": "Collection"
}
},
"required": [
"@id"
]
},
"preview_file": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/models/abc123"
},
"@type": {
"type": "string",
"example": "3DModel"
}
},
"required": [
"@id"
]
}
},
"required": [
"name"
]
},
"collection_response": {
"type": "object",
"properties": {
"@context": {
"$ref": "#/components/schemas/jsonld_context"
},
"@id": {
"type": "string",
"example": "https://example.com/collections/abc123"
},
"@type": {
"type": "string",
"example": "Collection"
},
"name": {
"type": "string",
"example": "Interesting Things"
},
"caption": {
"type": "string",
"example": "A short description"
},
"description": {
"type": "string",
"example": "Lorem ipsum dolor sit amet..."
},
"links": {
"type": "array",
"items": {
"$ref": "#/components/schemas/link_request"
}
},
"creator": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/creators/abc123"
},
"@type": {
"type": "string",
"example": "Organization"
}
},
"required": [
"@id"
]
},
"isPartOf": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/collections/abc123"
},
"@type": {
"type": "string",
"example": "Collection"
}
},
"required": [
"@id"
]
},
"preview_file": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/models/abc123"
},
"@type": {
"type": "string",
"example": "3DModel"
}
},
"required": [
"@id"
]
}
},
"required": [
"@context",
"@id",
"@type"
]
},
"creator_request": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "Bruce Wayne"
},
"slug": {
"type": "string",
"example": "bruce-wayne"
},
"caption": {
"type": "string",
"example": "A short description"
},
"description": {
"type": "string",
"example": "Lorem ipsum dolor sit amet..."
},
"links": {
"type": "array",
"items": {
"$ref": "#/components/schemas/link_request"
}
}
},
"required": [
"name"
]
},
"creator_response": {
"type": "object",
"properties": {
"@context": {
"$ref": "#/components/schemas/jsonld_context"
},
"@id": {
"type": "string",
"example": "https://example.com/creators/abc123"
},
"@type": {
"type": "string",
"example": "Organization"
},
"name": {
"type": "string",
"example": "Bruce Wayne"
},
"slug": {
"type": "string",
"example": "bruce-wayne"
},
"caption": {
"type": "string",
"example": "A short description"
},
"description": {
"type": "string",
"example": "Lorem ipsum dolor sit amet..."
},
"links": {
"type": "array",
"items": {
"$ref": "#/components/schemas/link_request"
}
}
},
"required": [
"@context",
"@id",
"@type"
]
},
"group_request": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "Patrons"
},
"description": {
"type": "string",
"example": "My subscribers"
},
"add_members": {
"type": "array",
"items": {
"type": "string",
"example": "username / email / fediverse address"
}
},
"remove_members": {
"type": "array",
"items": {
"type": "string",
"example": "username / email / fediverse address"
}
}
}
},
"group_response": {
"type": "object",
"properties": {
"@context": {
"$ref": "#/components/schemas/jsonld_context"
},
"@id": {
"type": "string",
"example": "https://example.com/creators/abc123/groups/1"
},
"@type": {
"type": "string",
"example": "Group"
},
"members": {
"type": "array",
"items": {
"type": "string",
"example": "username"
}
},
"name": {
"type": "string",
"example": "Patrons"
},
"description": {
"type": "string",
"example": "My subscribers"
}
},
"required": [
"@context",
"@id",
"@type"
]
},
"model_request": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "Batmobile"
},
"caption": {
"type": "string",
"example": "A short description"
},
"description": {
"type": "string",
"example": "Lorem ipsum dolor sit amet..."
},
"links": {
"type": "array",
"items": {
"$ref": "#/components/schemas/link_request"
}
},
"creator": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/creators/abc123"
},
"@type": {
"type": "string",
"example": "Organization"
}
},
"required": [
"@id"
]
},
"isPartOf": {
"type": "array",
"items": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/collections/abc123"
},
"@type": {
"type": "string",
"example": "Collection"
}
},
"required": [
"@id"
]
}
},
"spdx:license": {
"$ref": "#/components/schemas/spdxLicense"
},
"sensitive": {
"type": "boolean",
"example": true
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"example": "tag"
}
},
"preview_file": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/models/abc123/model_files/def456"
},
"@type": {
"type": "string",
"example": "3DModel"
}
},
"required": [
"@id"
]
}
},
"required": [
"name"
]
},
"model_response": {
"type": "object",
"properties": {
"@context": {
"$ref": "#/components/schemas/jsonld_context"
},
"@id": {
"type": "string",
"example": "https://example.com/models/abc123"
},
"@type": {
"type": "string",
"example": "3DModel"
},
"hasPart": {
"type": "array",
"items": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/models/abc123/model_files/def456"
},
"@type": {
"type": "string",
"example": "3DModel"
},
"name": {
"type": "string",
"example": "Benchy"
},
"encodingFormat": {
"type": "string",
"example": "model/stl"
}
}
},
"required": [
"@id",
"@type",
"name",
"encodingFormat"
]
},
"name": {
"type": "string",
"example": "Batmobile"
},
"caption": {
"type": "string",
"example": "A short description"
},
"description": {
"type": "string",
"example": "Lorem ipsum dolor sit amet..."
},
"links": {
"type": "array",
"items": {
"$ref": "#/components/schemas/link_request"
}
},
"creator": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/creators/abc123"
},
"@type": {
"type": "string",
"example": "Organization"
}
},
"required": [
"@id"
]
},
"isPartOf": {
"type": "array",
"items": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/collections/abc123"
},
"@type": {
"type": "string",
"example": "Collection"
}
},
"required": [
"@id"
]
}
},
"spdx:license": {
"$ref": "#/components/schemas/spdxLicense"
},
"sensitive": {
"type": "boolean",
"example": true
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"example": "tag"
}
},
"preview_file": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/models/abc123/model_files/def456"
},
"@type": {
"type": "string",
"example": "3DModel"
}
},
"required": [
"@id"
]
}
},
"required": [
"@context",
"@id",
"@type",
"hasPart"
]
},
"model_file_request": {
"type": "object",
"properties": {
"filename": {
"type": "string",
"example": "model.stl"
},
"description": {
"type": "string",
"example": "Lorem ipsum dolor sit amet..."
},
"caption": {
"type": "string",
"example": "A short caption describing the file"
},
"presupported": {
"type": "boolean",
"example": true
},
"up": {
"type": "string",
"enum": [
"+y",
"+z"
],
"example": "+y"
},
"previewable": {
"type": "boolean",
"example": false
},
"related": {
"type": "array",
"items": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/models/abc123/model_files/def456"
},
"@type": {
"type": "string",
"example": "3DModel"
},
"relationship": {
"type": "string",
"enum": [
"presupported_version",
"presupported_version_of"
],
"example": "presupported_version"
}
}
}
}
}
},
"model_file_response": {
"type": "object",
"properties": {
"@context": {
"$ref": "#/components/schemas/jsonld_context"
},
"@id": {
"type": "string",
"example": "https://example.com/models/abc123/model_files/def456"
},
"@type": {
"type": "string",
"example": "3DModel"
},
"name": {
"type": "string",
"example": "Benchy"
},
"encodingFormat": {
"type": "string",
"example": "model/stl"
},
"contentUrl": {
"type": "string",
"example": "https://example.com/models/abc123/model_files/def456.stl"
},
"contentSize": {
"type": "integer",
"example": 12345
},
"isPartOf": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/models/abc123"
},
"@type": {
"type": "string",
"example": "3DModel"
}
}
},
"spdx:license": {
"$ref": "#/components/schemas/spdxLicense"
},
"creator": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/creators/abc123"
},
"@type": {
"type": "string",
"example": "Organization"
}
}
},
"filename": {
"type": "string",
"example": "model.stl"
},
"description": {
"type": "string",
"example": "Lorem ipsum dolor sit amet..."
},
"caption": {
"type": "string",
"example": "A short caption describing the file"
},
"presupported": {
"type": "boolean",
"example": true
},
"up": {
"type": "string",
"enum": [
"+y",
"+z"
],
"example": "+y"
},
"previewable": {
"type": "boolean",
"example": false
},
"related": {
"type": "array",
"items": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/models/abc123/model_files/def456"
},
"@type": {
"type": "string",
"example": "3DModel"
},
"relationship": {
"type": "string",
"enum": [
"presupported_version",
"presupported_version_of"
],
"example": "presupported_version"
}
}
}
}
},
"required": [
"@context",
"@id",
"@type",
"isPartOf",
"encodingFormat"
]
},
"uploaded_file_request": {
"type": "object",
"properties": {
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of a completed upload, obtained from the upload endpoints",
"example": "http://example.com/uploads/abc123456def"
},
"name": {
"type": "string",
"example": "model.stl"
}
},
"required": [
"id",
"name",
"type",
"size"
]
}
}
},
"required": [
"files"
]
},
"uploaded_model_request": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "My New Model",
"description": "Used as model name if any files are uploaded that aren't compressed archives"
},
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string",
"description": "The ID of a completed upload, obtained from the upload endpoints",
"example": "http://example.com/uploads/abc123456def"
},
"name": {
"type": "string",
"example": "model.stl"
}
},
"required": [
"id",
"name",
"type",
"size"
]
}
},
"creator": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/creators/abc123"
},
"@type": {
"type": "string",
"example": "Organization"
}
},
"required": [
"@id"
]
},
"isPartOf": {
"type": "object",
"properties": {
"@id": {
"type": "string",
"example": "https://example.com/collections/abc123"
},
"@type": {
"type": "string",
"example": "Collection"
}
},
"required": [
"@id"
]
},
"spdx:license": {
"$ref": "#/components/schemas/spdxLicense"
},
"sensitive": {
"type": "boolean",
"example": true
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"example": "tag"
}
}
},
"required": [
"files"
]
}
}
}
}