Endpoints
The v1 API maps directly to the resources photographers and production teams manage inside GearDex.
StudioThe Studio API, webhooks, and MCP adapter are included with the Studio plan.Compare plans
Endpoint index
/gearList inventory with type, search, and pagination filters.gear:read/gearCreate an owned gear record.gear:write/gear/{id}Return one item with its specs, insurance cover, kits, reservations, and open flags.gear:read/gear/{id}Update an owned gear record.gear:write/gear/{id}Delete gear and clean related records.gear:write/gear/{id}/shutter-readingsList a camera's or drone's shutter count log, newest first.gear:read/gear/{id}/shutter-readingsLog a shutter count. A camera's latest count follows it.gear:write/categoriesList gear categories, for category_id on gear writes.gear:read/locationsList storage locations, for location_id on gear writes.gear:read/kitsList rigs and kits with their gear and readiness.gear:read/kitsCreate a rig or kit, with or without gear.gear:write/kits/{id}Return one rig or kit with its gear and consumables.gear:read/kits/{id}Rename a rig or kit, or add and remove gear.gear:write/kits/{id}Delete a rig or kit. The gear stays in the library.gear:write/incidentsList lost and stolen reports.gear:read/incidentsReport an item lost or stolen. One open report per item.gear:write/incidents/{id}Mark a report recovered, or add the place, police report, and claim numbers.gear:write/consumablesList batteries, media, and other stock. Pro plan.gear:read/consumables/{id}/adjustAdd or take away stock. A low-stock alert goes out at the threshold.gear:write/shootsList shoots with status, date, and search filters.shoots:read/shootsCreate a planning-state shoot.shoots:write/shoots/{id}Update production details, status, or progress.shoots:write/shoots/{id}Delete a shoot plan.shoots:write/shoots/{id}/gearReturn a shoot's packing list with holds and packed state.shoots:read/shoots/{id}/gearAdd gear or a kit to a shoot and hold it for the shoot window.shoots:write/shoots/{id}/gearMark items packed or unpacked, or remove them and release their holds.shoots:write/rentalsList gear rented in, by status, shoot, or overdue.shoots:read/rentalsAdd a rental. A rental with a cost on a shoot posts to its expenses.shoots:write/rentals/{id}Edit a rental or move its status.shoots:write/rentals/{id}Delete a rental and the shoot expense it posted.shoots:write/maintenanceList service records and schedules.maintenance:read/maintenanceCreate service work for owned gear.maintenance:write/maintenance/{id}Update service status, cost, or provider.maintenance:write/maintenance/{id}Delete a maintenance record.maintenance:write/documentsList document and warranty metadata.documents:read/insuranceList insurance policies and certificates with coverage totals.documents:read/insurance/{id}Return one policy or certificate with the gear it covers.documents:read/analyticsReturn aggregate Studio metrics.analytics:read/profileReturn account and Studio profile metadata.profile:read/loansList loans with their items, by status, borrower, or gear.loans:read/loansCheck owned gear out to a borrower; Studio API keys support multi-item carts.loans:write/loans/{id}Return a loan with its items and consumables.loans:read/loans/{id}Extend the due date or cancel a loan.loans:write/loans/{id}/check-inCheck some or all items back in; missing items raise flags.loans:write/flagsList issues flagged on gear.loans:read/flagsFlag an issue; blocking flags take the gear out of rotation.loans:write/flags/{id}Resolve a flag. The gear goes back into rotation when nothing else holds it.loans:write/availabilityCheck whether an item can go out for a date range.loans:read/bookingsList bookings by status and start-time range.bookings:read/bookings/{id}Approve or decline a booking request.bookings:write/inquiriesList leads from the Site's inquiry form.bookings:read/jobsList jobs with their client, shoots, money, costs, and profit. Pro plan.shoots:read/jobs/{id}Return one job with its client, shoots, money, costs, and profit.shoots:read/clientsList people and companies in the CRM, by status, kind, or search. Pro plan.shoots:read/clientsAdd a client. An email that is already in the CRM returns 409.shoots:write/clients/{id}Return one client with their jobs, shoots, open tasks, and recent activity.shoots:read/clients/{id}Update a client's details, links, status, or follow-up date.shoots:write/clients/{id}/activitiesLog a note, call, email, or meeting on a client.shoots:write/quotesList quotes with status filters. Studio plan.money:read/quotesCreate a draft quote. Studio plan.money:write/quotes/{id}/sendEmail the client a link to accept the quote.money:write/invoicesList invoices with installments and payments. Studio plan.money:read/invoices/{id}/paymentsRecord a payment against an invoice.money:write/shoots/{id}/deliverablesList a shoot's deliverables. Studio plan.shoots:read/shoots/{id}/deliverablesAdd a deliverable to a shoot.shoots:write/shoots/{id}/deliverables/deliverMark deliverables delivered and optionally email the client.shoots:write/shoots/{id}/profitReturn a shoot's booked, collected, expenses, gear wear, and profit.shoots:readEvery route requires a bearer key with the listed scope. Write routes emit matching webhook events.
Gear
Query cameras, lenses, accessories, filters, and drones through one inventory resource. Write requests validate fields against the selected gear type and emit matching webhook events.
/gearList inventory with type, search, and pagination filters.gear:read/gearCreate an owned gear record.gear:write/gear/{id}Return one item with its specs, insurance cover, kits, reservations, and open flags.gear:read/gear/{id}Update an owned gear record.gear:write/gear/{id}Delete gear and clean related records.gear:write/gear/{id}/shutter-readingsList a camera's or drone's shutter count log, newest first.gear:read/gear/{id}/shutter-readingsLog a shutter count. A camera's latest count follows it.gear:writeQuery parameters
| Parameter | Type | Values |
|---|---|---|
| type | enum | all · camera · lens · accessory · filter · drone |
| q | string | Search text, up to 100 characters. |
| limit | integer | 1–100 records per page. |
| offset | integer | 0 or greater. |
| Parameter | Type | Values |
|---|---|---|
| gear_type | required | GET /gear/{id}: camera · lens · accessory · filter · drone. Shutter readings take camera or drone. |
| limit / offset | integer | Shutter readings only. Limit is 1–100. |
Request body
| Field | Rule | Values |
|---|---|---|
| gear_type | required | camera · lens · accessory · filter · drone. Also required on PATCH and as a query parameter on DELETE. |
| brand / model | required | Strings, up to 255 characters each. |
| condition | optional | excellent · very-good · good · fair · poor |
| status | optional | available · on-loan · maintenance · retired |
| serial_number, purchase_date, purchase_price, notes | optional | Ownership details. Type-specific fields such as mount_type, focal_length, and filter_type are validated against gear_type. |
| updates | PATCH only | Object with at least one field. Optional text, date, and number fields can be set to null to clear them. |
| shutter_count, shutter_count_read_on, rated_shutter_life | read only | Returned on cameras: the latest logged shutter count, its date, and the owner's rated life. Log readings in the app. |
| Field | Rule | Values |
|---|---|---|
| gear_type | required | camera · drone |
| value | required | Whole number, 0 or greater. |
| read_on, source, note | optional | read_on is YYYY-MM-DD and defaults to today; source is manual (default) · photo · service. |
Use GET /categories and GET /locations to find the IDs for category_id and location_id.
/categoriesList gear categories, for category_id on gear writes.gear:read/locationsList storage locations, for location_id on gear writes.gear:readcurl -X GET "https://www.geardex.app/api/studio-agent/v1/gear?q=Fujifilm&limit=10" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Accept: application/json"curl -X POST "https://www.geardex.app/api/studio-agent/v1/gear" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"gear_type": "camera",
"brand": "Fujifilm",
"model": "X-T5",
"condition": "excellent",
"status": "available"
}'curl -X PATCH "https://www.geardex.app/api/studio-agent/v1/gear/gear_item_uuid" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"gear_type": "camera",
"updates": {
"status": "maintenance",
"notes": "Scheduled for sensor cleaning"
}
}'Shoots
Build schedule views with status and date filters, or let a trusted planning service draft and maintain shoots.
/shootsList shoots with status, date, and search filters.shoots:read/shootsCreate a planning-state shoot.shoots:write/shoots/{id}Update production details, status, or progress.shoots:write/shoots/{id}Delete a shoot plan.shoots:write/shoots/{id}/gearReturn a shoot's packing list with holds and packed state.shoots:read/shoots/{id}/gearAdd gear or a kit to a shoot and hold it for the shoot window.shoots:write/shoots/{id}/gearMark items packed or unpacked, or remove them and release their holds.shoots:write/shoots/{id}/deliverablesList a shoot's deliverables. Studio plan.shoots:read/shoots/{id}/deliverablesAdd a deliverable to a shoot.shoots:write/shoots/{id}/deliverables/deliverMark deliverables delivered and optionally email the client.shoots:write/shoots/{id}/profitReturn a shoot's booked, collected, expenses, gear wear, and profit.shoots:readQuery parameters
| Parameter | Type | Values |
|---|---|---|
| status | enum | planning · confirmed · completed · cancelled |
| fromDate / toDate | date | Date window, formatted YYYY-MM-DD. |
| q | string | Search text, up to 100 characters. |
| limit / offset | integer | Pagination. Limit is 1–100. |
Request body
| Field | Rule | Values |
|---|---|---|
| title / client_name | required | Strings, up to 160 characters each. |
| shoot_date | required | Date, formatted YYYY-MM-DD. |
| shoot_time / shoot_end_time | optional | 24-hour time, HH:MM. |
| location / locations | optional | One location, or up to 20 as an array (or a semicolon- or newline-separated string). |
| updates | PATCH only | Also accepts status (planning · confirmed · completed · cancelled) and completion_progress (0–100). |
| Field | Rule | Values |
|---|---|---|
| items or kit_id | POST, required | [{ gear_type, gear_id }] and/or a kit's UUID. If an item can't be held for the shoot window, nothing is added and you get 409. |
| packed / unpacked / remove | PATCH, one required | Lists of { gear_type, gear_id } on the packing list. An item can be in only one list. remove releases its hold. |
| Field | Rule | Values |
|---|---|---|
| title | required | POST /shoots/{id}/deliverables. Optional kind, url, and due_date (YYYY-MM-DD). |
| ids | required | POST /shoots/{id}/deliverables/deliver: the deliverables to mark delivered. |
| notify | optional | true emails the client that their delivery is ready. |
curl -X GET "https://www.geardex.app/api/studio-agent/v1/shoots?status=confirmed&fromDate=2026-08-01&toDate=2026-08-31&limit=10" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Accept: application/json"curl -X POST "https://www.geardex.app/api/studio-agent/v1/shoots" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"title": "Coastal Editorial",
"client_name": "Northline Apparel",
"shoot_date": "2026-08-18",
"shoot_time": "06:30",
"location": "Malibu, CA"
}'Maintenance
Service records stay connected to the exact owned item they affect. GearDex validates the gear reference before accepting a write.
/maintenanceList service records and schedules.maintenance:read/maintenanceCreate service work for owned gear.maintenance:write/maintenance/{id}Update service status, cost, or provider.maintenance:write/maintenance/{id}Delete a maintenance record.maintenance:writeQuery parameters
| Parameter | Type | Values |
|---|---|---|
| status | enum | scheduled · in_progress · completed · cancelled |
| fromDate / toDate | date | Date window, formatted YYYY-MM-DD. |
| q | string | Search text, up to 100 characters. |
| limit / offset | integer | Pagination. Limit is 1–100. |
Request body
| Field | Rule | Values |
|---|---|---|
| item_type / item_id | required | The owned gear item being serviced. item_id is validated against item_type. |
| service_type | required | String, up to 160 characters. |
| service_date | required | Date, formatted YYYY-MM-DD. |
| status | optional | scheduled (default) · in_progress · completed · cancelled |
| cost, service_provider, notes | optional | Service details. Nullable on update. |
| recurrence_months / recurrence_uses | optional | Repeat every 1–60 months or after 1–1,000 uses, not both. Completing the record schedules the next one. null stops repeating. |
curl -X POST "https://www.geardex.app/api/studio-agent/v1/maintenance" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"item_type": "camera",
"item_id": "gear_item_uuid",
"service_type": "Sensor cleaning",
"service_date": "2026-08-21",
"service_provider": "Local camera shop",
"status": "scheduled"
}'Kits
A kit holds any gear. A rig holds one body and one lens at most. An item is ready when it is available and not reported lost or stolen.
/kitsList rigs and kits with their gear and readiness.gear:read/kitsCreate a rig or kit, with or without gear.gear:write/kits/{id}Return one rig or kit with its gear and consumables.gear:read/kits/{id}Rename a rig or kit, or add and remove gear.gear:write/kits/{id}Delete a rig or kit. The gear stays in the library.gear:writeQuery parameters
| Parameter | Type | Values |
|---|---|---|
| kind | enum | rig · kit |
| q | string | Matches part of the name, up to 100 characters. |
| limit / offset | integer | Pagination. Limit is 1–100. |
Request body
| Field | Rule | Values |
|---|---|---|
| name | required on POST | Up to 120 characters. |
| kind | optional | kit (default) holds any gear; rig holds one body and one lens at most. |
| items | optional | POST: [{ gear_type, gear_id }], up to 100 owned items. |
| add_items / remove_items | PATCH only | Same shape as items. Removals apply first. Also accepts name and description. |
Lost and stolen
An item can have one open report. It can't go out on a loan or a shoot until the report is recovered.
/incidentsList lost and stolen reports.gear:read/incidentsReport an item lost or stolen. One open report per item.gear:write/incidents/{id}Mark a report recovered, or add the place, police report, and claim numbers.gear:writeQuery parameters
| Parameter | Type | Values |
|---|---|---|
| status | enum | open (default) · all |
| gear_type / gear_id | enum / UUID | Reports on one item. |
| limit / offset | integer | Pagination. Limit is 1–100. |
Request body
| Field | Rule | Values |
|---|---|---|
| gear_type / gear_id | required | The owned item. |
| kind / occurred_on | required | lost · stolen, and YYYY-MM-DD. |
| place, police_report_number, insurer_claim_number, notes | optional | Also what PATCH sets with action update. |
| action | PATCH only | recover (with recovered_on and an optional note) · update |
Consumables
Consumables need the Pro plan. When stock drops to its threshold, GearDex sends the low-stock alert.
/consumablesList batteries, media, and other stock. Pro plan.gear:read/consumables/{id}/adjustAdd or take away stock. A low-stock alert goes out at the threshold.gear:writeQuery parameters
| Parameter | Type | Values |
|---|---|---|
| category | enum | battery · media · cable · tape · gel · cleaning · power · other |
| low_stock | boolean | true for stock at or below its threshold, false for the rest. |
| include_archived | boolean | Defaults to false. |
| limit / offset | integer | Pagination. Limit is 1–100. |
Request body
| Field | Rule | Values |
|---|---|---|
| delta | required | Not 0, at most 2 decimal places. Positive adds stock, negative takes it away. |
| reason | required | restock (positive delta) · used (negative delta) · adjust |
| note | optional | Up to 500 characters. |
curl -X POST "https://www.geardex.app/api/studio-agent/v1/consumables/CONSUMABLE_ID/adjust" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "delta": -2, "reason": "used" }'Rentals
Track gear you rent in. A rental with a cost on a shoot posts to that shoot's expenses. Edit the rental, not the expense.
/rentalsList gear rented in, by status, shoot, or overdue.shoots:read/rentalsAdd a rental. A rental with a cost on a shoot posts to its expenses.shoots:write/rentals/{id}Edit a rental or move its status.shoots:write/rentals/{id}Delete a rental and the shoot expense it posted.shoots:writeQuery parameters
| Parameter | Type | Values |
|---|---|---|
| status | enum | all (default) · open · reserved · picked_up · returned · cancelled. open is reserved or picked_up. |
| shoot_id | UUID | Rentals for one shoot. |
| overdue | boolean | true for rentals that are picked up and past their return date. |
| limit / offset | integer | Pagination. Limit is 1–100. |
Request body
| Field | Rule | Values |
|---|---|---|
| item_name | required on POST | Up to 200 characters. quantity defaults to 1. |
| rental_house, rental_house_contact, order_reference | optional | Who you rented from. |
| shoot_id, pickup_on, return_due_on | optional | Dates are YYYY-MM-DD. The return date can't be before pickup. |
| cost, deposit, replacement_value, certificate_id, notes | optional | A cost on a shoot posts to its expenses. certificate_id is an insurance certificate. |
| status, returned_at | PATCH only | reserved · picked_up · returned · cancelled. Returning stamps returned_at, now unless you send it. |
Lending
Check gear out and back in, extend loans, and flag issues. One loan can hold a whole cart of items and kits, with no limit on open loans. Check-outs emit loan.checked_out, completed returns loan.returned, and flags flag.raised.
/loansList loans with their items, by status, borrower, or gear.loans:read/loansCheck owned gear out to a borrower; Studio API keys support multi-item carts.loans:write/loans/{id}Return a loan with its items and consumables.loans:read/loans/{id}Extend the due date or cancel a loan.loans:write/loans/{id}/check-inCheck some or all items back in; missing items raise flags.loans:write/flagsList issues flagged on gear.loans:read/flagsFlag an issue; blocking flags take the gear out of rotation.loans:write/flags/{id}Resolve a flag. The gear goes back into rotation when nothing else holds it.loans:write/availabilityCheck whether an item can go out for a date range.loans:readQuery parameters
| Parameter | Type | Values |
|---|---|---|
| status | enum | open (default) · returned · cancelled · all |
| borrower | string | Matches part of the borrower's name. |
| gear_type / gear_id | enum / UUID | Loans that included this item. |
| limit / offset | integer | Pagination. Limit is 1–100. |
| Parameter | Type | Values |
|---|---|---|
| status | enum | open (default) · resolved · all |
| gear_type / gear_id | enum / UUID | Flags on one item. Pass both. |
| Parameter | Type | Values |
|---|---|---|
| gear_type / gear_id | required | camera · lens · accessory · filter · drone, and the item's UUID. |
| start / end | date | YYYY-MM-DD. Defaults to today. |
Request body
| Field | Rule | Values |
|---|---|---|
| items or kit_ids | required | items: [{ gear_type, gear_id }]; kit_ids: kit UUIDs. One loan can hold several items and kits. |
| borrower | required | { name, email, phone, client_id }. Only name is required. |
| due_date | optional | YYYY-MM-DD. Defaults to your loan length in gear settings. |
| loan_date, due_time, loan_type | optional | loan_date defaults to today; loan_type is outgoing (default) or incoming. |
| deposit_amount, purpose, notes, consumables | optional | consumables: [{ id, quantity }], taken from stock. |
| action | PATCH only | extend (with due_date, optional due_time) · cancel |
| Field | Rule | Values |
|---|---|---|
| items | optional | [{ id, outcome, note }] with loan item ids; outcome is returned (default) or missing. Omit to return everything still out. |
| notes, return_date | optional | return_date is YYYY-MM-DD and defaults to today. |
| Field | Rule | Values |
|---|---|---|
| gear_type / gear_id | required | The owned item with the issue. |
| type | required | needs_repair · damaged · missing · dirty · sensor_dust · low_battery · other |
| note | required | What's wrong, up to 2,000 characters. |
| blocks | optional | true takes the item out of rotation. Defaults by type. |
| loan_id | optional | The loan the issue came back from. |
| action | PATCH /flags/{id} | resolve, with an optional note. |
curl -X POST "https://www.geardex.app/api/studio-agent/v1/loans" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"items": [{ "gear_type": "camera", "gear_id": "gear_item_uuid" }],
"borrower": { "name": "Sam Rivera", "email": "sam@example.com" },
"due_date": "2026-11-14"
}'curl -X POST "https://www.geardex.app/api/studio-agent/v1/loans/LOAN_ID/check-in" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{}'Bookings
Read bookings and inquiries from your Site, and approve or decline booking requests.
/bookingsList bookings by status and start-time range.bookings:read/bookings/{id}Approve or decline a booking request.bookings:write/inquiriesList leads from the Site's inquiry form.bookings:readQuery parameters
| Parameter | Type | Values |
|---|---|---|
| status | enum | requested · confirmed · cancelled · expired |
| from / to | date-time | Start-time window, as an ISO date or date-time. |
| limit / offset | integer | Pagination. Limit is 1–100. |
| Parameter | Type | Values |
|---|---|---|
| status | enum | new · replied · converted · archived |
| limit / offset | integer | Pagination. Limit is 1–100. |
Request body
| Field | Rule | Values |
|---|---|---|
| action | required | approve · decline, for a booking with status requested. |
curl -X PATCH "https://www.geardex.app/api/studio-agent/v1/bookings/BOOKING_ID" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{ "action": "approve" }'Jobs
A job is the deal behind client work: its client, its shoots, and what it billed, collected, cost, and made. Jobs need the Pro plan and are created with their first shoot.
/jobsList jobs with their client, shoots, money, costs, and profit. Pro plan.shoots:read/jobs/{id}Return one job with its client, shoots, money, costs, and profit.shoots:readQuery parameters
| Parameter | Type | Values |
|---|---|---|
| status | enum | all (default) · open · cancelled |
| client_id | UUID | Jobs for one client. |
| q | string | Matches part of the job's title, up to 100 characters. |
| limit / offset | integer | Pagination. Limit is 1–100. |
curl "https://www.geardex.app/api/studio-agent/v1/jobs?status=open&client_id=CLIENT_ID" \
-H "Authorization: Bearer gdx_live_your_key_here"Clients
Clients need the Pro plan. A client is a person or a company, and a person can link to the company they work at.
/clientsList people and companies in the CRM, by status, kind, or search. Pro plan.shoots:read/clientsAdd a client. An email that is already in the CRM returns 409.shoots:write/clients/{id}Return one client with their jobs, shoots, open tasks, and recent activity.shoots:read/clients/{id}Update a client's details, links, status, or follow-up date.shoots:write/clients/{id}/activitiesLog a note, call, email, or meeting on a client.shoots:writeQuery parameters
| Parameter | Type | Values |
|---|---|---|
| q | string | Matches name, email, company, or phone, up to 100 characters. |
| status / kind | enum | lead · active · past · contact, and person · business. |
| include_archived | boolean | Defaults to false. |
| limit / offset | integer | Pagination. Limit is 1–100. |
Request body
| Field | Rule | Values |
|---|---|---|
| name | required on POST | Up to 200 characters. |
| kind, status | optional | person · business, and lead · active · past · contact. |
| email, phone, company, notes, tags | optional | An email that is already in the CRM returns 409. |
| organization_id, referred_by_id, partner_id | optional | Links to other clients. Send null to unlink. |
| follow_up_on, birthday, lead_source, website, instagram, pronouns, address, starred | optional | Dates are YYYY-MM-DD. PATCH takes the same fields; send only what changes. |
| Field | Rule | Values |
|---|---|---|
| body | required | Up to 5,000 characters. |
| kind | optional | note (default) · call · email · meeting |
| occurred_at, shoot_id, job_id | optional | occurred_at defaults to now and can't be more than a day ahead. The shoot must belong to the job. |
Money
Quotes and invoices need the Studio plan. Create a draft quote, send it, and record payments as clients pay.
/quotesList quotes with status filters. Studio plan.money:read/quotesCreate a draft quote. Studio plan.money:write/quotes/{id}/sendEmail the client a link to accept the quote.money:write/invoicesList invoices with installments and payments. Studio plan.money:read/invoices/{id}/paymentsRecord a payment against an invoice.money:writeQuery parameters
| Parameter | Type | Values |
|---|---|---|
| status | enum | draft · sent · accepted · declined · expired |
| limit / offset | integer | Pagination. Limit is 1–100. |
| Parameter | Type | Values |
|---|---|---|
| status | enum | draft · sent · paid · overdue · void |
| limit / offset | integer | Pagination. Limit is 1–100. |
Request body
| Field | Rule | Values |
|---|---|---|
| client_id or client_name | required | A client from your list, or a name (with client_email) for someone new. |
| title | required | Up to 160 characters. |
| line_items | required | 1–100 items, each { description, quantity, unit_price, discount }. |
| tax_rate | optional | Percent, 0–100. |
| valid_until | optional | Expiry date, formatted YYYY-MM-DD. |
| shoot_id, notes | optional | Link a shoot, and add notes for the client. |
| Field | Rule | Values |
|---|---|---|
| amount | required | Greater than 0, in the invoice's currency. The invoice must already be sent. |
| method, paid_on, reference, notes | optional | paid_on is YYYY-MM-DD and defaults to today. |
curl -X POST "https://www.geardex.app/api/studio-agent/v1/quotes" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{
"client_id": "CLIENT_ID",
"title": "Spring family session",
"line_items": [{ "description": "Family session, 1 hour", "quantity": 1, "unit_price": 450 }]
}'Read-only resources
/documentsList document and warranty metadata.documents:read/insuranceList insurance policies and certificates with coverage totals.documents:read/insurance/{id}Return one policy or certificate with the gear it covers.documents:read/analyticsReturn aggregate Studio metrics.analytics:read/profileReturn account and Studio profile metadata.profile:readInsurance filters
| Parameter | Type | Values |
|---|---|---|
| kind | enum | policy · certificate |
| state | enum | all (default) · active · expiring · expired |
Document filters
| Parameter | Type | Values |
|---|---|---|
| documentType | enum | receipt · warranty · insurance · user_manual |
| gearItemType | enum | camera · lens · accessory · filter · drone |
| warrantyStatus | enum | expired · critical · urgent · warning · active |
| fromDate / toDate | date | Date window, formatted YYYY-MM-DD. |
| q | string | Search text, up to 100 characters. |
| limit / offset | integer | Pagination. Limit is 1–100. |
curl -X GET "https://www.geardex.app/api/studio-agent/v1/analytics" \
-H "Authorization: Bearer gdx_live_your_key_here" \
-H "Accept: application/json"Sample analytics and profile payloads are on What can you build?
Pagination
Collection endpoints use limit and offset. Responses include returned and total counts so clients can advance through results without guessing.
{
"pagination": {
"limit": 25,
"offset": 0,
"returned": 25,
"total": 83
}
}