{
  "service": "reducto",
  "displayName": "Reducto",
  "categories": [
    "AI",
    "Productivity",
    "Data"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "REDUCTO_API_KEY",
      "description": "Reducto API key sent with the Authorization Bearer header. Create or manage keys in Reducto Studio: https://studio.reducto.ai/.",
      "extraFields": []
    }
  ],
  "homepageUrl": "https://reducto.ai",
  "actions": [
    {
      "id": "reducto.extract_data",
      "service": "reducto",
      "name": "extract_data",
      "description": "Extract structured JSON from a Reducto-supported document URL or file id using a caller-supplied JSON Schema.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "documentUrl": {
            "type": "string",
            "minLength": 1,
            "description": "A public URL, presigned URL, reducto:// file identifier, or jobid:// parse job identifier accepted by Reducto.",
            "pattern": "\\S"
          },
          "schema": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "JSON Schema object that tells Reducto which fields to extract."
          },
          "systemPrompt": {
            "type": "string",
            "minLength": 1,
            "description": "Optional system prompt used by Reducto extraction.",
            "pattern": "\\S"
          },
          "parsing": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Reducto configuration object forwarded to the official API using Reducto option names."
          },
          "settings": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Reducto configuration object forwarded to the official API using Reducto option names."
          }
        },
        "additionalProperties": false,
        "required": [
          "documentUrl",
          "schema"
        ],
        "description": "Input for extracting structured data from a document with Reducto."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "jobId": {
            "anyOf": [
              {
                "type": "string",
                "description": "The Reducto job identifier when returned."
              },
              {
                "type": "null"
              }
            ]
          },
          "duration": {
            "anyOf": [
              {
                "type": "number",
                "description": "The Reducto processing duration in seconds when returned."
              },
              {
                "type": "null"
              }
            ]
          },
          "pdfUrl": {
            "anyOf": [
              {
                "type": "string",
                "description": "The temporary processed PDF URL when returned."
              },
              {
                "type": "null"
              }
            ]
          },
          "studioLink": {
            "anyOf": [
              {
                "type": "string",
                "description": "The Reducto Studio result URL when returned."
              },
              {
                "type": "null"
              }
            ]
          },
          "usage": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "num_pages": {
                    "type": "integer",
                    "description": "The number of document pages processed by Reducto."
                  }
                },
                "additionalProperties": true,
                "description": "Usage counters returned by Reducto."
              },
              {
                "type": "null"
              }
            ]
          },
          "result": {
            "description": "The Reducto result payload."
          },
          "raw": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Reducto response payload."
          }
        },
        "additionalProperties": false,
        "description": "A normalized Reducto response with stable convenience fields and the raw upstream payload."
      }
    },
    {
      "id": "reducto.parse_document",
      "service": "reducto",
      "name": "parse_document",
      "description": "Parse a Reducto-supported document URL or file id into structured chunks, blocks, and document metadata.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "documentUrl": {
            "type": "string",
            "minLength": 1,
            "description": "A public URL, presigned URL, reducto:// file identifier, or jobid:// parse job identifier accepted by Reducto.",
            "pattern": "\\S"
          },
          "enhance": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Reducto configuration object forwarded to the official API using Reducto option names."
          },
          "retrieval": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Reducto configuration object forwarded to the official API using Reducto option names."
          },
          "formatting": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Reducto configuration object forwarded to the official API using Reducto option names."
          },
          "spreadsheet": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Reducto configuration object forwarded to the official API using Reducto option names."
          },
          "settings": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Reducto configuration object forwarded to the official API using Reducto option names."
          }
        },
        "additionalProperties": false,
        "required": [
          "documentUrl"
        ],
        "description": "Input for parsing a document with Reducto."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "jobId": {
            "anyOf": [
              {
                "type": "string",
                "description": "The Reducto job identifier when returned."
              },
              {
                "type": "null"
              }
            ]
          },
          "duration": {
            "anyOf": [
              {
                "type": "number",
                "description": "The Reducto processing duration in seconds when returned."
              },
              {
                "type": "null"
              }
            ]
          },
          "pdfUrl": {
            "anyOf": [
              {
                "type": "string",
                "description": "The temporary processed PDF URL when returned."
              },
              {
                "type": "null"
              }
            ]
          },
          "studioLink": {
            "anyOf": [
              {
                "type": "string",
                "description": "The Reducto Studio result URL when returned."
              },
              {
                "type": "null"
              }
            ]
          },
          "usage": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "num_pages": {
                    "type": "integer",
                    "description": "The number of document pages processed by Reducto."
                  }
                },
                "additionalProperties": true,
                "description": "Usage counters returned by Reducto."
              },
              {
                "type": "null"
              }
            ]
          },
          "result": {
            "description": "The Reducto result payload."
          },
          "raw": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Reducto response payload."
          }
        },
        "additionalProperties": false,
        "description": "A normalized Reducto response with stable convenience fields and the raw upstream payload."
      }
    },
    {
      "id": "reducto.split_document",
      "service": "reducto",
      "name": "split_document",
      "description": "Split a Reducto-supported document URL or file id into named page sections using natural-language section descriptions.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "documentUrl": {
            "type": "string",
            "minLength": 1,
            "description": "A public URL, presigned URL, reducto:// file identifier, or jobid:// parse job identifier accepted by Reducto.",
            "pattern": "\\S"
          },
          "splitDescription": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "minLength": 1,
                  "description": "The section or partition name Reducto should identify.",
                  "pattern": "\\S"
                },
                "description": {
                  "type": "string",
                  "minLength": 1,
                  "description": "Natural-language criteria that describe this section.",
                  "pattern": "\\S"
                },
                "partition_key": {
                  "anyOf": [
                    {
                      "type": "string",
                      "minLength": 1,
                      "description": "Optional Reducto partition key used for partition-aware splitting."
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              },
              "additionalProperties": false,
              "required": [
                "name",
                "description"
              ],
              "description": "A Reducto split category description."
            },
            "description": "The Reducto section descriptions to identify in the document.",
            "minItems": 1
          },
          "splitRules": {
            "type": "string",
            "minLength": 1,
            "description": "Optional prompt that defines global rules for splitting.",
            "pattern": "\\S"
          },
          "parsing": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Reducto configuration object forwarded to the official API using Reducto option names."
          },
          "settings": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "Reducto configuration object forwarded to the official API using Reducto option names."
          }
        },
        "additionalProperties": false,
        "required": [
          "documentUrl",
          "splitDescription"
        ],
        "description": "Input for splitting a document into named sections with Reducto."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "sectionMapping": {
            "anyOf": [
              {
                "type": "object",
                "additionalProperties": {
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "description": "A page number."
                  },
                  "description": "One-indexed Reducto page numbers for the section."
                },
                "description": "The page numbers mapped by Reducto for each section name."
              },
              {
                "type": "null"
              }
            ]
          },
          "splits": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "The split section name."
                },
                "pages": {
                  "type": "array",
                  "items": {
                    "type": "integer",
                    "description": "A page number."
                  },
                  "description": "One-indexed Reducto page numbers for the split."
                }
              },
              "additionalProperties": true,
              "description": "A Reducto split record."
            },
            "description": "The split records returned by Reducto."
          },
          "usage": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "num_pages": {
                    "type": "integer",
                    "description": "The number of document pages processed by Reducto."
                  }
                },
                "additionalProperties": true,
                "description": "Usage counters returned by Reducto."
              },
              {
                "type": "null"
              }
            ]
          },
          "result": {
            "description": "The raw Reducto result object."
          },
          "raw": {
            "type": "object",
            "properties": {},
            "additionalProperties": true,
            "description": "The raw Reducto split response payload."
          }
        },
        "additionalProperties": false,
        "description": "A normalized Reducto split response with section mapping, splits, and the raw upstream payload."
      }
    }
  ]
}
