submit_receipt
Submit a photo or PDF of a receipt for processing. Covers 'log this', 'save this receipt', 'expense this', 'add this to my expenses', including when the user simply shares a photo of a receipt or invoice. The file is validated, uploaded and processed by AI to extract vendor, amount, date, tax and category. The expense appears in the spreadsheet in about 1-3 minutes, longer for PDFs or large batches. Handles images and PDFs mixed in one batch.
TO SEND FILES (preferred, and required for PDFs): call this tool with filesToUpload listing every file the user gave you. It returns one signed upload URL per file. Upload them ONE AT A TIME with an HTTP PUT, telling the user which file you just finished and how many remain, then call this tool ONCE with uploadRefs for all of them to process the whole set as a single batch. Do not call this tool once per file.
Use the photo parameter for one image or PDF attached in ChatGPT. Clients that cannot supply file references may use photoBase64 for one small image; use the upload flow for large files or batches.
Optional note and tag use the same metadata path as ExpenseBot's camera, uploader and forwarded-email intake: note goes to Notes (column L), tag to Tag (column K). Batch defaults apply to every file; each uploadRefs item may override either value.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Batch-level project or client tag for every row; a file may override it. Stored in the Tag column (K). | |
| note | No | Batch-level note for every file; a file may override it. Stored in the Notes column (L). | |
| photo | No | Single attached receipt image or PDF supplied by ChatGPT. For multiple files or large files, use filesToUpload and uploadRefs instead. | |
| filename | No | Optional filename (e.g., 'lunch_receipt.jpg') | |
| mimeType | No | MIME type of the file (default: image/jpeg) | |
| uploadRef | No | Single-file shorthand for uploadRefs. Use uploadRefs when there is more than one file. | |
| uploadRefs | No | Submit previously uploaded files as ONE batch: every uploadRef from the filesToUpload step. If any file fails validation the whole batch is rejected and nothing is processed. | |
| photoBase64 | No | Legacy fallback for MCP clients that send one small image as complete base64 data. ChatGPT should use photo or uploadRefs instead. | |
| filesToUpload | No | Request upload URLs for every file the user provided, in one call. Returns a signedUrl + uploadRef per file; upload each, then call again with uploadRefs. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| data | No | ||
| files | No | ||
| status | No | ||
| message | No | ||
| success | Yes | ||
| fileCount | No | ||
| statusCode | No | ||
| submissionId | No | ||
| spreadsheetUrl | No | ||
| reviewExpensesUrl | No |