Trayder.AI

Build on Trayder

A provider-scoped API: every key belongs to one business, carries explicit scopes, and is rate-limited per hour by their plan. Money mutations and lifecycle transitions stay first-party — writes open the same doors the app uses, never new ones.

Authentication

curl https://…/functions/v1/api-v1/jobs \
  -H "Authorization: Bearer tray_sk_…"

Webhooks

Subscriptions are configured in-app. Deliveries carry two signatures over the raw body:

X-Trayder-Signature:    sha256=HMAC(secret, body)
X-Trayder-Signature-V2: t=<unix>,s=HMAC(secret, "<unix>." + body)

Verify V2 and reject timestamps outside your replay window; V1 remains for one deprecation cycle. Failed deliveries back off and dead-letter after 5 attempts; any delivery can be replayed once from the app.

Endpoints

get/customersList the provider's customers
post/customersMatch-or-create a customer
get/customers/{id}Get one customer
patch/customers/{id}Update contact fields (name, email, phone)
get/jobsList the provider's jobs
get/jobs/{id}Get one job
get/bookingsList bookings (calendar partners; ordered by starts_at, offset paging)
post/bookingsBook a currently-offered free slot (409 on a lost race — GET fresh slots and retry)
get/bookings/{id}Get one booking
get/quotesList the provider's quotes
post/quotesCreate a DRAFT quote with lines — sending stays first-party
get/quotes/{id}Get one quote with its lines
get/invoicesList the provider's invoices
get/invoices/{id}Get one invoice with lines and tax
get/reviewsList verified reviews (site partners render these)
get/reviews/{id}Get one review
get/siteThe provider's published site snapshot (the Duda hook)
post/enquiriesInject a lead (the marketing-partner endpoint)
get/openapi.jsonThis document

Machine-readable spec: GET /functions/v1/api-v1/openapi.json — no auth required.