MESSAGING · MESSAGING
Posts, drafts, and publications, written as the author who connected.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
hashnode_mutation_confirm_image_uploadWRITEConfirm an image uploaded via the presigned PUT from Create Image Upload URL: verifies the object's size and DELETES it if over 8 MB (ok=false, cdnUrl null -- re-upload smaller). Always call this after the PUT; the cap is not enforced at upload time. Auth-only, not Pro-gated. via GraphQL mutation confirmImageUpload
hashnode_mutation_create_draftWRITECreate a draft in a publication without publishing (title, contentMarkdown, tags, series, SEO metaTags, cover image options; contributors' entry point). PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL mutation createDraft
hashnode_mutation_create_image_upload_u_r_lWRITEMint a presigned upload target for an image (contentType must start with image/, no SVG, max 8 MB). Returns presignedPut {url, cdnUrl, key}: PUT the raw bytes to url, then call Confirm Image Upload with key; cdnUrl is the final servable address. Auth-only, not Pro-gated. via GraphQL mutation createImageUploadURL
hashnode_mutation_delete_draftWRITESoft-delete a draft (sets it inactive). The draft's author can delete their own; owners/admins/authors can delete any draft in the publication. PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL mutation deleteDraft
hashnode_mutation_publish_draftWRITEPublish an existing draft as a post; the draft is soft-deleted by the provider once the post exists. PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL mutation publishDraft
hashnode_mutation_publish_postWRITEPublish a new post directly to a publication (title + contentMarkdown required; tags max 15, coAuthors max 4, optional slug/SEO/series/backdating). PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL mutation publishPost
hashnode_mutation_reject_draft_submissionWRITEReject a draft previously submitted for review, returning it to its author. Publication owners, admins and authors only. PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL mutation rejectDraftSubmission
hashnode_mutation_remove_postWRITESoft-delete a post: sets it inactive, drops it from feeds and listings, frees its slug. Role-restricted at the provider: the post's author or a publication admin only (co-authors get FORBIDDEN). Idempotent-safe: a second removal answers NOT_FOUND. PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL mutation removePost
hashnode_mutation_submit_draft_for_reviewWRITESubmit a draft to a team publication's editor review queue -- the contributor path (contributors cannot publish directly). PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL mutation submitDraftForReview
hashnode_mutation_update_draftWRITEUpdate an existing draft by draftId; all content fields optional. PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL mutation updateDraft
hashnode_mutation_update_postWRITEUpdate an existing post by id; all content fields optional (mirrors Publish Post). PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL mutation updatePost
hashnode_query_check_custom_domain_availabilityREADWhether a custom domain is available for blog setup; returns {available, message}. Public read. via GraphQL query checkCustomDomainAvailability
hashnode_query_check_subdomain_availabilityREADWhether a hashnode.dev subdomain is available; returns {available, message}. Public read. via GraphQL query checkSubdomainAvailability
hashnode_query_documentation_projectREADA docs project by id or host, with its guides connection (cursor-paginated). Public read. via GraphQL query documentationProject
hashnode_query_draftREADA single draft by id. Requires authorization for the draft; an inaccessible draft answers NOT_FOUND by design (privacy), never FORBIDDEN -- do not retry expecting auth to fix it. PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL query draft
hashnode_query_feedREADThe global post feed, cursor-paginated (first/after; filter by tags/publications and exclusions). Public read. via GraphQL query feed
hashnode_query_meREADThe token's own account (id, username, email) plus its first 10 publications -- where publicationId for the write tools comes from. Requires the PAT. via GraphQL query me
hashnode_query_postREADA single post by id: content (markdown), author, tags, series, SEO and engagement counts. Public read. via GraphQL query post
hashnode_query_publicationREADA publication by id or host: metadata, SEO, AEO settings and a page of its posts (postsFirst/postsAfter). PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL query publication
hashnode_query_scheduled_postREADA scheduled post by id, including its underlying draft. Requires owning the scheduled post. PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL query scheduledPost
hashnode_query_search_posts_of_publicationREADFull-text/filtered search scoped to one publication (filter.publicationId required; author/tag/time filters, sortBy DATE_PUBLISHED_ASC|DESC). PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL query searchPostsOfPublication
hashnode_query_tagREADA tag by SLUG (always reference tags by slug) with follower and post counts and a page of its posts. Public read. via GraphQL query tag
hashnode_query_top_commentersREADTop commenters for a publication (publicationId required). PRO-GATED at the provider: answers FORBIDDEN unless the target publication has an active (paid) Pro plan -- a provider limit, not a credential problem. via GraphQL query topCommenters
hashnode_query_userREADA public profile by username: bio, social links, badges, follower counts and first publications. Public read. via GraphQL query user
Put Hashnode behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.