> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cadanapay.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Tax Forms

> Retrieve and download tax forms for contractors

export const ApiExample = ({method = "GET", path, params, body, reference, tenantKey}) => {
  const baseUrl = "https://api.cadanapay.com";
  const query = params ? "?" + Object.entries(params).map(([k, v]) => `${k}=${v}`).join("&") : "";
  const url = `${baseUrl}${path}${query}`;
  const isPlatformPath = (/^\/(v1\/)?platform(\/|$)/).test(path || "");
  const includeTenantKey = tenantKey === undefined ? !isPlatformPath : tenantKey;
  let curl = `curl -X ${method} '${url}' \\\n  -H 'Authorization: Bearer YOUR_API_KEY'`;
  if (includeTenantKey) {
    curl += ` \\\n  -H 'X-MultiTenantKey: YOUR_BUSINESS_TENANT_KEY'`;
  }
  if (body) {
    const formatted = JSON.stringify(body, null, 2);
    curl += ` \\\n  -H 'Content-Type: application/json' \\\n  -d '${formatted}'`;
  }
  return <div>
      <CodeBlock language="bash" filename="bash" wrap>
        {curl}
      </CodeBlock>
      {reference && <div style={{
    marginTop: "-0.5rem",
    marginBottom: "1rem"
  }}>
          <a href={reference} style={{
    fontSize: "0.875rem"
  }}>
            Try it in the playground →
          </a>
        </div>}
    </div>;
};

Contractors hired by U.S. businesses are required to complete and sign a tax form as part of their wallet onboarding. The applicable form depends on the contractor's tax residency:

| Form         | When it applies                 |
| :----------- | :------------------------------ |
| **W-9**      | U.S. contractors                |
| **W-8BEN**   | Non-U.S. individual contractors |
| **W-8BEN-E** | Non-U.S. entity contractors     |

Contractors complete and sign their tax form through the Cadana app during wallet onboarding. Once signed, you can retrieve and download the completed forms via the API.

<Note>
  **1099-NEC** forms are generated automatically at tax year-end for U.S. contractors with a completed W-9 who earned at least \$600. They appear alongside other forms in the list endpoint once filed.
</Note>

***

## List Tax Forms

Retrieve all tax forms for a user.

<ApiExample method="GET" path="/v1/users/{userId}/tax-forms" reference="/api-reference/workforce/users/tax-forms" />

**Response:**

```json theme={null}
{
  "data": [
    {
      "name": "W8BEN",
      "formId": "30c6c36b5ae0985c1d715bbf25b878a1349cc99a",
      "createdAt": 1690339130,
      "isComplete": true,
      "isDocumentDownloadable": true
    }
  ]
}
```

| Field                    | Description                                           |
| :----------------------- | :---------------------------------------------------- |
| `name`                   | Form type — `W9`, `W8BEN`, `W8BENE`, or `1099`        |
| `formId`                 | Unique identifier — use this to download the form     |
| `createdAt`              | Unix timestamp when the form was created              |
| `isComplete`             | Whether the form has been fully filled out and signed |
| `isDocumentDownloadable` | Whether a PDF download is available                   |

***

## Download a Tax Form

Get a temporary download link for a specific form.

<ApiExample method="GET" path="/v1/users/{userId}/tax-forms/{formId}/download" reference="/api-reference/workforce/users/tax-form-download" />

**Response:**

```json theme={null}
{
  "fileUrl": "https://cadana.com/file/123",
  "expiresAt": 1690339130
}
```

| Field       | Description                            |
| :---------- | :------------------------------------- |
| `fileUrl`   | Temporary URL to download the form PDF |
| `expiresAt` | Unix timestamp when the link expires   |

<Note>
  Only forms with `isDocumentDownloadable: true` can be downloaded. Check this field before requesting a download link.
</Note>
