Attest tools · Photoshop file inspector

View PSD layers without Photoshop

Read the layer tree of a sample PSD containing a background and a grouped heading.

3 credits per successful call

Input JSON

{
  "file_base64": "PSD file, 100x60, 10.9 KB, base64 in the real request"
}

Captured output JSON

{
  "input_source": "file",
  "url": null,
  "final_url": null,
  "http_status": null,
  "file_bytes": 11126,
  "format": "psd",
  "width": 100,
  "height": 60,
  "mode": "rgb",
  "bit_depth": 8,
  "channels": 4,
  "resolution": {
    "horizontal": 300,
    "horizontal_unit": "PPI",
    "vertical": 300,
    "vertical_unit": "PPI",
    "width_unit": "Inches",
    "height_unit": "Inches"
  },
  "color_profile": {
    "present": false,
    "name": null
  },
  "layers": [
    {
      "name": "Background",
      "type": "raster",
      "visible": true,
      "opacity": 1,
      "fill_opacity": null,
      "blend_mode": "normal",
      "bounds": {
        "top": 0,
        "left": 0,
        "bottom": 60,
        "right": 100,
        "width": 100,
        "height": 60
      },
      "clipping": false,
      "has_mask": false,
      "has_vector_mask": false,
      "effects": [],
      "locked": []
    },
    {
      "name": "Copy",
      "type": "group",
      "visible": true,
      "opacity": 1,
      "fill_opacity": null,
      "blend_mode": "pass through",
      "bounds": {
        "top": 0,
        "left": 0,
        "bottom": 0,
        "right": 0,
        "width": 0,
        "height": 0
      },
      "clipping": false,
      "has_mask": false,
      "has_vector_mask": false,
      "effects": [],
      "locked": [],
      "children": [
        {
          "name": "Heading",
          "type": "text",
          "visible": true,
          "opacity": 1,
          "fill_opacity": null,
          "blend_mode": "normal",
          "bounds": {
            "top": 4,
            "left": 4,
            "bottom": 4,
            "right": 4,
            "width": 0,
            "height": 0
          },
          "clipping": false,
          "has_mask": false,
          "has_vector_mask": false,
          "effects": [],
          "locked": [],
          "text_style": {
            "font_names": [
              "ArialMT"
            ],
            "font_sizes": [
              18
            ],
            "fill_colour": "#000000",
            "faux_bold": false,
            "faux_italic": false,
            "underline": false,
            "alignment": "left",
            "orientation": "horizontal",
            "shape_type": "point",
            "character_count": 10
          }
        }
      ]
    }
  ],
  "layer_count": 3,
  "layers_truncated": false,
  "text_truncated": false,
  "counts": {
    "total": 3,
    "groups": 1,
    "text": 1,
    "smart_objects": 0,
    "adjustments": 0,
    "shapes": 0,
    "raster": 1,
    "hidden": 0,
    "with_effects": 0,
    "with_mask": 0,
    "clipping": 0
  },
  "fonts": [
    "ArialMT"
  ],
  "fonts_truncated": false,
  "text_layers": [
    {
      "name": "Heading",
      "path": "Copy/Heading",
      "visible": true,
      "style": {
        "font_names": [
          "ArialMT"
        ],
        "font_sizes": [
          18
        ],
        "fill_colour": "#000000",
        "faux_bold": false,
        "faux_italic": false,
        "underline": false,
        "alignment": "left",
        "orientation": "horizontal",
        "shape_type": "point",
        "character_count": 10
      }
    }
  ],
  "smart_objects": [],
  "adjustment_layers": [],
  "guides": [
    {
      "direction": "vertical",
      "location_px": 20
    },
    {
      "direction": "horizontal",
      "location_px": 15
    }
  ],
  "grid": {
    "horizontal_px": 18,
    "vertical_px": 18
  },
  "created_with": null,
  "preview": {
    "requested": false,
    "included": false,
    "reason": null,
    "source": null,
    "format": null,
    "width": null,
    "height": null,
    "bytes": null
  },
  "limits": {
    "max_file_bytes": 6291456,
    "max_layers_returned": 5000,
    "max_text_characters_returned": 500000,
    "max_fonts_returned": 200,
    "max_preview_px": 1024,
    "max_preview_canvas_bytes": 67108864,
    "readable_color_modes": [
      "bitmap",
      "grayscale",
      "indexed",
      "rgb"
    ]
  },
  "source": "Read from the file's own Photoshop structures — the file header, the image resource blocks and the layer records — with the ag-psd reader. General information about what the file declares about itself, not a check that it opens cleanly in any particular version of Photoshop.",
  "checked_at": "2026-10-20T20:47:49.696Z"
}

API call

curl -s -X POST https://getattest.com.au/api/v1/psd/inspect \
  -H "authorization: Bearer $ATTEST_API_KEY" \
  -H "content-type: application/json" \
  --data-binary @request.json

Run this call with your own bearer key. Save the complete input as request.json, replacing file descriptions with your own base64 file content and any truncated text with the full text. Issue an API key.

About this example

The input was validated and run locally through the registered service. The output above is a display preview of the captured service result. File bytes are described instead of printed, and strings longer than 400 characters are truncated; the HTTP API also adds call_id, credits_charged and credits_remaining. Timestamps and generated identifiers will vary.

Source: apps/api/svc/psd_inspect.mjs

Tool reference and limits · API key guide