---
title: "Report a run of a step that was cut off, and ask what to do with the step"
method: POST
path: "/linkedin/agent/actions/{action_id}/attempts/"
tags: ["linkedin"]
---

# Report a run of a step that was cut off, and ask what to do with the step

`POST /linkedin/agent/actions/{action_id}/attempts/`

## Request

- Base URL: `https://api.getoneprofile.ai` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getoneprofile.ai/linkedin/agent/actions/{action_id}/attempts/`
- Auth: API key in header `X-API-Key`

Sent instead of a result by a build that reports attempts (attempts:v1) when a run of the step it holds was cut off without an error from LinkedIn: a person closed the working tab, the extension restarted, a page never loaded, the tab froze, the identity page never answered, LinkedIn never answered a press, or the server could not be asked. The server records the attempt, counts it against the step unless a person closed the tab or the server could not be asked, and answers with what to do: retry (run it again as next_run_id), look_first (run it again, looking on LinkedIn before any press), stop (it was cut off too often and is settled failed; post nothing), lost (the claim is not this browser's any more; post nothing) or not_retryable (not an interruption, or a press LinkedIn never answered or a page that never drew at the cap; post the result). When the step goes on, the press fence moves to the next run and the claim's lease is extended. The same report again (the same stopped run) gets the same answer and changes nothing.

## Path parameters

- `action_id` string, uuid, required

## Request body

- AgentAttemptSchema: A run of the held step cut off without an error from LinkedIn, reported instead of a result. The same report again (the same ``stopped_run_id``) gets the same answer and changes nothing, so a report that got no answer is sent again with the same ids until it does.
  - `cause` 'person_closed' | 'worker_restarted' | 'page_not_loaded' | 'tab_frozen' | 'identity_no_answer' | 'no_response' | 'outage', required: Why the run stopped: person_closed (a person closed the working tab), worker_restarted, page_not_loaded, tab_frozen, identity_no_answer, no_response (LinkedIn never answered a press, or did not say whether it acted), or outage (the server could not be asked). Every cause but person_closed and outage counts against the step. A no_response run, or a page_unsettled one, that reaches the cap is answered not_retryable, and its own failure is posted.
  - `claimed_at` string, date-time, required: The step's claim, exactly as the claim handed it out.
  - `duration_ms` integer, nullable: How long the stopped run lasted.
  - `next_run_id` string, required: The run the step goes on in, named by this browser before it reports.
  - `press_granted` boolean, nullable: Whether a press was let through in the stopped run: false when no grant reached it, so it pressed nothing, and a grant first given to it is taken back; null when the browser cannot say.
  - `site` string, nullable: Where the run stopped, a failure_sites.json name; null for an outage.
  - `stopped_run_id` string, required: The run that stopped: the one the press fence may name.

## Response `200`

Successful Response

- AgentAttemptAnswerSchema: What the browser does with a step after one of its runs was cut off.
  - `attempt` integer, required: Which attempt this was.
  - `attempts_left` integer, required: How many counted attempts remain before the step stops.
  - `claim_expires_at` string, date-time, nullable, required: The claim's lease, extended, read against server_now; null unless it goes on.
  - `next_run_id` string, nullable, required: The run that may press now; null unless the step goes on.
  - `server_now` string, date-time, required: The server's clock when it answered.
  - `verdict` 'retry' | 'look_first' | 'stop' | 'lost' | 'not_retryable', required: The server's answer to a browser that lost a run of a step and wants to start it again. ``RETRY``: start it again. ``LOOK_FIRST``: start it again, looking on LinkedIn before pressing anything, because an earlier run was let press. ``STOP``: the step was interrupted too often and the server settled it failed. ``LOST``: the claim is no longer this browser's. ``NOT_RETRYABLE``: what stopped it is not an interruption, or a press LinkedIn never answered or a page that never drew reached the cap; post the result instead.
  - `verification` AgentAttemptVerificationSchema, required: What the next run looks for on LinkedIn before it presses anything.
    - `commit_granted_at` string, date-time, nullable, required: When a press was first granted; null when none was.
    - `mode` 'verify_then_act' | 'verify_only', required: What a browser handed a step that may already have touched LinkedIn does first. Both look on LinkedIn before anything else; a change already there is the step done. ``verify_then_act`` then finishes a step found not done. ``verify_only`` never presses: its sequence or contact was paused or stopped since it first ran, and a look only records the truth.

## Other responses

- `401`: The agent token is invalid, revoked, or expired.
- `403`: Forbidden
- `404`: No such action on the account this token is bound to.
- `422`: Invalid request made to the API.
- `500`: Internal server error.
- `502`: Bad gateway error.
- `503`: Service unavailable.

---

[API](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile.md) · [All operations](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/llms.txt) · [OpenAPI document](https://skmtc.dev/getoneprofile/apis/api-reference-oneprofile/revisions/4a6bd71e3f02?raw)
