Trippple for platforms

Build advertising into your product, white-labelled.

One REST API, one MCP server, and your customers launch campaigns without leaving your product.

Try the API

The calls

One request, one response. Nothing to install.

The calls below are the documented ones, with the real fields from the OpenAPI specification. The responses are examples: nothing is called from this page.

Deliver

Produce

Return the customers

GET /v1/campaigns

Every campaign carries what was asked for and what is actually happening: effectiveStatus says whether Meta is reviewing, the budget is spent, or delivery is running.

The request

curl "https://api-sia54tw5uq-uc.a.run.app/v1/campaigns" \
  -H "x-api-key: trp_..."

The response

{
  "data": [
    {
      "id": "cmp_4b7e02",
      "object": "campaign",
      "name": "Mariage - printemps",
      "objective": "LEAD_GENERATION",
      "status": "ACTIVE",
      "effectiveStatus": {
        "key": "running",
        "reason": null,
        "action": null
      },
      "budget": {
        "currency": "EUR",
        "amountCents": 45000
      },
      "destination": "LANDING"
    }
  ],
  "nextCursor": null
}

POST /v1/campaigns/cmp_4b7e02/activate

A transition is an action, never a field to edit. The response says immediately which real state the campaign is in.

The request

curl -X POST "https://api-sia54tw5uq-uc.a.run.app/v1/campaigns/cmp_4b7e02/activate" \
  -H "x-api-key: trp_..."

The response

{
  "data": {
    "id": "cmp_4b7e02",
    "object": "campaign",
    "status": "ACTIVE",
    "effectiveStatus": {
      "key": "reviewing",
      "reason": null,
      "action": null
    }
  }
}

GET /v1/stats?level=campaign

Meta spend, net cost, leads received, impressions and reach, by day, at business, campaign or ad level.

The request

curl "https://api-sia54tw5uq-uc.a.run.app/v1/stats?level=campaign" \
  -H "x-api-key: trp_..."

The response

{
  "data": [
    {
      "id": "cmp_4b7e02",
      "dayString": "2026-10-05",
      "currency": "EUR",
      "metaSpend": 41.2,
      "netCost": 48.6,
      "forms": 9,
      "impressions": 7312,
      "linkClicks": 164,
      "reach": 5890
    }
  ],
  "totals": {
    "forms": 9,
    "netCost": 48.6
  },
  "range": {
    "level": "campaign",
    "sinceDayString": "2026-10-05",
    "untilDayString": "2026-10-05",
    "ids": [
      "cmp_4b7e02"
    ]
  }
}

POST /v1/campaigns/cmp_4b7e02/adGenerations

The work is asynchronous: you get a jobId to follow, and the ad ids as they arrive. The Idempotency-Key header makes the call safe to replay.

The request

curl -X POST "https://api-sia54tw5uq-uc.a.run.app/v1/campaigns/cmp_4b7e02/adGenerations" \
  -H "x-api-key: trp_..." \
  -H "Idempotency-Key: 7f3a-2c91"

The response

{
  "data": {
    "id": "agn_19d4c7",
    "object": "ad_generation",
    "campaignId": "cmp_4b7e02",
    "status": "running",
    "outputNumber": 8,
    "adIds": [],
    "jobId": "job_61ba8f"
  }
}

POST /v1/landings/lnd_7c25e1/publish

The page goes live at its own address, ready to take the campaign's clicks.

The request

curl -X POST "https://api-sia54tw5uq-uc.a.run.app/v1/landings/lnd_7c25e1/publish" \
  -H "x-api-key: trp_..."

The response

{
  "data": {
    "id": "lnd_7c25e1",
    "object": "landing",
    "status": "live",
    "url": "https://exemple.fr/mariage-printemps",
    "publishedAt": "2026-10-05T11:02:47Z"
  }
}

GET /v1/forms?campaignId=cmp_4b7e02

Everyone who filled in a form, with the campaign they came from. isOrganic marks the ones that came from a share outside targeting.

The request

curl "https://api-sia54tw5uq-uc.a.run.app/v1/forms?campaignId=cmp_4b7e02" \
  -H "x-api-key: trp_..."

The response

{
  "data": [
    {
      "id": "frm_8f2c1a",
      "object": "form",
      "campaignId": "cmp_4b7e02",
      "firstName": "Camille",
      "lastName": "Rousseau",
      "email": "camille@example.fr",
      "phoneNumberE164": "+33612345678",
      "isOrganic": false,
      "createdAt": "2026-10-05T09:14:22Z"
    }
  ],
  "nextCursor": null
}

GET /v1/contacts

The same person converges on one identity however many forms they filled in: identityKind says on what.

The request

curl "https://api-sia54tw5uq-uc.a.run.app/v1/contacts" \
  -H "x-api-key: trp_..."

The response

{
  "data": [
    {
      "id": "ctc_2ae910",
      "object": "contact",
      "firstName": "Camille",
      "lastName": "Rousseau",
      "emails": [
        "camille@example.fr"
      ],
      "campaignIds": [
        "cmp_4b7e02"
      ],
      "formIds": [
        "frm_8f2c1a"
      ],
      "identityKind": "email",
      "lastInteractionAt": "2026-10-05T09:14:22Z"
    }
  ],
  "nextCursor": null
}

All 63 paths and 154 objects are described in the full documentation.

What the API opens

Three surfaces, one key.

View the documentation

Deliver

Create a campaign, put it live, follow what it spends and what it returns.

  1. Create and edit a campaign, its objective and its monthly cap.
  2. Activate or pause a campaign and each ad, through a dedicated action call.
  3. Deliver on Facebook and Instagram, the two channels the platform runs today.
  4. Read the real delivery state, not just the requested one: Meta review, spent budget, daily cap.
  5. Pull spend, leads, impressions and reach by day, at business, campaign or ad level.

Produce

The full chain, from market research to a published landing page.

  1. Launch market research and retrieve the personas it produces.
  2. Generate ad sets, copy and visuals, and approve them one by one.
  3. Create forms, publish them, and upload media.
  4. Produce a landing page per persona, review it section by section, publish it.
  5. Follow every long job by its task id instead of waiting on the response.

Return the customers

The leads received and the records they feed, ready to join your product.

  1. List the leads received, with the campaign and ad they came from.
  2. Read and write contacts, companies, deals and the activity feed.
  3. Find the same person across forms: identity converges on the email, not on chance.
  4. Isolate what came from a share outside targeting, which is not measured like the rest.

MCP

Expose advertising to your agents.

The Trippple MCP server gives an AI agent the same capabilities as the API, as tools it knows how to call on its own. It connects in any MCP client, alongside your other servers.

30tools, read and write

  1. Campaigns, ads, personas, landing pages, forms, media, stats and CRM: the same surface as the API.
  2. An agent creates a campaign, runs the market research, writes the ads and publishes a page, without anyone opening an ads manager.
  3. Long jobs return a task to follow rather than a wait: the agent moves on instead of blocking.
  4. The connection states for itself which accounts it acts on and what it is allowed to do there.
  5. A field that does not apply is refused, never ignored: the agent learns it was wrong instead of believing it succeeded.
  6. It shows what it returns: ads with their visuals, pages with their preview.

Get started

From the first call to the first campaign.

Nothing to install, nothing to host. You call a REST API from the language you already use, or you plug the MCP server into your agent.

Load the specification

63 paths and 154 objects in OpenAPI 3.1. Postman and client generators read it: you copy no signature by hand.

Check what the key opens

One call to /v1/me says which account the key acts on and which scopes it carries. It is the first call to write, and the one that saves two days hunting a 403.

Launch a campaign

Creation, market research, ad generation, landing page. Long jobs return a task to follow: your code never waits.

Return the leads

Submitted forms arrive through /v1/forms, the records they feed through the CRM. That is what you show your customer, inside your interface.

The foundations

What an API is judged on before you spend a week on it.

63
paths
81
operations
154
described objects
3.1
OpenAPI, loads into Postman

Trippple appears nowhere

The API returns data, not an interface: no embedded frame, no script to drop in, no hosted page inside your funnel. Your customers see your product, and that is what white-label means here.

Changes are additive

A field or a route that gets added is never a breaking change. Your client ignores what it does not know, and keeps working.

One error envelope

A type that never lies, a readable code rather than a number, the offending field named, and a requestId returned on every response: that is what you attach to a ticket.

Pagination without ambiguity

Every list returns data and nextCursor. A null cursor is the end, with no total to compare and no offset to increment. The order is stable, so a sync never skips a record.

Scopes, and keys that are service accounts

A key only gets what it needs. The one that runs the publishing chain never reaches your client's customers. An object out of scope answers like an object that does not exist, so no one can enumerate the others.

Replayable writes

An Idempotency-Key header where identity does not protect on its own. Replaying returns the original response instead of redoing the work, and a failure releases the key.

An unknown field is refused

Writing budget instead of budgetAmountCents returns an error, never a silent edit that did not happen.

What our partners already integrate.

The first to build on the API:

Woorkers

AI agents that do the work instead of the team: prospecting, social media, advertising, finance. The advertising part runs on the Trippple API, so an agent creates a campaign, generates the ads and collects the leads without anyone opening an ads manager.

CRM platforms
Your customers turn what they know about their audience into a campaign.
Email marketing tools
An offer sent by email becomes an ad campaign.
Website and commerce platforms
The pages, products and services they publish are promoted from your interface.
Adtech and marketing platforms
Ad creation and launch complement your existing capabilities.
Other SMB software
The promotion workflow sits where your customers already run their business.

Let's build around a real customer need.

Bring us one workflow where advertising would make your product more useful. We look at the experience, the integration points and the business case together, then you get a key.

API access is granted on request: we open one key per partner, with the scopes that match your integration. The specification is public and the supported advertising channels are listed in the documentation.

Request access

The collective is joined by referral. Tell us who you are, and we will look at whether your market fits.

These details will prefill the booking page. Continue to choose a time.