---
title: "Complete an owner-bound Xero authorization"
method: POST
path: "/onboarding/v3/books/xero/callback"
tags: ["Onboarding"]
---

# Complete an owner-bound Xero authorization

`POST /onboarding/v3/books/xero/callback`

## Request

- Base URL: `https://api.medianfi.com/api/v1`
- URL: `https://api.medianfi.com/api/v1/onboarding/v3/books/xero/callback`
- Auth: HTTP bearer

Consumes the exact one-use authorization and accepts exactly one newly authorized organisation whose tenant ID is on the server allowlist. Caller-selected tenant IDs are never accepted.

## Headers

- `X-Median-App-Surface` 'qa'

## Request body

- OnboardingV3XeroCallbackRequest
  - `code` string, required
  - `state` string, required
  - `redirectUri` string, uri, required

## Response `201`

Durable Existing Books migration job

- OnboardingV3BooksMigrationApiResponse
  - `success` true, required
  - `data` OnboardingV3BooksMigration, required
    - `migrationJobId` string, uuid, required

## Other responses

- `400`: Onboarding request body is not valid JSON
- `401`: Authentication required
- `403`: Insufficient permissions or not a company member
- `404`: Resource not found
- `409`: Request conflicts with the durable onboarding state
- `413`: Onboarding setup request exceeds the 32768-byte route limit
- `415`: Onboarding request charset or content encoding is unsupported
- `422`: Validation error
- `503`: Required sandbox provider configuration or service is unavailable

---

[API](https://skmtc.dev/medianfi/apis/median-api.md) · [All operations](https://skmtc.dev/medianfi/apis/median-api/llms.txt) · [OpenAPI document](https://skmtc.dev/medianfi/apis/median-api/revisions/20090ea32b0d?raw)
