Render Form SS-4 (write scope)
curl --request POST \
--url https://api.trycherry.ai/v1/ein-applications/{id}/generate-ss4 \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.trycherry.ai/v1/ein-applications/{id}/generate-ss4"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.trycherry.ai/v1/ein-applications/{id}/generate-ss4', 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.trycherry.ai/v1/ein-applications/{id}/generate-ss4",
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.trycherry.ai/v1/ein-applications/{id}/generate-ss4"
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.trycherry.ai/v1/ein-applications/{id}/generate-ss4")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.trycherry.ai/v1/ein-applications/{id}/generate-ss4")
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": {
"documentId": "1f2e3d4c-5b6a-4988-9a0b-1c2d3e4f5a6b",
"filled": 27,
"gaps": [
{
"field": "Date the business started",
"why": "the formation has not filed yet, so there is no start date"
}
],
"problems": [],
"application": {
"id": "8a6f1e2c-3b4d-4e5f-9a0b-1c2d3e4f5a6b",
"entityId": null,
"legalName": "Acme Ventures LLC",
"entityType": "LLC",
"filingState": "DE",
"status": "ready_to_file",
"ein": null,
"ss4DocumentId": null,
"signatureEnvelopeId": null,
"signedDocumentId": null,
"filedAt": null,
"receivedAt": null,
"signatureRequestedAt": null,
"signedAt": null,
"createdAt": "2026-08-19T18:04:11.000Z",
"updatedAt": "2026-08-19T18:04:11.000Z"
}
}
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}Incorporations
Render Form SS-4 (write scope)
Renders the application’s answers onto the official IRS Form SS-4 and stores the result, so the document the responsible party signs is the same artefact Cherry files. Allowed only while ready_to_file: once the form is out for signature, regenerating it would mean the thing they signed is not the thing Cherry holds.
gaps lists what the IRS expects that Cherry cannot fill yet, in plain language — surface it as the outstanding-items list. problems lists values that could not be written onto the form at all.
POST
/
ein-applications
/
{id}
/
generate-ss4
Render Form SS-4 (write scope)
curl --request POST \
--url https://api.trycherry.ai/v1/ein-applications/{id}/generate-ss4 \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.trycherry.ai/v1/ein-applications/{id}/generate-ss4"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.trycherry.ai/v1/ein-applications/{id}/generate-ss4', 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.trycherry.ai/v1/ein-applications/{id}/generate-ss4",
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.trycherry.ai/v1/ein-applications/{id}/generate-ss4"
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.trycherry.ai/v1/ein-applications/{id}/generate-ss4")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.trycherry.ai/v1/ein-applications/{id}/generate-ss4")
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": {
"documentId": "1f2e3d4c-5b6a-4988-9a0b-1c2d3e4f5a6b",
"filled": 27,
"gaps": [
{
"field": "Date the business started",
"why": "the formation has not filed yet, so there is no start date"
}
],
"problems": [],
"application": {
"id": "8a6f1e2c-3b4d-4e5f-9a0b-1c2d3e4f5a6b",
"entityId": null,
"legalName": "Acme Ventures LLC",
"entityType": "LLC",
"filingState": "DE",
"status": "ready_to_file",
"ein": null,
"ss4DocumentId": null,
"signatureEnvelopeId": null,
"signedDocumentId": null,
"filedAt": null,
"receivedAt": null,
"signatureRequestedAt": null,
"signedAt": null,
"createdAt": "2026-08-19T18:04:11.000Z",
"updatedAt": "2026-08-19T18:04:11.000Z"
}
}
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}{
"error": "<string>",
"reason": "<string>"
}Authorizations
Cherry API key, created in the app. Sent as Authorization: Bearer ck_live_….
Path Parameters
EIN application id, from listEinApplications or the incorporation response.
Response
The form was rendered and attached to the application
Show child attributes
Show child attributes