# Create or replace the join page

> Source: /api-reference/partner/explorer/loyalty/programs/upsert-join-page
> Full replacement of the program’s public join page content.
> Full spec: https://docs.journey.com/openapi/partner.v1.json

## `PUT /v1/partner/loyalty/programs/{externalId}/join-page`

```json
{
  "description": "Full replacement of the program’s public join page content.",
  "operationId": "loyaltyProgramsPartner_upsertJoinPage",
  "parameters": [
    {
      "description": "External loyalty program id.",
      "in": "path",
      "name": "externalId",
      "required": true,
      "schema": {
        "type": "string"
      }
    }
  ],
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/UpsertLoyaltyProgramJoinPageRequest"
        }
      }
    },
    "required": true
  },
  "responses": {
    "200": {
      "description": "The stored join page."
    },
    "400": {
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/PartnerErrorResponse"
          }
        }
      },
      "description": "Request validation failed. `errors` lists the offending fields."
    },
    "401": {
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/PartnerErrorResponse"
          }
        }
      },
      "description": "No usable credential. Send `Authorization: Bearer <jwt>` or `X-API-Key: jny_...`."
    },
    "403": {
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/PartnerErrorResponse"
          }
        }
      },
      "description": "The credential authenticated but lacks the scopes in `x-required-scopes`, or the resource belongs to another organization."
    },
    "404": {
      "content": {
        "application/json": {
          "schema": {
            "$ref": "#/components/schemas/PartnerErrorResponse"
          }
        }
      },
      "description": "No such resource, or it is outside the organization the credential resolves to."
    }
  },
  "security": [
    {
      "partnerBearer": []
    },
    {
      "partnerApiKey": []
    }
  ],
  "summary": "Create or replace the join page",
  "tags": [
    "partner/loyalty/programs"
  ],
  "x-required-scopes": [
    [
      "partner:loyalty:programs:write"
    ]
  ]
}
```