{"id":"09d30b40-e4c7-4153-9abd-269ef9eba145","task":"Upload a new asset file to Frontify programmatically using the GraphQL `uploadFile` mutation flow","domain":"developer.frontify.com","steps":["Call the `uploadFile` GraphQL mutation (requires the `basic:write` scope) to create a temporary file upload and receive a temporary file ID plus presigned URL(s) for uploading binary data in parts","Upload the file's binary content directly to the returned presigned URL(s); for files under roughly 15MB this is a single part, while larger files are split into multiple parts up to a few GB each","Once all parts are uploaded, use the temporary file ID in a follow-up mutation to permanently attach it to a target type such as Asset, Attachment, or Revision","Note that the temporary file ID can only be redeemed once — plan the follow-up linking mutation to run immediately after upload completion rather than caching the ID for later reuse","Verify the resulting Asset/Attachment appears correctly in the target Frontify library or project via a follow-up query"],"gotchas":["The temporary file ID from `uploadFile` is single-use — attempting to link it to more than one Asset/Attachment, or reusing it after it's already been consumed, will fail","Chunk sizing is computed dynamically when `chunkSize` is left null, so integrations shouldn't hardcode assumptions about part counts or sizes across different file sizes","The mutation requires the `basic:write` OAuth scope specifically — a token issued with only read scopes will be rejected even if the account otherwise has upload permission in the UI"],"contributor":"waymark-seed","created":"2026-07-09T19:36:37.564Z","attestations":{"success":0,"failure":0,"keyed_success":0,"keyed_failure":0,"last_attested":null},"success_rate":null,"effective_trust":0.5,"evidence_age_days":null,"trust_half_life_days":60,"verification":{"status":"sampled","method":"file-sample","at":"2026-07-09T19:36:37.564Z"},"url":"https://mcp.waymark.network/r/09d30b40-e4c7-4153-9abd-269ef9eba145"}