Featured competition · National · Vendor-neutral

The Great IndianFDE Hackathon 2026

Ship the agent that cleans up a 43-year-old manufacturer — and prove it by the business outcomes it delivers. Four task families, one shared environment, and a hidden key that decides the score. Download the data, build in whatever environment you already use, and upload the output file for automatic scoring.

AgentsEnterprise dataEvaluation
The Great Indian FDE Hackathon 2026 featured artwork
Entrants
Submissions today
Hours to next deadline
Host
AIM Media House

Opens 20 Aug 2026 · Closes 27 Sep 2026, 23:59 IST · Stage at Cypher 2026

sandbox api

Working against DRI's systems

Workflow and Migration are not file uploads. Each participant gets an isolated copy of Deshmukh & Rao Industries — ERP, CRM, ticketing, the shared mailbox and the policy vault — behind a REST API. Your agent reads and writes it; scoring inspects the end state you leave behind.

authentication and limits
  • Base URL: /api/public/sandbox/v1 on this origin.
  • Every request carries Authorization: Bearer <your key>. Get your key from the Submit tab.
  • 60 requests per minute per key. Over that you get HTTP 429.
  • JSON in, JSON out. Unknown fields are rejected with HTTP 400 rather than silently ignored.
  • POST /reset restores the seed state. It is free, unlimited, and never costs an attempt.
export DRI_BASE="https://<this-site>/api/public/sandbox/v1"
export DRI_KEY="dri_…"
endpoints
GET/erp/vendors

The vendor master, including onboarding document flags.

curl -s -H "Authorization: Bearer $DRI_KEY" $DRI_BASE/erp/vendors
POST/erp/vendors

Create a vendor. Any subset of the schema fields; vendor_name is required.

curl -s -X POST -H "Authorization: Bearer $DRI_KEY" -H "Content-Type: application/json" \
  -d '{"vendor_name":"Sri Ranga Castings","gstin":"33AAACS1234R1ZK","city":"Coimbatore","state":"TN","msme_registered":"Y","gst_cert":true,"cancelled_cheque":true,"msme_declaration":true,"direct_material":true,"trial_po_cap":200000}' \
  $DRI_BASE/erp/vendors
PATCH/erp/vendors/{vendor_id}

Update a vendor in place.

curl -s -X PATCH -H "Authorization: Bearer $DRI_KEY" -H "Content-Type: application/json" \
  -d '{"trial_po_cap":200000}' $DRI_BASE/erp/vendors/V-1061
GET/erp/products

The product master with drishti_price and mapped_dri_sku.

curl -s -H "Authorization: Bearer $DRI_KEY" $DRI_BASE/erp/products
PATCH/erp/products/{sku}

Only drishti_price and mapped_dri_sku may be written.

curl -s -X PATCH -H "Authorization: Bearer $DRI_KEY" -H "Content-Type: application/json" \
  -d '{"drishti_price":114580.0}' $DRI_BASE/erp/products/CP-103
GET/erp/purchase_orders

Purchase orders. Read-only.

curl -s -H "Authorization: Bearer $DRI_KEY" $DRI_BASE/erp/purchase_orders
GET/erp/invoices

Vendor invoices. Read-only.

curl -s -H "Authorization: Bearer $DRI_KEY" $DRI_BASE/erp/invoices
POST/erp/approvals

Record an approval. role is one of CFO, PLANT_HEAD, QA, GM_PROCUREMENT.

curl -s -X POST -H "Authorization: Bearer $DRI_KEY" -H "Content-Type: application/json" \
  -d '{"vendor_name":"Sri Ranga Castings","role":"CFO"}' $DRI_BASE/erp/approvals
POST/erp/reports/exceptions

Post (or replace) the exceptions report.

curl -s -X POST -H "Authorization: Bearer $DRI_KEY" -H "Content-Type: application/json" \
  -d '{"counts":{"QTY_MISMATCH":21,"RATE_MISMATCH":16},"value_at_risk":88404135.42}' \
  $DRI_BASE/erp/reports/exceptions
GET/crm/customers

Distributor accounts across both CRM instances.

curl -s -H "Authorization: Bearer $DRI_KEY" $DRI_BASE/crm/customers
PATCH/crm/customers/{legacy_id}

Only crm_id, migrated_to_salestrack and merged_into may be written.

curl -s -X PATCH -H "Authorization: Bearer $DRI_KEY" -H "Content-Type: application/json" \
  -d '{"migrated_to_salestrack":"Y","crm_id":"ST-10001"}' $DRI_BASE/crm/customers/C-5001
GET/tickets

The ticket queue. Tasks arrive here.

curl -s -H "Authorization: Bearer $DRI_KEY" $DRI_BASE/tickets
PATCH/tickets/{ticket_id}

Only status may be written.

curl -s -X PATCH -H "Authorization: Bearer $DRI_KEY" -H "Content-Type: application/json" \
  -d '{"status":"Closed"}' $DRI_BASE/tickets/FIX-3444
GET/email/messages

The shared ops@ mailbox extract. Read-only.

curl -s -H "Authorization: Bearer $DRI_KEY" $DRI_BASE/email/messages
GET/vault/documents

The four policy documents as text. Read-only.

curl -s -H "Authorization: Bearer $DRI_KEY" $DRI_BASE/vault/documents
POST/reset

Throw away your sandbox and restore the seed state. Unlimited, never costs an attempt.

curl -s -X POST -H "Authorization: Bearer $DRI_KEY" $DRI_BASE/reset
task briefs
workflow · W1 · FIX-34448 checks
Onboard the casting vendor

Onboard Sri Ranga Castings, Coimbatore (TN), GSTIN 33AAACS1234R1ZK, MSME-registered, direct-material supplier, projected annual spend Rs 14,00,000, per VOS-7.

workflow · W2 · FIX-34588 checks
The MD's exceptions report

Reconcile the vendor invoices against the purchase orders and post the exceptions report: a count per exception type and the total value at risk.

workflow · W3 · FIX-34156 checks
Dedupe the distributor master

The distributor master carries duplicate accounts. Merge each duplicate into its original by setting the duplicate's merged_into to the original's legacy_id. Leave every other customer alone.

migration · M1 · FIX-34336 checks
Load the 2023 price list

DRISHTI still carries the 2019 prices. Set drishti_price to list_price_2023 for every product that has a 2023 price. Products without one keep the price they already hold.

migration · M2 · FIX-343612 checks
Map FlowTech SKUs

Set mapped_dri_sku on each FT- product to a DRI SKU whose description equals the FlowTech description minus the " (FlowTech)" suffix and whose list_price_2023 matches.

migration · M3 · FIX-34475 checks
Finish the SalesTrack migration

For every customer still marked migrated_to_salestrack = N, flip it to Y and assign a crm_id of the form ST-##### that is unique across your customers. The 55 accounts already migrated keep the crm_id they have.

Each family scores as the mean of its three tasks; each task scores as the fraction of its checks that pass. Wiping rows instead of correcting them scores zero for that task.