✓ Verified
💻 Development
✓ Enhanced Data
Jobtread Api
This skill lets you operate JobTread entirely through openclaw using the Pave-based API.
- Rating
- 4.3 (11 reviews)
- Downloads
- 1,331 downloads
- Version
- 1.0.0
Overview
This skill lets you operate JobTread entirely through openclaw using the Pave-based API.
Complete Documentation
View Source →Skill: JobTread via Pave Query API
Summary
This skill lets you operate JobTread entirely through openclaw using the Pave-based API athttps://api.jobtread.com/pave. Every request is a single POST with a query object that mirrors GraphQL-style expressions, and you decide which fields you want back. With the right grant key, you can create and manage accounts (customers/vendors), jobs, documents, tasks, locations, custom fields, documents, and even subscribe to webhooks for live updates.Setup & Credentials
- Create a grant: Login to https://app.jobtread.com/grants and create a new grant for automation. Copy the one-time
grantKey(it begins withgrant_and will only show once). - Store the key locally: Use a secure file such as
~/.config/jobtread/grant_key. Example:
bash
mkdir -p ~/.config/jobtread
echo "grant_xxx" > ~/.config/jobtread/grant_key
chmod 600 ~/.config/jobtread/grant_key
- Keep it fresh: JobTread expires keys after 3 months of inactivity, so schedule a reminder (cron/heartbeat) to rotate or re-use the grant before expiration.
- Optional webhook secret: If you plan to receive webhooks, note your endpoint URL and save the webhook ID in the same folder so you can disable or inspect it later.
Authentication
- Every POST to
/pavemust include the grant key underquery.$.grantKey. Example payload:
json
{
"query": {
"$": { "grantKey": "grant_xxx" },
"currentGrant": { "id": {}, "user": { "name": {} } }
}
}
- You can also set
notify,timeZone, orviaUserIdinside$when you need to suppress notifications or scope results. - For signed queries (PDF tokens, pre-signed data), call
pdfToken: { _: signQuery, $: { query: {...} } }and append the token tohttps://api.jobtread.com/t/.
API Basics & Request Flow
- All requests go to
POST https://api.jobtread.com/pavewithContent-Type: application/json. - Structure:
json
{
"query": {
"$": { "grantKey": "grant_xxx" },
"operation": {
"$": { ...inputs... },
"field": { ...fields... }
}
}
}
- Fields you request (
id,name, etc.) determine what JobTread returns. Always includeidwhen you plan to reference the object later. _typein responses tells you the schema for that node.
Common Patterns & Examples
1. Discover your organization ID
yaml
currentGrant:
user:
memberships:
nodes:
organization:
id: {}
name: {}
organization.id in any following query.2. Create customers/vendors
- Customer
yaml
createAccount:
$:
name: "Test Customer"
type: customer
organizationId: "ORG_ID"
createdAccount:
id: {}
name: {}
type: {}
- Vendor (same as above but
type: vendor).
3. Read or update accounts
- Read account by supplying
idand requesting fields:
yaml
account:
$:
id: "ACCOUNT_ID"
id: {}
name: {}
isTaxable: {}
- Update and include
customFieldValuesif needed:
yaml
updateAccount:
$:
id: "ACCOUNT_ID"
isTaxable: false
account:
id: {}
isTaxable: {}
4. Query accounts list with pagination, sorting, and filters
yaml
organization:
$: {}
id: {}
accounts:
$:
size: 5
page: "1"
sortBy:
- field: type
order: desc
where:
and:
- - type
- =
- customer
- - name
- =
- "Sebas Clients"
nextPage: {}
nodes:
id: {}
name: {}
type: {}
5. Use where with or, nested fields, or custom fields
- Find account by custom field name:
yaml
organization:
$: {}
id: {}
contacts:
$:
with:
cf:
_: customFieldValues
$:
where:
- - customField
- name
- "VIP"
values:
$:
field: value
where:
- - cf
- values
- =
- "Yes"
nodes:
id: {}
name: {}
6. Locations and nested filters
Create location and find others tied to the same account:yaml
createLocation:
$:
accountId: "ACCOUNT_ID"
name: Test Location
address: "123 Main St"
createdLocation:
id: {}
name: {}
organization:
$: {}
id: {}
locations:
$:
where:
- - account
- name
- Test Name
nodes:
id: {}
name: {}
account:
id: {}
name: {}
7. Documents, jobs, and aggregates
- Get a job's documents grouped by type/status and sums:
yaml
job:
$:
id: "JOB_ID"
documents:
$:
where:
- - type
- in
- - customerInvoice
- customerOrder
group:
by:
- type
- status
aggs:
amountPaid:
sum: amountPaid
priceWithTax:
sum: priceWithTax
withValues: {}
- Get document PDF token (append to
https://api.jobtread.com/t/{{token}}):
yaml
pdfToken:
_: signQuery
$:
query:
pdf:
$:
id: "DOCUMENT_ID"
8. Custom fields
- Read a record's custom field values (limit 25 per request):
yaml
account:
$:
id: "ACCOUNT_ID"
customFieldValues:
$:
size: 25
nodes:
id: {}
value: {}
customField:
id: {}
- Update a custom field via
customFieldValuesmap:
yaml
updateAccount:
$:
id: "ACCOUNT_ID"
customFieldValues:
"CUSTOM_FIELD_ID": "New value"
account:
id: {}
9. Webhooks
- Use the JobTread UI to create a webhook (Webhooks page) and copy its ID.
- Manage them via the API: list
webhook(id: "ID")ordeleteWebhookto cancel. - Example create query:
yaml
createWebhook:
$:
organizationId: "ORG_ID"
url: "https://your-endpoint/hooks/jobtread"
eventTypes:
- jobCreated
- documentUploaded
createdWebhook:
id: {}
url: {}
Using This Skill with OpenClaw
- Use
curlor your preferred HTTP client from OpenClaw'sexectool. - Build the JSON payload as shown (always include the grant key inside
$). - You can also wrap the payload in shell variables or helper scripts for portability.
- Save reusable queries in the skill file or separate scripts so Claude or you can call them by name ("run job summary", "create customer", etc.).
- Document each automation in the JobTread vault so you can copy/paste from future sessions without digging through logs.
Automation Ideas
- Nightly job summary: Query each open job, sum approved customer orders, and store results in Obsidian (or send via WhatsApp).
- Webhook monitor: Automatically spin up a webhook for file uploads and forward notifications to your Slack/WhatsApp via a small server.
- Batch account creation: Feed a CSV of customers/vendors and run
createAccountfor each with the same grant key. - Document check-ins: Query documents with
status: pendingand send you a summary each morning.
Troubleshooting & Tips
- Rate limits: Grant keys have a throughput cap. If you hit rate limits, add
time.sleepbetween requests or batch fewer objects. - Missing IDs: The API complains
id field requiredwhen you forget to requestid. Always include it when you plan to mutate the record later. - Grant expiration: If a request returns
invalid key, rotate the grant and update~/.config/jobtread/grant_key. - Webhooks: Keep a log of webhook IDs so you can disable or reconfigure them later.
- Signed tokens: Use
signQuerywhen you need temporary access to document PDFs without storing raw document IDs.
Installation
Terminal bash
openclaw install jobtread-api
Copied!
💻Code Examples
### 1. Discover your organization ID
-1-discover-your-organization-id.yml
currentGrant:
user:
memberships:
nodes:
organization:
id: {}
name: {}- **Customer**
--customer.yml
createAccount:
$:
name: "Test Customer"
type: customer
organizationId: "ORG_ID"
createdAccount:
id: {}
name: {}
type: {}- **Read account** by supplying `id` and requesting fields:
--read-account-by-supplying-id-and-requesting-fields.yml
account:
$:
id: "ACCOUNT_ID"
id: {}
name: {}
isTaxable: {}- **Update** and include `customFieldValues` if needed:
--update-and-include-customfieldvalues-if-needed.yml
updateAccount:
$:
id: "ACCOUNT_ID"
isTaxable: false
account:
id: {}
isTaxable: {}### 4. Query accounts list with pagination, sorting, and filters
-4-query-accounts-list-with-pagination-sorting-and-filters.yml
organization:
$: {}
id: {}
accounts:
$:
size: 5
page: "1"
sortBy:
- field: type
order: desc
where:
and:
- - type
- =
- customer
- - name
- =
- "Sebas Clients"
nextPage: {}
nodes:
id: {}
name: {}
type: {}- Find account by custom field name:
--find-account-by-custom-field-name.yml
organization:
$: {}
id: {}
contacts:
$:
with:
cf:
_: customFieldValues
$:
where:
- - customField
- name
- "VIP"
values:
$:
field: value
where:
- - cf
- values
- =
- "Yes"
nodes:
id: {}
name: {}Create location and find others tied to the same account:
create-location-and-find-others-tied-to-the-same-account.yml
createLocation:
$:
accountId: "ACCOUNT_ID"
name: Test Location
address: "123 Main St"
createdLocation:
id: {}
name: {}
organization:
$: {}
id: {}
locations:
$:
where:
- - account
- name
- Test Name
nodes:
id: {}
name: {}
account:
id: {}
name: {}- Get a job's documents grouped by type/status and sums:
--get-a-jobs-documents-grouped-by-typestatus-and-sums.yml
job:
$:
id: "JOB_ID"
documents:
$:
where:
- - type
- in
- - customerInvoice
- customerOrder
group:
by:
- type
- status
aggs:
amountPaid:
sum: amountPaid
priceWithTax:
sum: priceWithTax
withValues: {}- Get document PDF token (append to `https://api.jobtread.com/t/{{token}}`):
--get-document-pdf-token-append-to-httpsapijobtreadcomttoken.yml
pdfToken:
_: signQuery
$:
query:
pdf:
$:
id: "DOCUMENT_ID"- Read a record's custom field values (limit 25 per request):
--read-a-records-custom-field-values-limit-25-per-request.yml
account:
$:
id: "ACCOUNT_ID"
customFieldValues:
$:
size: 25
nodes:
id: {}
value: {}
customField:
id: {}Tags
#web_and-frontend-development
#api
Quick Info
Category Development
Model Claude 3.5
Complexity One-Click
Author brokenwatch24
Last Updated 3/10/2026
🚀
Optimized for
Claude 3.5
Ready to Install?
Get started with this skill in seconds
openclaw install jobtread-api
Related Skills
✓ Verified
💻 Development
4claw
4claw — a moderated imageboard for AI agents.
🧠 Claude-Ready
)}
★ 4.4 (118)
↓ 4,990
v1.0.0
✓ Verified
💻 Development
Aap Passport
Agent Attestation Protocol - The Reverse Turing Test.
🧠 Claude-Ready
)}
★ 4.3 (89)
↓ 4,621
v1.0.0
✓ Verified
💻 Development
Acestep Lyrics Transcription
Transcribe audio to timestamped lyrics using OpenAI Whisper or ElevenLabs Scribe API.
⚡ GPT-Optimized
)}
★ 3.8 (274)
↓ 17,648
v1.0.0
✓ Verified
💻 Development
Adaptive Suite
A continuously adaptive skill suite that empowers Clawdbot.
🧠 Claude-Ready
)}
★ 4.7 (88)
↓ 1,625
v1.0.0