Business validation — use the section buttons (beside each heading) to Mark as valid or add a Comment when something is wrong. Validation comments are visible to Sam and Simon on the developer pack.

WhipIT orientation pack · generated from markdown

WhipIT — API handover (read only / development)

For: Simon (WhipLash Developer)

From: Sam McCormick (previous WhipIT developer)

Date: June 2026


1. Context (brief)


2. Development host

ItemValue
Hostsage.teamdf.cloud
FileWhipIT 3.fmp12
ScopeThis file only (not WhipITApp / WhipIT_Files in this handover)
EnvironmentDevelopment copy — not production (fm.xzibit.com.au)

Database name for API URLs: WhipIT 3 — use WhipIT%203 in URLs (space URL-encoded). Verified on dev June 2026.


3. Account supplied

AccountPrivilege setRoleShared?
api_readAPIClient_ReadExploration — broad read access to map the systemYes — credentials below
api_integrationCopy of APIClient_Read, refined later (e.g. APIClient_Integration)Operational account for your application — curated layouts/tables when requirements are clear; writes later if agreedNo — not issued in this handover

Credentials:

Host:     sage.teamdf.cloud
Account:  api_read
Password: [ supplied separately ]

Please: HTTPS only; do not commit credentials; do not log session tokens.


4. Two ways to read data

FileMaker Data APIOData
Use forLayout-based reads; related records via portals; later: run FM scripts on writeTable/entity reads; schema discovery; $filter / $select
Extended privilegefmrestfmodata
Claris guideData APIOData
LLM Doc indexhelp.claris.com/llms.txtsame

Read-only with api_read: no record create/edit/delete via API; no script execution. api_integration will be configured for application use when surfaces are agreed (writes and scripts only if explicitly enabled on that account).


5. Quick start — Data API

Base path (typical):

https://sage.teamdf.cloud/fmi/data/vLatest/databases/WhipIT%203/

1. Open session (returns token in X-FM-Data-Access-Token response header):

curl -s -D - -X POST \
  "https://sage.teamdf.cloud/fmi/data/vLatest/databases/WhipIT%203/sessions" \
  -H "Content-Type: application/json" \
  -u "api_read:YOUR_PASSWORD" \
  -d '{}'

2. Layout metadata (discover layouts and fields):

curl -s -X GET \
  "https://sage.teamdf.cloud/fmi/data/vLatest/databases/WhipIT%203/layouts" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json"

3. Get records (example — replace layout name):

curl -s -X GET \
  "https://sage.teamdf.cloud/fmi/data/vLatest/databases/WhipIT%203/layouts/{layout-name}/records?_limit=10" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json"

4. End session when finished:

curl -s -X DELETE \
  "https://sage.teamdf.cloud/fmi/data/vLatest/databases/WhipIT%203/sessions/YOUR_TOKEN" \
  -H "Authorization: Bearer YOUR_TOKEN"

Use existing User layouts for exploration — the account can read any layout the privilege set allows. Start with /layouts metadata and sample GET/find calls on layouts that match the domains you care about (jobs, clients, quotes, etc.).

Layout access policy (dev): APIClient_Read → Layouts → Custom privileges → All layouts: View only. After you’ve mapped what you need, curated layouts (including dedicated *API_ layouts if useful) go on api_integration**.

OData does not use layouts; which tables appear is controlled by record privileges on the privilege set (see section 6).


6. Quick start — OData

Base path:

https://sage.teamdf.cloud/fmi/odata/v4/WhipIT%203/

Authentication

Unlike the Data API, OData does not use a session token. Each request is authenticated with HTTP Basic Auth — the same account and password as above, sent in the Authorization header (Basic + base64 of account:password). There is no separate login step.

Claris references: Creating an authenticated connection, Enable OData access.

Metadata and discovery

1. Full schema ($metadata — tables, fields, types; large response):

curl -s -u "api_read:YOUR_PASSWORD" \
  "https://sage.teamdf.cloud/fmi/odata/v4/WhipIT%203/\$metadata"

2. Entity list (lighter — confirms database name and available tables):

curl -s -u "api_read:YOUR_PASSWORD" \
  "https://sage.teamdf.cloud/fmi/odata/v4/WhipIT%203/"

Entity names match base table names (e.g. ClientSupplier, Job). Use $metadata or the entity list to confirm exact names before querying.

3. Sample records (replace table name; add $top, $filter, $select as needed):

curl -s -u "api_read:YOUR_PASSWORD" \
  "https://sage.teamdf.cloud/fmi/odata/v4/WhipIT%203/ClientSupplier?\$top=5"
curl -s -u "api_read:YOUR_PASSWORD" \
  "https://sage.teamdf.cloud/fmi/odata/v4/WhipIT%203/Job?\$top=10&\$select=zzrec_id,Job_Name"

See Get metadata, Get list of tables, Request records from a table.

Tips: paginate with $top / $skip (max 10,000 records per response); filter by modification timestamp where possible; avoid full-table pulls on large tables (e.g. quote line details, time entries, messages).


7. Sensible first reads (mapping)

For schema mapping, these WhipIT areas are useful starting points (table names from DDR — verify on dev):

AreaBase tables (indicative)
Clients / suppliersClientSupplier, ClientSupplierDetails
ProductsProducts, Product_Rates
Staff (FM accounts)UserAccountsseparate from client contacts
JobsJob
Quotes (headers)Quotes

Large / sensitive tables — use filters, not bulk export in dev without coordination: QuoteLineItemDetails, TimeEntries, MessagesMerged.

Primary keys often include zzrec_id — confirm on layouts or OData metadata.


8. What’s not included


9. Next steps

  1. Explore metadata and layouts (sections 5–6). OData entity list is confirmed on dev; open a Data API session when you need layout/portal reads.
  2. Explore metadata; map entities and layouts you need for read-only reports/UI.
  3. Agree with Xzibit how parallel running and crossover will work.
  4. When you’re ready to wire the application account or need write-back / production access, contact Sam — we’ll configure api_integration and FM-side surfaces to match.

Questions on how WhipIT behaves today: Sam (within Whiplash / maintenance scope).

Questions on replacement architecture: your programme with Xzibit.


10. Server-side checklist (Sam — internal)