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

# Execute a return shipment intent

> Create the return shipment: books the carrier label, a real purchase on the billing profile, records the shipment on the intent (`shipmentId`, readable with `getShipment`), links it to the task and its ticket, and completes the RETURN_SHIPMENT task. A retry after a failure reuses the shipment already booked. This is the only way to complete that task: `updateTaskStatus` refuses it. To ship something outside an offboarding, use `createShipment`. Safe to retry: an intent executed earlier answers `outcome: ALREADY_EXECUTED` and does nothing again. Refused with `INTENT_NOT_FOUND`, `TICKET_CLOSED`, `TICKET_SCHEDULED` before a scheduled task wakes up, `EXECUTION_IN_PROGRESS`, `OFFBOARDING_NOT_OPEN`, `RETURN_SHIPMENT_INCOMPLETE` (fill the addresses, parcel, value and billing profile with `updateReturnShipmentIntent`), `BILLING_PROFILE_NOT_FOUND`, `FAIL_TO_CREATE_SHIPMENT` (502).

Key: WriteScope: Company


## OpenAPI

````yaml https://api.getprimo.com/openapi.json post /return-shipment-intents/{intentId}/execute
openapi: 3.1.1
info:
  title: Public API - BETA
  description: Read docs on https://docs.getprimo.com/
  version: '1.0'
  contact: {}
servers:
  - url: https://api.getprimo.com
security:
  - apikey: []
tags: []
paths:
  /return-shipment-intents/{intentId}/execute:
    post:
      tags:
        - Offboardings
      summary: Execute a return shipment intent
      description: >-
        Create the return shipment: books the carrier label, a real purchase on
        the billing profile, records the shipment on the intent (`shipmentId`,
        readable with `getShipment`), links it to the task and its ticket, and
        completes the RETURN_SHIPMENT task. A retry after a failure reuses the
        shipment already booked. This is the only way to complete that task:
        `updateTaskStatus` refuses it. To ship something outside an offboarding,
        use `createShipment`. Safe to retry: an intent executed earlier answers
        `outcome: ALREADY_EXECUTED` and does nothing again. Refused with
        `INTENT_NOT_FOUND`, `TICKET_CLOSED`, `TICKET_SCHEDULED` before a
        scheduled task wakes up, `EXECUTION_IN_PROGRESS`,
        `OFFBOARDING_NOT_OPEN`, `RETURN_SHIPMENT_INCOMPLETE` (fill the
        addresses, parcel, value and billing profile with
        `updateReturnShipmentIntent`), `BILLING_PROFILE_NOT_FOUND`,
        `FAIL_TO_CREATE_SHIPMENT` (502).
      operationId: executeReturnShipmentIntent
      parameters:
        - name: intentId
          required: true
          in: path
          schema:
            type: string
      responses:
        default:
          description: ''
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExecuteReturnShipmentIntentResult_Output'
components:
  schemas:
    ExecuteReturnShipmentIntentResult_Output:
      type: object
      properties:
        outcome:
          type: string
          description: >-
            ALREADY_EXECUTED: an earlier call did the work, nothing was done
            again
          enum:
            - EXECUTED
            - ALREADY_EXECUTED
        intent:
          type: object
          properties:
            id:
              type: string
              description: Intent id, to pass to its update and execute tools
            taskId:
              description: The typed task that tracks this step
              anyOf:
                - type: string
                - type: 'null'
            ticketId:
              description: >-
                The ticket holding that task, usually the offboarding ticket.
                Null if it could not be read back.
              anyOf:
                - type: string
                - type: 'null'
            offboardingId:
              type: string
            executedAt:
              description: When the intent executed; null until then
              anyOf:
                - type: string
                  format: date-time
                  pattern: >-
                    ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
                - type: 'null'
            fromAddress:
              anyOf:
                - type: object
                  properties:
                    name:
                      anyOf:
                        - type: string
                        - type: 'null'
                    contactName:
                      anyOf:
                        - type: string
                        - type: 'null'
                    phone:
                      anyOf:
                        - type: string
                        - type: 'null'
                    street:
                      type: string
                    complement:
                      anyOf:
                        - type: string
                        - type: 'null'
                    postalCode:
                      type: string
                    city:
                      type: string
                    country:
                      anyOf:
                        - type: string
                        - type: 'null'
                    countryCode:
                      anyOf:
                        - type: string
                        - type: 'null'
                    type:
                      anyOf:
                        - type: string
                          enum:
                            - HOME
                            - WORK
                        - type: 'null'
                  required:
                    - name
                    - contactName
                    - phone
                    - street
                    - complement
                    - postalCode
                    - city
                    - country
                    - countryCode
                    - type
                  additionalProperties: false
                - type: 'null'
            toAddress:
              anyOf:
                - type: object
                  properties:
                    name:
                      anyOf:
                        - type: string
                        - type: 'null'
                    contactName:
                      anyOf:
                        - type: string
                        - type: 'null'
                    phone:
                      anyOf:
                        - type: string
                        - type: 'null'
                    street:
                      type: string
                    complement:
                      anyOf:
                        - type: string
                        - type: 'null'
                    postalCode:
                      type: string
                    city:
                      type: string
                    country:
                      anyOf:
                        - type: string
                        - type: 'null'
                    countryCode:
                      anyOf:
                        - type: string
                        - type: 'null'
                    type:
                      anyOf:
                        - type: string
                          enum:
                            - HOME
                            - WORK
                        - type: 'null'
                  required:
                    - name
                    - contactName
                    - phone
                    - street
                    - complement
                    - postalCode
                    - city
                    - country
                    - countryCode
                    - type
                  additionalProperties: false
                - type: 'null'
            createBoxShipment:
              type: boolean
            parcel:
              anyOf:
                - type: object
                  properties:
                    weight:
                      type: number
                    length:
                      type: number
                    width:
                      type: number
                    height:
                      type: number
                  required:
                    - weight
                    - length
                    - width
                    - height
                  additionalProperties: false
                - type: 'null'
            hasInsurance:
              type: boolean
            value:
              description: Declared value, in cents
              anyOf:
                - type: number
                - type: 'null'
            content:
              type: array
              items:
                type: object
                properties:
                  id:
                    anyOf:
                      - type: string
                      - type: 'null'
                  name:
                    type: string
                  type:
                    anyOf:
                      - type: string
                      - type: 'null'
                required:
                  - id
                  - name
                  - type
                additionalProperties: false
            billingProfileId:
              anyOf:
                - type: string
                - type: 'null'
            notificationEmails:
              type: array
              items:
                type: string
            comment:
              anyOf:
                - type: string
                - type: 'null'
            shipmentId:
              description: The shipment created on execute, to read with `getShipment`
              anyOf:
                - type: string
                - type: 'null'
          required:
            - id
            - taskId
            - ticketId
            - offboardingId
            - executedAt
            - fromAddress
            - toAddress
            - createBoxShipment
            - parcel
            - hasInsurance
            - value
            - content
            - billingProfileId
            - notificationEmails
            - comment
            - shipmentId
          additionalProperties: false
      required:
        - outcome
        - intent
      additionalProperties: false
  securitySchemes:
    apikey:
      scheme: bearer
      bearerFormat: API key
      type: http
      description: >-
        Use your Primo API key in the Authorization header as `Bearer
        <API_KEY>`.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.