# API & webhooks

Bring contacts and events in programmatically: the Instasent Ingest API and the webhook platforms. What the panel sets up for you — the source, its credentials and the stream log — and where the technical contract lives in the Developers zone.

**Language:** en
**Audience:** platform
**Translation key:** platform.data-sources.api-webhooks
**Search keywords:** api, ingest api, webhook, webhooks, stream, secret token, project uid, data source id, contacts endpoint, events endpoint, real time, push data, Make, Zapier, programmatic import
**Related pages:** /platform/es/data-sources/api-webhooks, /platform/en/data-sources, /platform/en/data-sources/connectors, /platform/en/data-sources/connectors/make, /platform/en/data-sources/connectors/zapier
**Docs index (every page):** https://docs.instasent.com/llms.txt
**This zone's index:** https://docs.instasent.com/platform/en/llms.txt
**This page:** https://docs.instasent.com/platform/en/data-sources/api-webhooks/ (HTML) · https://docs.instasent.com/platform/en/data-sources/api-webhooks.md (Markdown)
**Other language (es):** https://docs.instasent.com/platform/es/data-sources/api-webhooks.md

When you want contacts and events to flow in **programmatically and in real time**,
you use the Instasent **Ingest API** or one of the webhook platforms. This page
explains what the panel does for you — it creates the source, shows its credentials,
and streams a log of what arrives — and where the full technical contract lives.

## The Instasent Ingest API

The Ingest API imports contacts and events using Instasent's own format. Creating it
as a data source gives you a setup screen with everything you need to send data:

- `Contacts endpoint` — `url`
  `/v1/project/{uid}/datasource/{id}/stream/contacts` — where you post contacts.
- `Events endpoint` — `url`
  `/v1/project/{uid}/datasource/{id}/stream/events` — where you post events.
- `Project UID` — `string`
  Your project's identifier, part of every endpoint URL.
- `Data source ID` — `string`
  This source's identifier — each source has its own.
- `Secret token` — `string`
  The token that authenticates calls to this source. Each source has its own.

The setup screen also lists the **accepted attributes** and **accepted events**, and
shows a **stream log** of the incoming data so you can confirm it's arriving.

{/* CAPTURE-SECURITY (Héctor, audit 2026-07): this capture shows the REAL Secret token. Re-shoot it genericizing the token (replace it in the DOM with something like `ist_••••••••` before the screenshot). General rule: audit every capture/Properties for leaked credentials/tokens. Demo contact data (Acme account) is NOT masked; credentials/tokens ARE. */}

![The Ingest API source setup screen with the contacts and events endpoints, Project UID, Data source ID and Secret token](/platform/en/data-sources/images/api-webhooks--1-ingest-credentials.png)
*The Setup instructions screen: the contacts and events endpoints, the Project UID, Data source ID and Secret token, plus the accepted attributes and events.*

## Payload shape

Each source receives data keyed by **contact**. A contact payload identifies the
contact; an event payload adds the event name and its parameters:

```json
{ "contact_id": "..." }
```

```json
{ "contact_id": "...", "event": "...", "parameters": { } }
```

Every webhook and Ingest API source has **its own data source ID and secret token**,
so you can revoke or rotate one source without affecting the others.

## Webhook platforms

The webhook platforms — **Make**, **Zapier** and the rest — are the no-code way to
reach the same ingest stream. They use the **same per-source credentials as the Ingest
API** above: on the connector's page, press **Install {connector}** and Instasent
creates the source and shows you its **Project UID**, **Secret token** and **Data source
ID** under **Setup instructions** — these are the credentials you take to the platform. (This is what the connectors guide calls a
[webhook platform](/platform/en/data-sources/connectors#webhook-platforms-we-give-you-the-credentials).)
You build a scenario or zap in the platform that posts to your source's stream endpoint,
so you can wire Instasent up to tools that don't have a native connector. Each has its
own connector page with the exact steps:

- [Make](/platform/en/data-sources/connectors/make) - Send data from a Make scenario into the ingest stream.
- [Zapier](/platform/en/data-sources/connectors/zapier) - Send data from a Zap into the ingest stream.

## Where the panel ends and Developers begins

This page is about the **panel** side: creating the source, reading its credentials
and payload shape, and watching the stream log. The **full technical contract** —
the request and response schemas, every accepted field, error handling — lives in
the Developers zone:

- [Ingest API guide](https://staging-instasent-docs-nextjs.oscar-284.workers.dev/developers/ingest-api/guide) - The complete Ingest API reference and Swagger for high-volume contacts and events.

When you need to integrate at the code level, follow the Developers guide; come back
here to create the source and read its credentials.

---

This is one page of the Instasent documentation. For the complete machine-readable index of every guide and API reference, fetch https://docs.instasent.com/llms.txt — start there for full context.
