# Tackle API Documentation > Documentation for Tackle API ## Guides - [Hello! ๐Ÿ‘‹](https://developers.tackle.io/docs/getting-started.md) - [Get an Access Token](https://developers.tackle.io/docs/getting-an-access-token.md) - [Overview](https://developers.tackle.io/docs/overview.md) - [Test a Webhook](https://developers.tackle.io/docs/test-a-webhook.md) - [Create a Metering Record](https://developers.tackle.io/docs/create-a-metering-record.md) - [Metering FAQs](https://developers.tackle.io/docs/metering-faqs.md) - [SCIM](https://developers.tackle.io/docs/scim.md): Implementation steps to manage your Tackle users via a SCIM API. ## API Reference - [Score domains](https://developers.tackle.io/reference/scoredomains.md): Scores a batch of domains for buyer-signal propensity. - [Search scored domains](https://developers.tackle.io/reference/searchscoreddomains.md): Searches scored domains using filters and pagination. When no filters are supplied, the response contains all scored domains available to the calling account, limited by pagination. Pagination uses `page_number` and `records_per_page`. For large result sets, use `metadata.search_after` from one response as the next request's `search_after` value to continue forward. - [List co-sell opportunities](https://developers.tackle.io/reference/listopportunities.md) - [Create a co-sell opportunity](https://developers.tackle.io/reference/createopportunity.md): Queues a create request against AWS Partner Central. The success response is `202 Accepted` with the Tackle identifier; poll `getOpportunity` to observe the cloud-side outcome. If a `crmId` is supplied and your vendor account enforces a one-opportunity-per-CRM-ID constraint, the request is rejected with `409 Conflict` when an existing co-sell opportunity already maps to the same CRM identifier. Whether this constraint is enforced is configured per vendor; contact your Tackle account team if you need to change the behavior. - [Get a co-sell opportunity](https://developers.tackle.io/reference/getopportunity.md) - [Update a co-sell opportunity](https://developers.tackle.io/reference/updateopportunity.md): Queues a partial update against AWS Partner Central. The exact behavior depends on the value of the `tackle-operation-id` header. - Production cloud operations: `updateOpportunity` (default), `updateDraftOpportunity`, `updateStartEngagementOpportunity`, `startEngagement`, `closeLostOpportunity`, `launchOpportunity`, `updateOpportunityCRMID`. - Test-environment-only: `acceptOpportunity`, `rejectOpportunity`. These simulate AWS-side responses to an incoming engagement invitation/opportunity and are routable only for vendor accounts provisioned for use in a test environment. Production vendor accounts that send one of these operation IDs receive `400 Bad Request` with the message `the requested operation is only supported in test or demo environments.` The success response is `202 Accepted` with an empty body; poll `getOpportunity` or `listOpportunityEvents` to observe the outcome of the queued request. - [List opportunity events](https://developers.tackle.io/reference/listopportunityevents.md) - [List invitation events](https://developers.tackle.io/reference/listinvitationevents.md) - [List co-sell invitations](https://developers.tackle.io/reference/listinvitations.md) - [Create a co-sell invitation (test-environment-only)](https://developers.tackle.io/reference/createinvitation.md): Creates a simulated invitation for exercising invitation workflows in a test environment. This endpoint is only available to vendor accounts provisioned for use in a test environment; production vendor accounts receive `403 Forbidden`. - [Get a co-sell invitation](https://developers.tackle.io/reference/getinvitation.md) - [Update a co-sell invitation](https://developers.tackle.io/reference/updateinvitation.md) - [List co-sell solutions](https://developers.tackle.io/reference/listsolutions.md): Returns the active co-sell solutions registered with AWS Partner Central for the authenticated vendor. For vendor accounts provisioned for use in a test environment, this endpoint returns a fixed three-solution fixture; the `q`, `from`, `pageSize`, and `all` query parameters are **ignored** for these vendors and the response body is the same fixture set regardless of what the client sends. Production vendor accounts receive vendor-specific results that honor every query parameter. - [Create a referral](https://developers.tackle.io/reference/createipreferral.md): Create a co-sell IP referral and submit it to Microsoft Partner Center. The shape of the request and the side effect depend on the optional `tackle-operation-id` header (default `createIPReferral`); see the header description for the full list of sub-operations and when to use each. Returns `202 Accepted` immediately with a Tackle referral ID and a `requestId` you can correlate to subsequent events via `listReferralEvents`. - [Get a referral](https://developers.tackle.io/reference/getreferral.md): Returns the current state of a co-sell referral by Tackle referral ID, including both the Microsoft Partner Center payload (`Referral`) and Tackle-side metadata (`ReferralMetadata` -- CRM linkage, sync health, archived state, related referrals). Returns `404 Not Found` when the referral does not exist for the authenticated vendor. - [Update a referral](https://developers.tackle.io/reference/updateipreferral.md): Update a referral. The behavior of the request depends on the `tackle-operation-id` header. Sub-operations that look up the referral by ID -- in particular `requestSyncFromSalesforce` -- may return `404 Not Found` when the referral does not exist for the authenticated vendor. - [List referral events](https://developers.tackle.io/reference/listreferralevents.md): Returns the recorded history of a referral as a paginated list of events: client-initiated operations (matching the `tackle-operation-id` values), Microsoft Partner Center responses, and CRM-sync history items. Use this to follow up on a `requestId` returned from `createIPReferral` / `updateIPReferral`, audit lifecycle changes, or surface recent activity to end users. Pagination uses an opaque `next` cursor. - [Lookup customer info to determine if they are a US federal customer.](https://developers.tackle.io/reference/customerinfo.md): Looks up the customer in Microsoft Partner Center by company name and reports whether Microsoft has tagged the account as a US federal customer. Use this before creating a referral so you can populate `dealSensitivity` correctly (`USFed` for US federal customers, `None` otherwise). Returns an empty `customerInfo` array when no match is found. - [Lookup customer details in Partner Center.](https://developers.tackle.io/reference/customerlookup.md): Searches Microsoft Partner Center for matching customer accounts by company name plus country, returning managed, unmanaged, and Microsoft-account matches. Use this to populate `customerProfile.ids` and `customerProfile.address` on a subsequent `createIPReferral` call. The full Partner Center lookup payload is accepted so callers can forward the same body the Partner Center UI would, but only `companyName` and `address.country` materially affect matching; other fields are ignored. - [Lookup partner details in Partner Center.](https://developers.tackle.io/reference/partnerlookup.md): Searches Microsoft Partner Center for partner organizations matching the supplied search text. Use the returned `organizationId` when adding a non-Microsoft partner to a referral via `inviteContexts`. Returns an empty `partners` array when no matches are found. - [List co-sell opportunities](https://developers.tackle.io/reference/listopportunities-1.md): Returns a page of opportunities for the authenticated vendor. Supports free-text search, multiple term filters, a `cloudCreated` date range, and sorting. Requires the `cosell:ListOpportunities` permission. - [Create a co-sell opportunity](https://developers.tackle.io/reference/createopportunity-1.md): Creates an opportunity in Tackle and asynchronously dispatches a Google Cloud Channel `opportunities.create` request. The response contains the newly minted Tackle-side `id` and the `requestId` of the dispatched cloud operation; poll `GET /api/opportunities/{id}` or `GET /api/opportunities/{id}/events` to observe the cloud outcome. The `tackle-operation-id` header selects the sub-operation: - `createOpportunity` (default): the `state` value in the request body is honored as-is. Requires `cosell:CreateOpportunity`. If the body's `state` is `SUBMITTED`, `cosell:StartEngagement` is additionally required. - `createDraftOpportunity`: the body's `state` must be `DRAFT`; any other value produces a `400`. Requires `cosell:CreateOpportunity`. `qualificationInfo.legalLanguageAccepted` must be `true`. - [Get an opportunity by ID](https://developers.tackle.io/reference/getopportunity-1.md): Returns the full Tackle-shaped opportunity including `$tkl-metadata` and the latest cached Cloud Channel payload. Requires the `cosell:GetOpportunity` permission. - [Update an opportunity](https://developers.tackle.io/reference/updateopportunity-1.md): Queues a partial update against the Cloud Channel API. The exact behavior depends on `tackle-operation-id`: - `updateOpportunity` (default): requires `cosell:UpdateOpportunity`. If the resulting state transitions the opportunity to `SUBMITTED` (from anything other than `SUBMITTED`), `cosell:StartEngagement` is additionally required and the effective operation is treated as `submitOpportunity`. - `updateDraftOpportunity`: requires `cosell:UpdateOpportunity`. - `submitOpportunity`: forces `state` to `SUBMITTED`; requires `cosell:StartEngagement`. - `closeWonOpportunity` / `closeLostOpportunity`: request a close; requires `cosell:UpdateOpportunity`. - `retryCreateOpportunity`: requeue a create that previously failed; requires `cosell:UpdateOpportunity` and `legalLanguageAccepted: true`. - Test-environment-only: `acceptOpportunity`, `rejectOpportunity`, `closeByAdminOpportunity`, `confirmCloseWonOpportunity`, `confirmCloseLostOpportunity`. These simulate Google-side actions and attribute the resulting history event to Google. The response returns a `requestId` identifying the enqueued cloud operation; poll `GET /api/opportunities/{id}/events` or `GET /api/opportunities/{id}` to observe the outcome. - [List the event history for an opportunity](https://developers.tackle.io/reference/listopportunityhistory.md): Returns a page of history events for an opportunity. Each event has an `operation` field identifying what produced it; the documented operations include the values an integrator can submit on the `tackle-operation-id` header, plus two service-emitted operations (`internalUpdateEvent`, `cloudUpdateEvent`) โ€” see `HistoryOperationId` for the full catalog. Treat the field as a free-form string and fall back to a default branch when displaying an unknown value. Unknown opportunity IDs return `200` with an empty `events` array โ€” this endpoint does not distinguish "no events" from "no such opportunity." This behavior is asymmetric with `GET /api/opportunities/{id}`, which returns `404` for unknown IDs. Requires the `cosell:ListOpportunityEvents` permission. - [Get picklist options for Opportunity fields](https://developers.tackle.io/reference/getpicklistoptions.md): Returns the acceptable values for enumerable `Opportunity` fields, plus reference lists for country, language, and currency codes. Use this endpoint to populate picklist UI controls so that the values an integrator surfaces stay in step with the values the API accepts (which can be a subset of the corresponding schema enum โ€” see the `PicklistOptions` schema for details). The response is an object keyed by field path (for example `.customerInfo.customerDetails.address.regionCode`); each value is the array of acceptable `{ display, value }` options for that field. The response also contains a `.dataMapper.stage` key. This key is a curated subset of the `Stage` enum used by Tackle's Data Mapper feature when importing opportunity data from external systems. It does not correspond to any field on the `Opportunity` payload, and most integrators using this API directly can ignore it. Requires the `cosell:GetPicklistOptions` permission. - [List Private Offers](https://developers.tackle.io/reference/listprivateoffers-1.md): Returns a paginated list of private offers visible to the authenticated principal. Results may be filtered by status, marketplace, offer type, product reference, salesforce opportunity ID, and creation date. **Required RBAC permission:** `offers:ListOffers` - [Create Private Offer](https://developers.tackle.io/reference/createprivateoffer-1.md): Creates a draft private offer. Set `create_in_marketplace: true` in the request body to also push the offer to AWS Marketplace in the same call; otherwise the offer is saved as a Tackle draft that can be pushed later via `POST /private-offers/{id}/marketplace-create`. Set `dry_run: true` to validate the payload without persisting the offer; a successful dry run returns `200 OK` instead of `201 Created`. **Required RBAC permission:** `offers:CreateDraftOffer` - [Get Private Offer](https://developers.tackle.io/reference/getprivateoffer-1.md): Returns a single private offer by its Tackle ID. **Required RBAC permission:** `offers:GetOffer` - [Update Private Offer](https://developers.tackle.io/reference/updateprivateoffer-1.md): Updates an existing draft private offer. The body has the same shape as `POST /private-offers` (`CreatePrivateOfferRequest`). **Required RBAC permission:** `offers:CreateDraftOffer` (the create permission also gates updates -- updating a draft is treated as the same authorization concept as creating one). - [Delete Private Offer](https://developers.tackle.io/reference/deleteprivateoffer.md): Deletes a draft private offer. **Required RBAC permission:** `offers:UpdateOffer` (the update permission also gates deletes -- "removing a draft" is treated as a kind of update). - [Cancel Private Offer](https://developers.tackle.io/reference/cancelprivateoffer-1.md): Cancels a private offer that has been pushed to AWS Marketplace but not yet accepted by the buyer. The cancellation is performed asynchronously; the response indicates that the request has been accepted, not that the cancellation is complete. Track completion via the offer's `status` and `activities` fields, or via webhooks. **Required RBAC permission:** `offers:CancelOffer` - [Push Private Offer to AWS Marketplace](https://developers.tackle.io/reference/marketplacecreateprivateoffer.md): Promotes a Tackle draft private offer (one created with `create_in_marketplace: false`) into AWS Marketplace. The push is asynchronous; this endpoint returns immediately once the request has been queued. **Required RBAC permission:** `offers:CreateOfferOnMarketplace` - [List AWS Marketplace Agreements](https://developers.tackle.io/reference/listagreements.md): Returns the seller's AWS Marketplace agreements (entitlements). Used when assembling an amendment offer to discover an existing buyer-seller agreement to amend. Each agreement carries a `public_productid` field which is the AWS encrypted product ID and can be passed as the `productId` path parameter to `GET /products/{productId}/pricing`. **Required RBAC permission:** `offers:CreateDraftOffer` (agreement listing is gated on the create permission because it is part of the offer-creation flow). - [List Products](https://developers.tackle.io/reference/listproducts-1.md): Returns the AWS Marketplace product listings owned by the authenticated seller. Use this to populate a product picker before creating a private offer. Each product object includes two distinct identifiers: - `productid` -- the **Tackle** product identifier. - `encrypted_productid` -- the **AWS Marketplace Catalog API** product identifier. This is the value to pass as the `productId` path parameter on `GET /products/{productId}/pricing`. Passing `productid` instead will result in a `404` because the pricing endpoint is sourced from the AWS Catalog API and only understands the encrypted form. **Required RBAC permission:** `offers:ListProducts` - [Get Product Pricing](https://developers.tackle.io/reference/getproductpricing.md): Returns the pricing dimensions, billing terms, and payment-model defaults for an AWS Marketplace product. Use the response to pre-populate a private-offer creation form with values that match the product's public listing. **Required RBAC permission:** `offers:CreateDraftOffer` (gated on the create permission because pricing is fetched as part of the offer-creation flow). - [List Allowed Currencies](https://developers.tackle.io/reference/listallowedcurrencies.md): Returns the 3-letter ISO 4217 currency codes the calling seller may quote in a private offer. The seller is identified by the vendor ID in the bearer token; no path parameter is required. **Required RBAC permission:** `offers:CreateDraftOffer` (currency selection is part of the offer-creation flow). - [List AWS Marketplace Partners](https://developers.tackle.io/reference/listpartners.md): Returns a curated list of AWS Marketplace resale partners with their company names and AWS account IDs. Use this list to populate a partner picker when creating a partner (resale) private offer. **Required RBAC permission:** `offers:CreateDraftOffer` - [Update a Microsoft offer](https://developers.tackle.io/reference/updateprivateoffer.md): Updates an existing Microsoft private offer. If `status` is `submit_to_cloud`, the handler merges EULA documents when present, validates the request, and stores the Microsoft submission payload. Required RBAC action: `offers:UpdateOffer`. Submitting to Microsoft also requires `offers:CreateOfferOnMarketplace`. - [Get an offer](https://developers.tackle.io/reference/getprivateoffer.md): Returns one private offer by Tackle offer ID after checking that the caller can access the offer's vendor. Required RBAC action: `offers:GetOffer`. - [Create or import a Microsoft offer](https://developers.tackle.io/reference/createprivateoffer.md): Creates a new Microsoft private offer from a full offer payload, or imports an existing live Microsoft private offer when the body contains `microsoftOfferId` and `buyer_company_name`. For full create payloads, if `status` is `submit_to_cloud`, the handler validates and transforms the request for Microsoft submission before saving the offer. For import payloads, the vendor context is derived from the authenticated principal; sandbox vendors use their production parent vendor's Microsoft credentials. Required RBAC action: `offers:CreateDraftOffer`. Submitting to Microsoft also requires `offers:CreateOfferOnMarketplace`. - [List offers](https://developers.tackle.io/reference/listprivateoffers.md): Finds the authenticated seller's offers, optionally filtered by Microsoft offer reference or Microsoft plan reference. Vendor scope is derived from the bearer token; no vendor identifier is accepted from the caller. Required RBAC action: `offers:ListOffers`. - [Archive an offer](https://developers.tackle.io/reference/archiveprivateoffer.md): Marks an offer as archived and records an archive activity without changing the offer state or status. Required RBAC action: `offers:UpdateOffer`. - [Unarchive an offer](https://developers.tackle.io/reference/unarchiveprivateoffer.md): Clears an offer's archived flag and records an unarchive activity without changing the offer state or status. Required RBAC action: `offers:UpdateOffer`. - [Cancel an offer](https://developers.tackle.io/reference/cancelprivateoffer.md): Cancels an offer. Accepted offers cannot be canceled. Offers that have already been created in Microsoft are moved to pending cancellation, while offers that have not reached Microsoft are marked canceled. Required RBAC action: `offers:UpdateOffer`. - [Sync an offer from Microsoft](https://developers.tackle.io/reference/syncprivateoffer.md): Synchronizes the stored Tackle offer from Microsoft. The offer must already be associated to a Microsoft offer reference. Required RBAC action: `offers:GetOffer`. - [List Microsoft products](https://developers.tackle.io/reference/listproducts.md): Returns the Microsoft Marketplace product listings owned by the authenticated seller. Use this to populate a product picker before creating a private offer. The seller is identified by the vendor in the bearer token; no path or query parameter is required. Each product object includes the Tackle product identifier (`productid`), the listing type (`listing_type`), and human-readable `name` and `status` fields. Pass `productid` as the `id` path parameter to `GET /api/products/{id}` to fetch plan and pricing details for a specific product. Required RBAC action: `offers:ListProducts`. - [Get Microsoft product details](https://developers.tackle.io/reference/getproductdetails.md): Preferred route for retrieving Microsoft product plan and pricing details. The vendor context is derived from the authenticated principal; sandbox vendors use their production parent vendor's Microsoft credentials. Demo vendors receive static demo product details; other vendors retrieve product details from Microsoft Partner Center. Required RBAC action: `offers:CreateDraftOffer`. - [Get Microsoft market currencies](https://developers.tackle.io/reference/getmarketcurrencies.md): Returns accepted currencies and the Microsoft marketplace countries grouped by accepted currency. Required RBAC action: `offers:CreateDraftOffer`. - [Convert currencies](https://developers.tackle.io/reference/convertcurrencies.md): Converts one or more amounts from a base currency to a target currency using cached Microsoft foreign exchange rates. Row-level conversion errors are returned in `results[].error` without failing the entire request. Required RBAC action: `offers:CreateDraftOffer`. - [Create an offer notification](https://developers.tackle.io/reference/createprivateoffernotification.md): Creates an offer notification. Currently only buyer instruction emails are supported. To send buyer instructions, use `type: buyer_instructions` and `channel: email`. The handler publishes through Tackle Notification Service and marks the offer as email sent. Required RBAC action: `offers:SendOfferInstructions`. - [List contracts](https://developers.tackle.io/reference/listcontracts.md): Returns a paginated list of contracts available to your account. - [Describe contract](https://developers.tackle.io/reference/getcontract.md): Returns details for the contract identified by `contractId`. Returns `404` when no contract is found for that id. - [List Users](https://developers.tackle.io/reference/getusers.md): Retrieve a list of users. Supports pagination through startIndex and count parameters. - [Create User](https://developers.tackle.io/reference/createuser.md): Create a new user. The user will be created in Auth0 SCIM and then have their metadata updated with organization information. - [Get User by ID](https://developers.tackle.io/reference/getuserbyid.md): Retrieve a specific user by their unique identifier. - [Update User](https://developers.tackle.io/reference/updateuser.md): Update an existing user. This performs a full replacement of the user resource. - [Patch User](https://developers.tackle.io/reference/patchuser.md): Perform a partial update of a user using SCIM PATCH operations. Supports operations like updating user roles (entitlements), active status, and other attributes. Common use cases: - Update user role by patching entitlements - Deactivate a user (clears vendorid and role in metadata) - Reactivate a user (restores vendorid from organization data) - [Delete User](https://developers.tackle.io/reference/deleteuser.md): Soft-delete a user. Per SCIM 2.0 (RFC 7644 ยง3.6) this returns 204 No Content on success. Internally the user is deactivated (active=false) and the vendorid/role app_metadata are cleared so the user can no longer access Tackle resources. The underlying Auth0 user record is preserved so SSO logins can be re-authorized if the user is later re-provisioned, and so identity providers that probe DELETE during their connection-test lifecycle (e.g. JumpCloud) can complete activation without permanently destroying the test user. - [Get Service Provider Configuration](https://developers.tackle.io/reference/getserviceproviderconfig.md): Retrieve the service provider configuration as defined by SCIM 2.0 specification. This endpoint provides information about the SCIM implementation capabilities. - [Get Resource Types](https://developers.tackle.io/reference/getresourcetypes.md): Retrieve the resource types supported by this SCIM implementation. Currently supports User resources with enterprise extensions. - [Get Schemas](https://developers.tackle.io/reference/getschemas.md): Retrieve the schemas supported by this SCIM implementation. Includes both core User schema and enterprise extension schema. - [Get Schema by ID](https://developers.tackle.io/reference/getschemabyid.md): Retrieve a specific schema by its unique identifier. Supports User schema, Enterprise User extension schema, and Entitlement schema. - [Get Groups](https://developers.tackle.io/reference/getgroups.md): Retrieve available groups (roles) for the organization. This is the standard SCIM 2.0 Groups endpoint per RFC 7644. It fetches roles from the RBAC service and returns them as SCIM Group resources with meta.resourceType set to "Group", as required by identity providers (Okta, Azure AD). - [Get Entitlements](https://developers.tackle.io/reference/getentitlements.md): Returns available roles as flat entitlement objects. This is a legacy endpoint; prefer /scim/v2/Groups which returns full SCIM Group resources as required by identity providers. - [Create or Update a Webhook](https://developers.tackle.io/reference/v1-create-or-update-webhook.md): Create or update an existing webhook to receive order, private offer, and metering events as they happen - [Get All Webhooks for Vendor](https://developers.tackle.io/reference/v1-get-all-webhooks.md): Get all webhook configurations for a vendor including vendor-level and product-level webhooks - [Test a Webhook](https://developers.tackle.io/reference/v1-test-webhook.md): Verify your webhooks by sending a test payload to the configured webhook URL - [Delete a Vendor-Level Webhook](https://developers.tackle.io/reference/v1-delete-webhook.md): Delete an existing vendor-level webhook - [Get a Vendor-Level Webhook](https://developers.tackle.io/reference/v1-get-vendor-webhook.md): Get your current vendor-level webhook configuration - [Delete a Product-Level Webhook](https://developers.tackle.io/reference/v1-delete-product-webhook.md): Delete an existing webhook for a given product - [Get a Product-Level Webhook](https://developers.tackle.io/reference/v1-get-product-webhook.md): Get your current webhook configuration for a given product - [Sample Agreement (AWS) Payloads ](https://developers.tackle.io/reference/sample-agreement-aws-payloads.md): Sample webhook payloads for AWS Marketplace agreement events - [Private Offer Payload Variables](https://developers.tackle.io/reference/private-offer-payloads.md) - [Sample Private Offer Payloads](https://developers.tackle.io/reference/sample-private-offer-payloads.md) - [Metering Payload Variables](https://developers.tackle.io/reference/metering-payload-variables.md) - [Sample Metering Payloads](https://developers.tackle.io/reference/sample-metering-payloads.md) - [Webhook Delivery and Retry Policy](https://developers.tackle.io/reference/webhook-delivery-and-retry-policy.md) - [Retrieve an Access Token](https://developers.tackle.io/reference/v1-get-token.md): Retrieve an Access Token using your API Credentials - [Register an Order](https://developers.tackle.io/reference/v1-create-registration.md): Notify Tackle of order modifications or registrations (like when a submission is made on your self-hosted registration page) - [Get API Version](https://developers.tackle.io/reference/v1-get-version.md): Current API Version - [List Products](https://developers.tackle.io/reference/v1-list-products.md): List Products - [Get a Product](https://developers.tackle.io/reference/v1-get-product.md): Gets more detailed information for a specific product - [Get Product Registration Redirects](https://developers.tackle.io/reference/v1-get-product-registration-redirects.md): Get the registration redirect configuration associated with the product - [Update Product Registration Redirects](https://developers.tackle.io/reference/v1-put-products-registration-redirects.md): Allow configuration of custom registration redirects - [Delete Product Registration Redirects](https://developers.tackle.io/reference/v1-delete-product-registration-redirects.md): Delete all registration redirects associated with the product - [Get a Product Registration Redirect](https://developers.tackle.io/reference/v1-get-product-registration-redirect.md): Get the named registration redirect configuration associated with the product - [Delete a Product Registration Redirect](https://developers.tackle.io/reference/v1-delete-product-registration-redirect.md): Delete the named registration redirect configuration associated with the product - [List Subscriptions](https://developers.tackle.io/reference/v1-list-subscriptions.md): List all subscriptions, optionally filtered by search criteria - [Get a Subscription](https://developers.tackle.io/reference/v1-get-subscription.md): Gets more detailed information for a specific subscription - [Create Usage Records](https://developers.tackle.io/reference/v1-create-metering-usage-records.md): Issue usage-based charges to customers We highly recommend using the PUT method to prevent creation of duplicate usage records The POST method creates new usage records and allows creation of duplicates. For example: if you submit a usage record with start_time 12:15 UTC and 12:30 UTC for the same customer, product and dimension, two usage records will be created for that hour. We do not aggregate the submitted quantities. Be aware that marketplaces don't allow the submission of duplicates by default, it's usually only allowed for special reconciliation scenarios. Customers can be identified in two different ways: by either providing `customer_id` and `product_id`, or by providing `subscription_id` - [Create or Update Usage Records](https://developers.tackle.io/reference/v1-create-update-metering-usage-records.md): Issues or updates usage-based charges to customers If a usage record doesn't already exist for the submitted customer, product, dimension and start_time hour, a new record will be created. If there is an existing record, the quantity will be updated if the record hasn't already been submitted to the marketplace. However, if the record has already been submitted to the marketplace, a 409 - Conflict error will be returned Customers can be identified in two different ways: by either providing `customer_id` and `product_id`, or by providing `subscription_id` - [List Usage Records](https://developers.tackle.io/reference/v1-list-metering-usage-records.md): Lists all usage records - [Get a Usage Record](https://developers.tackle.io/reference/v1-get-metering-usage-record.md): Get a specific usage record - [Delete a Usage Record](https://developers.tackle.io/reference/v1-delete-metering-usage-record.md): Delete a usage record - [List Disbursements](https://developers.tackle.io/reference/v1-get-disbursements.md): List disbursements within a date range - [List Invoices](https://developers.tackle.io/reference/v1-get-invoices.md): List invoices within a date range ## Recipes - [Authenticate with Tackle](https://developers.tackle.io/recipes/authenticate-with-tackle.md) - [Create or Update a Webhook](https://developers.tackle.io/recipes/create-or-update-a-webhook.md) - [Delete a Product-Level Webhook](https://developers.tackle.io/recipes/delete-a-product-level-webhook.md) - [Delete a Vendor-Level Webhook](https://developers.tackle.io/recipes/delete-a-vendor-level-webhook.md) - [Get a List of Products](https://developers.tackle.io/recipes/get-a-list-of-products.md) - [Get a List of Subscriptions](https://developers.tackle.io/recipes/get-a-list-of-subscriptions.md) - [Get a Product](https://developers.tackle.io/recipes/get-a-product.md) - [Get a Subscription](https://developers.tackle.io/recipes/get-a-subscription.md) - [Register an Order](https://developers.tackle.io/recipes/register-an-order.md) - [Retrieve a Product-Level Webhook](https://developers.tackle.io/recipes/retrieve-a-product-level-webhook.md) - [Retrieve a Vendor-Level Webhook](https://developers.tackle.io/recipes/retrieve-a-vendor-level-webhook.md)