Confluence Cloud REST API v2

The recommended Confluence Cloud REST surface. 218 cursor-paginated operations under /wiki/api/v2 covering pages, blog posts, spaces, attachments, comments, labels, versions, tasks, custom content, databases, folders, whiteboards, smart links, space roles and permissions, classification levels and content properties.

Operations 218

GET /admin-key Get Admin Key #
POST /admin-key Enable Admin Key #
DELETE /admin-key Disable Admin Key #
GET /attachments Get attachments #
GET /attachments/{id} Get attachment by id #
DELETE /attachments/{id} Delete attachment #
GET /attachments/{id}/labels Get labels for attachment #
GET /attachments/{id}/operations Get permitted operations for attachment #
GET /attachments/{attachment-id}/properties Get content properties for attachment #
POST /attachments/{attachment-id}/properties Create content property for attachment #
GET /attachments/{attachment-id}/properties/{property-id} Get content property for attachment by id #
PUT /attachments/{attachment-id}/properties/{property-id} Update content property for attachment by id #
DELETE /attachments/{attachment-id}/properties/{property-id} Delete content property for attachment by id #
GET /attachments/{id}/versions Get attachment versions #
GET /attachments/{attachment-id}/versions/{version-number} Get version details for attachment version #
GET /attachments/{id}/footer-comments Get attachment comments #
GET /blogposts Get blog posts #
POST /blogposts Create blog post #
GET /blogposts/{id} Get blog post by id #
PUT /blogposts/{id} Update blog post #
DELETE /blogposts/{id} Delete blog post #
GET /blogposts/{id}/attachments Get attachments for blog post #
GET /blogposts/{id}/custom-content Get custom content by type in blog post #
GET /blogposts/{id}/labels Get labels for blog post #
GET /blogposts/{id}/likes/count Get like count for blog post #
GET /blogposts/{id}/likes/users Get account IDs of likes for blog post #
GET /blogposts/{blogpost-id}/properties Get content properties for blog post #
POST /blogposts/{blogpost-id}/properties Create content property for blog post #
GET /blogposts/{blogpost-id}/properties/{property-id} Get content property for blog post by id #
PUT /blogposts/{blogpost-id}/properties/{property-id} Update content property for blog post by id #
DELETE /blogposts/{blogpost-id}/properties/{property-id} Delete content property for blogpost by id #
GET /blogposts/{id}/operations Get permitted operations for blog post #
GET /blogposts/{id}/versions Get blog post versions #
GET /blogposts/{blogpost-id}/versions/{version-number} Get version details for blog post version #
POST /content/convert-ids-to-types Convert content ids to content types #
GET /custom-content Get custom content by type #
POST /custom-content Create custom content #
GET /custom-content/{id} Get custom content by id #
PUT /custom-content/{id} Update custom content #
DELETE /custom-content/{id} Delete custom content #
GET /custom-content/{id}/attachments Get attachments for custom content #
GET /custom-content/{id}/footer-comments Get custom content comments #
GET /custom-content/{id}/labels Get labels for custom content #
GET /custom-content/{id}/operations Get permitted operations for custom content #
GET /custom-content/{custom-content-id}/properties Get content properties for custom content #
POST /custom-content/{custom-content-id}/properties Create content property for custom content #
GET /custom-content/{custom-content-id}/properties/{property-id} Get content property for custom content by id #
PUT /custom-content/{custom-content-id}/properties/{property-id} Update content property for custom content by id #
DELETE /custom-content/{custom-content-id}/properties/{property-id} Delete content property for custom content by id #
GET /labels Get labels #
GET /labels/{id}/attachments Get attachments for label #
GET /labels/{id}/blogposts Get blog posts for label #
GET /labels/{id}/pages Get pages for label #
GET /pages Get pages #
POST /pages Create page #
GET /pages/{id} Get page by id #
PUT /pages/{id} Update page #
DELETE /pages/{id} Delete page #
GET /pages/{id}/attachments Get attachments for page #
GET /pages/{id}/custom-content Get custom content by type in page #
GET /pages/{id}/labels Get labels for page #
GET /pages/{id}/likes/count Get like count for page #
GET /pages/{id}/likes/users Get account IDs of likes for page #
GET /pages/{id}/operations Get permitted operations for page #
GET /pages/{page-id}/properties Get content properties for page #
POST /pages/{page-id}/properties Create content property for page #
GET /pages/{page-id}/properties/{property-id} Get content property for page by id #
PUT /pages/{page-id}/properties/{property-id} Update content property for page by id #
DELETE /pages/{page-id}/properties/{property-id} Delete content property for page by id #
POST /pages/{id}/redact Redact Content in a Confluence Page #
POST /blogposts/{id}/redact Redact Content in a Confluence Blog Post #
PUT /pages/{id}/title Update page title #
GET /pages/{id}/versions Get page versions #
POST /whiteboards Create whiteboard #
GET /whiteboards/{id} Get whiteboard by id #
DELETE /whiteboards/{id} Delete whiteboard #
GET /whiteboards/{id}/properties Get content properties for whiteboard #
POST /whiteboards/{id}/properties Create content property for whiteboard #
GET /whiteboards/{whiteboard-id}/properties/{property-id} Get content property for whiteboard by id #
PUT /whiteboards/{whiteboard-id}/properties/{property-id} Update content property for whiteboard by id #
DELETE /whiteboards/{whiteboard-id}/properties/{property-id} Delete content property for whiteboard by id #
GET /whiteboards/{id}/operations Get permitted operations for a whiteboard #
GET /whiteboards/{id}/direct-children Get direct children of a whiteboard #
GET /whiteboards/{id}/descendants Get descendants of a whiteboard #
GET /whiteboards/{id}/ancestors Get all ancestors of whiteboard #
POST /databases Create database #
GET /databases/{id} Get database by id #
DELETE /databases/{id} Delete database #
GET /databases/{id}/properties Get content properties for database #
POST /databases/{id}/properties Create content property for database #
GET /databases/{database-id}/properties/{property-id} Get content property for database by id #
PUT /databases/{database-id}/properties/{property-id} Update content property for database by id #
DELETE /databases/{database-id}/properties/{property-id} Delete content property for database by id #
GET /databases/{id}/operations Get permitted operations for a database #
GET /databases/{id}/direct-children Get direct children of a database #
GET /databases/{id}/descendants Get descendants of a database #
GET /databases/{id}/ancestors Get all ancestors of database #
GET /embeds/{id} Get Smart Link in the content tree by id #
GET /embeds/{id}/properties Get content properties for Smart Link in the content tree #
POST /embeds/{id}/properties Create content property for Smart Link in the content tree #
GET /embeds/{embed-id}/properties/{property-id} Get content property for Smart Link in the content tree by id #
PUT /embeds/{embed-id}/properties/{property-id} Update content property for Smart Link in the content tree by id #
DELETE /embeds/{embed-id}/properties/{property-id} Delete content property for Smart Link in the content tree by id #
GET /embeds/{id}/operations Get permitted operations for a Smart Link in the content tree #
GET /embeds/{id}/direct-children Get direct children of a Smart Link #
GET /embeds/{id}/descendants Get descendants of a smart link #
GET /embeds/{id}/ancestors Get all ancestors of Smart Link in content tree #
POST /folders Create folder #
GET /folders/{id} Get folder by id #
DELETE /folders/{id} Delete folder #
GET /folders/{id}/properties Get content properties for folder #
POST /folders/{id}/properties Create content property for folder #
GET /folders/{folder-id}/properties/{property-id} Get content property for folder by id #
PUT /folders/{folder-id}/properties/{property-id} Update content property for folder by id #
DELETE /folders/{folder-id}/properties/{property-id} Delete content property for folder by id #
GET /folders/{id}/operations Get permitted operations for a folder #
GET /folders/{id}/direct-children Get direct children of a folder #
GET /folders/{id}/descendants Get descendants of folder #
GET /folders/{id}/ancestors Get all ancestors of folder #
GET /pages/{page-id}/versions/{version-number} Get version details for page version #
GET /custom-content/{custom-content-id}/versions Get custom content versions #
GET /custom-content/{custom-content-id}/versions/{version-number} Get version details for custom content version #
GET /spaces Get spaces #
POST /spaces Create space #
GET /spaces/{id} Get space by id #
GET /spaces/{id}/blogposts Get blog posts in space #
GET /spaces/{id}/labels Get labels for space #
GET /spaces/{id}/content/labels Get labels for space content #
GET /spaces/{id}/custom-content Get custom content by type in space #
GET /spaces/{id}/operations Get permitted operations for space #
GET /spaces/{id}/pages Get pages in space #
GET /spaces/{space-id}/properties Get space properties in space #
POST /spaces/{space-id}/properties Create space property in space #
GET /spaces/{space-id}/properties/{property-id} Get space property by id #
PUT /spaces/{space-id}/properties/{property-id} Update space property by id #
DELETE /spaces/{space-id}/properties/{property-id} Delete space property by id #
GET /spaces/{id}/permissions Get space permissions assignments #
GET /space-permissions Get available space permissions #
GET /space-permissions/transition/combinations List unassigned space permission combinations #
POST /space-permissions/transition/combinations Generate space permission combinations #
POST /space-permissions/transition/role-assignments Bulk assign space permission roles #
POST /space-permissions/transition/access-removals Bulk remove space permission access #
GET /space-permissions/transition/tasks/{taskId} Get space permission transition task status #
GET /space-roles Get available space roles #
POST /space-roles Create a space role #
GET /space-roles/{id} Get space role by ID #
PUT /space-roles/{id} Update a space role #
DELETE /space-roles/{id} Delete a space role #
GET /space-role-mode Get space role mode #
GET /spaces/{id}/role-assignments Get space role assignments #
POST /spaces/{id}/role-assignments Set space role assignments #
GET /pages/{id}/footer-comments Get footer comments for page #
GET /pages/{id}/inline-comments Get inline comments for page #
GET /blogposts/{id}/footer-comments Get footer comments for blog post #
GET /blogposts/{id}/inline-comments Get inline comments for blog post #
GET /footer-comments Get footer comments #
POST /footer-comments Create footer comment #
GET /footer-comments/{comment-id} Get footer comment by id #
PUT /footer-comments/{comment-id} Update footer comment #
DELETE /footer-comments/{comment-id} Delete footer comment #
GET /footer-comments/{id}/children Get children footer comments #
GET /footer-comments/{id}/likes/count Get like count for footer comment #
GET /footer-comments/{id}/likes/users Get account IDs of likes for footer comment #
GET /footer-comments/{id}/operations Get permitted operations for footer comment #
GET /footer-comments/{id}/versions Get footer comment versions #
GET /footer-comments/{id}/versions/{version-number} Get version details for footer comment version #
GET /inline-comments Get inline comments #
POST /inline-comments Create inline comment #
GET /inline-comments/{comment-id} Get inline comment by id #
PUT /inline-comments/{comment-id} Update inline comment #
DELETE /inline-comments/{comment-id} Delete inline comment #
GET /inline-comments/{id}/children Get children inline comments #
GET /inline-comments/{id}/likes/count Get like count for inline comment #
GET /inline-comments/{id}/likes/users Get account IDs of likes for inline comment #
GET /inline-comments/{id}/operations Get permitted operations for inline comment #
GET /inline-comments/{id}/versions Get inline comment versions #
GET /inline-comments/{id}/versions/{version-number} Get version details for inline comment version #
GET /comments/{comment-id}/properties Get content properties for comment #
POST /comments/{comment-id}/properties Create content property for comment #
GET /comments/{comment-id}/properties/{property-id} Get content property for comment by id #
PUT /comments/{comment-id}/properties/{property-id} Update content property for comment by id #
DELETE /comments/{comment-id}/properties/{property-id} Delete content property for comment by id #
GET /tasks Get tasks #
GET /tasks/{id} Get task by id #
PUT /tasks/{id} Update task #
GET /pages/{id}/children Get child pages #
GET /custom-content/{id}/children Get child custom content #
GET /pages/{id}/direct-children Get direct children of a page #
GET /pages/{id}/ancestors Get all ancestors of page #
GET /pages/{id}/descendants Get descendants of page #
POST /users-bulk Create bulk user lookup using ids #
POST /user/access/check-access-by-email Check site access for a list of emails #
POST /user/access/invite-by-email Invite a list of emails to the site #
GET /data-policies/metadata Get data policy metadata for the workspace #
GET /data-policies/spaces Get spaces with data policies #
GET /classification-levels Get list of classification levels #
GET /spaces/{id}/classification-level/default Get space default classification level #
PUT /spaces/{id}/classification-level/default Update space default classification level #
DELETE /spaces/{id}/classification-level/default Delete space default classification level #
GET /pages/{id}/classification-level Get page classification level #
PUT /pages/{id}/classification-level Update page classification level #
POST /pages/{id}/classification-level/reset Reset page classification level #
GET /blogposts/{id}/classification-level Get blog post classification level #
PUT /blogposts/{id}/classification-level Update blog post classification level #
POST /blogposts/{id}/classification-level/reset Reset blog post classification level #
GET /whiteboards/{id}/classification-level Get whiteboard classification level #
PUT /whiteboards/{id}/classification-level Update whiteboard classification level #
POST /whiteboards/{id}/classification-level/reset Reset whiteboard classification level #
GET /databases/{id}/classification-level Get database classification level #
PUT /databases/{id}/classification-level Update database classification level #
POST /databases/{id}/classification-level/reset Reset database classification level #
GET /attachments/{id}/thumbnail/download Download attachment thumbnail by id #
GET /app/properties Get Forge app properties. #
GET /app/properties/{propertyKey} Get a Forge app property by key. #
PUT /app/properties/{propertyKey} Create or update a Forge app property. #
DELETE /app/properties/{propertyKey} Deletes a Forge app property. #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/confluence-cloud-rest-api-v2"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

atlassian-confluence-rest-v2-openapi.json Raw ↑
{"openapi":"3.0.3","info":{"title":"The Confluence Cloud REST API v2","description":"This document describes Confluence's v2 APIs. This is intended to be an iteration on the existing Confluence Cloud REST API with improvements in both endpoint definitions and performance.","termsOfService":"https://developer.atlassian.com/platform/marketplace/atlassian-developer-terms/","version":"2.0.0"},"externalDocs":{"description":"The online and complete version of the Confluence Cloud REST API docs.","url":"https://developer.atlassian.com/cloud/confluence/rest/v2"},"servers":[{"url":"https://{your-domain}/wiki/api/v2","variables":{"your-domain":{"default":"no-default","description":"Specific domain of the Confluence site being used. Must be provided."}}}],"tags":[{"name":"Admin Key","description":"The [Admin Key feature](https://support.atlassian.com/confluence-cloud/docs/bypass-access-restrictions-on-a-page-with-admin-key/) is only offered with Confluence Cloud Premium and Enterprise to organization or site admins.\n\n**NOTE:** Users can only make calls to our public REST APIs using a valid Admin Key by adding the following HTTP header on their requests: `Atl-Confluence-With-Admin-Key: true`. Visit the [Confluence Cloud Changelog](https://developer.atlassian.com/cloud/confluence/changelog/#CHANGE-2480) for more details."},{"name":"Attachment","description":""},{"name":"App Properties","description":""},{"name":"Ancestors","description":""},{"name":"Blog Post","description":""},{"name":"Children","description":""},{"name":"Classification Level","description":""},{"name":"Comment","description":""},{"name":"Content","description":""},{"name":"Content Properties","description":""},{"name":"Custom Content","description":""},{"name":"Database","description":""},{"name":"Data Policies","description":""},{"name":"Descendants","description":""},{"name":"Folder","description":""},{"name":"Label","description":""},{"name":"Like","description":""},{"name":"Operation","description":""},{"name":"Page","description":""},{"name":"Redactions","description":""},{"name":"Smart Link","description":""},{"name":"Space","description":""},{"name":"Space Permissions","description":""},{"name":"Space Permission Transition","description":""},{"name":"Space Properties","description":""},{"name":"Space Roles","description":""},{"name":"Task","description":""},{"name":"User","description":""},{"name":"Version","description":""},{"name":"Whiteboard","description":""}],"paths":{"/admin-key":{"get":{"tags":["Admin Key"],"operationId":"getAdminKey","summary":"Get Admin Key","description":"Returns information about the admin key if one is currently enabled for the calling user within the site.\n\n**[Permissions](https://support.atlassian.com/user-management/docs/give-users-admin-permissions/#Centralized-user-management-content) required**:\nUser must be an organization or site admin.","responses":{"200":{"description":"Returned if an admin key is currently enabled for the calling user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminKeyResponse"}}}},"401":{"description":"Returned if the authentication credentials are incorrect or missing from the request.","content":{}},"404":{"description":"Returned if the calling user does not currently have an admin key, if the calling user does not have permission to use admin keys, or if the site is not a Confluence Cloud Premium or Enterprise instance.","content":{}}},"x-atlassian-connect-scope":"INACCESSIBLE"},"post":{"tags":["Admin Key"],"operationId":"enableAdminKey","summary":"Enable Admin Key","description":"Enables admin key access for the calling user within the site. If an admin key already exists for the user, a new one will be issued with an updated expiration time.\n\n**Note:** The `durationInMinutes` field within the request body is optional. If the request body is empty or if the `durationInMinutes` is set to 0 minutes, a new admin key will be issued to the calling user with a default duration of 10 minutes.\n\n**[Permissions](https://support.atlassian.com/user-management/docs/give-users-admin-permissions/#Centralized-user-management-content) required**:\nUser must be an organization or site admin.","requestBody":{"$ref":"#/components/requestBodies/AdminKeyRequest"},"responses":{"200":{"description":"Returned if a new admin key is successfully issued for the calling user.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminKeyResponse"}}}},"400":{"description":"Returned if the request body contains an invalid `durationInMinutes`.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing from the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to use admin keys or if the site is not a Confluence Cloud Premium or Enterprise instance.","content":{}}},"x-atlassian-connect-scope":"INACCESSIBLE"},"delete":{"tags":["Admin Key"],"operationId":"disableAdminKey","summary":"Disable Admin Key","description":"Disables admin key access for the calling user within the site.\n\n**[Permissions](https://support.atlassian.com/user-management/docs/give-users-admin-permissions/#Centralized-user-management-content) required**:\nUser must be an organization or site admin.","responses":{"204":{"description":"Returned if admin key access was successfully disabled for the calling user or if the user did not have an admin key in the first place.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing from the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to use admin keys or if the site is not a Confluence Cloud Premium or Enterprise instance.","content":{}}},"x-atlassian-connect-scope":"INACCESSIBLE"}},"/attachments":{"get":{"tags":["Attachment"],"operationId":"getAttachments","summary":"Get attachments","description":"Returns all attachments. The number of results is limited by the `limit` parameter and additional results (if available)\nwill be available through the `next` URL present in the `Link` response header.\n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to view the container of the attachment.","parameters":[{"name":"sort","in":"query","required":false,"description":"Used to sort the result by a particular field.","schema":{"$ref":"#/components/schemas/AttachmentSortOrder"}},{"name":"cursor","in":"query","required":false,"description":"Used for pagination, this opaque cursor will be returned in the `next` URL in the `Link` response header. Use the relative URL in the `Link` header to retrieve the `next` set of results.","schema":{"type":"string"}},{"name":"status","in":"query","required":false,"description":"Filter the results to attachments based on their status. By default, `current` and `archived` are used.","schema":{"type":"array","items":{"type":"string","enum":["current","archived","trashed"]}}},{"name":"mediaType","in":"query","required":false,"description":"Filters on the mediaType of attachments. Only one may be specified.","schema":{"type":"string"}},{"name":"filename","in":"query","required":false,"description":"Filters on the file-name of attachments. Only one may be specified.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number of attachments per result to return. If more results exist, use the `Link` header to retrieve a relative URL that will return the next set of results.","schema":{"format":"int32","default":50,"minimum":1,"maximum":250,"type":"integer"}}],"responses":{"200":{"description":"Returned if the requested attachments are returned.","content":{"application/json":{"schema":{"title":"MultiEntityResult<Attachment>","type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentBulk"}},"_links":{"$ref":"#/components/schemas/MultiEntityLinks"}}}}},"headers":{"Link":{"schema":{"type":"string"},"description":"This header contains URL(s) within angle brackets and a relation description for each URL, describing how the provided URL relates to the incoming request's URL. For example, rel=\"next\" would be the URL necessary to get the next page of information.  Example response header format: `Link: </wiki/api/v2/attachments?cursor=<opaque cursor token>>; rel=\"next\", <https://site.atlassian.net/wiki>; rel=\"base\"`\n"}}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["read:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["read:attachment:confluence"]}],"x-atlassian-connect-scope":"READ","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]}},"/attachments/{id}":{"get":{"tags":["Attachment"],"operationId":"getAttachmentById","summary":"Get attachment by id","description":"Returns a specific attachment.\n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to view the attachment's container.","parameters":[{"name":"id","in":"path","required":true,"description":"The ID of the attachment to be returned. If you don't know the attachment's ID, use Get attachments for page/blogpost/custom content.","schema":{"type":"string","pattern":"(att)?[0-9]+"}},{"name":"version","in":"query","description":"Allows you to retrieve a previously published version. Specify the previous version's number to retrieve its details.","schema":{"type":"integer"}},{"name":"include-labels","in":"query","description":"Includes labels associated with this attachment in the response.\nThe number of results will be limited to 50 and sorted in the default sort order. \nA `meta` and `_links` property will be present to indicate if more results are available and a link to retrieve the rest of the results.","schema":{"type":"boolean","default":false}},{"name":"include-properties","in":"query","description":"Includes content properties associated with this attachment in the response.\nThe number of results will be limited to 50 and sorted in the default sort order. \nA `meta` and `_links` property will be present to indicate if more results are available and a link to retrieve the rest of the results.","schema":{"type":"boolean","default":false}},{"name":"include-operations","in":"query","description":"Includes operations associated with this attachment in the response, as defined in the `Operation` object.\nThe number of results will be limited to 50 and sorted in the default sort order. \nA `meta` and `_links` property will be present to indicate if more results are available and a link to retrieve the rest of the results.","schema":{"type":"boolean","default":false}},{"name":"include-versions","in":"query","description":"Includes versions associated with this attachment in the response.\nThe number of results will be limited to 50 and sorted in the default sort order. \nA `meta` and `_links` property will be present to indicate if more results are available and a link to retrieve the rest of the results.","schema":{"type":"boolean","default":false}},{"name":"include-version","in":"query","description":"Includes the current version associated with this attachment in the response.\nBy default this is included and can be omitted by setting the value to `false`.","schema":{"type":"boolean","default":true}},{"name":"include-collaborators","in":"query","description":"Includes collaborators on the attachment.","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"Returned if the requested attachment is returned.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/AttachmentSingle"},{"type":"object","properties":{"_links":{"type":"object","properties":{"base":{"type":"string","description":"Base url of the Confluence site."}}}}}]}}}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to view the\nrequested attachment or the attachment was not found.","content":{}}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["read:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["read:attachment:confluence"]}],"x-atlassian-connect-scope":"READ","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]},"delete":{"tags":["Attachment"],"operationId":"deleteAttachment","summary":"Delete attachment","description":"Delete an attachment by id.\n\nDeleting an attachment moves the attachment to the trash, where it can be restored later. To permanently delete an attachment (or \"purge\" it),\nthe endpoint must be called on a **trashed** attachment with the following param `purge=true`.\n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to view the container of the attachment.\nPermission to delete attachments in the space.\nPermission to administer the space (if attempting to purge).","parameters":[{"name":"id","in":"path","required":true,"description":"The ID of the attachment to be deleted.","schema":{"format":"int64","type":"integer"}},{"name":"purge","in":"query","required":false,"description":"If attempting to purge the attachment.","schema":{"type":"boolean","default":false}}],"responses":{"204":{"description":"Returned if the attachment was successfully deleted.","content":{}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},"404":{"description":"Returned if:\n- The provided attachment does not exist\n- The user does not have permissions to view the container of the attachment\n- The user does not have the needed permissions to delete an attachment in the space"}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["delete:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["delete:attachment:confluence"]}],"x-atlassian-connect-scope":"DELETE","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]}},"/attachments/{id}/labels":{"get":{"tags":["Label"],"operationId":"getAttachmentLabels","summary":"Get labels for attachment","description":"Returns the labels of specific attachment. The number of results is limited by the `limit` parameter and additional results (if available)\nwill be available through the `next` URL present in the `Link` response header.\n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to view the parent content of the attachment and its corresponding space.\nOnly labels that the user has permission to view will be returned.","parameters":[{"name":"id","in":"path","required":true,"description":"The ID of the attachment for which labels should be returned.","schema":{"format":"int64","type":"integer"}},{"name":"prefix","in":"query","required":false,"description":"Filter the results to labels based on their prefix.","schema":{"type":"string","enum":["my","team","global","system"]}},{"name":"sort","in":"query","required":false,"description":"Used to sort the result by a particular field.","schema":{"type":"string","items":{"$ref":"#/components/schemas/LabelSortOrder"}}},{"name":"cursor","in":"query","required":false,"description":"Used for pagination, this opaque cursor will be returned in the `next` URL in the `Link` response header. Use the relative URL in the `Link` header to retrieve the `next` set of results.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number of labels per result to return. If more results exist, use the `Link` header to retrieve a relative URL that will return the next set of results.","schema":{"format":"int32","default":25,"minimum":1,"maximum":250,"type":"integer"}}],"responses":{"200":{"description":"Returned if the requested labels are returned.","content":{"application/json":{"schema":{"title":"MultiEntityResult<Label>","type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/Label"}},"_links":{"$ref":"#/components/schemas/MultiEntityLinks"}}}}},"headers":{"Link":{"schema":{"type":"string"},"description":"This header contains URL(s) within angle brackets and a relation description for each URL, describing how the provided URL relates to the incoming request's URL. For example, rel=\"next\" would be the URL necessary to get the next page of information. Example response header format: `Link: </wiki/api/v2/attachments/<id>/labels?cursor=<opaque cursor token>>; rel=\"next\", <https://site.atlassian.net/wiki>; rel=\"base\"`\n"}}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to view the\nparent content of the requested attachment or the attachment was not found.","content":{}}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["read:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["read:attachment:confluence"]}],"x-atlassian-connect-scope":"READ","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]}},"/attachments/{id}/operations":{"get":{"tags":["Operation"],"operationId":"getAttachmentOperations","summary":"Get permitted operations for attachment","description":"Returns the permitted operations on specific attachment.\n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to view the parent content of the attachment and its corresponding space.","parameters":[{"name":"id","in":"path","required":true,"description":"The ID of the attachment for which operations should be returned.","schema":{"type":"string","pattern":"(att)?[0-9]+"}}],"responses":{"200":{"description":"Returned if the requested operations are returned.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PermittedOperationsResponse"}}}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to view the\nparent content of the requested attachment or the attachment was not found.","content":{}}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["read:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["read:attachment:confluence"]}],"x-atlassian-connect-scope":"READ","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]}},"/attachments/{attachment-id}/properties":{"get":{"tags":["Content Properties"],"operationId":"getAttachmentContentProperties","summary":"Get content properties for attachment","description":"Retrieves all Content Properties tied to a specified attachment.\n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to view the attachment.","parameters":[{"name":"attachment-id","in":"path","required":true,"description":"The ID of the attachment for which content properties should be returned.","schema":{"type":"string","pattern":"(att)?[0-9]+"}},{"name":"key","in":"query","required":false,"description":"Filters the response to return a specific content property with matching key (case sensitive).","schema":{"type":"string"}},{"name":"sort","in":"query","required":false,"description":"Used to sort the result by a particular field.","schema":{"$ref":"#/components/schemas/ContentPropertySortOrder"}},{"name":"cursor","in":"query","required":false,"description":"Used for pagination, this opaque cursor will be returned in the `next` URL in the `Link` response header. Use the relative URL in the `Link` header to retrieve the `next` set of results.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number of attachments per result to return. If more results exist, use the `Link` header to retrieve a relative URL that will return the next set of results.","schema":{"format":"int32","default":25,"minimum":1,"maximum":250,"type":"integer"}}],"responses":{"200":{"description":"Returned if the requested content properties are successfully retrieved.","content":{"application/json":{"schema":{"title":"MultiEntityResult<ContentProperty>","type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/ContentProperty"}},"_links":{"$ref":"#/components/schemas/MultiEntityLinks"}}}}},"headers":{"Link":{"schema":{"type":"string"},"description":"This header contains URL(s) within angle brackets and a relation description for each URL, describing how the provided URL relates to the incoming request's URL. For example, rel=\"next\" would be the URL necessary to get the next page of information. Example response header format: `Link: </wiki/api/v2/attachments/<attachment-id>/properties?cursor=<opaque cursor token>>; rel=\"next\", <https://site.atlassian.net/wiki>; rel=\"base\"`\n"}}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to view the\nspecified attachment or the attachment was not found.","content":{}}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["read:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["read:attachment:confluence"]}],"x-atlassian-connect-scope":"READ","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]},"post":{"tags":["Content Properties"],"operationId":"createAttachmentProperty","summary":"Create content property for attachment","description":"Creates a new content property for an attachment.\n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to update the attachment.","parameters":[{"name":"attachment-id","in":"path","required":true,"description":"The ID of the attachment to create a property for.","schema":{"type":"string","pattern":"(att)?[0-9]+"}}],"requestBody":{"description":"The content property to be created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPropertyCreateRequest"}}},"required":true},"responses":{"200":{"description":"Returned if the content property was created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentProperty"}}}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to view the\nspecified attachment or the attachment was not found.","content":{}}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["read:attachment:confluence","write:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["read:attachment:confluence","write:attachment:confluence"]}],"x-atlassian-connect-scope":"WRITE","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]}},"/attachments/{attachment-id}/properties/{property-id}":{"get":{"tags":["Content Properties"],"operationId":"getAttachmentContentPropertiesById","summary":"Get content property for attachment by id","description":"Retrieves a specific Content Property by ID that is attached to a specified attachment.\n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to view the attachment.","parameters":[{"name":"attachment-id","in":"path","required":true,"description":"The ID of the attachment for which content properties should be returned.","schema":{"pattern":"(att)?0-9+","type":"string"}},{"name":"property-id","in":"path","required":true,"description":"The ID of the content property to be returned","schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"Returned if the requested content property is successfully retrieved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentProperty"}}}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to view the\nspecified attachment,the attachment was not found, or the property was not found.","content":{}}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["read:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["read:attachment:confluence"]}],"x-atlassian-connect-scope":"READ","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]},"put":{"tags":["Content Properties"],"operationId":"updateAttachmentPropertyById","summary":"Update content property for attachment by id","description":"Update a content property for attachment by its id. \n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to edit the attachment.","parameters":[{"name":"attachment-id","in":"path","required":true,"description":"The ID of the attachment the property belongs to.","schema":{"type":"string","pattern":"(att)?[0-9]+"}},{"name":"property-id","in":"path","required":true,"description":"The ID of the property to be updated.","schema":{"format":"int64","type":"integer"}}],"requestBody":{"description":"The content property to be updated.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentPropertyUpdateRequest"}}},"required":true},"responses":{"200":{"description":"Returned if the content property was updated successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContentProperty"}}}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to view the\nspecified attachment or the attachment was not found.","content":{}}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["read:attachment:confluence","write:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["read:attachment:confluence","write:attachment:confluence"]}],"x-atlassian-connect-scope":"WRITE","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]},"delete":{"tags":["Content Properties"],"operationId":"deleteAttachmentPropertyById","summary":"Delete content property for attachment by id","description":"Deletes a content property for an attachment by its id. \n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to attachment the page.","parameters":[{"name":"attachment-id","in":"path","required":true,"description":"The ID of the attachment the property belongs to.","schema":{"type":"string","pattern":"(att)?[0-9]+"}},{"name":"property-id","in":"path","required":true,"description":"The ID of the property to be deleted.","schema":{"format":"int64","type":"integer"}}],"responses":{"204":{"description":"Returned if the content property was deleted successfully."},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to view the\nspecified attachment or the attachment was not found.","content":{}}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["read:attachment:confluence","write:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["read:attachment:confluence","write:attachment:confluence"]}],"x-atlassian-connect-scope":"WRITE","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]}},"/attachments/{id}/versions":{"get":{"tags":["Version"],"operationId":"getAttachmentVersions","summary":"Get attachment versions","description":"Returns the versions of specific attachment.\n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to view the attachment and its corresponding space.","parameters":[{"name":"id","in":"path","required":true,"description":"The ID of the attachment to be queried for its versions. If you don't know the attachment ID, use Get attachments and filter the results.","schema":{"type":"string","pattern":"(att)?[0-9]+"}},{"name":"cursor","in":"query","required":false,"description":"Used for pagination, this opaque cursor will be returned in the `next` URL in the `Link` response header. Use the relative URL in the `Link` header to retrieve the `next` set of results.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Maximum number of versions per result to return. If more results exist, use the `Link` header to retrieve a relative URL that will return the next set of results.","schema":{"format":"int32","default":25,"minimum":1,"maximum":250,"type":"integer"}},{"name":"sort","in":"query","required":false,"description":"Used to sort the result by a particular field.","schema":{"$ref":"#/components/schemas/VersionSortOrder"}}],"responses":{"200":{"description":"Returned if the requested attachment versions are returned.","content":{"application/json":{"schema":{"title":"MultiEntityResult<Version>","type":"object","properties":{"results":{"type":"array","items":{"$ref":"#/components/schemas/AttachmentVersion"}},"_links":{"$ref":"#/components/schemas/MultiEntityLinks"}}}}},"headers":{"Link":{"schema":{"type":"string"},"description":"This header contains URL(s) within angle brackets and a relation description for each URL, describing how the provided URL relates to the incoming request's URL. For example, rel=\"next\" would be the URL necessary to get the next page of information. Example response header format: `Link: </wiki/api/v2/attachments/<id>/versions?cursor=<opaque cursor token>>; rel=\"next\", <https://site.atlassian.net/wiki>; rel=\"base\"`\n"}}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},"404":{"description":"Returned if the calling user does not have permission to view the\nrequested page or the page was not found.","content":{}}},"security":[{"basicAuth":[]},{"oAuthDefinitions":["read:attachment:confluence"]}],"x-atlassian-oauth2-scopes":[{"scheme":"oAuthDefinitions","state":"Current","scopes":["read:attachment:confluence"]}],"x-atlassian-connect-scope":"READ","x-atlassian-data-security-policy":[{"app-access-rule-exempt":false}]}},"/attachments/{attachment-id}/versions/{version-number}":{"get":{"tags":["Version"],"operationId":"getAttachmentVersionDetails","summary":"Get version details for attachment version","description":"Retrieves version details for the specified attachment and version number.\n\n**[Permissions](https://confluence.atlassian.com/x/_AozKw) required**:\nPermission to view the attachment.","parameters":[{"name":"attachment-id","in":"path","required":true,"description":"The ID of the attachment for which version details should be returned.","schema":{"pattern":"(att)?0-9+","type":"string"}},{"name":"version-number","in":"path","required":true,"description":"The version number of the attachment to be returned.","schema":{"format":"int64","type":"integer"}}],"responses":{"200":{"description":"Returned if the requested version details are successfully retrieved.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedVersion"}}}},"400":{"description":"Returned if an invalid request is provided.","content":{}},"401":{"description":"Returned if the authentication credentials are incorrect or missing\nfrom the request.","content":{}},

# --- truncated at 32 KB (597 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/atlassian-confluence/refs/heads/main/openapi/atlassian-confluence-rest-v2-openapi.json