Skip to content

Run a data function

Run one Datastruct data function and return its shaped result.

POST /func

POST /func runs one data function. config.data_func accepts one function identifier, not a list. Each function defines its own input and output contract.

Authorization

Requires an access token and a workflow belonging to the token organization. See Authentication.

Headers

Header Required Description
X-Datastruct-Access-Token Conditional Datastruct token
X-Datastruct-Workflow Conditional Header-token workflow
Authorization Conditional Alternative token header: Bearer <token>
Content-Type Recommended application/json; omission is accepted

Request body

JSON
{
  "access_token": "<access-token>",
  "workflow": "wfl_01jykdqt8yejf9hz2yvcqwb4gd",
  "config": {
    "context": "prod",
    "data_func": "<data-function-id>",
    "datafunc_response_passthrough": false,
    "sources": {}
  },
  "inputs": {}
}
Field Type Required Default Description
access_token string or null No null Body token
workflow string or null No null Body-token workflow
config object Yes — Run configuration
config.data_func string Yes — dfunc_ identifier
config.context string No dev prod, test, or dev
config.sources object No {} Source configuration
inputs object No {} Function-defined inputs

config.datafunc_response_passthrough is an optional boolean with a default of false. It selects the response mode defined below.

inputs is passed to the function without endpoint-level schema filtering. Additional top-level fields are also passed to the function, but the endpoint assigns no meaning to them. Do not rely on additional fields unless the function contract defines them.

Confirmation needed: Confirm how per-function input and output contracts will be published: individual pages, an appendix, or delivery with the integration.

Credential resolution

When the workflow enables credential auto-selection, a function can select a stored credential without a config.sources entry. Credentials resolve in this order:

  1. The stored credential named by cred_id.
  2. An auto-selected organization credential matching config.context, when enabled.
  3. No credential. A source that requires one fails with a credential error.

See Source configuration for the source configuration object.

Request example

Terminal
curl --request POST \
  --url https://api.us.datastruct.co/func \
  --header 'Content-Type: application/json' \
  --header 'X-Datastruct-Access-Token: <access token>' \
  --header 'X-Datastruct-Workflow: wfl_01jykdqt8yejf9hz2yvcqwb4gd' \
  --data '{
    "config": {
      "context": "prod",
      "data_func": "<data-function-id>"
    },
    "inputs": {
      "address_line_1": "100 Example Avenue",
      "city": "Charlottesville",
      "state": "VA",
      "postal_code": "22901"
    }
  }'

Confirmation needed: Replace <data-function-id> with an identifier approved for public examples. Current functions are customer or demo integrations.

Standard response

Standard mode applies when config.datafunc_response_passthrough is false or omitted.

Headers
HTTP/1.1 200 OK
Content-Type: application/json
JSON
{
  "transaction_id": "trx_01k2v8q9m7f3zb6cw4h5n0j1xd",
  "config": {
    "context": "prod",
    "data_func": "<data-function-id>",
    "datafunc_response_passthrough": false,
    "sources": {}
  },
  "outputs": {
    "<data-function-id>": {
      "output": {
        "match": true,
        "property_id": "P-4482910"
      },
      "pipes": {}
    }
  },
  "status": {
    "<data-function-id>": {
      "success": true,
      "message": "Success",
      "response_time_ms": 838
    }
  },
  "response_time_ms": 844
}
Field Type Description
transaction_id string Opaque trx_ transaction identifier
config object Configuration with defaults
outputs object One function-keyed entry
outputs.<func> object Function-defined output
status object One function-keyed entry
status.<func>.success boolean Function completion outcome
status.<func>.message string Outcome text; do not parse
status.<func>.response_time_ms integer Function time
response_time_ms integer Total service time

Function status has no match field. A function reports no-match inside its own output contract.

Confirmation needed: Data Serve currently adds organization_tuid to returned configuration from the access token and overwrites a client value. Confirm whether this internal plumbing field should remain public or be removed from the response contract.

Passthrough response

Passthrough mode applies when config.datafunc_response_passthrough is true. The function output moves to the top level, and Data Serve guarantees only response_time_ms.

JSON
{
  "transaction_id": "trx_01k2v8q9m7f3zb6cw4h5n0j1xd",
  "output": {
    "match": true,
    "property_id": "P-4482910"
  },
  "pipes": {},
  "response_time_ms": 844
}
Field Type Description
response_time_ms integer Total service time; always present
All other fields any Supplied by the data function

Passthrough responses have no shared status or config. A failed function returns HTTP 200 with any partial function output. The client must use the function’s own output fields to detect that failure.

Many functions return transaction_id, raw source results, a normalized output object, and a pipes object. This is a convention, not a shared contract. In a non-empty passthrough response, transaction_id appears only if the function supplies it.

When a function returns no output, Data Serve returns this fixed shape:

JSON
{
  "transaction_id": "trx_01k2v8q9m7f3zb6cw4h5n0j1xd",
  "output": {},
  "pipes": {},
  "response_time_ms": 12
}

Function failures

All failures below appear in an HTTP 200 response.

Message prefix Cause
Data function not found: Unknown function identifier
Data function error: The function raised an error
Unexpected error: Data Serve failed while collecting the result

A function can report its own business failure with success: false and partial output. Message wording is not a stable machine-readable code.

Request errors

This endpoint can return 401, 422, or 500. A missing, null, or malformed config.data_func returns 422; the value must match dfunc_ followed by 26 lowercase letters or digits. See Errors for error bodies and retry guidance.