{"id":"exif-report","title":"Which GPS, serial-number and owner EXIF tags an image carries (keys only)","description":"Lists which privacy-relevant EXIF tags exist in a JPEG, TIFF, PNG (eXIf) or WebP (EXIF) image, for an agent that is about to publish, upload or forward a photo. Reports tag ids and names for GPS, body and lens serial numbers, camera owner, artist, unique image id, device, software, timestamps and thumbnails; values are never returned. Input is the image as base64 (up to 96 KiB, enough for the metadata block of a larger file). It does not decode XMP, IPTC or MakerNote contents (their presence returns unknown), does not strip metadata, and does not read pixels.","roi":"A photo posted with GPSLatitude and BodySerialNumber still in it is a doxxing incident; this names the tags before upload.","audience":"developer","package":"infra-preflight-kit","channels":["x402","mcp"],"endpoint":{"method":"POST","url":"https://agents.writerslogic.com/api/v1/exif-report","path":"/api/v1/exif-report","contentType":"application/json"},"price":{"amount":"0.005","currency":"USDC","network":"base","perCall":true,"failedCallsCharged":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"string","maxLength":131072,"description":"Padded base64 of the image file or its first 96 KiB (the metadata block must be inside it)."},"forbid":{"type":"array","maxItems":11,"items":{"type":"string","enum":["gps","serial","owner","unique-id","device","software","datetime","description","makernote","thumbnail","copyright"]},"description":"Categories whose presence fails the check. Default gps, serial, owner."}}},"resultSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"container":{"type":"string","enum":["jpeg","tiff","png","webp","unknown"]},"bytesChecked":{"type":"integer"},"byteOrder":{"anyOf":[{"type":"string","enum":["little","big"]},{"type":"null"}],"description":"null when no Exif block was found."},"exifFound":{"type":"boolean"},"tags":{"type":"array","description":"Up to 256 tag keys {ifd, id, name, category}; name is null for tags outside the Exif 2.3 tables.","items":{"type":"object","properties":{"ifd":{"type":"string"},"id":{"type":"integer"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Spec name or null."},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Editorial privacy category or null."}}}},"categories":{"type":"array","items":{"type":"string"}},"gps":{"type":"object","properties":{"present":{"type":"boolean"},"hasPosition":{"type":"boolean","description":"Both GPSLatitude and GPSLongitude exist."},"tagNames":{"type":"array","items":{"type":"string"}}}},"serial":{"type":"array","items":{"type":"string"}},"owner":{"type":"array","items":{"type":"string"}},"unknownTagIds":{"type":"array","items":{"type":"integer"}},"opaque":{"type":"object","properties":{"xmp":{"type":"boolean"},"iptc":{"type":"boolean"},"icc":{"type":"boolean"},"makerNote":{"type":"boolean"},"thumbnailIfd":{"type":"boolean"}}},"malformed":{"type":"array","items":{"type":"string"}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"outputSchema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"container":{"type":"string","enum":["jpeg","tiff","png","webp","unknown"]},"bytesChecked":{"type":"integer"},"byteOrder":{"anyOf":[{"type":"string","enum":["little","big"]},{"type":"null"}],"description":"null when no Exif block was found."},"exifFound":{"type":"boolean"},"tags":{"type":"array","description":"Up to 256 tag keys {ifd, id, name, category}; name is null for tags outside the Exif 2.3 tables.","items":{"type":"object","properties":{"ifd":{"type":"string"},"id":{"type":"integer"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Spec name or null."},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Editorial privacy category or null."}}}},"categories":{"type":"array","items":{"type":"string"}},"gps":{"type":"object","properties":{"present":{"type":"boolean"},"hasPosition":{"type":"boolean","description":"Both GPSLatitude and GPSLongitude exist."},"tagNames":{"type":"array","items":{"type":"string"}}}},"serial":{"type":"array","items":{"type":"string"}},"owner":{"type":"array","items":{"type":"string"}},"unknownTagIds":{"type":"array","items":{"type":"integer"}},"opaque":{"type":"object","properties":{"xmp":{"type":"boolean"},"iptc":{"type":"boolean"},"icc":{"type":"boolean"},"makerNote":{"type":"boolean"},"thumbnailIfd":{"type":"boolean"}}},"malformed":{"type":"array","items":{"type":"string"}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]},"example":{"data":"/9j/4QBeRXhpZgAASUkqAAgAAAADAA8BAgABAAAAWAAAAGmHBAABAAAAMgAAACWIBAABAAAARAAAAAAAAAABADGkAgAEAAAAMTIzNAAAAAABAAEAAgACAAAATgAAAAAAAAD/2Q=="},"openapiOperation":{"operationId":"exif_report","summary":"Which GPS, serial-number and owner EXIF tags an image carries (keys only)","description":"Lists which privacy-relevant EXIF tags exist in a JPEG, TIFF, PNG (eXIf) or WebP (EXIF) image, for an agent that is about to publish, upload or forward a photo. Reports tag ids and names for GPS, body and lens serial numbers, camera owner, artist, unique image id, device, software, timestamps and thumbnails; values are never returned. Input is the image as base64 (up to 96 KiB, enough for the metadata block of a larger file). It does not decode XMP, IPTC or MakerNote contents (their presence returns unknown), does not strip metadata, and does not read pixels.\n\nPrice: 0.005 USDC on Base (x402).","x-x402-price-usdc":"0.005","x-x402-amount":"5000","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"x-audience":"developer","x-sample-url":"https://agents.writerslogic.com/api/v1/samples/exif-report","security":[{"x402":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["data"],"properties":{"data":{"type":"string","maxLength":131072,"description":"Padded base64 of the image file or its first 96 KiB (the metadata block must be inside it)."},"forbid":{"type":"array","maxItems":11,"items":{"type":"string","enum":["gps","serial","owner","unique-id","device","software","datetime","description","makernote","thumbnail","copyright"]},"description":"Categories whose presence fails the check. Default gps, serial, owner."}}},"example":{"data":"/9j/4QBeRXhpZgAASUkqAAgAAAADAA8BAgABAAAAWAAAAGmHBAABAAAAMgAAACWIBAABAAAARAAAAAAAAAABADGkAgAEAAAAMTIzNAAAAAABAAEAAgACAAAATgAAAAAAAAD/2Q=="}}}},"responses":{"200":{"description":"Paid result with provenance","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"container":{"type":"string","enum":["jpeg","tiff","png","webp","unknown"]},"bytesChecked":{"type":"integer"},"byteOrder":{"anyOf":[{"type":"string","enum":["little","big"]},{"type":"null"}],"description":"null when no Exif block was found."},"exifFound":{"type":"boolean"},"tags":{"type":"array","description":"Up to 256 tag keys {ifd, id, name, category}; name is null for tags outside the Exif 2.3 tables.","items":{"type":"object","properties":{"ifd":{"type":"string"},"id":{"type":"integer"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Spec name or null."},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Editorial privacy category or null."}}}},"categories":{"type":"array","items":{"type":"string"}},"gps":{"type":"object","properties":{"present":{"type":"boolean"},"hasPosition":{"type":"boolean","description":"Both GPSLatitude and GPSLongitude exist."},"tagNames":{"type":"array","items":{"type":"string"}}}},"serial":{"type":"array","items":{"type":"string"}},"owner":{"type":"array","items":{"type":"string"}},"unknownTagIds":{"type":"array","items":{"type":"integer"}},"opaque":{"type":"object","properties":{"xmp":{"type":"boolean"},"iptc":{"type":"boolean"},"icc":{"type":"boolean"},"makerNote":{"type":"boolean"},"thumbnailIfd":{"type":"boolean"}}},"malformed":{"type":"array","items":{"type":"string"}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]}}}},"400":{"description":"Invalid request (no payment consumed)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Invalid X-API-KEY","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Payment required or invalid","content":{"application/json":{"schema":{"type":"object","description":"x402 v2 PaymentRequired (also base64 in the PAYMENT-REQUIRED header)","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"code":{"type":"string"},"resource":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}},"extensions":{"type":"object"}}}}}},"502":{"description":"Upstream failure; the payment is released or not settled","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"links":{"docs":"https://agents.writerslogic.com/docs/exif-report/","docsJson":"https://agents.writerslogic.com/docs/exif-report.json","sample":"https://agents.writerslogic.com/api/v1/samples/exif-report","openapi":"https://agents.writerslogic.com/openapi.json","catalog":"https://agents.writerslogic.com/api/v1/catalog","verifyProvenance":"https://agents.writerslogic.com/api/v1/verify-provenance","index":"https://agents.writerslogic.com/docs/index.json"}}