Skip to main content

Quick Start

Get Proofarc running in 5 minutes.

Prerequisites

  • Docker and Docker Compose installed
  • 4GB RAM available

Start the Platform

# Pull and start all services
docker-compose -f docker-compose.hub.yml up -d

# Wait ~60 seconds for services to initialize

What starts:

ServiceURLCredentials
Web UIhttp://localhost:3000admin / your-password
APIhttp://localhost:8080Same
MinIO (storage)http://localhost:9001minioadmin / minioadmin

Your First API Test

1. Log in and get a token

TOKEN=$(curl -s http://localhost:8080/api/auth/login -X POST \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"your-password"}' | \
python3 -c "import sys,json;print(json.load(sys.stdin)['token'])")

2. Create a project

curl -s -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
http://localhost:8080/api/projects \
-d '{"name":"My First Project","description":"Getting started"}'

3. Add an environment and target

# Add a REST API target to the development environment
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
http://localhost:8080/api/environments/1/targets \
-d '{
"name":"httpbin",
"targetType":"REST_SERVICE",
"baseUrl":"https://httpbin.org",
"appTag":"httpbin"
}'
Always set appTag

appTag is the resolution key: scenarios bind to it, and the host resolves at run time from the matching target in whichever environment you run against. A target without an appTag (or linked application) can't be resolved by portable scenarios.


# Or add a target with Swagger spec for contract coverage scoring
curl -s -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
http://localhost:8080/api/environments/1/targets \
-d '{
"name":"User Service API",
"targetType":"REST_SERVICE",
"baseUrl":"http://user-service:8089",
"swaggerPath":"/v3/api-docs",
"healthcheckPath":"/actuator/health",
"appTag":"user-service"
}'

4. Create an API scenario

Note there's no baseUrl — the scenario binds to the target via appTag, and the host resolves at run time from the environment you execute against. The same scenario runs in dev, staging, and prod, each hitting that environment's target URL. (A concrete baseUrl is still accepted as an explicit override.)

curl -s -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
http://localhost:8080/api/scenarios \
-d '{
"name":"httpbin Smoke Test",
"projectId":1,
"environmentId":1,
"appTag":"httpbin",
"steps":[
{
"stepOrder":1,
"name":"GET request",
"httpMethod":"GET",
"endpointPath":"/get",
"expectedStatusCodes":[200]
},
{
"stepOrder":2,
"name":"POST request",
"httpMethod":"POST",
"endpointPath":"/post",
"requestBody":"{\"hello\":\"world\"}",
"expectedStatusCodes":[200],
"responseAssertions":[
{"type":"JSONPATH","expression":"$.json.hello","operator":"EQUALS","expectedValue":"world"}
]
}
]
}'

5. Execute it

curl -s -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
http://localhost:8080/api/scenarios/1/execute \
-d '{"tags":["first-run"]}'

6. Check results

Open http://localhost:3000 and navigate to API Scenarios → your scenario → History.

Or via API:

curl -s -H "Authorization: Bearer $TOKEN" \
http://localhost:8080/api/scenarios/1/executions

What's Next