{"openapi":"3.0.3","info":{"title":"Forge Containers API","description":"The Forge Containers Public API\n\n**Important:** The API base URL should be read from the `FORGE_EGRESS_PROXY_URL` environment variable.\nThe localhost URL in the servers section is for documentation purposes only.\n","version":"1.0.0","contact":{"name":"Atlassian Forge Team"}},"servers":[{"url":"{FORGE_EGRESS_PROXY_URL}","variables":{"FORGE_EGRESS_PROXY_URL":{"default":"http://localhost:7072","description":"The base URL for the Egress Proxy."}},"description":"Egress Proxy\n\n**Note:** The actual URL should be read from the `FORGE_EGRESS_PROXY_URL` environment variable.\nThe localhost URL shown here is for documentation purposes only.\n"}],"security":[{"ForgeProxyAuthorization":[]}],"tags":[{"name":"App Installations","description":"APIs for accessing installations information."},{"name":"Atlassian GraphQL","description":"Atlassian GraphQL API endpoints for accessing cross-product data and relationships.\n\n**API Documentation:** [Atlassian GraphQL API](https://developer.atlassian.com/platform/atlassian-graphql-api/graphql/)\n\nThe Atlassian GraphQL API allows you to access all sorts of Atlassian data including Jira projects, Bitbucket repositories, \nOpsgenie teams, and cross-product work activities using one common mechanism through the Atlassian GraphQL Gateway.\nUse the `/atlassian/graphql/{target}` endpoint to proxy requests to the Atlassian GraphQL API.\n"},{"name":"Confluence","description":"Confluence API endpoints for accessing Confluence Cloud platform functionality.\n\n**API Documentation:** [Confluence Cloud REST API v2](https://developer.atlassian.com/cloud/confluence/rest/)\n\nThe Confluence API provides comprehensive access to pages, spaces, users, comments, and other Confluence resources.\nUse the `/confluence/{target}` endpoint to proxy requests to the Confluence REST API.\n"},{"name":"Forge Context","description":"APIs for retrieving Forge invocation Context"},{"name":"Forge Dynamic Modules","description":"Forge Dynamic Modules API for managing dynamic modules"},{"name":"Forge Events","description":"Forge async events endpoints for submitting events to queues"},{"name":"Forge KVS","description":"Forge Key-Value Store (KVS) API endpoints for storing and retrieving data in key-value pairs.\n\nAPI Documentation: Forge REST API - KVS/Custom Entity Store\n\nThe Forge KVS API provides hosted storage capabilities that let you store data in your app installation. Use the /forge/storage/kvs/{target} endpoint to proxy requests to the Forge KVS REST API."},{"name":"Forge LLM","description":"This API is accessible only from Forge applications and requires platform-provided authentication headers. It enables Forge apps to interact with native Forge-supported LLMs.\nFor more information, see the [Forge LLMs documentation](https://go.atlassian.com/forge-llms-api-reference)"},{"name":"Forge Object Store","description":"Forge Object Store API for storing and retrieving objects"},{"name":"Forge Proxy","description":"External service proxying endpoints for forwarding requests to external services.\n\n**Important:** You can only egress to domains that are listed in the Runtime egress permissions in your Forge Manifest.\nSee [Runtime egress permissions](https://developer.atlassian.com/platform/forge/runtime-egress-permissions/#runtime-egress-permissions) for details.\n\nExternal domains must be declared in the `permissions.external.fetch.backend` section of your `manifest.yml` file.\nUse the `/proxy/{target}` endpoint to proxy requests to external services.\n"},{"name":"Forge Realtime","description":"Forge realtime service endpoints for publishing events"},{"name":"Forge SQL","description":"Forge SQL Storage REST API for containers"},{"name":"Jira","description":"Jira API endpoints for accessing Jira Cloud platform functionality.\n\n**API Documentation:** \n- [Jira Cloud Platform REST API v3](https://developer.atlassian.com/cloud/jira/platform/rest/)\n- [Jira Software Cloud REST API](https://developer.atlassian.com/cloud/jira/software/rest/intro)\n- [Jira Service Management Cloud REST API](https://developer.atlassian.com/cloud/jira/service-desk/rest/intro/)\n\nThe Jira API provides comprehensive access to issues, projects, users, workflows, and other Jira resources.\nUse the `/jira/{target}` endpoint to proxy requests to the Jira REST API.\n"}],"paths":{"/v0/installations":{"get":{"tags":["App Installations"],"summary":"Get app installations","description":"Returns all installations for the given app Id and environment.\n","responses":{"200":{"description":"Installations retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AppInstallations"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/invocation/context":{"get":{"tags":["Forge Context"],"summary":"Get invocation context","description":"Returns contextual data associated with the invocation. This API retrieves data cached in the proxy and is expected to be low latency.\n","parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Invocation context retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvocationContext"},"example":{"app":{"id":"ari:cloud:ecosystem::app/d60dfafb-a14d-4d56-bf03-0c3823d39e2b","installationId":"ari:cloud:ecosystem::installation/8d5f651a-b2e9-4b38-aac6-30abc7f3effb","environment":{"type":"DEVELOPMENT","id":"ari:cloud:ecosystem::environment/d60dfafb-a14d-4d56-bf03-0c3823d39e2b/e62535ae-72f9-49da-a8d3-c0b82cab4ca1"},"module":{"key":"container-webtrigger","type":"core:webtrigger"}},"context":{"cloudId":"4869c4ef-cb0d-4108-8243-8929ac7cc1fa","moduleKey":"container-webtrigger","userAccess":{"enabled":false}}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/proxy/{target}":{"get":{"tags":["Forge Proxy"],"summary":"Proxy GET request to external service","description":"Proxies requests to external services through the Forge Outbound Proxy (FOP).\nThe target parameter specifies the external service to proxy to.\n","parameters":[{"$ref":"#/components/parameters/TargetParameter"},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"post":{"tags":["Forge Proxy"],"summary":"Proxy POST request to external service","description":"Proxies POST requests to external services through the Forge Outbound Proxy (FOP).\nThe target parameter specifies the external service to proxy to.\n","parameters":[{"$ref":"#/components/parameters/TargetParameter"},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/GenericRequestBody"},"responses":{"200":{"description":"Request successfully proxied","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"put":{"tags":["Forge Proxy"],"summary":"Proxy PUT request to external service","description":"Proxies PUT requests to external services through the Forge Outbound Proxy (FOP).\nThe target parameter specifies the external service to proxy to.\n","parameters":[{"$ref":"#/components/parameters/TargetParameter"},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/GenericRequestBody"},"responses":{"200":{"description":"Request successfully proxied","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"patch":{"tags":["Forge Proxy"],"summary":"Proxy PATCH request to external service","description":"Proxies PATCH requests to external services through the Forge Outbound Proxy (FOP).\nThe target parameter specifies the external service to proxy to.\n","parameters":[{"$ref":"#/components/parameters/TargetParameter"},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/GenericRequestBody"},"responses":{"200":{"description":"Request successfully proxied","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"delete":{"tags":["Forge Proxy"],"summary":"Proxy DELETE request to external service","description":"Proxies DELETE requests to external services through the Forge Outbound Proxy (FOP).\nThe target parameter specifies the external service to proxy to.\n","parameters":[{"$ref":"#/components/parameters/TargetParameter"},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"head":{"tags":["Forge Proxy"],"summary":"Proxy HEAD request to external service","description":"Proxies HEAD requests to external services through the Forge Outbound Proxy (FOP).\nReturns headers without response body, useful for checking resource existence.\n","parameters":[{"$ref":"#/components/parameters/TargetParameter"},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"options":{"tags":["Forge Proxy"],"summary":"Proxy OPTIONS request to external service","description":"Proxies OPTIONS requests to external services through the Forge Outbound Proxy (FOP).\nUsed for CORS preflight requests and method discovery.\n","parameters":[{"$ref":"#/components/parameters/TargetParameter"},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}}},"/jira/{target}":{"get":{"tags":["Jira"],"summary":"Proxy GET request to Jira API","description":"Proxies requests to the Jira Cloud Platform REST API v3.\nThe target parameter specifies the Jira API endpoint.\n\n**API Documentation:** [Jira Cloud Platform REST API v3](https://developer.atlassian.com/cloud/jira/platform/rest/)\n\n**Examples:**\n- `/jira/rest/api/3/issue/ISSUE-123` - Get issue details\n- `/jira/rest/api/3/project` - List projects\n- `/jira/rest/api/3/myself` - Get current user info\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Jira API endpoint path\n\n**Format:** `rest/api/3/{endpoint}`\n\n**Examples:**\n- `rest/api/3/issue/ISSUE-123` - Get issue details\n- `rest/api/3/project` - List projects\n- `rest/api/3/myself` - Get current user info\n- `rest/api/3/search` - Search issues using JQL\n- `rest/api/3/issue/ISSUE-123/comment` - Get issue comments\n","schema":{"type":"string","example":"rest/api/3/issue/ISSUE-123"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied to Jira API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"post":{"tags":["Jira"],"summary":"Proxy POST request to Jira API","description":"Proxies POST requests to the Jira Cloud Platform REST API v3.\nThe target parameter specifies the Jira API endpoint.\n\n**API Documentation:** [Jira Cloud Platform REST API v3](https://developer.atlassian.com/cloud/jira/platform/rest/)\n\n**Examples:**\n- `/jira/rest/api/3/issue` - Create new issue\n- `/jira/rest/api/3/issue/ISSUE-123/comment` - Add comment to issue\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Jira API endpoint path\n\n**Format:** `rest/api/3/{endpoint}`\n\n**Examples:**\n- `rest/api/3/issue` - Create new issue\n- `rest/api/3/issue/ISSUE-123/comment` - Add comment to issue\n- `rest/api/3/search` - Search issues using JQL\n- `rest/api/3/project` - Create new project\n","schema":{"type":"string","example":"rest/api/3/issue"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/GenericRequestBody"},"responses":{"200":{"description":"Request successfully proxied to Jira API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"put":{"tags":["Jira"],"summary":"Proxy PUT request to Jira API","description":"Proxies PUT requests to the Jira Cloud Platform REST API v3.\nThe target parameter specifies the Jira API endpoint.\n\n**API Documentation:** [Jira Cloud Platform REST API v3](https://developer.atlassian.com/cloud/jira/platform/rest/)\n\n**Examples:**\n- `/jira/rest/api/3/issue/ISSUE-123` - Update issue\n- `/jira/rest/api/3/project/PROJECT-123` - Update project\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Jira API endpoint path\n\n**Format:** `rest/api/3/{endpoint}`\n\n**Examples:**\n- `rest/api/3/issue/ISSUE-123` - Update issue\n- `rest/api/3/project/PROJECT-123` - Update project\n- `rest/api/3/issue/ISSUE-123/comment/123` - Update comment\n","schema":{"type":"string","example":"rest/api/3/issue/ISSUE-123"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/GenericRequestBody"},"responses":{"200":{"description":"Request successfully proxied to Jira API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"patch":{"tags":["Jira"],"summary":"Proxy PATCH request to Jira API","description":"Proxies PATCH requests to the Jira Cloud Platform REST API v3.\nThe target parameter specifies the Jira API endpoint.\n\n**API Documentation:** [Jira Cloud Platform REST API v3](https://developer.atlassian.com/cloud/jira/platform/rest/)\n\n**Examples:**\n- `/jira/rest/api/3/issue/ISSUE-123` - Partially update issue\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Jira API endpoint path\n\n**Format:** `rest/api/3/{endpoint}`\n\n**Examples:**\n- `rest/api/3/issue/ISSUE-123` - Partially update issue\n- `rest/api/3/project/PROJECT-123` - Partially update project\n","schema":{"type":"string","example":"rest/api/3/issue/ISSUE-123"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/GenericRequestBody"},"responses":{"200":{"description":"Request successfully proxied to Jira API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"delete":{"tags":["Jira"],"summary":"Proxy DELETE request to Jira API","description":"Proxies DELETE requests to the Jira Cloud Platform REST API v3.\nThe target parameter specifies the Jira API endpoint.\n\n**API Documentation:** [Jira Cloud Platform REST API v3](https://developer.atlassian.com/cloud/jira/platform/rest/)\n\n**Examples:**\n- `/jira/rest/api/3/issue/ISSUE-123` - Delete issue\n- `/jira/rest/api/3/issue/ISSUE-123/comment/123` - Delete comment\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Jira API endpoint path\n\n**Format:** `rest/api/3/{endpoint}`\n\n**Examples:**\n- `rest/api/3/issue/ISSUE-123` - Delete issue\n- `rest/api/3/issue/ISSUE-123/comment/123` - Delete comment\n- `rest/api/3/project/PROJECT-123` - Delete project\n","schema":{"type":"string","example":"rest/api/3/issue/ISSUE-123"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied to Jira API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"head":{"tags":["Jira"],"summary":"Proxy HEAD request to Jira API","description":"Proxies HEAD requests to the Jira Cloud Platform REST API v3.\nReturns headers without response body, useful for checking resource existence.\n\n**API Documentation:** [Jira Cloud Platform REST API v3](https://developer.atlassian.com/cloud/jira/platform/rest/)\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Jira API endpoint path\n\n**Format:** `rest/api/3/{endpoint}`\n\n**Examples:**\n- `rest/api/3/issue/ISSUE-123` - Check if issue exists\n- `rest/api/3/project/PROJECT-123` - Check if project exists\n","schema":{"type":"string","example":"rest/api/3/issue/ISSUE-123"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied to Jira API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"options":{"tags":["Jira"],"summary":"Proxy OPTIONS request to Jira API","description":"Proxies OPTIONS requests to the Jira Cloud Platform REST API v3.\nUsed for CORS preflight requests and method discovery.\n\n**API Documentation:** [Jira Cloud Platform REST API v3](https://developer.atlassian.com/cloud/jira/platform/rest/)\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Jira API endpoint path\n\n**Format:** `rest/api/3/{endpoint}`\n\n**Examples:**\n- `rest/api/3/issue` - Discover available methods for issues\n- `rest/api/3/project` - Discover available methods for projects\n","schema":{"type":"string","example":"rest/api/3/issue"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied to Jira API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}}},"/confluence/{target}":{"get":{"tags":["Confluence"],"summary":"Proxy GET request to Confluence API","description":"Proxies requests to the Confluence Cloud REST API v2.\nThe target parameter specifies the Confluence API endpoint.\n\n**API Documentation:** [Confluence Cloud REST API v2](https://developer.atlassian.com/cloud/confluence/rest/)\n\n**Examples:**\n- `/confluence/api/v2/pages/123` - Get page details\n- `/confluence/api/v2/spaces` - List spaces\n- `/confluence/api/v2/users/me` - Get current user info\n- `/confluence/api/v2/pages/123/comments` - Get page comments\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Confluence API endpoint path\n\n**Format:** `api/v2/{endpoint}`\n\n**Examples:**\n- `api/v2/pages/123` - Get page details\n- `api/v2/spaces` - List spaces\n- `api/v2/users/me` - Get current user info\n- `api/v2/pages/123/comments` - Get page comments\n- `api/v2/blogs/123` - Get blog post details\n","schema":{"type":"string","example":"api/v2/pages/123"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied to Confluence API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"post":{"tags":["Confluence"],"summary":"Proxy POST request to Confluence API","description":"Proxies POST requests to the Confluence Cloud REST API v2.\nThe target parameter specifies the Confluence API endpoint.\n\n**API Documentation:** [Confluence Cloud REST API v2](https://developer.atlassian.com/cloud/confluence/rest/)\n\n**Examples:**\n- `/confluence/api/v2/pages` - Create new page\n- `/confluence/api/v2/pages/123/comments` - Add comment to page\n- `/confluence/api/v2/blogs` - Create new blog post\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Confluence API endpoint path\n\n**Format:** `api/v2/{endpoint}`\n\n**Examples:**\n- `api/v2/pages` - Create new page\n- `api/v2/pages/123/comments` - Add comment to page\n- `api/v2/blogs` - Create new blog post\n- `api/v2/spaces` - Create new space\n","schema":{"type":"string","example":"api/v2/pages"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/GenericRequestBody"},"responses":{"200":{"description":"Request successfully proxied to Confluence API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"put":{"tags":["Confluence"],"summary":"Proxy PUT request to Confluence API","description":"Proxies PUT requests to the Confluence Cloud REST API v2.\nThe target parameter specifies the Confluence API endpoint.\n\n**API Documentation:** [Confluence Cloud REST API v2](https://developer.atlassian.com/cloud/confluence/rest/)\n\n**Examples:**\n- `/confluence/api/v2/pages/123` - Update page\n- `/confluence/api/v2/blogs/123` - Update blog post\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Confluence API endpoint path\n\n**Format:** `api/v2/{endpoint}`\n\n**Examples:**\n- `api/v2/pages/123` - Update page\n- `api/v2/blogs/123` - Update blog post\n- `api/v2/pages/123/comments/456` - Update comment\n","schema":{"type":"string","example":"api/v2/pages/123"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/GenericRequestBody"},"responses":{"200":{"description":"Request successfully proxied to Confluence API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"patch":{"tags":["Confluence"],"summary":"Proxy PATCH request to Confluence API","description":"Proxies PATCH requests to the Confluence Cloud REST API v2.\nThe target parameter specifies the Confluence API endpoint.\n\n**API Documentation:** [Confluence Cloud REST API v2](https://developer.atlassian.com/cloud/confluence/rest/)\n\n**Examples:**\n- `/confluence/api/v2/pages/123` - Partially update page\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Confluence API endpoint path\n\n**Format:** `api/v2/{endpoint}`\n\n**Examples:**\n- `api/v2/pages/123` - Partially update page\n- `api/v2/blogs/123` - Partially update blog post\n","schema":{"type":"string","example":"api/v2/pages/123"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/GenericRequestBody"},"responses":{"200":{"description":"Request successfully proxied to Confluence API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"delete":{"tags":["Confluence"],"summary":"Proxy DELETE request to Confluence API","description":"Proxies DELETE requests to the Confluence Cloud REST API v2.\nThe target parameter specifies the Confluence API endpoint.\n\n**API Documentation:** [Confluence Cloud REST API v2](https://developer.atlassian.com/cloud/confluence/rest/)\n\n**Examples:**\n- `/confluence/api/v2/pages/123` - Delete page\n- `/confluence/api/v2/pages/123/comments/456` - Delete comment\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Confluence API endpoint path\n\n**Format:** `api/v2/{endpoint}`\n\n**Examples:**\n- `api/v2/pages/123` - Delete page\n- `api/v2/pages/123/comments/456` - Delete comment\n- `api/v2/blogs/123` - Delete blog post\n","schema":{"type":"string","example":"api/v2/pages/123"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied to Confluence API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"head":{"tags":["Confluence"],"summary":"Proxy HEAD request to Confluence API","description":"Proxies HEAD requests to the Confluence Cloud REST API v2.\nReturns headers without response body, useful for checking resource existence.\n\n**API Documentation:** [Confluence Cloud REST API v2](https://developer.atlassian.com/cloud/confluence/rest/)\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Confluence API endpoint path\n\n**Format:** `api/v2/{endpoint}`\n\n**Examples:**\n- `api/v2/pages/123` - Check if page exists\n- `api/v2/spaces/SPACE` - Check if space exists\n","schema":{"type":"string","example":"api/v2/pages/123"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied to Confluence API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}},"options":{"tags":["Confluence"],"summary":"Proxy OPTIONS request to Confluence API","description":"Proxies OPTIONS requests to the Confluence Cloud REST API v2.\nUsed for CORS preflight requests and method discovery.\n\n**API Documentation:** [Confluence Cloud REST API v2](https://developer.atlassian.com/cloud/confluence/rest/)\n","parameters":[{"name":"target","in":"path","required":true,"description":"Target Confluence API endpoint path\n\n**Format:** `api/v2/{endpoint}`\n\n**Examples:**\n- `api/v2/pages` - Discover available methods for pages\n- `api/v2/spaces` - Discover available methods for spaces\n","schema":{"type":"string","example":"api/v2/pages"}},{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}],"responses":{"200":{"description":"Request successfully proxied to Confluence API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"500":{"description":"Internal server error"}}}},"/atlassian/graphql/":{"post":{"tags":["Atlassian GraphQL"],"summary":"Proxy POST request to Atlassian GraphQL API","description":"Proxies POST requests to the Atlassian GraphQL API.\n\n**API Documentation:** [Atlassian GraphQL API](https://developer.atlassian.com/platform/atlassian-graphql-api/graphql/)\n\n**Examples:**\n\n**Query Example:**\n```json\n{\n \"query\": \"query GetProjects { projects { id name key } }\"\n}\n```\n\n**Mutation Example:**\n```json\n{\n \"query\": \"mutation CreateIssue($input: CreateIssueInput!) { createIssue(input: $input) { issue { id key summary } } }\",\n \"variables\": {\n \"input\": {\n \"projectId\": \"10001\",\n \"summary\": \"New issue from GraphQL\",\n \"description\": \"Issue description\"\n }\n }\n}\n```\n","parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/GenericRequestBody"},"responses":{"200":{"description":"Request successfully proxied to Atlassian GraphQL API","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid target URL or operation"},"429":{"description":"Rate limit exceeded - See GraphQL API rate limiting"},"500":{"description":"Internal server error"}}}},"/atlassian/forge/events/v1/async-events":{"post":{"tags":["Forge Events"],"summary":"Publish Async Events to Forge","description":"Submit asynchronous events to the Forge events system.\nEvents are queued for processing and will be delivered to the specified queue.\n","parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"},{"$ref":"#/components/parameters/ContentTypeHeader"}],"requestBody":{"$ref":"#/components/requestBodies/AsyncEventsRequestBody"},"responses":{"200":{"description":"Events submitted successfully","content":{"application/json":{"schema":{"type":"object"}}}},"400":{"description":"Bad request - Invalid event format or queue name"},"500":{"description":"Internal server error"}}}},"/forge/storage/sql/v1/execute":{"post":{"x-experimental":true,"summary":"Execute a DML SQL statement","description":"Executes a SQL statement, and with optional params to be substituted in. This is to be used for DML (Data Manipulation) queries.\n\nDML queries are limited to SELECT, INSERT, UPDATE and DELETE statements.\n\nThis is recommended for all user facing requests, as the restrictive permissions limits the potential impact of a client being able to \nsuccessfully use a query injection attack on your app. Using params will use server side params to further mitigate against these attacks.\n\nThe DDL API is available for all other statements, and should be used sparingly, and avoid usage where client provided parameters are included.","operationId":"executeDML","tags":["Forge SQL"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryWithParamsRequestBody"},"examples":{"dmlQueryExample":{"$ref":"#/components/examples/DMLQueryWithParamsRequestBodyExample"}}}}},"responses":{"200":{"description":"Successful DML execution","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryWithParamsResponse"},"examples":{"selectQueryResponseExample":{"$ref":"#/components/examples/SelectQueryResponseExample"}}}}},"400":{"description":"Invalid request body"},"413":{"description":"Query size exceeds limit"},"500":{"description":"Internal server error"}},"parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}]}},"/forge/storage/sql/v1/execute/ddl":{"post":{"x-experimental":true,"summary":"Execute a DDL SQL statement","description":"Executes a SQL statement, and with optional params to be substituted in. This is to be used for DDL (Data Definition) queries.\n\nDDL refers to statements like CREATE, ALTER and DROP. This DDL endpoint is your schema management endpoint and is granted all * permissions to your schema.\n\nWe recommended to use this API only when modifying your schema in some way, and doesn’t include user generated params, as there is a \nchance for higher impact on failure to do so. Use the DML based endpoint for user based requests.\nThe API rate and connection limits are more restrictive than the DML endpoint.","operationId":"executeDDL","tags":["Forge SQL"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryWithParamsRequestBody"},"examples":{"ddlQueryExample":{"$ref":"#/components/examples/DDLQueryWithParamsRequestBodyExample"}}}}},"responses":{"200":{"description":"Successful DDL execution","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryWithParamsResponse"},"examples":{"ddlQueryResponseExample":{"$ref":"#/components/examples/DDLQueryResponseExample"}}}}},"400":{"description":"Invalid request body"},"413":{"description":"Query size exceeds limit"},"500":{"description":"Internal server error"}},"parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}]}},"/forge/storage/kvs/v1/get":{"post":{"tags":["Forge KVS"],"summary":"Get value by key","description":"Gets a value by key.","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRequestSchema"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetResponseSchema"}}},"description":"Successfully retrieved the value corresponding to the key."},"400":{"description":"Possible error codes:\n- ```KEY_TOO_SHORT``` - The provided key needs to be more than one character.\n- ```KEY_TOO_LONG``` - The provided key has exceeded the maximum 500 characters.\n- ```INVALID_KEY``` - The provided key does not match the regex: ```/^(?!\\s+$)[a-zA-Z0-9:._\\s-#]+$/```.\n\n See [Error handling](/platform/forge/remote/accessing-storage/#error-handling) for more information about each error code."},"404":{"description":"Possible error codes:\n- ```KEY_NOT_FOUND``` - The provided key does not exist."}},"parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}]}},"/forge/storage/kvs/v1/set":{"post":{"tags":["Forge KVS"],"description":"Stores a JSON value with a specified key. Forge resolves write conflicts using a last-write-wins strategy by default, but this can be configured via the key policy option.\nOptionally, you can specify a TTL (Time To Live) to automatically expire the data after a specified duration.","summary":"Set value by key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyValueSchema"}}}},"responses":{"200":{"description":"Successfully set the value with metadata fields returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetResponseSchema"}}}},"204":{"description":"Successfully set the value to the corresponding key"},"400":{"description":"Possible error codes:\n- ```KEY_TOO_SHORT``` - The provided key needs to be more than one character.\n- ```KEY_TOO_LONG``` - The provided key has exceeded the maximum 500 characters.\n- ```INVALID_KEY``` - The provided key does not match the regex: ```/^(?!\\s+$)[a-zA-Z0-9:._\\s-#]+$```.\n- ```MAX_SIZE``` - The provided value has exceeded the maximum size limit.\n- ```MAX_DEPTH``` - The provided value has exceeded the maximum object depth (32) limit.\n- ```INVALID_KEY_POLICY_RETURN_VALUE_COMBINATION``` - The provided key policy and return value combination is not valid.\n\nSee [Error handling](/platform/forge/remote/accessing-storage/#error-handling) for more information about each error code."},"409":{"description":"Possible error codes:\n- ```KEY_CONFLICT``` - The provided key already exists and the key policy is set to ```FAIL_IF_EXISTS```"}},"parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}]}},"/forge/storage/kvs/v1/delete":{"post":{"tags":["Forge KVS"],"description":"Deletes a value by key. Write conflicts are resolved using a last-write-wins strategy.","summary":"Delete value by key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeySchema"}}}},"responses":{"204":{"description":"Successfully deleted the key and the corresponding value"},"400":{"description":"Possible error codes:\n- ```KEY_TOO_SHORT``` - The provided key needs to be more than one character.\n- ```KEY_TOO_LONG``` - The provided key has exceeded the maximum 500 characters.\n- ```INVALID_KEY``` - The provided key does not match the regex: ```/^(?!\\s+$)[a-zA-Z0-9:._\\s-#]+$```.\n\n See [Error handling](/platform/forge/remote/accessing-storage/#error-handling) for more information about each error code."},"404":{"description":"Possible error codes:\n- ```KEY_NOT_FOUND``` - The provided key does not exist."}},"parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}]}},"/forge/storage/kvs/v1/query":{"post":{"tags":["Forge KVS"],"description":"Retrieve key-value pairs matching the provided list of criteria. This method does not return secret values set by [Set secret value](/platform/forge/rest/v1/api-group-key-value-store/#api-v1-secret-set-post).","summary":"Query key-value pairs","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueryRequestSchema"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"type":"object","$ref":"#/components/schemas/QueryResponseSchema"}}},"description":"Successfully retrieved the data from storage"},"400":{"description":"Possible error codes:\n- ```INVALID_FILTER_CONDITION``` - The specified condition is not supported for filters.\n- ```INVALID_FILTER_VALUES``` - The specified number of values is not supported by the condition.\n- ```INVALID_KEY``` - The provided key does not match the regex: ```/^(?!\\s+$)[a-zA-Z0-9:._\\s-#]+$```.\n- ```KEY_TOO_LONG``` - The provided key has exceeded the maximum 500 characters.\n- ```KEY_TOO_SHORT``` - The provided key needs to be more than one character.\n- ```LIST_QUERY_LIMIT_EXCEEDED``` - Limit for list query should be below 100.\n- ```QUERY_WHERE_FIELD_INVALID``` - The specified field is not supported for filters.\n- ```QUERY_WHERE_INVALID``` - Queries should contain only a single \"where\" clause.\n\n See [Error handling](/platform/forge/remote/accessing-storage/#error-handling) for more information about each error code."}},"parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}]}},"/forge/storage/kvs/v1/batch/set":{"post":{"tags":["Forge KVS"],"description":"Sets multiple Key-Value Store and/or Custom Entity Store values in a single operation. \nReturns a type ```BatchResponse``` which contains ```successfulKeys``` and ```failedKeys```.\nOptionally, you can specify a TTL (Time To Live) for each item to automatically expire the data after a specified duration.","summary":"Batch set key-value pairs","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchSetRequestSchema"}}}},"responses":{"200":{"description":"Successfully set the keys to their corresponding values, returns list of successful and failed keys. Failed keys will contain details of the failure error codes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchSetResponseSchema"}}}},"400":{"description":"Possible error codes:\n- ```KEY_TOO_SHORT``` - The provided key needs to be more than one character.\n- ```KEY_TOO_LONG``` - The provided key has exceeded the maximum 500 characters.\n- ```INVALID_KEY``` - The provided key does not match the regex: ```/^(?!\\s+$)[a-zA-Z0-9:._\\s-#]+$```.\n\n See [Error handling](/platform/forge/remote/accessing-storage/#error-handling) for more information about each error code."}},"parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}]}},"/forge/storage/kvs/v1/secret/get":{"post":{"tags":["Forge KVS"],"description":"Gets a value by key, which was stored using [Set secret value by key](/platform/forge/rest/v1/api-group-key-value-store/#api-v1-secret-set-post). The value is decrypted before being returned.","summary":"Get secret value by key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRequestSchema"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetResponseSchema"}}},"description":"Successfully retrieved the decrypted value corresponding to the key"},"400":{"description":"Possible error codes:\n- ```KEY_TOO_SHORT``` - The provided key needs to be more than one character.\n- ```KEY_TOO_LONG``` - The provided key has exceeded the maximum 500 characters.\n- ```INVALID_KEY``` - The provided key does not match the regex: ```/^(?!\\s+$)[a-zA-Z0-9:._\\s-#]+$/```.\n\n See [Error handling](/platform/forge/remote/accessing-storage/#error-handling) for more information about each error code."},"404":{"description":"Possible error codes:\n- ```KEY_NOT_FOUND``` - The provided key does not exist."}},"parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}]}},"/forge/storage/kvs/v1/secret/set":{"post":{"tags":["Forge KVS"],"description":"Stores sensitive credentials in JSON format, with encryption. \nValues set with this method can only be accessed with [Get secret value by key](/platform/forge/rest/v1/api-group-key-value-store/#api-v1-secret-get-post). \nWrite conflicts are resolved using a last-write-wins strategy by default, but this can be configured via the key policy option.\nOptionally, you can specify a TTL (Time To Live) to automatically expire the data after a specified duration.","summary":"Set secret value by key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeyValueSchema"}}}},"responses":{"200":{"description":"Successfully set the value with metadata fields returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetResponseSchema"}}}},"204":{"description":"Successfully set the value to the corresponding key with encryption"},"400":{"description":"Possible error codes:\n- ```KEY_TOO_SHORT``` - The provided key needs to be more than one character.\n- ```KEY_TOO_LONG``` - The provided key has exceeded the maximum 500 characters.\n- ```INVALID_KEY``` - The provided key does not match the regex: ```/^(?!\\s+$)[a-zA-Z0-9:._\\s-#]+$```.\n- ```MAX_SIZE``` - The provided value has exceeded the maximum size limit.\n- ```INVALID_KEY_POLICY_RETURN_VALUE_COMBINATION``` - The provided key policy and return value combination is not valid. \n\n See [Error handling](/platform/forge/remote/accessing-storage/#error-handling) for more information about each error code."},"409":{"description":"Possible error codes:\n- ```KEY_CONFLICT``` - The provided key already exists and the key policy is set to ```FAIL_IF_EXISTS```"}},"parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}]}},"/forge/storage/kvs/v1/secret/delete":{"post":{"tags":["Forge KVS"],"description":"Deletes a secret value by key.","summary":"Delete secret value by key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/KeySchema"}}}},"responses":{"204":{"description":"Successfully deleted the key and the corresponding encrypted value"},"400":{"description":"Possible error codes:\n- ```KEY_TOO_SHORT``` - The provided key needs to be more than one character.\n- ```KEY_TOO_LONG``` - The provided key has exceeded the maximum 500 characters.\n- ```INVALID_KEY``` - The provided key does not match the regex: ```/^(?!\\s+$)[a-zA-Z0-9:._\\s-#]+$```.\n\n See [Error handling](/platform/forge/remote/accessing-storage/#error-handling) for more information about each error code."},"404":{"description":"Possible error codes:\n- ```KEY_NOT_FOUND``` - The provided key does not exist."}},"parameters":[{"$ref":"#/components/parameters/ForgeProxyAuthorizationHeader"}]}},"/forge/storage/kvs/v1/entity/get":{"post":{"tags":["Forge KVS"],"description":"Gets a custom entity value by key.","summary":"Get custom entity value by key","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityGetRequestSchema"}}}},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntityGetResponseSchema"}}},"description":"Successfully retrieved the value corresponding to the key and the entity"},"400":{"description":"Possible error codes:\n- ```EMPTY_KEY``` - Key cannot be empty.\n- ```ENTITY_TYPE_TOO_SHORT``` - The provided key needs to be more than 3 characters.\n- ```ENTITY_TYPE_TOO_LARGE``` - The provided key has exceeded the maximum 60 characters.\n- ```INVALID_ENTITY_TYPE``` - The provided key does not match the regex: ```/^(?![\\.\\-])(?!.*\\.{2})[a-z0-9:\\-.]*(?` - Specifies whether to call the API using either the app or its user as context\n- `accountId=` - For user impersonation (only supported when as=user)\n\n**Examples:**\n- `Forge as=app,id=invocation-123` - Use app context with invocation ID\n- `Forge as=user,id=invocation-123` - Use user context with invocation ID \n- `Forge as=user,accountId=user-123,id=invocation-123` - User impersonation\n","schema":{"type":"string","example":"Forge as=app,id=invocation-123"}},"ContentTypeHeader1":{"name":"Content-Type","in":"header","description":"Content type of the request body","schema":{"type":"string","example":"application/json"}}},"requestBodies":{"GenericRequestBody":{"description":"Generic request body","content":{"application/json":{"schema":{"type":"object"}}}},"AsyncEventsRequestBody":{"description":"Async events data to be submitted","content":{"application/json":{"schema":{"type":"object","required":["queueName","events"],"properties":{"queueName":{"type":"string","description":"The name of the queue to submit events to","example":"my-app-events"},"events":{"type":"array","description":"Array of events to be submitted","items":{"$ref":"#/components/schemas/AsyncEvent"},"example":[{"body":{"payload":{"key":"value","userId":"123","action":"user_login"}}}]}}}}}}},"securitySchemes":{"ForgeProxyAuthorization":{"type":"apiKey","in":"header","name":"forge-proxy-authorization","description":"Forge Proxy Authorization header for egress authentication"}},"examples":{"DMLQueryWithParamsRequestBodyExample":{"summary":"Example DML Query with Parameters","value":{"query":"SELECT name, age FROM users WHERE name = ? AND age = ?","params":["Alice",30]}},"DDLQueryWithParamsRequestBodyExample":{"summary":"Example DDL Query","value":{"query":"CREATE TABLE IF NOT EXISTS users (id INT PRIMARY KEY, name TEXT NOT NULL, age INT NOT NULL);","params":[]}},"SelectQueryResponseExample":{"summary":"Example Response for SELECT Query","value":{"rows":[{"name":"Alice","age":30}],"metadata":{"dbExecutionTime":5,"responseSize":12,"fields":[{"catalog":"def","name":"name","schema":"public","characterSet":33,"decimals":0,"table":"users","orgTable":"users","orgName":"name","flags":0,"columnType":1,"columnLength":255},{"catalog":"def","name":"age","schema":"public","characterSet":33,"decimals":0,"table":"users","orgTable":"users","orgName":"age","flags":0,"columnType":3,"columnLength":11}]}}},"DDLQueryResponseExample":{"summary":"Example Response for DDL Query","value":{"rows":{"fieldCount":0,"affectedRows":1,"insertId":0,"info":"","serverStatus":2,"warningCount":0},"metadata":{"dbExecutionTime":10.5,"responseSize":1234,"fields":[]}}},"PublishRealtimeMessageExample":{"value":{"name":"forge-container-realtime-channel","payload":"Realtime message sent from the container service, id=1","options":{"token":"example-token"}}},"PublishGlobalRealtimeMessageExample":{"value":{"name":"forge-container-realtime-channel","payload":"Realtime message sent from the container service, id=1"}},"SignRealtimeTokenExample":{"value":{"channelName":"forge-container-realtime-channel","claims":{"allowedUsers":["user1","user2"]}}}},"responses":{"Unauthorized":{"description":"Authentication required","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"Forbidden":{"description":"User does not have permissions to perform this action","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"NotFound":{"description":"Resource not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"TooManyRequests":{"description":"Too many requests","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"InternalServerError":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}},"x-atlassian-narrative":{"documents":[{"title":"Forge Containers REST API (EAP)","anchor":"about","body":"This is a comprehensive reference for all Atlassian and Forge resources that you can access through their respective REST APIs. At present, these REST APIs can only be called by Forge Containers, which is currently only available under Forge's Early Access Program (EAP)."},{"title":"API contract","anchor":"apicontract","body":"To make outbound requests from your containerised service, you'll need to send requests through an _egress sidecar_. You can retrieve this sidecar's URL from the `FORGE_EGRESS_PROXY_URL` environment variable. \n[Learn more about sending API requests](/platform/forge/containers-reference/ref-api/#outbound-requests)"},{"title":"Early Access Program","anchor":"eap","body":"Like Forge Containers, the REST APIs endpoints provided in this references are currently also available under EAP. As such, they are only available for testing and feedback purposes. They are not supported for use in production or customer environments. \n[Learn more about Forge EAP](/platform/forge/whats-coming/#forge-early-access-program--eap-)"}]}}