Load Fulfillment Tools data to DuckDB
Build a Fulfillment Tools to DuckDB pipeline with your coding agent. One prompt scaffolds it with the dltHub AI harness, plus the Fulfillment Tools API base URL, auth, endpoints, and incremental loading.
fulfillmenttools is an order management and fulfillment platform providing REST APIs for managing orders, inventory, and logistics workflows. Everything needed to build a working Fulfillment Tools → DuckDB pipeline is on this page: the API's base URL, authentication, endpoints, pagination and incremental field — plus a prompt that hands the whole job to your coding agent.
Build your Fulfillment Tools to DuckDB pipeline
Paste this prompt into Claude, Codex, or Cursor. The agent does the rest.
PromptRunuvx dlthub-init@latestto build a pipeline from Fulfillment Tools to DuckDB and run it on dltHub
That scaffolds a dltHub workspace and installs the dltHub AI harness — the project rules, the secrets-management skill, and the dlt MCP server your agent needs to work safely. From there it reads the Fulfillment Tools API, proposes the endpoints to load, then writes, runs and validates the pipeline while you review rather than type. Credentials are inspected through MCP tools, so your agent never reads secrets.toml itself. How the LLM-native workflow works →
Prefer to write it yourself? Every fact the agent uses is below.
Fulfillment Tools API at a glance
| Base URL | https://{projectId}.api.fulfillmenttools.com |
| Example endpoint | GET api/facilities |
| Records found at | facilities |
| Authentication | all requests require a Bearer token obtained via Google Identity Platform authentication — sent in the Authorization header, prefixed Bearer |
| Pagination | Cursor-based via startAfterId, next cursor at pageInfo.endCursor, page size via size (default 25, max 500). The fulfillmenttools API utilizes two main pagination patterns: (1) Standard GET endpoints commonly use the 'size' (page size) and 'startAfterId' (cursor) query parameters. (2) Search endpoints (POST) and other advanced endpoints return a 'pageInfo' object containing cursors (e.g., 'endCursor') and use 'size' (for forward pagination) or 'last' (for backward pagination) in the request body, with a maximum value of 250 for these search-specific parameters. |
| Record id | id |
These values come from the Fulfillment Tools API documentation. Check them against the vendor's current reference before relying on them in production.
How do I authenticate with the Fulfillment Tools API?
Fulfillmenttools uses Google Identity Platform to authenticate; credentials (username/email, password, and API key) are exchanged for a short-lived JWT, which must be sent as a Bearer token in the Authorization header. All requests require both the 'Authorization: Bearer ' header and a 'Content-Type: application/json' header.
1. Get your credentials
Access to the fulfillmenttools REST API is managed via a tenant-based setup. To obtain credentials:
- Ensure you have been invited to a tenant by an administrator, who will provide the necessary project details via email.
- The required credentials consist of your assigned Project ID, Username (email address), Password, and the Google Identity Platform API Key (also referred to as AUTHKEY).
- These credentials are used to retrieve an authentication token (JWT) by sending a POST request to the Google Identity Toolkit endpoint: https://identitytoolkit.googleapis.com/v1/accounts:signInWithPassword?key={AUTHKEY}.
- Provide the {email}, {password}, and returnSecureToken: true in the request body.
- Use the resulting idToken (as a Bearer token in the Authorization header) for all subsequent API requests.
2. Add them to .dlt/secrets.toml
[sources.fulfillment_tools_source] fft_project_id = "your-project-id" fft_auth_key = "your-google-identity-api-key" fft_username = "your-email@example.com" fft_password = "your-password"
dlt reads this file automatically at runtime. With the harness, the setup-secrets skill prompts you for the values and never handles the raw credential in chat. For production, see setting up credentials with dlt.
What Fulfillment Tools data can I load into DuckDB?
These are the Fulfillment Tools endpoints dlt can load into DuckDB:
| Resource | Endpoint | Method | Data selector | Description |
|---|---|---|---|---|
| facilities | /api/facilities | GET | facilities | List all facilities |
| orders | /api/orders | GET | orders | List orders |
| load_units | /api/load-units | GET | loadUnits | List load units |
| listings | /api/facilities/{facilityId}/listings | GET | listings | List listings for a facility |
| stock | /api/stock/search | POST | stocks | Search stocks with pagination |
How do I load only new Fulfillment Tools records?
The Fulfillment Tools API reference does not document a timestamp or sequence field for these endpoints, so there is nothing to advertise here as verified. Pick a field from the endpoints table above that increases with every write, then set it as the cursor_path.
{"name": "facilities", "endpoint": { "path": "api/facilities", # Replace with a field that increases on every write. "incremental": {"cursor_path": "REPLACE_ME", "initial_value": "2024-01-01T00:00:00Z"}, }}
On the first run dlt loads everything from initial_value; on every run after that it requests only what changed and appends with write_disposition="merge" if you set a primary key. See incremental loading.
What does the generated Fulfillment Tools pipeline look like?
A standard dlt REST API pipeline — the same code you would write by hand, loading orders and facilities from the Fulfillment Tools API into DuckDB:
import dlt from dlt.sources.rest_api import RESTAPIConfig, rest_api_resources @dlt.source def fulfillment_tools_source(api_key=dlt.secrets.value): config: RESTAPIConfig = { "client": { "base_url": "https://{projectId}.api.fulfillmenttools.com", "auth": {"type": "bearer", "token": api_key}, }, "resources": [ {"name": "facilities", "endpoint": {"path": "api/facilities", "data_selector": "facilities"}}, {"name": "load_units", "endpoint": {"path": "api/load-units", "data_selector": "loadUnits"}} ], } yield from rest_api_resources(config) def load_fulfillment_tools_to_duckdb() -> None: pipeline = dlt.pipeline( pipeline_name="fulfillment_tools_pipeline", destination="duckdb", dataset_name="fulfillment_tools_data", ) load_info = pipeline.run(fulfillment_tools_source()) print(load_info) if __name__ == "__main__": load_fulfillment_tools_to_duckdb()
Run it with python fulfillment_tools_pipeline.py. The agent iterates on this until it loads cleanly — you review and approve, rather than write it from scratch.
How do I query Fulfillment Tools data in DuckDB?
dlt creates one table per resource. Query the loaded data with Python or SQL — or ask your agent to, through the MCP server's execute_sql_query tool.
Python (pandas DataFrame):
import dlt data = dlt.pipeline("fulfillment_tools_pipeline").dataset() df = data.facilities.df() print(df.head())
SQL:
SELECT * FROM fulfillment_tools_data.facilities LIMIT 10;
See querying your data with dataset and exploring it in marimo notebooks.
How do I deploy the Fulfillment Tools to DuckDB pipeline in production?
The pipeline runs locally, which is ideal for prototyping and one-off analysis. When you need it on a schedule, monitored on every load, and shared with your team, deploy the same dlt code on the dltHub platform — no infrastructure to maintain. The prompt above already ends with "run it on dltHub", so your agent can take it there directly.
- Deploy & schedule — run the pipeline as a managed job with automatic retries.
- Monitor — observable job queues, alerting, and load metrics for every run.
- Transform — promote raw Fulfillment Tools loads into governed, documented models.
- Visualize & share — explore data in notebooks and publish live dashboards instead of static screenshots.
What other destinations can I load Fulfillment Tools data to?
dlt loads into any of these — only the destination argument changes:
| Destination | Example value |
|---|---|
| PostgreSQL | "postgres" |
| BigQuery | "bigquery" |
| Snowflake | "snowflake" |
| Redshift | "redshift" |
| Databricks | "databricks" |
| Filesystem (S3, GCS, Azure) | "filesystem" |
Set dlt.pipeline(destination="snowflake") and add credentials in .dlt/secrets.toml. On the dltHub platform the same pipeline runs against a managed Iceberg lakehouse. See the full destinations list.
Next steps
Was this page helpful?
Community Hub
Need more dlt context for Fulfillment Tools to DuckDB?
Request dlt skills, commands, AGENT.md files, and AI-native context.