{"name":"GoBrief Brief Format","version":"1.0.0","schema":"https://gobrief.co/.well-known/gobrief-spec.json","human":"https://gobrief.co/spec","verify":"https://gobrief.co/api/spec/verify","license":{"name":"CC0-1.0","url":"https://creativecommons.org/publicdomain/zero/1.0/","note":"The format is dedicated to the public domain so any tool can implement it."},"maintained_by":{"name":"GoBrief","homepage":"https://gobrief.co","contact":"spec@gobrief.co"},"schema_inline":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://gobrief.co/.well-known/gobrief-spec.json","title":"GoBrief Brief","description":"A portable representation of a GoBrief brief: a verified, signed, spec-declared collection or delivery between two parties.","type":"object","required":["format","version","id","direction","sender","placements"],"additionalProperties":false,"properties":{"format":{"const":"gobrief.brief","description":"Literal identifier. Must equal \"gobrief.brief\" to be treated as a spec-compliant brief."},"version":{"type":"string","description":"Semantic version of the GoBrief Brief Format used.","examples":["1.0.0"]},"id":{"type":"string","description":"Opaque, globally unique identifier for this brief. Not a URL; use `links.canonical` for the human-shareable URL.","minLength":1},"direction":{"type":"string","enum":["collect","deliver"],"description":"Whether the brief collects assets from the recipient (collect) or delivers assets to the recipient (deliver)."},"name":{"type":"string","description":"Human-readable brief title. Max 120 characters.","maxLength":120},"description":{"type":"string","description":"Optional one-paragraph context. Max 1000 characters.","maxLength":1000},"sender":{"type":"object","required":["name"],"additionalProperties":false,"properties":{"name":{"type":"string","description":"Display name of the sending organization."},"domain":{"type":"string","description":"DNS-verifiable domain of the sender, if any."},"contactEmail":{"type":"string","format":"email"}}},"recipient":{"type":"object","description":"The party the brief is scoped to. Omitted for multi-recipient public status artifacts.","additionalProperties":false,"properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"org":{"type":"string"}}},"placements":{"type":"array","description":"The list of things to collect or deliver. One entry per asset.","minItems":1,"items":{"type":"object","required":["id","name","mediaType"],"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"mediaType":{"type":"string","enum":["image","vector","video","audio","text","pdf","bundle"]},"specHuman":{"type":"string","description":"Plain-English specification, e.g. \"8.5 x 11 in PDF, CMYK, 300 dpi, 50 MB max\"."},"spec":{"type":"object","description":"Machine-readable specification. Implementations SHOULD validate uploads against these fields before transmitting.","additionalProperties":true,"properties":{"mediaType":{"type":"string","enum":["image","vector","video","audio","text","pdf","bundle"]},"width":{"type":"number"},"height":{"type":"number"},"minWidth":{"type":"number"},"minHeight":{"type":"number"},"dpi":{"type":"number"},"minDpi":{"type":"number"},"colorSpace":{"type":"string","enum":["RGB","CMYK","grayscale"]},"formats":{"type":"array","items":{"type":"string"}},"maxSizeMb":{"type":"number"},"minDurationSec":{"type":"number"},"maxDurationSec":{"type":"number"},"orientation":{"type":"string","enum":["horizontal","vertical","square"]},"aspectRatio":{"type":"number"},"maxCharacters":{"type":"number"},"requireVector":{"type":"boolean"},"trimWidth":{"type":"number"},"trimHeight":{"type":"number"}}},"required":{"type":"boolean","description":"Whether this placement is required to complete the brief.","default":true}}}},"deadline":{"type":"string","format":"date-time","description":"Optional ISO 8601 deadline for completion."},"embargo":{"type":"object","description":"Optional publication embargo, used primarily for DELIVER briefs.","additionalProperties":false,"properties":{"liftsAt":{"type":"string","format":"date-time"},"note":{"type":"string"}}},"privacy":{"type":"object","description":"Machine-readable privacy posture. Implementations SHOULD surface these to recipients before upload.","additionalProperties":false,"properties":{"aiTraining":{"type":"boolean","description":"Whether uploads may be used to train AI models.","default":false},"trackingPixels":{"type":"boolean","description":"Whether the intake surface loads third-party tracking pixels.","default":false},"marketingEmail":{"type":"boolean","description":"Whether the sender will send unsolicited marketing email to the recipient.","default":false},"pullbackHours":{"type":"number","description":"How many hours the recipient has to withdraw an upload after submission. 0 = no pullback.","minimum":0},"retentionAfterCloseDays":{"type":"number","description":"How many days uploads are retained after the brief is closed. 0 = deleted immediately.","minimum":0}}},"links":{"type":"object","description":"Canonical and alternate URLs for this brief.","additionalProperties":false,"required":["canonical"],"properties":{"canonical":{"type":"string","format":"uri","description":"The canonical GoBrief short-link. SHOULD take the form https://<host>/b/<token>."},"publicStatus":{"type":"string","format":"uri","description":"If the sender has enabled a public status artifact, the URL for it."}}},"signature":{"type":"object","description":"Optional detached signature over the canonical JSON representation of this object (excluding this field). Implementations SHOULD verify.","additionalProperties":false,"required":["alg","value"],"properties":{"alg":{"type":"string","enum":["HS256","RS256","ES256"]},"keyId":{"type":"string"},"value":{"type":"string"}}}}}}