/extract

Create Schema

Create a new extraction schema.

Creates a JSON Schema that defines the structure of data to extract from documents. The schema must conform to our supported subset of JSON Schema 2020-12 features.

Supported Schema Features:

Basic Types: 1. string: Text data with optional constraints (minLength, maxLength, pattern, enum) 2. integer: Whole numbers with optional constraints (minimum, maximum, enum) 3. number: Decimal numbers with optional constraints (minimum, maximum, enum) 4. boolean: True/false values 5. null: Null values (often used with anyOf for optional fields)

Complex Types: 1. object: Key-value pairs with defined properties 2. array: Lists of items with defined item schemas 3. anyOf: Union types (e.g., string or null for optional fields)

String Formats: Supported formats: date-time, time, date, duration, email, hostname, ipv4, ipv6, uuid, uri

Schema Structure: 1. Root schema must be an object type 2. Use $defs for reusable schema components 3. Use $ref to reference definitions 4. Arrays must have items schema defined

Constraints: 1. Maximum 10 leaf nodes per array (prevents overly complex schemas) 2. No circular references in $ref definitions 3. String formats must be from the supported list

Example Schemas:

Simple Company Schema:

{
  "type": "object",
  "properties": {
    "company_name": {
      "type": "string",
      "description": "The name of the company exactly as it appears in the document"
    },
    "form_type": {
      "type": "string",
      "enum": ["10-K", "10-Q", "8-K", "S-1"],
      "description": "The type of SEC form"
    },
    "trading_symbol": {
      "type": "string",
      "description": "The trading symbol of the company"
    },
    "zip_code": {
      "type": "integer",
      "description": "The zip code of the company headquarters"
    }
  },
  "required": ["company_name", "form_type", "trading_symbol", "zip_code"]
}

Complex Resume Schema:

{
  "type": "object",
  "properties": {
    "personalInfo": {
      "type": "object",
      "properties": {
        "fullName": {"type": "string"},
        "contact": {
          "type": "object",
          "properties": {
            "emails": {
              "type": "array",
              "items": {"type": "string", "format": "email"}
            },
            "phones": {
              "type": "array",
              "items": {"type": "string"}
            }
          }
        }
      },
      "required": ["fullName"]
    },
    "workExperience": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "jobTitle": {"type": "string"},
          "company": {"type": "string"},
          "startDate": {"type": "string"},
          "endDate": {"type": ["string", "null"]},
          "isCurrent": {"type": "boolean"}
        },
        "required": ["jobTitle", "company", "startDate"]
      }
    }
  },
  "required": ["personalInfo", "workExperience"]
}

Schema with References:

{
  "type": "object",
  "properties": {
    "algorithms": {
      "type": "array",
      "items": {"$ref": "#/$defs/algorithm"}
    }
  },
  "$defs": {
    "algorithm": {
      "type": "object",
      "properties": {
        "name": {"type": "string"},
        "description": {"type": "string"}
      },
      "required": ["name"]
    }
  }
}

Best Practices: 1. Use descriptive field names that clearly indicate what data should be extracted 2. Add detailed descriptions to help the AI understand what to extract 3. Use enums for known values (e.g., form types, status values) 4. Make fields optional by using anyOf with null or omitting from required 5. Use arrays for lists of similar items (e.g., work experience, education) 6. Keep schemas focused - avoid overly complex nested structures 7. Test with sample documents to ensure the schema captures the expected data

post/extract/schemas

Request body

namestring required

Name of the schema

descriptionstring nullable

Description of the schema

schema_definitionobject required

JSON Schema definition. Must be a valid JSON Schema that defines the structure of data to extract from documents. See the comprehensive schema guide in the API documentation for detailed examples and supported features.

metadataobject nullable

Additional metadata for the schema

Example request

{
  "schema_definition": {
    "properties": {
      "company_name": {
        "description": "The name of the company exactly as it appears in the document",
        "type": "string"
      },
      "form_type": {
        "description": "The type of SEC form",
        "enum": [
          "10-K",
          "10-Q",
          "8-K",
          "S-1"
        ],
        "type": "string"
      },
      "trading_symbol": {
        "description": "The trading symbol of the company",
        "type": "string"
      },
      "zip_code": {
        "description": "The zip code of the company headquarters",
        "type": "integer"
      }
    },
    "required": [
      "company_name",
      "form_type",
      "trading_symbol",
      "zip_code"
    ],
    "type": "object"
  }
}

Response

Successful Response

schema_idstring required

Unique ID of the schema

namestring required

Name of the schema

descriptionstring nullable

Description of the schema

schema_definitionobject required

JSON schema definition

metadataobject required

Schema metadata

created_atstring required

Timestamp when the schema was created

updated_atstring required

Timestamp when the schema was last updated

Changes