Integration details
Description
DocHub for ChatGPT helps you handle document work — from creation to sign requests — without switching tools. Use natural language to create ready-to-use PDFs and refine them. Fill form fields, prepare and send sign requests, and track progress — all in one conversation. No paid DocHub subscription is required to get started — ideal for individuals and teams looking for a simpler way to get documents done.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- PDF Editing & Conversion Tools
- Secondary Subcategories
- None listed
- Brand
- DocHub
- Access
- Account optional
- First tracked
- 2026-09-04
- Tool count
- 15
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
ChatGPT Plugin Discovery Score
ChatGPT Plugin discovery is coming soon
ChatGPT can surface a Plugin when it matches a user's request.Your Plugin Discovery Score measures how often yours appears.
No spam. Unsubscribe any time.
What discovery looks like

Competing in ChatGPT PDF Editing & Conversion Tools
View Category15 tools agents can invoke
Assign an existing form field to a document role so that role's signer fills it. Side effects: changes field ownership only; never touches the field's value. Works for any field type, including signature fields. Primary use: resolving a PREPARING sign request draft when send validation reports that a recipient "must be assigned at least one field or have annotations enabled" — assigning an unassigned (or wrongly assigned) field to the signer's role clears that blocker. Required inputs: - documentId: the draft's document id (not the template id). - formfieldId: a field id on that document. - documentRoleId: a role id on the same document. If the role does not exist or belongs to a different document, the call fails with a not-found error. Returns: {"status": "success", "formfield": { ... }} — same field shape as the form-field listing, with documentRole updated. Use when: a draft's fields are unassigned or assigned to the wrong recipient. Not for: setting field values, or creating new fields (place those in the DocHub editor).
dochub_assign_formfield
Create a DocHub sign request draft from a template document. Side effects: creates a draft only. No emails are sent to signers until the draft is finalized and sent. Required inputs: - documentId: a template document id (isTemplate=true). - documentRoles: one entry per template role, each with id and email. Role ids come from the template's roles; signer emails come from the user. Name, queue order, and signer type come from the template. Each entry accepts optional canAnnotate: true to grant the role's signer free annotation of the document (write/draw anywhere as free content — it does not make the template's fields fillable for them); omit it to keep the template's stored role configuration. Creation fails with "must be assigned at least one field or have annotations enabled" when a role has neither assigned fields nor annotations — resolvable by re-calling with canAnnotate: true for that role, or by assigning fields to the role in the template (fullUrl). Optional inputs: - title: sign request title. Default: the template document's title. - emailContent: invitation subject and/or body overrides. Any omitted field falls back to its default; omitting emailContent entirely applies both. Default subject: "ACTION NEEDED: {title}". Default body: "Please review, sign, and complete this document." {title} resolves to the effective title (custom if given, otherwise the template title); pass plain values, not pre-interpolated strings. Returns: Success: { "status": "success", "signRequestId": str, "documentUrl": str, "title": str, "emailSubject": str, "emailBody": str } documentUrl is a link to review the draft before it is sent. Use when: starting a role-based sign request from an existing template — sending a templated contract or form out for electronic signature (esign). Not for: regular imported/generated documents.
dochub_create_sign_request_draft_from_template
Create a DocHub sign request from a regular (non-template) document. Side effects: creates a sign request, usually in PREPARING/draft mode when preparingEnabled is true; it is not sent until finalized. Constraint: a regular document can have at most one sign request ever — including one already sent, in progress, or completed. The DocHub API enforces this and rejects a second attempt with a validation error. The existing request appears in the sign-request listing under the same document id. The same content can be reused by copying the document in the DocHub web app, or via a template flow. Required inputs: - documentId: a regular imported/generated document id. - signers: one or more signer email assignments; optional name and queuePosition when provided. Optional canAnnotate (no default) grants the signer free annotation — writing, drawing, or signing anywhere as free content; it does not make form fields fillable, since a field can be completed only by the signer whose role it is assigned to. A PREPARING draft may be created with signers that have neither assigned fields nor the grant — its roles are created with it, and sending stays blocked until every recipient has at least one field or annotations enabled. Immediate sends (preparingEnabled=false) require each signer to carry canAnnotate=true or match an existing role with assigned fields at creation time; older DocHub servers enforce this for drafts as well. Optional inputs: - ownerEntityId: inferred from the authenticated DocHub user when omitted. - title: sign request title. Default: the document's title. - emailContent: invitation subject and/or body overrides. Any omitted field falls back to its default; omitting emailContent entirely applies both. Default subject: "ACTION NEEDED: {title}". Default body: "Please review, sign, and complete this document." {title} resolves to the effective title (custom if given, otherwise the document title); pass plain values, not pre-interpolated strings. - preparingEnabled: defaults to true (review before sending). Returns: Success: { "status": "success", "signRequestId": str, "signRequestStatus": str, "documentUrl": str | null, "documentId": str | null, "signerIds": [str], "title": str, "emailSubject": str, "emailBody": str } DocHub validation errors (signer emails, missing fields, document state) are returned in the response. Use when: sending a regular generated/imported document for signature or esign — "send this for signature", "get this contract e-signed" — when it does not have a sign request yet. Not for: template role-based flows, or a document that already has a sign request (see Constraint).
dochub_create_sign_request_from_document
Set the value of a fillable form field (PUT /api/v2/documents/:document_id/formfields/:formfield_id). Side effects: overwrites the field's current value (idempotent for the same value). Only fields marked ``isFillable: true`` in the form-field listing can be updated: ``ftText`` and ``dhAutoDate`` (string ``value``) or ``ftCheckBox`` (boolean ``value``). Pass ``ffType`` exactly as returned for that field. Permissions: ``isFillable: true`` fields may be filled when ``documentRole`` is null (unassigned) or when ``documentRole.email`` matches the authenticated user's email. Fields assigned to a different email are rejected by the API. Role assignment is not a prerequisite for filling. Returns: {"status": "success", "formfield": { ... }} — same field shape as the form-field listing. After success, present `documentUrl` from the prior form-field listing as a clickable link. Use when: setting text, auto-date display text, or checkbox state on a fillable field — "fill out this form", "complete my part of the document". Not for: non-fillable field types (signatures, radio groups); fields assigned to a different signer.
dochub_fill_formfield
Generate a professional PDF document from a natural-language request — contract, agreement, invoice, lease, NDA, letter, receipt, or a custom type. On success the document is saved to DocHub and its URL and an inline PDF preview are returned. Response `status` is one of: - "needs_more_info": required details are missing. `fields` lists the information still needed; a retry supplies those values in `sourceFacts`, repeats the same `request`, and sets `previousRunId` to the returned `runId`. - "success": contains `documentId`, `documentUrl`, and `pdfUrl`. - "error": contains a user-ready `message` and an `errorCode`. `upgrade_required` means a free/basic-plan limit was reached; `ai_rate_limit_exceeded` means a paid plan's AI allowance is used up; `documentProduced: true` means the PDF was produced but could not be saved to DocHub. Use when: the user asks for any drafted document — "draft a contract", "write up a lease", "make me an invoice". Not for: retrieving or editing existing DocHub documents.
dochub_generate_document
Get the current authenticated user's profile from DocHub. Returns: {"status": "success", "user": {"id": str, "name": str, "email": str, "createdAt": str | null, "entityId": str, "timezone": str | null}} "timezone" is the IANA timezone saved in the user's DocHub preferences; null when unset. Use when: checking who is logged in, verifying authentication, or looking up the saved timezone for presenting timestamps. Not for: looking up other users.
dochub_get_current_user
Get a document from DocHub by its ID. Fetches document metadata and a signed PDF download URL in parallel. Returns: Text JSON: {"status": "success", "document": {"id": str, "title": str, "fullUrl": str | null, "isTemplate": bool, ...}} structured_content: same document fields plus {"pdfUrl": str, "pdfUrlExpiresIn": int} for the PDF viewer widget. Use when: retrieving a specific document by a known ID. Not for: unknown document IDs — find one via a document listing first.
dochub_get_document
Fetch detailed info on a single DocHub sign request. Returns per-signer status, viewedAt / signedAt timestamps, signer emails, and queue positions in addition to the list-view fields. Returns: { "status": "success", "signRequest": { "id": str, "status": str, "createdAt": str, "updatedAt": str, "sender": "me" | "others", "document": {"id": str, "title": str, "fullUrl": str}, "signers": [{ "name": str, "email": str, "isCurrentUser": bool, "status": str, "viewedAt": str | null, "signedAt": str | null, "queuePosition": int | null, }], } } Use when: answering "who hasn't signed yet?", "when did X sign?", or any question needing per-signer timestamps. Not for: listing multiple sign requests.
dochub_get_sign_request
Grant or revoke free document annotation (write/draw anywhere) for a role's signer. Annotation is free-form content only — it does NOT make form fields fillable. A field can be completed only by the signer whose role it is assigned to (via field assignment); granting annotations leaves unassigned fields read-only for the signer. Side effects: changes what the signer is allowed to do in the document. Granting annotations is one way to resolve a send_blocked "must be assigned at least one field or have annotations enabled" finding. Required inputs: - documentId: the document the role belongs to — for a sign request draft, the draft's own documentId, not the template id. - documentRoleId: a role id from a send preview's recipients or a blocker's affectedRecipients. - canAnnotate: true to grant, false to revoke. No default. Returns: {"status": "success", "documentRoleId": str, "canAnnotate": bool} Use when: enabling or disabling free annotation for a signer on a draft. Not for: assigning specific fields to a role.
dochub_update_document_role
List documents from DocHub with optional filters. Supports filtering by title substring, labels (AND logic), privacy level, ownership, date range, and template vs non-template documents. Returns paginated results sorted by createdAt descending by default, so newly created/imported documents appear first. Returns: { "status": "success", "documents": [ { "id": str, "title": str, "fullUrl": str, "isTemplate": bool, "documentRolesData": [ { "id": str, "name": str | null, "email": str | null, "queuePosition": int | null, "signerType": "default" | "in_person", } ], } ], "pagination": { "currentPage": int, "nextPage": int | null, "prevPage": int | null, "totalCount": int, }, "warnings": [str] } warnings: non-fatal notices (for example, label names that were not found and were skipped). Template documents (isTemplate=true) expose documentRolesData role ids used when creating a template-based sign request draft. Use when: searching or browsing documents, filtering by labels/privacy/owner/dates/templates. Not for: looking up a specific document by a known ID.
dochub_list_documents
List form fields for a document. isFillable marks fields whose value can be set; the listing exposes each field's id, type, and role assignment. documentUrl is the DocHub link for the document (null when unavailable). Returns: { "status": "success", "documentUrl": str | null, "formfields": [ { "id": str, "ffType": str, "isRequired": bool, "isFillable": bool, "isChecked": bool | null, "choices": list | null, "fieldTitle": str | null, "value": any | null, "pageNumber": int, "documentRole": { "id": str, "name": str, "email": str | null, "queuePosition": int | null, "signerType": "default" | "in_person", } | null, } ], } Use when: Inspecting document fields for signing/setup flows. Not for: general document metadata, or listing documents.
dochub_list_formfields
List sign requests from DocHub with optional filters. Supports filtering by status, sender, and date range. Returns paginated results. Returns: { "status": "success", "signRequests": [{ "id": str, "status": str, "createdAt": str, "sender": "me" | "others", "signers": [{"name": str, "isCurrentUser": bool, "status": str}], "document": {"id": str, "title": str, "fullUrl": str} }], "pagination": { "currentPage": int, "prevPage": int | null, "nextPage": int | null, "totalCount": int, } } Use when: checking pending/completed/failed sign requests, filtering by status or date. Not for: looking up a specific sign request by ID, or importing files.
dochub_list_sign_requests
Modify a previously generated document by applying changes to its template and/or data and recompiling to PDF. Requires the `runId` from a previous generation response. On success the modified document is saved to DocHub and its URL and an inline PDF preview are returned. Parameters: - runId: the runId from a previous generation response - modification: natural-language description of the change - additionalFacts (optional): new data fields the modification needs - filename (optional): preferred output filename Response `status` is "success" (contains `documentId`, `documentUrl`, and `pdfUrl`) or "error" (contains a user-ready `message` and an `errorCode`; `upgrade_required` and `ai_rate_limit_exceeded` indicate plan/allowance limits). Use when: changing a document that was just generated — e.g. adjusting a value, adding or removing a section, or adding a signer line. Not for: creating a new document or editing arbitrary DocHub documents.
dochub_modify_document
Send/finalize a prepared DocHub sign request draft. Sending triggers DocHub's signer notification flow. The call proceeds through up to three stages, reflected by `status`: - "send_blocked": DocHub's send dry-run found blockers; nothing is sent. `blockers` lists each one with a `reasonCode`, a human-readable `message`, and its `affectedRecipients`. `documentFields` lists the draft's fields (type, page, assignment) for field-assignment blockers. A re-call without confirmationToken re-runs validation. - "confirmation_required": validation passed. The response carries a one-time `confirmationToken` and a `preview` of exactly what will be sent (recipients with assignedFields and canAnnotate, invitation `emailSubject`/`emailBody`, and any `warnings`). `reason` is "missing" when no token was supplied, or "invalid" when a supplied token was expired, already used, or no longer matches the draft. A re-call with the same parameters plus a current token and confirmRecipientEmails (the recipient emails from the preview, order-free) performs the send. A mismatched or missing confirmRecipientEmails returns reason "invalid" with a fresh token and preview; the previous token stays usable. When the preview lists no recipient emails (in-person signing), confirmRecipientEmails may be omitted. - "success": the request was sent. Required inputs: - signRequestId: sign request draft id from a create response or a list/get lookup. - confirmRecipientEmails: on the confirm call, the recipient emails shown in the preview (not required when the preview lists no recipient emails). Returns (by status): Send blocked: { "status": "send_blocked", "action": "dochub_send_sign_request", "message": str, "documentTitle": str | null, "blockers": [{"reasonCode": str, "message": str, "affectedRecipients": [{"name": str | null, "email": str | null, "queuePosition": int | null, "documentRoleId": str | null}]}], "warnings": [same shape as blockers], "instructions": str, "documentFields": [{"id": str, "ffType": str | null, "pageNumber": int | null, "isRequired": bool | null, "assignedRoleName": str | null}] } Confirmation required: { "status": "confirmation_required", "action": "dochub_send_sign_request", "reason": "missing" | "invalid", "message": str, "confirmationToken": str, "instructions": str, "preview": { "documentTitle": str | null, "recipients": [{"name": str | null, "email": str | null, "queuePosition": int | null, "canAnnotate": bool | null, "documentRoleId": str | null, "assignedFields": int | null}], "emailSubject": str | null, "emailBody": str | null, "warnings": [{"reasonCode": str, "message": str}] } | null } Success: { "status": "success", "signRequestId": str, "signRequestStatus": str, "documentUrl": str } Use when: finalizing and sending an existing draft sign request — the e-signature invitation goes out to the signers. Not for: creating a sign request draft.
dochub_send_sign_request
Update a PREPARING sign request draft: its title and/or invitation email content. Side effects: none toward signers — drafts send nothing. Sent requests cannot be updated (the API returns a validation error). Required inputs: - signRequestId: the draft's id, returned by creation and by the sign-request listing and details. Plus at least one of: - title: new title for the draft's document — what signers see and what the default invitation subject interpolates. - emailContent: invitation overrides with subject and/or body. Partial update: a provided field replaces the stored value, an omitted field keeps its current value. Returns: Success: { "status": "success", "signRequestId": str, "title": str | null, "emailSubject": str | null, "emailBody": str | null } emailSubject/emailBody are the effective invitation content after the update as stored by DocHub (authoritative — both are returned even when only one was changed). title echoes the requested value when it was part of the update, null otherwise. A pending send confirmation token is invalidated when the invitation email changes — the send flow then shows a fresh preview and asks for approval again. Use when: the user wants a different title or invitation wording on a draft before sending (e.g. after seeing the applied defaults or the send preview). Not for: sent/in-progress requests; changing recipients (done in the DocHub editor at the draft's documentUrl); assigning fields or granting annotations — the field-assignment and role-annotation tools cover those.
dochub_update_sign_request
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are DocHub alternatives on ChatGPT?
As of 2026-09-04, DocHub competes with Adobe Acrobat, AnyPDF - Your PDF Converter, CloudConvert, ConvertAPI, Edito-Pdf, Foxit PDF Editor, KDAN PDF, Ofia Doc Maker, PDF Editor PRO by Playgram, PDF net, PDF Reader Pro, PDF Translator, PDF4me, Smallpdf, Strive PDF Generator in ChatGPT PDF Editing & Conversion Tools, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.