{
  "info": {
    "name": "Mockups Generator automation",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": "Configure locally, then run individual requests. Do not run all paid operations automatically. /api/auth/me contains signing secrets: do not export its response."
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{api_key}}",
        "type": "string"
      }
    ]
  },
  "variable": [
    {
      "key": "base_url",
      "value": "https://web.mockupsgenerator.com"
    },
    {
      "key": "api_key",
      "value": ""
    },
    {
      "key": "template_id",
      "value": ""
    },
    {
      "key": "slot_id",
      "value": ""
    },
    {
      "key": "asset_id",
      "value": ""
    },
    {
      "key": "folder_id",
      "value": ""
    },
    {
      "key": "job_id",
      "value": ""
    },
    {
      "key": "bulk_job_id",
      "value": ""
    },
    {
      "key": "plan_id",
      "value": ""
    },
    {
      "key": "plan_hash",
      "value": ""
    },
    {
      "key": "run_key",
      "value": "REPLACE_SOURCE_RECORD_AND_ARTWORK_VERSION"
    }
  ],
  "item": [
    {
      "name": "Account usage",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/auth/me",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Workspace overview",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/dashboard",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Templates",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/templates",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Template detail",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/templates/{{template_id}}",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Assets",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/assets?limit=100&offset=0",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Asset folders",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/assets/folders",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Output profiles",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/public/output-profiles",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Submit render",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Idempotency-Key",
            "value": "{{run_key}}"
          }
        ],
        "url": "{{base_url}}/api/v1/render-jobs",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"template_id\": \"{{template_id}}\",\n  \"options\": {\n    \"format\": \"png\",\n    \"mode\": \"full\",\n    \"slots\": {\n      \"{{slot_id}}\": {\n        \"asset_id\": \"{{asset_id}}\",\n        \"fit\": \"contain\"\n      }\n    }\n  }\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "if (pm.response.code === 202) { const body = pm.response.json(); if (body.id) pm.collectionVariables.set('job_id', body.id); }"
            ]
          }
        }
      ]
    },
    {
      "name": "Render status",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/render-jobs/{{job_id}}",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Download image",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/render-jobs/{{job_id}}/result",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Cancel render",
      "request": {
        "method": "POST",
        "header": [],
        "url": "{{base_url}}/api/v1/render-jobs/{{job_id}}/cancel",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Retry render",
      "request": {
        "method": "POST",
        "header": [],
        "url": "{{base_url}}/api/v1/render-jobs/{{job_id}}/retry",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Collection preflight",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{base_url}}/api/v1/bulk-jobs/preflight",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"templates\": [\n    {\n      \"id\": \"{{template_id}}\",\n      \"role_slots\": {\n        \"artwork\": [\n          \"{{slot_id}}\"\n        ]\n      }\n    }\n  ],\n  \"design_sets\": [\n    {\n      \"roles\": {\n        \"artwork\": \"{{asset_id}}\"\n      }\n    }\n  ],\n  \"options\": {\n    \"format\": \"png\"\n  }\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Reviewed plan",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/bulk-jobs/plans/{{plan_id}}",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Sample reviewed plan",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{base_url}}/api/v1/bulk-jobs/sample",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"plan_id\": \"{{plan_id}}\",\n  \"plan_hash\": \"{{plan_hash}}\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Submit reviewed collection",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{base_url}}/api/v1/bulk-jobs",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"plan_id\": \"{{plan_id}}\",\n  \"plan_hash\": \"{{plan_hash}}\",\n  \"idempotency_key\": \"{{run_key}}\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      },
      "event": [
        {
          "listen": "test",
          "script": {
            "type": "text/javascript",
            "exec": [
              "if (pm.response.code === 202) { const body = pm.response.json(); if (body.id) pm.collectionVariables.set('bulk_job_id', body.id); }"
            ]
          }
        }
      ]
    },
    {
      "name": "Collection status",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/bulk-jobs/{{bulk_job_id}}",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Download collection",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/bulk-jobs/{{bulk_job_id}}/result",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Retry collection",
      "request": {
        "method": "POST",
        "header": [],
        "url": "{{base_url}}/api/v1/bulk-jobs/{{bulk_job_id}}/retry",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Saved projects",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/projects",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Placement presets",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/presets",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "AI models",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/ai/models",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Webhook deliveries",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/webhook-deliveries",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Free editor preview",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{base_url}}/api/v1/templates/{{template_id}}/editor-render",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"options\": {\n    \"format\": \"png\",\n    \"mode\": \"full\",\n    \"slots\": {\n      \"{{slot_id}}\": {\n        \"asset_id\": \"{{asset_id}}\",\n        \"fit\": \"contain\"\n      }\n    }\n  },\n  \"store\": false\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Submit editor export",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          },
          {
            "key": "Idempotency-Key",
            "value": "{{run_key}}"
          }
        ],
        "url": "{{base_url}}/api/v1/templates/{{template_id}}/editor-export",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"options\": {\n    \"format\": \"png\",\n    \"mode\": \"full\",\n    \"slots\": {\n      \"{{slot_id}}\": {\n        \"asset_id\": \"{{asset_id}}\",\n        \"fit\": \"contain\"\n      }\n    }\n  }\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Print preflight",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{base_url}}/api/v1/renders/print-preflight",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"template_id\": \"{{template_id}}\",\n  \"options\": {\n    \"format\": \"png\",\n    \"mode\": \"full\",\n    \"slots\": {\n      \"{{slot_id}}\": {\n        \"asset_id\": \"{{asset_id}}\",\n        \"fit\": \"contain\"\n      }\n    }\n  },\n  \"print_profile\": {\n    \"width_mm\": 254,\n    \"height_mm\": 304.8,\n    \"dpi\": 300,\n    \"bleed_mm\": 3,\n    \"safe_area_mm\": 5\n  }\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Print files after warning review",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{base_url}}/api/v1/renders/print-files",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"template_id\": \"{{template_id}}\",\n  \"options\": {\n    \"format\": \"png\",\n    \"mode\": \"full\",\n    \"slots\": {\n      \"{{slot_id}}\": {\n        \"asset_id\": \"{{asset_id}}\",\n        \"fit\": \"contain\"\n      }\n    }\n  },\n  \"print_profile\": {\n    \"width_mm\": 254,\n    \"height_mm\": 304.8,\n    \"dpi\": 300,\n    \"bleed_mm\": 3,\n    \"safe_area_mm\": 5\n  },\n  \"acknowledge_print_warnings\": false\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Create asset folder",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{base_url}}/api/v1/assets/folders",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"name\": \"Approved artwork\",\n  \"position\": 0\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Move artwork",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{base_url}}/api/v1/assets/move",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"asset_ids\": [\n    \"{{asset_id}}\"\n  ],\n  \"folder_id\": \"{{folder_id}}\"\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Inspect PSD layers",
      "request": {
        "method": "GET",
        "header": [],
        "url": "{{base_url}}/api/v1/templates/{{template_id}}/layers",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps."
      }
    },
    {
      "name": "Save editor project",
      "request": {
        "method": "POST",
        "header": [
          {
            "key": "Content-Type",
            "value": "application/json"
          }
        ],
        "url": "{{base_url}}/api/v1/projects",
        "description": "Run individually after configuration. Paid submissions consume allowance. Download responses with Send and Download. Save IDs before subsequent steps.",
        "body": {
          "mode": "raw",
          "raw": "{\n  \"name\": \"Approved placement\",\n  \"kind\": \"editor\",\n  \"template_id\": \"{{template_id}}\",\n  \"state\": {\n    \"version\": 1,\n    \"slots\": {\n      \"{{slot_id}}\": {\n        \"asset\": {\n          \"id\": \"{{asset_id}}\"\n        },\n        \"fit\": \"contain\"\n      }\n    },\n    \"format\": \"png\"\n  }\n}",
          "options": {
            "raw": {
              "language": "json"
            }
          }
        }
      }
    },
    {
      "name": "Upload artwork",
      "request": {
        "method": "POST",
        "url": "{{base_url}}/api/v1/assets",
        "header": [],
        "body": {
          "mode": "formdata",
          "formdata": [
            {
              "key": "file",
              "type": "file",
              "src": []
            }
          ]
        },
        "description": "Select your local file manually. Do not set Content-Type; Postman creates the boundary."
      }
    },
    {
      "name": "Upload PSD template",
      "request": {
        "method": "POST",
        "url": "{{base_url}}/api/v1/templates",
        "header": [],
        "body": {
          "mode": "formdata",
          "formdata": [
            {
              "key": "file",
              "type": "file",
              "src": []
            }
          ]
        },
        "description": "Select your local file manually. Do not set Content-Type; Postman creates the boundary."
      }
    }
  ]
}
