สามคำสั่ง
สร้างคีย์ในแดชบอร์ด ตรวจว่าใช้ได้ แล้วเอาโฟลเดอร์ขึ้นออนไลน์ คีย์ใส่ไว้ในเฮดเดอร์ Authorization ทุกครั้งที่เรียก
ตรวจว่าคีย์ใช้ได้
curl -H "Authorization: Bearer hvs_…" https://harvis.dev/api/v1
ดูว่าในบัญชีมีอะไร
curl -H "Authorization: Bearer hvs_…" https://harvis.dev/api/v1/sites
เผยแพร่โฟลเดอร์
curl -X POST https://harvis.dev/api/v1/sites \ -H "Authorization: Bearer hvs_…" \ -F "files=@index.html" -F "paths=index.html"
สัญญาเดียว
เว็บแอปกับ API แยกทางกันไม่ได้
ทุกความสามารถถูกประกาศไว้ครั้งเดียวในไฟล์เดียว และทั้งแดชบอร์ดกับ API นี้ถูกสร้างจากตรงนั้น openapi.json ถูกสร้างจากคำประกาศนั้น และถ้าสองฝั่งไม่ตรงกัน การบิลด์จะล้ม นี่จึงไม่ใช่เอกสารที่อธิบายผลิตภัณฑ์ — แต่คือสิ่งที่ผลิตภัณฑ์ทำขึ้นมาจากมัน
- หนึ่งความสามารถต่อหนึ่งการทำงานจริง ทั้งเว็บแอปและสคริปต์ของคุณเรียกตัวเดียวกัน
- openapi.json ถูกสร้างขึ้นเอง ไม่เคยเขียนมือ และเสิร์ฟที่ /openapi.json
- การบิลด์จะล้มทันทีที่เส้นทาง สัญญา และเอกสารเลิกตรงกัน
มีคีย์แล้วเว็บเป็นของคุณทันที
การดีพลอยโดยไม่มีบัญชียังใช้ได้และจะใช้ได้ตลอด — คุณจะได้ลิงก์รับสิทธิ์ส่วนตัวไว้เปิดทีหลัง ถ้าส่งคีย์มาในการเรียกเดียวกัน ก็ไม่มีอะไรต้องรับสิทธิ์: เว็บอยู่ในบัญชีของคุณตั้งแต่ไบต์แรก และไม่มีวันหมดอายุ
zip -r site.zip . && curl -X POST https://harvis.dev/api/upload \ -H "Authorization: Bearer hvs_…" \ -H "Content-Type: application/zip" --data-binary @site.zip
เอนด์พอยต์
ทั้งหมดที่มี
รูปแบบเต็มของคำขอและการตอบกลับอยู่ในเอกสาร OpenAPI
| เมธอด | พาธ | ทำอะไร |
|---|---|---|
| GET | /api/v1 | Check that a credential works. |
| GET | /api/v1/keys | The account's API keys. Revoked keys are not listed. |
| POST | /api/v1/keys | Create an API key. |
| DELETE | /api/v1/keys/{keyId} | Revoke an API key. Anything using it stops working immediately. |
| GET | /api/v1/me | The account a credential belongs to. |
| GET | /api/v1/sites | List the account's sites, newest first. |
| POST | /api/v1/sites | Create a site from a folder of files. |
| DELETE | /api/v1/sites/{id} | Delete a site, its files and its form submissions. |
| GET | /api/v1/sites/{id} | One site. |
| PATCH | /api/v1/sites/{id} | Rename a site, change its web address, or both. |
| POST | /api/v1/sites/{id}/deploy | Replace every file of a site with the uploaded set. |
| POST | /api/v1/sites/{id}/deploy-token | Issue a new deploy token for a site. The old one stops working immediately. |
| POST | /api/v1/sites/{id}/deploy/zip | Replace every file of a site from a zip archive sent as the raw request body. |
| GET | /api/v1/sites/{id}/files | Every file a site is serving. |
| POST | /api/v1/sites/{id}/files | Add or overwrite individual files, leaving the rest of the site alone. |
| DELETE | /api/v1/sites/{id}/submissions | Delete every submission for a site, or every one of a single form. |
| GET | /api/v1/sites/{id}/submissions | One page of a site's form submissions, newest first. |
| DELETE | /api/v1/sites/{id}/submissions/{submissionId} | Delete one submission. |
| GET | /api/v1/sites/{id}/submissions/{submissionId} | One submission. |
| GET | /api/v1/sites/{id}/submissions/csv | Export a site's form submissions as CSV. |
| POST | /api/v1/sites/{id}/submissions/read | Mark every unread submission as read. |
| GET | /api/v1/sites/{id}/submissions/summary | How many submissions a site holds, how many are unread, and which forms exist. |
ข้อผิดพลาด
ความล้มเหลวทุกแบบมีหน้าตาเดียวกัน
แตกเงื่อนไขที่โค้ด อย่าแตกที่ข้อความ โค้ดนั้นคงที่ ส่วนข้อความมีไว้ให้คนที่อ่านล็อก
{
"error": {
"code": "subdomainTaken",
"message": "That address is already taken. Try another."
}
}