Manifest Response Reference (V2)
This guide documents the current /v2/generate-manifest response schema, layer type by layer type. Unlike the Manifest Response Migration guide, this is not a V1-to-V2 comparison — it describes the V2 schema as it stands today, independent of what came before. Sections are added as layer types are verified against live manifest output.
Gradient Layer
A gradient fill layer is returned with "type": "gradient_layer". It carries all the common per-layer fields (id, bounds/frame data, blendOptions, masks, etc. — see Per-Layer Common Fields) plus a gradient-specific fill object.
Full layer example
{
"id": 24,
"name": "Gradient Fill 1",
"type": "gradient_layer",
"index": 12,
"visible": true,
"protection": ["none"],
"linked": [],
"userMask": {
"density": 100,
"feather": 0
},
"vectorMask": null,
"proportionalScaling": false,
"layerSettings": {
"enabled": true
},
"effects": {},
"pixelMask": null,
"blendOptions": {
"opacity": 100,
"blendMode": "normal",
"clipped": true,
"interior": false,
"fillOpacity": 100,
"pixelMaskAsGlobalMask": false,
"vectorMaskAsGlobalMask": false,
"transparencyShapesLayer": true,
"knockout": "none",
"channelRestrictions": [],
"blendRanges": []
},
"compositeFrame": {
"absolute": { "left": 0, "top": 0, "right": 2100, "bottom": 1500 },
"relative": { "left": 0, "top": 0, "right": 2100, "bottom": 1500 }
},
"referenceFrame": { "left": 0, "top": 0, "right": 0, "bottom": 0 },
"compositeDimensions": { "left": 0, "top": 0, "right": 2100, "bottom": 1500 },
"rotation": 0,
"fill": {
"type": "linear",
"align": true,
"angle": 90,
"dither": false,
"reverse": false,
"scale": 100,
"gradientAspectRatio": 1,
"interpolationMethod": "smooth",
"noisePreSeed": 10012,
"offset": { "horizontal": 0, "vertical": 0 },
"gradient": {
"type": "customStops",
"value": {
"gradientName": "Color to Transparent",
"colorStops": [
{
"type": "user_stop",
"location": 0,
"midpoint": 50,
"color": { "mode": "rgb", "depth": 16, "components": [26985, 2858, 2858] }
},
{
"type": "user_stop",
"location": 4096,
"midpoint": 50,
"color": { "mode": "rgb", "depth": 16, "components": [26985, 2858, 2858] }
}
],
"transparencyStops": [
{ "location": 0, "midpoint": 50, "opacity": 100 },
{ "location": 4096, "midpoint": 50, "opacity": 0 }
],
"interpolation": 4096
}
}
}
}
Common per-layer fields (as seen on this layer)
Field
Type
Notes
idnumber
Unique layer ID
namestring
Layer name as set in Photoshop
typestring
Always
"gradient_layer" for this typeindexnumber
Stacking position
visibleboolean
Layer visibility
protectionarray
e.g.
["none"], ["all"], ["position"]linkedarray
Linked layer references
userMaskobject
{density, feather} — user mask statevectorMaskobject or null
{hasMask, bounds} when presentproportionalScalingboolean
Lock aspect ratio during transform
layerSettingsobject
Rich settings block;
{enabled} at minimumeffectsobject
Layer effects container (empty object when none applied)
pixelMaskobject or null
null when the layer has no pixel maskblendOptionsobject
{opacity, blendMode, clipped, interior, fillOpacity, pixelMaskAsGlobalMask, vectorMaskAsGlobalMask, transparencyShapesLayer, knockout, channelRestrictions, blendRanges}compositeFrameobject
{absolute: {left,top,right,bottom}, relative: {left,top,right,bottom}}referenceFrameobject
{left,top,right,bottom} — untransformed layer content boundscompositeDimensionsobject
{left,top,right,bottom} — enclosing artboard/document boundsrotationnumber
Layer rotation in degrees
fill — gradient-specific fields
Field
Type
Notes
fill.typestring
Gradient style, e.g.
"linear"fill.alignboolean
Aligns gradient with layer bounds
fill.anglenumber
Gradient angle in degrees
fill.ditherboolean
Dithering enabled
fill.reverseboolean
Reverses gradient direction
fill.scalenumber
Gradient scale percentage
fill.gradientAspectRationumber
Aspect ratio for angle gradients
fill.interpolationMethodstring
e.g.
"smooth"fill.noisePreSeednumber
Seed used for noise gradients
fill.offset.horizontal / fill.offset.verticalnumber
Gradient offset from the layer origin
fill.gradient.typestring
Gradient definition type, e.g.
"customStops"fill.gradient.value.gradientNamestring
Named gradient preset, if any
fill.gradient.value.colorStops[]array
Color stop list
colorStops[].typestring
e.g.
"user_stop"colorStops[].locationnumber
Stop position (0–4096)
colorStops[].midpointnumber
Midpoint between adjacent stops (0–100)
colorStops[].colorobject
{mode, depth, components[]}fill.gradient.value.transparencyStops[]array
Opacity stop list
transparencyStops[].location / .midpoint / .opacitynumber
Same stop shape as color stops, plus
opacity (0–100)fill.gradient.value.interpolationnumber
Gradient interpolation/smoothing value
data-variant=warning
data-slots=text
colorStops[].color uses a depth-scaled component range rather than named RGB channels: {"mode": "rgb", "depth": 16, "components": [red, green, blue]}, where each component is scaled to the given bit depth (e.g. depth 16 → range 0–32768). This matches the color range convention used elsewhere in the V2 API (see font color fields).