PassportCraft
By PassportCraft LLC
Overview
Create digital product passports from ChatGPT. Describe a product, share the documents you have, and PassportCraft creates a draft passport in your workspace and tells you what's still missing. PassportCraft is for brands, manufacturers and importers selling into the EU, and for the agencies that prepare passports for them. Battery passports are due from 18 February 2027 under the EU Battery Regulation (EU) 2023/1542, for e-bike and e-scooter batteries, industrial batteries above 2 kWh and EV batteries. Textiles and the other ESPR product groups follow as their delegated acts are adopted. Each passport is a public page for the product that opens when someone scans its QR code. When the product has a GTIN, that QR code is a GS1 Digital Link. What you can do from the chat: - Create a passport from the product details and documents you share. It always starts as a draft. - Check a draft and see which fields still need filling before it can be published. - Read your catalogue, drafts and published passports. - Attach certificates, test reports and declarations of conformity from your document library. - Add sizes and colours with their GTIN barcodes under one passport. - Record serial numbers against a battery model. - Send a finished draft for publishing approval, then check on the request. - Propose a change to a published passport for your team to approve. Things you can ask: "Create passports for the twelve styles in this line sheet." "Which of my drafts are still missing a recycled-content figure?" "Attach this mill certificate to the SKU 4471 draft." "Record these ten serial numbers against the 48 V e-bike battery." ChatGPT can't publish a passport. You read what it wrote and press Publish yourself. ChatGPT can propose changes to a public passport. The page changes only when someone in your workspace approves them. There is one exception. ChatGPT can record serial numbers against a battery model you've already published. They can appear on the public page right away, without anyone approving them. Connect your PassportCraft account to get started. No account yet? You can create one when you connect.
Tools
attach_document
ChatGPTcreate_passport
ChatGPTedit_url, the address where the person opens the draft. A successful answer says created: true. Some failed answers come after the draft was made, so a failure alone does not show that nothing exists. Within 30 days, a request identical to an earlier one makes nothing new: it returns the product that request made, and the answer says created: false. That is not a failure: the product exists. Such a request can make a second product holding the same values only when it carries confirm_duplicate: true, which means the person was asked whether they want one and said yes. A value the person did not give, added only to make a request differ, still leaves them two copies of one product. After a failed call, only an exact repeat is recognised as the same request. A repeat that rewords any value is a new request, and can leave the person two products that look identical with nothing to tell them apart.create_unit
ChatGPTqr_target, exactly what that battery's printed QR code encodes; list_units gives it for every unit.get_category_schema
ChatGPTrequired_when beside required: that names another field and the values that make it apply, so a field required of one product is not required of another. Read the pair before telling a person a field is missing. Read list_custom_fields too for the workspace's own fields.get_passport
ChatGPTget_proposal
ChatGPTget_publish_approval
ChatGPTpending with an expires_at already in the past, that is one PassportCraft could not close on its own — reading it here closes it, and then you can ask again. There is no decline button in PassportCraft. Leaving the request alone is how a person turns it down: it expires by itself seven days after it was made. A change you make to the draft also withdraws it, but only when it CHANGES something — re-sending the same values withdraws nothing. Attaching a document the draft does not already carry, or sending a new file, withdraws it too — so do not add files to a draft while a request is waiting unless the person asked you for that file.list_custom_fields
ChatGPTlist_documents
ChatGPThas_more is true, follow next_cursor to the end before you tell anyone that something is not there.list_library
ChatGPTlibrary_url, which opens it. Give that address to the person. The answer is ONE PAGE, not the whole set. If has_more is true, follow next_cursor to the end before you tell anyone that something is not there. That matters most here: deciding a file is absent from one page is what produces the duplicate this tool exists to prevent.list_passports
ChatGPThas_more is true, follow next_cursor to the end before you tell anyone that something is not there. Narrow with category or status before you walk it: every row carries the whole product, so paging a large catalogue to answer one question is slow for the person waiting.list_unit_readings
ChatGPTlist_units
ChatGPThas_more is true, follow next_cursor to the end before you tell anyone that something is not there. A model may carry thousands of serials, so DO NOT page looking for one: to check whether a single serial is recorded, pass unit_serial and let the route find it in one call. Each unit carries qr_target: exactly what that battery's printed QR code encodes. Each battery gets its own code. Hand over each battery's qr_target, never the passport's address, as the code to print on it.list_variants
ChatGPThas_more is true, follow next_cursor to the end before you tell anyone that something is not there. Pass gtin to find one exact customer-supplied barcode. This establishes current state; an earlier add response does not.propose_changes
ChatGPTrequest_publish
ChatGPTupdate_passport
ChatGPTupload_document
ChatGPTcontent_base64. READ THIS BEFORE SENDING ANYTHING. You do not transfer this file — you TYPE it, character by character, as part of this call. MEASURED ON A REAL CONNECTION: about 22 bytes of file a second. A 15 KB photograph took eight minutes. 30 KB takes over twenty. 1 MB would take half a day. The 3 MB the server would accept is unreachable through this door, and a smaller limit would not help — the RATE is the cost, not the size. SO THE PERSON UPLOADS IT, NOT YOU, FOR EVERYTHING EXCEPT A SMALL PICTURE. They already have the file. A passport you read ON ITS OWN carries add_photo_url and add_document_url — give them the one that fits. A passport in a LIST does not carry them, because nobody adds a file to a hundred products at once: read that one passport and the addresses come with it. DO NOT BUILD EITHER ADDRESS YOURSELF: they open the right part of the editor, and an address you assemble opens the wrong one. Each takes about 4 MB, re-encodes nothing, and is done in seconds. Name the file you mean. That is the FIRST thing to offer, not the fallback. IF YOU DO SEND IT YOURSELF, SAY SO FIRST AND SAY HOW LONG. A person watching a chat sit still for eight minutes cannot tell working from broken, and several have assumed it was broken. Tell them roughly how long it will take and let them choose the faster way. AIM FOR UNDER 30 KB, and treat that as the number to act on rather than as a preference. A photograph at about 640 pixels on its longest edge, saved as JPEG at quality 70, lands under 30 KB for ordinary product shots and at about 47 KB for a densely detailed one — measured. Check the size ONCE. If it is over 30 KB, halve the longest edge and send that without checking again. Do not hunt for the smallest possible file; the search costs more time than the bytes it saves. This copy is a working image, not the one a public page deserves — when a brand wants a good photograph on the published product, a person uploads it in the app at full size. NEVER re-encode anything a person will need to READ — a supplier declaration, a specification sheet, a photograph of a care label. Shrinking those destroys the small print, and what we store is meant to be the evidence they can open later, not a copy we degraded. Send such a file as it came; if it is too large for this channel, do not send a worse version — a person can add it themselves in the editor, where the limit is about 4 MB and nothing is re-encoded. Give them this passport’s add_document_url, and say which file you mean. If you DO re-encode a photograph, say image/jpeg, or the upload is refused for not being the type it claims; naming the file .jpg as well is a courtesy to whoever reads the library later. A PICTURE INSIDE A FILE THEY GAVE YOU — a product photograph printed in a datasheet — is worth OFFERING, because they have the datasheet and do not have the picture. This is the ONE exception to never re-encoding a specification sheet, and it is narrow: you are taking the photograph out of it, not shrinking the sheet. The sheet itself still goes as it came, or not at all. Offer it; do not do it unasked. If they say yes, send it yourself with this tool, so it is recorded as yours and named to whoever publishes. Do NOT hand it to them to upload: a file a person uploads is taken as theirs, and this one is not. Send ONLY the picture itself, cropped to it — never a whole page. A page of a datasheet is a page of small print, and shrinking that to fit destroys the thing that makes it worth keeping, which the rule above forbids. Send it as type: image, or it is filed as paperwork and nobody finds it among the photos. Say where it came from and do not present it as the manufacturer’s own photograph — pulling a picture out of a document often redraws it rather than copying it, so it can differ from the original in ways neither of you can see. And say what it is FOR: a wo…validate_passport
ChatGPTwithdraw_proposal
ChatGPTadd_variants
Claudeattach_document
Claudecreate_passport
Claudecreate_unit
Claudeget_category_schema
Claudeget_passport
Claudeget_proposal
Claudeget_publish_approval
Claudelist_custom_fields
Claudelist_documents
Claudelist_library
Claudelist_passports
Claudelist_unit_readings
Claudelist_units
Claudelist_variants
Claudepropose_changes
Clauderequest_publish
Claudeupdate_passport
Claudeupload_document
Claudevalidate_passport
Claudewithdraw_proposal
ClaudeCapabilities
Example Prompts
Click any prompt to copy it.






