> ## Documentation Index
> Fetch the complete documentation index at: https://docs.paywithlocus.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Update a custom API action

> Updates one action without changing its stable slug. Contract and pricing changes are revalidated; a pricing change increments pricingRevision. Requires the enterprise owner with credentials:manage, catalog:write, and recent step-up.



## OpenAPI

````yaml /api-reference/openapi.json patch /credits/custom-endpoints/{providerId}/endpoints/{endpointId}
openapi: 3.1.0
info:
  title: Locus Pro API
  description: >-
    Production is live at https://api.paywithlocus.com/api. Stage remains
    available for evaluation and integration testing at
    https://api.stage.paywithlocus.com/api; credentials, balances, and tenant
    data are isolated by environment. Embedded prepaid credits over the Locus
    pay-per-use catalog. Money and top-up amounts use exact decimal strings (up
    to 6dp). Every burn requires an Idempotency-Key header. Management routes
    accept a tenant secret key or authorized dashboard session as shown per
    operation. Widget routes accept an end-user JWT alone; when a publishable
    key is present it must belong to the JWT's tenant. MCP uses OAuth 2.1
    Authorization Code with PKCE by default and also accepts the explicitly
    documented tenant secret key, end-user JWT, or scoped agent connection
    compatibility credentials. Burns accept the execution credentials shown per
    operation. Publishable keys never authorize management or burns by
    themselves.
  version: 0.6.0
servers:
  - url: https://api.paywithlocus.com/api
    description: Production
  - url: https://api.stage.paywithlocus.com/api
    description: Stage — evaluation and integration testing
security:
  - secretKey: []
tags:
  - name: Authentication
    description: Email-verified self-serve account creation and dashboard identity
  - name: Tenants
    description: Tenant profile, keys, and settings (dashboard session or secret key)
  - name: Workspace members
    description: Invite-only human workspace membership and role administration
  - name: Catalog
    description: Enable/disable APIs and set markups
  - name: Custom APIs
    description: >-
      Available when enabled for the workspace. Enterprise BYOK providers and
      schema-backed custom actions
  - name: End users
    description: End-user accounts, tokens, and allocations
  - name: Top-ups
    description: Locus-hosted checkout top-ups and quotes
  - name: Ledger
    description: Burn/top-up history and earnings
  - name: Webhooks
    description: Signed events, delivery inspection, and replay
  - name: Burn
    description: Metered pay-per-use calls
  - name: Travel routing
    description: >-
      Available when enabled for the workspace. Multi-provider flight search,
      no-dispatch planning, and feedback
  - name: MCP
    description: Stateless Streamable HTTP transport and MCP tool-result contracts
  - name: Okibi Identity
    description: >-
      Available when enabled for the workspace. Okibi identity verification and
      scoped native CLI credential bootstrap
  - name: Widget
    description: End-user JWT surface; a matching publishable key is optional
  - name: Agent-native onboarding
    description: >-
      Self-registration, human Stripe funding handoff, and restricted account
      setup for headless agents
  - name: Agent connections
    description: Scoped, expiring, revocable credentials for agent execution
  - name: Capability routing
    description: Outcome-level web search and research across eligible catalog providers
paths:
  /credits/custom-endpoints/{providerId}/endpoints/{endpointId}:
    patch:
      tags:
        - Custom APIs
      summary: Update a custom API action
      description: >-
        Updates one action without changing its stable slug. Contract and
        pricing changes are revalidated; a pricing change increments
        pricingRevision. Requires the enterprise owner with credentials:manage,
        catalog:write, and recent step-up.
      parameters:
        - $ref: '#/components/parameters/CustomProviderId'
        - $ref: '#/components/parameters/CustomEndpointId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomEndpointUpdateRequest'
      responses:
        '200':
          description: Action updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomEndpointResponse'
        '400':
          description: >-
            No changes or invalid schema, example, path, pricing, or action
            configuration
        '403':
          description: >-
            Feature, enterprise plan, owner, scope, or recent step-up
            requirement not met
        '404':
          description: Custom provider or action not found in this workspace
      security:
        - dashboardSession: []
components:
  parameters:
    CustomProviderId:
      name: providerId
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: >-
        Workspace-owned custom provider ID. This is distinct from its public
        custom-{slug} catalog name.
    CustomEndpointId:
      name: endpointId
      in: path
      required: true
      schema:
        type: string
        format: uuid
      description: Workspace-owned custom action ID.
  schemas:
    CustomEndpointUpdateRequest:
      type: object
      additionalProperties: false
      minProperties: 1
      properties:
        name:
          type: string
          minLength: 1
          maxLength: 80
        description:
          type: string
          minLength: 1
          maxLength: 500
        method:
          type: string
          enum:
            - GET
            - POST
            - PUT
            - PATCH
            - DELETE
        path:
          type: string
          minLength: 1
          maxLength: 1024
        inputSchema:
          type: object
          additionalProperties: true
        inputExample:
          type: object
          additionalProperties: true
        outputSchema:
          oneOf:
            - type: object
              additionalProperties: true
            - type: 'null'
        outputExample: {}
        providerCostUsdc:
          oneOf:
            - $ref: '#/components/schemas/DecimalString'
            - type: number
              minimum: 0
        markupBps:
          type: integer
          minimum: 0
          maximum: 100000
        flatMarkupUsdc:
          oneOf:
            - $ref: '#/components/schemas/DecimalString'
            - type: number
              minimum: 0
        enabled:
          type: boolean
      description: >-
        Any non-empty subset of the create fields except slug. Unspecified
        fields remain unchanged; all affected contracts and prices are
        revalidated.
    CustomEndpointResponse:
      type: object
      additionalProperties: false
      required:
        - success
        - endpoint
      properties:
        success:
          const: true
        endpoint:
          $ref: '#/components/schemas/CustomEndpoint'
    DecimalString:
      type: string
      pattern: ^\d+(?:\.\d{1,6})?$
      description: >-
        Non-negative exact decimal string with at most six fractional digits.
        Endpoint-specific positivity and amount limits still apply.
    CustomEndpoint:
      type: object
      additionalProperties: false
      required:
        - id
        - slug
        - publicSlug
        - name
        - description
        - method
        - path
        - inputSchema
        - inputExample
        - outputSchema
        - outputExample
        - providerCostUsdc
        - markupBps
        - flatMarkupUsdc
        - endUserPriceUsdc
        - enabled
        - pricingRevision
        - createdAt
        - updatedAt
      properties:
        id:
          type: string
          format: uuid
        slug:
          type: string
        publicSlug:
          type: string
          pattern: ^custom-[^/]+/[^/]+$
          description: Catalog and execution identity.
        name:
          type: string
        description:
          type: string
        method:
          type: string
          enum:
            - GET
            - POST
            - PUT
            - PATCH
            - DELETE
        path:
          type: string
        inputSchema:
          type: object
          additionalProperties: true
        inputExample:
          type: object
          additionalProperties: true
        outputSchema:
          oneOf:
            - type: object
              additionalProperties: true
            - type: 'null'
        outputExample: {}
        providerCostUsdc:
          $ref: '#/components/schemas/DecimalString'
        markupBps:
          type: integer
          minimum: 0
        flatMarkupUsdc:
          $ref: '#/components/schemas/DecimalString'
        endUserPriceUsdc:
          $ref: '#/components/schemas/DecimalString'
        enabled:
          type: boolean
        pricingRevision:
          type: integer
          minimum: 0
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
  securitySchemes:
    secretKey:
      type: http
      scheme: bearer
      description: Tenant secret key (lcr_…). Server-side only.
    dashboardSession:
      type: http
      scheme: bearer
      description: Locus Pro dashboard session (Cognito).

````