> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.taigabilling.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.taigabilling.com/_mcp/server.

# Upload provider attachment

PUT https://api.taigabilling.com/api/organization-providers/v3/{organization_provider_id}/attachments
Content-Type: multipart/form-data

Uploads a file to the provider. Accepted file types are W9, PECOS_RECORD, and BANK_LETTER_OR_VOIDED_CHECK.
Only one file per type is allowed per provider — uploading when a file of the same type already exists returns a 409.

Reference: https://docs.taigabilling.com/api-reference/organization-providers-v-3/organization-providers-v-3-upload-attachment

## Authentication

- `Authorization` header (bearer token, required) — Send your Taiga API key as a Bearer token. Create and manage keys in the Taiga developer portal.

## Servers

- `https://api.taigabilling.com` (Production, default)
- `https://api-staging.taigabilling.com` (Staging)

## Request

### Path parameters

- `organization_provider_id` (string, required)

### Body (multipart/form-data)

This endpoint expects a multipart form containing an optional file.

- `attachment_file` (file, optional)
- `file_type` (enum, optional)

## Response

### 200

- `string`

## Examples

**Request**

```json
{
  "attachment_file": "<file: <file1>>"
}
```

**Response**

```json
"string"
```

**SDK Code**

```python
import requests

url = "https://api.taigabilling.com/api/organization-providers/v3/organization_provider_id/attachments"

files = { "attachment_file": "open('<file1>', 'rb')" }
payload = { "file_type":  }
headers = {"Authorization": "Bearer <token>"}

response = requests.put(url, data=payload, files=files, headers=headers)

print(response.json())
```