Nuvelics documentation
APIAPI reference

Pitches

Review the pitches written for your newsdesks: list, read and summarize them, approve or dismiss them, and submit your own drafts.

List pitches (paginated)

GET
/api/tenant/v1/pitches

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Query Parameters

limit?integer

Maximum items per page (1–100, default 25)

Range1 <= value <= 100
Default25
cursor?string

Opaque cursor from a prior nextCursor

sort?string

Sort order: "-field" descending, "field" ascending. Accepted: rank, -rank (default -rank)

include?|array<string>

Relations to sideload; repeat the parameter for several. contributingPublishers and eventContext each add a per-pitch map keyed by pitch id; statusChangedBy and createdBy populate the envelope's users map with whoever last moved each pitch and whoever created it. All omitted by default, so the ordinary list pays no extra query.

Response Body

A page of pitches, highest-ranked first by default

application/json
  1. response
items*array<>
pagination*
sort*
filters*
facets?

Value/count breakdown for each field requested via ?facets=. Present only when facets were requested.

included?
Example Request
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/pitches'
Example Response
{  "items": [    {      "id": "string",      "orgId": "string",      "newsdeskId": "string",      "eventClusterId": "string",      "title": "string",      "summary": "string",      "whyItMatters": "string",      "score": 0,      "contentLanguage": "string",      "eventDate": "2019-08-24",      "status": "draft",      "creationSource": "auto",      "statusChangedAt": "2019-08-24T14:15:22Z",      "statusChangedBy": "string",      "createdBy": "string",      "manualRequestId": "string",      "createdAt": "2019-08-24T14:15:22Z",      "storyId": "string"    }  ],  "pagination": {    "nextCursor": "string"  },  "sort": {    "applied": "string",    "default": "string",    "available": [      "string"    ]  },  "filters": {    "applied": {      "property1": null,      "property2": null    },    "available": [      {        "field": "string",        "kind": "string",        "facetable": true      }    ]  },  "facets": {    "property1": {      "values": [        {          "value": "string",          "count": 0        }      ],      "capped": true    },    "property2": {      "values": [        {          "value": "string",          "count": 0        }      ],      "capped": true    }  },  "included": {    "contributingPublishers": {      "property1": {        "publishers": [          {            "publisherKey": "string",            "name": "string",            "iconUrl": "string"          }        ],        "sourceCount": 0      },      "property2": {        "publishers": [          {            "publisherKey": "string",            "name": "string",            "iconUrl": "string"          }        ],        "sourceCount": 0      }    },    "eventContext": {      "property1": {        "topics": [          "string"        ],        "locations": [          "string"        ]      },      "property2": {        "topics": [          "string"        ],        "locations": [          "string"        ]      }    },    "users": {      "property1": {        "id": "string",        "name": "string",        "email": "string"      },      "property2": {        "id": "string",        "name": "string",        "email": "string"      }    }  }}
GET
/api/tenant/v1/pitches/summary

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Query Parameters

bucket*string
Value in"day""month"
groupBy?string
Value in"topic""location"

Response Body

The caller's own org's pitch generation bucketed by day or month, optionally grouped by topic or location

application/json
  1. response
rows*array<>
capped*boolean
Example Request
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/pitches/summary?bucket=day'
Example Response
{  "rows": [    {      "bucket": "string",      "key": "string",      "count": 0    }  ],  "capped": true}

Get a pitch by ID

GET
/api/tenant/v1/pitches/{id}

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Query Parameters

include?|array<string>

Relations to sideload. createdBy populates included.users with the user who created the pitch, when a person did.

Response Body

Pitch found, with the seed articles it was created from

application/json
  1. response
id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
orgId*string

Owning organization identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
newsdeskId*string

Newsdesk identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
eventClusterId*string

The event cluster the pitch was generated from; null for a pitch a person created, which has none

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
title*string

Generated pitch headline

summary*string

Generated pitch summary

whyItMatters*string

Generated rationale for why this pitch fits the newsdesk's beat

score*integer

Relevance score for the newsdesk, 0-100 inclusive

Range0 <= value <= 100
contentLanguage*string

Language the pitch content was generated in

eventDate?string

ISO 8601 date (YYYY-MM-DD) of the underlying event, when determinable

Formatdate
status*string

Editorial review status

Value in"draft""new""approved""dismissed"
creationSource*string

What produced this pitch: auto for the engine, from an event cluster; manual for a person

Value in"auto""manual"
statusChangedAt?string

ISO 8601 timestamp of the most recent status change

Formatdate-time
statusChangedBy?string

User who made the most recent status change

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
createdBy?string

User who created this pitch; present only on a pitch a person created, and absent once that user is deleted

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
manualRequestId?string

The manual pitch request this pitch was built from, which its creator can read to edit the seeds; absent on an engine pitch

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
createdAt*string

ISO 8601 creation timestamp

Formatdate-time
storyId?string

Identifier of the story minted from this pitch on approval, when one exists

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
seeds*array<>

The articles the pitch was created from, in order; empty for an engine pitch

included?
Example Request
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/pitches/string'
Example Response
{  "id": "string",  "orgId": "string",  "newsdeskId": "string",  "eventClusterId": "string",  "title": "string",  "summary": "string",  "whyItMatters": "string",  "score": 0,  "contentLanguage": "string",  "eventDate": "2019-08-24",  "status": "draft",  "creationSource": "auto",  "statusChangedAt": "2019-08-24T14:15:22Z",  "statusChangedBy": "string",  "createdBy": "string",  "manualRequestId": "string",  "createdAt": "2019-08-24T14:15:22Z",  "storyId": "string",  "seeds": [    {      "articleId": "string",      "kind": "url",      "url": "string",      "title": "string",      "excerpt": "string",      "publishedAt": "2019-08-24T14:15:22Z",      "publisherKey": "string",      "iconUrl": "string",      "position": 0,      "assetId": "string",      "useAsMedia": true,      "useAsMediaSetBy": "suggested"    }  ],  "included": {    "users": {      "property1": {        "id": "string",        "name": "string",        "email": "string"      },      "property2": {        "id": "string",        "name": "string",        "email": "string"      }    }  }}
GET
/api/tenant/v1/pitches/{id}/feed-deliveries

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Response Body

Every feed-capable connection's delivery state for this pitch, including one whose desk is unmapped or predates its own mapping

application/json
  1. response
items*array<>
Example Request
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/pitches/string/feed-deliveries'
Example Response
{  "items": [    {      "id": "string",      "connection": {        "id": "string",        "displayName": "string"      },      "vendor": "string",      "provider": "string",      "state": "sending",      "attempts": 0,      "createdAt": "2019-08-24T14:15:22Z",      "updatedAt": "2019-08-24T14:15:22Z",      "deliveredAt": "2019-08-24T14:15:22Z",      "nextAttemptAt": "2019-08-24T14:15:22Z",      "failureReason": "string"    }  ]}
POST
/api/tenant/v1/pitches/{id}/approve

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Response Body

Pitch approved

application/json
  1. response
id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
orgId*string

Owning organization identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
newsdeskId*string

Newsdesk identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
eventClusterId*string

The event cluster the pitch was generated from; null for a pitch a person created, which has none

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
title*string

Generated pitch headline

summary*string

Generated pitch summary

whyItMatters*string

Generated rationale for why this pitch fits the newsdesk's beat

score*integer

Relevance score for the newsdesk, 0-100 inclusive

Range0 <= value <= 100
contentLanguage*string

Language the pitch content was generated in

eventDate?string

ISO 8601 date (YYYY-MM-DD) of the underlying event, when determinable

Formatdate
status*string

Editorial review status

Value in"draft""new""approved""dismissed"
creationSource*string

What produced this pitch: auto for the engine, from an event cluster; manual for a person

Value in"auto""manual"
statusChangedAt?string

ISO 8601 timestamp of the most recent status change

Formatdate-time
statusChangedBy?string

User who made the most recent status change

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
createdBy?string

User who created this pitch; present only on a pitch a person created, and absent once that user is deleted

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
manualRequestId?string

The manual pitch request this pitch was built from, which its creator can read to edit the seeds; absent on an engine pitch

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
createdAt*string

ISO 8601 creation timestamp

Formatdate-time
storyId?string

Identifier of the story minted from this pitch on approval, when one exists

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
Example Request
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/pitches/string/approve'
Example Response
{  "id": "string",  "orgId": "string",  "newsdeskId": "string",  "eventClusterId": "string",  "title": "string",  "summary": "string",  "whyItMatters": "string",  "score": 0,  "contentLanguage": "string",  "eventDate": "2019-08-24",  "status": "draft",  "creationSource": "auto",  "statusChangedAt": "2019-08-24T14:15:22Z",  "statusChangedBy": "string",  "createdBy": "string",  "manualRequestId": "string",  "createdAt": "2019-08-24T14:15:22Z",  "storyId": "string"}
POST
/api/tenant/v1/pitches/{id}/dismiss

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Response Body

Pitch dismissed

application/json
  1. response
id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
orgId*string

Owning organization identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
newsdeskId*string

Newsdesk identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
eventClusterId*string

The event cluster the pitch was generated from; null for a pitch a person created, which has none

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
title*string

Generated pitch headline

summary*string

Generated pitch summary

whyItMatters*string

Generated rationale for why this pitch fits the newsdesk's beat

score*integer

Relevance score for the newsdesk, 0-100 inclusive

Range0 <= value <= 100
contentLanguage*string

Language the pitch content was generated in

eventDate?string

ISO 8601 date (YYYY-MM-DD) of the underlying event, when determinable

Formatdate
status*string

Editorial review status

Value in"draft""new""approved""dismissed"
creationSource*string

What produced this pitch: auto for the engine, from an event cluster; manual for a person

Value in"auto""manual"
statusChangedAt?string

ISO 8601 timestamp of the most recent status change

Formatdate-time
statusChangedBy?string

User who made the most recent status change

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
createdBy?string

User who created this pitch; present only on a pitch a person created, and absent once that user is deleted

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
manualRequestId?string

The manual pitch request this pitch was built from, which its creator can read to edit the seeds; absent on an engine pitch

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
createdAt*string

ISO 8601 creation timestamp

Formatdate-time
storyId?string

Identifier of the story minted from this pitch on approval, when one exists

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
Example Request
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/pitches/string/dismiss'
Example Response
{  "id": "string",  "orgId": "string",  "newsdeskId": "string",  "eventClusterId": "string",  "title": "string",  "summary": "string",  "whyItMatters": "string",  "score": 0,  "contentLanguage": "string",  "eventDate": "2019-08-24",  "status": "draft",  "creationSource": "auto",  "statusChangedAt": "2019-08-24T14:15:22Z",  "statusChangedBy": "string",  "createdBy": "string",  "manualRequestId": "string",  "createdAt": "2019-08-24T14:15:22Z",  "storyId": "string"}

Reopen a dismissed pitch

POST
/api/tenant/v1/pitches/{id}/reopen

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Response Body

Pitch reopened: back in the review queue as new

application/json
  1. response
id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
orgId*string

Owning organization identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
newsdeskId*string

Newsdesk identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
eventClusterId*string

The event cluster the pitch was generated from; null for a pitch a person created, which has none

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
title*string

Generated pitch headline

summary*string

Generated pitch summary

whyItMatters*string

Generated rationale for why this pitch fits the newsdesk's beat

score*integer

Relevance score for the newsdesk, 0-100 inclusive

Range0 <= value <= 100
contentLanguage*string

Language the pitch content was generated in

eventDate?string

ISO 8601 date (YYYY-MM-DD) of the underlying event, when determinable

Formatdate
status*string

Editorial review status

Value in"draft""new""approved""dismissed"
creationSource*string

What produced this pitch: auto for the engine, from an event cluster; manual for a person

Value in"auto""manual"
statusChangedAt?string

ISO 8601 timestamp of the most recent status change

Formatdate-time
statusChangedBy?string

User who made the most recent status change

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
createdBy?string

User who created this pitch; present only on a pitch a person created, and absent once that user is deleted

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
manualRequestId?string

The manual pitch request this pitch was built from, which its creator can read to edit the seeds; absent on an engine pitch

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
createdAt*string

ISO 8601 creation timestamp

Formatdate-time
storyId?string

Identifier of the story minted from this pitch on approval, when one exists

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
Example Request
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/pitches/string/reopen'
Example Response
{  "id": "string",  "orgId": "string",  "newsdeskId": "string",  "eventClusterId": "string",  "title": "string",  "summary": "string",  "whyItMatters": "string",  "score": 0,  "contentLanguage": "string",  "eventDate": "2019-08-24",  "status": "draft",  "creationSource": "auto",  "statusChangedAt": "2019-08-24T14:15:22Z",  "statusChangedBy": "string",  "createdBy": "string",  "manualRequestId": "string",  "createdAt": "2019-08-24T14:15:22Z",  "storyId": "string"}
POST
/api/tenant/v1/pitches/{id}/submit

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Response Body

Draft submitted: in the review queue as new

application/json
  1. response
id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
orgId*string

Owning organization identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
newsdeskId*string

Newsdesk identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
eventClusterId*string

The event cluster the pitch was generated from; null for a pitch a person created, which has none

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
title*string

Generated pitch headline

summary*string

Generated pitch summary

whyItMatters*string

Generated rationale for why this pitch fits the newsdesk's beat

score*integer

Relevance score for the newsdesk, 0-100 inclusive

Range0 <= value <= 100
contentLanguage*string

Language the pitch content was generated in

eventDate?string

ISO 8601 date (YYYY-MM-DD) of the underlying event, when determinable

Formatdate
status*string

Editorial review status

Value in"draft""new""approved""dismissed"
creationSource*string

What produced this pitch: auto for the engine, from an event cluster; manual for a person

Value in"auto""manual"
statusChangedAt?string

ISO 8601 timestamp of the most recent status change

Formatdate-time
statusChangedBy?string

User who made the most recent status change

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
createdBy?string

User who created this pitch; present only on a pitch a person created, and absent once that user is deleted

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
manualRequestId?string

The manual pitch request this pitch was built from, which its creator can read to edit the seeds; absent on an engine pitch

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
createdAt*string

ISO 8601 creation timestamp

Formatdate-time
storyId?string

Identifier of the story minted from this pitch on approval, when one exists

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
Example Request
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/pitches/string/submit'
Example Response
{  "id": "string",  "orgId": "string",  "newsdeskId": "string",  "eventClusterId": "string",  "title": "string",  "summary": "string",  "whyItMatters": "string",  "score": 0,  "contentLanguage": "string",  "eventDate": "2019-08-24",  "status": "draft",  "creationSource": "auto",  "statusChangedAt": "2019-08-24T14:15:22Z",  "statusChangedBy": "string",  "createdBy": "string",  "manualRequestId": "string",  "createdAt": "2019-08-24T14:15:22Z",  "storyId": "string"}
POST
/api/tenant/v1/pitches/{id}/seeds/{articleId}/media

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
articleId*string

Article identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Request Body

application/json
  1. body
useAsMedia*boolean

Whether the image seed becomes the story's media once the pitch is approved

Response Body

The image seed's media toggle, as set

application/json
  1. response
articleId*string

Article identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$
useAsMedia*boolean
Example Request
curl -X POST 'https://api.nuvelics.com/api/tenant/v1/pitches/string/seeds/string/media' \  -H 'Content-Type: application/json' \  -d '{  "useAsMedia": true}'
Example Response
{  "articleId": "string",  "useAsMedia": true}
GET
/api/tenant/v1/pitches/{id}/media

Authorization

headerx-api-key<token>

A service key (nvs_...) in the x-api-key header. A service key belongs to one organization: an X-Org-Id header is optional and, when sent, must name that organization. This header also accepts any credential the bearer scheme does, and when a request sends both headers, this one is used.

Path Parameters

id*string

Pitch identifier

Match^[0-7][0-9A-HJKMNP-TV-Z]{25}$

Response Body

The media of a manual pitch's seed articles that came from a publisher, chosen as an event cluster's media is: deduplicated by URL, ranked by area and capped at 48. A recalled seed's media is left out, and so is the journalist's own uploaded image, which the pitch lists among its seeds. Empty for an engine pitch, whose media is its event cluster's. An item's credit is the media's own only

application/json
  1. response
items*array<>
Example Request
curl -X GET 'https://api.nuvelics.com/api/tenant/v1/pitches/string/media'
Example Response
{  "items": [    {      "mediaType": "image",      "assetUrl": "string",      "posterUrl": "string",      "caption": "string",      "width": 0,      "height": 0,      "durationMs": 0,      "credit": "string",      "usageTerms": [        "string"      ],      "sourceArticleId": "string",      "assetId": "string",      "photoVendor": true    }  ]}

Report a problem with this page

On this page