Section 1 — Connections
Integration Hub
9:41
Integrations
3
of 6
Your Tech Stack
3 connected, 3 available
3 Active 3 Available
Connected ServicesManage
QB
QuickBooks Online
Synced 2h ago
S
Stripe Connect
Active — Payments enabled
Google Calendar
Synced 15m ago
Available IntegrationsBrowse All
Slack
Job alerts & team notifications
Recommended
H
HubSpot
CRM contacts & deal pipeline
ST
ServiceTitan
Field service management
Browse Marketplace
ContractorIntegrations screen — useQuery(api.integrations.contractorIntegrations.getConnectedIntegrations)
Integration Detail
9:41
QuickBooks
Connected & Syncing
Since Jan 15, 2026
Live
Sync Status
Last Sync Today 7:42 AM
Sync Frequency
Every 2 hours
Records Synced 1,247
Errors 0
Data MappingConfigure
Invoices
3Bids Jobs → QB Invoices
Active
Expenses
Material costs → QB Expenses
Active
Customers
Poster contacts → QB Customers
Paused
Actions
Sync Now
View Sync History
Disconnect
IntegrationDetail screen — useQuery(api.integrations.contractorIntegrations.getIntegrationById)
Section 2 — API Management
API Tokens
9:41
API Tokens
API tokens grant programmatic access
Keep tokens secret. Rotate them regularly. Never share them in public repos.
Active Tokens (3)
Production API
Created Feb 1, 2026
Active
3b_live_sk••••••••••••••Xk7m
read:jobs write:bids
Used 2h ago
Edit
Revoke
Staging / Test
Created Jan 20, 2026
Sandbox
3b_test_sk••••••••••••••Ym3q
read:jobs write:bids webhooks
Used 4d ago
Edit
Revoke
Dashboard Read-Only
Created Feb 10, 2026
Expiring
3b_live_ro••••••••••••••Zp1a
read:jobs read:contacts
Expires in 5 days
Renew
Revoke
Generate New Token
ApiTokensList screen — useQuery(api.developer.tokens.list)
Create Token
9:41
Create Token
Token Name
Production Webhook Relay
A descriptive name to identify this token
Expiration
90 days
Token automatically expires after this period
Permissions
read:jobs
View job listings, details, and status
write:bids
Submit and manage bid proposals
read:contacts
View customer contact information
webhooks
Receive real-time event notifications
write:profile
Update business profile information
read:payments
View payment history and payouts
IP Whitelist (Optional)
e.g. 192.168.1.0/24
Restrict token usage to specific IP addresses
Generate Token
CreateTokenForm screen — useMutation(api.developer.tokens.create)
Token Created
9:41
Token Created
Token Generated
Copy your token now. For security, it will not be shown again.
Your API Token
3b_live_sk_a4f9c1e7d8b3f56290e1d
7c8a4b5f623e9d1a0c7f4b8e5d2
This is the only time you will see this token
Store it securely in your environment variables or a secrets manager. If lost, you will need to generate a new one.
Security Best Practices
Store in environment variables, never in code
Set IP whitelist for production tokens
Rotate tokens every 90 days
Use least-privilege scope permissions
Done
TokenCreatedSuccess screen — one-time display, token cleared from memory on dismiss
Webhook Config
9:41
Webhooks
Endpoint URL
https://api.mycompany.io/webhooks/3bids
Signing Secret
whsec_••••••••••••••n4Kp
Use this to verify webhook payload authenticity
Event SubscriptionsSelect All
job.created bid.submitted payment.received bid.accepted job.completed contract.signed review.posted payout.sent
Send Test Event
Recent DeliveriesView All
job.created
Today 9:32 AM — 142ms
200
bid.submitted
Today 9:15 AM — 89ms
200
payment.received
Today 8:47 AM — 5012ms
504
job.created
Yesterday 4:18 PM — 102ms
200
bid.submitted
Yesterday 3:55 PM — 67ms
200
WebhookConfig screen — useQuery(api.developer.webhooks.getConfig), useMutation(api.developer.webhooks.test)
Section 3 — Monitoring
API Usage
9:41
API Usage
24h 7 Days 30 Days 90 Days
Total Requests
12,847
+18%
Avg Response
127ms
-12ms
Error Rate
0.3%
-0.1%
Uptime
99.9%
Last 30d
Request Volume
MonTueWedThuFriSatSun
Rate LimitUpgrade
4,200 used 10,000 / hour
Top Endpoints
GET
/v1/jobs
4,312 calls — 98ms avg
POST
/v1/bids
3,891 calls — 145ms avg
GET
/v1/contacts
2,104 calls — 87ms avg
GET
/v1/payments
1,540 calls — 112ms avg
POST
/v1/webhooks/test
1,000 calls — 203ms avg
ApiUsageDashboard screen — useQuery(api.developer.usage.getSummary), useQuery(api.developer.usage.getTimeSeries)
Developer Docs
9:41
API Reference
Sandbox
Production
Base URL
https://api.3bids.io/v1
Authentication
HTTP Header
Authorization: Bearer 3b_live_sk_your_token_here
Endpoints
GET
/jobs
List available jobs in your area
GET
/jobs/:id
Get job details by ID
POST
/bids
Submit a bid on a job
GET
/bids
List your submitted bids
GET
/payments
Payment history & payouts
PUT
/profile
Update contractor profile
Example Request
cURL
curl -X GET \
  "https://api.3bids.io/v1/jobs" \
  -H "Authorization: Bearer 3b_live_sk_..." \
  -H "Content-Type: application/json"
Example Response
JSON
{
  "data": [
    {
      "id": "j_8f3a91c2",
      "title": "Kitchen Remodel",
      "status": "open",
      "budget": 15000,
      "city": "Akron",
      "state": "OH"
    }
  ],
  "meta": {
    "total": 47,
    "page": 1,
    "limit": 25
  }
}
Full Documentation
Visit docs.3bids.io for complete API reference, SDKs, and integration guides.
DeveloperDocs screen — static content with sandbox/production toggle, links to docs.3bids.io

Data Architecture

Schema Tables

contractorApiTokens {
  contractorId: v.id("contractorUsers"),
  name: v.string(),
  tokenHash: v.string(),
  tokenPrefix: v.string(),
  permissions: v.array(v.string()),
  expiresAt: v.optional(v.number()),
  ipWhitelist: v.optional(v.array(v.string())),
  lastUsedAt: v.optional(v.number()),
  isRevoked: v.boolean(),
  createdAt: v.number()
}

contractorWebhooks {
  contractorId: v.id("contractorUsers"),
  endpointUrl: v.string(),
  signingSecret: v.string(),
  events: v.array(v.string()),
  isActive: v.boolean(),
  createdAt: v.number()
}

webhookDeliveryLog {
  webhookId: v.id("contractorWebhooks"),
  event: v.string(),
  statusCode: v.number(),
  responseTimeMs: v.number(),
  deliveredAt: v.number()
}

contractorIntegrations {
  contractorId: v.id("contractorUsers"),
  provider: v.string(),
  status: v.string(),
  accessToken: v.string(),
  refreshToken: v.optional(v.string()),
  config: v.optional(v.any()),
  lastSyncAt: v.optional(v.number()),
  syncFrequencyMs: v.optional(v.number()),
  connectedAt: v.number()
}

Hooks & Queries

// Integration Hub
useConnectedIntegrations()
  api.integrations.contractorIntegrations
    .getConnectedIntegrations

useIntegrationDetail(id)
  api.integrations.contractorIntegrations
    .getIntegrationById

syncIntegration()
  api.integrations.contractorIntegrations
    .triggerSync

disconnectIntegration()
  api.integrations.contractorIntegrations
    .disconnect

// API Tokens
useApiTokens()
  api.developer.tokens.list

createToken(args)
  api.developer.tokens.create
  Returns: { token, id, prefix }

revokeToken(tokenId)
  api.developer.tokens.revoke

// Webhooks
useWebhookConfig()
  api.developer.webhooks.getConfig

updateWebhook(args)
  api.developer.webhooks.update

testWebhook(webhookId)
  api.developer.webhooks.test

useWebhookDeliveries(webhookId)
  api.developer.webhooks.deliveries

// API Usage
useApiUsageSummary(period)
  api.developer.usage.getSummary

useApiTimeSeries(period)
  api.developer.usage.getTimeSeries

useTopEndpoints(period)
  api.developer.usage.topEndpoints
Integration Hub + Detail
9:41
Integrations
Your Tech Stack
3 of 6
3 connected, 3 available
Connected Services
QB
QuickBooks Online
Synced 2h ago
Live
S
Stripe Connect
Active — Payments enabled
Live
Google Calendar
Synced 15m ago
Live
Available
Slack
Job alerts & notifications
Recommended
H
HubSpot
CRM contacts & deals
QuickBooks Online
Connected & Syncing
Since Jan 15, 2026
Live
Last SyncToday 7:42 AM
FrequencyEvery 2 hours
Records1,247
Errors0
Data Mapping
Invoices
3Bids Jobs → QB Invoices
Active
Expenses
Material costs → QB Expenses
Active
Customers
Poster contacts → QB Customers
Paused

API Tokens + Webhooks
9:41
Developer Tools
Active Tokens (3)
Production API
Created Feb 1, 2026
Active
3b_live_sk••••••Xk7m
read:jobs write:bids Used 2h ago
Staging / Test
Created Jan 20, 2026
Sandbox
3b_test_sk••••••Ym3q
read:jobs write:bids webhooks
Dashboard Read-Only
Expires in 5 days
Expiring
3b_live_ro••••••Zp1a
read:jobs read:contacts
Webhook Configuration
Endpoint URL
https://api.mycompany.io/webhooks/3bids
Signing Secret
whsec_••••••n4Kp
Event Subscriptions
job.created bid.submitted payment.received bid.accepted job.completed contract.signed
Recent Deliveries
job.created
Today 9:32 AM — 142ms
200
bid.submitted
Today 9:15 AM — 89ms
200
payment.received
Today 8:47 AM — 5012ms
504

API Usage + Developer Docs
9:41
Monitoring
API Usage (7 Days)
12,847
Requests
+18%
127ms
Avg Response
-12ms
0.3%
Error Rate
99.9%
Uptime
Rate Limit
4,200 used10,000 / hour
Top Endpoints
GET
/v1/jobs
4,312 calls
POST
/v1/bids
3,891 calls
GET
/v1/contacts
2,104 calls
API Reference
Base URL
https://api.3bids.io/v1
Auth Header
Authorization: Bearer 3b_live_sk_your_token
Endpoints
GET
/jobs
List available jobs
POST
/bids
Submit a bid
GET
/payments
Payment history
PUT
/profile
Update contractor profile
Full Documentation
Visit docs.3bids.io for complete API reference, SDKs, and integration guides.
Developer — Dashboard
https://app.3bids.io/contractor/developer
3Bids
Dashboard ⌘1
API Tokens ⌘2
Webhooks ⌘3
API Usage ⌘4
Docs ⌘5
Connected ⌘6
Marketplace ⌘7
MK
Mike Kowalski
Contractor
Settings ⌘,
Developer Dashboard
Last 7 Days
12,847
Total Requests
127ms
Avg Response
0.3%
Error Rate
99.9%
Uptime
Connected Integrations
QB
QuickBooks
Synced 2h ago
Live
S
Stripe Connect
Payments enabled
Live
Google Calendar
Synced 15m ago
Live
API Tokens (3 Active)
Production API
read:jobs, write:bids
Active
Staging / Test
read:jobs, write:bids, webhooks
Sandbox
Dashboard Read-Only
Expires in 5 days
Expiring
Top Endpoints
GET/v1/jobs4,312
POST/v1/bids3,891
GET/v1/contacts2,104
GET/v1/payments1,540
Recent Webhook Deliveries
job.created
9:32 AM · 142ms
200
bid.submitted
9:15 AM · 89ms
200
payment.received
8:47 AM · 5012ms
504
Rate Limit
4,200 used10,000/hr
Security Tip:
Rotate API tokens every 90 days. Use IP whitelisting for production tokens.

Developer — API Tokens
https://app.3bids.io/contractor/developer/tokens
3Bids
Dashboard ⌘1
API Tokens ⌘2
Webhooks ⌘3
API Usage ⌘4
Docs ⌘5
Connected ⌘6
Marketplace ⌘7
MK
Mike Kowalski
Contractor
Settings ⌘,
API Tokens
Production API
Created Feb 1, 2026
Active
3b_live_sk••••Xk7m
read:jobswrite:bids
Used 2h ago
Staging / Test
Created Jan 20, 2026
Sandbox
3b_test_sk••••Ym3q
read:jobswrite:bidswebhooks
Used 4d ago
Dashboard Read-Only
Expires in 5 days
Expiring
3b_live_ro••••Zp1a
read:jobsread:contacts
Expires in 5 days
Security Best Practices
Store tokens in environment variables, never in code. Set IP whitelists for production tokens. Rotate every 90 days. Use least-privilege scope permissions.