Creates a new activity for an organization.
Accepts plain text or HTML. Heading normalization is enforced: <h1>/<h2> → <h3>, <h3> → <h4>, <h4>–<h6> → <h4>.
Only safe HTML is allowed; unsafe tags or attributes are automatically stripped.
Limits:
Rate limits (both apply):
If exceeded, the API returns HTTP 429 with a retryAfter value.
https://api.bloomy.earth
/v1/post-activity
Authentication uses HTTP Basic Auth with your Bloomy Earth API credentials. You must use your Bloomy Earth platform username and application password.
You can find and manage these credentials in your Bloomy Earth dashboard, in the Integration API section:
👉 https://www.bloomy.earth/dashboard/#bloomy-integration-api
| Header | Value | Required | Description |
|---|---|---|---|
| Authorization | Basic BASE64(username:pwd) | Yes | Basic Auth using your Bloomy Earth username and application password. |
| Accept | application/json | Optional | Specifies that the response should be in JSON format. |
| Content-Type | application/json | Yes | Specifies that the request body is sent in JSON format. |
| Field | Type | Required | Description |
|---|---|---|---|
| title | string | Yes | Post title. Rendered as an <h2> above the content body. Maximum 120 characters. |
| content | string (HTML or text) | Yes | Main body of the post. Accepts plain text or HTML. Allowed tags after normalization and sanitization: <p>, <h3>, <h4>, <img>. Headings are automatically normalized (<h1>/<h2> → <h3>, <h3> → <h4>, <h4>–<h6> → <h4>). Maximum 3000 characters (plain-text length after normalization). |
curl -X POST "https://api.bloomy.earth/v1/post-activity" \
-u YOUR_BLOOMY_USERNAME:YOUR_APPLICATION_PASSWORD \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
"title": "GreenSeed Co. — Monthly Impact Update",
"content": "<p>GreenSeed Co. is proud to announce another month of progress: 120 trees planted and 3 community nurseries supported.</p><h2>Field Work Highlights</h2><p>Our local partners in Kenya completed the first planting phase for the wet season, focusing on native species to boost biodiversity.</p><h3>Volunteer Program</h3><p>Over 30 volunteers were trained on seedling care and monitoring protocols.</p><h4>Gallery</h4><p><img src=\"https://example.com/images/greenseed-monthly-2025.jpg\" alt=\"Volunteers planting trees\" loading=\"lazy\" style=\"max-width:100%;border-radius:8px;\"></p><p>Visit our project page to learn more and join the next planting day.</p>"
}'
{
"success": true,
"activityId": 874,
"title": "GreenSeed Co. — Monthly Impact Update",
"createdAt": "2025-11-05 15:22:18",
"author": "GreenSeed Co.",
"profileLink": "https://www.bloomy.earth/members/greenseed-co/",
"message": "Activity posted successfully."
}
| Field | Type | Description |
|---|---|---|
| success | boolean | True on success. |
| activityId | integer | Unique ID of the created activity. |
| title | string | Title saved as metadata and rendered as <h2> by the site. |
| createdAt | string (UTC "YYYY-MM-DD HH:mm:ss") | Creation timestamp. |
| author | string | Display name of the posting organization. |
| profileLink | string (URL) | Public profile URL of the posting organization. |
| message | string | Short confirmation message. |
Note:
The direct URL to view this activity can be reconstructed as:
https://www.bloomy.earth/members/{username}/activity/{activityId}/
(using the profileLink and activityId from the response)
If the request is missing required data or contains invalid parameters, the API returns a JSON object with an error code and message.
| HTTP Code | Error | Message | When |
|---|---|---|---|
| 400 | invalid_request | Bad request. | Malformed JSON or missing required parameters (title or content). |
| 401 | unauthorized | Authentication required. | The Authorization header was missing or invalid. |
| 403 | forbidden | Authentication failed. | The provided credentials are invalid or lack permissions. |
| 413 | payload_too_large | Payload too large. | The title or content exceeds the allowed size (120 / 3000 chars). |
| 429 | rate_limited | Rate limit exceeded. | More than 1 post per minute or 20 posts within 24 hours. |
| 500 | server_error | Internal server error. | Unexpected server-side issue. |
Error format:
{
"error": "forbidden",
"message": "Authentication failed."
}