Skip to content
cursareDocs
Sign inGet started
Documentation
  • Overview
  • Index2
  • Organization17
  • Sales6
  • Insights8
  • Reports and safety7
  • Minor accounts8
  • Minor safety3
  • Offers11
  • Media1
  • Contents10
  • Learner delivery1
  • Learner runtime5
  • Learners12
  • Cohorts12
  • Intake forms5
  • Campaigns4
  • Teams8
  • Affiliates7
  • Links7
  • Reviews1
  • Integrations26
  • MCP2
  • Webhooks6

Links

Links operations.

7 endpoints

List links

GET/tracked-links

Lists the organization's first-party short links. Click metrics use pseudonymous server-side counts with bot filtering and hourly deduplication; purchases, learners and revenue come from authoritative business records.

Query parameters

pageinteger
pageSizeinteger
qstring
sortenum

newestoldestlabel

statusenum

allactivearchived

Responses

200List links.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/tracked-links \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "hasMore": true,
    "links": [
      {
        "affiliateCode": "string",
        "affiliateId": "string",
        "archivedAt": "2026-01-31T12:00:00.000Z",
        "createdAt": "2026-01-31T12:00:00.000Z",
        "destination": {
          "contentId": "string",
          "kind": "string",
          "offerId": "string"
        },
        "experiment": {
          "endedAt": "2026-01-31T12:00:00.000Z",
          "startedAt": "2026-01-31T12:00:00.000Z",
          "status": "running",
          "variants": [
            {
              "destination": null,
              "id": "string",
              "name": "A",
              "percentage": 0
            }
          ],
          "winner": "A"
        },
        "id": "string",
        "label": "string",
        "organizationId": "string",
        "preview": {
          "description": "string",
          "image": "string",
          "title": "string"
        },
        "slug": "string",
        "updatedAt": "2026-01-31T12:00:00.000Z",
        "utm": {
          "campaign": "string",
          "content": "string",
          "medium": "string",
          "source": "string",
          "term": "string"
        }
      }
    ],
    "page": 0,
    "pageSize": 0,
    "total": 0
  }
}

Create a link

POST/tracked-links

Creates a first-party /l/{slug} link to an offered course or a guarded HTTPS URL. A generated slug is used when omitted.

Request body

destinationobject | objectrequired
labelstringrequired
affiliateIdstring | null
previewobject
slugstring
utmobject

Responses

201Create a link.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/tracked-links \
  --request POST \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "destination": {
    "contentId": "string",
    "kind": "string",
    "offerId": "string"
  },
  "label": "string",
  "affiliateId": "string",
  "preview": {
    "description": "string",
    "image": "string",
    "title": "string"
  },
  "slug": "string",
  "utm": {
    "campaign": "string",
    "content": "string",
    "medium": "string",
    "source": "string",
    "term": "string"
  }
}'
{
  "data": {
    "affiliateCode": "string",
    "affiliateId": "string",
    "archivedAt": "2026-01-31T12:00:00.000Z",
    "createdAt": "2026-01-31T12:00:00.000Z",
    "destination": {
      "contentId": "string",
      "kind": "string",
      "offerId": "string"
    },
    "experiment": {
      "endedAt": "2026-01-31T12:00:00.000Z",
      "startedAt": "2026-01-31T12:00:00.000Z",
      "status": "running",
      "variants": [
        {
          "destination": {
            "contentId": "string",
            "kind": "string",
            "offerId": "string"
          },
          "id": "string",
          "name": "A",
          "percentage": 0
        }
      ],
      "winner": "A"
    },
    "id": "string",
    "label": "string",
    "organizationId": "string",
    "preview": {
      "description": "string",
      "image": "string",
      "title": "string"
    },
    "slug": "string",
    "updatedAt": "2026-01-31T12:00:00.000Z",
    "utm": {
      "campaign": "string",
      "content": "string",
      "medium": "string",
      "source": "string",
      "term": "string"
    }
  }
}

Get a link

GET/tracked-links/{id}

Path parameters

idstring

The tracked-link id.

Responses

200Get a link.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/tracked-links/{id} \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "affiliateCode": "string",
    "affiliateId": "string",
    "archivedAt": "2026-01-31T12:00:00.000Z",
    "createdAt": "2026-01-31T12:00:00.000Z",
    "destination": {
      "contentId": "string",
      "kind": "string",
      "offerId": "string"
    },
    "experiment": {
      "endedAt": "2026-01-31T12:00:00.000Z",
      "startedAt": "2026-01-31T12:00:00.000Z",
      "status": "running",
      "variants": [
        {
          "destination": {
            "contentId": "string",
            "kind": "string",
            "offerId": "string"
          },
          "id": "string",
          "name": "A",
          "percentage": 0
        }
      ],
      "winner": "A"
    },
    "id": "string",
    "label": "string",
    "organizationId": "string",
    "preview": {
      "description": "string",
      "image": "string",
      "title": "string"
    },
    "slug": "string",
    "updatedAt": "2026-01-31T12:00:00.000Z",
    "utm": {
      "campaign": "string",
      "content": "string",
      "medium": "string",
      "source": "string",
      "term": "string"
    }
  }
}

Update a link

PATCH/tracked-links/{id}

Updates an active link without changing its stable short slug. Archived links are immutable.

Path parameters

idstring

The tracked-link id.

Request body

affiliateIdstring | null
destinationobject | object
experimentobject | object

Start or finish an experiment. Send this field alone. Each link supports one experiment; create a new link to test again.

labelstring
previewobject
utmobject

Responses

200Update a link.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/tracked-links/{id} \
  --request PATCH \
  --header 'Authorization: Bearer cr_live_…' \
  --header 'Content-Type: application/json' \
  --data '{
  "affiliateId": "string",
  "destination": {
    "contentId": "string",
    "kind": "string",
    "offerId": "string"
  },
  "experiment": {
    "destinationB": {
      "contentId": "string",
      "kind": "string",
      "offerId": "string"
    },
    "percentageA": 0
  },
  "label": "string",
  "preview": {
    "description": "string",
    "image": "string",
    "title": "string"
  },
  "utm": {
    "campaign": "string",
    "content": "string",
    "medium": "string",
    "source": "string",
    "term": "string"
  }
}'
{
  "data": {
    "affiliateCode": "string",
    "affiliateId": "string",
    "archivedAt": "2026-01-31T12:00:00.000Z",
    "createdAt": "2026-01-31T12:00:00.000Z",
    "destination": {
      "contentId": "string",
      "kind": "string",
      "offerId": "string"
    },
    "experiment": {
      "endedAt": "2026-01-31T12:00:00.000Z",
      "startedAt": "2026-01-31T12:00:00.000Z",
      "status": "running",
      "variants": [
        {
          "destination": {
            "contentId": "string",
            "kind": "string",
            "offerId": "string"
          },
          "id": "string",
          "name": "A",
          "percentage": 0
        }
      ],
      "winner": "A"
    },
    "id": "string",
    "label": "string",
    "organizationId": "string",
    "preview": {
      "description": "string",
      "image": "string",
      "title": "string"
    },
    "slug": "string",
    "updatedAt": "2026-01-31T12:00:00.000Z",
    "utm": {
      "campaign": "string",
      "content": "string",
      "medium": "string",
      "source": "string",
      "term": "string"
    }
  }
}

Archive a link

DELETE/tracked-links/{id}

Stops future redirects while retaining historical attribution, conversions and reports. Idempotent.

Path parameters

idstring

The tracked-link id.

Responses

200Archive a link.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/tracked-links/{id} \
  --request DELETE \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "affiliateCode": "string",
    "affiliateId": "string",
    "archivedAt": "2026-01-31T12:00:00.000Z",
    "createdAt": "2026-01-31T12:00:00.000Z",
    "destination": {
      "contentId": "string",
      "kind": "string",
      "offerId": "string"
    },
    "experiment": {
      "endedAt": "2026-01-31T12:00:00.000Z",
      "startedAt": "2026-01-31T12:00:00.000Z",
      "status": "running",
      "variants": [
        {
          "destination": {
            "contentId": "string",
            "kind": "string",
            "offerId": "string"
          },
          "id": "string",
          "name": "A",
          "percentage": 0
        }
      ],
      "winner": "A"
    },
    "id": "string",
    "label": "string",
    "organizationId": "string",
    "preview": {
      "description": "string",
      "image": "string",
      "title": "string"
    },
    "slug": "string",
    "updatedAt": "2026-01-31T12:00:00.000Z",
    "utm": {
      "campaign": "string",
      "content": "string",
      "medium": "string",
      "source": "string",
      "term": "string"
    }
  }
}

Permanently delete a link

DELETE/tracked-links/{id}/permanent

Permanently removes the link and its A/B variants. Existing purchases and enrollments remain, but their link attribution is cleared. Unlike archiving, this operation cannot be undone.

Path parameters

idstring

The tracked-link id.

Responses

200Permanently delete a link.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/tracked-links/{id}/permanent \
  --request DELETE \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "deleted": true
  }
}

Get tracked-link funnel insights

GET/tracked-links/{id}/insights

Returns server-side clicks and estimated unique visitors plus authoritative checkout, purchase, learner and currency-separated revenue totals for a bounded window of at most 366 days.

Path parameters

idstring

The tracked-link id.

Query parameters

sincedate-timerequired
untildate-timerequired
variantenum

Filter to one experiment variant; omitted totals include both variants and traffic outside the experiment.

AB

Responses

200Get tracked-link funnel insights.
400Validation failed or the request body is malformed.
401Missing, invalid or revoked API key.
403The key's organization does not own this resource.
404The resource does not exist (or belongs to another org).
429Rate limit exceeded (240 reads/min, 60 writes/min per key).
500Unexpected server error.
curl https://api.cursare.com/v1/tracked-links/{id}/insights \
  --header 'Authorization: Bearer cr_live_…'
{
  "data": {
    "checkoutStarts": 0,
    "learners": 0,
    "purchases": 0,
    "requests": 0,
    "revenue": [
      {
        "currency": "string",
        "gross": 0,
        "net": 0,
        "refunded": 0
      }
    ],
    "uniqueVisitors": 0,
    "visits": 0
  }
}

Your privacy choices

The technical Tag Manager container is required to apply your choices. Analytics and marketing cookies and storage remain optional and stay off until you authorize them. Privacy Policy.

Sign-in, security, core functions and consent enforcement.

Audience measurement such as Google Analytics.

Marketing storage, campaign attribution and optional tags.