Form 3,4,5 Parser

The Form 3, 4, 5 API offers a powerful interface for accessing and searching the comprehensive SEC EDGAR database, allowing users to retrieve the latest information on security offerings. The API transforms structured XML data from Form 3, 4, 5 filings into JSON format, providing a user-friendly and easily searchable dataset. Real-time updates ensure that new Form 3, 4, 5 filings are promptly added to the corpus.

Dataset Size: All Form 3, 4, 5 offerings filed since 2008.

Data Update Frequency: Less than 300 milliseconds.

API Endpoint

POST https://api.secfilingdata.com/v1/filings/form345/

Supported HTTP methods: POST

Request and response content type: JSON

Authentication

All requests require an API token in the Authorization header.

Authorization: AUTH_TOKEN

Request Parameters

Parameter Type Required Description
query_type string Required Search type. Supported:
  • formType
query_value string Required Supported:
  • 3
  • 4
  • 5
from integer Optional Pagination starting offset
size integer Optional Number of records to return (Maximum:100)
sort_order string Optional ASC or DESC

Request Example

{
  "query_type": "formType",
  "query_value": "3",
  "from": 0,
  "size": 10,
  "sort_order": "ASC"
}

Response

<?php

$live_api_key = 'YOUR_API_TOKEN';
$url = "https://api.secfilingdata.com/v1/filings/form345/";

$postData = [
    "query_type" => "formType",
    "query_value" => "3",
    "from" => "0",
    "size" => "10",
    "sort_order" => "ASC"
];

$ch = curl_init($url);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($postData));
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    "Content-Type: application/json",
    "Authorization: $live_api_key"
]);

$response = curl_exec($ch);
curl_close($ch);

echo $response;
import requests

url = "https://api.secfilingdata.com/v1/filings/form345/"
api_key = "YOUR_API_TOKEN"

payload = {
    "query_type": "formType",
    "query_value": "3",
    "from": "0",
    "size": "10",
    "sort_order": "ASC"
}

headers = {
    "Authorization": api_key,
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
const url = "https://api.secfilingdata.com/v1/filings/form345/";
const apiKey = "YOUR_API_TOKEN";

const payload = {
  query_type: "formType",
  query_value: "3",
  from: "0",
  size: "10",
  sort_order: "ASC",
};

fetch(url, {
  method: "POST",
  headers: {
    "Authorization": apiKey,
    "Content-Type": "application/json",
  },
  body: JSON.stringify(payload),
})
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
const url = "https://api.secfilingdata.com/v1/filings/form345/";
const apiKey = "YOUR_API_TOKEN";

const payload = {
  query_type: "formType",
  query_value: "3",
  from: "0",
  size: "10",
  sort_order: "ASC",
};

async function getData() {
  const response = await fetch(url, {
    method: "POST",
    headers: {
      "Authorization": apiKey,
      "Content-Type": "application/json",
    },
    body: JSON.stringify(payload),
  });

  const data = await response.json();
  console.log(data);
}

getData();
curl -X POST "https://api.secfilingdata.com/v1/filings/form345/" \
  -H "Authorization: YOUR_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "query_type":"formType",
    "query_value":"3",
    "from":"0",
    "size":"10",
    "sort_order":"ASC"
}'
package main

import (
  "bytes"
  "fmt"
  "io"
  "net/http"
)

func main() {
  url := "https://api.secfilingdata.com/v1/filings/form345/"

  jsonData := []byte(`{
    "query_type":"formType",
    "query_value":"3",
    "from":"0",
    "size":"10",
    "sort_order":"ASC"
  }`)

  req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
  if err != nil {
    panic(err)
  }

  req.Header.Set("Authorization", "YOUR_API_TOKEN")
  req.Header.Set("Content-Type", "application/json")

  client := &http.Client{}
  resp, err := client.Do(req)
  if err != nil {
    panic(err)
  }
  defer resp.Body.Close()

  body, _ := io.ReadAll(resp.Body)
  fmt.Println(string(body))
}
import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class Main {
    public static void main(String[] args) throws IOException, InterruptedException {

        String apiKey = "YOUR_API_TOKEN";

        String json = """
        {
          "query_type":"formType",
          "query_value":"3",
          "from":"0",
          "size":"10",
          "sort_order":"ASC"
        }
        """;

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://api.secfilingdata.com/v1/filings/form345/"))
                .header("Authorization", apiKey)
                .header("Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(json))
                .build();

        HttpResponse response =
                client.send(request, HttpResponse.BodyHandlers.ofString());

        System.out.println(response.body());
    }
}
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var client = new HttpClient();

        client.DefaultRequestHeaders.Add("Authorization", "YOUR_API_TOKEN");

        var json = @"{
            ""query_type"":""formType"",
            ""query_value"":""3"",
            ""from"":""0"",
            ""size"":""10"",
            ""sort_order"":""ASC""
        }";

        var content = new StringContent(json, Encoding.UTF8, "application/json");

        var response = await client.PostAsync(
            "https://api.secfilingdata.com/v1/filings/form345/",
            content
        );

        Console.WriteLine(await response.Content.ReadAsStringAsync());
    }
}
require "net/http"
require "uri"
require "json"

uri = URI("https://api.secfilingdata.com/v1/filings/form345/")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request["Authorization"] = "YOUR_API_TOKEN"
request["Content-Type"] = "application/json"

request.body = {
  query_type: "formType",
  query_value: "3",
  from: "0",
  size: "10",
  sort_order: "ASC"
}.to_json

response = http.request(request)

puts response.body

Response Example

[
  {
    "transactions": [
      {
        "id": "46",
        "accessionNo": "0000320193-21-000111",
        "filedAt": "2021-11-12",
        "schemaVersion": "X0206",
        "documentType": "3",
        "periodOfReport": "2021-11-09",
        "notSubjectToSection16": false,
        "issuer": {
          "cik": "0000320193",
          "name": "Apple Inc.",
          "tradingSymbol": "AAPL"
        },
        "reportingOwner": {
          "cik": "0001453149",
          "name": "Gorsky Alex",
          "address": {
            "street1": "ONE APPLE PARK WAY",
            "city": "CUPERTINO",
            "state": "CA",
            "zipCode": "95014"
          },
          "relationship": {
            "isDirector": true,
            "isOfficer": true,
            "officerTitle": "",
            "isTenPercentOwner": true,
            "isOther": true
          }
        }
      }
    ],
    "nonDerivativeTable": [],
    "footnotes": [],
    "ownerSignature": {
      "signatureName": "/s/ Sam Whittington, Attorney-in-Fact for Alex Gorsky",
      "signatureDate": "2021-11-12"
    }
  }
]
Important:
Requests must use: Content-Type:application/json
POST body must be JSON encoded using:json_encode($postData)

HTTP Status Codes

Status Code Description
200 Successful request
204 No results found
400 Invalid request parameters
401 Unauthorized / Invalid token
500 Internal server error