http api

ทุกอย่างที่แดชบอร์ดทำได้ ทำได้จากเทอร์มินัล

คีย์บัญชีเดียว ดูรายการเว็บของคุณ ดีพลอยขึ้นไป เปลี่ยนชื่อ อ่านสิ่งที่ฟอร์มเก็บมา ลบทิ้ง — ผ่าน HTTP ธรรมดา จากสคริปต์ จากงาน CI หรือจากเอเจนต์

เริ่มใช้เร็ว

สามคำสั่ง

สร้างคีย์ในแดชบอร์ด ตรวจว่าใช้ได้ แล้วเอาโฟลเดอร์ขึ้นออนไลน์ คีย์ใส่ไว้ในเฮดเดอร์ 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/v1Check that a credential works.
GET/api/v1/keysThe account's API keys. Revoked keys are not listed.
POST/api/v1/keysCreate an API key.
DELETE/api/v1/keys/{keyId}Revoke an API key. Anything using it stops working immediately.
GET/api/v1/meThe account a credential belongs to.
GET/api/v1/sitesList the account's sites, newest first.
POST/api/v1/sitesCreate 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}/deployReplace every file of a site with the uploaded set.
POST/api/v1/sites/{id}/deploy-tokenIssue a new deploy token for a site. The old one stops working immediately.
POST/api/v1/sites/{id}/deploy/zipReplace every file of a site from a zip archive sent as the raw request body.
GET/api/v1/sites/{id}/filesEvery file a site is serving.
POST/api/v1/sites/{id}/filesAdd or overwrite individual files, leaving the rest of the site alone.
DELETE/api/v1/sites/{id}/submissionsDelete every submission for a site, or every one of a single form.
GET/api/v1/sites/{id}/submissionsOne 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/csvExport a site's form submissions as CSV.
POST/api/v1/sites/{id}/submissions/readMark every unread submission as read.
GET/api/v1/sites/{id}/submissions/summaryHow many submissions a site holds, how many are unread, and which forms exist.
ข้อผิดพลาด

ความล้มเหลวทุกแบบมีหน้าตาเดียวกัน

แตกเงื่อนไขที่โค้ด อย่าแตกที่ข้อความ โค้ดนั้นคงที่ ส่วนข้อความมีไว้ให้คนที่อ่านล็อก

{
  "error": {
    "code": "subdomainTaken",
    "message": "That address is already taken. Try another."
  }
}