# Exchange authorization code for access token Source: https://developer.bitwage.com/api-reference/authorization/exchange-authorization-code-for-access-token /api-reference/openapi.yaml post /oauth2/token Exchange the authorization code received from `/authorize` for an access token. The access token is used in subsequent API requests. # Request authorization code Source: https://developer.bitwage.com/api-reference/authorization/request-authorization-code /api-reference/openapi.yaml get /authorize OAuth 2.0 authorization code step. Called after a user grants access in the Bitwage client. Returns a redirect URI containing the authorization code. # Create company Source: https://developer.bitwage.com/api-reference/companies/create-company /api-reference/openapi.yaml post /api/companies Create a new company via the Partner API. Supports idempotency. # Create UBO admin Source: https://developer.bitwage.com/api-reference/companies/create-ubo-admin /api-reference/openapi.yaml post /api/companies/{company_id}/ubo Create a UBO (Ultimate Beneficial Owner) admin for a partner-created company. # Get company details Source: https://developer.bitwage.com/api-reference/companies/get-company-details /api-reference/openapi.yaml get /api/company Get company profile details. # Get KYB status Source: https://developer.bitwage.com/api-reference/companies/get-kyb-status /api-reference/openapi.yaml get /api/companies/{company_id}/kyb Get the company's KYB verification status and any outstanding requirements. # Submit company KYB Source: https://developer.bitwage.com/api-reference/companies/submit-company-kyb /api-reference/openapi.yaml post /api/companies/{company_id}/kyb Submit a partner company KYB profile to the verification provider. # Submit UBO KYC Source: https://developer.bitwage.com/api-reference/companies/submit-ubo-kyc /api-reference/openapi.yaml post /api/companies/{company_id}/ubo/kyc Submit the UBO admin's KYC verification for a partner-created company. # Upload company documents Source: https://developer.bitwage.com/api-reference/companies/upload-company-documents /api-reference/openapi.yaml post /api/companies/{company_id}/documents Upload documents for UBO admin KYC or company KYB verification. The `target_type` field determines the document destination and required fields. # Create payroll Source: https://developer.bitwage.com/api-reference/company-payroll/create-payroll /api-reference/openapi.yaml post /api/company/payroll/create Create a payroll to pay company workers. When using API key authentication, an `Idempotency-Key` header is required. # Create vendor payroll Source: https://developer.bitwage.com/api-reference/company-payroll/create-vendor-payroll /api-reference/openapi.yaml post /api/vendor/payroll Create a vendor payroll from previously created vendor quote IDs. An `invoice_upload_id` is required for each vendor payment whose quoted USD subtotal is greater than or equal to 15000. This endpoint supports API key authentication only. # Create vendor payroll document upload Source: https://developer.bitwage.com/api-reference/company-payroll/create-vendor-payroll-document-upload /api-reference/openapi.yaml post /api/vendor/payroll/documents Create a presigned upload session for a vendor payment invoice. Upload the document to the returned `upload_url`, then pass the returned `invoice_upload_id` on the matching vendor payment when creating the vendor payroll. This endpoint supports API key authentication only. # Create vendor payroll quotes Source: https://developer.bitwage.com/api-reference/company-payroll/create-vendor-payroll-quotes /api-reference/openapi.yaml post /api/vendor/payroll/quotes Create FX quotes for a vendor payroll funded from a company wallet. This endpoint supports API key authentication only. # Refresh payroll quotes Source: https://developer.bitwage.com/api-reference/company-payroll/refresh-payroll-quotes /api-reference/openapi.yaml post /api/company/payroll/quote/refresh Refresh expired crypto funding quotes for a payroll. # Create recipient Source: https://developer.bitwage.com/api-reference/company-recipients/create-recipient /api-reference/openapi.yaml post /api/company/{company_id}/recipients/create Create and link a no-login company recipient (worker). Provide a `worker` payload with the recipient's personal details. # Create recipient distribution Source: https://developer.bitwage.com/api-reference/company-recipients/create-recipient-distribution /api-reference/openapi.yaml post /api/company/{company_id}/recipients/{recipient_id}/distribution Create a distribution (payment destination) for a company recipient. # Delete recipient distribution Source: https://developer.bitwage.com/api-reference/company-recipients/delete-recipient-distribution /api-reference/openapi.yaml delete /api/company/{company_id}/recipients/{recipient_id}/distribution Delete a distribution for a company recipient. The allocation must be 0 before deletion. # List company recipients Source: https://developer.bitwage.com/api-reference/company-recipients/list-company-recipients /api-reference/openapi.yaml get /api/company/recipients Get company recipients (workers and vendors) with filtering and pagination. # Set recipient distribution allocations Source: https://developer.bitwage.com/api-reference/company-recipients/set-recipient-distribution-allocations /api-reference/openapi.yaml patch /api/company/{company_id}/recipients/{recipient_id}/distribution/allocations Set allocation percentages for a company recipient's distributions. Total must equal 100. Maximum 3 distributions. # Invite workers Source: https://developer.bitwage.com/api-reference/company-workers/invite-workers /api-reference/openapi.yaml post /api/company/workers/invite Send invitations to workers to join the company. # List company workers Source: https://developer.bitwage.com/api-reference/company-workers/list-company-workers /api-reference/openapi.yaml get /api/company/workers Get a paginated list of company workers. # List worker invitations Source: https://developer.bitwage.com/api-reference/company-workers/list-worker-invitations /api-reference/openapi.yaml get /api/company/worker/invitations Get all pending worker invitations for a company. # Resend worker invitation Source: https://developer.bitwage.com/api-reference/company-workers/resend-worker-invitation /api-reference/openapi.yaml post /api/company/worker/invite/resend Resend an invitation to a company worker. Maximum 3 resends allowed. # Create merchant claim Source: https://developer.bitwage.com/api-reference/merchant/create-merchant-claim /api-reference/openapi.yaml post /api/merchant/claim/create Create a merchant claim and a claim-scoped crypto quote for BTC checkout. # Get merchant claim status Source: https://developer.bitwage.com/api-reference/merchant/get-merchant-claim-status /api-reference/openapi.yaml get /api/merchant/claim/status Get the current BTC checkout status for a merchant claim. # Refresh merchant claim quote Source: https://developer.bitwage.com/api-reference/merchant/refresh-merchant-claim-quote /api-reference/openapi.yaml post /api/merchant/claim/quote/refresh Refresh an expired quote for an existing merchant claim. # Create distribution Source: https://developer.bitwage.com/api-reference/user-distributions/create-distribution /api-reference/openapi.yaml post /api/user/distribution Create a new payment distribution destination for a user. # Delete distribution Source: https://developer.bitwage.com/api-reference/user-distributions/delete-distribution /api-reference/openapi.yaml delete /api/user/distribution Delete a user's distribution. The distribution's allocation must be 0 before deletion. # Get distribution details Source: https://developer.bitwage.com/api-reference/user-distributions/get-distribution-details /api-reference/openapi.yaml get /api/user/distribution/detail Get details of a specific distribution for a user. # Get distribution fields Source: https://developer.bitwage.com/api-reference/user-distributions/get-distribution-fields /api-reference/openapi.yaml get /api/user/distribution/fields Get the required fields for creating a fiat distribution based on the user's country and currency. # List distributions Source: https://developer.bitwage.com/api-reference/user-distributions/list-distributions /api-reference/openapi.yaml get /api/user/distribution/list List all distributions for a user. # Update distribution allocations Source: https://developer.bitwage.com/api-reference/user-distributions/update-distribution-allocations /api-reference/openapi.yaml patch /api/user/distribution/allocations Update allocation percentages across a user's distributions. Total allocation must equal exactly 100. Maximum 3 distributions. Distributions not included in the request will have their allocation set to 0. # Get required document types Source: https://developer.bitwage.com/api-reference/user-documents/get-required-document-types /api-reference/openapi.yaml get /api/user/document/types Get the required KYC document types based on the user's country and payer currency. # List user documents Source: https://developer.bitwage.com/api-reference/user-documents/list-user-documents /api-reference/openapi.yaml get /api/user/document/list List all documents uploaded for a user, including tax ID if available. # Upload user document Source: https://developer.bitwage.com/api-reference/user-documents/upload-user-document /api-reference/openapi.yaml post /api/user/document/upload Upload a KYC document or update tax ID for a user. The request shape depends on the `doc_type`: - For `tax_id`: provide `tax_id` and `tax_id_type` fields. - For image documents: provide `category`, `issuing_country`, and `base64_image`. # Create funding account Source: https://developer.bitwage.com/api-reference/user-funding/create-funding-account /api-reference/openapi.yaml post /api/user/funding/account Create a funding (virtual bank) account for a user. Supported for EUR payers only. The user must be KYC approved and have at least one distribution. # Get funding account details Source: https://developer.bitwage.com/api-reference/user-funding/get-funding-account-details /api-reference/openapi.yaml get /api/user/funding/account Get bank account details for a user's funding account based on payer currency. # Create payer Source: https://developer.bitwage.com/api-reference/user-payers/create-payer /api-reference/openapi.yaml post /api/user/payer/create Create an external payer (employer or client) for a user. Required fields vary based on `company_type`. `payroll_invoice_currency` must be `EUR`. # Delete payer Source: https://developer.bitwage.com/api-reference/user-payers/delete-payer /api-reference/openapi.yaml post /api/user/payer/delete Soft-delete an external payer for a user. # Get payer details Source: https://developer.bitwage.com/api-reference/user-payers/get-payer-details /api-reference/openapi.yaml get /api/user/payer/detail Get details for a specific external payer associated with a user. # List payers Source: https://developer.bitwage.com/api-reference/user-payers/list-payers /api-reference/openapi.yaml get /api/user/payer/list List all external payers for a user. # Update payer Source: https://developer.bitwage.com/api-reference/user-payers/update-payer /api-reference/openapi.yaml post /api/user/payer/update Update an existing external payer for a user. # Create user Source: https://developer.bitwage.com/api-reference/users/create-user /api-reference/openapi.yaml post /api/user/create Create a new user on behalf of a partner. Currently only `worker` product type is supported. # Get user details Source: https://developer.bitwage.com/api-reference/users/get-user-details /api-reference/openapi.yaml get /api/user/detail Retrieve profile details for a Bitwage user. # Initiate user KYC Source: https://developer.bitwage.com/api-reference/users/initiate-user-kyc /api-reference/openapi.yaml post /api/user/kyc-initiate Initiate KYC verification for a user through the identity verification provider. # Update user Source: https://developer.bitwage.com/api-reference/users/update-user /api-reference/openapi.yaml post /api/user/update Update an existing user's profile data. All fields except `user_id` are optional (partial update). # List wallet transactions Source: https://developer.bitwage.com/api-reference/wallets/list-wallet-transactions /api-reference/openapi.yaml get /api/wallets/transactions List transactions for a wallet by wallet ID. The partner must have access to the company that owns the wallet. # List wallets Source: https://developer.bitwage.com/api-reference/wallets/list-wallets /api-reference/openapi.yaml get /api/wallets List active wallets that can be used to fund payrolls for a partner-provisioned company. Use the returned `id` as the `funding_method` for vendor quote and payroll creation. # Request wallet Source: https://developer.bitwage.com/api-reference/wallets/request-wallet /api-reference/openapi.yaml post /api/wallets/request Request a wallet for a partner-provisioned company. This endpoint supports API key authentication only. # Funding account status update Source: https://developer.bitwage.com/api-reference/webhooks/funding-account-status-update /api-reference/openapi.yaml webhook userFundingAccountStatus Sent when a user's funding account status changes (e.g. approved, rejected). # Payroll created Source: https://developer.bitwage.com/api-reference/webhooks/payroll-created /api-reference/openapi.yaml webhook payrollCreated Sent when a company creates a payroll. # User kyc status update Source: https://developer.bitwage.com/api-reference/webhooks/user-kyc-status-update /api-reference/openapi.yaml webhook userKYCStatusUpdate Sent when a user's KYC verification status changes. # User payment status update Source: https://developer.bitwage.com/api-reference/webhooks/user-payment-status-update /api-reference/openapi.yaml webhook userPaymentStatusUpdate Sent when a user's payment status changes. Merchant claim payments include `data.claim_id`; non-claim payments may set it to `null`. # Authentication Source: https://developer.bitwage.com/guides/authentication Authenticate with the Bitwage Partner API using API keys or OAuth 2.0. Bitwage supports two authentication methods. Choose the one that fits your integration: | Method | Best for | Header format | | --------- | ----------------------------- | -------------------------------------- | | API Key | Server-to-server integrations | `Authorization: Basic ` | | OAuth 2.0 | User-authorized access | `Authorization: Bearer ` | ## API Key authentication API key authentication is the simplest way to get started. It is ideal for server-side integrations where your application acts on behalf of a single business account. ### Get your API key 1. Go to **Settings** > **API** in your Bitwage Business Account. 2. Register a new Authentication App (if you haven't already). 3. Click **Self Auth** beside the "Authorized Authentication Apps" header. 4. Click on your app — your API key is the **Access Token** field. ### Use your API key Include the API key in the `Authorization` header: ```bash theme={null} curl -X GET "https://api.sandbox.bitwage.com/api/company" \ -H "Authorization: Basic YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"company_id": "YOUR_COMPANY_ID"}' ``` For write operations (POST, PATCH, DELETE) with API key auth, include an `Idempotency-Key` header to prevent duplicate processing. See the [Idempotency guide](/guides/idempotency) for details. ## OAuth 2.0 authentication OAuth 2.0 uses the Authorization Code flow. This lets your application act on behalf of a Bitwage user after they grant permission. ### Step 1: Configure your application After creating your Authentication App, note your **Client ID** and **Client Secret** from the app widget under "My Authentication Apps". Keep your Client Secret secure. ### Step 2: Request an authorization code Redirect the user to the Bitwage authorization endpoint: ``` https://app.bitwage.com/authorize?client_id=YOUR_CLIENT_ID&state=YOUR_CSRF_TOKEN ``` After the user authorizes your app, they are redirected to: ``` {redirect_uri}?code={authorization_code}&state={your_csrf_token} ``` ### Step 3: Exchange the code for an access token Exchange the authorization code for an access token: ```bash theme={null} curl -X POST "https://api.sandbox.bitwage.com/oauth2/token" \ -H "Content-Type: application/json" \ -d '{ "code": "AUTHORIZATION_CODE", "client_id": "YOUR_CLIENT_ID", "client_secret": "YOUR_CLIENT_SECRET", "grant_type": "authorization_code" }' ``` The response includes your access token along with the user and company IDs: ```json theme={null} { "access_token": "abc123...", "user_id": "1234567890", "company_id": "9876543210" } ``` ### Step 4: Use the access token Include the access token in subsequent requests: ```bash theme={null} curl -X GET "https://api.sandbox.bitwage.com/api/company" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"company_id": "YOUR_COMPANY_ID"}' ``` ## OAuth scopes When registering your app, select the scopes your integration needs: | Scope | Description | | ----------------------------------- | ------------------------- | | `c_company_detail` | Read company details | | `c_company_worker_list` | List company workers | | `c_company_worker_invitations_list` | List worker invitations | | `c_company_workers_invite` | Invite workers | | `c_company_workers_pay` | Create payroll | | `u_user_create` | Create users | | `u_user_update` | Update users | | `u_user_update_doc` | Upload user documents | | `u_user_detail` | Read user details | | `u_user_document_list` | List user documents | | `u_user_payer_create` | Create payers | | `u_user_payer_update` | Update payers | | `u_user_payer_detail` | Read payer details | | `u_user_payer_list` | List payers | | `u_user_bank_details` | Read bank details | | `u_user_distribution_create` | Create distributions | | `u_user_distribution_update` | Update distributions | | `u_user_distribution_detail` | Read distribution details | | `u_user_distribution_list` | List distributions | | `u_user_kyc_initiate` | Initiate KYC verification | # Idempotency Source: https://developer.bitwage.com/guides/idempotency Prevent duplicate operations with the Idempotency-Key header. Write operations in the Bitwage Partner API support idempotency to prevent duplicate processing caused by network retries or other failures. ## How it works Include an `Idempotency-Key` header with a unique value in your write requests. If you send the same request with the same idempotency key, Bitwage returns the original response without reprocessing the operation. ```bash theme={null} curl -X POST "https://api.sandbox.bitwage.com/api/companies" \ -H "Authorization: Basic YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: unique-request-id-123" \ -d '{ "legal_name": "Acme Corp", "email": "admin@acme.com", ... }' ``` ## When to use it Idempotency keys are recommended for all write operations and **required** for payroll creation (`POST /api/company/payroll/create`) when using API key authentication. Endpoints that support idempotency: * `POST /api/companies` * `POST /api/companies/{company_id}/ubo` * `POST /api/companies/{company_id}/ubo/kyc` * `POST /api/companies/{company_id}/documents` * `POST /api/companies/{company_id}/kyb` * `POST /api/company/{company_id}/recipients/create` * `POST /api/company/{company_id}/recipients/{recipient_id}/distribution` * `POST /api/company/payroll/create` ## Key scoping Idempotency keys are scoped to your partner account and the specific endpoint. The same key used on different endpoints will not conflict. ## Best practices * Use a UUID or similar unique identifier for each key. * Store the idempotency key alongside the request in your system so you can retry with the same key if needed. * Do not reuse keys across different request payloads for the same endpoint. # Private label Source: https://developer.bitwage.com/guides/private-label Integrate the Bitwage Individual product into your application without the Bitwage UI. The Private Label implementation allows you to embed Bitwage's "Individual" product into your application. Your users interact entirely with your UI while Bitwage handles payment processing behind the scenes. ## How it works 1. **Create a user** via the API with the `worker` product type. 2. **Complete KYC** by uploading identity documents through the API. 3. **Set up a payer** representing the employer or client. 4. **Create distributions** specifying how the user receives payments. 5. **Generate a funding account** to get banking details for the payer (EUR payers only via the Partner API). The Private Label flow is handled entirely through the Partner API and supports **EUR payers only**. USD payers and USD funding accounts are not supported. ## KYC requirements For the Bitwage Individual product, completing KYC requires: * An image of the **front and back** of an accepted identity document * A **selfie** of the user with that ID * At least one **payer** created for the user ### Accepted document types The required document types depend on the user's country and the payer currency. Use the [Get required document types](/api-reference/user-documents/get-required-document-types) endpoint to determine what's needed for a specific user. ### Upload flow Call `GET /api/user/document/types` with the `user_id` and `external_company_id` to get the list of required documents. Call `POST /api/user/document/upload` for each required document. For documents that require a backside, upload both `front` and `back` images. If a tax ID is required, call `POST /api/user/document/upload` with `doc_type: "tax_id"` and the `tax_id` and `tax_id_type` fields. Call `POST /api/user/kyc-initiate` to submit the user's information for verification. Monitor the result via the [KYC status webhook](/guides/webhooks#user-kyc-status-update). ## Creating a funding account After KYC is approved, create a funding account so the user can receive payments from their EUR payer. Call `POST /api/user/funding/account` with the `user_id` and `external_company_id`. The payer must use EUR. Call `GET /api/user/funding/account` to retrieve the virtual bank account details (IBAN, etc.) to share with the payer. # Terminology Source: https://developer.bitwage.com/guides/terminology Key concepts and account types in the Bitwage platform. ## Account types ### Bitwage Business A company account that invites users as "Workers" to receive payroll or invoice payments. Requires KYC for the business entity and business admins only. ### Bitwage Individual A user account where the user adds their employers or clients by providing Bitwage's banking details to them. Requires KYC for the user. ### Bitwage Worker A user account created when a user is invited to join a Business account as a "Worker" to receive payroll or send invoices. Does **not** require KYC. ### Bitwage Business Admin A user who manages a Business Account. Can also receive payroll or send invoices to the Business Account. Requires KYC. ## Key concepts ### Distribution A distribution defines how a user receives their payment. It specifies the ratio of different output currencies. For example, a user could set up a distribution of 50% Bitcoin and 50% USD. Users can have up to 3 distributions, and the total allocation across all distributions must equal 100%. ### Payer (External Company) A payer represents an employer or client that sends payments to a Bitwage Individual user. Payers can use USD or EUR on the Bitwage platform. Through the Partner API, payers must use EUR. ### Funding Account A virtual bank account assigned to a user for receiving payments from a specific payer. The account details (account number, routing number, IBAN, etc.) are provided to the payer so they can deposit funds. Through the Partner API, funding accounts can be created for EUR payers only. USD funding accounts are not supported. ### Payroll (Payment Batch) A payroll is a batch of payments created by a Business account to pay one or more workers or vendors. Payrolls progress through these statuses: `pending` → `received` → `released` → `fulfilled` ### KYC / KYB * **KYC** (Know Your Customer): Identity verification for individual users. * **KYB** (Know Your Business): Verification for company entities, including UBO (Ultimate Beneficial Owner) verification. ### Recipient A company recipient is either a worker (contractor/employee) or a vendor linked to a Business account. Recipients can be created with or without requiring a Bitwage login. # Webhooks Source: https://developer.bitwage.com/guides/webhooks Receive real-time notifications when events occur in Bitwage. Bitwage sends webhook events as HTTP POST requests to your configured endpoint when specific events occur. ## Setting up your webhook 1. Go to the **Webhooks** tab in your Bitwage Business Account settings. 2. [Create and manage webhooks](https://app.bitwage.com/business/settings-page/webhook). 3. Configure your endpoint URL and note the **signing secret**. ## Webhook events | Event | Description | | ----------------------------- | ----------------------------------------- | | `payroll.created` | A company created a payroll. | | `user.create_user` | A new user was created. | | `user.payment_status_update` | A user's payment status changed. | | `user.kyc_status_update` | A user's KYC verification status changed. | | `user.funding_account_status` | A user's funding account status changed. | ## Webhook format All webhooks are sent as POST requests with a JSON body: ```json theme={null} { "data": { ... }, "event": "event_name" } ``` ### User KYC status update Sent when a user's KYC verification status changes. ```json theme={null} { "event": "user.kyc_status_update", "data": { "user_id": "1234567890", "kyc_verification_status": "approved" } } ``` ### User payment status update Sent when a user's payment status changes. Includes the full payment object with allocation outputs. For merchant claim payments, `data.claim_id` contains the claim ID. For non-claim payments, this field can be `null`. ```json theme={null} { "event": "user.payment_status_update", "data": { "subpayroll_id": "9876543210", "claim_id": "claim_1234567890", "user_id": "1234567890", "company_id": "company_1234567890", "status": "released", "payment": { "subpayroll_id": "9876543210", "received": true, "released": true, "fulfilled": false, "outputs": [ { "input_currency": "USD", "output_currency": "BTC", "volume_input_in_input_currency": 500.00, "volume_output_in_output_currency": 0.005, "fees": 2.50, "tx_hash": "abc123..." } ] } } } ``` Payroll status webhook payloads do not include a top-level `claim_id`. For claim-linked payrolls, the related claim appears as `invoice_id` on each payment item and in the payroll-level `invoice_ids` list. ## Validating webhook signatures It is strongly recommended to verify webhook signatures in production. Webhooks include an `x-bitwage-signature` HTTP header containing a SHA256 HMAC signature of the payload. ### Verification steps 1. Get the raw request body as a UTF-8 string. 2. Compute the HMAC-SHA256 using your signing secret. 3. Compare the computed signature with the `x-bitwage-signature` header. ### Python example ```python theme={null} import hmac import hashlib import json from decimal import Decimal from datetime import datetime, date def default(obj): if isinstance(obj, Decimal): return str(obj) if isinstance(obj, (datetime, date)): return obj.isoformat() signing_secret = "whsec_..." # from your webhook endpoint in the app signature_header = request.headers.get("BITWAGE_SIGNATURE") content = request.get_json(silent=True) bodystr = json.dumps( json.loads(content), cls=json.JSONEncoder, ensure_ascii=False, default=default, ) message = endpoint_url + bodystr expected_sig = hmac.new( signing_secret.encode("utf-8"), message.encode("utf-8"), hashlib.sha256, ).hexdigest() if expected_sig == signature_header: print("SIGNATURE_VERIFIED") ``` ## Best practices * **Return a 200 status** promptly to acknowledge receipt. Process the event asynchronously if needed. * **Handle duplicates** by checking for duplicate event IDs. Bitwage may retry delivery if your endpoint doesn't respond with a 200. * **Verify signatures** to ensure webhooks are genuinely from Bitwage. # Bitwage Partner API Source: https://developer.bitwage.com/index Integrate Bitwage payroll and payment processing into your application. The Bitwage Partner API lets you build payroll and payment solutions on top of Bitwage's infrastructure. With the API you can: * **Create and manage users** with full KYC verification * **Set up payment distributions** across fiat and cryptocurrency * **Create and manage companies** with KYB verification * **Run payroll** for workers and vendors * **Accept crypto payments** via merchant checkout Get up and running with API key or OAuth authentication in minutes. Browse the full API reference with interactive playground. Learn about API key and OAuth 2.0 authentication. Set up real-time event notifications. ## Environments | Environment | API Base URL | App URL | | ----------- | --------------------------------- | --------------------------------- | | Sandbox | `https://api.sandbox.bitwage.com` | `https://app.sandbox.bitwage.com` | | Production | `https://api2.bitwage.com` | `https://app.bitwage.com` | Use the sandbox environment for development and testing before going to production. # Quickstart Source: https://developer.bitwage.com/quickstart Get started with the Bitwage Partner API in minutes. ## Initial setup [Sign up for a Bitwage Business Account](https://app.bitwage.com/business/sign-up) if you don't have one already. In your Business Account, go to **Settings** > **API** tab and register a new Authentication App. * **Redirect URI**: The URL where users are redirected after authorizing your app (used for OAuth). For API key auth, use your company landing page. * **Site URI**: Your main website URL. * **Logo URL**: A URL pointing to your company logo. * **Scopes**: Select the scopes your app needs. Bitwage supports two authentication methods: * **API Key** for server-to-server integrations * **OAuth 2.0** for user-authorized access See the [Authentication guide](/guides/authentication) for details on each. ## Make your first request Once you have your credentials, make a test request to verify your setup: ```bash API Key theme={null} curl -X GET "https://api.sandbox.bitwage.com/api/company" \ -H "Authorization: Basic YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"company_id": "YOUR_COMPANY_ID"}' ``` ```bash OAuth 2.0 theme={null} curl -X GET "https://api.sandbox.bitwage.com/api/company" \ -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \ -H "Content-Type: application/json" \ -d '{"company_id": "YOUR_COMPANY_ID"}' ``` ## Next steps Learn about Bitwage account types and concepts. Integrate Bitwage Individual into your app without Bitwage UI. Set up real-time event notifications. Explore all available endpoints.