Quickstart
Publish your first ArchWalk 360 Experience using managed media.
BUILD YOUR FIRST PUBLISHED EXPERIENCE
- Get API access
- Create an Experience
- Upload a Panorama
- Attach it
- Publish
- Embed the Viewer
Need a key first? Read Get API access and the required scopes.
8. Quickstart A — managed media
Goal: credential → Experience → upload → Panorama → publish → Viewer.
These examples use jq to copy identifiers out of JSON responses. Adjust the panorama file path and declared_size_bytes to match your image.
export ARCHWALK_API_BASE="https://YOUR_ARCHWALK_API_HOST"
export ARCHWALK_APP_ORIGIN="https://YOUR_ARCHWALK_APP_HOST"
export AW360_API_KEY="<your-api-key>"
export EXTERNAL_RESOURCE_ID="room_12345"
1. Create or resolve the Experience
EXPERIENCE_JSON=$(curl -sS -X POST "$ARCHWALK_API_BASE/api/v1/360/experiences" \
-H "Authorization: Bearer $AW360_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"name\": \"Ocean Suite\",
\"external_resource_id\": \"$EXTERNAL_RESOURCE_ID\"
}")
export EXPERIENCE_ID=$(echo "$EXPERIENCE_JSON" | jq -r .experience_id)
export DRAFT_REVISION=$(echo "$EXPERIENCE_JSON" | jq -r .draft_revision)
2. Initiate a managed upload
UPLOAD_JSON=$(curl -sS -X POST "$ARCHWALK_API_BASE/api/v1/360/experiences/$EXPERIENCE_ID/panorama-uploads" \
-H "Authorization: Bearer $AW360_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content_type": "image/jpeg",
"declared_size_bytes": 1234567,
"client_request_id": "acme-room-12345-pano-1"
}')
export UPLOAD_ID=$(echo "$UPLOAD_JSON" | jq -r .upload_id)
export UPLOAD_URL=$(echo "$UPLOAD_JSON" | jq -r .upload_url)
Send exactly the returned headers on the PUT (at least Content-Type and If-None-Match: *). method is PUT. Do not invent object keys.
3. PUT the file to storage
curl -sS -X PUT "$UPLOAD_URL" \
-H "Content-Type: image/jpeg" \
-H "If-None-Match: *" \
--data-binary @./ocean-suite.jpg
4. Complete validation
curl -sS -X POST "$ARCHWALK_API_BASE/api/v1/360/experiences/$EXPERIENCE_ID/panorama-uploads/$UPLOAD_ID/complete" \
-H "Authorization: Bearer $AW360_API_KEY"
Wait until status is ready (GET the upload resource if needed).
5. Attach a Panorama
Use DRAFT_REVISION from step 1 as expected_draft_revision.
PANORAMA_JSON=$(curl -sS -X POST "$ARCHWALK_API_BASE/api/v1/360/experiences/$EXPERIENCE_ID/panoramas" \
-H "Authorization: Bearer $AW360_API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"expected_draft_revision\": $DRAFT_REVISION,
\"label\": \"Living room\",
\"is_starting\": true,
\"media\": { \"type\": \"managed\", \"upload_id\": \"$UPLOAD_ID\" }
}")
export DRAFT_REVISION=$(echo "$PANORAMA_JSON" | jq -r .draft_revision)
6. Publish
PUBLISH_JSON=$(curl -sS -X POST "$ARCHWALK_API_BASE/api/v1/360/experiences/$EXPERIENCE_ID/publish" \
-H "Authorization: Bearer $AW360_API_KEY" \
-H "Content-Type: application/json" \
-d "{ \"expected_draft_revision\": $DRAFT_REVISION }")
export PUBLIC_ID=$(echo "$PUBLISH_JSON" | jq -r .public_id)
export EMBED_URL=$(echo "$PUBLISH_JSON" | jq -r .embed_url)
embed_url is {ARCHWALK_APP_ORIGIN}/aw360/v/{public_id}.
7. Embed the Viewer
<iframe
title="ArchWalk 360 Viewer"
src="https://YOUR_ARCHWALK_APP_HOST/aw360/v/PUBLIC_ID"
allow="fullscreen"
allowfullscreen
style="width:100%;height:80vh;border:0"
></iframe>
Use $EMBED_URL or $ARCHWALK_APP_ORIGIN/aw360/v/$PUBLIC_ID. The Integration must list your page origin in allowed origins before third-party framing works.
NEXT STEPS