- Brand
- PDF4me
- Category
- Productivity
- Primary Subcategory
- PDF Editing & Conversion Tools
Integration details
Description
PDF4me delivers an intelligent and efficient solution for all your PDFs. Boost your productivity with PDF4me: access crucial data, make edits, and convert files to PDFs directly —all in ChatGPT. From single-document conversion to mega data files, PDF4me is there.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- PDF Editing & Conversion Tools
- Secondary Subcategories
- None listed
- Brand
- PDF4me
- Access
- Account required
- First tracked
- 2026-05-24
- Tool count
- 91
- Market
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for PDF4me
Get updates when PDF4me’s Discoverability Score or category rank changes.
Competing in ChatGPT PDF Editing & Conversion Tools
View Category91 tools agents can invoke
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to stamp a barcode or QR code onto the pages of a PDF you already have — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Returns a download link for the stamped PDF, which keeps the input's name. To generate a barcode as a standalone image with no PDF involved, use 'create_barcode'. To find the barcodes already in a PDF, use 'read_barcode_from_pdf'. 'text' is the data encoded in the barcode and is required. 'barcode_type' is required and is the symbology: the common choices are 'QRCode', 'DataMatrix', 'Code128', 'Code39', 'Ean13', 'Pdf417', 'Aztec' and 'SwissQrCode', and the schema lists all ~130 supported values. Ask the user which barcode type they want unless they have already said; never guess. 'align_x' is required and places the barcode horizontally: 'left', 'center' or 'right'. 'align_y' is required and places it vertically: 'top', 'middle' or 'bottom'. Everything else is optional — pass one only when the user asked for it. 'pages' selects which pages to stamp as a comma-separated list of 1-based numbers and ranges, e.g. '1,3,5-7' or '2-' for page 2 onwards; omit it to let the API decide. 'height_in_mm' and 'width_in_mm' size the barcode in millimetres, e.g. '25'; 'height_in_pt' and 'width_in_pt' do the same in points, and are ignored if either millimetre value is set. 'margin_x_in_mm' and 'margin_y_in_mm' inset the barcode from the aligned edges, with the point equivalents 'margin_x_in_pt' and 'margin_y_in_pt' ignored the same way; a margin is ignored on an axis that is centred. 'opacity' is a whole-number percentage from 0 to 100 and defaults to 100, fully opaque. 'display_text' is a human-readable caption shown with the barcode, separate from the encoded 'text'; 'is_text_above' puts that caption above the barcode instead of below. 'hide_text' removes the caption the symbology would print by itself. 'show_only_in_print' makes the barcode appear on paper but not on screen. The barcode is always black on white — its colour cannot be changed.
add_barcode_to_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to add a fillable form field — a text box or a check box — to a PDF you already have, either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Returns a download link for the edited PDF, under the input's own name. IT ADDS EXACTLY ONE FIELD PER CALL: to add several fields, call it once per field, each time passing the previous call's download_url as file_url. 'field_name' is required and is the name the field is filled and read back by; ask the user for it rather than inventing one. 'form_field_type' is optional and is either 'TextBox' — a line the user types into — or 'CheckBox' — a box the user ticks; omitting it means 'TextBox'. 'initial_value' is optional and is the value the field starts with. For a 'CheckBox' it also sets the state: ONLY the exact strings '1' and 'true' start the box ticked, and anything else, 'yes' and 'on' included, leaves it clear. 'pages' is optional and is a comma-separated list of 1-based page numbers and ranges, e.g. '1' or '1,4'. 'position_x' is optional and is the distance in points from the LEFT edge of the page; 'position_y' is optional and is the distance from the BOTTOM edge — both default to 0, the bottom-left corner, and neither is checked against the page size, so a value past the page puts the field off it. 'size' is optional and is the field's size in points. This adds an empty field to a PDF. To fill the fields of a form that already has them, use 'fill_pdf_form'; to read the values already filled in, 'extract_form_data_from_pdf'; to turn a Word document into a fillable form, 'convert_word_to_pdf_form'.
add_form_field_to_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to add a header, a footer, or both to a PDF you already have, with the content written as HTML — a title, a date, a company name, a confidentiality line. Take the PDF either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Returns a download link for the PDF, which keeps the input's name. For plain page numbers, 'add_page_number_to_pdf' is simpler and needs no HTML. For a watermark across the page rather than a band at the edge, use 'add_text_stamp_to_pdf'. 'html_content' is required and is the markup to render, e.g. "<div style='text-align:center;font-family:Arial;font-size:10pt'>Acme Ltd — Confidential</div>". Keep it small and self-contained: inline styles only, no external stylesheets, scripts or images. 'location' is required and says where it goes: 'Header' at the top of the page, 'Footer' at the bottom, or 'Both' at the top and the bottom. Everything else is optional — pass one only when the user asked for it. 'pages' selects which pages to add it to: 'all', or a comma-separated list of 1-based numbers and ranges, e.g. '1,3,5-7' or '2-' for page 2 onwards. Omit it to let the API decide. 'skip_first_page' leaves the first page untouched, which suits a document with a cover page. 'margin_top', 'margin_bottom', 'margin_left' and 'margin_right' size the band the HTML is rendered into and are measured in PIXELS, not millimetres — around 40 for the band's depth is a reasonable starting point. Each must be 0 or greater. Note that these are a different unit from the millimetre margins on 'add_margin_to_pdf' and 'add_page_number_to_pdf'.
add_header_footer_to_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to put an image — a logo or a seal — in the header or footer of the sheets of an Excel workbook when you already have both. It needs TWO files: the Excel workbook and the image. Supply each one as an OpenAI file, a public http(s) URL, or a base64 string: the workbook as 'file', 'file_url' or 'file_base64', and the image as 'image_file', 'image_url' or 'image_base64'. For each of the two, when more than one is available use the OpenAI file first, then the public URL, then the base64 string. If you have no source at all for either of them, call 'upload_file' instead and stop — it accepts several files at once, and the URLs it produces reach you from the user's next message onwards, to pass here as file_url and image_url. Allowed file types: the workbook .xlsx or .xls; the image .png, .jpg, .jpeg or .gif. 'file_name' is the workbook's name and 'image_name' is the image's; both are required and must carry those extensions. Everything else is optional; pass one only when the user asked for it. 'is_header' true (the default) puts the image in the header and false in the footer. 'position' must be one of: 'Left' (left section), 'Center' (center section, the default), 'Right' (right section). The image goes on every sheet unless 'worksheet_names' or 'worksheet_indexes' narrow it; names are matched exactly and may contain commas, and 'worksheet_indexes' here are 1-BASED (the first sheet is 1). 'top_margin', 'bottom_margin', 'left_margin' and 'right_margin' are in centimetres, 0 or more, and default to 1.9. The output keeps the workbook's name. For a text header or footer, use 'add_text_header_footer_to_excel'; to remove headers and footers, use 'remove_header_footer_from_excel'.
add_image_header_footer_to_excel
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to stamp an image — a logo, a seal, a picture watermark — onto the pages of a PDF you already have. It needs TWO files: the PDF and the image. Supply each one as an OpenAI file, a public http(s) URL, or a base64 string: the PDF as 'file', 'file_url' or 'file_base64', and the image as 'image_file', 'image_url' or 'image_base64'. For each of the two, when more than one is available use the OpenAI file first, then the public URL, then the base64 string. If you have no source at all for either of them, call 'upload_file' instead and stop — it accepts several files at once, and the URLs it produces reach you from the user's next message onwards, to pass here as file_url and image_url. Returns a download link for the stamped PDF, which keeps the input PDF's name. To stamp wording instead of a picture, use 'add_text_stamp_to_pdf'; for a signature image specifically, use 'sign_pdf', which always draws in the foreground; for a barcode, use 'add_barcode_to_pdf'. 'file_name' is the PDF's name and must end with '.pdf'. 'image_name' is the image's name and is required: its extension is how the API learns the image format, and must be '.png', '.jpg' or '.jpeg'. 'align_x' is required and places the image horizontally: 'left', 'center' or 'right'. 'align_y' is required and places it vertically: 'top', 'middle' or 'bottom'. Everything else is optional — pass one only when the user asked for it. 'pages' selects which pages to stamp as a comma-separated list of 1-based numbers and ranges, e.g. '1,3,5-7' or '2-' for page 2 onwards; omit it to stamp every page. 'height_in_mm' and 'width_in_mm' size the image in millimetres, e.g. '25'; 'height_in_px' and 'width_in_px' do the same in pixels, and are ignored if either millimetre size is set. Omit all four to keep the image's own size, or set just one of a pair to have the other derived from it so the aspect ratio is preserved. 'margin_x_in_mm' and 'margin_y_in_mm' inset the image from the aligned edges and may be negative, with the pixel equivalents 'margin_x_in_px' and 'margin_y_in_px' ignored whenever either millimetre margin is set; a margin is ignored on an axis that is centred. 'opacity' is a whole-number percentage from 0 to 100 and defaults to 100, fully opaque — a picture watermark usually wants something like '30'. 'show_only_in_print' makes the image appear on paper but not on screen, and takes priority over 'is_background'. 'is_background' puts the image behind the page content instead of on top of it.
add_image_stamp_to_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to place one image — a logo, a seal, a picture watermark — onto another image you already have. It needs TWO files: the base image and the watermark image. Supply each one as an OpenAI file, a public http(s) URL, or a base64 string: the base image as 'file', 'file_url' or 'file_base64', and the watermark as 'watermark_file', 'watermark_url' or 'watermark_base64'. For each of the two, when more than one is available use the OpenAI file first, then the public URL, then the base64 string. If you have no source at all for either of them, call 'upload_file' instead and stop — it accepts several files at once, and the URLs it produces reach you from the user's next message onwards, to pass here as file_url and watermark_url. Allowed file types, for both images: .png, .jpg, .jpeg, .bmp, .gif, .tif, .tiff. 'file_name' is the base image's name and 'watermark_file_name' is the watermark's; both are required, because the API reads each file's format from its name. Everything else is optional; pass one only when the user asked for it. 'opacity' runs from 0 to 1, where 1 is fully opaque and 0 is invisible; this tool sends 1 when you omit it, and a see-through watermark usually wants something like 0.3. Note this is NOT the 0 to 100 scale the PDF stamp tools use. 'position' is a free-form string passed straight to the API, which does not document the values it accepts — 'BottomRight' is the one the PDF4me docs show. For placement you can rely on, use 'position_x' and 'position_y' instead, which are measured in pixels. 'horizontal_offset' and 'vertical_offset' inset the watermark from the position, in pixels. 'rotation' turns the watermark by that many degrees. The output keeps the base image's name. To write wording rather than place a picture, use 'add_text_watermark_to_image'. To put an image onto a PDF, use 'add_image_stamp_to_pdf'.
add_image_watermark_to_image
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to place an image — a logo, a seal, a picture watermark — onto a Word document when you already have both. It needs TWO files: the Word document and the watermark image. Supply each one as an OpenAI file, a public http(s) URL, or a base64 string: the document as 'file', 'file_url' or 'file_base64', and the watermark image as 'watermark_file', 'watermark_url' or 'watermark_base64'. For each of the two, when more than one is available use the OpenAI file first, then the public URL, then the base64 string. If you have no source at all for either of them, call 'upload_file' instead and stop — it accepts several files at once, and the URLs it produces reach you from the user's next message onwards, to pass here as file_url and watermark_url. Allowed file types: the document .docx or .doc; the image .png, .jpg, .jpeg, .bmp or .gif — a transparent PNG gives the cleanest result. 'file_name' is the document's name and 'watermark_file_name' the image's; both are required. Everything else is optional; pass one only when the user asked for it. Size is decided in this order: 'width' and 'height' in points (one alone keeps the aspect ratio), then 'scale' — 0.1 to 10 times the image's own size, default 1, and ignored when 'width' or 'height' is sent — then the image's own size. 'semi_transparent' true renders it at 50% opacity. 'align_image' true (the default) centres it on the page; false puts it top-left within the margins. The output keeps the document's name. To watermark with text instead, use 'add_text_watermark_to_word'; to put an image where a piece of text is, 'replace_text_with_image_in_word'.
add_image_watermark_to_word
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to add white space around the content of a PDF you already have — for binding, hole punching, or margin notes — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Returns a download link for the resized PDF, which keeps the input's name. All four margins are optional and measured in whole millimetres, and each defaults to 0 — so pass at least one, since omitting all four returns the document unchanged. 'margin_left', 'margin_right', 'margin_top' and 'margin_bottom' each add space on that edge. Each must be 0 or greater: this tool can only add space, never trim the page, and a negative value is rejected rather than silently ignored. Ask the user how much margin they want unless they have already said; never guess. This changes the page size, it does not scale the content. To put something into the new space, chain 'add_header_footer_to_pdf', 'add_page_number_to_pdf' or 'add_text_stamp_to_pdf' onto the download link this returns.
add_margin_to_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to print page numbers onto the pages of a PDF you already have — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Returns a download link for the numbered PDF, which keeps the input's name. For a header or footer band of your own HTML, use 'add_header_footer_to_pdf'; for a watermark or other wording, use 'add_text_stamp_to_pdf'. 'align_x' is required and places the number horizontally: 'left', 'center' or 'right'. 'align_y' is required and places it vertically: 'top', 'middle' or 'bottom' — a footer number is 'bottom'. 'font_size' is required, in points; the API applies no default of its own, and 12 is a typical page number. Everything else is optional — pass one only when the user asked for it. 'page_number_format' is a template such as 'Page {pageNumber} of {totalPages}', where '{pageNumber}' is the current page and '{totalPages}' the document's page count; omit it to let the API decide. 'is_bold' and 'is_italic' style the number. 'skip_first_page' leaves the first page unnumbered, which suits a document with a cover page. 'margin_x_in_mm' and 'margin_y_in_mm' inset the number from the aligned edges, in whole millimetres; both must be 0 or greater. This tool numbers the whole document — there is no way to number only some pages — and the text colour is fixed by the API and cannot be set.
add_page_number_to_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to insert new rows of data into an Excel workbook when you already have the workbook — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed file types: .xlsx, .xls. 'file_name' is the workbook's name including its extension. 'rows' is a list of objects, one per row, each mapping a column name to its value, e.g. [{'Name': 'John', 'Age': 30}, {'Name': 'Ana', 'Age': 28}]. 'worksheet_name' is the sheet to write to and defaults to 'Sheet1'. There are two ways to say where the rows go, chosen by 'table_name'. TABLE mode: set 'table_name' to a named Excel table; the keys are matched to the table's column headers, and 'excel_row_number' is the 1-based position inside the table. COORDINATE mode: leave 'table_name' out and use 'insert_from_row' and 'insert_from_column', both 1-based (1 and 1 is cell A1); the values are written left to right. Mixing the two modes' fields is rejected. 'convert_numeric_and_date' (default true) writes values that look like numbers or dates as real Excel numbers and dates. 'date_format' (default 'yyyy-MM-dd', e.g. 'MM/dd/yyyy') and 'numeric_format' (default 'N2', e.g. '#,##0.00') are Excel format strings. 'ignore_null_values' true skips null values. 'culture_name' (e.g. 'en-US', 'de-DE') is the culture the API reads numbers and dates in; omit it for the API default. The output keeps the input's name. To overwrite existing cells instead of inserting rows, use 'update_rows_in_excel'; to merge the rows of several sheets by key columns, use 'merge_rows_in_excel'; to build a whole new workbook from JSON, use 'convert_json_to_excel'.
add_rows_to_excel
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to add a text header or footer to the sheets of an Excel workbook when you already have the workbook — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed file types: .xlsx, .xls. 'file_name' is the workbook's name including its extension. The header and the footer each have three sections, left, center and right, and each section is written on its own: 'header_left', 'header_center', 'header_right', 'footer_left', 'footer_center' and 'footer_right' take that section's text. Give the text for at least one of the six; a section left out is not written. Everything else is optional; pass one only when the user asked for it. Each section also has its own text color, '<section>_color' (e.g. 'header_left_color', 'footer_center_color'), which defaults to 'Black', and its own font size, '<section>_font_size' (e.g. 'header_right_font_size'), a whole number of points greater than 0 that defaults to 11. The text goes on every sheet unless 'worksheet_names' or 'worksheet_indexes' narrow it; a name must not contain a comma, and 'worksheet_indexes' here are 1-BASED (the first sheet is 1). The output keeps the input's name. To put an image in the header or footer instead, use 'add_image_header_footer_to_excel'; to write a watermark across the sheets, use 'add_text_watermark_to_excel'; to remove headers and footers, use 'remove_header_footer_from_excel'.
add_text_header_footer_to_excel
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to stamp text — a watermark such as 'CONFIDENTIAL' or 'DRAFT', or any other wording — onto the pages of a PDF you already have, either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Returns a download link for the stamped PDF, which keeps the input's name. To stamp a picture or logo instead of text, use 'add_image_stamp_to_pdf'; for a signature image, use 'sign_pdf'; for a barcode, use 'add_barcode_to_pdf'; for page numbers, use 'add_page_number_to_pdf'; for a header or footer band, use 'add_header_footer_to_pdf'. 'text' is the wording to stamp and is required. 'align_x' is required and places the text horizontally: 'left', 'center' or 'right'. 'align_y' is required and places it vertically: 'top', 'middle' or 'bottom'. Everything else is optional — pass one only when the user asked for it. 'pages' selects which pages to stamp as a comma-separated list of 1-based numbers and ranges, e.g. '1,3,5-7' or '2-' for page 2 onwards; omit it to stamp every page. 'margin_x_in_mm' and 'margin_y_in_mm' inset the text from the aligned edges in millimetres and may be negative, with the pixel equivalents 'margin_x_in_px' and 'margin_y_in_px' ignored whenever either millimetre margin is set; a margin is ignored on an axis that is centred. 'opacity' is a whole-number percentage from 0 to 100 and defaults to 100, fully opaque — a watermark usually wants something like '30'. 'font_name' defaults to 'Arial'; 'font_size' is in points and defaults to 12; 'font_color' is a hex colour such as '#FF0000'. 'is_bold', 'is_italics' and 'underline' style the text. 'rotate' turns the text by a whole number of degrees, e.g. 45. 'transverse' lays the text out diagonally across the page. 'fit_text_over_page' scales the text to span the whole page, which is the usual look for a large watermark. 'show_only_in_print' makes the text appear on paper but not on screen, and takes priority over 'is_background'. 'is_background' puts the text behind the page content instead of on top of it — use it for a watermark that must not obscure the text underneath.
add_text_stamp_to_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to write a text watermark, such as CONFIDENTIAL or DRAFT, across the sheets of an Excel workbook when you already have the workbook — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed file types: .xlsx, .xls. 'file_name' is the workbook's name including its extension. 'text' is the watermark wording and is required. Everything else is optional; pass one only when the user asked for it. 'font_family' defaults to 'Arial'. 'text_size' is a size class, NOT points, and must be one of: 1 (small), 2 (medium, the default), 3 (large), 4 (extra large). 'is_bold' defaults to true and 'is_italic' to false. 'text_color' is a hex code such as '#FF0000' and defaults to '#808080' (grey). 'transparency' runs from 0 (opaque) to 100 percent and defaults to 50. 'rotation_angle' is in whole degrees and defaults to -45. 'position' is a slot in a 3x3 grid and must be one of: 0 (top-left), 1 (top-center, the default), 2 (top-right), 3 (middle-left), 4 (center), 5 (middle-right), 6 (bottom-left), 7 (bottom-center), 8 (bottom-right). The watermark goes on every sheet unless 'worksheet_names' or 'worksheet_indexes' narrow it; names may contain commas, and 'worksheet_indexes' here are 1-BASED (the first sheet is 1). The output keeps the input's name. To remove a watermark, use 'remove_watermark_from_excel'. For a header or footer rather than a watermark, use 'add_text_header_footer_to_excel'. To watermark a PDF, use 'add_text_stamp_to_pdf'.
add_text_watermark_to_excel
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to write a text watermark — wording such as CONFIDENTIAL or a copyright line — across an image you already have, either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed input file types: .png, .jpg, .jpeg, .bmp, .gif, .tif, .tiff. watermark_text is required and is the wording written onto the picture. Everything else is optional; pass one only when the user asked for it. 'text_font_size' is in points and is worth setting: the API applies no default, so leaving it out can render nothing at all. Pick a size in proportion to the image — call 'get_image_metadata' first if you need its pixel dimensions. 'opacity' runs from 0 to 1, where 1 is fully opaque and 0 is invisible; this tool sends 1 when you omit it, and a see-through watermark usually wants something like 0.3. Note this is NOT the 0 to 100 scale the PDF stamp tools use. 'text_position' is a free-form string passed straight to the API, which does not document the values it accepts — 'Center' is the one the PDF4me docs show. For placement you can rely on, use 'position_x' and 'position_y' instead, which are measured in pixels. 'text_font_family' is a font name such as Arial, passed through as given; an unavailable font is substituted server-side without warning. 'text_colour' — note the British spelling — is a 3- or 6-digit hex colour with or without a leading #, for example #FF0000. 'is_bold', 'is_italic' and 'is_underline' style the wording and all default to off. 'rotation_angle' turns the wording by that many degrees, so 45 runs it diagonally across the picture. Ask the user what the watermark should say unless they have already said; never invent the wording. The output keeps the input image's name. To place a picture rather than wording, use 'add_image_watermark_to_image'. For a PDF use 'add_text_stamp_to_pdf'.
add_text_watermark_to_image
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to write a text watermark, such as CONFIDENTIAL or DRAFT, across a Word document when you already have the document — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed file types: .docx, .doc. 'file_name' is the document's name including its extension. 'text' is the watermark wording and is required. Everything else is optional; pass one only when the user asked for it. 'font_family' defaults to 'Arial'; 'font_name' names a specific font. 'font_size' runs from 1 to 1000 points and defaults to 72. 'font_color' defaults to grey '#808080' and takes a name ('Red'), a hex code ('#FF0000' or 'FF0000') or 'RGB(255,0,0)'. 'semi_transparent' true renders it at 50% opacity. 'rotation' is 0 to 360 degrees. 'orientation' overrides 'rotation' and must be one of: 'Horizontal' (0 degrees), 'Vertical' (90), 'Diagonal' (45), 'Upside-Down' (180). The output keeps the input's name. To watermark with a picture instead, use 'add_image_watermark_to_word'. To watermark a PDF, use 'add_text_stamp_to_pdf'.
add_text_watermark_to_word
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to reduce the file size of an image you already have, either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed input file types: .jpg, .jpeg, .png. image_type is required and must describe the file you are sending, not a format to convert it to: 'JPG' for a .jpg or .jpeg file, 'PNG' for a .png file. compression_level is required and takes one of: - 'Max': smallest file, most quality lost. - 'Medium': a middle setting. - 'Low': least quality lost, largest of the three. Ask the user how hard to compress unless they have already said. Note that the API's own default is the most lossy setting, which is why this tool makes the choice explicit. The result carries no before/after size, so do not tell the user how much was saved — only that a compressed image is ready. The output keeps the input image's name. To change the pixel dimensions use 'resize_image', to change the format use 'convert_image_format', and for a PDF use 'compress_pdf'.
compress_image
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to compress, reduce the file size of, or optimize a PDF you already have — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Ask the user which optimize_profile to use unless they have already said; never guess. The options are: 'Default' (balanced compression, general document compression), 'Web' (small size, fast download, web-optimized — for web delivery and online viewing), 'WebMax' (maximum web optimization), 'Print' (correct fonts, right colors, print-suitable, minor image DPI loss — for high-quality printing), 'PrintMax' (maximum print optimization), 'PrintGray' (grayscale print optimization), 'Compress' (standard compression), 'CompressMax' (maximum compression), 'Max' (maximum compression, small size, fast display — for maximum file size reduction). It compresses only: the output is the same PDF, smaller. It does not convert.
compress_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to convert an HTML file, or a .zip containing a whole site, into a PDF when you already have the file — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. With a .zip, set index_file_path to the entry HTML file inside it, e.g. 'site/index.html'. The page-setup parameters are all optional — pass one only when the user asked for it, and otherwise leave it out so the default applies. 'layout' is the orientation, either 'Portrait' (the default) or 'Landscape'. 'page_format' is the paper size, one of 'Letter', 'Legal', 'Tabloid', 'Ledger', 'A0', 'A1', 'A2', 'A3', 'A4' (the default), 'A5' or 'A6'. The four margin parameters are CSS lengths such as '40px', '1in' or '2cm', and default to 40px each. 'scale' shrinks or enlarges the rendered page (0.8 by default, so 1 renders larger than the default). 'print_background' keeps background colours and images, on by default; set it false for a cleaner print. 'display_header_footer' adds the browser's page header and footer, off by default. Note the input: this converts an HTML FILE that you have. To render a live web page from its address, use 'convert_url_to_pdf' instead. The output is a .pdf named after the input.
convert_html_to_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to convert an image you already have from one image format to another, either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed input file types: .bmp, .gif, .jpg, .jpeg, .png, .tif, .tiff. Both formats are required, and each is one of: BMP, GIF, JPG, PNG, TIF. current_image_format must describe the file you are sending — the API does not look at the file itself and does not check the value, so getting it wrong produces a wrong result with no error. new_image_format is what you want out. The output is named after the input with the new format's extension, so photo.png converted to JPG comes back as photo.jpg. Ask the user which format they want unless they have already said. To turn an image into a PDF use 'convert_to_pdf'; to render the pages of a PDF as images use 'convert_pdf_to_image'. To make an image smaller without changing its format, use 'compress_image'.
convert_image_format
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to convert a JSON file into an Excel workbook when you already have the file — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. The JSON records become rows with a header row of field names. Every parameter below is optional — pass one only when the user asked for it, and otherwise leave it out so the API default applies. 'worksheet_name' names the generated sheet. 'is_title_bold' bolds the header row; 'is_title_wrap_text' wraps its text. 'convert_number_and_date' makes numbers and dates real Excel numbers and dates instead of text, so they can be sorted and calculated with — set it when the user wants to work with the values. 'number_format' and 'date_format' are Excel format strings (e.g. '#,##0.00' and 'yyyy-MM-dd') and only take effect together with it. 'ignore_null_values' leaves cells empty instead of writing nulls. 'first_row' and 'first_column' offset where the table starts on the sheet. The output is an .xlsx named after the input.
convert_json_to_excel
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to convert a Markdown file, or a .zip containing several, into a PDF when you already have the file — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. With a .zip, set md_file_path to the entry Markdown file inside it, e.g. 'docs/README.md'. The output is a .pdf named after the input.
convert_md_to_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to convert a PDF to an Excel spreadsheet when you already have the PDF — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Ask the user which quality to use unless they have already said; never guess. The options are: 'Draft' (for standard text-based PDFs), 'High' (for scanned documents or image-based PDFs — runs OCR when needed). All tables are merged into a single sheet. The whole PDF is converted; the output is an .xlsx.
convert_pdf_to_excel
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to render the pages of a PDF as image files when you already have the PDF — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Ask the user for image_extension, width_pixel and page_nrs unless they have already said; never guess. image_extension must be one of: JPG, JPEG, BMP, GIF, JB2, JP2, JPF, JPX, PNG, TIF, TIFF. width_pixel must be an integer from 100 to 2000 (output width in pixels; height follows the page aspect ratio). page_nrs selects which pages to render: 'all' or '*' for every page, 'first' or '1' for the first page, 'last' or '-1' for the last, a single page as '2', a range as '2-3' or '7-' (page 7 to the end), or a comma-separated mix such as '1,3-5,last'. Rendering every page of a long PDF produces one link per page, so prefer a specific selection unless the user really wants all pages. This renders each selected PAGE as one image. If the user wants the images that are already embedded inside the PDF, that is 'extract_resources' instead.
convert_pdf_to_image
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to convert a PDF into PDF/A, the archival format required for long-term preservation and for many legal and government submissions, when you already have the PDF — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Ask the user which conformance level to use unless they have already said; never guess. If they do not know, PdfA2b suits most archiving needs. The options are: 'PdfA1b' (PDF/A-1, visual fidelity only — the oldest and strictest on features), 'PdfA1a' (PDF/A-1 plus document tagging for accessibility), 'PdfA2b' (PDF/A-2, visual fidelity — the usual general-purpose choice), 'PdfA2u' (PDF/A-2 plus Unicode text mapping, so text stays searchable), 'PdfA2a' (PDF/A-2 plus tagging for accessibility), 'PdfA3b' (PDF/A-3, visual fidelity — allows embedded attachments), 'PdfA3u' (PDF/A-3 plus Unicode text mapping), 'PdfA3a' (PDF/A-3 plus tagging for accessibility). The output is a PDF of the same name. It does not compress or change the page content.
convert_pdf_to_pdfa
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to convert a PDF to a PowerPoint presentation (.pptx) when you already have the PDF — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Ask the user which quality to use unless they have already said; never guess. The options are: 'Draft' (for standard text-based PDFs), 'High' (for scanned documents or image-based PDFs). The whole PDF is converted; the output is a .pptx.
convert_pdf_to_powerpoint
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to convert a PDF to a Word document (.docx) when you already have the PDF — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Ask the user which quality to use unless they have already said; never guess. The options are: 'Draft' (for standard text-based PDFs), 'High' (for scanned documents or image-based PDFs). The whole PDF is converted; the output is a .docx.
convert_pdf_to_word
Use this to render a live web page as a PDF from its address. This is the one operation tool that needs no file: it takes the page's URL as web_url and the server fetches the page itself, so never call 'upload_file' for it. Use it when the user gives you a link to a page they want as a PDF. If instead they have an HTML file, use 'convert_html_to_pdf'. It only works for pages reachable publicly without signing in — a page behind a login, a paywall or a private network will not render. The page-setup parameters are all optional — pass one only when the user asked for it, and otherwise leave it out so the default applies. 'layout' is the orientation, either 'Portrait' (the default) or 'Landscape'. 'page_format' is the paper size, one of 'Letter', 'Legal', 'Tabloid', 'Ledger', 'A0', 'A1', 'A2', 'A3', 'A4' (the default), 'A5' or 'A6'. The four margin parameters are CSS lengths such as '40px', '1in' or '2cm', and default to 40px each. 'scale' shrinks or enlarges the rendered page (0.8 by default, so 1 renders larger than the default). 'print_background' keeps background colours and images, on by default; set it false for a cleaner print. 'display_header_footer' adds the browser's page header and footer, off by default.
convert_url_to_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to convert a Visio diagram to PDF, an image, SVG or HTML when you already have the file — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Ask the user which output_format they want unless they have already said; never guess. The options are: 'PDF' (the usual choice for sharing or printing), 'PNG', 'JPG', 'BMP', 'GIF' (raster images), 'TIFF' (multi-page raster image), 'SVG' (vector image that stays sharp at any size), 'HTML' (viewable in a browser), 'VSDX' (modern Visio format — use this to upgrade an older .vsd). Every page of the diagram is converted. The output is named after the input with the extension of the chosen format.
convert_visio
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to turn a Word document into a fillable PDF form, keeping its form fields interactive so the recipient can type into them, when you already have the document — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Use this only when the user wants a form that can still be filled in. For an ordinary, non-interactive PDF of a Word document, use 'convert_to_pdf' instead. The output is a .pdf named after the input.
convert_word_to_pdf_form
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to convert a Word, Excel, PowerPoint, text, HTML or image file to PDF when you already have the file — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. The converted PDF keeps its original quality — this tool does not compress or optimize it. If the user also wants a smaller file, chain it: take the download_url from this tool's result and pass it to 'compress_pdf' as file_url. Note the direction: this converts a document INTO a PDF. To go the other way, a PDF into Word, Excel, PowerPoint or images, use the matching 'convert_pdf_to_*' tool.
convert_to_pdf
Use this to generate a barcode or QR code as a standalone image. Returns a download link for a PNG. This tool needs no file: it encodes the 'text' you give it, so never call 'upload_file' for it. To put a barcode onto an existing PDF instead, use 'add_barcode_to_pdf'. 'text' is the data to encode and is required — a URL, an invoice number, any string. 'barcode_type' is required and is the symbology: the common choices are 'QRCode', 'DataMatrix', 'Code128', 'Code39', 'Ean13', 'Pdf417', 'Aztec' and 'SwissQrCode', and the schema lists all ~130 supported values. Ask the user which barcode type they want unless they have already said; never guess. 'hide_text' is optional and removes the human-readable caption the symbology would print under the bars; it defaults to false, so the caption is shown. The output is always PNG, always black on white, and its size is chosen by the API — none of those can be set here.
create_barcode
Use this to create a Swiss QR bill (QR-Rechnung) — the Swiss payment slip carrying a Swiss QR code — either as a standalone file or stamped onto an existing PDF invoice. Returns a download link. To read the payment details out of an existing Swiss QR bill instead, use 'read_swissqr_code'. 'format_type' is required and decides both the output and whether a PDF is needed: 'PDF' places the bill on a page of a PDF you supply, or produces a standalone bill when you supply none; 'AddPageAtEnd' appends the bill on a new last page of a PDF you supply; 'PNG', 'JPEG', 'Tiff' and 'SVG' produce a standalone bill image and ignore any file. When a PDF is needed, supply it as an OpenAI file, a public http(s) URL, or a base64 string, using the OpenAI file first, then the public URL, then the base64 string; if you hold none of them, call 'upload_file' and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. A file is required for 'AddPageAtEnd', and for 'PDF' with paging_options 'last' or 'AddPageAtEnd' or with page_number above 0. 'paging_options' picks the page to place the bill on: 'first' (the default), 'last', 'AddPageAtEnd' (a new page at the end) or 'custom' (the page in 'page_number'). The payment fields are all optional to the API, which validates none of them, but a bill the bank will accept needs at least 'iban', 'amount', 'currency', 'cr_name' and the creditor address. Collect them from the user rather than inventing any of them — never guess an IBAN, amount or reference. 'cr_*' fields are the creditor (who is paid) and 'ud_*' the ultimate debtor (who pays): name, street/address line 1, building-number/address line 2, postal code and city, plus an address type of 'S' for structured or 'K' for combined. 'currency' is 'CHF' or 'EUR'. 'reference_type' is 'QRR' (a QR reference), 'SCOR' (a creditor reference) or 'NON' (no reference), and 'reference' is that reference number. 'unstructured_message' is a free-text note, 'billing_info' structured billing information, and 'av1_parameters'/'av2_parameters' alternative payment scheme parameters. 'language_type' prints the slip in 'German', 'French', 'Italian' or 'English'. 'seperator_line' draws the cut line as 'LineWithScissor', 'Line' or 'None'. The bill is always Swiss-domestic: the QR type, version and both countries are fixed.
create_swissqr_bill
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to crop an image you already have — cutting it down to a rectangle, or trimming a border off its edges — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed input file types: .png, .jpg, .jpeg, .bmp, .gif, .tif, .tiff. crop_type is required and decides which measurements are used: - 'Border': trim pixels off the edges. Uses left_border, right_border, top_border and bottom_border, and at least one of them must be greater than 0. - 'Rectangle': keep the rectangle at upper_left_x, upper_left_y with width and height. width and height are required for this crop type and must be greater than 0. - 'AspectRatio': accepted by the API but undocumented — which measurements it reads is unstated, and the PDF4me connector does not offer it. Only send it if the user asked for it by name. Every measurement is in pixels, counted from the top-left corner, and none of them is checked against the real size of the image — a rectangle larger than the picture is accepted. Call 'get_image_metadata' first when you need the image's real width and height. Ask the user for the crop measurements unless they have already given them; never guess a crop, because the part cut away cannot be recovered from the result. The output keeps the input image's name. To change an image's size rather than cut part of it away, use 'resize_image'.
crop_image
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to remove the blank pages of a PDF you already have — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. It finds the empty pages itself, so no page numbers are needed — a scan's separator sheets and the blank backs of double-sided pages are the usual targets. delete_page_option decides what counts as blank, and the two looser settings delete pages that carry content, so leave it unset unless the user asked for one: - 'NoTextNoImages': delete a page only when it has neither text nor images. The strictest option, and what the server applies when delete_page_option is omitted. - 'NoText': delete a page that has no text, even if it carries images — an image-only page is removed. - 'NoImages': delete a page that has no images, even if it carries text — a text-only page is removed. The output is a PDF of the same name. The result does not say how many pages went, so do not state a number: call 'get_pdf_metadata' on the input and the output if the user needs the count. To remove pages you can name, use 'delete_pages_from_pdf'.
delete_blank_pages_from_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to remove certain pages from a PDF you already have — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. It returns a new PDF with the pages listed in page_numbers taken out and every other page kept. page_numbers is a comma-separated list of 1-based page numbers and inclusive ranges, e.g. '2,4,9-11' to delete pages 2, 4, 9, 10 and 11. Ranges must run forwards ('9-11', never '11-9'), there is no page 0, and keywords such as 'all' or 'last' are not accepted here — write the numbers out. Ask the user which pages to delete unless they have already said; never guess, since the removed pages are not recoverable from the result. A page number past the end of the document is accepted and removes nothing, so check the page count with 'get_pdf_metadata' first if you are unsure how long the document is. The output is a PDF of the same name. To keep only certain pages instead use 'extract_pages_from_pdf', and to drop empty pages without naming them 'delete_blank_pages_from_pdf'.
delete_pages_from_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to delete pages from a Word document when you already have the document — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed file types: .docx, .doc. 'file_name' is the document's name including its extension. Give at least one of 'start_page', 'end_page' and 'page_numbers'; a range and 'page_numbers' can be combined in one call. Page numbers are 1-BASED: page 1 is the first page. 'start_page' alone deletes from that page to the end of the document. 'end_page' is the last page to delete, inclusive, and must not come before 'start_page'. 'page_numbers' is a string of pages and ranges, e.g. '2,4,6' or '1-3,5,7-9'; numbers past the end of the document are ignored by the API. Word pages depend on the layout, so confirm the pages with the user before calling if they have not given them exactly — deleted pages cannot be recovered from the result. The output keeps the input's name. To delete pages from a PDF, use 'delete_pages_from_pdf'.
delete_pages_from_word
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to delete rows from one sheet of an Excel workbook when you already have the workbook — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed file types: .xlsx, .xls. 'file_name' is the workbook's name including its extension. 'row_ranges' (required) lists the rows to delete as 1-BASED row numbers and inclusive ranges separated by commas, e.g. '2-4,7' deletes rows 2, 3, 4 and 7. Row 1 is the first row of the sheet, as Excel numbers it; a range must not run backwards ('4-2' is rejected), and spaces are ignored. 'worksheet_name' is the sheet to delete from, by name; omit it to use the first sheet. Confirm the rows with the user before calling if they have not given them exactly, because deleted rows cannot be recovered from the result. The output keeps the input's name. To delete whole sheets, use 'delete_worksheets_from_excel'; to read rows out without changing the workbook, use 'extract_rows_from_excel'.
delete_rows_from_excel
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to delete one or more sheets from an Excel workbook when you already have the workbook — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed file types: .xlsx, .xls. 'file_name' is the workbook's name including its extension. Name the sheets to delete in 'worksheet_names', 'worksheet_indexes', or both; at least one sheet is required. A name must match a tab name and must not contain a comma. 'worksheet_indexes' are 1-based: the first sheet is 1, and 0 or a negative number is rejected. Confirm which sheets with the user before calling if they have not named them, because deleted sheets cannot be recovered from the result. The output keeps the input's name. To copy only some sheets into a new workbook instead, use 'extract_worksheets_from_excel'; to delete rows rather than whole sheets, use 'delete_rows_from_excel'.
delete_worksheets_from_excel
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to turn off Track Changes in a Word document when you already have the document — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed file types: .docx, .doc. 'file_name' is the document's name including its extension. There are no options. PDF4me does not say whether revisions already in the document are accepted, rejected or left in place, so do not promise the user any of those — tell them to check the result. The output keeps the input's name.
disable_tracking_changes_in_word
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to pull the files ATTACHED to a PDF out of it, when you already have the PDF — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Each attachment is returned as its own download link, under the name it carries inside the PDF. A PDF with no attachments is a normal result, not an error. There are no options: the whole attachment list comes back. This returns files that travel alongside the PDF's pages, not their content. For the text and the images embedded in the pages themselves, use 'extract_resources'.
extract_attachment_from_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to read the values filled into a PDF form's fields, when you already have the PDF — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Returns no download link: the field names and their values come back in the response, so you can read them out to the user. A field left blank comes back as an empty string, and a checkbox as 'Off' or 'Yes'. Where a PDF has several fields with the same name, the repeats are suffixed '_1', '_2' and so on. A PDF with no form fields is a normal result, not an error. There are no options. This reads an interactive AcroForm's fields. For ordinary page text use 'extract_resources', and to make a filled form's values permanent page content use 'flatten_pdf'.
extract_form_data_from_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to keep only certain pages of a PDF you already have — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. It returns a new PDF containing the pages listed in page_numbers, in the document's own order, and discards every other page. page_numbers is a comma-separated list of 1-based page numbers and inclusive ranges, e.g. '1,3,5-7' for pages 1, 3, 5, 6 and 7. Ranges must run forwards ('5-7', never '7-5'), there is no page 0, and keywords such as 'all' or 'last' are not accepted here — write the numbers out. Ask the user which pages they want unless they have already said; do not guess. A page number past the end of the document is accepted and simply yields nothing for it, so check the page count with 'get_pdf_metadata' first if you are unsure how long the document is. The output is a PDF of the same name. To remove pages instead of keeping them use 'delete_pages_from_pdf', and to render pages as images 'convert_pdf_to_image'.
extract_pages_from_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to extract text and/or images from a PDF you already have — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Ask the user what to extract unless they have already said, and set extract_text and extract_images accordingly — at least one of the two must be true. Extracted text comes back in the response so you can read and use it, unless it is very long, in which case it is returned as a download link instead. Extracted images are returned as one download link per image. This pulls out content that is already in the PDF. If the user wants pictures OF the pages rather than the images embedded in them, that is 'convert_pdf_to_image' instead.
extract_resources
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to read the rows of one sheet of an Excel workbook when you already have the workbook — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed file types: .xlsx, .xls. 'file_name' is the workbook's name including its extension. Returns no download link: the rows come back in the response, so you can read them out to the user, and the workbook is not changed. When the rows are too large to include, they come back as a .json download link instead. Everything is optional; with nothing set, the first sheet is read. Each row comes back as an object keyed by header name, or 'Column{n}' for a column without one. 'worksheet_name' is the sheet to read and defaults to the first sheet; it must match the sheet's name exactly, and a name that matches no sheet is skipped without an error, so zero rows can mean a mistyped name — say so rather than reporting the sheet as empty. 'has_header_row' (default true) uses the first row as the property names. Here rows and columns are 0-BASED: row 0 is the first row and column 0 is column A. 'first_row' (default 0) and 'last_row' (default -1) bound the rows read, and 'first_column' (default 0) and 'last_column' (default -1) the columns; -1 for 'last_row' or 'last_column' reads up to the last one with data, and a first value must not come after its last. 'exclude_empty_rows' (default true) skips empty rows, 'exclude_hidden_rows' (default true) skips hidden rows, and 'exclude_hidden_columns' (default true) skips hidden columns. 'export_values_as_text' (default false) returns numbers as text. 'export_empty_cells' (default false) includes empty cells as empty strings. 'culture' (default 'en-US', e.g. 'de-DE') is the culture used to format values. To keep a sheet as a workbook of its own instead of reading it, use 'extract_worksheets_from_excel'; to read the tables in a PDF, use 'extract_table_from_pdf'.
extract_rows_from_excel
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to pull the tables out of a PDF as rows and cells, when you already have the PDF — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. The tables come back in the response — each with the page it was found on and its rows of cell values — so you can read and use them directly; if there are too many to include, they are returned as a .json download link instead. Finding no tables is a normal result, not an error. There are no options: detection cannot be tuned, and it cannot be limited to particular pages. This gives you the table data itself. To get the tables as a spreadsheet file instead, use 'convert_pdf_to_excel'.
extract_table_from_pdf
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to find the pieces of text in a PDF that match a regular expression, when you already have the PDF — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Returns no download link: the matched strings come back in the response as a flat list, so you can read and use them. Matching nothing is a normal result, not an error. 'expression' is required and is a regular expression evaluated on the server in .NET syntax, e.g. 'Invoice\s+#\d+' to pull out invoice numbers. Write the pattern yourself from what the user described; ask them only if what they want matched is unclear. 'page_sequence' is optional and limits the search to 'all', a single page such as '2', a range such as '1-3' or '7-' (page 7 to the end), or a comma-separated mix such as '1,3-5'; omit it to search every page. This returns only the matches. To get all of a PDF's text, use 'extract_resources'; for the text of a Word document, use 'extract_text_from_word'.
extract_text_by_expression
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to read the text in a picture of text — a photographed sign, a screenshot, a scanned page saved as an image — when you already have the image, either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed input file types: .jpg, .jpeg, .png, .tif, .tiff, .bmp. The text comes back in the response so you can read and use it; if it is very long it is returned as a .txt download link instead. An image holding no readable text is a normal result, not an error. 'image_type_extract' is accepted but currently has NO effect: a defect in the API means the value never reaches the recogniser, which always treats the input as JPG whatever is sent. There is no reason to set it, and setting it will not make a PNG or TIFF read any differently. This is for a standalone image. For a scanned PDF use 'ocr_pdf', which makes the PDF's own text selectable and searchable, and for the text already inside a PDF use 'extract_resources'.
extract_text_from_image
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to get the plain text of a Word document you already have — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed input file types: .docx, .doc. The text comes back in the response so you can read and use it; if it is very long it is returned as a .txt download link instead. A document with no text is a normal result, not an error. All the options are optional and every one of them defaults to off, so leaving them out reads the whole document as it stands: 'start_page_number' and 'end_page_number' limit the extraction to a page range, and 0 or omitted on either end means 'from the first page' / 'to the last page' — they are not checked against the document's real length, so a range past its end simply yields nothing; 'remove_comments' leaves the reviewers' comments out of the text; 'remove_header_footer' leaves the page headers and footers out; and 'accept_changes' reads the document with its tracked changes accepted rather than as it currently stands. Ask the user before setting any of them unless they have already said. This is for Word documents. For the text of a PDF use 'extract_resources', and to turn a Word document into a PDF use 'convert_to_pdf'.
extract_text_from_word
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to pull one or more sheets out of an Excel workbook into a new workbook of their own when you already have the workbook — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Allowed file types: .xlsx, .xls. 'file_name' is the workbook's name including its extension. Name the sheets to extract in 'worksheet_names', 'worksheet_indexes', or both; at least one sheet is required. Each name must match a tab name exactly, including case, and must not contain a comma. 'worksheet_indexes' are 1-based: the first sheet is 1, and 0 or a negative number is rejected. ALL the chosen sheets come back together in ONE new workbook, so this returns a single download link. A name that matches no sheet is skipped by the API without an error, so check the names with the user if they did not spell them out. The source workbook is not changed; the result is always an .xlsx workbook, even for an .xls input, called '<name>_extracted.xlsx', e.g. 'data_extracted.xlsx'. To read a sheet's rows as data instead, use 'extract_rows_from_excel'; to delete sheets and keep the rest, use 'delete_worksheets_from_excel'.
extract_worksheets_from_excel
FILE ACQUISITION RULE: Use a file source only if the client already supplied it. Otherwise call 'upload_file' immediately without asking the user about attachments, URLs, base64, or file-source choices. Do not ask the user to attach or upload a file in chat. Use this to fill in the fields of a fillable PDF form you already have — either as an OpenAI file, a public http(s) URL, or a base64 string. When more than one is available, use the OpenAI file first, then the public URL, then the base64 string. If none are available, call 'upload_file' instead and stop — the URL it produces reaches you from the user's next message onwards, and you pass it here as file_url. Returns a download link for the filled PDF, under the input's own name. 'form_data' is the normal way to pass the values: an object mapping each field's name to the text to put in it, e.g. {"CustomerName": "Thomas", "AgreedToTerms": "true"}. The names must match the form's own field names — call 'extract_form_data_from_pdf' first if you do not know them, and ask the user for the values rather than inventing them. 'data_array' is an alternative for a record that is already a JSON STRING, e.g. '[{"CustomerName":"Thomas"}]'; it is IGNORED whenever form_data is given, so send one or the other. Passing neither returns the form unfilled rather than an error. ONE RECORD PER CALL: the API returns only the first filled document but bills for every record sent, so fill several copies with several calls rather than one multi-record data_array. 'keep_pdf_editable' is optional: true leaves the filled fields editable, and the default false flattens them so the values become fixed page content. This fills a form that already has fields. To add a field to a PDF, use 'add_form_field_to_pdf'; to read the values already filled in, 'extract_form_data_from_pdf'; to turn a Word document into a fillable form, 'convert_word_to_pdf_form'.
fill_pdf_form
PDF4me ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve PDF4me's ChatGPT Plugin 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 PDF4me alternatives on ChatGPT?
As of 2026-11-02, PDF4me competes with Adobe Acrobat, Alpenmarketing Bildkonverter, Alpenmarketing SVG zu PNG, AnyPDF - Your PDF Converter, Ausfüllpilot, Better Analyst PDF to Excel, CloudConvert, ConvertAPI and 25 more 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.