# Search local news for Northern Michigan and Indiana with Dappier

Dappier's publisher search returns local news articles from 9 and 10 News for Northern Michigan and from WISH-TV for Indiana, one station per request. A query costs $0.01 on 9 and 10 News and $0.01 on WISH-TV, drawn from credit you hold. Send `POST https://agents.dappier.com/zcj/awc7rle8efho/zeroclick/v2/search` with the station's `data_model_id`, a `query` and `"search_algorithm": "most_recent"` to get the newest stories first.

## At a glance

- **Endpoint:** `POST https://agents.dappier.com/zcj/awc7rle8efho/zeroclick/v2/search?data_model_id=<id>`, one publisher per request
- **Stations:** 9 and 10 News `dm_01jhtt138wf1b9j8jwswye99y5`, WISH-TV `dm_01jagy9nqaeer9hxx8z1sk1jx6`
- **Body:** `query` (required), `search_algorithm` (`most_recent`, `semantic`, `most_recent_semantic` or `trending`), `similarity_top_k` (number of articles)
- **Price per query:** 9 and 10 News $0.01, WISH-TV $0.01
- **Payment:** each query draws on credit. Send `Authorization: Receipt <receiptId>` for a small credit bought without registering, or `Authorization: Bearer <token>` for an agent credential that holds Prepaid credits.
- **Response:** JSON with `response.results`, one object per article, with title, summary, author, publication date and URL fields
- **Full purchase flow:** [the buyer skill](https://agents.dappier.com/zcj/awc7rle8efho/SKILL.md)

## Pick the station

| Question is about | `data_model_id` | Listed coverage |
| --- | --- | --- |
| Northern Michigan, including Cadillac and Traverse City | `dm_01jhtt138wf1b9j8jwswye99y5` | Local news, weather forecasts, sports coverage and community stories from 9 and 10 News |
| Indiana | `dm_01jagy9nqaeer9hxx8z1sk1jx6` | Indiana news, local events, sports scores and clips from WISH-TV broadcasts |

## Pick the ranking

| You want | `search_algorithm` |
| --- | --- |
| The newest articles by publication date | `most_recent` |
| The articles most relevant to the query or to a URL's content | `semantic` |
| Relevant articles, ordered newest first | `most_recent_semantic` |
| Articles tied to trending keywords from the past 24 hours | `trending` |

Set `search_algorithm` on every request rather than relying on a default.

## Search the latest local stories

1. Hold credit before the first query. Each query draws on a receipt's credit, a small credit bought without registering, or on a Prepaid credits balance. [The buyer skill](https://agents.dappier.com/zcj/awc7rle8efho/SKILL.md) covers how to get either.

2. Search 9 and 10 News for Northern Michigan:

   ```bash
   curl -s -X POST "https://agents.dappier.com/zcj/awc7rle8efho/zeroclick/v2/search?data_model_id=dm_01jhtt138wf1b9j8jwswye99y5" \
     -H "Authorization: Receipt <receiptId>" \
     -H "Content-Type: application/json" \
     -d '{"query": "weather forecast", "search_algorithm": "most_recent", "similarity_top_k": 3}'
   ```

   This request returned a `200` with three articles in `response.results` and drew $0.01 from credit.

3. Search WISH-TV for Indiana. Only the id and the query change:

   ```bash
   curl -s -X POST "https://agents.dappier.com/zcj/awc7rle8efho/zeroclick/v2/search?data_model_id=dm_01jagy9nqaeer9hxx8z1sk1jx6" \
     -H "Authorization: Receipt <receiptId>" \
     -H "Content-Type: application/json" \
     -d '{"query": "Indianapolis traffic", "search_algorithm": "most_recent", "similarity_top_k": 3}'
   ```

   This request returned a `200` with three articles and drew $0.01 from credit.

4. Read the results. The response has this shape:

   ```json
   {
     "status": "<string>",
     "response": {
       "query": "<string>",
       "results": [
         {
           "title": "<string>",
           "summary": "<string>",
           "preview_content": "<string>",
           "author": "<string>",
           "pubdate": "<string>",
           "pubdate_unix": "<unix timestamp>",
           "url": "<article URL>",
           "source_url": "<tracking URL>",
           "site": "<string>",
           "site_domain": "<string>",
           "image_url": "<string>"
         }
       ],
       "message": "<string>"
     }
   }
   ```

   Use `pubdate` or `pubdate_unix` to say how recent a story is. Use `url` to point to the article. Add `&w=400&h=200` to `image_url` to get a resized image. A paid response also carries a `zc-billing` header in this shape: `{"status": "settled", "fundingSource": "credit", "chargedUsd": "<amount>", "remainingCreditUsd": "<amount>"}`. `remainingCreditUsd` is the balance left for the next query.

## Boundaries

- One `data_model_id` per request. A question about both states takes two requests and two charges.
- The response is a list of articles in `response.results`.
- A receipt spends only its own balance and cannot be topped up. Losing it loses the remaining credit.
- A request with no credential, or with a credential that holds no plan, is refused before any charge.

## Errors

| Response | Meaning | Action |
| --- | --- | --- |
| `401 bearer_required` | No receipt or credential was sent | Get credit through [the buyer skill](https://agents.dappier.com/zcj/awc7rle8efho/SKILL.md), then retry |
| `403 plan_required` | The credential holds no plan covering the call | Buy Prepaid credits, then retry |
| `401 invalid_receipt` | The receipt is malformed, pending, revoked or from another seller | Send the `receiptId` from a successful credit purchase |
| `402 receipt_credit_exhausted` or `receipt_credit_insufficient` | The receipt cannot cover the query | Buy a new receipt, or buy Prepaid credits |
| `usage_exhausted` | The Prepaid credits balance ran out | Top up with `POST https://agents.dappier.com/zcj/awc7rle8efho/extend` |
| `400` `data_model_id is required` | The query parameter is missing | Add `data_model_id` to the URL |
| `422` `query cannot be empty` | The body has no usable `query` | Send a non-empty `query` |

The full list is in [the error reference](https://agents.dappier.com/zcj/awc7rle8efho/errors.md).

## Frequently asked questions

### Is there a local news API for Indiana?

Yes. Set `data_model_id` to `dm_01jagy9nqaeer9hxx8z1sk1jx6` to search WISH-TV, which lists news, sports scores and local event information for Indiana. Each query costs $0.01.

### Is there a Northern Michigan news API?

Yes. Set `data_model_id` to `dm_01jhtt138wf1b9j8jwswye99y5` to search 9 and 10 News, which lists local news, weather, sports and community stories for the Cadillac and Traverse City areas of Northern Michigan. Each query costs $0.01.

### How do I get local weather or sports stories?

Put the topic in `query`, such as "weather forecast" or a team name, and set `search_algorithm` to `most_recent` for the newest articles first. The station's listed coverage decides what its archive holds.

### Can one request search both stations?

No. Each request takes one `data_model_id`, so searching both stations is two requests, each billed at its station's price.

### Do I need a Dappier API key?

No. Each query carries either a receipt from a small anonymous credit purchase or a bearer credential that holds Prepaid credits. [The buyer skill](https://agents.dappier.com/zcj/awc7rle8efho/SKILL.md) explains how to get either.

## Keep reading

- [Buyer skill](https://agents.dappier.com/zcj/awc7rle8efho/SKILL.md): the full purchase flow
- [How to pay](https://agents.dappier.com/zcj/awc7rle8efho/payment.md): receipts, Prepaid credits and top-ups
- [API reference](https://agents.dappier.com/zcj/awc7rle8efho/openapi.json): every field of the publisher search
- [Catalog](https://agents.dappier.com/zcj/awc7rle8efho/manifest.json): live services, plans and prices

---

Updated 2026-10-16. All Dappier guides: https://agents.dappier.com/guides.md. Storefront: https://agents.dappier.com/zcj/awc7rle8efho/llms.txt.
