Functions

Create a Function

Create a new function of any type (transform, analyze, route, join, split, payload_shaping, or enrich).

Each function type serves different purposes:

  • Transform: Extract structured data from unstructured documents
  • Analyze: Analyze the visual context of documents to extract information
  • Route: Route data to different functions based on conditions
  • Join: Combine data from multiple sources
  • Split: Split data into multiple outputs
  • Payload Shaping: Customize and transform input payloads using JMESPath expressions
  • Enrich: Enhance data with semantic search against collections
POST
/v2/functions
x-api-key<token>

Authenticate using API Key in request header

In: header

Request Body

application/json

functionName*string

Name of function. Must be UNIQUE on a per-environment basis.

displayName?string

Display name of function. Human-readable name to help you identify the function.

type*string

The type of the function.

Value in"transform" | "route" | "split" | "join" | "analyze" | "payload_shaping" | "enrich"
tags?array<string>

Array of tags to categorize and organize functions.

outputSchemaName*string

Name of output schema object.

outputSchema*object

Desired output structure defined in standard JSON Schema convention.

tabularChunkingEnabled?boolean

Whether tabular chunking is enabled on the pipeline. This processes tables in CSV/Excel in row batches, rather than all rows at once.

Response Body

application/json

curl -X POST "https://api.bem.ai/v2/functions" \  -H "Content-Type: application/json" \  -d '{    "name": "extract-freight-tender-summary",    "type": "payload_shaping",    "description": "Transform complex freight load tender payloads into simplified summary data by extracting load reference, calculating total weight, and consolidating unique origins and submitters",    "shapingSchema": "{ \"load_reference\": tenders[0].loadReference, \"total_weight_tons\": tenders[].weightTons | sum(@), \"origins\": tenders[].origin | unique(@), \"submitters\": tenders[].submitter.name | unique(@) }"  }'
{
  "functionID": "string",
  "functionName": "string",
  "versionNum": 0,
  "type": "transform",
  "usedInWorkflows": [
    [
      {
        "workflowID": "w_1234567890",
        "workflowName": "My Workflow",
        "currentVersionNum": 1,
        "usedInWorkflowVersionNums": [
          1,
          2,
          3
        ]
      }
    ]
  ],
  "displayName": "string",
  "tags": [
    "billing",
    "finance",
    "automated"
  ],
  "audit": {
    "functionCreatedBy": {
      "userActionID": "string",
      "userID": "string",
      "userEmail": "string",
      "apiKeyName": "string",
      "emailAddress": "string",
      "createdAt": "2019-08-24T14:15:22Z"
    },
    "functionLastUpdatedBy": {
      "userActionID": "string",
      "userID": "string",
      "userEmail": "string",
      "apiKeyName": "string",
      "emailAddress": "string",
      "createdAt": "2019-08-24T14:15:22Z"
    },
    "versionCreatedBy": {
      "userActionID": "string",
      "userID": "string",
      "userEmail": "string",
      "apiKeyName": "string",
      "emailAddress": "string",
      "createdAt": "2019-08-24T14:15:22Z"
    }
  },
  "outputSchemaName": "Freight Load Schema",
  "outputSchema": {
    "type": "object",
    "required": [
      "tenders"
    ],
    "properties": {
      "tenders": {
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "loadReference",
            "origin",
            "destination",
            "weightTons",
            "loadType",
            "desiredDeliveryDate",
            "bidSubmissionDeadline",
            "submitter"
          ],
          "properties": {
            "origin": {
              "type": "string",
              "description": "The starting point of the shipment."
            },
            "loadType": {
              "type": "string",
              "description": "The type of goods being shipped."
            },
            "submitter": {
              "type": "object",
              "required": [
                "name",
                "position",
                "contactInfo"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Name of the person submitting the tender."
                },
                "position": {
                  "type": "string",
                  "description": "Position of the submitter within their company."
                },
                "contactInfo": {
                  "type": "object",
                  "required": [
                    "email"
                  ],
                  "properties": {
                    "email": {
                      "type": "string",
                      "format": "email",
                      "description": "Email address of the submitter."
                    },
                    "phone": {
                      "type": "string",
                      "description": "Phone number of the submitter."
                    }
                  }
                }
              }
            },
            "weightTons": {
              "type": "number",
              "description": "The weight of the load in tons."
            },
            "destination": {
              "type": "string",
              "description": "The endpoint of the shipment."
            },
            "loadReference": {
              "type": "string",
              "description": "Unique identifier for the load tender."
            },
            "desiredDeliveryDate": {
              "type": "string",
              "format": "date",
              "description": "The preferred date for the shipment to be delivered."
            },
            "bidSubmissionDeadline": {
              "type": "string",
              "format": "date",
              "description": "The deadline for submitting bids."
            }
          }
        }
      }
    }
  },
  "emailAddress": "eml_2c9AXFXHwiaL4vPXDTOS171OJ8T@pipeline.bem.ai",
  "tabularChunkingEnabled": false
}