Skillhost API

Skillhost hosts static websites (HTML, CSS, JavaScript and images). It is a small test service run by VectrForce for checking its deploy tooling. Each deploy is a release: you upload a ZIP, check it, then publish it. Publishing an earlier release puts that version back live.

Base URL and authentication

Base URL: https://skillhost.vectrforce.ai/api/v1

Every call needs your API token in the Authorization header as a bearer token:

Authorization: Bearer <your token>

A missing or wrong token answers 401. Errors are JSON: {"error": "message", "code": "short_code"}.

Check your token

GET /api/v1/me
200 {"account": {"name": "vf-smoke", "plan": "test"}}

Read a site

GET /api/v1/sites/{site_id}
200 {"site": {"id": "vf-smoke", "name": "VF smoke site",
              "domains": ["skillsite.vectrforce.ai"],
              "live_release": "rel_3f9a1c0b7d2e"}}

live_release is the id of the release visitors see, or null before the first publish. domains lists the addresses the site is served on.

Upload a release

Send the whole site as one ZIP in the request body. Files go at the root of the archive (index.html at the top level is what visitors get at /). Uploading does not change the live site.

POST /api/v1/sites/{site_id}/releases
Content-Type: application/zip

<zip bytes>
201 {"release": {"id": "rel_3f9a1c0b7d2e", "state": "ready"}}

Limits: 50 MB archive, 2,000 entries, 200 MB unpacked. Absolute paths, .. and links in the archive are refused with 400.

Check a release

GET /api/v1/sites/{site_id}/releases/{release_id}
200 {"release": {"id": "rel_3f9a1c0b7d2e", "state": "ready", "message": "Unpacked and ready to publish."}}

state is ready (uploaded, not live) or live. An unknown id answers 404.

Publish a release

POST /api/v1/sites/{site_id}/releases/{release_id}/publish
200 {"release": {"id": "rel_3f9a1c0b7d2e", "state": "live"}}

Publishing switches the site to that release at once. To go back, publish the earlier release's id: every release you uploaded stays available. No body is needed.

List releases

GET /api/v1/sites/{site_id}/releases
200 {"releases": [{"id": "rel_3f9a1c0b7d2e", "state": "live"}, {"id": "rel_8c21d4e5f6a7", "state": "ready"}]}

Notes