Press contacts
Manage the contact cards displayed on a newsroom and select the right people for each language.
Press contacts are the spokespeople readers can contact about a newsroom or story. They belong to a newsroom and can appear on its homepage or in story contact cards. They are separate from CRM contacts: creating a press contact does not add a recipient to an email campaign.
Choose the newsroom and access
Inspect the destination newsroom and configured languages, then use its UUID in the requests below. Load PREZLY_API_TOKEN as shown in Your first API request.
Personal tokens need sites:read to list/search/read press contacts and sites:write to create/update/delete them. The owner also needs the corresponding newsroom-data permissions. These are site permissions, rather than CRM contacts:* scopes.
Read the existing cards
Replace YOUR_NEWSROOM_UUID:
curl --fail-with-body --silent --show-error 'https://api.prezly.com/v2/newsrooms/YOUR_NEWSROOM_UUID/contacts' \
--header "Authorization: Bearer $PREZLY_API_TOKEN" \
--header 'Accept: application/json'The response contains contacts, in the newsroom's configured contact order. This is a configuration collection, with no pagination envelope. Choose a returned uuid; the numeric id is retained for older integrations.
Each card includes its public details, is_featured, display_locales, and a site reference. An empty configured locale selection means all newsroom languages; the response expands that selection into locale objects. On a single-language newsroom, it returns the default locale. Do not assume an all-language card will have an empty array in the response.
Select cards for a page
For a featured homepage card in a particular locale, use Search Press Contacts. Save this as press-contact-search.json, replacing en with the configured locale code:
{
"query": {
"is_featured": { "$eq": true },
"locale.code": { "$any": ["en"] }
}
}curl --fail-with-body --silent --show-error --request POST 'https://api.prezly.com/v2/newsrooms/YOUR_NEWSROOM_UUID/contacts/search' \
--header "Authorization: Bearer $PREZLY_API_TOKEN" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-binary @press-contact-search.jsonThe response also uses contacts. The locale filter includes cards configured for every language as well as cards matching the selected locale. is_featured: false controls presentation; it does not make a contact private. A custom website must deliberately apply its homepage selection and render only the fields intended for readers.
Create a card with deliberate visibility
Save this illustrative card as press-contact.json, replacing the public identity/address and locale before sending:
{
"name": "Alex Rivera",
"email": "press@example.test",
"company": "Acme",
"description": "Press enquiries",
"is_featured": false,
"display_locales": ["en"]
}curl --fail-with-body --silent --show-error --request POST 'https://api.prezly.com/v2/newsrooms/YOUR_NEWSROOM_UUID/contacts' \
--header "Authorization: Bearer $PREZLY_API_TOKEN" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data-binary @press-contact.jsonThe response is 201 Created with contact. Store contact.uuid. Set is_featured explicitly: creation otherwise defaults it to true. The card above is available for deliberate use without being selected as a featured homepage contact.
Write display_locales as an array of locale codes, rather than copying the response's locale objects. Use [] when the intended selection is all languages. An optional avatar_image uses the uploaded-image representation from Images and files; upload the asset before referencing it.
Update and review the result
Replace YOUR_PRESS_CONTACT_UUID with the selected card's UUID and read it before changing it:
curl --fail-with-body --silent --show-error 'https://api.prezly.com/v2/newsrooms/YOUR_NEWSROOM_UUID/contacts/YOUR_PRESS_CONTACT_UUID' \
--header "Authorization: Bearer $PREZLY_API_TOKEN" \
--header 'Accept: application/json'A partial update can change just the description:
curl --fail-with-body --silent --show-error --request PATCH 'https://api.prezly.com/v2/newsrooms/YOUR_NEWSROOM_UUID/contacts/YOUR_PRESS_CONTACT_UUID' \
--header "Authorization: Bearer $PREZLY_API_TOKEN" \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--data '{"description":"Media enquiries about the new studio"}'Both responses contain contact. Omitted fields are preserved; a supplied display_locales array replaces the full selection. Review the resulting card on the homepage and any story where it appears. Refresh your own cached presentation when your integration stores a copy.
Get Press Contact → · Update →
Remove a card after checking story references
curl --fail-with-body --silent --show-error --request DELETE 'https://api.prezly.com/v2/newsrooms/YOUR_NEWSROOM_UUID/contacts/YOUR_PRESS_CONTACT_UUID' \
--header "Authorization: Bearer $PREZLY_API_TOKEN" \
--header 'Accept: application/json'Successful deletion returns 204 No Content; do not parse it as JSON. A card used in a story is protected by 409 Conflict. Review those references before removing it.
The force parameter overrides that protection and removes the contact from affected stories. It is enabled by presence, so ?force=false still forces deletion. Leave it out for an ordinary delete; only use it when that broader change is intended.
If Create has an unknown outcome, inspect the existing cards before creating another. For other failures, follow Handling errors.