About 10 minutes

ChatGPT Canvas to BinHTML

Turn HTML drafted in ChatGPT Canvas into a link that opens outside the assistant, with visibility controls, expiry, and version history.

Do not migrate if

Migrating has a cost and it is not always worth paying. If one of these describes your situation, stay where you are.

  • You are still drafting and the canvas is where the editing happens.
  • The built-in share link already reaches everyone who needs it.
  • The output is disposable.

Before you start

  • A BinHTML account and an API key.
  • The canvas content exported as a complete HTML document.
  • A check of what is actually in the document before it leaves your machine.

Steps

  1. 01

    Export a complete document

    Canvas content is often a fragment. Make sure what you export has a doctype, a head, and everything it needs inline, because the artifact is rendered as a standalone document with nothing added around it.

  2. 02

    Read it before you publish it

    Assistant output can carry text from files or pages you fed into the conversation. Scan for anything that should not leave your account. This is the step most people skip and later regret.

  3. 03

    Publish it

    One call returns the share URL. Use unlisted for a normal handoff, or private on Pro when the document should only open for you.

    Publish the exported HTML

    Language: bash. Replace $BINHTML_API_KEY with a key from your settings.

    # Reads report.html from disk, publishes it, prints the share URL.
    jq -n \
      --arg title "Weekly report" \
      --rawfile html ./report.html \
      '{title: $title, visibility: "unlisted", sourceHtml: $html}' \
    | curl -sS -X POST https://binhtml.com/api/v1/artifacts \
        -H "Authorization: Bearer $BINHTML_API_KEY" \
        -H "Content-Type: application/json" \
        -d @- \
    | jq -r '.urls.share'
  4. 04

    Re-publish as the draft evolves

    When the next revision comes out of the canvas, post it as a new version against the same artifact. Reviewers keep the link they already have.

    Publish a revision

    Language: bash. Replace $BINHTML_API_KEY with a key from your settings.

    # Same artifact, new content. The share URL does not change.
    jq -n \
      --arg label "$(date -u +%Y-%m-%d)" \
      --rawfile html ./report.html \
      '{label: $label, sourceHtml: $html}' \
    | curl -sS -X POST "https://binhtml.com/api/v1/artifacts/$ARTIFACT_ID/versions" \
        -H "Authorization: Bearer $BINHTML_API_KEY" \
        -H "Content-Type: application/json" \
        -d @-

Verify the migration

Work through these before you remove anything from the old tool. A migration is finished when someone other than you has opened the new link successfully.

  • The document renders standalone in a private browsing window.
  • Styles and any interactive elements survived the export.
  • Nothing in the published output should have stayed private.

Known gotchas

Fragments render badly

A canvas that produced a body fragment will look unstyled as a standalone document. Wrap it properly before publishing.

The conversation is not the artifact

Sharing the artifact link shares the document only. If the reasoning around it matters, put a summary inside the HTML.

Questions about this migration

How do I migrate from ChatGPT Canvas to BinHTML?

Export the canvas HTML and publish it as an artifact so the recipient opens a plain URL rather than the assistant.

How long does migrating from ChatGPT Canvas take?

About 10 minutes. The steps on this page cover creating an API key, publishing one document to confirm the output, switching repeat publishing to version updates, and verifying the result before you retire the old links.

When should I not migrate from ChatGPT Canvas?

You are still drafting and the canvas is where the editing happens. The built-in share link already reaches everyone who needs it. The output is disposable.

Will the share link change when the content is updated?

No. Publishing a new version against an existing artifact id updates the content behind the same URL, so anyone already holding the link keeps working access.

Next steps