Create a project
curl -X POST https://api.subscriby.net/v1/projects \
-H "Authorization: Bearer $SUBSCRIBY_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"name": "Research Premium",
"description": "Weekly deep-dive research notes.",
"handle": "research-premium",
"metrics": true
}'
Banner and photo are optional image uploads. Send multipart/form-data when you want the API to accept the raw image:
curl -X POST https://api.subscriby.net/v1/projects \
-H "Authorization: Bearer $SUBSCRIBY_TOKEN" \
-H "Idempotency-Key: $(uuidgen)" \
-F "name=Research Premium" \
-F "description=Weekly deep-dive research notes." \
-F "banner=@./banner.jpg" \
-F "photo=@./avatar.jpg"
Answers 201 with the project and emits project.created. Creating a project enforces the creator's tier project limit; exceeding it is 403 TEAM_TIER_REQUIRED with a required_capability hint in error.context.
Validation rules
Enforced on both create and update (every field is optional on update):
- name: required on create. String, 5–255 characters.
- description: optional. String, max 1,000 characters. HTML is filtered to a safe subset before storage.
- terms, privacy: optional. URLs, max 255 characters each.
- banner, photo: optional. Image uploads, max 5 MB each, sent as multipart/form-data.
- handle: optional. Lowercase alpha-dash ASCII, 5–255 characters, unique. Requires a Subscriby tier that includes the custom-handle capability; Free-tier tokens receive TEAM_TIER_REQUIRED when a handle is supplied.
- metrics, active: optional booleans.
- outage_compensations: optional boolean, true on every new project. Outage Compensation: when a platform refuses the project's connector for an hour or more and later answers again, every member whose paid access overlapped the gap gets the lost time added to the end of their access automatically, so nobody pays for days they could not use. Set it to false when the creator would rather settle outages themselves, for example with refunds or coupons. See Connector outages.
- team_id: optional UUID; must be a team the token's owner belongs to. Defaults to the token's scoped team.
Artwork is processed after the request. The response body returns the project's metadata only, not the hosted image URLs. Image processing (resize, re-encode, upload to storage) runs on the server after a successful create or update; clients that need the hosted URL should fetch the project once upload is complete.
Request
- Base URL: https://api.subscriby.net
- URL: https://api.subscriby.net/v1/projects
- Auth: HTTP bearer
Headers
A key unique to this operation, such as a fresh UUID. The same key replays the original 2xx response for 24 hours (with Idempotent-Replay: true), so a retry after a timeout never repeats the write; the same key with a different body is refused with 409.
Response
The new project.
Example response
{
"data": {
"id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",
"team_id": "a83f0d51-4c92-4b7e-8615-2fd9e70a3c86",
"user_id": "2a91c4e7-6f38-4b52-8e0d-9c1a7b3f5d80",
"name": "Research Premium",
"handle": "research-premium",
"description": "Weekly deep-dive research notes.",
"terms": "https://example.com/terms",
"privacy": "https://example.com/privacy",
"banner_url": "https://static.subscriby.net/projects/7f3d1c92/banner.webp",
"photo_url": "https://static.subscriby.net/projects/7f3d1c92/photo.webp",
"metrics": true,
"outage_compensations": true,
"active": true,
"created_at": "2026-05-18T10:05:00Z",
"updated_at": "2026-05-18T10:05:00Z"
}
}Changes
No recorded changes to this operation across all 1 revision of this API.