Updating 3921 Statements¶
Use the updateF3921Statements
mutation to update data on existing 3921 statements.
Note
Only statements in draft mode can be updated; statements which have been finalized cannot be updated.
The GraphQL mutation below demonstrates updating various fields on the 3921. Full documentation for the query is available as part of the introspective GraphQL documentation.
mutation {
updateF3921Statements(
statements: [
{
otxId: "df6949fe-95e8-41b4-bc31-561a9108e73a"
statement: {
corporationInfo: ["Cassatt and Company", "TIN: 111123456"]
}
}
{
otxId: "04eabee4-67dc-46bb-9415-578800fa26d4"
statement: {
dateOptionExercised: "2021-05-12"
exercisePricePerShare: "226.38"
numberSharesTransferred: 1422
}
}
]
) {
statements {
recordNumber
statement {
corporationInfo
dateOptionExercised
exercisePricePerShare
numberSharesTransferred
otxId
recipientFirstName
recipientLastName
uploaderId
}
messages
}
errors
}
}
# Terminate lines with \ character to allow command to span multiple lines.
# Escape quotation marks in body of mutation or query with backslashes.
# Use here document for data stream.
# Tested using the bash interpreter on Linux.
curl 'https://sandbox.ottertax.com/v2/graphql' \
-i \
-X POST \
-H 'content-type: application/json' \
-H 'access-token: YOUR ACCESS TOKEN' \
-H 'client: YOUR CLIENT ID' \
-H 'uid: YOUR UID' \
-d @- <<END_DATA
{
"query":"
mutation {
updateF3921Statements(
statements: [
{
otxId: \"df6949fe-95e8-41b4-bc31-561a9108e73a\"
statement: {
corporationInfo: [\"Cassatt and Company\", \"TIN: 111123456\"]
}
}
{
otxId: \"04eabee4-67dc-46bb-9415-578800fa26d4\"
statement: {
dateOptionExercised: \"2021-05-12\"
exercisePricePerShare: \"226.38\"
numberSharesTransferred: 1422
}
}
]
) {
statements {
recordNumber
statement {
corporationInfo
dateOptionExercised
exercisePricePerShare
numberSharesTransferred
otxId
recipientFirstName
recipientLastName
uploaderId
}
messages
}
errors
}
}
"
}
END_DATA
:: Terminate lines with ^ character to allow command to span multiple lines.
:: Precede quotation marks in body of mutation or query with triple backslashes.
:: Precede other quotation marks in data stream with single backslashes.
:: Tested using a command prompt on Windows 10.
curl "https://sandbox.ottertax.com/v2/graphql" ^
-i ^
-X POST ^
-H "content-type: application/json" ^
-H "access-token: YOUR ACCESS TOKEN" ^
-H "client: YOUR CLIENT ID" ^
-H "uid: YOUR UID" ^
-d "{ \"query\":\" ^
mutation { ^
updateF3921Statements( ^
statements: [ ^
{ ^
otxId: \\\"df6949fe-95e8-41b4-bc31-561a9108e73a\\\" ^
statement: { ^
corporationInfo: [\\\"Cassatt and Company\\\", \\\"TIN: 111123456\\\"] ^
} ^
} ^
{ ^
otxId: \\\"04eabee4-67dc-46bb-9415-578800fa26d4\\\" ^
statement: { ^
dateOptionExercised: \\\"2021-05-12\\\" ^
exercisePricePerShare: \\\"226.38\\\" ^
numberSharesTransferred: 1422 ^
} ^
} ^
] ^
) { ^
statements { ^
recordNumber ^
statement { ^
corporationInfo ^
dateOptionExercised ^
exercisePricePerShare ^
numberSharesTransferred ^
otxId ^
recipientFirstName ^
recipientLastName ^
uploaderId ^
} ^
messages ^
} ^
errors ^
} ^
} ^
\" }"
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
// This example uses version 2.9.1 of the
// open source gson library from Google.
// See https://github.com/google/gson.
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
// This example uses httpclient (version 4.5.13)
// and httpcore (version 4.4.13) libraries of the
// open source Apache HttpComponents project.
// See https://hc.apache.org/index.html.
import org.apache.http.entity.StringEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
// Download the OtterTax java classes for the GraphQL
// query and mutation responses at
// https://github.com/OtterTax/graphql-java-classes
import com.ottertax.support.UpdateF3921StatementsResponse;
public class StatementUpdater {
String endpoint = "https://sandbox.ottertax.com/v2/graphql";
String gql = String.join("\n",
"mutation {",
" updateF3921Statements(",
" statements: [",
" {",
" otxId: \"df6949fe-95e8-41b4-bc31-561a9108e73a\"",
" statement: {",
" corporationInfo: [\"Cassatt and Company\", \"TIN: 111123456\"]",
" }",
" }",
" {",
" otxId: \"04eabee4-67dc-46bb-9415-578800fa26d4\"",
" statement: {",
" dateOptionExercised: \"2021-05-12\"",
" exercisePricePerShare: \"226.38\"",
" numberSharesTransferred: 1422",
" }",
" }",
" ]",
" ) {",
" statements {",
" recordNumber",
" statement {",
" corporationInfo",
" dateOptionExercised",
" exercisePricePerShare",
" numberSharesTransferred",
" otxId",
" recipientFirstName",
" recipientLastName",
" uploaderId",
" }",
" messages",
" }",
" errors",
" }",
"}");
public String querify(String rawGraphql) {
Gson gson = new Gson();
return("{\"query\":" + gson.toJson(rawGraphql) + "}");
}
public void update() {
CloseableHttpClient httpClient = HttpClients.createDefault();
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String response = "";
try {
HttpPost httpPost = new HttpPost(endpoint);
httpPost.addHeader("content-type", "application/json");
httpPost.addHeader("access-token", "YOUR ACCESS TOKEN");
httpPost.addHeader("client", "YOUR CLIENT ID");
httpPost.addHeader("uid", "YOUR UID");
// Put the query in the post body.
StringEntity stringEntity = new StringEntity(querify(gql));
httpPost.setEntity(stringEntity);
CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
// Read the response.
BufferedReader reader = new BufferedReader(new InputStreamReader(
httpResponse.getEntity().getContent()));
StringBuffer responseBuffer = new StringBuffer();
String inputLine;
while ((inputLine = reader.readLine()) != null) {
responseBuffer.append(inputLine);
}
reader.close();
response = responseBuffer.toString();
int responseCode = httpResponse.getStatusLine().getStatusCode();
if( responseCode != 200 ) {
System.out.println("Response code from server was " + String.valueOf(responseCode) + ".");
}
httpResponse.close();
httpClient.close();
} catch(IOException e) {
System.out.println("Error posting GraphQL.\nExiting");
System.exit(1);
}
UpdateF3921StatementsResponse updateF3921StatementsResponse = gson.fromJson(response, UpdateF3921StatementsResponse.class);
System.out.println(gson.toJson(updateF3921StatementsResponse));
}
public static void main(String[] args) {
StatementUpdater statementUpdater = new StatementUpdater();
statementUpdater.update();
}
}
// Using graphql-request from
// https://github.com/prisma-labs/graphql-request
// Example tested with node version 16.16.0
import { GraphQLClient, gql } from 'graphql-request'
async function main() {
const endpoint = 'https://sandbox.ottertax.com/v2/graphql'
const graphQLClient = new GraphQLClient(endpoint, {
headers: { 'content-type': 'application/json',
'access-token': 'YOUR ACCESS TOKEN',
'client': 'YOUR CLIENT ID',
'uid': 'YOUR UID' }
})
const query = gql`
mutation {
updateF3921Statements(
statements: [
{
otxId: "df6949fe-95e8-41b4-bc31-561a9108e73a"
statement: {
corporationInfo: ["Cassatt and Company", "TIN: 111123456"]
}
}
{
otxId: "04eabee4-67dc-46bb-9415-578800fa26d4"
statement: {
dateOptionExercised: "2021-05-12"
exercisePricePerShare: "226.38"
numberSharesTransferred: 1422
}
}
]
) {
statements {
recordNumber
statement {
corporationInfo
dateOptionExercised
exercisePricePerShare
numberSharesTransferred
otxId
recipientFirstName
recipientLastName
uploaderId
}
messages
}
errors
}
}
`
const data = await graphQLClient.request(query)
console.log(JSON.stringify(data))
}
main().catch((error) => console.error(error))
<?php
// Tested with php-cli version 8.1.2.
$query =<<<'END_DATA'
mutation {
updateF3921Statements(
statements: [
{
otxId: "df6949fe-95e8-41b4-bc31-561a9108e73a"
statement: {
corporationInfo: ["Cassatt and Company", "TIN: 111123456"]
}
}
{
otxId: "04eabee4-67dc-46bb-9415-578800fa26d4"
statement: {
dateOptionExercised: "2021-05-12"
exercisePricePerShare: "226.38"
numberSharesTransferred: 1422
}
}
]
) {
statements {
recordNumber
statement {
corporationInfo
dateOptionExercised
exercisePricePerShare
numberSharesTransferred
otxId
recipientFirstName
recipientLastName
uploaderId
}
messages
}
errors
}
}
END_DATA;
$payload = array ('query' => $query);
$options = array(
'http' => array(
'method' => 'POST',
'content' => json_encode( $payload ),
'header' => "content-type: application/json\r\n" .
"access-token: YOUR ACCESS TOKEN\r\n" .
"client: YOUR CLIENT ID\r\n" .
"uid: YOUR UID\r\n"
)
);
$context = stream_context_create( $options );
$response = file_get_contents( 'https://sandbox.ottertax.com/v2/graphql',
false, $context );
if( $response === FALSE ) {
echo "Call to server failed.\n";
} else {
echo $response . "\n";
}
?>
# Using GQL from
# https://github.com/graphql-python/gql
# Tested using python version 3.10.4
from gql import gql, Client
from gql.transport.aiohttp import AIOHTTPTransport
transport = AIOHTTPTransport(url = "https://sandbox.ottertax.com/v2/graphql",
headers = { 'content-type': 'application/json',
'access-token': 'YOUR ACCESS TOKEN',
'client': 'YOUR CLIENT ID',
'uid': 'YOUR UID' })
client = Client(transport=transport, fetch_schema_from_transport=True)
query = gql(
"""
mutation {
updateF3921Statements(
statements: [
{
otxId: "df6949fe-95e8-41b4-bc31-561a9108e73a"
statement: {
corporationInfo: ["Cassatt and Company", "TIN: 111123456"]
}
}
{
otxId: "04eabee4-67dc-46bb-9415-578800fa26d4"
statement: {
dateOptionExercised: "2021-05-12"
exercisePricePerShare: "226.38"
numberSharesTransferred: 1422
}
}
]
) {
statements {
recordNumber
statement {
corporationInfo
dateOptionExercised
exercisePricePerShare
numberSharesTransferred
otxId
recipientFirstName
recipientLastName
uploaderId
}
messages
}
errors
}
}
"""
)
result = client.execute(query)
print(result)
# Tested using ruby 3.1.2.
require( 'net/http' )
require( 'uri' )
require( 'json' )
uri = URI( "https://sandbox.ottertax.com/v2/graphql" )
http = Net::HTTP.new(uri.host, uri.port)
if( uri.instance_of?( URI::HTTPS ) )
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
end
headers = { "content-type": "application/json",
"access-token": "YOUR ACCESS TOKEN",
"client": "YOUR CLIENT ID",
"uid": "YOUR UID" }
query = <<-END_DATA
mutation {
updateF3921Statements(
statements: [
{
otxId: "df6949fe-95e8-41b4-bc31-561a9108e73a"
statement: {
corporationInfo: ["Cassatt and Company", "TIN: 111123456"]
}
}
{
otxId: "04eabee4-67dc-46bb-9415-578800fa26d4"
statement: {
dateOptionExercised: "2021-05-12"
exercisePricePerShare: "226.38"
numberSharesTransferred: 1422
}
}
]
) {
statements {
recordNumber
statement {
corporationInfo
dateOptionExercised
exercisePricePerShare
numberSharesTransferred
otxId
recipientFirstName
recipientLastName
uploaderId
}
messages
}
errors
}
}
END_DATA
request = Net::HTTP::Post.new(uri.request_uri, headers )
request.body = {query: query}.to_json
response = http.request(request)
if( response.code == '200' )
payload = JSON.parse( response.body )
STDOUT.puts( payload )
else
STDOUT.puts( "Response code was #{response.code}:\n#{response.inspect}" )
end