# Love It Hosting ads: integration guide for AI agents

This guide tells AI agents (and developers) how to place **Love It Hosting** ads on websites **without a publisher ID**, choose ad formats and sizes, and optionally join the publisher (affiliate) program for earnings. Publisher signup is not required to display ads.

- Raw Markdown version of this page: https://www.loveithosting.net/ads-for-agents.md
- Site summary for LLMs: https://www.loveithosting.net/llms.txt
- Human sign-up page: https://www.loveithosting.net/publishers
- Buy ads instead: https://www.loveithosting.net/advertise

## Choose your integration

| Mode | Publisher ID required? | Use it for |
| --- | --- | --- |
| No-ID embeds | No | Your own websites, including a portfolio of 32 sites, when publisher payouts are not needed. |
| Publisher embeds | Yes, a Love It Hosting `pub_...` ID | Affiliate earnings and publisher-level stats. |
| Google AdSense | A Google `ca-pub-...` ID | AdSense on the Love It Hosting app itself; never served through partner embeds. |

The Love It Hosting publisher ID and Google AdSense publisher ID are different. **No-ID embeds need neither**, and need no access key or publisher account.

Missing, blank, malformed, unknown, pending or suspended publisher IDs **fall back to anonymous ad delivery**. Campaign impressions, clicks and slot inventory are still tracked, but no publisher earns from these deliveries. Invalid IDs (including oversized or repeated `pub` query values) never block delivery by themselves. This fallback does not bypass disabled networks, campaign eligibility, browser request requirements or rate limits; unfilled slots show the tracked placeholder.

## Quick start: ads without a publisher ID

Add the loader **once per page** and a slot wherever an ad should appear. Omit `data-publisher` entirely:

```html
<script async src="https://www.loveithosting.net/embed.js"></script>
<ins class="loveit-ad" data-size="300x250"></ins>
```

For a site builder that only allows iframes, omit the `pub` query parameter:

```html
<iframe src="https://www.loveithosting.net/embed/ad?size=728x90" width="728" height="90" style="border:0;max-width:100%" scrolling="no" loading="lazy" title="Advertisement" sandbox="allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox"></iframe>
```

Use the same snippets on all **32 websites**. No domain registration or separate publisher accounts are required for these embeds. Point every site at the same ad-server origin (https://www.loveithosting.net); do not replace it with the receiving site's domain.

### Multiple slots and layouts

This example uses one loader and three no-ID slots. Place each slot in the appropriate part of the page:

```html
<script async src="https://www.loveithosting.net/embed.js"></script>
<!-- Header or variable-width content -->
<ins class="loveit-ad" data-size="responsive"></ins>
<!-- Sidebar or between paragraphs -->
<ins class="loveit-ad" data-size="300x250"></ins>
<!-- Above or below mobile content -->
<ins class="loveit-ad" data-size="320x100"></ins>
```

Select slots that fit the site's layout rather than showing every size at once. Fixed-size slots keep their configured height; do not squeeze a desktop banner into a narrow mobile column. The `responsive` slot fills its container and is about 120px tall.

For single-page apps, call `window.LoveItAds.refresh()` after the loader is available and new `<ins class="loveit-ad">` elements have been inserted (new slots are also detected automatically). Keep one loader in the shared page layout.

### Enable campaigns on your websites

On the ad-server app, an administrator must:

1. Enable **Serve ads on partner websites** in https://www.loveithosting.net/admin/settings.
2. Create or edit a campaign in https://www.loveithosting.net/admin/ads. Choose **Partner network only** (`placement: "network"`), or select an on-site placement and enable **Also show on partner websites** (`network: true`).
3. Choose the ad type and creative size, supply its content, and make it active. Its dates and remaining impression allowance must also permit delivery.
4. Paste the no-ID embeds into the websites you are authorized to manage.

The same eligible campaign pool serves all 32 sites. Embeds choose a **slot size**, not a particular campaign or ad type. There is no per-domain campaign targeting in this integration.

No-ID impressions and clicks still count toward advertiser campaign statistics and network slot inventory in https://www.loveithosting.net/admin/reports, but **do not generate publisher earnings**. There is no publisher dashboard or separate per-website reporting for no-ID sites; reports aggregate by campaign and by channel, placement and size.

## Ad formats: text, banner and hosted page

Choose the creative's **Ad type** in https://www.loveithosting.net/admin/ads. All three formats use the same embed code and work without a publisher ID when enabled for the network:

| Ad type | Configure | What visitors see / click |
| --- | --- | --- |
| Text (`text`) | Title, description and target URL; use creative size `any` for flexible delivery. | A text ad linking to the target URL. Good for in-content and sidebar slots. |
| Banner (`banner`) | Public image URL, image alt text and target URL, plus the creative size. | A clickable image linking to the target URL. Use matching image/slot dimensions for predictable presentation. |
| Hosted page (`page`) | Title, description, target URL and a plain-text sponsored page body; an image is optional. | A teaser linking to a labeled sponsored page hosted by Love It Hosting, not a full page inside the slot or an overlay. |

The target URL must be an absolute HTTP(S) URL. Use an externally hosted or public image URL, not a local file path. A fixed-size creative serves only in its matching slot or a `responsive` slot; creative size `any` can serve in every slot. **`any` is a campaign creative setting, not a valid embed `data-size`.**

Ads rotate among eligible campaigns; visitors are not guaranteed one specific format. For example, use a `300x250` banner creative with `data-size="300x250"`, or a text creative sized `any` with any supported slot size below.

## Ad sizes

Set `data-size` (or the iframe's `size` query parameter) to one of these values. All sizes work with or without a publisher ID:

| data-size | Name | Best placement |
| --- | --- | --- |
| `responsive` | Responsive | Fills the width of its container (about 120px tall) |
| `728x90` | Leaderboard | Above or below content on desktop |
| `970x250` | Billboard | Large, high-impact header on wide layouts |
| `468x60` | Banner | Inline in narrower content columns |
| `300x250` | Medium rectangle | Sidebars and in-article; works everywhere |
| `336x280` | Large rectangle | In-article, between paragraphs |
| `250x250` | Square | Small sidebars and widgets |
| `300x600` | Half page | Sticky sidebars on desktop |
| `160x600` | Wide skyscraper | Narrow sidebars on desktop |
| `320x50` | Mobile banner | Top or bottom of mobile pages |
| `320x100` | Large mobile banner | Mobile, above or below content |

Recommendations: use `300x250` in sidebars and between paragraphs, `728x90` above or below content on desktop, `320x50` or `320x100` on mobile, and `responsive` when the container width varies. Up to 3 ad slots per page is a good default.

### What gets displayed

- Each slot is a sandboxed iframe served from https://www.loveithosting.net. Ad creatives cannot run scripts on the host page or read its cookies; clicking an ad can open its destination in a new tab.
- Every ad carries a small **"Ads by Love It Hosting"** watermark that links to https://www.loveithosting.net/advertise. Do not hide, cover, or modify it.
- When no eligible campaign is available for a size, or the partner network is disabled, the slot shows a **"Your ad here"** placeholder linking to the advertise page (placeholders do not earn).
- Partner embeds serve hosted campaigns or placeholders only, **never Google AdSense**.
- Hosted ads rotate automatically every 60 seconds while in view, and a visitor is not shown the same ad twice in a row when alternatives exist.
- Use the browser embed, not a server-side call to `/api/network/serve`: delivery requires same-origin browser Fetch Metadata headers from the ad frame.

## Optional: create a publisher account for earnings

**Skip this section for the 32-site no-ID setup.** Only sign up if the owner wants affiliate earnings and publisher-level stats. New accounts can require administrator approval if auto-approval is disabled.

```bash
curl -X POST https://www.loveithosting.net/api/publishers \
  -H "content-type: application/json" \
  -d '{"name":"Example Blog","email":"owner@example.com","website":"https://example.com","payoutEmail":"","acceptTerms":true}'
```

Response (`201`):

```json
{ "publisher": { "id": "pub_xxxxxxxxxxxx", "status": "active", "name": "Example Blog", "...": "..." }, "accessKey": "SECRET" }
```

- Store `accessKey` securely: it is shown **only once**. Never put it in website HTML; only the publisher ID is public.
- `acceptTerms: true` confirms the site owner accepts the program rules below. Only do this with the site owner's permission.
- `payoutEmail` (PayPal) is optional and can be added later in the dashboard.
- Sign-ups are rate limited (5 per hour per IP). Do not create multiple accounts for the same owner.

### Embed ads with a publisher ID

**Recommended: script + slot.** Add the loader once per page (for example before `</body>`), and one `<ins>` per ad slot:

```html
<script async src="https://www.loveithosting.net/embed.js"></script>
<ins class="loveit-ad" data-publisher="pub_xxxxxxxxxxxx" data-size="300x250"></ins>
```

**Script-free fallback** (site builders that only allow iframes):

```html
<iframe src="https://www.loveithosting.net/embed/ad?size=728x90&pub=pub_xxxxxxxxxxxx" width="728" height="90" style="border:0;max-width:100%" scrolling="no" loading="lazy" title="Advertisement" sandbox="allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox"></iframe>
```

### Publisher earnings and stats

Only deliveries attributed to an active publisher can earn. These rates and publisher APIs do not apply to no-ID embeds.

Current rates:

- **$1.00** per 1,000 qualified impressions
- **$0.05** per qualified click
- Minimum payout: **$25.00** (paid to the payout email)

A **qualified impression** means at least 50% of the ad was visible for 1 continuous second in a visible browser tab. Each ad delivery counts once. A **qualified click** must follow a qualified impression of the same delivery. Per visitor and hour, at most 120 impressions and 6 clicks earn.

Read stats (`days` = 7, 30, or 90):

```bash
curl https://www.loveithosting.net/api/publisher/me?days=30 \
  -H "Authorization: Bearer pub_xxxxxxxxxxxx:ACCESS_KEY"
```

The response includes `publisher`, `totals` (impressions, clicks, earnedCents, paidCents, balanceCents), `daily` (per-day impressions, clicks, earnedCents), `payouts`, and `rates`. All amounts are USD cents.

Update account details (name, website, payout email):

```bash
curl -X PUT https://www.loveithosting.net/api/publisher/me \
  -H "Authorization: Bearer pub_xxxxxxxxxxxx:ACCESS_KEY" -H "content-type: application/json" \
  -d '{"name":"Example Blog","website":"https://example.com","payoutEmail":"paypal@example.com"}'
```

Human dashboard: https://www.loveithosting.net/publishers/dashboard

## Rules for agents

- Only add ads to sites you are authorized to change, and only accept the terms with the owner's consent.
- **Never** click ads, load pages to create impressions, or automate traffic. Invalid activity is not paid and can suspend the account.
- Do not place ads on pages with illegal, adult, hateful, or deceptive content, or inside pop-ups or interstitials.
- Do not alter the iframe content, the watermark, or ad sizes; let the slot size match `data-size`.
- Label the area as advertising if the site's design could make ads look like content.
- Keep the access key secret (environment variables or a secrets store), never in client-side code or public repositories.

## Errors

| Status | Meaning |
| --- | --- |
| 400 | Invalid input. The `data.issues` array explains which field failed. |
| 401 | Missing or invalid `Authorization: Bearer <publisherId>:<accessKey>`. |
| 403 | Browser request from another origin (send server-side requests without an `Origin` header). |
| 429 | Rate limited. Wait for the `Retry-After` seconds. |
