Ingestion

The Ingestion API lets you push your own customer and activity data directly into MadKudu in real time — so you can combine with the rest of the data aggregated by MadKudu and used through Sales Copilot, AI Scoring, MadKudu MCP.

Whether it’s product usage from your app, marketing events from custom systems, or any proprietary or purchased signals, this API gives you a single, secure, schema-flexible way to get your data into the MadKudu pipeline.

When to use this Integration

Use this API when you need to send data to MadKudu

  • that can’t be synced through existing native integrations (see integration list)

  • where going through Snowflake, BigQuery or S3 is a heavier lift

If you already pipe your data into Segment or a warehouse we support natively, start with these integrations instead of the Ingestion API.

What this integration does?

  • Accepts custom POST requests from your product, backend, CDP, or ETL jobs

  • Ingested data flows into MadKudu platform and can be leveraged like any other data point in Sales Copilot, AI Scoring, MadKudu MCP :

It’s fully schema-flexible: you define the fields you want. We take care of ingestion, storage, mapping, and usage across your pipeline.

Generate Upload Url

post

Generate a presigned URL for file upload.

Authorizations
Body
streamstringRequired

Stream name for the data

content_typestringRequired

Content type of the file to upload

Responses
200
The request has succeeded.
application/json
post
POST /ingestion/generate-upload-url HTTP/1.1
Host: madapi.madkudu.com
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 61

{
  "stream": "example-stream",
  "content_type": "application/json"
}
200

The request has succeeded.

{
  "upload_url": "https://partner-data-prod-data-madkudu.s3-us-west-2.amazonaws.com/data/tenants/objects/example-stream/source_system%3Ddataapi/tenant%3D3303/dt%3D2025-06-27-07-24/de27963b-2bfa-4701-9204-a21467748ce3.json?AWSAccessKeyId=ASIAS64Z634EVSBAIBTO&Signature=GJeGQdnIrVbR0sW9rZmE1m%2BOL1c%3D&content-type=application%2Fjson&x-amz-security-token=IQoJb3JpZ2luX2VjEHgaCXVzLXdlc3QtMiJHMEUCIQDFbBJX%2FIO6GhG%2BEHG837LNBJXIkvVCfZNMfwo7ypSCKwIgOCGI89cb99BLAz2ZH8wjWVTjmjXO5W6MJp2V7PFQo3kq5wMIcBAAGgwyMDM3OTY5NjMwODEiDLR5h0aBdKvuUFxYZSrEA9%2BwDQWmpiTEm8GRXFPap2nnpp4flSkMthrVr8rXif8w7YcqJW2ifzLu3zduPrCLCd%2BygSm7IVdMMEIDW2Ts08SIjIggf4tdAiMXDP69ACLletNEuBXIE0EUjqW43ZijoljM0n4gSVjgD%2BwUimU%2F1mtIiCnu5vXr1rZ07lwXYuwr9thjOpZbh0e7SvNDW2tgzxVA%2BNoaYyYdhL21G%2BK6BsKHchD2iFvRuThQP7e51Q3BMgCmrmsZeIfgRcKTyFN%2B%2FHRsVW6rZPElL0uA1RMLTcstQCm7LyaY4trYmjwx6U0CxA4ev%2Bp8eb2osNL1M0qXlfmKAAohiv7TMh6ukTAGEDsNzXwsK5sUVi8TAgchiT85ISa5jEgHOc%2Bsb6szhHqpm%2FM%2Ffh9tSkBHabFvFWnntcJVGqUZknO5j%2Bs%2FIO0aTjAIQzqBcnpfrU95BzRhtyykCAYNAtI7yz3LBFqTClIqJ2Vp3qrR%2BHt5lBF14xvAzk9vNh2qewRtDTX2YnezfrejxEb0i19RfLtWhtEYHIqF%2BuyYGPRL5%2FlawtPC1u5ESED2AT177NOz26ynLs%2FeJbAm8CklKLfo9kIHl4%2BsX%2B8coS9FQK0iMJCN%2BcIGOqUBq2qTYtLgMLzcCkS6Z06jwaXijcCtuWPt6v6xPmtfAO%2BgYYN1RDXJPs3U1kvr4cUK33RHXem8CyWZIoer5oUkfqOGulvfbo3NmRRFWK7v0bCGPdY22iBsZgoPJziiUbYxNeXNR401E1MWeanPxljhE5H79ZQcxN%2FLk997K8i%2Fr%2B7ckJitP7gRleDTIYK01wXSI8WhJlQ85JYSfBJjyx2lc4Hq2elT&Expires=1751012665",
  "file_key": "data/tenants/objects/example-stream/source_system=dataapi/tenant=3303/dt=2025-06-27-07-24/de27963b-2bfa-4701-9204-a21467748ce3.json"
}

Upload Json

post

Upload JSON data directly through the API.

Authorizations
Body

Request model for direct JSON upload

streamall ofRequired

Stream type for the data

string · enumOptional

Accepted streams for partner data

Possible values:
dataany ofRequired

Data array - contents depend on stream type

or
or
or
Responses
200
The request has succeeded.
application/json
post
POST /ingestion/upload-json HTTP/1.1
Host: madapi.madkudu.com
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 182

{
  "stream": "account",
  "data": [
    {
      "type": "account",
      "account_id": "acme-corp",
      "domain": "acme.com",
      "account_properties": {
        "name": "Acme Corporation",
        "industry": "Technology",
        "employees": 500
      }
    }
  ]
}
200

The request has succeeded.

{
  "status": "success",
  "message": "Data uploaded successfully",
  "file_key": "data/tenants/objects/contact_event/source_system=dataapi/tenant=3303/dt=2025-06-27-07-26/a84118bb-1557-42c4-819c-241c2887aa2d.jsonl"
}

Confirm Upload

post

Confirm that a file has been uploaded.

Authorizations
Body
file_keystringRequired

File key from the upload response

Responses
200
The request has succeeded.
application/json
post
POST /ingestion/confirm-upload HTTP/1.1
Host: madapi.madkudu.com
x-api-key: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 146

{
  "file_key": "data/tenants/objects/example-stream/source_system=dataapi/tenant=3303/dt=2025-06-27-07-24/de27963b-2bfa-4701-9204-a21467748ce3.json"
}
200

The request has succeeded.

{
  "status": "success",
  "message": "File upload confirmed and processing started"
}

Last updated

Was this helpful?