Impact Stories
Submit a story for review
Moves the story to ready_for_review; this does not approve it. Requires the impact_stories feature. Requires permission: one of impact_stories_manage.
POST
/
admin
/
impact-stories
/
{storyId}
/
submit-review
Submit a story for review
curl --request POST \
--url https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": 42,
"primary_program_id": 42,
"primary_entity_id": 42,
"primary_donor_id": 42,
"title": "Education update",
"headline": "Education update",
"summary": "Education update",
"story_type": "Education update",
"source_type": "Education update",
"source_external_id": "Education update",
"status": "draft",
"privacy_level": "internal",
"consent_status": "unknown",
"story_date": "2026-10-20",
"asset_count": 2,
"offer_count": 2,
"publication_count": 2,
"primary_asset": {
"id": 42,
"client_id": 42,
"impact_story_id": 42,
"upload_id": 42,
"asset_type": "Education update",
"title": "Education update",
"caption": "Education update",
"source_url": "Education update",
"drive_file_id": "Education update",
"consent_status": "unknown",
"is_primary": true,
"metadata_json": {},
"created_by_user_id": 42,
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z",
"preview": {
"id": 42,
"asset_type": "Education update",
"title": "Education update",
"caption": "Education update",
"provider": "Education update",
"available": true,
"open_source": true,
"workspace_file_id": "Education update",
"preview_url": "Education update",
"thumbnail_url": "Education update",
"source_url": "Education update",
"download_url": "Education update",
"drive_file_id": "Education update",
"consent_status": "unknown",
"is_primary": true,
"metadata_json": {}
}
},
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z",
"reach": {
"audience": "Education update",
"blocked_count": 2,
"held_back": true,
"blocked_message": "Education update",
"blocked_files": [
{
"file_ref": "Education update",
"reason": "Education update"
}
]
},
"slug": "Education update",
"body": "Education update",
"pull_quote": "Education update",
"audience_json": {},
"tags_json": {},
"impact_metrics_json": {},
"source_payload_json": {},
"governance_json": {},
"approved_at": "2026-10-20T12:00:00Z",
"archived_at": "2026-10-20T12:00:00Z",
"assets": [
{
"id": 42,
"client_id": 42,
"impact_story_id": 42,
"upload_id": 42,
"asset_type": "Education update",
"title": "Education update",
"caption": "Education update",
"source_url": "Education update",
"drive_file_id": "Education update",
"consent_status": "unknown",
"is_primary": true,
"metadata_json": {},
"created_by_user_id": 42,
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z",
"preview": {
"id": 42,
"asset_type": "Education update",
"title": "Education update",
"caption": "Education update",
"provider": "Education update",
"available": true,
"open_source": true,
"workspace_file_id": "Education update",
"preview_url": "Education update",
"thumbnail_url": "Education update",
"source_url": "Education update",
"download_url": "Education update",
"drive_file_id": "Education update",
"consent_status": "unknown",
"is_primary": true,
"metadata_json": {}
}
}
],
"relations": [
{
"record_type": "Education update",
"record_id": 42,
"label": "Education update",
"url": "Education update",
"relationship_role": "Education update"
}
],
"offers": [
{
"id": 42,
"client_id": 42,
"impact_story_id": 42,
"created_by_user_id": 42,
"approved_by_user_id": 42,
"title": "Education update",
"status": "Education update",
"beneficiary_label": "Education update",
"problem_statement": "Education update",
"solution_statement": "Education update",
"cost_currency": "Education update",
"cost_label": "Education update",
"hope_statement": "Education update",
"ask_copy": "Education update",
"donor_safe_summary": "Education update",
"cost_amount": "25.00",
"suggested_audience_json": {},
"channel_copy_json": {},
"source_payload_json": {},
"approved_at": "2026-10-20T12:00:00Z",
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z"
}
],
"publications": [
{
"id": 42,
"client_id": 42,
"impact_story_id": 42,
"impact_story_offer_id": 42,
"target_id": 42,
"created_by_user_id": 42,
"channel": "Education update",
"status": "Education update",
"target_type": "Education update",
"target_url": "Education update",
"audience_snapshot_json": {},
"payload_json": {},
"published_at": "2026-10-20T12:00:00Z",
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z"
}
],
"consent_releases": [
{
"id": 42,
"client_id": 42,
"impact_story_id": 42,
"impact_story_intake_path_id": 42,
"release_upload_id": 42,
"revoked_by_user_id": 42,
"subject_id": 42,
"status": "Education update",
"consent_scope": "Education update",
"signer_name": "Education update",
"signer_email": "Education update",
"signer_role": "Education update",
"signature_text": "Education update",
"release_text": "Education update",
"release_file_name": "Education update",
"release_file_key": "Education update",
"release_file_mime": "Education update",
"evidence_kind": "Education update",
"subject_type": "Education update",
"signed_at": "2026-10-20T12:00:00Z",
"valid_from": "2026-10-20T12:00:00Z",
"expires_at": "2026-10-20T12:00:00Z",
"revoked_at": "2026-10-20T12:00:00Z",
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z",
"metadata_json": {}
}
],
"primary_program": {
"record_type": "Education update",
"record_id": 42,
"label": "Education update",
"url": "Education update",
"relationship_role": "Education update"
},
"primary_entity": {
"record_type": "Education update",
"record_id": 42,
"label": "Education update",
"url": "Education update",
"relationship_role": "Education update"
},
"primary_donor": {
"record_type": "Education update",
"record_id": 42,
"label": "Education update",
"url": "Education update",
"relationship_role": "Education update"
}
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Not Found",
"status": "error"
}Authorizations
bearerAuthapiKeyAuth
Passport bearer token authentication for legacy admin sessions.
Path Parameters
Story id in the current organization.
Response
Operation result.
Detailed governed story. Related records are filtered by current user access; unavailable references can be null.
Show child attributes
Show child attributes
⌘I
Submit a story for review
curl --request POST \
--url https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review"
req, _ := http.NewRequest("POST", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/admin/impact-stories/{storyId}/submit-review")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": {
"id": 42,
"primary_program_id": 42,
"primary_entity_id": 42,
"primary_donor_id": 42,
"title": "Education update",
"headline": "Education update",
"summary": "Education update",
"story_type": "Education update",
"source_type": "Education update",
"source_external_id": "Education update",
"status": "draft",
"privacy_level": "internal",
"consent_status": "unknown",
"story_date": "2026-10-20",
"asset_count": 2,
"offer_count": 2,
"publication_count": 2,
"primary_asset": {
"id": 42,
"client_id": 42,
"impact_story_id": 42,
"upload_id": 42,
"asset_type": "Education update",
"title": "Education update",
"caption": "Education update",
"source_url": "Education update",
"drive_file_id": "Education update",
"consent_status": "unknown",
"is_primary": true,
"metadata_json": {},
"created_by_user_id": 42,
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z",
"preview": {
"id": 42,
"asset_type": "Education update",
"title": "Education update",
"caption": "Education update",
"provider": "Education update",
"available": true,
"open_source": true,
"workspace_file_id": "Education update",
"preview_url": "Education update",
"thumbnail_url": "Education update",
"source_url": "Education update",
"download_url": "Education update",
"drive_file_id": "Education update",
"consent_status": "unknown",
"is_primary": true,
"metadata_json": {}
}
},
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z",
"reach": {
"audience": "Education update",
"blocked_count": 2,
"held_back": true,
"blocked_message": "Education update",
"blocked_files": [
{
"file_ref": "Education update",
"reason": "Education update"
}
]
},
"slug": "Education update",
"body": "Education update",
"pull_quote": "Education update",
"audience_json": {},
"tags_json": {},
"impact_metrics_json": {},
"source_payload_json": {},
"governance_json": {},
"approved_at": "2026-10-20T12:00:00Z",
"archived_at": "2026-10-20T12:00:00Z",
"assets": [
{
"id": 42,
"client_id": 42,
"impact_story_id": 42,
"upload_id": 42,
"asset_type": "Education update",
"title": "Education update",
"caption": "Education update",
"source_url": "Education update",
"drive_file_id": "Education update",
"consent_status": "unknown",
"is_primary": true,
"metadata_json": {},
"created_by_user_id": 42,
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z",
"preview": {
"id": 42,
"asset_type": "Education update",
"title": "Education update",
"caption": "Education update",
"provider": "Education update",
"available": true,
"open_source": true,
"workspace_file_id": "Education update",
"preview_url": "Education update",
"thumbnail_url": "Education update",
"source_url": "Education update",
"download_url": "Education update",
"drive_file_id": "Education update",
"consent_status": "unknown",
"is_primary": true,
"metadata_json": {}
}
}
],
"relations": [
{
"record_type": "Education update",
"record_id": 42,
"label": "Education update",
"url": "Education update",
"relationship_role": "Education update"
}
],
"offers": [
{
"id": 42,
"client_id": 42,
"impact_story_id": 42,
"created_by_user_id": 42,
"approved_by_user_id": 42,
"title": "Education update",
"status": "Education update",
"beneficiary_label": "Education update",
"problem_statement": "Education update",
"solution_statement": "Education update",
"cost_currency": "Education update",
"cost_label": "Education update",
"hope_statement": "Education update",
"ask_copy": "Education update",
"donor_safe_summary": "Education update",
"cost_amount": "25.00",
"suggested_audience_json": {},
"channel_copy_json": {},
"source_payload_json": {},
"approved_at": "2026-10-20T12:00:00Z",
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z"
}
],
"publications": [
{
"id": 42,
"client_id": 42,
"impact_story_id": 42,
"impact_story_offer_id": 42,
"target_id": 42,
"created_by_user_id": 42,
"channel": "Education update",
"status": "Education update",
"target_type": "Education update",
"target_url": "Education update",
"audience_snapshot_json": {},
"payload_json": {},
"published_at": "2026-10-20T12:00:00Z",
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z"
}
],
"consent_releases": [
{
"id": 42,
"client_id": 42,
"impact_story_id": 42,
"impact_story_intake_path_id": 42,
"release_upload_id": 42,
"revoked_by_user_id": 42,
"subject_id": 42,
"status": "Education update",
"consent_scope": "Education update",
"signer_name": "Education update",
"signer_email": "Education update",
"signer_role": "Education update",
"signature_text": "Education update",
"release_text": "Education update",
"release_file_name": "Education update",
"release_file_key": "Education update",
"release_file_mime": "Education update",
"evidence_kind": "Education update",
"subject_type": "Education update",
"signed_at": "2026-10-20T12:00:00Z",
"valid_from": "2026-10-20T12:00:00Z",
"expires_at": "2026-10-20T12:00:00Z",
"revoked_at": "2026-10-20T12:00:00Z",
"created_at": "2026-10-20T12:00:00Z",
"updated_at": "2026-10-20T12:00:00Z",
"metadata_json": {}
}
],
"primary_program": {
"record_type": "Education update",
"record_id": 42,
"label": "Education update",
"url": "Education update",
"relationship_role": "Education update"
},
"primary_entity": {
"record_type": "Education update",
"record_id": 42,
"label": "Education update",
"url": "Education update",
"relationship_role": "Education update"
},
"primary_donor": {
"record_type": "Education update",
"record_id": 42,
"label": "Education update",
"url": "Education update",
"relationship_role": "Education update"
}
}
}{
"message": "Unauthorized",
"status": "error"
}{
"message": "Not Found",
"status": "error"
}