{"Status":true,"Message":"","Response":{"post":{"postuid":"9eafeaf8-26a8-4805-9fda-58e5791da50d","tenantuid":"d8b744fc-2e70-4089-bb80-dd1d08f6c7b2","projectuid":"fc6490ac-7527-4f49-b06e-46f701280e85","title":"API Keys and the REST API","slug":"article/api-keys-and-the-rest-api","html":"\u003Cp\u003EAPI keys let your own scripts and applications read and manage a project\u0027s content through the HelpGuides REST API. You create keys per project, and each key has only the permissions you give it.\u003C/p\u003E\u003Ch2 id=\u0022creating_an_api_key\u0022\u003ECreating an API key\u003C/h2\u003E\u003Col\u003E\u003Cli\u003EOpen your project, click \u003Cb\u003ESettings\u003C/b\u003E, then open the \u003Cb\u003EAPI Keys\u003C/b\u003E tab.\u003C/li\u003E\u003Cli\u003EClick \u003Cb\u003ECreate API Key\u003C/b\u003E.\u003C/li\u003E\u003Cli\u003EEnter a \u003Cb\u003EName\u003C/b\u003E that says what the key is for, for example \u003Ci\u003EProduction integration\u003C/i\u003E. Names can be up to 60 characters.\u003C/li\u003E\u003Cli\u003EUnder \u003Cb\u003EPermissions\u003C/b\u003E, choose what the key may do. You must choose at least one.\u003C/li\u003E\u003Cli\u003EClick \u003Cb\u003ECreate Key\u003C/b\u003E.\u003C/li\u003E\u003Cli\u003EClick \u003Cb\u003ECopy\u003C/b\u003E and store the key somewhere safe, such as your secrets manager.\u003C/li\u003E\u003C/ol\u003E\u003Cfigure\u003E\u003Cimg class=\u0022lazy-load\u0022 data-src=\u0022https://graffiti-auf7e6dwhxhcbwek.z03.azurefd.net/d8b744fc-2e70-4089-bb80-dd1d08f6c7b2/fc6490ac-7527-4f49-b06e-46f701280e85/images/a68a371ae40443bc8fb536be729b451f.png?v=-312015173\u0022 data-width=\u00221150\u0022 data-height=\u0022760\u0022 style=\u0022max-width: 100%;\u0022 alt=\u0022Create API key form with a name and permission checkboxes\u0022/\u003E\u003Cfigcaption\u003ECreating an API key\u003C/figcaption\u003E\u003C/figure\u003E\u003Ch3 id=\u0022permissions\u0022\u003EPermissions\u003C/h3\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EPermission\u003C/th\u003E\u003Cth\u003EAllows\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Epost:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EReading articles, categories, revisions and article metrics. Selected by default.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Epost:write\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ECreating, updating and deleting categories and articles.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eproject:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EReading project settings, and searching the project.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003E\u003Ccode\u003Eproject:write\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EChanging project settings and managing the project\u0027s API keys.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Cp\u003EGive each key only the permissions it needs. A key that only reads content should have \u003Ccode\u003Epost:read\u003C/code\u003E, plus \u003Ccode\u003Eproject:read\u003C/code\u003E if it also searches.\u003C/p\u003E\u003Ch2 id=\u0022managing_keys\u0022\u003EManaging keys\u003C/h2\u003E\u003Cp\u003EThe table on the \u003Cb\u003EAPI Keys\u003C/b\u003E tab lists the project\u0027s keys with their \u003Cb\u003EName\u003C/b\u003E, the last four characters of the \u003Cb\u003EKey\u003C/b\u003E, their \u003Cb\u003EPermissions\u003C/b\u003E and when they were \u003Cb\u003ECreated\u003C/b\u003E. Each row has three actions:\u003C/p\u003E\u003Cul\u003E\u003Cli\u003E\u003Cb\u003ECopy\u003C/b\u003E copies the full key to your clipboard.\u003C/li\u003E\u003Cli\u003E\u003Cb\u003ERename\u003C/b\u003E changes the key\u0027s name. Its permissions stay the same.\u003C/li\u003E\u003Cli\u003E\u003Cb\u003ERevoke\u003C/b\u003E deletes the key after you confirm. Any integration using it stops working immediately, and this can\u0027t be undone.\u003C/li\u003E\u003C/ul\u003E\u003Cp\u003EYou can\u0027t change a key\u0027s permissions. To change them, create a new key, switch your integration to it, then revoke the old one.\u003C/p\u003E\u003Ccite class=\u0022warning\u0022\u003E\u003Cspan class=\u0022title\u0022\u003ETreat keys like passwords\u003C/span\u003E\u003Cp\u003EAnyone with a key can do everything its permissions allow. Don\u0027t put keys in client-side code, public repositories or screenshots. If a key may have been exposed, revoke it and create a new one.\u003C/p\u003E\u003C/cite\u003E\u003Ch2 id=\u0022using_the_rest_api\u0022\u003EUsing the REST API\u003C/h2\u003E\u003Cp\u003ESend the key as a Bearer token in the \u003Ccode\u003EAuthorization\u003C/code\u003E header of each request. Requests go to \u003Ccode\u003Ehttps://helpguides.io/api/v1/\u003C/code\u003E.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022bash\u0022\u003Ecurl -H \u0026quot;Authorization: Bearer YOUR_API_KEY\u0026quot; \\\n  \u0026quot;https://helpguides.io/api/v1/project/YOUR_PROJECT_ID/search?s=reset%20password\u0026quot;\u003C/div\u003E\u003C/div\u003E\u003Cp\u003EYour project ID is the value after \u003Ccode\u003E/project/\u003C/code\u003E in the address bar when you\u0027re working in the project, for example \u003Ccode\u003Ehttps://helpguides.io/project/\u003Cb\u003EYOUR_PROJECT_ID\u003C/b\u003E/settings\u003C/code\u003E.\u003C/p\u003E\u003Ch3 id=\u0022responses\u0022\u003EResponses\u003C/h3\u003E\u003Cp\u003EEvery endpoint returns JSON in the same wrapper. \u003Ccode\u003EStatus\u003C/code\u003E is \u003Ccode\u003Etrue\u003C/code\u003E when the request succeeded, and the data is in \u003Ccode\u003EResponse\u003C/code\u003E under a name that depends on the endpoint.\u003C/p\u003E\u003Cdiv class=\u0022code_wrapper\u0022\u003E\u003Cdiv class=\u0022code\u0022 data-language=\u0022json\u0022\u003E{\n  \u0026quot;Status\u0026quot;: true,\n  \u0026quot;Message\u0026quot;: \u0026quot;\u0026quot;,\n  \u0026quot;Response\u0026quot;: {\n    \u0026quot;post\u0026quot;: { \u0026quot;postuid\u0026quot;: \u0026quot;...\u0026quot;, \u0026quot;title\u0026quot;: \u0026quot;...\u0026quot;, \u0026quot;slug\u0026quot;: \u0026quot;...\u0026quot; }\n  }\n}\u003C/div\u003E\u003C/div\u003E\u003Ch3 id=\u0022endpoints\u0022\u003EEndpoints\u003C/h3\u003E\u003Cp\u003EIn the paths below, replace \u003Ccode\u003E{projectuid}\u003C/code\u003E, \u003Ccode\u003E{postuid}\u003C/code\u003E and \u003Ccode\u003E{categoryuid}\u003C/code\u003E with real IDs.\u003C/p\u003E\u003Ctable border=\u00221\u0022 style=\u0022border-collapse: collapse; width: 100%;\u0022\u003E\u003Cthead\u003E\u003Ctr\u003E\u003Cth\u003EMethod\u003C/th\u003E\u003Cth\u003EPath\u003C/th\u003E\u003Cth\u003EPermission\u003C/th\u003E\u003Cth\u003EDescription\u003C/th\u003E\u003C/tr\u003E\u003C/thead\u003E\u003Ctr\u003E\u003Ctd\u003EGET\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/project/{projectuid}\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Eproject:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EGet the project\u0027s settings.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EGET\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/project/{projectuid}/search?s={query}\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Eproject:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ESearch the project and return the top 10 results. Add \u003Ccode\u003E\u0026amp;article_only=true\u003C/code\u003E to return articles only.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EGET\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/{projectuid}/categories/\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EList the project\u0027s categories.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EGET\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/category/{categoryuid}\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EGet a category.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EGET\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/{projectuid}/category/{categoryuid}/posts\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EList the posts in a category with their ID, title, slug, status and dates.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EPOST\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/{projectuid}/category\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:write\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003ECreate a category. Returns its \u003Ccode\u003Euid\u003C/code\u003E.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EPATCH\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/{projectuid}/category/{categoryuid}\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:write\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EUpdate a category.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EDELETE\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/{projectuid}/category/{categoryuid}\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:write\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EDelete a category.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EGET\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/post/{postuid}\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EGet a post. Add \u003Ccode\u003E?include_html=true\u003C/code\u003E for its HTML and \u003Ccode\u003E\u0026amp;include_blocks=true\u003C/code\u003E for its editor blocks.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EGET\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/post/{postuid}/categories\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EList the categories a post is in.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EGET\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/{projectuid}/post/{postuid}/revisions\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EList a post\u0027s saved revisions.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EDELETE\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/{projectuid}/post/{postuid}\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:write\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EDelete a post.\u003C/td\u003E\u003C/tr\u003E\u003Ctr\u003E\u003Ctd\u003EGET\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003E/api/v1/{projectuid}/metrics/project\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003E\u003Ccode\u003Epost:read\u003C/code\u003E\u003C/td\u003E\u003Ctd\u003EGet summary metrics for the project\u0027s articles.\u003C/td\u003E\u003C/tr\u003E\u003C/table\u003E\u003Cp\u003ETo publish documentation for your own REST API in HelpGuides, see \u003Ca href=\u0022/article/api-documentation-guide-1\u0022\u003EAPI Documentation Guide\u003C/a\u003E and \u003Ca href=\u0022/article/exposing-your-help-api-with-openapijson\u0022\u003EExposing Your APIs with openapi.json\u003C/a\u003E.\u003C/p\u003E\u003Ch2 id=\u0022api_keys_and_the_mcp_server\u0022\u003EAPI keys and the MCP server\u003C/h2\u003E\u003Cp\u003EThe MCP server doesn\u0027t use API keys. AI assistants such as Claude and ChatGPT connect to it by signing in to HelpGuides through OAuth, and can then search, read, create and update articles with the tools listed in \u003Ca href=\u0022/model-context-protocol-endpoints\u0022\u003EModel Context Protocol Endpoints\u003C/a\u003E. To connect one, see \u003Ca href=\u0022/article/adding-helpguides-to-claude-as-an-mcp-connector\u0022\u003EAdd Claude as an MCP Connector\u003C/a\u003E and \u003Ca href=\u0022/article/model-context-protocol\u0022\u003EModel Context Protocol\u003C/a\u003E.\u003C/p\u003E","publish_status":0,"post_type":"Article","authoruid":"3dde8c16-763a-4a2b-ae0b-1d8c50c62e3d","author":{"authoruid":"3dde8c16-763a-4a2b-ae0b-1d8c50c62e3d"},"featured_image_updating":false,"meta_description":"API keys let your apps read and manage HelpGuides projects with customizable permissions via the REST API for secure and flexible integration.","display_toc":true,"has_workingcopy":false,"allow_indexing":true,"total_views":0,"date_published":"2026-10-04T21:50:33.703","date_updated":"2026-10-04T21:50:34.513","date_created":"2026-09-28T16:19:29.573"}}}