---
title: "Screen first, then read the room"
description: "Compose Entity screening with News media context for a compliance desk slice."
slug: compose-entity-news
status: published
published_at: 2026-07-10
author: Arman Obosyan
author_url: https://sugra.systems/about
section: composition
series_order: 9
primary_keyword: sugra entity news composition
hero_image: /blog/images/posts/compose-entity-news-hero.jpg
hero_alt: "Screen first, then read the room - Sugra API blog"
og_image: /blog/images/posts/compose-entity-news-hero.jpg
tags:
  - composition
  - entity
  - news
---

# Composition: Entity screening + News media pulse

**Series:** compositions (2 of 4)  
**Prerequisites:** [Platform intro](/blog/platform-intro), [Entity](/blog/sugra-entity), [News](/blog/sugra-news)  
**Directions:** Entity + News  
**Auth:** `x-api-key`  

Compose a **compliance desk slice**: screening signal for a counterparty, plus what curated media and global coverage are saying about related themes. Still a **signal stack**, not a legal determination.

---

## Goal

For a name (or LEI / wallet):

1. Run Entity screen (hit / review / clear + lists + freshness).  
2. Pull curated headlines and/or GDELT articles for the same string.  
3. Optionally pull theme radar for policy/crisis context.  
4. Package one case file JSON with disclaimers.

---

## Call sequence

```text
[Entity] POST /entity/screen  {name, country?}
[Entity] GET  /entity/sources   (or rely on meta.list_freshness)
[News]   GET  /news/search?q={name}
[News]   GET  /gdelt/articles?q={name}&max_records=10
[News]   GET  /gdelt/themes/trending?period=6h&limit=10   (optional context)
         -> case_file
```

### Entity

```bash
H="x-api-key: $SUGRA_API_KEY"
B=https://sugra.ai

curl -X POST -H "$H" -H "Content-Type: application/json" \
  -d '{"name":"Example Corp","country":"US"}' \
  "$B/api/v1/entity/screen"
```

Store `data.screening.status`, matches, `meta.disclaimer`, `meta.screening_id`, `meta.list_freshness`, `meta.stale_screening`.

### News

```bash
curl -H "$H" "$B/api/v1/news/search?q=Example%20Corp&limit=10"
curl -H "$H" "$B/api/v1/gdelt/articles?q=Example%20Corp&max_records=10"
curl -H "$H" "$B/api/v1/gdelt/themes/trending?period=6h&limit=10"
```

If GDELT returns 503, keep curated search results and mark `gdelt_unavailable: true`.

---

## Client package (example)

```python
case_file = {
    "subject": {"name": name, "country": country},
    "screening": {
        "status": entity["screening"]["status"],
        "match_count": len(entity["screening"].get("matches") or []),
        "screening_id": entity_meta.get("screening_id"),
        "stale_screening": entity_meta.get("stale_screening"),
        "disclaimer": entity_meta.get("disclaimer"),
    },
    "media": {
        "curated_hits": news_search_items,
        "gdelt_articles": gdelt_articles or [],
        "themes_window": themes if themes else None,
    },
    "policy": {
        "auto_block_if": ["hit"],  # your policy, not Sugra's
        "human_review_if": ["review"],
    },
}
```

Never auto-file a SAR or legal conclusion from this JSON alone.

---

## Why this composition works

| Leg | Contribution |
|---|---|
| Entity | Multi-list screen, rationale, freshness, disclaimer |
| News curated | Short-cadence headlines with links |
| GDELT | Broader global media evidence when available |

Media is **not** a sanctions list. Use it for analyst context after or beside the screen.

---

## Cadence and quota

| Step | Cadence idea |
|---|---|
| Screen on onboarding / payment | Event-driven |
| Re-screen | Policy schedule (daily/weekly) |
| News search | Event-driven or hourly watch |
| Themes | Hourly dashboard |

Batch onboarding: use Entity batch screen; do not N-serial GDELT for every vendor without a cache.

---

## Failure modes

| Failure | Handling |
|---|---|
| Entity `stale_screening` true | Queue human review or block per policy |
| GDELT 503 | Curated-only media section |
| Empty news search | Still return screen; note no curated hits |
| Wallet path instead of name | Swap in `/entity/wallet/{addr}/screen` |

---

## Read next

- [Entity](/blog/sugra-entity) · [News](/blog/sugra-news)  
- Next composition: [Physical ops stack](/blog/compose-earth-ops)  
- [Series TOC](/blog/platform-intro) · [Conclusion](/blog/series-conclusion)
