# Which workspace a campaign is in, for a link that names no workspace

For an old link (`/links/campaigns/<id>`, an email from before
workspace URLs), so the app can send the tab to
`/links/w/<slug>/campaigns/<id>`. It works across the caller's
workspaces: the token may be for any of them.

It answers only when Links would let the caller read the campaign in
its own workspace: they are a member with a product seat, Links is
on there, and campaigns are readable by every member there; archived campaigns are located too.

Every other case gets the same 404, byte for byte: no such campaign,
one the caller can't read, Links turned off there, a record from
before workspaces, a malformed id, or a request made with an API key
or an OAuth grant (those are bound to one workspace by consent). Both
answers are `Cache-Control: no-store`. Rate-limited per user and per
client IP (the edge's CF-Connecting-IP), one limit across the three
locate routes.


Canonical: https://easerix.com/docs/developers/api/links/campaigns/locateCampaign

{/* This file was generated by Fumadocs. Do not edit this file directly. Any changes should be made by running the generation command again. */}

export default function Layout(props) {
  const { APIPage, OpenAPIPage } = props.components ?? {};
  // "APIPage" is the old name from v10, this allows both for backward compatibility
  const Comp = OpenAPIPage ?? APIPage;
  return (
    <>
      {props.children}
      <Comp document="links" operations={[{"path":"/v1/campaigns/{id}/locate","method":"get"}]} />
    </>
  );
}
