{
  "info": {
    "_postman_id": "ad402f78-4fca-4d6d-909e-3590efc77e62",
    "name": "Stepes Public API v2",
    "description": "Client project integration using direct OpenAI-style bearer API keys. Import the canonical OpenAPI contract for the complete 31-operation collection.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {"key": "token", "value": "{{stepes_api_key}}", "type": "string"}
    ]
  },
  "variable": [
    {"key": "base_url", "value": "https://apis.stepes.com/v2"},
    {"key": "stepes_api_key", "value": "stp_test_replace_me", "type": "secret"},
    {"key": "project_id", "value": ""},
    {"key": "quote_id", "value": ""},
    {"key": "file_id", "value": ""},
    {"key": "delivery_id", "value": ""},
    {"key": "webhook_id", "value": ""}
  ],
  "item": [
    {
      "name": "Account",
      "item": [
        {
          "name": "Get account",
          "request": {"method": "GET", "url": "{{base_url}}/account"}
        },
        {
          "name": "Get capabilities",
          "request": {"method": "GET", "url": "{{base_url}}/capabilities"}
        }
      ]
    },
    {
      "name": "Uploaded file workflow",
      "item": [
        {
          "name": "Upload source file",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 201) pm.collectionVariables.set('file_id', pm.response.json().id);"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {"key": "Idempotency-Key", "value": "postman-file-upload-{{$guid}}"}
            ],
            "body": {
              "mode": "formdata",
              "formdata": [
                {"key": "file", "type": "file", "src": []}
              ]
            },
            "url": "{{base_url}}/files",
            "description": "Choose a local source document for the file form-data field. The response stores its public ID in {{file_id}}."
          }
        },
        {
          "name": "Create project from uploaded file",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 201) pm.collectionVariables.set('project_id', pm.response.json().id);"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {"key": "Content-Type", "value": "application/json"},
              {"key": "Idempotency-Key", "value": "postman-file-project-{{$guid}}"}
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Postman uploaded-file project\",\n  \"external_id\": \"POSTMAN-FILE-{{$timestamp}}\",\n  \"source_language\": \"EN-US\",\n  \"target_languages\": [\"ES-ES\"],\n  \"service\": \"translation\",\n  \"file_ids\": [\"{{file_id}}\"]\n}"
            },
            "url": "{{base_url}}/projects",
            "description": "Creates the normal quote, invoice, project, and jobs from the uploaded source file, then stores the public project ID in {{project_id}}."
          }
        }
      ]
    },
    {
      "name": "Direct projects",
      "item": [
        {
          "name": "Create inline JSON project",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 201) {",
                  "  const body = pm.response.json();",
                  "  pm.collectionVariables.set('project_id', body.id);",
                  "  if (body.source_files?.[0]?.id) pm.collectionVariables.set('file_id', body.source_files[0].id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {"key": "Content-Type", "value": "application/json"},
              {"key": "Idempotency-Key", "value": "postman-direct-json-{{$guid}}"}
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Postman JSON project\",\n  \"external_id\": \"POSTMAN-{{$timestamp}}\",\n  \"source_language\": \"EN-US\",\n  \"target_languages\": [\"ES-ES\"],\n  \"service\": \"translation\",\n  \"content\": {\n    \"format\": \"json\",\n    \"value\": {\n      \"title\": \"Hello world\",\n      \"sku\": 1042,\n      \"active\": true\n    }\n  }\n}"
            },
            "url": "{{base_url}}/projects"
          }
        },
        {
          "name": "Get project",
          "request": {"method": "GET", "url": "{{base_url}}/projects/{{project_id}}"}
        },
        {
          "name": "Get exact inline source",
          "request": {"method": "GET", "url": "{{base_url}}/files/{{file_id}}/content"}
        },
        {
          "name": "List deliveries",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "const body = pm.response.json();",
                  "if (body.data?.[0]?.id) pm.collectionVariables.set('delivery_id', body.data[0].id);"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {"method": "GET", "url": "{{base_url}}/projects/{{project_id}}/deliveries"}
        },
        {
          "name": "Get structured delivery",
          "request": {"method": "GET", "url": "{{base_url}}/projects/{{project_id}}/deliveries/{{delivery_id}}/content"}
        }
      ]
    },
    {
      "name": "Optional quotes",
      "item": [
        {
          "name": "Create quote",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 201) pm.collectionVariables.set('quote_id', pm.response.json().id);"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {"key": "Content-Type", "value": "application/json"},
              {"key": "Idempotency-Key", "value": "postman-quote-{{$guid}}"}
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Postman quote\",\n  \"source_language\": \"EN-US\",\n  \"target_languages\": [\"FR-FR\"],\n  \"content\": {\"format\": \"text\", \"value\": \"Quote this text.\"}\n}"
            },
            "url": "{{base_url}}/quotes"
          }
        },
        {
          "name": "Submit quote",
          "request": {
            "method": "POST",
            "header": [
              {"key": "Content-Type", "value": "application/json"},
              {"key": "Idempotency-Key", "value": "postman-quote-submit-{{$guid}}"}
            ],
            "body": {"mode": "raw", "raw": "{\"submission_notes\": \"Approved for checkout.\"}"},
            "url": "{{base_url}}/quotes/{{quote_id}}/submit"
          }
        },
        {
          "name": "Accept quote",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 201) pm.collectionVariables.set('project_id', pm.response.json().id);"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {"key": "Content-Type", "value": "application/json"},
              {"key": "Idempotency-Key", "value": "postman-quote-accept-{{$guid}}"}
            ],
            "body": {"mode": "raw", "raw": "{\"po_number\": \"PO-POSTMAN-1\"}"},
            "url": "{{base_url}}/quotes/{{quote_id}}/accept"
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "item": [
        {
          "name": "Create webhook",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 201) pm.collectionVariables.set('webhook_id', pm.response.json().id);"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              {"key": "Content-Type", "value": "application/json"},
              {"key": "Idempotency-Key", "value": "postman-webhook-{{$guid}}"}
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Postman listener\",\n  \"url\": \"https://integrations.example.com/stepes/events\",\n  \"events\": [\"project.completed\", \"delivery.ready\"]\n}"
            },
            "url": "{{base_url}}/webhooks"
          }
        },
        {
          "name": "List webhook deliveries",
          "request": {"method": "GET", "url": "{{base_url}}/webhook-deliveries?limit=25"}
        }
      ]
    }
  ]
}
