---
title: "Read a public profile"
method: POST
path: "/public/profile"
tags: ["public"]
---

# Read a public profile

`POST /public/profile`

Read a public professional profile anonymously through the proxy and save it as an enriched contact. Runs on public data only, so no connected account is needed and none of an account's action budget is spent. This is the default way to look up or enrich a person.

## Request body

- object
  - `profileUrl` string — Full public profile URL. Provide this or slug.
  - `slug` string — Profile vanity slug. Provide this or profileUrl.
  - `country` string — ISO alpha-2 country code for the proxy exit.
  - `save` boolean — When true, the fetched profile is saved to your contacts.

## Response `200`

Public profile data

- object
  - `source` 'public', required
  - `completeness` string, required — How complete the fetched public profile is.
  - `saved` boolean, required — Whether the profile was saved to your contacts.
  - `profile` object, required — The public profile data.
  - `creditsUsed` integer — Credits consumed by this call.
  - `retryAfter` integer — Seconds to wait before the next call of the same type.

## Other responses

- `400` — The server cannot or will not process the request due to something that is perceived to be a client error.
- `401` — Although HTTP specifies "unauthorized", this response means "unauthenticated". Authenticate to continue. NOTE: 401 is also returned with code "linkedin_not_connected" when the caller IS authenticated but has no connected LinkedIn account — connect LinkedIn (not re-authenticate) to continue.
- `403` — The client does not have access rights to the content.
- `404` — The server cannot find the requested resource.
- `409` — The request conflicts with the current state of the server.
- `410` — The requested content has been permanently deleted from the server.
- `422` — The request was well-formed but was unable to be followed due to semantic errors.
- `429` — Rate limit exceeded. Read error.retryAfter for the wait time in seconds.
- `500` — The server encountered a situation it does not know how to handle.
- `502` — LinkedIn returned a server error or the proxy connection failed. Retry after a few seconds.
- `503` — Proxy capacity temporarily exceeded. Retry after a few seconds.

---

[API](https://skmtc.net/berea/apis/bereach-api.md) · [All operations](https://skmtc.net/berea/apis/bereach-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/berea/bereach-api/revisions/3caf12036b26/schema)
