Submit a story with signed consent
Creates a ready_for_review story from an active public intake path, stores the signed consent release privately and records optional media and offer details. It does not approve or publish the story. Limited to 20 submissions per organization per hour as well as the route throttle. Requires the impact_stories feature.
curl --request POST \
--url https://api.gratona.com/v1/frontend/impact-stories/intake/{slug} \
--header 'Content-Type: multipart/form-data' \
--form 'short_update=Students received their new school supplies.' \
--form consent_scope=donor_safe \
--form 'signer_name=Jane Donor' \
--form 'signature_text=Jane Donor' \
--form release_accepted=true \
--form program_id=1 \
--form program_label=Education \
--form 'impact_metrics=Impact Metrics' \
--form media_source_url=https://example.org/story \
--form cost_amount=25 \
--form 'cost_currency=Cost Currency' \
--form 'cost_label=Cost Label' \
--form 'submitter_name=Submitter Name' \
--form submitter_email=jane@example.org \
--form signer_email=jane@example.org \
--form 'signer_role=Signer Role' \
--form 'release_text=Release Text' \
--form 'release_file=<string>'import requests
url = "https://api.gratona.com/v1/frontend/impact-stories/intake/{slug}"
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"short_update\"\r\n\r\nStudents received their new school supplies.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"consent_scope\"\r\n\r\ndonor_safe\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_name\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signature_text\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_accepted\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_id\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_label\"\r\n\r\nEducation\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"impact_metrics\"\r\n\r\nImpact Metrics\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"media_source_url\"\r\n\r\nhttps://example.org/story\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_amount\"\r\n\r\n25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_currency\"\r\n\r\nCost Currency\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_label\"\r\n\r\nCost Label\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_name\"\r\n\r\nSubmitter Name\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_role\"\r\n\r\nSigner Role\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_text\"\r\n\r\nRelease Text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_file\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
headers = {"Content-Type": "multipart/form-data"}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const form = new FormData();
form.append('short_update', 'Students received their new school supplies.');
form.append('consent_scope', 'donor_safe');
form.append('signer_name', 'Jane Donor');
form.append('signature_text', 'Jane Donor');
form.append('release_accepted', 'true');
form.append('program_id', '1');
form.append('program_label', 'Education');
form.append('impact_metrics', 'Impact Metrics');
form.append('media_source_url', 'https://example.org/story');
form.append('cost_amount', '25');
form.append('cost_currency', 'Cost Currency');
form.append('cost_label', 'Cost Label');
form.append('submitter_name', 'Submitter Name');
form.append('submitter_email', 'jane@example.org');
form.append('signer_email', 'jane@example.org');
form.append('signer_role', 'Signer Role');
form.append('release_text', 'Release Text');
form.append('release_file', '<string>');
const options = {method: 'POST'};
options.body = form;
fetch('https://api.gratona.com/v1/frontend/impact-stories/intake/{slug}', 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/frontend/impact-stories/intake/{slug}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"short_update\"\r\n\r\nStudents received their new school supplies.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"consent_scope\"\r\n\r\ndonor_safe\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_name\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signature_text\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_accepted\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_id\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_label\"\r\n\r\nEducation\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"impact_metrics\"\r\n\r\nImpact Metrics\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"media_source_url\"\r\n\r\nhttps://example.org/story\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_amount\"\r\n\r\n25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_currency\"\r\n\r\nCost Currency\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_label\"\r\n\r\nCost Label\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_name\"\r\n\r\nSubmitter Name\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_role\"\r\n\r\nSigner Role\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_text\"\r\n\r\nRelease Text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_file\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gratona.com/v1/frontend/impact-stories/intake/{slug}"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"short_update\"\r\n\r\nStudents received their new school supplies.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"consent_scope\"\r\n\r\ndonor_safe\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_name\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signature_text\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_accepted\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_id\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_label\"\r\n\r\nEducation\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"impact_metrics\"\r\n\r\nImpact Metrics\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"media_source_url\"\r\n\r\nhttps://example.org/story\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_amount\"\r\n\r\n25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_currency\"\r\n\r\nCost Currency\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_label\"\r\n\r\nCost Label\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_name\"\r\n\r\nSubmitter Name\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_role\"\r\n\r\nSigner Role\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_text\"\r\n\r\nRelease Text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_file\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
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/frontend/impact-stories/intake/{slug}")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"short_update\"\r\n\r\nStudents received their new school supplies.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"consent_scope\"\r\n\r\ndonor_safe\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_name\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signature_text\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_accepted\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_id\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_label\"\r\n\r\nEducation\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"impact_metrics\"\r\n\r\nImpact Metrics\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"media_source_url\"\r\n\r\nhttps://example.org/story\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_amount\"\r\n\r\n25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_currency\"\r\n\r\nCost Currency\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_label\"\r\n\r\nCost Label\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_name\"\r\n\r\nSubmitter Name\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_role\"\r\n\r\nSigner Role\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_text\"\r\n\r\nRelease Text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_file\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/frontend/impact-stories/intake/{slug}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"short_update\"\r\n\r\nStudents received their new school supplies.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"consent_scope\"\r\n\r\ndonor_safe\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_name\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signature_text\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_accepted\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_id\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_label\"\r\n\r\nEducation\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"impact_metrics\"\r\n\r\nImpact Metrics\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"media_source_url\"\r\n\r\nhttps://example.org/story\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_amount\"\r\n\r\n25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_currency\"\r\n\r\nCost Currency\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_label\"\r\n\r\nCost Label\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_name\"\r\n\r\nSubmitter Name\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_role\"\r\n\r\nSigner Role\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_text\"\r\n\r\nRelease Text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_file\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"story_id": 42,
"title": "Education update",
"status": "ready_for_review",
"submitted_at": "2026-10-20T12:00:00Z"
}
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}Path Parameters
Public intake path slug.
Body
Validated request fields for this operation.
Short update. Validation: required, string, max:1000.
1000"Students received their new school supplies."
Consent scope. Validation: required, string; allowed values: donor_safe, public_safe.
donor_safe, public_safe "donor_safe"
Signer name. Validation: required, string, max:255.
255"Jane Donor"
Signature text. Validation: required, string, max:255.
255"Jane Donor"
Release accepted. Validation: accepted.
true
Program id. Validation: nullable, integer.
1
Program label. Validation: nullable, string, max:255.
255"Education"
Impact metrics. Validation: nullable, string, max:2000.
2000"Impact Metrics"
Media source url. Validation: nullable, url, max:2048.
2048"https://example.org/story"
Cost amount. Validation: nullable, numeric, min:0.
x >= 025
Cost currency. Validation: nullable, string, max:16.
16"Cost Currency"
Cost label. Validation: nullable, string, max:255.
255"Cost Label"
Submitter name. Validation: nullable, string, max:255.
255"Submitter Name"
Submitter email. Validation: nullable, email, max:255.
255"jane@example.org"
Signer email. Validation: nullable, email, max:255.
255"jane@example.org"
Signer role. Validation: nullable, string, max:255.
255"Signer Role"
Release text. Validation: nullable, string, max:4000.
4000"Release Text"
Release file. Validation: nullable, file, max:10240, mimes:pdf,jpg,jpeg,png,webp,doc,docx; maximum file size 10240 KiB.
curl --request POST \
--url https://api.gratona.com/v1/frontend/impact-stories/intake/{slug} \
--header 'Content-Type: multipart/form-data' \
--form 'short_update=Students received their new school supplies.' \
--form consent_scope=donor_safe \
--form 'signer_name=Jane Donor' \
--form 'signature_text=Jane Donor' \
--form release_accepted=true \
--form program_id=1 \
--form program_label=Education \
--form 'impact_metrics=Impact Metrics' \
--form media_source_url=https://example.org/story \
--form cost_amount=25 \
--form 'cost_currency=Cost Currency' \
--form 'cost_label=Cost Label' \
--form 'submitter_name=Submitter Name' \
--form submitter_email=jane@example.org \
--form signer_email=jane@example.org \
--form 'signer_role=Signer Role' \
--form 'release_text=Release Text' \
--form 'release_file=<string>'import requests
url = "https://api.gratona.com/v1/frontend/impact-stories/intake/{slug}"
payload = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"short_update\"\r\n\r\nStudents received their new school supplies.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"consent_scope\"\r\n\r\ndonor_safe\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_name\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signature_text\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_accepted\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_id\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_label\"\r\n\r\nEducation\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"impact_metrics\"\r\n\r\nImpact Metrics\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"media_source_url\"\r\n\r\nhttps://example.org/story\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_amount\"\r\n\r\n25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_currency\"\r\n\r\nCost Currency\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_label\"\r\n\r\nCost Label\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_name\"\r\n\r\nSubmitter Name\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_role\"\r\n\r\nSigner Role\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_text\"\r\n\r\nRelease Text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_file\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
headers = {"Content-Type": "multipart/form-data"}
response = requests.post(url, data=payload, headers=headers)
print(response.text)const form = new FormData();
form.append('short_update', 'Students received their new school supplies.');
form.append('consent_scope', 'donor_safe');
form.append('signer_name', 'Jane Donor');
form.append('signature_text', 'Jane Donor');
form.append('release_accepted', 'true');
form.append('program_id', '1');
form.append('program_label', 'Education');
form.append('impact_metrics', 'Impact Metrics');
form.append('media_source_url', 'https://example.org/story');
form.append('cost_amount', '25');
form.append('cost_currency', 'Cost Currency');
form.append('cost_label', 'Cost Label');
form.append('submitter_name', 'Submitter Name');
form.append('submitter_email', 'jane@example.org');
form.append('signer_email', 'jane@example.org');
form.append('signer_role', 'Signer Role');
form.append('release_text', 'Release Text');
form.append('release_file', '<string>');
const options = {method: 'POST'};
options.body = form;
fetch('https://api.gratona.com/v1/frontend/impact-stories/intake/{slug}', 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/frontend/impact-stories/intake/{slug}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"short_update\"\r\n\r\nStudents received their new school supplies.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"consent_scope\"\r\n\r\ndonor_safe\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_name\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signature_text\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_accepted\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_id\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_label\"\r\n\r\nEducation\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"impact_metrics\"\r\n\r\nImpact Metrics\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"media_source_url\"\r\n\r\nhttps://example.org/story\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_amount\"\r\n\r\n25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_currency\"\r\n\r\nCost Currency\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_label\"\r\n\r\nCost Label\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_name\"\r\n\r\nSubmitter Name\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_role\"\r\n\r\nSigner Role\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_text\"\r\n\r\nRelease Text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_file\"\r\n\r\n<string>\r\n-----011000010111000001101001--",
CURLOPT_HTTPHEADER => [
"Content-Type: multipart/form-data"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.gratona.com/v1/frontend/impact-stories/intake/{slug}"
payload := strings.NewReader("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"short_update\"\r\n\r\nStudents received their new school supplies.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"consent_scope\"\r\n\r\ndonor_safe\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_name\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signature_text\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_accepted\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_id\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_label\"\r\n\r\nEducation\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"impact_metrics\"\r\n\r\nImpact Metrics\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"media_source_url\"\r\n\r\nhttps://example.org/story\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_amount\"\r\n\r\n25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_currency\"\r\n\r\nCost Currency\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_label\"\r\n\r\nCost Label\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_name\"\r\n\r\nSubmitter Name\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_role\"\r\n\r\nSigner Role\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_text\"\r\n\r\nRelease Text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_file\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
req, _ := http.NewRequest("POST", url, payload)
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/frontend/impact-stories/intake/{slug}")
.body("-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"short_update\"\r\n\r\nStudents received their new school supplies.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"consent_scope\"\r\n\r\ndonor_safe\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_name\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signature_text\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_accepted\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_id\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_label\"\r\n\r\nEducation\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"impact_metrics\"\r\n\r\nImpact Metrics\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"media_source_url\"\r\n\r\nhttps://example.org/story\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_amount\"\r\n\r\n25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_currency\"\r\n\r\nCost Currency\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_label\"\r\n\r\nCost Label\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_name\"\r\n\r\nSubmitter Name\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_role\"\r\n\r\nSigner Role\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_text\"\r\n\r\nRelease Text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_file\"\r\n\r\n<string>\r\n-----011000010111000001101001--")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.gratona.com/v1/frontend/impact-stories/intake/{slug}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request.body = "-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"short_update\"\r\n\r\nStudents received their new school supplies.\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"consent_scope\"\r\n\r\ndonor_safe\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_name\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signature_text\"\r\n\r\nJane Donor\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_accepted\"\r\n\r\ntrue\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_id\"\r\n\r\n1\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"program_label\"\r\n\r\nEducation\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"impact_metrics\"\r\n\r\nImpact Metrics\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"media_source_url\"\r\n\r\nhttps://example.org/story\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_amount\"\r\n\r\n25\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_currency\"\r\n\r\nCost Currency\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"cost_label\"\r\n\r\nCost Label\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_name\"\r\n\r\nSubmitter Name\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"submitter_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_email\"\r\n\r\njane@example.org\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"signer_role\"\r\n\r\nSigner Role\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_text\"\r\n\r\nRelease Text\r\n-----011000010111000001101001\r\nContent-Disposition: form-data; name=\"release_file\"\r\n\r\n<string>\r\n-----011000010111000001101001--"
response = http.request(request)
puts response.read_body{
"status": "success",
"data": {
"story_id": 42,
"title": "Education update",
"status": "ready_for_review",
"submitted_at": "2026-10-20T12:00:00Z"
}
}{
"message": "Not Found",
"status": "error"
}{
"errors": {},
"status": "error",
"message": "The given data was invalid."
}