# Add an offer to a deal

Two asks on one path, and the body says which: send `{offer: …}` and the ONE offer the desk wrote is created and presented in the same transaction; send a `riskProfile` or a `score` (0-100, one or the other, never both) and the tier ladder is generated from it. Either way the answer is the offers rows this call created, so a client reads one shape. An authored offer needs a positive funded amount, and a workspace that deleted its `presented` status has deleted the authored path with it. Deals page only.

Access class: `def:read`.

## Endpoint

`POST /v1/definitions/{key}/rows/{rowId}/offers`

## Parameters

| Name | In | Type | Required |
| --- | --- | --- | --- |
| key | path | string | Yes |
| rowId | path | string | Yes |

## Request body

Content type: `application/json`.

```json
{
  "body": {
    "lenderName": "string",
    "offer": {
      "apr": 1.5,
      "brokerFee": 1.5,
      "brokerFeePct": 1.5,
      "buyRate": 1.5,
      "buyoutAmount": 1.5,
      "commissionAmount": 1.5,
      "commissionPct": 1.5,
      "conditions": [
        "string"
      ],
      "externalNotes": "string",
      "factorRate": 1.5,
      "fundedAmount": 1.5,
      "interestRate": 1.5,
      "internalNotes": "string",
      "lenderName": "string",
      "name": "string",
      "originationFee": 1.5,
      "originationPct": 1.5,
      "otherFees": 1.5,
      "paymentAmount": 1.5,
      "paymentFrequency": "string",
      "paymentMethod": "string",
      "productType": "string",
      "repaymentStructure": "string",
      "submissionShareId": "",
      "termDays": 1,
      "termMonths": 1,
      "totalPayback": 1.5,
      "totalPayments": 1
    },
    "productType": "string",
    "riskProfile": "string",
    "score": 1.5
  },
  "params": {
    ":key": "string",
    ":rowId": ""
  },
  "query": {}
}
```

## Responses

### 201

the action's answer

Content type: `application/json`.

```json
{
  "data": [
    {
      "archived_at": "string",
      "assignees": {},
      "cells": {},
      "createdBy": "string",
      "display": {},
      "externalId": "",
      "groupId": "",
      "id": "",
      "position": 1,
      "source": "string"
    }
  ]
}
```

### default

a refusal: `{"error": "<what a person needs to read>"}`. 401 no credential, 402 the plan does not include this, 403 the seat does not, 404 the thing does not exist or is not yours to see.

Content type: `application/json`.

```json
{
  "error": "string"
}
```
