post
/users/@me/memesCreate meme from URL
Saves a new meme to favorites from a provided URL.
create_meme_from_url
Request body
application/json
json
{
"type": "object",
"properties": {
"alt_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Alternative text description for accessibility"
},
"tags": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"description": "Tags for categorizing and searching the meme"
},
"url": {
"type": "string",
"format": "uri",
"description": "URL of the image or video to save as a favorite meme"
},
"gif_slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Provider-issued slug or slug-id token for the GIF, when sourced from a provider"
},
"gif_provider": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Stable name of the GIF provider that issued gif_slug. New provider GIFs are sourced from KLIPY."
},
"media": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/GifMediaFormat"
}
},
{
"type": "null"
}
],
"description": "Optional provider-issued format-name → media descriptor map captured by the client at favorite-time (mirrors GifResponse.media). Only persisted for gif-sourced memes; ignored otherwise."
},
"name": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Display name for the meme"
}
},
"required": [
"url"
]
}Responses
201
Success
json
{
"type": "object",
"properties": {
"id": {
"type": "string",
"pattern": "^(0|[1-9][0-9]*)$",
"description": "Unique identifier for the favorite meme"
},
"user_id": {
"type": "string",
"pattern": "^(0|[1-9][0-9]*)$",
"description": "ID of the user who owns this favorite meme"
},
"name": {
"type": "string",
"description": "Display name of the meme"
},
"alt_text": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Alternative text description for accessibility"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tags for categorizing and searching the meme"
},
"attachment_id": {
"type": "string",
"pattern": "^(0|[1-9][0-9]*)$",
"description": "ID of the attachment storing the meme"
},
"filename": {
"type": "string",
"description": "Original filename of the meme"
},
"content_type": {
"type": "string",
"description": "MIME type of the meme file"
},
"content_hash": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Hash of the file content for deduplication"
},
"size": {
"type": "integer",
"minimum": 0,
"maximum": 9007199254740991,
"format": "int53",
"description": "File size in bytes"
},
"width": {
"anyOf": [
{
"type": "integer",
"format": "int53"
},
{
"type": "null"
}
],
"description": "Width of the image or video in pixels"
},
"height": {
"anyOf": [
{
"type": "integer",
"format": "int53"
},
{
"type": "null"
}
],
"description": "Height of the image or video in pixels"
},
"duration": {
"anyOf": [
{
"type": "number"
},
{
"type": "null"
}
],
"description": "Duration of the video in seconds"
},
"url": {
"type": "string",
"description": "CDN URL to access the meme"
},
"is_gifv": {
"type": "boolean",
"description": "Whether the meme is a video converted from GIF"
},
"gif_slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Provider-issued slug for the GIF this meme was sourced from, if any"
},
"gif_provider": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Stable name of the GIF provider that issued gif_slug, if any. Legacy records may contain older provider names."
},
"media": {
"anyOf": [
{
"type": "object",
"additionalProperties": {
"$ref": "#/components/schemas/GifMediaFormat"
}
},
{
"type": "null"
}
],
"description": "Provider-issued format-name → media descriptor map for gif-sourced memes (mirrors GifResponse.media). Null on memes uploaded as plain attachments."
},
"placeholder": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"description": "Compact thumbhash placeholder produced by the media proxy at favorite-time. Clients render it as a low-res preview while the full media loads. Null when the proxy did not emit one."
}
},
"required": [
"id",
"user_id",
"name",
"tags",
"attachment_id",
"filename",
"content_type",
"size",
"url"
]
}400
Bad Request - The request was malformed or contained invalid data
json
{
"type": "object",
"properties": {
"code": {
"$ref": "#/components/schemas/APIErrorCode"
},
"message": {
"type": "string",
"description": "Human-readable error message"
},
"errors": {
"type": "array",
"description": "Field-specific validation errors",
"items": {
"$ref": "#/components/schemas/ValidationErrorItem"
}
}
},
"required": [
"code",
"message"
]
}401
Unauthorized - Authentication is required or the token is invalid
json
{
"type": "object",
"properties": {
"code": {
"$ref": "#/components/schemas/APIErrorCode"
},
"message": {
"type": "string",
"description": "Human-readable error message"
},
"errors": {
"type": "array",
"description": "Field-specific validation errors",
"items": {
"$ref": "#/components/schemas/ValidationErrorItem"
}
}
},
"required": [
"code",
"message"
]
}403
Forbidden - You do not have permission to perform this action
json
{
"type": "object",
"properties": {
"code": {
"$ref": "#/components/schemas/APIErrorCode"
},
"message": {
"type": "string",
"description": "Human-readable error message"
},
"errors": {
"type": "array",
"description": "Field-specific validation errors",
"items": {
"$ref": "#/components/schemas/ValidationErrorItem"
}
}
},
"required": [
"code",
"message"
]
}429
Too Many Requests - You are being rate limited
json
{
"type": "object",
"properties": {
"code": {
"type": "string",
"enum": [
"RATE_LIMITED"
]
},
"message": {
"type": "string"
},
"retry_after": {
"type": "number",
"description": "Seconds to wait before retrying"
},
"global": {
"type": "boolean",
"description": "Whether this is a global rate limit"
}
},
"required": [
"code",
"message",
"retry_after"
]
}500
Internal Server Error - An unexpected error occurred
json
{
"type": "object",
"properties": {
"code": {
"$ref": "#/components/schemas/APIErrorCode"
},
"message": {
"type": "string",
"description": "Human-readable error message"
},
"errors": {
"type": "array",
"description": "Field-specific validation errors",
"items": {
"$ref": "#/components/schemas/ValidationErrorItem"
}
}
},
"required": [
"code",
"message"
]
}