API Documentation
Post your deployments to the global feed with a single HTTP request. Generate your API token from your profile page and include it in all requests. Fast, minimal, boring.
1. Endpoint
Create a Deployment
POST /api
Create a new deployment announcement.
Request Body
{
"message": ":sparkles: Released v1.0.42 with brand new dashboard",
"url": "https://example.com" // Optional
}
Examples
JSON format:
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d '{"message": "Deployed v1.2.3", "url": "https://example.com"}' \
https://dplyd.com/api
Form-encoded format:
curl -X POST \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d 'message=Deployed%20v1.2.3&url=https%3A%2F%2Fexample.com' \
https://dplyd.com/api
Response
{
"id": 123,
"message": "Deployed v1.2.3 with new user dashboard",
"url": "https://example.com",
"deployed_at": "2025-04-06T09:30:00Z",
"user": { "id": 42, "name": "Jane Smith" },
"status": "success"
}
2. Error Responses
Authentication Error
{
"error": "Unauthorized"
}
Validation Error
{
"error": "validation_error",
"message": "Validation failed",
"details": { "message": ["can't be blank"] }
}
Resource Not Found (future reserved)
{
"error": "Not Found",
"message": "The requested resource could not be found"
}
3. Deployment Badge
Show your project's deployment freshness anywhere (README, docs, status page).
Replace USERNAME
with your username.
[](https://dplyd.com/USERNAME)
<a href="https://dplyd.com/USERNAME"><img src="https://dplyd.com/badge/USERNAME.svg" alt="Latest Deploy" /></a>
Status colors: fresh (≤3h), warm (>3h–24h), active (>24h–7d), quiet (>7d–30d), stale (>30d), inactive (none yet).
No caching headers set (always current). Add your own CDN layer if desired.
Styles: default wide badge plus ?style=square
(20×20 icon) or ?style=dot
(12×12 color dot). All styles share the same color mapping.
Filter by domain: append ?url=example.com
(host only) to the badge URL to scope to deployments whose URL contains that host (case-insensitive). Falls back to a host-specific "No deployments" message if none match.
[](https://dplyd.com/USERNAME?url=example.com)
<a href="https://dplyd.com/USERNAME?url=example.com"><img src="https://dplyd.com/badge/USERNAME.svg?url=example.com" alt="Latest Deploy (example.com)" /></a>
[](https://dplyd.com/USERNAME)
<img src="https://dplyd.com/badge/USERNAME.svg?style=dot" alt="Latest deploy status" width="12" height="12" />
<a href="https://dplyd.com/USERNAME"><img src="https://dplyd.com/badge/USERNAME.svg?style=square" alt="Latest deploy" width="20" height="20" /></a>
4. Quick Start Recipes
Copy one that matches your setup. Replace YOUR_API_TOKEN
with your token.
Shell one-liner
curl -X POST https://dplyd.com/api \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-d "message=Shipped v1.2.3" \
-d "url=https://example.com"
GitHub Action step
- name: Post deploy to Dplyd
run: |
curl -X POST https://dplyd.com/api \
-H "Authorization: Bearer ${{ secrets.DPLYD_TOKEN }}" \
-d "message=Deploy $GITHUB_SHA" \
-d "url=https://github.com/${{ github.repository }}/commit/$GITHUB_SHA"
Minimal bash script (drop in repo)
#!/usr/bin/env bash
set -euo pipefail
: "${DPLYD_TOKEN?Set DPLYD_TOKEN}"
MESSAGE=${1:-"Deployed $(date -u +%Y-%m-%dT%H:%M:%SZ)"}
URL=${2:-""}
curl -s -X POST https://dplyd.com/api \
-H "Authorization: Bearer ${DPLYD_TOKEN}" \
-d "message=${MESSAGE}" ${URL:+ -d "url=${URL}"} | jq .
Node.js snippet
import fetch from "node-fetch";
const res = await fetch("https://dplyd.com/api", {
method: "POST",
headers: { Authorization: "Bearer " + process.env.DPLYD_TOKEN },
body: new URLSearchParams({ message: "Deploy from Node", url: "https://example.com" })
});
console.log(await res.json());
Python snippet (requests)
import os, requests
resp = requests.post("https://dplyd.com/api", headers={"Authorization": f"Bearer {os.environ['DPLYD_TOKEN']}"}, data={"message":"Deploy from Python"})
print(resp.json())